mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-01-11 10:25:16 +00:00
Merge branch 'master' into hooks_part2
This commit is contained in:
commit
d44295ef71
@ -7,19 +7,19 @@ on:
|
|||||||
description: 'cuda version'
|
description: 'cuda version'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
default: "124"
|
default: "126"
|
||||||
|
|
||||||
python_minor:
|
python_minor:
|
||||||
description: 'python minor version'
|
description: 'python minor version'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
default: "12"
|
default: "13"
|
||||||
|
|
||||||
python_patch:
|
python_patch:
|
||||||
description: 'python patch version'
|
description: 'python patch version'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
default: "4"
|
default: "1"
|
||||||
# push:
|
# push:
|
||||||
# branches:
|
# branches:
|
||||||
# - master
|
# - master
|
||||||
|
@ -5,7 +5,7 @@ This module provides type hinting and concrete convenience types for node develo
|
|||||||
If cloned to the custom_nodes directory of ComfyUI, types can be imported using:
|
If cloned to the custom_nodes directory of ComfyUI, types can be imported using:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from comfy_types import IO, ComfyNodeABC, CheckLazyMixin
|
from comfy.comfy_types import IO, ComfyNodeABC, CheckLazyMixin
|
||||||
|
|
||||||
class ExampleNode(ComfyNodeABC):
|
class ExampleNode(ComfyNodeABC):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from comfy_types import IO, ComfyNodeABC, InputTypeDict
|
from comfy.comfy_types import IO, ComfyNodeABC, InputTypeDict
|
||||||
from inspect import cleandoc
|
from inspect import cleandoc
|
||||||
|
|
||||||
|
|
||||||
class ExampleNode(ComfyNodeABC):
|
class ExampleNode(ComfyNodeABC):
|
||||||
"""An example node that just adds 1 to an input integer.
|
"""An example node that just adds 1 to an input integer.
|
||||||
|
|
||||||
* Requires an IDE configured with analysis paths etc to be worth looking at.
|
* Requires a modern IDE to provide any benefit (detail: an IDE configured with analysis paths etc).
|
||||||
* Not intended for use in ComfyUI.
|
* This node is intended as an example for developers only.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DESCRIPTION = cleandoc(__doc__)
|
DESCRIPTION = cleandoc(__doc__)
|
||||||
|
@ -17,10 +17,10 @@ import math
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from typing import Optional, NamedTuple, List, Protocol
|
from typing import Optional, NamedTuple, List, Protocol
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from typing import Optional, NamedTuple, List
|
from typing import Optional, NamedTuple, List
|
||||||
from typing_extensions import Protocol
|
from typing_extensions import Protocol
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
@ -1121,9 +1121,8 @@ def soft_empty_cache(force=False):
|
|||||||
elif is_ascend_npu():
|
elif is_ascend_npu():
|
||||||
torch.npu.empty_cache()
|
torch.npu.empty_cache()
|
||||||
elif torch.cuda.is_available():
|
elif torch.cuda.is_available():
|
||||||
if force or is_nvidia(): #This seems to make things worse on ROCm so I only do it for cuda
|
torch.cuda.empty_cache()
|
||||||
torch.cuda.empty_cache()
|
torch.cuda.ipc_collect()
|
||||||
torch.cuda.ipc_collect()
|
|
||||||
|
|
||||||
def unload_all_models():
|
def unload_all_models():
|
||||||
free_memory(1e30, get_torch_device())
|
free_memory(1e30, get_torch_device())
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from .k_diffusion import sampling as k_diffusion_sampling
|
from .k_diffusion import sampling as k_diffusion_sampling
|
||||||
from .extra_samplers import uni_pc
|
from .extra_samplers import uni_pc
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, Callable, NamedTuple
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from comfy.model_patcher import ModelPatcher
|
from comfy.model_patcher import ModelPatcher
|
||||||
from comfy.model_base import BaseModel
|
from comfy.model_base import BaseModel
|
||||||
from comfy.controlnet import ControlBase
|
from comfy.controlnet import ControlBase
|
||||||
import torch
|
import torch
|
||||||
|
from functools import partial
|
||||||
import collections
|
import collections
|
||||||
from comfy import model_management
|
from comfy import model_management
|
||||||
import math
|
import math
|
||||||
@ -224,7 +225,7 @@ def _calc_cond_batch(model: 'BaseModel', conds: list[list[dict]], x_in: torch.Te
|
|||||||
default_conds.append(default_c)
|
default_conds.append(default_c)
|
||||||
|
|
||||||
if has_default_conds:
|
if has_default_conds:
|
||||||
finalize_default_conds(model, hooked_to_run, default_conds, x_in, timestep)
|
finalize_default_conds(model, hooked_to_run, default_conds, x_in, timestep, model_options)
|
||||||
|
|
||||||
model.current_patcher.prepare_state(timestep)
|
model.current_patcher.prepare_state(timestep)
|
||||||
|
|
||||||
@ -920,31 +921,37 @@ def sample(model, noise, positive, negative, cfg, device, sampler, sigmas, model
|
|||||||
return cfg_guider.sample(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed)
|
return cfg_guider.sample(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed)
|
||||||
|
|
||||||
|
|
||||||
SCHEDULER_NAMES = ["normal", "karras", "exponential", "sgm_uniform", "simple", "ddim_uniform", "beta", "linear_quadratic", "kl_optimal"]
|
|
||||||
SAMPLER_NAMES = KSAMPLER_NAMES + ["ddim", "uni_pc", "uni_pc_bh2"]
|
SAMPLER_NAMES = KSAMPLER_NAMES + ["ddim", "uni_pc", "uni_pc_bh2"]
|
||||||
|
|
||||||
def calculate_sigmas(model_sampling, scheduler_name, steps):
|
class SchedulerHandler(NamedTuple):
|
||||||
if scheduler_name == "karras":
|
handler: Callable[..., torch.Tensor]
|
||||||
sigmas = k_diffusion_sampling.get_sigmas_karras(n=steps, sigma_min=float(model_sampling.sigma_min), sigma_max=float(model_sampling.sigma_max))
|
# Boolean indicates whether to call the handler like:
|
||||||
elif scheduler_name == "exponential":
|
# scheduler_function(model_sampling, steps) or
|
||||||
sigmas = k_diffusion_sampling.get_sigmas_exponential(n=steps, sigma_min=float(model_sampling.sigma_min), sigma_max=float(model_sampling.sigma_max))
|
# scheduler_function(n, sigma_min: float, sigma_max: float)
|
||||||
elif scheduler_name == "normal":
|
use_ms: bool = True
|
||||||
sigmas = normal_scheduler(model_sampling, steps)
|
|
||||||
elif scheduler_name == "simple":
|
SCHEDULER_HANDLERS = {
|
||||||
sigmas = simple_scheduler(model_sampling, steps)
|
"normal": SchedulerHandler(normal_scheduler),
|
||||||
elif scheduler_name == "ddim_uniform":
|
"karras": SchedulerHandler(k_diffusion_sampling.get_sigmas_karras, use_ms=False),
|
||||||
sigmas = ddim_scheduler(model_sampling, steps)
|
"exponential": SchedulerHandler(k_diffusion_sampling.get_sigmas_exponential, use_ms=False),
|
||||||
elif scheduler_name == "sgm_uniform":
|
"sgm_uniform": SchedulerHandler(partial(normal_scheduler, sgm=True)),
|
||||||
sigmas = normal_scheduler(model_sampling, steps, sgm=True)
|
"simple": SchedulerHandler(simple_scheduler),
|
||||||
elif scheduler_name == "beta":
|
"ddim_uniform": SchedulerHandler(ddim_scheduler),
|
||||||
sigmas = beta_scheduler(model_sampling, steps)
|
"beta": SchedulerHandler(beta_scheduler),
|
||||||
elif scheduler_name == "linear_quadratic":
|
"linear_quadratic": SchedulerHandler(linear_quadratic_schedule),
|
||||||
sigmas = linear_quadratic_schedule(model_sampling, steps)
|
"kl_optimal": SchedulerHandler(kl_optimal_scheduler, use_ms=False),
|
||||||
elif scheduler_name == "kl_optimal":
|
}
|
||||||
sigmas = kl_optimal_scheduler(n=steps, sigma_min=float(model_sampling.sigma_min), sigma_max=float(model_sampling.sigma_max))
|
SCHEDULER_NAMES = list(SCHEDULER_HANDLERS)
|
||||||
else:
|
|
||||||
logging.error("error invalid scheduler {}".format(scheduler_name))
|
def calculate_sigmas(model_sampling: object, scheduler_name: str, steps: int) -> torch.Tensor:
|
||||||
return sigmas
|
handler = SCHEDULER_HANDLERS.get(scheduler_name)
|
||||||
|
if handler is None:
|
||||||
|
err = f"error invalid scheduler {scheduler_name}"
|
||||||
|
logging.error(err)
|
||||||
|
raise ValueError(err)
|
||||||
|
if handler.use_ms:
|
||||||
|
return handler.handler(model_sampling, steps)
|
||||||
|
return handler.handler(n=steps, sigma_min=float(model_sampling.sigma_min), sigma_max=float(model_sampling.sigma_max))
|
||||||
|
|
||||||
def sampler_object(name):
|
def sampler_object(name):
|
||||||
if name == "uni_pc":
|
if name == "uni_pc":
|
||||||
|
@ -893,7 +893,7 @@ def tiled_scale_multidim(samples, function, tile=(64, 64), overlap=8, upscale_am
|
|||||||
out = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device)
|
out = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device)
|
||||||
out_div = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device)
|
out_div = torch.zeros([s.shape[0], out_channels] + mult_list_upscale(s.shape[2:]), device=output_device)
|
||||||
|
|
||||||
positions = [range(0, s.shape[d+2], tile[d] - overlap[d]) if s.shape[d+2] > tile[d] else [0] for d in range(dims)]
|
positions = [range(0, s.shape[d+2] - overlap[d], tile[d] - overlap[d]) if s.shape[d+2] > tile[d] else [0] for d in range(dims)]
|
||||||
|
|
||||||
for it in itertools.product(*positions):
|
for it in itertools.product(*positions):
|
||||||
s_in = s
|
s_in = s
|
||||||
|
@ -26,6 +26,7 @@ class Load3D():
|
|||||||
"bg_color": ("STRING", {"default": "#000000", "multiline": False}),
|
"bg_color": ("STRING", {"default": "#000000", "multiline": False}),
|
||||||
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
||||||
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
||||||
|
"fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}),
|
||||||
}}
|
}}
|
||||||
|
|
||||||
RETURN_TYPES = ("IMAGE", "MASK", "STRING")
|
RETURN_TYPES = ("IMAGE", "MASK", "STRING")
|
||||||
@ -37,13 +38,22 @@ class Load3D():
|
|||||||
CATEGORY = "3d"
|
CATEGORY = "3d"
|
||||||
|
|
||||||
def process(self, model_file, image, **kwargs):
|
def process(self, model_file, image, **kwargs):
|
||||||
imagepath = folder_paths.get_annotated_filepath(image)
|
if isinstance(image, dict):
|
||||||
|
image_path = folder_paths.get_annotated_filepath(image['image'])
|
||||||
|
mask_path = folder_paths.get_annotated_filepath(image['mask'])
|
||||||
|
|
||||||
load_image_node = nodes.LoadImage()
|
load_image_node = nodes.LoadImage()
|
||||||
|
output_image, ignore_mask = load_image_node.load_image(image=image_path)
|
||||||
|
ignore_image, output_mask = load_image_node.load_image(image=mask_path)
|
||||||
|
|
||||||
output_image, output_mask = load_image_node.load_image(image=imagepath)
|
return output_image, output_mask, model_file,
|
||||||
|
else:
|
||||||
return output_image, output_mask, model_file,
|
# to avoid the format is not dict which will happen the FE code is not compatibility to core,
|
||||||
|
# we need to this to double-check, it can be removed after merged FE into the core
|
||||||
|
image_path = folder_paths.get_annotated_filepath(image)
|
||||||
|
load_image_node = nodes.LoadImage()
|
||||||
|
output_image, output_mask = load_image_node.load_image(image=image_path)
|
||||||
|
return output_image, output_mask, model_file,
|
||||||
|
|
||||||
class Load3DAnimation():
|
class Load3DAnimation():
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -67,6 +77,7 @@ class Load3DAnimation():
|
|||||||
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
||||||
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
||||||
"animation_speed": (["0.1", "0.5", "1", "1.5", "2"], {"default": "1"}),
|
"animation_speed": (["0.1", "0.5", "1", "1.5", "2"], {"default": "1"}),
|
||||||
|
"fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}),
|
||||||
}}
|
}}
|
||||||
|
|
||||||
RETURN_TYPES = ("IMAGE", "MASK", "STRING")
|
RETURN_TYPES = ("IMAGE", "MASK", "STRING")
|
||||||
@ -78,13 +89,20 @@ class Load3DAnimation():
|
|||||||
CATEGORY = "3d"
|
CATEGORY = "3d"
|
||||||
|
|
||||||
def process(self, model_file, image, **kwargs):
|
def process(self, model_file, image, **kwargs):
|
||||||
imagepath = folder_paths.get_annotated_filepath(image)
|
if isinstance(image, dict):
|
||||||
|
image_path = folder_paths.get_annotated_filepath(image['image'])
|
||||||
|
mask_path = folder_paths.get_annotated_filepath(image['mask'])
|
||||||
|
|
||||||
load_image_node = nodes.LoadImage()
|
load_image_node = nodes.LoadImage()
|
||||||
|
output_image, ignore_mask = load_image_node.load_image(image=image_path)
|
||||||
|
ignore_image, output_mask = load_image_node.load_image(image=mask_path)
|
||||||
|
|
||||||
output_image, output_mask = load_image_node.load_image(image=imagepath)
|
return output_image, output_mask, model_file,
|
||||||
|
else:
|
||||||
return output_image, output_mask, model_file,
|
image_path = folder_paths.get_annotated_filepath(image)
|
||||||
|
load_image_node = nodes.LoadImage()
|
||||||
|
output_image, output_mask = load_image_node.load_image(image=image_path)
|
||||||
|
return output_image, output_mask, model_file,
|
||||||
|
|
||||||
class Preview3D():
|
class Preview3D():
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -98,6 +116,7 @@ class Preview3D():
|
|||||||
"bg_color": ("STRING", {"default": "#000000", "multiline": False}),
|
"bg_color": ("STRING", {"default": "#000000", "multiline": False}),
|
||||||
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
"light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}),
|
||||||
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
"up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],),
|
||||||
|
"fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}),
|
||||||
}}
|
}}
|
||||||
|
|
||||||
OUTPUT_NODE = True
|
OUTPUT_NODE = True
|
||||||
|
4
main.py
4
main.py
@ -211,7 +211,9 @@ async def run(server_instance, address='', port=8188, verbose=True, call_on_star
|
|||||||
addresses = []
|
addresses = []
|
||||||
for addr in address.split(","):
|
for addr in address.split(","):
|
||||||
addresses.append((addr, port))
|
addresses.append((addr, port))
|
||||||
await asyncio.gather(server_instance.start_multi_address(addresses, call_on_start), server_instance.publish_loop())
|
await asyncio.gather(
|
||||||
|
server_instance.start_multi_address(addresses, call_on_start, verbose), server_instance.publish_loop()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def hijack_progress(server_instance):
|
def hijack_progress(server_instance):
|
||||||
|
2
nodes.py
2
nodes.py
@ -309,7 +309,7 @@ class VAEDecodeTiled:
|
|||||||
temporal_compression = vae.temporal_compression_decode()
|
temporal_compression = vae.temporal_compression_decode()
|
||||||
if temporal_compression is not None:
|
if temporal_compression is not None:
|
||||||
temporal_size = max(2, temporal_size // temporal_compression)
|
temporal_size = max(2, temporal_size // temporal_compression)
|
||||||
temporal_overlap = min(1, temporal_size // 2, temporal_overlap // temporal_compression)
|
temporal_overlap = max(1, min(temporal_size // 2, temporal_overlap // temporal_compression))
|
||||||
else:
|
else:
|
||||||
temporal_size = None
|
temporal_size = None
|
||||||
temporal_overlap = None
|
temporal_overlap = None
|
||||||
|
@ -5,8 +5,7 @@ lint.ignore = ["ALL"]
|
|||||||
lint.select = [
|
lint.select = [
|
||||||
"S307", # suspicious-eval-usage
|
"S307", # suspicious-eval-usage
|
||||||
"T201", # print-usage
|
"T201", # print-usage
|
||||||
"W292",
|
"W",
|
||||||
"W293",
|
|
||||||
# The "F" series in Ruff stands for "Pyflakes" rules, which catch various Python syntax errors and undefined names.
|
# The "F" series in Ruff stands for "Pyflakes" rules, which catch various Python syntax errors and undefined names.
|
||||||
# See all rules here: https://docs.astral.sh/ruff/rules/#pyflakes-f
|
# See all rules here: https://docs.astral.sh/ruff/rules/#pyflakes-f
|
||||||
"F",
|
"F",
|
||||||
|
@ -807,7 +807,7 @@ class PromptServer():
|
|||||||
async def start(self, address, port, verbose=True, call_on_start=None):
|
async def start(self, address, port, verbose=True, call_on_start=None):
|
||||||
await self.start_multi_address([(address, port)], call_on_start=call_on_start)
|
await self.start_multi_address([(address, port)], call_on_start=call_on_start)
|
||||||
|
|
||||||
async def start_multi_address(self, addresses, call_on_start=None):
|
async def start_multi_address(self, addresses, call_on_start=None, verbose=True):
|
||||||
runner = web.AppRunner(self.app, access_log=None)
|
runner = web.AppRunner(self.app, access_log=None)
|
||||||
await runner.setup()
|
await runner.setup()
|
||||||
ssl_ctx = None
|
ssl_ctx = None
|
||||||
@ -818,7 +818,8 @@ class PromptServer():
|
|||||||
keyfile=args.tls_keyfile)
|
keyfile=args.tls_keyfile)
|
||||||
scheme = "https"
|
scheme = "https"
|
||||||
|
|
||||||
logging.info("Starting server\n")
|
if verbose:
|
||||||
|
logging.info("Starting server\n")
|
||||||
for addr in addresses:
|
for addr in addresses:
|
||||||
address = addr[0]
|
address = addr[0]
|
||||||
port = addr[1]
|
port = addr[1]
|
||||||
@ -834,7 +835,8 @@ class PromptServer():
|
|||||||
else:
|
else:
|
||||||
address_print = address
|
address_print = address
|
||||||
|
|
||||||
logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address_print, port))
|
if verbose:
|
||||||
|
logging.info("To see the GUI go to: {}://{}:{}".format(scheme, address_print, port))
|
||||||
|
|
||||||
if call_on_start is not None:
|
if call_on_start is not None:
|
||||||
call_on_start(scheme, self.address, self.port)
|
call_on_start(scheme, self.address, self.port)
|
||||||
|
23
web/assets/BaseViewTemplate-CsEJhGbv.js
generated
vendored
Normal file
23
web/assets/BaseViewTemplate-CsEJhGbv.js
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { d as defineComponent, o as openBlock, f as createElementBlock, J as renderSlot, T as normalizeClass } from "./index-C4Fk50Nx.js";
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "BaseViewTemplate",
|
||||||
|
props: {
|
||||||
|
dark: { type: Boolean, default: false }
|
||||||
|
},
|
||||||
|
setup(__props) {
|
||||||
|
const props = __props;
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return openBlock(), createElementBlock("div", {
|
||||||
|
class: normalizeClass(["font-sans w-screen h-screen flex items-center justify-center pointer-events-auto overflow-auto", [
|
||||||
|
props.dark ? "text-neutral-300 bg-neutral-900 dark-theme" : "text-neutral-900 bg-neutral-300"
|
||||||
|
]])
|
||||||
|
}, [
|
||||||
|
renderSlot(_ctx.$slots, "default")
|
||||||
|
], 2);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
_sfc_main as _
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=BaseViewTemplate-CsEJhGbv.js.map
|
1
web/assets/DownloadGitView-B3f7KHY3.js.map
generated
vendored
1
web/assets/DownloadGitView-B3f7KHY3.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"DownloadGitView-B3f7KHY3.js","sources":["../../src/views/DownloadGitView.vue"],"sourcesContent":["<template>\n <div\n class=\"font-sans w-screen h-screen mx-0 grid place-items-center justify-center items-center text-neutral-900 bg-neutral-300 pointer-events-auto\"\n >\n <div\n class=\"col-start-1 h-screen row-start-1 place-content-center mx-auto overflow-y-auto\"\n >\n <div\n class=\"max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding\"\n >\n <!-- Header -->\n <h1 class=\"mt-24 text-4xl font-bold text-red-500\">\n {{ $t('downloadGit.title') }}\n </h1>\n\n <!-- Message -->\n <div class=\"space-y-4\">\n <p class=\"text-xl\">\n {{ $t('downloadGit.message') }}\n </p>\n <p class=\"text-xl\">\n {{ $t('downloadGit.instructions') }}\n </p>\n <p class=\"text-m\">\n {{ $t('downloadGit.warning') }}\n </p>\n </div>\n\n <!-- Actions -->\n <div class=\"flex gap-4 flex-row-reverse\">\n <Button\n :label=\"$t('downloadGit.gitWebsite')\"\n icon=\"pi pi-external-link\"\n icon-pos=\"right\"\n @click=\"openGitDownloads\"\n severity=\"primary\"\n />\n <Button\n :label=\"$t('downloadGit.skip')\"\n icon=\"pi pi-exclamation-triangle\"\n @click=\"skipGit\"\n severity=\"secondary\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nconst openGitDownloads = () => {\n window.open('https://git-scm.com/downloads/', '_blank')\n}\n\nconst skipGit = () => {\n console.warn('pushing')\n const router = useRouter()\n router.push('install')\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAqDA,UAAM,mBAAmB,6BAAM;AACtB,aAAA,KAAK,kCAAkC,QAAQ;AAAA,IAAA,GAD/B;AAIzB,UAAM,UAAU,6BAAM;AACpB,cAAQ,KAAK,SAAS;AACtB,YAAM,SAAS;AACf,aAAO,KAAK,SAAS;AAAA,IAAA,GAHP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
44
web/assets/DownloadGitView-B3f7KHY3.js → web/assets/DownloadGitView-DP1MIWYX.js
generated
vendored
44
web/assets/DownloadGitView-B3f7KHY3.js → web/assets/DownloadGitView-DP1MIWYX.js
generated
vendored
@ -1,15 +1,14 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { a as defineComponent, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, bU as useRouter } from "./index-DIU5yZe9.js";
|
import { d as defineComponent, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, X as toDisplayString, N as createVNode, j as unref, l as script, bW as useRouter } from "./index-C4Fk50Nx.js";
|
||||||
const _hoisted_1 = { class: "font-sans w-screen h-screen mx-0 grid place-items-center justify-center items-center text-neutral-900 bg-neutral-300 pointer-events-auto" };
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
const _hoisted_2 = { class: "col-start-1 h-screen row-start-1 place-content-center mx-auto overflow-y-auto" };
|
const _hoisted_1 = { class: "max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding" };
|
||||||
const _hoisted_3 = { class: "max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding" };
|
const _hoisted_2 = { class: "mt-24 text-4xl font-bold text-red-500" };
|
||||||
const _hoisted_4 = { class: "mt-24 text-4xl font-bold text-red-500" };
|
const _hoisted_3 = { class: "space-y-4" };
|
||||||
const _hoisted_5 = { class: "space-y-4" };
|
const _hoisted_4 = { class: "text-xl" };
|
||||||
const _hoisted_6 = { class: "text-xl" };
|
const _hoisted_5 = { class: "text-xl" };
|
||||||
const _hoisted_7 = { class: "text-xl" };
|
const _hoisted_6 = { class: "text-m" };
|
||||||
const _hoisted_8 = { class: "text-m" };
|
const _hoisted_7 = { class: "flex gap-4 flex-row-reverse" };
|
||||||
const _hoisted_9 = { class: "flex gap-4 flex-row-reverse" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
__name: "DownloadGitView",
|
__name: "DownloadGitView",
|
||||||
setup(__props) {
|
setup(__props) {
|
||||||
@ -22,16 +21,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
router.push("install");
|
router.push("install");
|
||||||
}, "skipGit");
|
}, "skipGit");
|
||||||
return (_ctx, _cache) => {
|
return (_ctx, _cache) => {
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
return openBlock(), createBlock(_sfc_main$1, null, {
|
||||||
createBaseVNode("div", _hoisted_2, [
|
default: withCtx(() => [
|
||||||
createBaseVNode("div", _hoisted_3, [
|
createBaseVNode("div", _hoisted_1, [
|
||||||
createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.title")), 1),
|
createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("downloadGit.title")), 1),
|
||||||
createBaseVNode("div", _hoisted_5, [
|
createBaseVNode("div", _hoisted_3, [
|
||||||
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.message")), 1),
|
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.message")), 1),
|
||||||
createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("downloadGit.instructions")), 1),
|
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("downloadGit.instructions")), 1),
|
||||||
createBaseVNode("p", _hoisted_8, toDisplayString(_ctx.$t("downloadGit.warning")), 1)
|
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.warning")), 1)
|
||||||
]),
|
]),
|
||||||
createBaseVNode("div", _hoisted_9, [
|
createBaseVNode("div", _hoisted_7, [
|
||||||
createVNode(unref(script), {
|
createVNode(unref(script), {
|
||||||
label: _ctx.$t("downloadGit.gitWebsite"),
|
label: _ctx.$t("downloadGit.gitWebsite"),
|
||||||
icon: "pi pi-external-link",
|
icon: "pi pi-external-link",
|
||||||
@ -47,12 +46,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}, null, 8, ["label"])
|
}, null, 8, ["label"])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
]),
|
||||||
]);
|
_: 1
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
export {
|
export {
|
||||||
_sfc_main as default
|
_sfc_main as default
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=DownloadGitView-B3f7KHY3.js.map
|
//# sourceMappingURL=DownloadGitView-DP1MIWYX.js.map
|
1
web/assets/ExtensionPanel-ByeZ01RF.js.map
generated
vendored
1
web/assets/ExtensionPanel-ByeZ01RF.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"ExtensionPanel-ByeZ01RF.js","sources":["../../src/components/dialog/content/setting/ExtensionPanel.vue"],"sourcesContent":["<template>\n <PanelTemplate value=\"Extension\" class=\"extension-panel\">\n <template #header>\n <SearchBox\n v-model=\"filters['global'].value\"\n :placeholder=\"$t('g.searchExtensions') + '...'\"\n />\n <Message v-if=\"hasChanges\" severity=\"info\" pt:text=\"w-full\">\n <ul>\n <li v-for=\"ext in changedExtensions\" :key=\"ext.name\">\n <span>\n {{ extensionStore.isExtensionEnabled(ext.name) ? '[-]' : '[+]' }}\n </span>\n {{ ext.name }}\n </li>\n </ul>\n <div class=\"flex justify-end\">\n <Button\n :label=\"$t('g.reloadToApplyChanges')\"\n @click=\"applyChanges\"\n outlined\n severity=\"danger\"\n />\n </div>\n </Message>\n </template>\n <DataTable\n :value=\"extensionStore.extensions\"\n stripedRows\n size=\"small\"\n :filters=\"filters\"\n >\n <Column field=\"name\" :header=\"$t('g.extensionName')\" sortable></Column>\n <Column\n :pt=\"{\n bodyCell: 'flex items-center justify-end'\n }\"\n >\n <template #body=\"slotProps\">\n <ToggleSwitch\n v-model=\"editingEnabledExtensions[slotProps.data.name]\"\n @change=\"updateExtensionStatus\"\n />\n </template>\n </Column>\n </DataTable>\n </PanelTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted } from 'vue'\nimport { useExtensionStore } from '@/stores/extensionStore'\nimport { useSettingStore } from '@/stores/settingStore'\nimport DataTable from 'primevue/datatable'\nimport Column from 'primevue/column'\nimport ToggleSwitch from 'primevue/toggleswitch'\nimport Button from 'primevue/button'\nimport Message from 'primevue/message'\nimport { FilterMatchMode } from '@primevue/core/api'\nimport PanelTemplate from './PanelTemplate.vue'\nimport SearchBox from '@/components/common/SearchBox.vue'\n\nconst filters = ref({\n global: { value: '', matchMode: FilterMatchMode.CONTAINS }\n})\n\nconst extensionStore = useExtensionStore()\nconst settingStore = useSettingStore()\n\nconst editingEnabledExtensions = ref<Record<string, boolean>>({})\n\nonMounted(() => {\n extensionStore.extensions.forEach((ext) => {\n editingEnabledExtensions.value[ext.name] =\n extensionStore.isExtensionEnabled(ext.name)\n })\n})\n\nconst changedExtensions = computed(() => {\n return extensionStore.extensions.filter(\n (ext) =>\n editingEnabledExtensions.value[ext.name] !==\n extensionStore.isExtensionEnabled(ext.name)\n )\n})\n\nconst hasChanges = computed(() => {\n return changedExtensions.value.length > 0\n})\n\nconst updateExtensionStatus = () => {\n const editingDisabledExtensionNames = Object.entries(\n editingEnabledExtensions.value\n )\n .filter(([_, enabled]) => !enabled)\n .map(([name]) => name)\n\n settingStore.set('Comfy.Extension.Disabled', [\n ...extensionStore.inactiveDisabledExtensionNames,\n ...editingDisabledExtensionNames\n ])\n}\n\nconst applyChanges = () => {\n // Refresh the page to apply changes\n window.location.reload()\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;AA8DA,UAAM,UAAU,IAAI;AAAA,MAClB,QAAQ,EAAE,OAAO,IAAI,WAAW,gBAAgB,SAAS;AAAA,IAAA,CAC1D;AAED,UAAM,iBAAiB;AACvB,UAAM,eAAe;AAEf,UAAA,2BAA2B,IAA6B,CAAA,CAAE;AAEhE,cAAU,MAAM;AACC,qBAAA,WAAW,QAAQ,CAAC,QAAQ;AACzC,iCAAyB,MAAM,IAAI,IAAI,IACrC,eAAe,mBAAmB,IAAI,IAAI;AAAA,MAAA,CAC7C;AAAA,IAAA,CACF;AAEK,UAAA,oBAAoB,SAAS,MAAM;AACvC,aAAO,eAAe,WAAW;AAAA,QAC/B,CAAC,QACC,yBAAyB,MAAM,IAAI,IAAI,MACvC,eAAe,mBAAmB,IAAI,IAAI;AAAA,MAAA;AAAA,IAC9C,CACD;AAEK,UAAA,aAAa,SAAS,MAAM;AACzB,aAAA,kBAAkB,MAAM,SAAS;AAAA,IAAA,CACzC;AAED,UAAM,wBAAwB,6BAAM;AAClC,YAAM,gCAAgC,OAAO;AAAA,QAC3C,yBAAyB;AAAA,MAExB,EAAA,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,EACjC,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AAEvB,mBAAa,IAAI,4BAA4B;AAAA,QAC3C,GAAG,eAAe;AAAA,QAClB,GAAG;AAAA,MAAA,CACJ;AAAA,IAAA,GAV2B;AAa9B,UAAM,eAAe,6BAAM;AAEzB,aAAO,SAAS;IAAO,GAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
88
web/assets/ExtensionPanel-ByeZ01RF.js → web/assets/ExtensionPanel-CxijYN47.js
generated
vendored
88
web/assets/ExtensionPanel-ByeZ01RF.js → web/assets/ExtensionPanel-CxijYN47.js
generated
vendored
@ -1,8 +1,9 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { a as defineComponent, r as ref, ck as FilterMatchMode, co as useExtensionStore, u as useSettingStore, o as onMounted, q as computed, f as openBlock, x as createBlock, y as withCtx, h as createVNode, cl as SearchBox, z as unref, bW as script, A as createBaseVNode, g as createElementBlock, Q as renderList, a8 as toDisplayString, ay as createTextVNode, P as Fragment, D as script$1, i as createCommentVNode, c5 as script$3, cm as _sfc_main$1 } from "./index-DIU5yZe9.js";
|
import { d as defineComponent, ab as ref, cn as FilterMatchMode, cs as useExtensionStore, a as useSettingStore, m as onMounted, c as computed, o as openBlock, k as createBlock, M as withCtx, N as createVNode, co as SearchBox, j as unref, bZ as script, H as createBaseVNode, f as createElementBlock, E as renderList, X as toDisplayString, aE as createTextVNode, F as Fragment, l as script$1, I as createCommentVNode, aI as script$3, bO as script$4, c4 as script$5, cp as _sfc_main$1 } from "./index-C4Fk50Nx.js";
|
||||||
import { s as script$2, a as script$4 } from "./index-D3u7l7ha.js";
|
import { s as script$2, a as script$6 } from "./index-CK0rrCYF.js";
|
||||||
import "./index-d698Brhb.js";
|
import "./index-lMQBwSDj.js";
|
||||||
|
import "./index-B7ycxfFq.js";
|
||||||
const _hoisted_1 = { class: "flex justify-end" };
|
const _hoisted_1 = { class: "flex justify-end" };
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
__name: "ExtensionPanel",
|
__name: "ExtensionPanel",
|
||||||
@ -35,9 +36,49 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
...editingDisabledExtensionNames
|
...editingDisabledExtensionNames
|
||||||
]);
|
]);
|
||||||
}, "updateExtensionStatus");
|
}, "updateExtensionStatus");
|
||||||
|
const enableAllExtensions = /* @__PURE__ */ __name(() => {
|
||||||
|
extensionStore.extensions.forEach((ext) => {
|
||||||
|
if (extensionStore.isExtensionReadOnly(ext.name)) return;
|
||||||
|
editingEnabledExtensions.value[ext.name] = true;
|
||||||
|
});
|
||||||
|
updateExtensionStatus();
|
||||||
|
}, "enableAllExtensions");
|
||||||
|
const disableAllExtensions = /* @__PURE__ */ __name(() => {
|
||||||
|
extensionStore.extensions.forEach((ext) => {
|
||||||
|
if (extensionStore.isExtensionReadOnly(ext.name)) return;
|
||||||
|
editingEnabledExtensions.value[ext.name] = false;
|
||||||
|
});
|
||||||
|
updateExtensionStatus();
|
||||||
|
}, "disableAllExtensions");
|
||||||
|
const disableThirdPartyExtensions = /* @__PURE__ */ __name(() => {
|
||||||
|
extensionStore.extensions.forEach((ext) => {
|
||||||
|
if (extensionStore.isCoreExtension(ext.name)) return;
|
||||||
|
editingEnabledExtensions.value[ext.name] = false;
|
||||||
|
});
|
||||||
|
updateExtensionStatus();
|
||||||
|
}, "disableThirdPartyExtensions");
|
||||||
const applyChanges = /* @__PURE__ */ __name(() => {
|
const applyChanges = /* @__PURE__ */ __name(() => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, "applyChanges");
|
}, "applyChanges");
|
||||||
|
const menu = ref();
|
||||||
|
const contextMenuItems = [
|
||||||
|
{
|
||||||
|
label: "Enable All",
|
||||||
|
icon: "pi pi-check",
|
||||||
|
command: enableAllExtensions
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Disable All",
|
||||||
|
icon: "pi pi-times",
|
||||||
|
command: disableAllExtensions
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Disable 3rd Party",
|
||||||
|
icon: "pi pi-times",
|
||||||
|
command: disableThirdPartyExtensions,
|
||||||
|
disabled: !extensionStore.hasThirdPartyExtensions
|
||||||
|
}
|
||||||
|
];
|
||||||
return (_ctx, _cache) => {
|
return (_ctx, _cache) => {
|
||||||
return openBlock(), createBlock(_sfc_main$1, {
|
return openBlock(), createBlock(_sfc_main$1, {
|
||||||
value: "Extension",
|
value: "Extension",
|
||||||
@ -52,7 +93,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
hasChanges.value ? (openBlock(), createBlock(unref(script), {
|
hasChanges.value ? (openBlock(), createBlock(unref(script), {
|
||||||
key: 0,
|
key: 0,
|
||||||
severity: "info",
|
severity: "info",
|
||||||
"pt:text": "w-full"
|
"pt:text": "w-full",
|
||||||
|
class: "max-h-96 overflow-y-auto"
|
||||||
}, {
|
}, {
|
||||||
default: withCtx(() => [
|
default: withCtx(() => [
|
||||||
createBaseVNode("ul", null, [
|
createBaseVNode("ul", null, [
|
||||||
@ -78,7 +120,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
})) : createCommentVNode("", true)
|
})) : createCommentVNode("", true)
|
||||||
]),
|
]),
|
||||||
default: withCtx(() => [
|
default: withCtx(() => [
|
||||||
createVNode(unref(script$4), {
|
createVNode(unref(script$6), {
|
||||||
value: unref(extensionStore).extensions,
|
value: unref(extensionStore).extensions,
|
||||||
stripedRows: "",
|
stripedRows: "",
|
||||||
size: "small",
|
size: "small",
|
||||||
@ -86,19 +128,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}, {
|
}, {
|
||||||
default: withCtx(() => [
|
default: withCtx(() => [
|
||||||
createVNode(unref(script$2), {
|
createVNode(unref(script$2), {
|
||||||
field: "name",
|
|
||||||
header: _ctx.$t("g.extensionName"),
|
header: _ctx.$t("g.extensionName"),
|
||||||
sortable: ""
|
sortable: "",
|
||||||
}, null, 8, ["header"]),
|
field: "name"
|
||||||
|
}, {
|
||||||
|
body: withCtx((slotProps) => [
|
||||||
|
createTextVNode(toDisplayString(slotProps.data.name) + " ", 1),
|
||||||
|
unref(extensionStore).isCoreExtension(slotProps.data.name) ? (openBlock(), createBlock(unref(script$3), {
|
||||||
|
key: 0,
|
||||||
|
value: "Core"
|
||||||
|
})) : createCommentVNode("", true)
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
}, 8, ["header"]),
|
||||||
createVNode(unref(script$2), { pt: {
|
createVNode(unref(script$2), { pt: {
|
||||||
|
headerCell: "flex items-center justify-end",
|
||||||
bodyCell: "flex items-center justify-end"
|
bodyCell: "flex items-center justify-end"
|
||||||
} }, {
|
} }, {
|
||||||
|
header: withCtx(() => [
|
||||||
|
createVNode(unref(script$1), {
|
||||||
|
icon: "pi pi-ellipsis-h",
|
||||||
|
text: "",
|
||||||
|
severity: "secondary",
|
||||||
|
onClick: _cache[1] || (_cache[1] = ($event) => menu.value.show($event))
|
||||||
|
}),
|
||||||
|
createVNode(unref(script$4), {
|
||||||
|
ref_key: "menu",
|
||||||
|
ref: menu,
|
||||||
|
model: contextMenuItems
|
||||||
|
}, null, 512)
|
||||||
|
]),
|
||||||
body: withCtx((slotProps) => [
|
body: withCtx((slotProps) => [
|
||||||
createVNode(unref(script$3), {
|
createVNode(unref(script$5), {
|
||||||
|
disabled: unref(extensionStore).isExtensionReadOnly(slotProps.data.name),
|
||||||
modelValue: editingEnabledExtensions.value[slotProps.data.name],
|
modelValue: editingEnabledExtensions.value[slotProps.data.name],
|
||||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"),
|
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"),
|
||||||
onChange: updateExtensionStatus
|
onChange: updateExtensionStatus
|
||||||
}, null, 8, ["modelValue", "onUpdate:modelValue"])
|
}, null, 8, ["disabled", "modelValue", "onUpdate:modelValue"])
|
||||||
]),
|
]),
|
||||||
_: 1
|
_: 1
|
||||||
})
|
})
|
||||||
@ -114,4 +180,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
export {
|
export {
|
||||||
_sfc_main as default
|
_sfc_main as default
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=ExtensionPanel-ByeZ01RF.js.map
|
//# sourceMappingURL=ExtensionPanel-CxijYN47.js.map
|
1
web/assets/GraphView-BWxgNrh6.js.map
generated
vendored
1
web/assets/GraphView-BWxgNrh6.js.map
generated
vendored
File diff suppressed because one or more lines are too long
328
web/assets/GraphView-B3TpSwhZ.css → web/assets/GraphView-CIRWBKTm.css
generated
vendored
328
web/assets/GraphView-B3TpSwhZ.css → web/assets/GraphView-CIRWBKTm.css
generated
vendored
@ -1,90 +1,31 @@
|
|||||||
|
|
||||||
.group-title-editor.node-title-editor[data-v-8a100d5a] {
|
.comfy-menu-hamburger[data-v-5661bed0] {
|
||||||
|
pointer-events: auto;
|
||||||
|
position: fixed;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
padding: 0.25rem;
|
|
||||||
}
|
|
||||||
[data-v-8a100d5a] .editable-text {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
[data-v-8a100d5a] .editable-text input {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
/* Override the default font size */
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.side-bar-button-icon {
|
[data-v-e50caa15] .p-splitter-gutter {
|
||||||
font-size: var(--sidebar-icon-size) !important;
|
|
||||||
}
|
|
||||||
.side-bar-button-selected .side-bar-button-icon {
|
|
||||||
font-size: var(--sidebar-icon-size) !important;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-bar-button[data-v-caa3ee9c] {
|
|
||||||
width: var(--sidebar-width);
|
|
||||||
height: var(--sidebar-width);
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-caa3ee9c],
|
|
||||||
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-caa3ee9c]:hover {
|
|
||||||
border-left: 4px solid var(--p-button-text-primary-color);
|
|
||||||
}
|
|
||||||
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-caa3ee9c],
|
|
||||||
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-caa3ee9c]:hover {
|
|
||||||
border-right: 4px solid var(--p-button-text-primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--sidebar-width: 64px;
|
|
||||||
--sidebar-icon-size: 1.5rem;
|
|
||||||
}
|
|
||||||
:root .small-sidebar {
|
|
||||||
--sidebar-width: 40px;
|
|
||||||
--sidebar-icon-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-tool-bar-container[data-v-7851c166] {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
pointer-events: auto;
|
|
||||||
|
|
||||||
width: var(--sidebar-width);
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
background-color: var(--comfy-menu-secondary-bg);
|
|
||||||
color: var(--fg-color);
|
|
||||||
box-shadow: var(--bar-shadow);
|
|
||||||
}
|
|
||||||
.side-tool-bar-end[data-v-7851c166] {
|
|
||||||
align-self: flex-end;
|
|
||||||
margin-top: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-7c3279c1] .p-splitter-gutter {
|
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
[data-v-7c3279c1] .p-splitter-gutter:hover,[data-v-7c3279c1] .p-splitter-gutter[data-p-gutter-resizing='true'] {
|
[data-v-e50caa15] .p-splitter-gutter:hover,[data-v-e50caa15] .p-splitter-gutter[data-p-gutter-resizing='true'] {
|
||||||
transition: background-color 0.2s ease 300ms;
|
transition: background-color 0.2s ease 300ms;
|
||||||
background-color: var(--p-primary-color);
|
background-color: var(--p-primary-color);
|
||||||
}
|
}
|
||||||
.side-bar-panel[data-v-7c3279c1] {
|
.side-bar-panel[data-v-e50caa15] {
|
||||||
background-color: var(--bg-color);
|
background-color: var(--bg-color);
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
.bottom-panel[data-v-7c3279c1] {
|
.bottom-panel[data-v-e50caa15] {
|
||||||
background-color: var(--bg-color);
|
background-color: var(--bg-color);
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
}
|
}
|
||||||
.splitter-overlay[data-v-7c3279c1] {
|
.splitter-overlay[data-v-e50caa15] {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
border-style: none;
|
border-style: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
.splitter-overlay-root[data-v-7c3279c1] {
|
.splitter-overlay-root[data-v-e50caa15] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
@ -98,7 +39,50 @@
|
|||||||
z-index: 999;
|
z-index: 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-v-d7cc0bce] .highlight {
|
.p-buttongroup-vertical[data-v-cf40dd39] {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
border-radius: var(--p-button-border-radius);
|
||||||
|
overflow: hidden;
|
||||||
|
border: 1px solid var(--p-panel-border-color);
|
||||||
|
}
|
||||||
|
.p-buttongroup-vertical .p-button[data-v-cf40dd39] {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-tooltip[data-v-46859edf] {
|
||||||
|
background: var(--comfy-input-bg);
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
|
||||||
|
color: var(--input-text);
|
||||||
|
font-family: sans-serif;
|
||||||
|
left: 0;
|
||||||
|
max-width: 30vw;
|
||||||
|
padding: 4px 8px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
transform: translate(5px, calc(-100% - 5px));
|
||||||
|
white-space: pre-wrap;
|
||||||
|
z-index: 99999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.group-title-editor.node-title-editor[data-v-12d3fd12] {
|
||||||
|
z-index: 9999;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
[data-v-12d3fd12] .editable-text {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
[data-v-12d3fd12] .editable-text input {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
/* Override the default font size */
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-v-5741c9ae] .highlight {
|
||||||
background-color: var(--p-primary-color);
|
background-color: var(--p-primary-color);
|
||||||
color: var(--p-primary-contrast-color);
|
color: var(--p-primary-contrast-color);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -125,58 +109,107 @@
|
|||||||
align-items: flex-start !important;
|
align-items: flex-start !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-tooltip[data-v-9ecc8adc] {
|
.side-bar-button-icon {
|
||||||
background: var(--comfy-input-bg);
|
font-size: var(--sidebar-icon-size) !important;
|
||||||
border-radius: 5px;
|
}
|
||||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
|
.side-bar-button-selected .side-bar-button-icon {
|
||||||
color: var(--input-text);
|
font-size: var(--sidebar-icon-size) !important;
|
||||||
font-family: sans-serif;
|
font-weight: bold;
|
||||||
left: 0;
|
|
||||||
max-width: 30vw;
|
|
||||||
padding: 4px 8px;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
transform: translate(5px, calc(-100% - 5px));
|
|
||||||
white-space: pre-wrap;
|
|
||||||
z-index: 99999;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.p-buttongroup-vertical[data-v-94481f39] {
|
.side-bar-button[data-v-6ab4daa6] {
|
||||||
display: flex;
|
width: var(--sidebar-width);
|
||||||
flex-direction: column;
|
height: var(--sidebar-width);
|
||||||
border-radius: var(--p-button-border-radius);
|
|
||||||
overflow: hidden;
|
|
||||||
border: 1px solid var(--p-panel-border-color);
|
|
||||||
}
|
|
||||||
.p-buttongroup-vertical .p-button[data-v-94481f39] {
|
|
||||||
margin: 0;
|
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6],
|
||||||
|
.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover {
|
||||||
|
border-left: 4px solid var(--p-button-text-primary-color);
|
||||||
|
}
|
||||||
|
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6],
|
||||||
|
.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover {
|
||||||
|
border-right: 4px solid var(--p-button-text-primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--sidebar-width: 64px;
|
||||||
|
--sidebar-icon-size: 1.5rem;
|
||||||
|
}
|
||||||
|
:root .small-sidebar {
|
||||||
|
--sidebar-width: 40px;
|
||||||
|
--sidebar-icon-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.side-tool-bar-container[data-v-37d8d7b4] {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.comfy-menu-hamburger[data-v-962c4073] {
|
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
position: fixed;
|
|
||||||
z-index: 9999;
|
width: var(--sidebar-width);
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
background-color: var(--comfy-menu-secondary-bg);
|
||||||
|
color: var(--fg-color);
|
||||||
|
box-shadow: var(--bar-shadow);
|
||||||
|
}
|
||||||
|
.side-tool-bar-end[data-v-37d8d7b4] {
|
||||||
|
align-self: flex-end;
|
||||||
|
margin-top: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-v-4cb762cb] .p-togglebutton::before {
|
[data-v-b9328350] .p-inputtext {
|
||||||
display: none
|
border-top-left-radius: 0;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
}
|
}
|
||||||
[data-v-4cb762cb] .p-togglebutton {
|
|
||||||
position: relative;
|
.comfyui-queue-button[data-v-7f4f551b] .p-splitbutton-dropdown {
|
||||||
flex-shrink: 0;
|
border-top-right-radius: 0;
|
||||||
border-radius: 0px;
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actionbar[data-v-915e5456] {
|
||||||
|
pointer-events: all;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
.actionbar.is-docked[data-v-915e5456] {
|
||||||
|
position: static;
|
||||||
|
border-style: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
padding: 0px
|
padding: 0px;
|
||||||
}
|
}
|
||||||
[data-v-4cb762cb] .p-togglebutton.p-togglebutton-checked {
|
.actionbar.is-dragging[data-v-915e5456] {
|
||||||
border-bottom-width: 2px;
|
-webkit-user-select: none;
|
||||||
border-bottom-color: var(--p-button-text-primary-color)
|
-moz-user-select: none;
|
||||||
|
user-select: none;
|
||||||
}
|
}
|
||||||
[data-v-4cb762cb] .p-togglebutton-checked .close-button,[data-v-4cb762cb] .p-togglebutton:hover .close-button {
|
[data-v-915e5456] .p-panel-content {
|
||||||
visibility: visible
|
padding: 0.25rem;
|
||||||
}
|
}
|
||||||
.status-indicator[data-v-4cb762cb] {
|
.is-docked[data-v-915e5456] .p-panel-content {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
[data-v-915e5456] .p-panel-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-menubar[data-v-6fecd137] .p-menubar-item-link svg {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
[data-v-6fecd137] .p-menubar-submenu.dropdown-direction-up {
|
||||||
|
top: auto;
|
||||||
|
bottom: 100%;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
.keybinding-tag[data-v-6fecd137] {
|
||||||
|
background: var(--p-content-hover-background);
|
||||||
|
border-color: var(--p-content-border-color);
|
||||||
|
border-style: solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-indicator[data-v-8d011a31] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
@ -184,61 +217,32 @@
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%)
|
transform: translate(-50%, -50%)
|
||||||
}
|
}
|
||||||
[data-v-4cb762cb] .p-togglebutton:hover .status-indicator {
|
|
||||||
|
[data-v-d485c044] .p-togglebutton::before {
|
||||||
display: none
|
display: none
|
||||||
}
|
}
|
||||||
[data-v-4cb762cb] .p-togglebutton .close-button {
|
[data-v-d485c044] .p-togglebutton {
|
||||||
|
position: relative;
|
||||||
|
flex-shrink: 0;
|
||||||
|
border-radius: 0px;
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0px
|
||||||
|
}
|
||||||
|
[data-v-d485c044] .p-togglebutton.p-togglebutton-checked {
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
border-bottom-color: var(--p-button-text-primary-color)
|
||||||
|
}
|
||||||
|
[data-v-d485c044] .p-togglebutton-checked .close-button,[data-v-d485c044] .p-togglebutton:hover .close-button {
|
||||||
|
visibility: visible
|
||||||
|
}
|
||||||
|
[data-v-d485c044] .p-togglebutton:hover .status-indicator {
|
||||||
|
display: none
|
||||||
|
}
|
||||||
|
[data-v-d485c044] .p-togglebutton .close-button {
|
||||||
visibility: hidden
|
visibility: hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-menubar[data-v-a2b12676] .p-menubar-item-link svg {
|
.comfyui-menu[data-v-878b63b8] {
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
[data-v-a2b12676] .p-menubar-submenu.dropdown-direction-up {
|
|
||||||
top: auto;
|
|
||||||
bottom: 100%;
|
|
||||||
flex-direction: column-reverse;
|
|
||||||
}
|
|
||||||
.keybinding-tag[data-v-a2b12676] {
|
|
||||||
background: var(--p-content-hover-background);
|
|
||||||
border-color: var(--p-content-border-color);
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
[data-v-713442be] .p-inputtext {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comfyui-queue-button[data-v-d3897845] .p-splitbutton-dropdown {
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.actionbar[data-v-542a7001] {
|
|
||||||
pointer-events: all;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 1000;
|
|
||||||
}
|
|
||||||
.actionbar.is-docked[data-v-542a7001] {
|
|
||||||
position: static;
|
|
||||||
border-style: none;
|
|
||||||
background-color: transparent;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
.actionbar.is-dragging[data-v-542a7001] {
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
[data-v-542a7001] .p-panel-content {
|
|
||||||
padding: 0.25rem;
|
|
||||||
}
|
|
||||||
[data-v-542a7001] .p-panel-header {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.comfyui-menu[data-v-d792da31] {
|
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
background: var(--comfy-menu-bg);
|
background: var(--comfy-menu-bg);
|
||||||
color: var(--fg-color);
|
color: var(--fg-color);
|
||||||
@ -251,16 +255,16 @@
|
|||||||
grid-column: 1/-1;
|
grid-column: 1/-1;
|
||||||
max-height: 90vh;
|
max-height: 90vh;
|
||||||
}
|
}
|
||||||
.comfyui-menu.dropzone[data-v-d792da31] {
|
.comfyui-menu.dropzone[data-v-878b63b8] {
|
||||||
background: var(--p-highlight-background);
|
background: var(--p-highlight-background);
|
||||||
}
|
}
|
||||||
.comfyui-menu.dropzone-active[data-v-d792da31] {
|
.comfyui-menu.dropzone-active[data-v-878b63b8] {
|
||||||
background: var(--p-highlight-background-focus);
|
background: var(--p-highlight-background-focus);
|
||||||
}
|
}
|
||||||
[data-v-d792da31] .p-menubar-item-label {
|
[data-v-878b63b8] .p-menubar-item-label {
|
||||||
line-height: revert;
|
line-height: revert;
|
||||||
}
|
}
|
||||||
.comfyui-logo[data-v-d792da31] {
|
.comfyui-logo[data-v-878b63b8] {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
6942
web/assets/GraphView-BWxgNrh6.js → web/assets/GraphView-DswvqURL.js
generated
vendored
6942
web/assets/GraphView-BWxgNrh6.js → web/assets/GraphView-DswvqURL.js
generated
vendored
File diff suppressed because one or more lines are too long
4
web/assets/InstallView-8N2LdZUx.css
generated
vendored
4
web/assets/InstallView-8N2LdZUx.css
generated
vendored
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
[data-v-7ef01cf2] .p-steppanel {
|
|
||||||
background-color: transparent
|
|
||||||
}
|
|
1235
web/assets/InstallView-DbHtR5YG.js → web/assets/InstallView-AV2llYNm.js
generated
vendored
1235
web/assets/InstallView-DbHtR5YG.js → web/assets/InstallView-AV2llYNm.js
generated
vendored
File diff suppressed because one or more lines are too long
79
web/assets/InstallView-CwQdoH-C.css
generated
vendored
Normal file
79
web/assets/InstallView-CwQdoH-C.css
generated
vendored
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
:root {
|
||||||
|
--p-tag-gap: 0.5rem;
|
||||||
|
}
|
||||||
|
.hover-brighten {
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
transition-property: filter, box-shadow;
|
||||||
|
&:hover {
|
||||||
|
filter: brightness(107%) contrast(105%);
|
||||||
|
box-shadow: 0 0 0.25rem #ffffff79;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.p-accordioncontent-content {
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(23 23 23 / var(--tw-bg-opacity));
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
}
|
||||||
|
div.selected {
|
||||||
|
.gpu-button:not(.selected) {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.gpu-button:not(.selected):hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.gpu-button {
|
||||||
|
margin: 0px;
|
||||||
|
display: flex;
|
||||||
|
width: 50%;
|
||||||
|
cursor: pointer;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: rgb(38 38 38 / var(--tw-bg-opacity));
|
||||||
|
--tw-bg-opacity: 0.5;
|
||||||
|
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 150ms;
|
||||||
|
}
|
||||||
|
.gpu-button:hover {
|
||||||
|
--tw-bg-opacity: 0.75;
|
||||||
|
}
|
||||||
|
.gpu-button {
|
||||||
|
&.selected {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(64 64 64 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
&.selected {
|
||||||
|
--tw-bg-opacity: 0.5;
|
||||||
|
}
|
||||||
|
&.selected {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
&.selected:hover {
|
||||||
|
--tw-bg-opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
.p-card-header {
|
||||||
|
flex-grow: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.p-card-body {
|
||||||
|
padding-top: 0px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-v-de33872d] .p-steppanel {
|
||||||
|
background-color: transparent
|
||||||
|
}
|
1
web/assets/InstallView-DbHtR5YG.js.map
generated
vendored
1
web/assets/InstallView-DbHtR5YG.js.map
generated
vendored
File diff suppressed because one or more lines are too long
8
web/assets/KeybindingPanel-C3wT8hYZ.css
generated
vendored
8
web/assets/KeybindingPanel-C3wT8hYZ.css
generated
vendored
@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
[data-v-c20ad403] .p-datatable-tbody > tr > td {
|
|
||||||
padding: 0.25rem;
|
|
||||||
min-height: 2rem
|
|
||||||
}
|
|
||||||
[data-v-c20ad403] .p-datatable-row-selected .actions,[data-v-c20ad403] .p-datatable-selectable-row:hover .actions {
|
|
||||||
visibility: visible
|
|
||||||
}
|
|
29
web/assets/KeybindingPanel-DC2AxNNa.js → web/assets/KeybindingPanel-CxaJ1IiJ.js
generated
vendored
29
web/assets/KeybindingPanel-DC2AxNNa.js → web/assets/KeybindingPanel-CxaJ1IiJ.js
generated
vendored
@ -1,8 +1,10 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { a as defineComponent, q as computed, f as openBlock, g as createElementBlock, P as Fragment, Q as renderList, h as createVNode, y as withCtx, ay as createTextVNode, a8 as toDisplayString, z as unref, aC as script, i as createCommentVNode, r as ref, ck as FilterMatchMode, O as useKeybindingStore, F as useCommandStore, I as useI18n, aS as normalizeI18nKey, aL as watchEffect, bn as useToast, t as resolveDirective, x as createBlock, cl as SearchBox, A as createBaseVNode, D as script$2, aq as script$4, br as withModifiers, bW as script$5, aI as script$6, v as withDirectives, cm as _sfc_main$2, R as pushScopeId, U as popScopeId, ce as KeyComboImpl, cn as KeybindingImpl, _ as _export_sfc } from "./index-DIU5yZe9.js";
|
import { d as defineComponent, c as computed, o as openBlock, f as createElementBlock, F as Fragment, E as renderList, N as createVNode, M as withCtx, aE as createTextVNode, X as toDisplayString, j as unref, aI as script, I as createCommentVNode, ab as ref, cn as FilterMatchMode, a$ as useKeybindingStore, a2 as useCommandStore, a1 as useI18n, af as normalizeI18nKey, w as watchEffect, bs as useToast, r as resolveDirective, k as createBlock, co as SearchBox, H as createBaseVNode, l as script$2, av as script$4, bM as withModifiers, bZ as script$5, aP as script$6, i as withDirectives, cp as _sfc_main$2, aL as pushScopeId, aM as popScopeId, cq as KeyComboImpl, cr as KeybindingImpl, _ as _export_sfc } from "./index-C4Fk50Nx.js";
|
||||||
import { s as script$1, a as script$3 } from "./index-D3u7l7ha.js";
|
import { s as script$1, a as script$3 } from "./index-CK0rrCYF.js";
|
||||||
import "./index-d698Brhb.js";
|
import { u as useKeybindingService } from "./keybindingService-D48fkLBy.js";
|
||||||
|
import "./index-lMQBwSDj.js";
|
||||||
|
import "./index-B7ycxfFq.js";
|
||||||
const _hoisted_1$1 = {
|
const _hoisted_1$1 = {
|
||||||
key: 0,
|
key: 0,
|
||||||
class: "px-2"
|
class: "px-2"
|
||||||
@ -35,7 +37,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c20ad403"), n = n(), popScopeId(), n), "_withScopeId");
|
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-2554ab36"), n = n(), popScopeId(), n), "_withScopeId");
|
||||||
const _hoisted_1 = { class: "actions invisible flex flex-row" };
|
const _hoisted_1 = { class: "actions invisible flex flex-row" };
|
||||||
const _hoisted_2 = ["title"];
|
const _hoisted_2 = ["title"];
|
||||||
const _hoisted_3 = { key: 1 };
|
const _hoisted_3 = { key: 1 };
|
||||||
@ -46,6 +48,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
||||||
});
|
});
|
||||||
const keybindingStore = useKeybindingStore();
|
const keybindingStore = useKeybindingStore();
|
||||||
|
const keybindingService = useKeybindingService();
|
||||||
const commandStore = useCommandStore();
|
const commandStore = useCommandStore();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const commandsData = computed(() => {
|
const commandsData = computed(() => {
|
||||||
@ -90,7 +93,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
function removeKeybinding(commandData) {
|
function removeKeybinding(commandData) {
|
||||||
if (commandData.keybinding) {
|
if (commandData.keybinding) {
|
||||||
keybindingStore.unsetKeybinding(commandData.keybinding);
|
keybindingStore.unsetKeybinding(commandData.keybinding);
|
||||||
keybindingStore.persistUserKeybindings();
|
keybindingService.persistUserKeybindings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__name(removeKeybinding, "removeKeybinding");
|
__name(removeKeybinding, "removeKeybinding");
|
||||||
@ -114,7 +117,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
if (updated) {
|
if (updated) {
|
||||||
keybindingStore.persistUserKeybindings();
|
keybindingService.persistUserKeybindings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cancelEdit();
|
cancelEdit();
|
||||||
@ -123,7 +126,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
async function resetKeybindings() {
|
async function resetKeybindings() {
|
||||||
keybindingStore.resetKeybindings();
|
keybindingStore.resetKeybindings();
|
||||||
await keybindingStore.persistUserKeybindings();
|
await keybindingService.persistUserKeybindings();
|
||||||
toast.add({
|
toast.add({
|
||||||
severity: "info",
|
severity: "info",
|
||||||
summary: "Info",
|
summary: "Info",
|
||||||
@ -182,7 +185,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}),
|
}),
|
||||||
createVNode(unref(script$1), {
|
createVNode(unref(script$1), {
|
||||||
field: "id",
|
field: "id",
|
||||||
header: "Command ID",
|
header: _ctx.$t("g.command"),
|
||||||
sortable: "",
|
sortable: "",
|
||||||
class: "max-w-64 2xl:max-w-full"
|
class: "max-w-64 2xl:max-w-full"
|
||||||
}, {
|
}, {
|
||||||
@ -193,10 +196,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}, toDisplayString(slotProps.data.label), 9, _hoisted_2)
|
}, toDisplayString(slotProps.data.label), 9, _hoisted_2)
|
||||||
]),
|
]),
|
||||||
_: 1
|
_: 1
|
||||||
}),
|
}, 8, ["header"]),
|
||||||
createVNode(unref(script$1), {
|
createVNode(unref(script$1), {
|
||||||
field: "keybinding",
|
field: "keybinding",
|
||||||
header: "Keybinding"
|
header: _ctx.$t("g.keybinding")
|
||||||
}, {
|
}, {
|
||||||
body: withCtx((slotProps) => [
|
body: withCtx((slotProps) => [
|
||||||
slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
|
slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
|
||||||
@ -206,7 +209,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
}, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
|
}, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
|
||||||
]),
|
]),
|
||||||
_: 1
|
_: 1
|
||||||
})
|
}, 8, ["header"])
|
||||||
]),
|
]),
|
||||||
_: 1
|
_: 1
|
||||||
}, 8, ["value", "selection", "filters"]),
|
}, 8, ["value", "selection", "filters"]),
|
||||||
@ -274,8 +277,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c20ad403"]]);
|
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2554ab36"]]);
|
||||||
export {
|
export {
|
||||||
KeybindingPanel as default
|
KeybindingPanel as default
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=KeybindingPanel-DC2AxNNa.js.map
|
//# sourceMappingURL=KeybindingPanel-CxaJ1IiJ.js.map
|
1
web/assets/KeybindingPanel-DC2AxNNa.js.map
generated
vendored
1
web/assets/KeybindingPanel-DC2AxNNa.js.map
generated
vendored
File diff suppressed because one or more lines are too long
8
web/assets/KeybindingPanel-DvrUYZ4S.css
generated
vendored
Normal file
8
web/assets/KeybindingPanel-DvrUYZ4S.css
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
[data-v-2554ab36] .p-datatable-tbody > tr > td {
|
||||||
|
padding: 0.25rem;
|
||||||
|
min-height: 2rem
|
||||||
|
}
|
||||||
|
[data-v-2554ab36] .p-datatable-row-selected .actions,[data-v-2554ab36] .p-datatable-selectable-row:hover .actions {
|
||||||
|
visibility: visible
|
||||||
|
}
|
7
web/assets/ManualConfigurationView-B6ecEClB.css
generated
vendored
Normal file
7
web/assets/ManualConfigurationView-B6ecEClB.css
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
:root {
|
||||||
|
--p-tag-gap: 0.5rem;
|
||||||
|
}
|
||||||
|
.comfy-installer {
|
||||||
|
margin-top: max(1rem, max(0px, calc((100vh - 42rem) * 0.5)));
|
||||||
|
}
|
75
web/assets/ManualConfigurationView-BA4Vtud8.js
generated
vendored
Normal file
75
web/assets/ManualConfigurationView-BA4Vtud8.js
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { d as defineComponent, a1 as useI18n, ab as ref, m as onMounted, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, X as toDisplayString, N as createVNode, j as unref, aI as script, l as script$2, c0 as electronAPI } from "./index-C4Fk50Nx.js";
|
||||||
|
import { s as script$1 } from "./index-hdfnBvYs.js";
|
||||||
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
|
import "./index-B7ycxfFq.js";
|
||||||
|
const _hoisted_1 = { class: "comfy-installer grow flex flex-col gap-4 text-neutral-300 max-w-110" };
|
||||||
|
const _hoisted_2 = { class: "text-2xl font-semibold text-neutral-100" };
|
||||||
|
const _hoisted_3 = { class: "m-1 text-neutral-300" };
|
||||||
|
const _hoisted_4 = { class: "ml-2" };
|
||||||
|
const _hoisted_5 = { class: "m-1 mb-4" };
|
||||||
|
const _hoisted_6 = { class: "m-0" };
|
||||||
|
const _hoisted_7 = { class: "m-1" };
|
||||||
|
const _hoisted_8 = { class: "font-mono" };
|
||||||
|
const _hoisted_9 = { class: "m-1" };
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "ManualConfigurationView",
|
||||||
|
setup(__props) {
|
||||||
|
const { t } = useI18n();
|
||||||
|
const electron = electronAPI();
|
||||||
|
const basePath = ref(null);
|
||||||
|
const sep = ref("/");
|
||||||
|
const restartApp = /* @__PURE__ */ __name((message) => electron.restartApp(message), "restartApp");
|
||||||
|
onMounted(async () => {
|
||||||
|
basePath.value = await electron.getBasePath();
|
||||||
|
if (basePath.value.indexOf("/") === -1) sep.value = "\\";
|
||||||
|
});
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("div", _hoisted_1, [
|
||||||
|
createBaseVNode("h2", _hoisted_2, toDisplayString(_ctx.$t("install.manualConfiguration.title")), 1),
|
||||||
|
createBaseVNode("p", _hoisted_3, [
|
||||||
|
createVNode(unref(script), {
|
||||||
|
icon: "pi pi-exclamation-triangle",
|
||||||
|
severity: "warn",
|
||||||
|
value: unref(t)("icon.exclamation-triangle")
|
||||||
|
}, null, 8, ["value"]),
|
||||||
|
createBaseVNode("strong", _hoisted_4, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
|
||||||
|
]),
|
||||||
|
createBaseVNode("div", null, [
|
||||||
|
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("install.manualConfiguration.requirements")) + ": ", 1),
|
||||||
|
createBaseVNode("ul", _hoisted_6, [
|
||||||
|
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
|
||||||
|
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1)
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("install.manualConfiguration.createVenv")) + ":", 1),
|
||||||
|
createVNode(unref(script$1), {
|
||||||
|
header: unref(t)("install.manualConfiguration.virtualEnvironmentPath")
|
||||||
|
}, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("span", _hoisted_8, toDisplayString(`${basePath.value}${sep.value}.venv${sep.value}`), 1)
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
}, 8, ["header"]),
|
||||||
|
createBaseVNode("p", _hoisted_9, toDisplayString(_ctx.$t("install.manualConfiguration.restartWhenFinished")), 1),
|
||||||
|
createVNode(unref(script$2), {
|
||||||
|
class: "place-self-end",
|
||||||
|
label: unref(t)("menuLabels.Restart"),
|
||||||
|
severity: "warn",
|
||||||
|
icon: "pi pi-refresh",
|
||||||
|
onClick: _cache[0] || (_cache[0] = ($event) => restartApp("Manual configuration complete"))
|
||||||
|
}, null, 8, ["label"])
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
_sfc_main as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=ManualConfigurationView-BA4Vtud8.js.map
|
82
web/assets/NotSupportedView-C8O1Ed5c.js
generated
vendored
82
web/assets/NotSupportedView-C8O1Ed5c.js
generated
vendored
@ -1,82 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { a as defineComponent, bU as useRouter, t as resolveDirective, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, v as withDirectives } from "./index-DIU5yZe9.js";
|
|
||||||
const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href;
|
|
||||||
const _hoisted_1 = { class: "font-sans w-screen h-screen flex items-center m-0 text-neutral-900 bg-neutral-300 pointer-events-auto" };
|
|
||||||
const _hoisted_2 = { class: "flex-grow flex items-center justify-center" };
|
|
||||||
const _hoisted_3 = { class: "flex flex-col gap-8 p-8" };
|
|
||||||
const _hoisted_4 = { class: "text-4xl font-bold text-red-500" };
|
|
||||||
const _hoisted_5 = { class: "space-y-4" };
|
|
||||||
const _hoisted_6 = { class: "text-xl" };
|
|
||||||
const _hoisted_7 = { class: "list-disc list-inside space-y-1 text-neutral-800" };
|
|
||||||
const _hoisted_8 = { class: "flex gap-4" };
|
|
||||||
const _hoisted_9 = /* @__PURE__ */ createBaseVNode("div", { class: "h-screen flex-grow-0" }, [
|
|
||||||
/* @__PURE__ */ createBaseVNode("img", {
|
|
||||||
src: _imports_0,
|
|
||||||
alt: "Sad girl illustration",
|
|
||||||
class: "h-full object-cover"
|
|
||||||
})
|
|
||||||
], -1);
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "NotSupportedView",
|
|
||||||
setup(__props) {
|
|
||||||
const openDocs = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open(
|
|
||||||
"https://github.com/Comfy-Org/desktop#currently-supported-platforms",
|
|
||||||
"_blank"
|
|
||||||
);
|
|
||||||
}, "openDocs");
|
|
||||||
const reportIssue = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
|
||||||
}, "reportIssue");
|
|
||||||
const router = useRouter();
|
|
||||||
const continueToInstall = /* @__PURE__ */ __name(() => {
|
|
||||||
router.push("/install");
|
|
||||||
}, "continueToInstall");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
const _directive_tooltip = resolveDirective("tooltip");
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("div", _hoisted_3, [
|
|
||||||
createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("notSupported.title")), 1),
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("notSupported.message")), 1),
|
|
||||||
createBaseVNode("ul", _hoisted_7, [
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1),
|
|
||||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1)
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
createBaseVNode("div", _hoisted_8, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.learnMore"),
|
|
||||||
icon: "pi pi-github",
|
|
||||||
onClick: openDocs,
|
|
||||||
severity: "secondary"
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.reportIssue"),
|
|
||||||
icon: "pi pi-flag",
|
|
||||||
onClick: reportIssue,
|
|
||||||
severity: "secondary"
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
withDirectives(createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("notSupported.continue"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
onClick: continueToInstall,
|
|
||||||
severity: "danger"
|
|
||||||
}, null, 8, ["label"]), [
|
|
||||||
[_directive_tooltip, _ctx.$t("notSupported.continueTooltip")]
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]),
|
|
||||||
_hoisted_9
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=NotSupportedView-C8O1Ed5c.js.map
|
|
1
web/assets/NotSupportedView-C8O1Ed5c.js.map
generated
vendored
1
web/assets/NotSupportedView-C8O1Ed5c.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"NotSupportedView-C8O1Ed5c.js","sources":["../../../../../../../assets/images/sad_girl.png","../../src/views/NotSupportedView.vue"],"sourcesContent":["export default \"__VITE_PUBLIC_ASSET__b82952e7__\"","<template>\n <div\n class=\"font-sans w-screen h-screen flex items-center m-0 text-neutral-900 bg-neutral-300 pointer-events-auto\"\n >\n <div class=\"flex-grow flex items-center justify-center\">\n <div class=\"flex flex-col gap-8 p-8\">\n <!-- Header -->\n <h1 class=\"text-4xl font-bold text-red-500\">\n {{ $t('notSupported.title') }}\n </h1>\n\n <!-- Message -->\n <div class=\"space-y-4\">\n <p class=\"text-xl\">\n {{ $t('notSupported.message') }}\n </p>\n <ul class=\"list-disc list-inside space-y-1 text-neutral-800\">\n <li>{{ $t('notSupported.supportedDevices.macos') }}</li>\n <li>{{ $t('notSupported.supportedDevices.windows') }}</li>\n </ul>\n </div>\n\n <!-- Actions -->\n <div class=\"flex gap-4\">\n <Button\n :label=\"$t('notSupported.learnMore')\"\n icon=\"pi pi-github\"\n @click=\"openDocs\"\n severity=\"secondary\"\n />\n <Button\n :label=\"$t('notSupported.reportIssue')\"\n icon=\"pi pi-flag\"\n @click=\"reportIssue\"\n severity=\"secondary\"\n />\n <Button\n :label=\"$t('notSupported.continue')\"\n icon=\"pi pi-arrow-right\"\n iconPos=\"right\"\n @click=\"continueToInstall\"\n severity=\"danger\"\n v-tooltip=\"$t('notSupported.continueTooltip')\"\n />\n </div>\n </div>\n </div>\n\n <!-- Right side image -->\n <div class=\"h-screen flex-grow-0\">\n <img\n src=\"/assets/images/sad_girl.png\"\n alt=\"Sad girl illustration\"\n class=\"h-full object-cover\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nconst openDocs = () => {\n window.open(\n 'https://github.com/Comfy-Org/desktop#currently-supported-platforms',\n '_blank'\n )\n}\n\nconst reportIssue = () => {\n window.open('https://forum.comfy.org/c/v1-feedback/', '_blank')\n}\n\nconst router = useRouter()\nconst continueToInstall = () => {\n router.push('/install')\n}\n</script>\n"],"names":[],"mappings":";;;AAAA,MAAe,aAAA,KAAA,IAAA,IAAA,uBAAA,YAAA,GAAA,EAAA;;;;;;;;;;;;;;;;;;;AC+Df,UAAM,WAAW,6BAAM;AACd,aAAA;AAAA,QACL;AAAA,QACA;AAAA,MAAA;AAAA,IACF,GAJe;AAOjB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAAA,GAD5C;AAIpB,UAAM,SAAS;AACf,UAAM,oBAAoB,6BAAM;AAC9B,aAAO,KAAK,UAAU;AAAA,IAAA,GADE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
86
web/assets/NotSupportedView-CRaD8u74.js
generated
vendored
Normal file
86
web/assets/NotSupportedView-CRaD8u74.js
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { d as defineComponent, bW as useRouter, r as resolveDirective, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, X as toDisplayString, N as createVNode, j as unref, l as script, i as withDirectives } from "./index-C4Fk50Nx.js";
|
||||||
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
|
const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href;
|
||||||
|
const _hoisted_1 = { class: "sad-container" };
|
||||||
|
const _hoisted_2 = /* @__PURE__ */ createBaseVNode("img", {
|
||||||
|
class: "sad-girl",
|
||||||
|
src: _imports_0,
|
||||||
|
alt: "Sad girl illustration"
|
||||||
|
}, null, -1);
|
||||||
|
const _hoisted_3 = { class: "no-drag sad-text flex items-center" };
|
||||||
|
const _hoisted_4 = { class: "flex flex-col gap-8 p-8 min-w-110" };
|
||||||
|
const _hoisted_5 = { class: "text-4xl font-bold text-red-500" };
|
||||||
|
const _hoisted_6 = { class: "space-y-4" };
|
||||||
|
const _hoisted_7 = { class: "text-xl" };
|
||||||
|
const _hoisted_8 = { class: "list-disc list-inside space-y-1 text-neutral-800" };
|
||||||
|
const _hoisted_9 = { class: "flex gap-4" };
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "NotSupportedView",
|
||||||
|
setup(__props) {
|
||||||
|
const openDocs = /* @__PURE__ */ __name(() => {
|
||||||
|
window.open(
|
||||||
|
"https://github.com/Comfy-Org/desktop#currently-supported-platforms",
|
||||||
|
"_blank"
|
||||||
|
);
|
||||||
|
}, "openDocs");
|
||||||
|
const reportIssue = /* @__PURE__ */ __name(() => {
|
||||||
|
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
||||||
|
}, "reportIssue");
|
||||||
|
const router = useRouter();
|
||||||
|
const continueToInstall = /* @__PURE__ */ __name(() => {
|
||||||
|
router.push("/install");
|
||||||
|
}, "continueToInstall");
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
const _directive_tooltip = resolveDirective("tooltip");
|
||||||
|
return openBlock(), createBlock(_sfc_main$1, null, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("div", _hoisted_1, [
|
||||||
|
_hoisted_2,
|
||||||
|
createBaseVNode("div", _hoisted_3, [
|
||||||
|
createBaseVNode("div", _hoisted_4, [
|
||||||
|
createBaseVNode("h1", _hoisted_5, toDisplayString(_ctx.$t("notSupported.title")), 1),
|
||||||
|
createBaseVNode("div", _hoisted_6, [
|
||||||
|
createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("notSupported.message")), 1),
|
||||||
|
createBaseVNode("ul", _hoisted_8, [
|
||||||
|
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1),
|
||||||
|
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1)
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
createBaseVNode("div", _hoisted_9, [
|
||||||
|
createVNode(unref(script), {
|
||||||
|
label: _ctx.$t("notSupported.learnMore"),
|
||||||
|
icon: "pi pi-github",
|
||||||
|
onClick: openDocs,
|
||||||
|
severity: "secondary"
|
||||||
|
}, null, 8, ["label"]),
|
||||||
|
createVNode(unref(script), {
|
||||||
|
label: _ctx.$t("notSupported.reportIssue"),
|
||||||
|
icon: "pi pi-flag",
|
||||||
|
onClick: reportIssue,
|
||||||
|
severity: "secondary"
|
||||||
|
}, null, 8, ["label"]),
|
||||||
|
withDirectives(createVNode(unref(script), {
|
||||||
|
label: _ctx.$t("notSupported.continue"),
|
||||||
|
icon: "pi pi-arrow-right",
|
||||||
|
iconPos: "right",
|
||||||
|
onClick: continueToInstall,
|
||||||
|
severity: "danger"
|
||||||
|
}, null, 8, ["label"]), [
|
||||||
|
[_directive_tooltip, _ctx.$t("notSupported.continueTooltip")]
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
_sfc_main as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=NotSupportedView-CRaD8u74.js.map
|
17
web/assets/NotSupportedView-bFzHmqNj.css
generated
vendored
Normal file
17
web/assets/NotSupportedView-bFzHmqNj.css
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
.sad-container {
|
||||||
|
display: grid;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
grid-template-columns: 25rem 1fr;
|
||||||
|
& > * {
|
||||||
|
grid-row: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.sad-text {
|
||||||
|
grid-column: 1/3;
|
||||||
|
}
|
||||||
|
.sad-girl {
|
||||||
|
grid-column: 2/3;
|
||||||
|
width: min(75vw, 100vh);
|
||||||
|
}
|
1
web/assets/ServerConfigPanel-CvXC1Xmx.js.map
generated
vendored
1
web/assets/ServerConfigPanel-CvXC1Xmx.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"ServerConfigPanel-CvXC1Xmx.js","sources":["../../src/components/dialog/content/setting/ServerConfigPanel.vue"],"sourcesContent":["<template>\n <PanelTemplate value=\"Server-Config\" class=\"server-config-panel\">\n <template #header>\n <div class=\"flex flex-col gap-2\">\n <Message\n v-if=\"modifiedConfigs.length > 0\"\n severity=\"info\"\n pt:text=\"w-full\"\n >\n <p>\n {{ $t('serverConfig.modifiedConfigs') }}\n </p>\n <ul>\n <li v-for=\"config in modifiedConfigs\" :key=\"config.id\">\n {{ config.name }}: {{ config.initialValue }} → {{ config.value }}\n </li>\n </ul>\n <div class=\"flex justify-end gap-2\">\n <Button\n :label=\"$t('serverConfig.revertChanges')\"\n @click=\"revertChanges\"\n outlined\n />\n <Button\n :label=\"$t('serverConfig.restart')\"\n @click=\"restartApp\"\n outlined\n severity=\"danger\"\n />\n </div>\n </Message>\n <Message v-if=\"commandLineArgs\" severity=\"secondary\" pt:text=\"w-full\">\n <template #icon>\n <i-lucide:terminal class=\"text-xl font-bold\" />\n </template>\n <div class=\"flex items-center justify-between\">\n <p>{{ commandLineArgs }}</p>\n <Button\n icon=\"pi pi-clipboard\"\n @click=\"copyCommandLineArgs\"\n severity=\"secondary\"\n text\n />\n </div>\n </Message>\n </div>\n </template>\n <div\n v-for=\"([label, items], i) in Object.entries(serverConfigsByCategory)\"\n :key=\"label\"\n >\n <Divider v-if=\"i > 0\" />\n <h3>{{ $t(`serverConfigCategories.${label}`, label) }}</h3>\n <div\n v-for=\"item in items\"\n :key=\"item.name\"\n class=\"flex items-center mb-4\"\n >\n <FormItem\n :item=\"translateItem(item)\"\n v-model:formValue=\"item.value\"\n :id=\"item.id\"\n :labelClass=\"{\n 'text-highlight': item.initialValue !== item.value\n }\"\n />\n </div>\n </div>\n </PanelTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport Message from 'primevue/message'\nimport Divider from 'primevue/divider'\nimport FormItem from '@/components/common/FormItem.vue'\nimport PanelTemplate from './PanelTemplate.vue'\nimport { useServerConfigStore } from '@/stores/serverConfigStore'\nimport { storeToRefs } from 'pinia'\nimport { electronAPI } from '@/utils/envUtil'\nimport { useSettingStore } from '@/stores/settingStore'\nimport { watch } from 'vue'\nimport { useCopyToClipboard } from '@/hooks/clipboardHooks'\nimport type { FormItem as FormItemType } from '@/types/settingTypes'\nimport type { ServerConfig } from '@/constants/serverConfig'\nimport { useI18n } from 'vue-i18n'\n\nconst settingStore = useSettingStore()\nconst serverConfigStore = useServerConfigStore()\nconst {\n serverConfigsByCategory,\n serverConfigValues,\n launchArgs,\n commandLineArgs,\n modifiedConfigs\n} = storeToRefs(serverConfigStore)\n\nconst revertChanges = () => {\n serverConfigStore.revertChanges()\n}\n\nconst restartApp = () => {\n electronAPI().restartApp()\n}\n\nwatch(launchArgs, (newVal) => {\n settingStore.set('Comfy.Server.LaunchArgs', newVal)\n})\n\nwatch(serverConfigValues, (newVal) => {\n settingStore.set('Comfy.Server.ServerConfigValues', newVal)\n})\n\nconst { copyToClipboard } = useCopyToClipboard()\nconst copyCommandLineArgs = async () => {\n await copyToClipboard(commandLineArgs.value)\n}\n\nconst { t } = useI18n()\nconst translateItem = (item: ServerConfig<any>): FormItemType => {\n return {\n ...item,\n name: t(`serverConfigItems.${item.id}.name`, item.name),\n tooltip: item.tooltip\n ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip)\n : undefined\n }\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,eAAe;AACrB,UAAM,oBAAoB;AACpB,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,YAAY,iBAAiB;AAEjC,UAAM,gBAAgB,6BAAM;AAC1B,wBAAkB,cAAc;AAAA,IAAA,GADZ;AAItB,UAAM,aAAa,6BAAM;AACvB,kBAAA,EAAc;IAAW,GADR;AAIb,UAAA,YAAY,CAAC,WAAW;AACf,mBAAA,IAAI,2BAA2B,MAAM;AAAA,IAAA,CACnD;AAEK,UAAA,oBAAoB,CAAC,WAAW;AACvB,mBAAA,IAAI,mCAAmC,MAAM;AAAA,IAAA,CAC3D;AAEK,UAAA,EAAE,oBAAoB;AAC5B,UAAM,sBAAsB,mCAAY;AAChC,YAAA,gBAAgB,gBAAgB,KAAK;AAAA,IAAA,GADjB;AAItB,UAAA,EAAE,MAAM;AACR,UAAA,gBAAgB,wBAAC,SAA0C;AACxD,aAAA;AAAA,QACL,GAAG;AAAA,QACH,MAAM,EAAE,qBAAqB,KAAK,EAAE,SAAS,KAAK,IAAI;AAAA,QACtD,SAAS,KAAK,UACV,EAAE,qBAAqB,KAAK,EAAE,YAAY,KAAK,OAAO,IACtD;AAAA,MAAA;AAAA,IACN,GAPoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
8
web/assets/ServerConfigPanel-CvXC1Xmx.js → web/assets/ServerConfigPanel-TLv4HMGK.js
generated
vendored
8
web/assets/ServerConfigPanel-CvXC1Xmx.js → web/assets/ServerConfigPanel-TLv4HMGK.js
generated
vendored
@ -1,7 +1,7 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { A as createBaseVNode, f as openBlock, g as createElementBlock, aZ as markRaw, a as defineComponent, u as useSettingStore, aK as storeToRefs, w as watch, cL as useCopyToClipboard, I as useI18n, x as createBlock, y as withCtx, z as unref, bW as script, a8 as toDisplayString, Q as renderList, P as Fragment, h as createVNode, D as script$1, i as createCommentVNode, bN as script$2, cM as FormItem, cm as _sfc_main$1, bZ as electronAPI } from "./index-DIU5yZe9.js";
|
import { H as createBaseVNode, o as openBlock, f as createElementBlock, Z as markRaw, d as defineComponent, a as useSettingStore, aS as storeToRefs, a5 as watch, cO as useCopyToClipboard, a1 as useI18n, k as createBlock, M as withCtx, j as unref, bZ as script, X as toDisplayString, E as renderList, F as Fragment, N as createVNode, l as script$1, I as createCommentVNode, bQ as script$2, cP as FormItem, cp as _sfc_main$1, c0 as electronAPI } from "./index-C4Fk50Nx.js";
|
||||||
import { u as useServerConfigStore } from "./serverConfigStore-DYv7_Nld.js";
|
import { u as useServerConfigStore } from "./serverConfigStore-BawYAb1j.js";
|
||||||
const _hoisted_1$1 = {
|
const _hoisted_1$1 = {
|
||||||
viewBox: "0 0 24 24",
|
viewBox: "0 0 24 24",
|
||||||
width: "1.2em",
|
width: "1.2em",
|
||||||
@ -131,7 +131,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => {
|
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => {
|
||||||
return openBlock(), createElementBlock("div", {
|
return openBlock(), createElementBlock("div", {
|
||||||
key: item.name,
|
key: item.name,
|
||||||
class: "flex items-center mb-4"
|
class: "mb-4"
|
||||||
}, [
|
}, [
|
||||||
createVNode(FormItem, {
|
createVNode(FormItem, {
|
||||||
item: translateItem(item),
|
item: translateItem(item),
|
||||||
@ -155,4 +155,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|||||||
export {
|
export {
|
||||||
_sfc_main as default
|
_sfc_main as default
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=ServerConfigPanel-CvXC1Xmx.js.map
|
//# sourceMappingURL=ServerConfigPanel-TLv4HMGK.js.map
|
92
web/assets/ServerStartView-BvuHEhuL.js
generated
vendored
92
web/assets/ServerStartView-BvuHEhuL.js
generated
vendored
@ -1,92 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { a as defineComponent, I as useI18n, r as ref, bX as ProgressStatus, o as onMounted, f as openBlock, g as createElementBlock, A as createBaseVNode, ay as createTextVNode, a8 as toDisplayString, z as unref, i as createCommentVNode, h as createVNode, D as script, x as createBlock, v as withDirectives, ad as vShow, bY as BaseTerminal, R as pushScopeId, U as popScopeId, bZ as electronAPI, _ as _export_sfc } from "./index-DIU5yZe9.js";
|
|
||||||
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c0d3157e"), n = n(), popScopeId(), n), "_withScopeId");
|
|
||||||
const _hoisted_1 = { class: "font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" };
|
|
||||||
const _hoisted_2 = { class: "text-2xl font-bold" };
|
|
||||||
const _hoisted_3 = { key: 0 };
|
|
||||||
const _hoisted_4 = {
|
|
||||||
key: 0,
|
|
||||||
class: "flex flex-col items-center gap-4"
|
|
||||||
};
|
|
||||||
const _hoisted_5 = { class: "flex items-center my-4 gap-2" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "ServerStartView",
|
|
||||||
setup(__props) {
|
|
||||||
const electron = electronAPI();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const status = ref(ProgressStatus.INITIAL_STATE);
|
|
||||||
const electronVersion = ref("");
|
|
||||||
let xterm;
|
|
||||||
const terminalVisible = ref(true);
|
|
||||||
const updateProgress = /* @__PURE__ */ __name(({ status: newStatus }) => {
|
|
||||||
status.value = newStatus;
|
|
||||||
if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false;
|
|
||||||
else xterm?.clear();
|
|
||||||
}, "updateProgress");
|
|
||||||
const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => {
|
|
||||||
xterm = terminal;
|
|
||||||
useAutoSize(root, true, true);
|
|
||||||
electron.onLogMessage((message) => {
|
|
||||||
terminal.write(message);
|
|
||||||
});
|
|
||||||
terminal.options.cursorBlink = false;
|
|
||||||
terminal.options.disableStdin = true;
|
|
||||||
terminal.options.cursorInactiveStyle = "block";
|
|
||||||
}, "terminalCreated");
|
|
||||||
const reinstall = /* @__PURE__ */ __name(() => electron.reinstall(), "reinstall");
|
|
||||||
const reportIssue = /* @__PURE__ */ __name(() => {
|
|
||||||
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
|
||||||
}, "reportIssue");
|
|
||||||
const openLogs = /* @__PURE__ */ __name(() => electron.openLogsFolder(), "openLogs");
|
|
||||||
onMounted(async () => {
|
|
||||||
electron.sendReady();
|
|
||||||
electron.onProgressUpdate(updateProgress);
|
|
||||||
electronVersion.value = await electron.getElectronVersion();
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
||||||
createBaseVNode("h2", _hoisted_2, [
|
|
||||||
createTextVNode(toDisplayString(unref(t)(`serverStart.process.${status.value}`)) + " ", 1),
|
|
||||||
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("span", _hoisted_3, " v" + toDisplayString(electronVersion.value), 1)) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-flag",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.reportIssue"),
|
|
||||||
onClick: reportIssue
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-file",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.openLogs"),
|
|
||||||
onClick: openLogs
|
|
||||||
}, null, 8, ["label"]),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
icon: "pi pi-refresh",
|
|
||||||
label: unref(t)("serverStart.reinstall"),
|
|
||||||
onClick: reinstall
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
]),
|
|
||||||
!terminalVisible.value ? (openBlock(), createBlock(unref(script), {
|
|
||||||
key: 0,
|
|
||||||
icon: "pi pi-search",
|
|
||||||
severity: "secondary",
|
|
||||||
label: unref(t)("serverStart.showTerminal"),
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => terminalVisible.value = true)
|
|
||||||
}, null, 8, ["label"])) : createCommentVNode("", true)
|
|
||||||
])) : createCommentVNode("", true),
|
|
||||||
withDirectives(createVNode(BaseTerminal, { onCreated: terminalCreated }, null, 512), [
|
|
||||||
[vShow, terminalVisible.value]
|
|
||||||
])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const ServerStartView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c0d3157e"]]);
|
|
||||||
export {
|
|
||||||
ServerStartView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=ServerStartView-BvuHEhuL.js.map
|
|
1
web/assets/ServerStartView-BvuHEhuL.js.map
generated
vendored
1
web/assets/ServerStartView-BvuHEhuL.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"ServerStartView-BvuHEhuL.js","sources":["../../src/views/ServerStartView.vue"],"sourcesContent":["<template>\n <div\n class=\"font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto\"\n >\n <h2 class=\"text-2xl font-bold\">\n {{ t(`serverStart.process.${status}`) }}\n <span v-if=\"status === ProgressStatus.ERROR\">\n v{{ electronVersion }}\n </span>\n </h2>\n <div\n v-if=\"status === ProgressStatus.ERROR\"\n class=\"flex flex-col items-center gap-4\"\n >\n <div class=\"flex items-center my-4 gap-2\">\n <Button\n icon=\"pi pi-flag\"\n severity=\"secondary\"\n :label=\"t('serverStart.reportIssue')\"\n @click=\"reportIssue\"\n />\n <Button\n icon=\"pi pi-file\"\n severity=\"secondary\"\n :label=\"t('serverStart.openLogs')\"\n @click=\"openLogs\"\n />\n <Button\n icon=\"pi pi-refresh\"\n :label=\"t('serverStart.reinstall')\"\n @click=\"reinstall\"\n />\n </div>\n <Button\n v-if=\"!terminalVisible\"\n icon=\"pi pi-search\"\n severity=\"secondary\"\n :label=\"t('serverStart.showTerminal')\"\n @click=\"terminalVisible = true\"\n />\n </div>\n <BaseTerminal v-show=\"terminalVisible\" @created=\"terminalCreated\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { ref, onMounted, Ref } from 'vue'\nimport BaseTerminal from '@/components/bottomPanel/tabs/terminal/BaseTerminal.vue'\nimport { ProgressStatus } from '@comfyorg/comfyui-electron-types'\nimport { electronAPI } from '@/utils/envUtil'\nimport type { useTerminal } from '@/hooks/bottomPanelTabs/useTerminal'\nimport { Terminal } from '@xterm/xterm'\nimport { useI18n } from 'vue-i18n'\n\nconst electron = electronAPI()\nconst { t } = useI18n()\n\nconst status = ref<ProgressStatus>(ProgressStatus.INITIAL_STATE)\nconst electronVersion = ref<string>('')\nlet xterm: Terminal | undefined\n\nconst terminalVisible = ref(true)\n\nconst updateProgress = ({ status: newStatus }: { status: ProgressStatus }) => {\n status.value = newStatus\n\n // Make critical error screen more obvious.\n if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false\n else xterm?.clear()\n}\n\nconst terminalCreated = (\n { terminal, useAutoSize }: ReturnType<typeof useTerminal>,\n root: Ref<HTMLElement>\n) => {\n xterm = terminal\n\n useAutoSize(root, true, true)\n electron.onLogMessage((message: string) => {\n terminal.write(message)\n })\n\n terminal.options.cursorBlink = false\n terminal.options.disableStdin = true\n terminal.options.cursorInactiveStyle = 'block'\n}\n\nconst reinstall = () => electron.reinstall()\nconst reportIssue = () => {\n window.open('https://forum.comfy.org/c/v1-feedback/', '_blank')\n}\nconst openLogs = () => electron.openLogsFolder()\n\nonMounted(async () => {\n electron.sendReady()\n electron.onProgressUpdate(updateProgress)\n electronVersion.value = await electron.getElectronVersion()\n})\n</script>\n\n<style scoped>\n:deep(.xterm-helper-textarea) {\n /* Hide this as it moves all over when uv is running */\n display: none;\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAuDA,UAAM,WAAW;AACX,UAAA,EAAE,MAAM;AAER,UAAA,SAAS,IAAoB,eAAe,aAAa;AACzD,UAAA,kBAAkB,IAAY,EAAE;AAClC,QAAA;AAEE,UAAA,kBAAkB,IAAI,IAAI;AAEhC,UAAM,iBAAiB,wBAAC,EAAE,QAAQ,gBAA4C;AAC5E,aAAO,QAAQ;AAGf,UAAI,cAAc,eAAe,MAAO,iBAAgB,QAAQ;AAAA,kBACpD,MAAM;AAAA,IAAA,GALG;AAQvB,UAAM,kBAAkB,wBACtB,EAAE,UAAU,YAAA,GACZ,SACG;AACK,cAAA;AAEI,kBAAA,MAAM,MAAM,IAAI;AACnB,eAAA,aAAa,CAAC,YAAoB;AACzC,iBAAS,MAAM,OAAO;AAAA,MAAA,CACvB;AAED,eAAS,QAAQ,cAAc;AAC/B,eAAS,QAAQ,eAAe;AAChC,eAAS,QAAQ,sBAAsB;AAAA,IAAA,GAbjB;AAgBlB,UAAA,YAAY,6BAAM,SAAS,aAAf;AAClB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAAA,GAD5C;AAGd,UAAA,WAAW,6BAAM,SAAS,kBAAf;AAEjB,cAAU,YAAY;AACpB,eAAS,UAAU;AACnB,eAAS,iBAAiB,cAAc;AACxB,sBAAA,QAAQ,MAAM,SAAS,mBAAmB;AAAA,IAAA,CAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
98
web/assets/ServerStartView-CiO_acWT.js
generated
vendored
Normal file
98
web/assets/ServerStartView-CiO_acWT.js
generated
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { d as defineComponent, a1 as useI18n, ab as ref, b_ as ProgressStatus, m as onMounted, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, aE as createTextVNode, X as toDisplayString, j as unref, f as createElementBlock, I as createCommentVNode, N as createVNode, l as script, i as withDirectives, v as vShow, b$ as BaseTerminal, aL as pushScopeId, aM as popScopeId, c0 as electronAPI, _ as _export_sfc } from "./index-C4Fk50Nx.js";
|
||||||
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
|
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-42c1131d"), n = n(), popScopeId(), n), "_withScopeId");
|
||||||
|
const _hoisted_1 = { class: "text-2xl font-bold" };
|
||||||
|
const _hoisted_2 = { key: 0 };
|
||||||
|
const _hoisted_3 = {
|
||||||
|
key: 0,
|
||||||
|
class: "flex flex-col items-center gap-4"
|
||||||
|
};
|
||||||
|
const _hoisted_4 = { class: "flex items-center my-4 gap-2" };
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "ServerStartView",
|
||||||
|
setup(__props) {
|
||||||
|
const electron = electronAPI();
|
||||||
|
const { t } = useI18n();
|
||||||
|
const status = ref(ProgressStatus.INITIAL_STATE);
|
||||||
|
const electronVersion = ref("");
|
||||||
|
let xterm;
|
||||||
|
const terminalVisible = ref(true);
|
||||||
|
const updateProgress = /* @__PURE__ */ __name(({ status: newStatus }) => {
|
||||||
|
status.value = newStatus;
|
||||||
|
if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false;
|
||||||
|
else xterm?.clear();
|
||||||
|
}, "updateProgress");
|
||||||
|
const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => {
|
||||||
|
xterm = terminal;
|
||||||
|
useAutoSize(root, true, true);
|
||||||
|
electron.onLogMessage((message) => {
|
||||||
|
terminal.write(message);
|
||||||
|
});
|
||||||
|
terminal.options.cursorBlink = false;
|
||||||
|
terminal.options.disableStdin = true;
|
||||||
|
terminal.options.cursorInactiveStyle = "block";
|
||||||
|
}, "terminalCreated");
|
||||||
|
const reinstall = /* @__PURE__ */ __name(() => electron.reinstall(), "reinstall");
|
||||||
|
const reportIssue = /* @__PURE__ */ __name(() => {
|
||||||
|
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
||||||
|
}, "reportIssue");
|
||||||
|
const openLogs = /* @__PURE__ */ __name(() => electron.openLogsFolder(), "openLogs");
|
||||||
|
onMounted(async () => {
|
||||||
|
electron.sendReady();
|
||||||
|
electron.onProgressUpdate(updateProgress);
|
||||||
|
electronVersion.value = await electron.getElectronVersion();
|
||||||
|
});
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return openBlock(), createBlock(_sfc_main$1, {
|
||||||
|
dark: "",
|
||||||
|
class: "flex-col"
|
||||||
|
}, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("h2", _hoisted_1, [
|
||||||
|
createTextVNode(toDisplayString(unref(t)(`serverStart.process.${status.value}`)) + " ", 1),
|
||||||
|
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("span", _hoisted_2, " v" + toDisplayString(electronVersion.value), 1)) : createCommentVNode("", true)
|
||||||
|
]),
|
||||||
|
status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
||||||
|
createBaseVNode("div", _hoisted_4, [
|
||||||
|
createVNode(unref(script), {
|
||||||
|
icon: "pi pi-flag",
|
||||||
|
severity: "secondary",
|
||||||
|
label: unref(t)("serverStart.reportIssue"),
|
||||||
|
onClick: reportIssue
|
||||||
|
}, null, 8, ["label"]),
|
||||||
|
createVNode(unref(script), {
|
||||||
|
icon: "pi pi-file",
|
||||||
|
severity: "secondary",
|
||||||
|
label: unref(t)("serverStart.openLogs"),
|
||||||
|
onClick: openLogs
|
||||||
|
}, null, 8, ["label"]),
|
||||||
|
createVNode(unref(script), {
|
||||||
|
icon: "pi pi-refresh",
|
||||||
|
label: unref(t)("serverStart.reinstall"),
|
||||||
|
onClick: reinstall
|
||||||
|
}, null, 8, ["label"])
|
||||||
|
]),
|
||||||
|
!terminalVisible.value ? (openBlock(), createBlock(unref(script), {
|
||||||
|
key: 0,
|
||||||
|
icon: "pi pi-search",
|
||||||
|
severity: "secondary",
|
||||||
|
label: unref(t)("serverStart.showTerminal"),
|
||||||
|
onClick: _cache[0] || (_cache[0] = ($event) => terminalVisible.value = true)
|
||||||
|
}, null, 8, ["label"])) : createCommentVNode("", true)
|
||||||
|
])) : createCommentVNode("", true),
|
||||||
|
withDirectives(createVNode(BaseTerminal, { onCreated: terminalCreated }, null, 512), [
|
||||||
|
[vShow, terminalVisible.value]
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ServerStartView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-42c1131d"]]);
|
||||||
|
export {
|
||||||
|
ServerStartView as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=ServerStartView-CiO_acWT.js.map
|
2
web/assets/ServerStartView-BHqjjHcl.css → web/assets/ServerStartView-CnyN4Ib6.css
generated
vendored
2
web/assets/ServerStartView-BHqjjHcl.css → web/assets/ServerStartView-CnyN4Ib6.css
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
[data-v-c0d3157e] .xterm-helper-textarea {
|
[data-v-42c1131d] .xterm-helper-textarea {
|
||||||
/* Hide this as it moves all over when uv is running */
|
/* Hide this as it moves all over when uv is running */
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
102
web/assets/UserSelectView-2l9Kbchu.js
generated
vendored
Normal file
102
web/assets/UserSelectView-2l9Kbchu.js
generated
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { d as defineComponent, aX as useUserStore, bW as useRouter, ab as ref, c as computed, m as onMounted, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, X as toDisplayString, N as createVNode, bX as withKeys, j as unref, av as script, bQ as script$1, bY as script$2, bZ as script$3, aE as createTextVNode, I as createCommentVNode, l as script$4 } from "./index-C4Fk50Nx.js";
|
||||||
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
|
const _hoisted_1 = {
|
||||||
|
id: "comfy-user-selection",
|
||||||
|
class: "min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg"
|
||||||
|
};
|
||||||
|
const _hoisted_2 = /* @__PURE__ */ createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1);
|
||||||
|
const _hoisted_3 = { class: "flex w-full flex-col items-center" };
|
||||||
|
const _hoisted_4 = { class: "flex w-full flex-col gap-2" };
|
||||||
|
const _hoisted_5 = { for: "new-user-input" };
|
||||||
|
const _hoisted_6 = { class: "flex w-full flex-col gap-2" };
|
||||||
|
const _hoisted_7 = { for: "existing-user-select" };
|
||||||
|
const _hoisted_8 = { class: "mt-5" };
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "UserSelectView",
|
||||||
|
setup(__props) {
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const router = useRouter();
|
||||||
|
const selectedUser = ref(null);
|
||||||
|
const newUsername = ref("");
|
||||||
|
const loginError = ref("");
|
||||||
|
const createNewUser = computed(() => newUsername.value.trim() !== "");
|
||||||
|
const newUserExistsError = computed(() => {
|
||||||
|
return userStore.users.find((user) => user.username === newUsername.value) ? `User "${newUsername.value}" already exists` : "";
|
||||||
|
});
|
||||||
|
const error = computed(() => newUserExistsError.value || loginError.value);
|
||||||
|
const login = /* @__PURE__ */ __name(async () => {
|
||||||
|
try {
|
||||||
|
const user = createNewUser.value ? await userStore.createUser(newUsername.value) : selectedUser.value;
|
||||||
|
if (!user) {
|
||||||
|
throw new Error("No user selected");
|
||||||
|
}
|
||||||
|
userStore.login(user);
|
||||||
|
router.push("/");
|
||||||
|
} catch (err) {
|
||||||
|
loginError.value = err.message ?? JSON.stringify(err);
|
||||||
|
}
|
||||||
|
}, "login");
|
||||||
|
onMounted(async () => {
|
||||||
|
if (!userStore.initialized) {
|
||||||
|
await userStore.initialize();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("main", _hoisted_1, [
|
||||||
|
_hoisted_2,
|
||||||
|
createBaseVNode("div", _hoisted_3, [
|
||||||
|
createBaseVNode("div", _hoisted_4, [
|
||||||
|
createBaseVNode("label", _hoisted_5, toDisplayString(_ctx.$t("userSelect.newUser")) + ":", 1),
|
||||||
|
createVNode(unref(script), {
|
||||||
|
id: "new-user-input",
|
||||||
|
modelValue: newUsername.value,
|
||||||
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newUsername.value = $event),
|
||||||
|
placeholder: _ctx.$t("userSelect.enterUsername"),
|
||||||
|
onKeyup: withKeys(login, ["enter"])
|
||||||
|
}, null, 8, ["modelValue", "placeholder"])
|
||||||
|
]),
|
||||||
|
createVNode(unref(script$1)),
|
||||||
|
createBaseVNode("div", _hoisted_6, [
|
||||||
|
createBaseVNode("label", _hoisted_7, toDisplayString(_ctx.$t("userSelect.existingUser")) + ":", 1),
|
||||||
|
createVNode(unref(script$2), {
|
||||||
|
modelValue: selectedUser.value,
|
||||||
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedUser.value = $event),
|
||||||
|
class: "w-full",
|
||||||
|
inputId: "existing-user-select",
|
||||||
|
options: unref(userStore).users,
|
||||||
|
"option-label": "username",
|
||||||
|
placeholder: _ctx.$t("userSelect.selectUser"),
|
||||||
|
disabled: createNewUser.value
|
||||||
|
}, null, 8, ["modelValue", "options", "placeholder", "disabled"]),
|
||||||
|
error.value ? (openBlock(), createBlock(unref(script$3), {
|
||||||
|
key: 0,
|
||||||
|
severity: "error"
|
||||||
|
}, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createTextVNode(toDisplayString(error.value), 1)
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
})) : createCommentVNode("", true)
|
||||||
|
]),
|
||||||
|
createBaseVNode("footer", _hoisted_8, [
|
||||||
|
createVNode(unref(script$4), {
|
||||||
|
label: _ctx.$t("userSelect.next"),
|
||||||
|
onClick: login
|
||||||
|
}, null, 8, ["label"])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
export {
|
||||||
|
_sfc_main as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=UserSelectView-2l9Kbchu.js.map
|
98
web/assets/UserSelectView-C_4L-Yqf.js
generated
vendored
98
web/assets/UserSelectView-C_4L-Yqf.js
generated
vendored
@ -1,98 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { a as defineComponent, J as useUserStore, bU as useRouter, r as ref, q as computed, o as onMounted, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, aq as script, bN as script$1, bV as script$2, x as createBlock, y as withCtx, ay as createTextVNode, bW as script$3, i as createCommentVNode, D as script$4 } from "./index-DIU5yZe9.js";
|
|
||||||
const _hoisted_1 = {
|
|
||||||
id: "comfy-user-selection",
|
|
||||||
class: "font-sans flex flex-col items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto"
|
|
||||||
};
|
|
||||||
const _hoisted_2 = { class: "mt-[5vh] 2xl:mt-[20vh] min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg" };
|
|
||||||
const _hoisted_3 = /* @__PURE__ */ createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1);
|
|
||||||
const _hoisted_4 = { class: "flex w-full flex-col items-center" };
|
|
||||||
const _hoisted_5 = { class: "flex w-full flex-col gap-2" };
|
|
||||||
const _hoisted_6 = { for: "new-user-input" };
|
|
||||||
const _hoisted_7 = { class: "flex w-full flex-col gap-2" };
|
|
||||||
const _hoisted_8 = { for: "existing-user-select" };
|
|
||||||
const _hoisted_9 = { class: "mt-5" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "UserSelectView",
|
|
||||||
setup(__props) {
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const router = useRouter();
|
|
||||||
const selectedUser = ref(null);
|
|
||||||
const newUsername = ref("");
|
|
||||||
const loginError = ref("");
|
|
||||||
const createNewUser = computed(() => newUsername.value.trim() !== "");
|
|
||||||
const newUserExistsError = computed(() => {
|
|
||||||
return userStore.users.find((user) => user.username === newUsername.value) ? `User "${newUsername.value}" already exists` : "";
|
|
||||||
});
|
|
||||||
const error = computed(() => newUserExistsError.value || loginError.value);
|
|
||||||
const login = /* @__PURE__ */ __name(async () => {
|
|
||||||
try {
|
|
||||||
const user = createNewUser.value ? await userStore.createUser(newUsername.value) : selectedUser.value;
|
|
||||||
if (!user) {
|
|
||||||
throw new Error("No user selected");
|
|
||||||
}
|
|
||||||
userStore.login(user);
|
|
||||||
router.push("/");
|
|
||||||
} catch (err) {
|
|
||||||
loginError.value = err.message ?? JSON.stringify(err);
|
|
||||||
}
|
|
||||||
}, "login");
|
|
||||||
onMounted(async () => {
|
|
||||||
if (!userStore.initialized) {
|
|
||||||
await userStore.initialize();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
||||||
createBaseVNode("main", _hoisted_2, [
|
|
||||||
_hoisted_3,
|
|
||||||
createBaseVNode("form", _hoisted_4, [
|
|
||||||
createBaseVNode("div", _hoisted_5, [
|
|
||||||
createBaseVNode("label", _hoisted_6, toDisplayString(_ctx.$t("userSelect.newUser")) + ":", 1),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
id: "new-user-input",
|
|
||||||
modelValue: newUsername.value,
|
|
||||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newUsername.value = $event),
|
|
||||||
placeholder: _ctx.$t("userSelect.enterUsername")
|
|
||||||
}, null, 8, ["modelValue", "placeholder"])
|
|
||||||
]),
|
|
||||||
createVNode(unref(script$1)),
|
|
||||||
createBaseVNode("div", _hoisted_7, [
|
|
||||||
createBaseVNode("label", _hoisted_8, toDisplayString(_ctx.$t("userSelect.existingUser")) + ":", 1),
|
|
||||||
createVNode(unref(script$2), {
|
|
||||||
modelValue: selectedUser.value,
|
|
||||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedUser.value = $event),
|
|
||||||
class: "w-full",
|
|
||||||
inputId: "existing-user-select",
|
|
||||||
options: unref(userStore).users,
|
|
||||||
"option-label": "username",
|
|
||||||
placeholder: _ctx.$t("userSelect.selectUser"),
|
|
||||||
disabled: createNewUser.value
|
|
||||||
}, null, 8, ["modelValue", "options", "placeholder", "disabled"]),
|
|
||||||
error.value ? (openBlock(), createBlock(unref(script$3), {
|
|
||||||
key: 0,
|
|
||||||
severity: "error"
|
|
||||||
}, {
|
|
||||||
default: withCtx(() => [
|
|
||||||
createTextVNode(toDisplayString(error.value), 1)
|
|
||||||
]),
|
|
||||||
_: 1
|
|
||||||
})) : createCommentVNode("", true)
|
|
||||||
]),
|
|
||||||
createBaseVNode("footer", _hoisted_9, [
|
|
||||||
createVNode(unref(script$4), {
|
|
||||||
label: _ctx.$t("userSelect.next"),
|
|
||||||
onClick: login
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
export {
|
|
||||||
_sfc_main as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=UserSelectView-C_4L-Yqf.js.map
|
|
1
web/assets/UserSelectView-C_4L-Yqf.js.map
generated
vendored
1
web/assets/UserSelectView-C_4L-Yqf.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"UserSelectView-C_4L-Yqf.js","sources":["../../src/views/UserSelectView.vue"],"sourcesContent":["<template>\n <div\n id=\"comfy-user-selection\"\n class=\"font-sans flex flex-col items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto\"\n >\n <main\n class=\"mt-[5vh] 2xl:mt-[20vh] min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg\"\n >\n <h1 class=\"my-2.5 mb-7 font-normal\">ComfyUI</h1>\n <form class=\"flex w-full flex-col items-center\">\n <div class=\"flex w-full flex-col gap-2\">\n <label for=\"new-user-input\">{{ $t('userSelect.newUser') }}:</label>\n <InputText\n id=\"new-user-input\"\n v-model=\"newUsername\"\n :placeholder=\"$t('userSelect.enterUsername')\"\n />\n </div>\n <Divider />\n <div class=\"flex w-full flex-col gap-2\">\n <label for=\"existing-user-select\"\n >{{ $t('userSelect.existingUser') }}:</label\n >\n <Select\n v-model=\"selectedUser\"\n class=\"w-full\"\n inputId=\"existing-user-select\"\n :options=\"userStore.users\"\n option-label=\"username\"\n :placeholder=\"$t('userSelect.selectUser')\"\n :disabled=\"createNewUser\"\n />\n <Message v-if=\"error\" severity=\"error\">{{ error }}</Message>\n </div>\n <footer class=\"mt-5\">\n <Button :label=\"$t('userSelect.next')\" @click=\"login\" />\n </footer>\n </form>\n </main>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport Divider from 'primevue/divider'\nimport InputText from 'primevue/inputtext'\nimport Select from 'primevue/select'\nimport Message from 'primevue/message'\nimport { User, useUserStore } from '@/stores/userStore'\nimport { useRouter } from 'vue-router'\nimport { computed, onMounted, ref } from 'vue'\n\nconst userStore = useUserStore()\nconst router = useRouter()\n\nconst selectedUser = ref<User | null>(null)\nconst newUsername = ref('')\nconst loginError = ref('')\n\nconst createNewUser = computed(() => newUsername.value.trim() !== '')\nconst newUserExistsError = computed(() => {\n return userStore.users.find((user) => user.username === newUsername.value)\n ? `User \"${newUsername.value}\" already exists`\n : ''\n})\nconst error = computed(() => newUserExistsError.value || loginError.value)\n\nconst login = async () => {\n try {\n const user = createNewUser.value\n ? await userStore.createUser(newUsername.value)\n : selectedUser.value\n\n if (!user) {\n throw new Error('No user selected')\n }\n\n userStore.login(user)\n router.push('/')\n } catch (err) {\n loginError.value = err.message ?? JSON.stringify(err)\n }\n}\n\nonMounted(async () => {\n if (!userStore.initialized) {\n await userStore.initialize()\n }\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAoDA,UAAM,YAAY;AAClB,UAAM,SAAS;AAET,UAAA,eAAe,IAAiB,IAAI;AACpC,UAAA,cAAc,IAAI,EAAE;AACpB,UAAA,aAAa,IAAI,EAAE;AAEzB,UAAM,gBAAgB,SAAS,MAAM,YAAY,MAAM,KAAA,MAAW,EAAE;AAC9D,UAAA,qBAAqB,SAAS,MAAM;AACxC,aAAO,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,aAAa,YAAY,KAAK,IACrE,SAAS,YAAY,KAAK,qBAC1B;AAAA,IAAA,CACL;AACD,UAAM,QAAQ,SAAS,MAAM,mBAAmB,SAAS,WAAW,KAAK;AAEzE,UAAM,QAAQ,mCAAY;AACpB,UAAA;AACI,cAAA,OAAO,cAAc,QACvB,MAAM,UAAU,WAAW,YAAY,KAAK,IAC5C,aAAa;AAEjB,YAAI,CAAC,MAAM;AACH,gBAAA,IAAI,MAAM,kBAAkB;AAAA,QACpC;AAEA,kBAAU,MAAM,IAAI;AACpB,eAAO,KAAK,GAAG;AAAA,eACR,KAAK;AACZ,mBAAW,QAAQ,IAAI,WAAW,KAAK,UAAU,GAAG;AAAA,MACtD;AAAA,IAAA,GAdY;AAiBd,cAAU,YAAY;AAChB,UAAA,CAAC,UAAU,aAAa;AAC1B,cAAM,UAAU;MAClB;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
14
web/assets/WelcomeView-BD34JMsC.css → web/assets/WelcomeView-Brz3-luE.css
generated
vendored
14
web/assets/WelcomeView-BD34JMsC.css → web/assets/WelcomeView-Brz3-luE.css
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
.animated-gradient-text[data-v-c4d014c5] {
|
.animated-gradient-text[data-v-7dfaf74c] {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: clamp(2rem, 8vw, 4rem);
|
font-size: clamp(2rem, 8vw, 4rem);
|
||||||
background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9);
|
background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9);
|
||||||
@ -7,12 +7,12 @@
|
|||||||
background-clip: text;
|
background-clip: text;
|
||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
-webkit-text-fill-color: transparent;
|
-webkit-text-fill-color: transparent;
|
||||||
animation: gradient-c4d014c5 8s linear infinite;
|
animation: gradient-7dfaf74c 8s linear infinite;
|
||||||
}
|
}
|
||||||
.text-glow[data-v-c4d014c5] {
|
.text-glow[data-v-7dfaf74c] {
|
||||||
filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3));
|
filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3));
|
||||||
}
|
}
|
||||||
@keyframes gradient-c4d014c5 {
|
@keyframes gradient-7dfaf74c {
|
||||||
0% {
|
0% {
|
||||||
background-position: 0% center;
|
background-position: 0% center;
|
||||||
}
|
}
|
||||||
@ -20,11 +20,11 @@
|
|||||||
background-position: 300% center;
|
background-position: 300% center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.fade-in-up[data-v-c4d014c5] {
|
.fade-in-up[data-v-7dfaf74c] {
|
||||||
animation: fadeInUp-c4d014c5 1.5s ease-out;
|
animation: fadeInUp-7dfaf74c 1.5s ease-out;
|
||||||
animation-fill-mode: both;
|
animation-fill-mode: both;
|
||||||
}
|
}
|
||||||
@keyframes fadeInUp-c4d014c5 {
|
@keyframes fadeInUp-7dfaf74c {
|
||||||
0% {
|
0% {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateY(20px);
|
transform: translateY(20px);
|
40
web/assets/WelcomeView-CB7Th_kO.js
generated
vendored
Normal file
40
web/assets/WelcomeView-CB7Th_kO.js
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { d as defineComponent, bW as useRouter, o as openBlock, k as createBlock, M as withCtx, H as createBaseVNode, X as toDisplayString, N as createVNode, j as unref, l as script, aL as pushScopeId, aM as popScopeId, _ as _export_sfc } from "./index-C4Fk50Nx.js";
|
||||||
|
import { _ as _sfc_main$1 } from "./BaseViewTemplate-CsEJhGbv.js";
|
||||||
|
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-7dfaf74c"), n = n(), popScopeId(), n), "_withScopeId");
|
||||||
|
const _hoisted_1 = { class: "flex flex-col items-center justify-center gap-8 p-8" };
|
||||||
|
const _hoisted_2 = { class: "animated-gradient-text text-glow select-none" };
|
||||||
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||||
|
__name: "WelcomeView",
|
||||||
|
setup(__props) {
|
||||||
|
const router = useRouter();
|
||||||
|
const navigateTo = /* @__PURE__ */ __name((path) => {
|
||||||
|
router.push(path);
|
||||||
|
}, "navigateTo");
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
||||||
|
default: withCtx(() => [
|
||||||
|
createBaseVNode("div", _hoisted_1, [
|
||||||
|
createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("welcome.title")), 1),
|
||||||
|
createVNode(unref(script), {
|
||||||
|
label: _ctx.$t("welcome.getStarted"),
|
||||||
|
icon: "pi pi-arrow-right",
|
||||||
|
iconPos: "right",
|
||||||
|
size: "large",
|
||||||
|
rounded: "",
|
||||||
|
onClick: _cache[0] || (_cache[0] = ($event) => navigateTo("/install")),
|
||||||
|
class: "p-4 text-lg fade-in-up"
|
||||||
|
}, null, 8, ["label"])
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
_: 1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const WelcomeView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7dfaf74c"]]);
|
||||||
|
export {
|
||||||
|
WelcomeView as default
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=WelcomeView-CB7Th_kO.js.map
|
37
web/assets/WelcomeView-Db7ZDfZo.js
generated
vendored
37
web/assets/WelcomeView-Db7ZDfZo.js
generated
vendored
@ -1,37 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { a as defineComponent, bU as useRouter, f as openBlock, g as createElementBlock, A as createBaseVNode, a8 as toDisplayString, h as createVNode, z as unref, D as script, R as pushScopeId, U as popScopeId, _ as _export_sfc } from "./index-DIU5yZe9.js";
|
|
||||||
const _withScopeId = /* @__PURE__ */ __name((n) => (pushScopeId("data-v-c4d014c5"), n = n(), popScopeId(), n), "_withScopeId");
|
|
||||||
const _hoisted_1 = { class: "font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto" };
|
|
||||||
const _hoisted_2 = { class: "flex flex-col items-center justify-center gap-8 p-8" };
|
|
||||||
const _hoisted_3 = { class: "animated-gradient-text text-glow select-none" };
|
|
||||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
||||||
__name: "WelcomeView",
|
|
||||||
setup(__props) {
|
|
||||||
const router = useRouter();
|
|
||||||
const navigateTo = /* @__PURE__ */ __name((path) => {
|
|
||||||
router.push(path);
|
|
||||||
}, "navigateTo");
|
|
||||||
return (_ctx, _cache) => {
|
|
||||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
||||||
createBaseVNode("div", _hoisted_2, [
|
|
||||||
createBaseVNode("h1", _hoisted_3, toDisplayString(_ctx.$t("welcome.title")), 1),
|
|
||||||
createVNode(unref(script), {
|
|
||||||
label: _ctx.$t("welcome.getStarted"),
|
|
||||||
icon: "pi pi-arrow-right",
|
|
||||||
iconPos: "right",
|
|
||||||
size: "large",
|
|
||||||
rounded: "",
|
|
||||||
onClick: _cache[0] || (_cache[0] = ($event) => navigateTo("/install")),
|
|
||||||
class: "p-4 text-lg fade-in-up"
|
|
||||||
}, null, 8, ["label"])
|
|
||||||
])
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const WelcomeView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c4d014c5"]]);
|
|
||||||
export {
|
|
||||||
WelcomeView as default
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=WelcomeView-Db7ZDfZo.js.map
|
|
1
web/assets/WelcomeView-Db7ZDfZo.js.map
generated
vendored
1
web/assets/WelcomeView-Db7ZDfZo.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"WelcomeView-Db7ZDfZo.js","sources":["../../src/views/WelcomeView.vue"],"sourcesContent":["<template>\n <div\n class=\"font-sans flex flex-col justify-center items-center h-screen m-0 text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto\"\n >\n <div class=\"flex flex-col items-center justify-center gap-8 p-8\">\n <!-- Header -->\n <h1 class=\"animated-gradient-text text-glow select-none\">\n {{ $t('welcome.title') }}\n </h1>\n\n <!-- Get Started Button -->\n <Button\n :label=\"$t('welcome.getStarted')\"\n icon=\"pi pi-arrow-right\"\n iconPos=\"right\"\n size=\"large\"\n rounded\n @click=\"navigateTo('/install')\"\n class=\"p-4 text-lg fade-in-up\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nconst router = useRouter()\nconst navigateTo = (path: string) => {\n router.push(path)\n}\n</script>\n\n<style scoped>\n.animated-gradient-text {\n @apply font-bold;\n font-size: clamp(2rem, 8vw, 4rem);\n background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9);\n background-size: 300% auto;\n background-clip: text;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n animation: gradient 8s linear infinite;\n}\n\n.text-glow {\n filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3));\n}\n\n@keyframes gradient {\n 0% {\n background-position: 0% center;\n }\n\n 100% {\n background-position: 300% center;\n }\n}\n\n.fade-in-up {\n animation: fadeInUp 1.5s ease-out;\n animation-fill-mode: both;\n}\n\n@keyframes fadeInUp {\n 0% {\n opacity: 0;\n transform: translateY(20px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;AA4BA,UAAM,SAAS;AACT,UAAA,aAAa,wBAAC,SAAiB;AACnC,aAAO,KAAK,IAAI;AAAA,IAAA,GADC;;;;;;;;;;;;;;;;;;;;"}
|
|
BIN
web/assets/images/apple-mps-logo.png
generated
vendored
Normal file
BIN
web/assets/images/apple-mps-logo.png
generated
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
5
web/assets/images/manual-configuration.svg
generated
vendored
Normal file
5
web/assets/images/manual-configuration.svg
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="21.59mm" height="6.922mm" version="1.1" viewBox="0 0 21.59 6.922" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="m6.667 0.941v1.345h-0.305v-1.345h-0.699v1.345h-0.304v-1.651h0.304v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.393q0.06 0 0.114 0.023 0.054 0.021 0.096 0.062 0.041 0.038 0.066 0.093 0.026 0.052 0.027 0.113 3e-3 -0.06 0.026-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.393q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.347h-0.298v-1.345zm1.512 0.624q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.321h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.346h-0.302v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.786zm3.063 0.306h-0.306v-1.345h-0.851v1.345h-0.304v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm0.508-1.651h0.303v1.346h0.851v-1.346h0.305v1.651h-0.304v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.547q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm1.969 0.93q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.321h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.346h-0.302v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.786zm1.906-1.98v2.286h-0.304v-2.286z" fill="#fff"/>
|
||||||
|
<path d="m0.303 4.909v1.04h0.787v-0.279h0.305v0.279q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.055 0.023-0.119 0.023h-0.788q-0.062 0-0.117-0.023-0.056-0.023-0.098-0.063-0.04-0.042-0.065-0.098-0.023-0.056-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.787q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v0.279h-0.302v-0.279zm3.029 1.04q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.054 0.023-0.117 0.023h-0.821q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.82q0.063 0 0.117 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm-1.123-1.04v1.04h0.82v-1.04zm3.092 1.345h-0.305v-1.345h-0.851v1.345h-0.304v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm1.12-1.981v0.33h0.542v0.305h-0.541v1.345h-0.305v-1.344h-0.403v-0.305h0.403v-0.33q0-0.063 0.023-0.117 0.024-0.055 0.066-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.542v0.305zm1.277 0.33v1.651h-0.305v-1.651zm-0.32-0.635h0.336v0.317h-0.336zm0.844 0.941q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.547q0.06 0 0.114 0.023 0.054 0.021 0.094 0.062 0.041 0.038 0.066 0.093 0.026 0.052 0.027 0.113v-0.291h0.305v2.012q0 0.063-0.024 0.119-0.023 0.055-0.065 0.096-0.04 0.041-0.096 0.065-0.055 0.024-0.119 0.024h-0.964v-0.305h0.964v-0.424h-0.851q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm1.154 0.976v-0.976h-0.851v0.976zm0.813-1.282h0.303v1.345h0.851v-1.345h0.305v1.651h-0.305v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.547q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm2.272 0.305v1.345h-0.303v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.324q0.063 0 0.117 0.024 0.055 0.023 0.097 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v0.279h-0.305v-0.279zm1.314 0.624q0-0.063 0.023-0.117 0.024-0.055 0.065-0.097 0.041-0.041 0.097-0.065 0.055-0.024 0.117-0.024h0.787v-0.319h-0.996v-0.305h0.996q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119v1.345h-0.305v-0.279q-4e-3 0.057-0.031 0.108-0.026 0.051-0.068 0.089-0.04 0.037-0.093 0.058-0.052 0.021-0.111 0.021h-0.483q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119zm0.303 0.415h0.787v-0.415h-0.787zm1.505-1.345h0.403v-0.508h0.305v0.508h0.542v0.305h-0.542v1.04h0.542v0.305h-0.542q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.041-0.041-0.066-0.097-0.023-0.055-0.023-0.119v-1.04h-0.403zm2.08 0v1.651h-0.299v-1.649zm-0.314-0.634h0.336v0.317h-0.336zm2.272 1.981q0 0.063-0.024 0.119-0.023 0.055-0.065 0.097-0.04 0.04-0.096 0.065-0.054 0.023-0.117 0.023h-0.82q-0.062 0-0.117-0.023-0.055-0.024-0.097-0.065-0.04-0.041-0.065-0.097-0.023-0.055-0.023-0.119v-1.04q0-0.063 0.023-0.119 0.024-0.055 0.065-0.096t0.097-0.065q0.055-0.024 0.117-0.024h0.82q0.063 0 0.117 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119zm-1.123-1.04v1.04h0.82v-1.04zm3.092 1.345h-0.305v-1.345h-0.851v1.345h-0.303v-1.651h0.303v0.291q3e-3 -0.06 0.027-0.113 0.024-0.054 0.065-0.093 0.041-0.04 0.096-0.062 0.054-0.023 0.116-0.023h0.545q0.063 0 0.119 0.024 0.055 0.023 0.096 0.065 0.041 0.04 0.065 0.096 0.024 0.055 0.024 0.119z" fill="#fff"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
6
web/assets/images/nvidia-logo.svg
generated
vendored
Normal file
6
web/assets/images/nvidia-logo.svg
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<svg enable-background="new 0 0 974.7 179.7" version="1.1" viewBox="0 0 974.7 179.7" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" width="110" height="44"><title> Artificial Intelligence Computing Leadership from NVIDIA</title>
|
||||||
|
<path fill="#FFFFFF" d="m962.1 144.1v-2.7h1.7c0.9 0 2.2 0.1 2.2 1.2s-0.7 1.5-1.8 1.5h-2.1m0 1.9h1.2l2.7 4.7h2.9l-3-4.9c1.5 0.1 2.7-1 2.8-2.5v-0.4c0-2.6-1.8-3.4-4.8-3.4h-4.3v11.2h2.5v-4.7m12.6-0.9c0-6.6-5.1-10.4-10.8-10.4s-10.8 3.8-10.8 10.4 5.1 10.4 10.8 10.4 10.8-3.8 10.8-10.4m-3.2 0c0.2 4.2-3.1 7.8-7.3 8h-0.3c-4.4 0.2-8.1-3.3-8.3-7.7s3.3-8.1 7.7-8.3 8.1 3.3 8.3 7.7c-0.1 0.1-0.1 0.2-0.1 0.3z"></path>
|
||||||
|
<path fill="#FFFFFF" d="m578.2 34v118h33.3v-118h-33.3zm-262-0.2v118.1h33.6v-91.7l26.2 0.1c8.6 0 14.6 2.1 18.7 6.5 5.3 5.6 7.4 14.7 7.4 31.2v53.9h32.6v-65.2c0-46.6-29.7-52.9-58.7-52.9h-59.8zm315.7 0.2v118h54c28.8 0 38.2-4.8 48.3-15.5 7.2-7.5 11.8-24.1 11.8-42.2 0-16.6-3.9-31.4-10.8-40.6-12.2-16.5-30-19.7-56.6-19.7h-46.7zm33 25.6h14.3c20.8 0 34.2 9.3 34.2 33.5s-13.4 33.6-34.2 33.6h-14.3v-67.1zm-134.7-25.6l-27.8 93.5-26.6-93.5h-36l38 118h48l38.4-118h-34zm231.4 118h33.3v-118h-33.3v118zm93.4-118l-46.5 117.9h32.8l7.4-20.9h55l7 20.8h35.7l-46.9-117.8h-44.5zm21.6 21.5l20.2 55.2h-41l20.8-55.2z">
|
||||||
|
</path>
|
||||||
|
<path fill="#76B900" d="m101.3 53.6v-16.2c1.6-0.1 3.2-0.2 4.8-0.2 44.4-1.4 73.5 38.2 73.5 38.2s-31.4 43.6-65.1 43.6c-4.5 0-8.9-0.7-13.1-2.1v-49.2c17.3 2.1 20.8 9.7 31.1 27l23.1-19.4s-16.9-22.1-45.3-22.1c-3-0.1-6 0.1-9 0.4m0-53.6v24.2l4.8-0.3c61.7-2.1 102 50.6 102 50.6s-46.2 56.2-94.3 56.2c-4.2 0-8.3-0.4-12.4-1.1v15c3.4 0.4 6.9 0.7 10.3 0.7 44.8 0 77.2-22.9 108.6-49.9 5.2 4.2 26.5 14.3 30.9 18.7-29.8 25-99.3 45.1-138.7 45.1-3.8 0-7.4-0.2-11-0.6v21.1h170.2v-179.7h-170.4zm0 116.9v12.8c-41.4-7.4-52.9-50.5-52.9-50.5s19.9-22 52.9-25.6v14h-0.1c-17.3-2.1-30.9 14.1-30.9 14.1s7.7 27.3 31 35.2m-73.5-39.5s24.5-36.2 73.6-40v-13.2c-54.4 4.4-101.4 50.4-101.4 50.4s26.6 77 101.3 84v-14c-54.8-6.8-73.5-67.2-73.5-67.2z"></path>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
21772
web/assets/index-p6KSJ2Zq.js → web/assets/index-5Sv744Dr.js
generated
vendored
21772
web/assets/index-p6KSJ2Zq.js → web/assets/index-5Sv744Dr.js
generated
vendored
File diff suppressed because it is too large
Load Diff
27
web/assets/index-B7ycxfFq.js
generated
vendored
Normal file
27
web/assets/index-B7ycxfFq.js
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { ct as script$1, H as createBaseVNode, o as openBlock, f as createElementBlock, D as mergeProps } from "./index-C4Fk50Nx.js";
|
||||||
|
var script = {
|
||||||
|
name: "PlusIcon",
|
||||||
|
"extends": script$1
|
||||||
|
};
|
||||||
|
var _hoisted_1 = /* @__PURE__ */ createBaseVNode("path", {
|
||||||
|
d: "M7.67742 6.32258V0.677419C7.67742 0.497757 7.60605 0.325452 7.47901 0.198411C7.35197 0.0713707 7.17966 0 7 0C6.82034 0 6.64803 0.0713707 6.52099 0.198411C6.39395 0.325452 6.32258 0.497757 6.32258 0.677419V6.32258H0.677419C0.497757 6.32258 0.325452 6.39395 0.198411 6.52099C0.0713707 6.64803 0 6.82034 0 7C0 7.17966 0.0713707 7.35197 0.198411 7.47901C0.325452 7.60605 0.497757 7.67742 0.677419 7.67742H6.32258V13.3226C6.32492 13.5015 6.39704 13.6725 6.52358 13.799C6.65012 13.9255 6.82106 13.9977 7 14C7.17966 14 7.35197 13.9286 7.47901 13.8016C7.60605 13.6745 7.67742 13.5022 7.67742 13.3226V7.67742H13.3226C13.5022 7.67742 13.6745 7.60605 13.8016 7.47901C13.9286 7.35197 14 7.17966 14 7C13.9977 6.82106 13.9255 6.65012 13.799 6.52358C13.6725 6.39704 13.5015 6.32492 13.3226 6.32258H7.67742Z",
|
||||||
|
fill: "currentColor"
|
||||||
|
}, null, -1);
|
||||||
|
var _hoisted_2 = [_hoisted_1];
|
||||||
|
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
|
return openBlock(), createElementBlock("svg", mergeProps({
|
||||||
|
width: "14",
|
||||||
|
height: "14",
|
||||||
|
viewBox: "0 0 14 14",
|
||||||
|
fill: "none",
|
||||||
|
xmlns: "http://www.w3.org/2000/svg"
|
||||||
|
}, _ctx.pti()), _hoisted_2, 16);
|
||||||
|
}
|
||||||
|
__name(render, "render");
|
||||||
|
script.render = render;
|
||||||
|
export {
|
||||||
|
script as s
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=index-B7ycxfFq.js.map
|
318091
web/assets/index-DIU5yZe9.js → web/assets/index-C4Fk50Nx.js
generated
vendored
318091
web/assets/index-DIU5yZe9.js → web/assets/index-C4Fk50Nx.js
generated
vendored
File diff suppressed because one or more lines are too long
637
web/assets/index-D3u7l7ha.js → web/assets/index-CK0rrCYF.js
generated
vendored
637
web/assets/index-D3u7l7ha.js → web/assets/index-CK0rrCYF.js
generated
vendored
File diff suppressed because one or more lines are too long
1
web/assets/index-D3u7l7ha.js.map
generated
vendored
1
web/assets/index-D3u7l7ha.js.map
generated
vendored
File diff suppressed because one or more lines are too long
1
web/assets/index-DIU5yZe9.js.map
generated
vendored
1
web/assets/index-DIU5yZe9.js.map
generated
vendored
File diff suppressed because one or more lines are too long
5674
web/assets/index-1vLlIVor.css → web/assets/index-DmMtlpqz.css
generated
vendored
5674
web/assets/index-1vLlIVor.css → web/assets/index-DmMtlpqz.css
generated
vendored
File diff suppressed because it is too large
Load Diff
1
web/assets/index-d698Brhb.js.map
generated
vendored
1
web/assets/index-d698Brhb.js.map
generated
vendored
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index-d698Brhb.js","sources":["../../node_modules/@primevue/icons/bars/index.mjs","../../node_modules/@primevue/icons/plus/index.mjs"],"sourcesContent":["import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'BarsIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M13.3226 3.6129H0.677419C0.497757 3.6129 0.325452 3.54152 0.198411 3.41448C0.0713707 3.28744 0 3.11514 0 2.93548C0 2.75581 0.0713707 2.58351 0.198411 2.45647C0.325452 2.32943 0.497757 2.25806 0.677419 2.25806H13.3226C13.5022 2.25806 13.6745 2.32943 13.8016 2.45647C13.9286 2.58351 14 2.75581 14 2.93548C14 3.11514 13.9286 3.28744 13.8016 3.41448C13.6745 3.54152 13.5022 3.6129 13.3226 3.6129ZM13.3226 7.67741H0.677419C0.497757 7.67741 0.325452 7.60604 0.198411 7.479C0.0713707 7.35196 0 7.17965 0 6.99999C0 6.82033 0.0713707 6.64802 0.198411 6.52098C0.325452 6.39394 0.497757 6.32257 0.677419 6.32257H13.3226C13.5022 6.32257 13.6745 6.39394 13.8016 6.52098C13.9286 6.64802 14 6.82033 14 6.99999C14 7.17965 13.9286 7.35196 13.8016 7.479C13.6745 7.60604 13.5022 7.67741 13.3226 7.67741ZM0.677419 11.7419H13.3226C13.5022 11.7419 13.6745 11.6706 13.8016 11.5435C13.9286 11.4165 14 11.2442 14 11.0645C14 10.8848 13.9286 10.7125 13.8016 10.5855C13.6745 10.4585 13.5022 10.3871 13.3226 10.3871H0.677419C0.497757 10.3871 0.325452 10.4585 0.198411 10.5855C0.0713707 10.7125 0 10.8848 0 11.0645C0 11.2442 0.0713707 11.4165 0.198411 11.5435C0.325452 11.6706 0.497757 11.7419 0.677419 11.7419Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n","import BaseIcon from '@primevue/icons/baseicon';\nimport { openBlock, createElementBlock, mergeProps, createElementVNode } from 'vue';\n\nvar script = {\n name: 'PlusIcon',\n \"extends\": BaseIcon\n};\n\nvar _hoisted_1 = /*#__PURE__*/createElementVNode(\"path\", {\n d: \"M7.67742 6.32258V0.677419C7.67742 0.497757 7.60605 0.325452 7.47901 0.198411C7.35197 0.0713707 7.17966 0 7 0C6.82034 0 6.64803 0.0713707 6.52099 0.198411C6.39395 0.325452 6.32258 0.497757 6.32258 0.677419V6.32258H0.677419C0.497757 6.32258 0.325452 6.39395 0.198411 6.52099C0.0713707 6.64803 0 6.82034 0 7C0 7.17966 0.0713707 7.35197 0.198411 7.47901C0.325452 7.60605 0.497757 7.67742 0.677419 7.67742H6.32258V13.3226C6.32492 13.5015 6.39704 13.6725 6.52358 13.799C6.65012 13.9255 6.82106 13.9977 7 14C7.17966 14 7.35197 13.9286 7.47901 13.8016C7.60605 13.6745 7.67742 13.5022 7.67742 13.3226V7.67742H13.3226C13.5022 7.67742 13.6745 7.60605 13.8016 7.47901C13.9286 7.35197 14 7.17966 14 7C13.9977 6.82106 13.9255 6.65012 13.799 6.52358C13.6725 6.39704 13.5015 6.32492 13.3226 6.32258H7.67742Z\",\n fill: \"currentColor\"\n}, null, -1);\nvar _hoisted_2 = [_hoisted_1];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", mergeProps({\n width: \"14\",\n height: \"14\",\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _ctx.pti()), _hoisted_2, 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n"],"names":["script","BaseIcon","_hoisted_1","createElementVNode","_hoisted_2","render"],"mappings":";;;AAGG,IAACA,WAAS;AAAA,EACX,MAAM;AAAA,EACN,WAAWC;AACb;AAEA,IAAIC,eAA0BC,gCAAmB,QAAQ;AAAA,EACvD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,GAAG;AAAA,EACH,MAAM;AACR,GAAG,MAAM,EAAE;AACX,IAAIC,eAAa,CAACF,YAAU;AAC5B,SAASG,SAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AAC7D,SAAO,UAAW,GAAE,mBAAmB,OAAO,WAAW;AAAA,IACvD,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACR,GAAE,KAAK,IAAG,CAAE,GAAGD,cAAY,EAAE;AAChC;AARSC;AAUTL,SAAO,SAASK;ACtBb,IAAC,SAAS;AAAA,EACX,MAAM;AAAA,EACN,WAAWJ;AACb;AAEA,IAAI,aAA0BE,gCAAmB,QAAQ;AAAA,EACvD,GAAG;AAAA,EACH,MAAM;AACR,GAAG,MAAM,EAAE;AACX,IAAI,aAAa,CAAC,UAAU;AAC5B,SAAS,OAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AAC7D,SAAO,UAAW,GAAE,mBAAmB,OAAO,WAAW;AAAA,IACvD,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACR,GAAE,KAAK,IAAG,CAAE,GAAG,YAAY,EAAE;AAChC;AARS;AAUT,OAAO,SAAS;","x_google_ignoreList":[0,1]}
|
|
173
web/assets/index-hdfnBvYs.js
generated
vendored
Normal file
173
web/assets/index-hdfnBvYs.js
generated
vendored
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { B as BaseStyle, q as script$2, ak as UniqueComponentId, c9 as script$4, l as script$5, S as Ripple, aB as resolveComponent, o as openBlock, f as createElementBlock, D as mergeProps, H as createBaseVNode, J as renderSlot, T as normalizeClass, X as toDisplayString, I as createCommentVNode, k as createBlock, M as withCtx, G as resolveDynamicComponent, N as createVNode, aC as Transition, i as withDirectives, v as vShow } from "./index-C4Fk50Nx.js";
|
||||||
|
import { s as script$3 } from "./index-B7ycxfFq.js";
|
||||||
|
var theme = /* @__PURE__ */ __name(function theme2(_ref) {
|
||||||
|
var dt = _ref.dt;
|
||||||
|
return "\n.p-panel {\n border: 1px solid ".concat(dt("panel.border.color"), ";\n border-radius: ").concat(dt("panel.border.radius"), ";\n background: ").concat(dt("panel.background"), ";\n color: ").concat(dt("panel.color"), ";\n}\n\n.p-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ").concat(dt("panel.header.padding"), ";\n background: ").concat(dt("panel.header.background"), ";\n color: ").concat(dt("panel.header.color"), ";\n border-style: solid;\n border-width: ").concat(dt("panel.header.border.width"), ";\n border-color: ").concat(dt("panel.header.border.color"), ";\n border-radius: ").concat(dt("panel.header.border.radius"), ";\n}\n\n.p-panel-toggleable .p-panel-header {\n padding: ").concat(dt("panel.toggleable.header.padding"), ";\n}\n\n.p-panel-title {\n line-height: 1;\n font-weight: ").concat(dt("panel.title.font.weight"), ";\n}\n\n.p-panel-content {\n padding: ").concat(dt("panel.content.padding"), ";\n}\n\n.p-panel-footer {\n padding: ").concat(dt("panel.footer.padding"), ";\n}\n");
|
||||||
|
}, "theme");
|
||||||
|
var classes = {
|
||||||
|
root: /* @__PURE__ */ __name(function root(_ref2) {
|
||||||
|
var props = _ref2.props;
|
||||||
|
return ["p-panel p-component", {
|
||||||
|
"p-panel-toggleable": props.toggleable
|
||||||
|
}];
|
||||||
|
}, "root"),
|
||||||
|
header: "p-panel-header",
|
||||||
|
title: "p-panel-title",
|
||||||
|
headerActions: "p-panel-header-actions",
|
||||||
|
pcToggleButton: "p-panel-toggle-button",
|
||||||
|
contentContainer: "p-panel-content-container",
|
||||||
|
content: "p-panel-content",
|
||||||
|
footer: "p-panel-footer"
|
||||||
|
};
|
||||||
|
var PanelStyle = BaseStyle.extend({
|
||||||
|
name: "panel",
|
||||||
|
theme,
|
||||||
|
classes
|
||||||
|
});
|
||||||
|
var script$1 = {
|
||||||
|
name: "BasePanel",
|
||||||
|
"extends": script$2,
|
||||||
|
props: {
|
||||||
|
header: String,
|
||||||
|
toggleable: Boolean,
|
||||||
|
collapsed: Boolean,
|
||||||
|
toggleButtonProps: {
|
||||||
|
type: Object,
|
||||||
|
"default": /* @__PURE__ */ __name(function _default() {
|
||||||
|
return {
|
||||||
|
severity: "secondary",
|
||||||
|
text: true,
|
||||||
|
rounded: true
|
||||||
|
};
|
||||||
|
}, "_default")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
style: PanelStyle,
|
||||||
|
provide: /* @__PURE__ */ __name(function provide() {
|
||||||
|
return {
|
||||||
|
$pcPanel: this,
|
||||||
|
$parentInstance: this
|
||||||
|
};
|
||||||
|
}, "provide")
|
||||||
|
};
|
||||||
|
var script = {
|
||||||
|
name: "Panel",
|
||||||
|
"extends": script$1,
|
||||||
|
inheritAttrs: false,
|
||||||
|
emits: ["update:collapsed", "toggle"],
|
||||||
|
data: /* @__PURE__ */ __name(function data() {
|
||||||
|
return {
|
||||||
|
id: this.$attrs.id,
|
||||||
|
d_collapsed: this.collapsed
|
||||||
|
};
|
||||||
|
}, "data"),
|
||||||
|
watch: {
|
||||||
|
"$attrs.id": /* @__PURE__ */ __name(function $attrsId(newValue) {
|
||||||
|
this.id = newValue || UniqueComponentId();
|
||||||
|
}, "$attrsId"),
|
||||||
|
collapsed: /* @__PURE__ */ __name(function collapsed(newValue) {
|
||||||
|
this.d_collapsed = newValue;
|
||||||
|
}, "collapsed")
|
||||||
|
},
|
||||||
|
mounted: /* @__PURE__ */ __name(function mounted() {
|
||||||
|
this.id = this.id || UniqueComponentId();
|
||||||
|
}, "mounted"),
|
||||||
|
methods: {
|
||||||
|
toggle: /* @__PURE__ */ __name(function toggle(event) {
|
||||||
|
this.d_collapsed = !this.d_collapsed;
|
||||||
|
this.$emit("update:collapsed", this.d_collapsed);
|
||||||
|
this.$emit("toggle", {
|
||||||
|
originalEvent: event,
|
||||||
|
value: this.d_collapsed
|
||||||
|
});
|
||||||
|
}, "toggle"),
|
||||||
|
onKeyDown: /* @__PURE__ */ __name(function onKeyDown(event) {
|
||||||
|
if (event.code === "Enter" || event.code === "NumpadEnter" || event.code === "Space") {
|
||||||
|
this.toggle(event);
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}, "onKeyDown")
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
buttonAriaLabel: /* @__PURE__ */ __name(function buttonAriaLabel() {
|
||||||
|
return this.toggleButtonProps && this.toggleButtonProps.ariaLabel ? this.toggleButtonProps.ariaLabel : this.header;
|
||||||
|
}, "buttonAriaLabel")
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
PlusIcon: script$3,
|
||||||
|
MinusIcon: script$4,
|
||||||
|
Button: script$5
|
||||||
|
},
|
||||||
|
directives: {
|
||||||
|
ripple: Ripple
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _hoisted_1 = ["id"];
|
||||||
|
var _hoisted_2 = ["id", "aria-labelledby"];
|
||||||
|
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
|
var _component_Button = resolveComponent("Button");
|
||||||
|
return openBlock(), createElementBlock("div", mergeProps({
|
||||||
|
"class": _ctx.cx("root")
|
||||||
|
}, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({
|
||||||
|
"class": _ctx.cx("header")
|
||||||
|
}, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header", {
|
||||||
|
id: $data.id + "_header",
|
||||||
|
"class": normalizeClass(_ctx.cx("title"))
|
||||||
|
}, function() {
|
||||||
|
return [_ctx.header ? (openBlock(), createElementBlock("span", mergeProps({
|
||||||
|
key: 0,
|
||||||
|
id: $data.id + "_header",
|
||||||
|
"class": _ctx.cx("title")
|
||||||
|
}, _ctx.ptm("title")), toDisplayString(_ctx.header), 17, _hoisted_1)) : createCommentVNode("", true)];
|
||||||
|
}), createBaseVNode("div", mergeProps({
|
||||||
|
"class": _ctx.cx("headerActions")
|
||||||
|
}, _ctx.ptm("headerActions")), [renderSlot(_ctx.$slots, "icons"), _ctx.toggleable ? (openBlock(), createBlock(_component_Button, mergeProps({
|
||||||
|
key: 0,
|
||||||
|
id: $data.id + "_header",
|
||||||
|
"class": _ctx.cx("pcToggleButton"),
|
||||||
|
"aria-label": $options.buttonAriaLabel,
|
||||||
|
"aria-controls": $data.id + "_content",
|
||||||
|
"aria-expanded": !$data.d_collapsed,
|
||||||
|
unstyled: _ctx.unstyled,
|
||||||
|
onClick: $options.toggle,
|
||||||
|
onKeydown: $options.onKeyDown
|
||||||
|
}, _ctx.toggleButtonProps, {
|
||||||
|
pt: _ctx.ptm("pcToggleButton")
|
||||||
|
}), {
|
||||||
|
icon: withCtx(function(slotProps) {
|
||||||
|
return [renderSlot(_ctx.$slots, _ctx.$slots.toggleicon ? "toggleicon" : "togglericon", {
|
||||||
|
collapsed: $data.d_collapsed
|
||||||
|
}, function() {
|
||||||
|
return [(openBlock(), createBlock(resolveDynamicComponent($data.d_collapsed ? "PlusIcon" : "MinusIcon"), mergeProps({
|
||||||
|
"class": slotProps["class"]
|
||||||
|
}, _ctx.ptm("pcToggleButton")["icon"]), null, 16, ["class"]))];
|
||||||
|
})];
|
||||||
|
}),
|
||||||
|
_: 3
|
||||||
|
}, 16, ["id", "class", "aria-label", "aria-controls", "aria-expanded", "unstyled", "onClick", "onKeydown", "pt"])) : createCommentVNode("", true)], 16)], 16), createVNode(Transition, mergeProps({
|
||||||
|
name: "p-toggleable-content"
|
||||||
|
}, _ctx.ptm("transition")), {
|
||||||
|
"default": withCtx(function() {
|
||||||
|
return [withDirectives(createBaseVNode("div", mergeProps({
|
||||||
|
id: $data.id + "_content",
|
||||||
|
"class": _ctx.cx("contentContainer"),
|
||||||
|
role: "region",
|
||||||
|
"aria-labelledby": $data.id + "_header"
|
||||||
|
}, _ctx.ptm("contentContainer")), [createBaseVNode("div", mergeProps({
|
||||||
|
"class": _ctx.cx("content")
|
||||||
|
}, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "default")], 16), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({
|
||||||
|
key: 0,
|
||||||
|
"class": _ctx.cx("footer")
|
||||||
|
}, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true)], 16, _hoisted_2), [[vShow, !$data.d_collapsed]])];
|
||||||
|
}),
|
||||||
|
_: 3
|
||||||
|
}, 16)], 16);
|
||||||
|
}
|
||||||
|
__name(render, "render");
|
||||||
|
script.render = render;
|
||||||
|
export {
|
||||||
|
script as s
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=index-hdfnBvYs.js.map
|
33
web/assets/index-d698Brhb.js → web/assets/index-lMQBwSDj.js
generated
vendored
33
web/assets/index-d698Brhb.js → web/assets/index-lMQBwSDj.js
generated
vendored
@ -1,36 +1,16 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { cp as script$2, A as createBaseVNode, f as openBlock, g as createElementBlock, m as mergeProps } from "./index-DIU5yZe9.js";
|
import { ct as script$1, H as createBaseVNode, o as openBlock, f as createElementBlock, D as mergeProps } from "./index-C4Fk50Nx.js";
|
||||||
var script$1 = {
|
var script = {
|
||||||
name: "BarsIcon",
|
name: "BarsIcon",
|
||||||
"extends": script$2
|
"extends": script$1
|
||||||
};
|
};
|
||||||
var _hoisted_1$1 = /* @__PURE__ */ createBaseVNode("path", {
|
var _hoisted_1 = /* @__PURE__ */ createBaseVNode("path", {
|
||||||
"fill-rule": "evenodd",
|
"fill-rule": "evenodd",
|
||||||
"clip-rule": "evenodd",
|
"clip-rule": "evenodd",
|
||||||
d: "M13.3226 3.6129H0.677419C0.497757 3.6129 0.325452 3.54152 0.198411 3.41448C0.0713707 3.28744 0 3.11514 0 2.93548C0 2.75581 0.0713707 2.58351 0.198411 2.45647C0.325452 2.32943 0.497757 2.25806 0.677419 2.25806H13.3226C13.5022 2.25806 13.6745 2.32943 13.8016 2.45647C13.9286 2.58351 14 2.75581 14 2.93548C14 3.11514 13.9286 3.28744 13.8016 3.41448C13.6745 3.54152 13.5022 3.6129 13.3226 3.6129ZM13.3226 7.67741H0.677419C0.497757 7.67741 0.325452 7.60604 0.198411 7.479C0.0713707 7.35196 0 7.17965 0 6.99999C0 6.82033 0.0713707 6.64802 0.198411 6.52098C0.325452 6.39394 0.497757 6.32257 0.677419 6.32257H13.3226C13.5022 6.32257 13.6745 6.39394 13.8016 6.52098C13.9286 6.64802 14 6.82033 14 6.99999C14 7.17965 13.9286 7.35196 13.8016 7.479C13.6745 7.60604 13.5022 7.67741 13.3226 7.67741ZM0.677419 11.7419H13.3226C13.5022 11.7419 13.6745 11.6706 13.8016 11.5435C13.9286 11.4165 14 11.2442 14 11.0645C14 10.8848 13.9286 10.7125 13.8016 10.5855C13.6745 10.4585 13.5022 10.3871 13.3226 10.3871H0.677419C0.497757 10.3871 0.325452 10.4585 0.198411 10.5855C0.0713707 10.7125 0 10.8848 0 11.0645C0 11.2442 0.0713707 11.4165 0.198411 11.5435C0.325452 11.6706 0.497757 11.7419 0.677419 11.7419Z",
|
d: "M13.3226 3.6129H0.677419C0.497757 3.6129 0.325452 3.54152 0.198411 3.41448C0.0713707 3.28744 0 3.11514 0 2.93548C0 2.75581 0.0713707 2.58351 0.198411 2.45647C0.325452 2.32943 0.497757 2.25806 0.677419 2.25806H13.3226C13.5022 2.25806 13.6745 2.32943 13.8016 2.45647C13.9286 2.58351 14 2.75581 14 2.93548C14 3.11514 13.9286 3.28744 13.8016 3.41448C13.6745 3.54152 13.5022 3.6129 13.3226 3.6129ZM13.3226 7.67741H0.677419C0.497757 7.67741 0.325452 7.60604 0.198411 7.479C0.0713707 7.35196 0 7.17965 0 6.99999C0 6.82033 0.0713707 6.64802 0.198411 6.52098C0.325452 6.39394 0.497757 6.32257 0.677419 6.32257H13.3226C13.5022 6.32257 13.6745 6.39394 13.8016 6.52098C13.9286 6.64802 14 6.82033 14 6.99999C14 7.17965 13.9286 7.35196 13.8016 7.479C13.6745 7.60604 13.5022 7.67741 13.3226 7.67741ZM0.677419 11.7419H13.3226C13.5022 11.7419 13.6745 11.6706 13.8016 11.5435C13.9286 11.4165 14 11.2442 14 11.0645C14 10.8848 13.9286 10.7125 13.8016 10.5855C13.6745 10.4585 13.5022 10.3871 13.3226 10.3871H0.677419C0.497757 10.3871 0.325452 10.4585 0.198411 10.5855C0.0713707 10.7125 0 10.8848 0 11.0645C0 11.2442 0.0713707 11.4165 0.198411 11.5435C0.325452 11.6706 0.497757 11.7419 0.677419 11.7419Z",
|
||||||
fill: "currentColor"
|
fill: "currentColor"
|
||||||
}, null, -1);
|
}, null, -1);
|
||||||
var _hoisted_2$1 = [_hoisted_1$1];
|
|
||||||
function render$1(_ctx, _cache, $props, $setup, $data, $options) {
|
|
||||||
return openBlock(), createElementBlock("svg", mergeProps({
|
|
||||||
width: "14",
|
|
||||||
height: "14",
|
|
||||||
viewBox: "0 0 14 14",
|
|
||||||
fill: "none",
|
|
||||||
xmlns: "http://www.w3.org/2000/svg"
|
|
||||||
}, _ctx.pti()), _hoisted_2$1, 16);
|
|
||||||
}
|
|
||||||
__name(render$1, "render$1");
|
|
||||||
script$1.render = render$1;
|
|
||||||
var script = {
|
|
||||||
name: "PlusIcon",
|
|
||||||
"extends": script$2
|
|
||||||
};
|
|
||||||
var _hoisted_1 = /* @__PURE__ */ createBaseVNode("path", {
|
|
||||||
d: "M7.67742 6.32258V0.677419C7.67742 0.497757 7.60605 0.325452 7.47901 0.198411C7.35197 0.0713707 7.17966 0 7 0C6.82034 0 6.64803 0.0713707 6.52099 0.198411C6.39395 0.325452 6.32258 0.497757 6.32258 0.677419V6.32258H0.677419C0.497757 6.32258 0.325452 6.39395 0.198411 6.52099C0.0713707 6.64803 0 6.82034 0 7C0 7.17966 0.0713707 7.35197 0.198411 7.47901C0.325452 7.60605 0.497757 7.67742 0.677419 7.67742H6.32258V13.3226C6.32492 13.5015 6.39704 13.6725 6.52358 13.799C6.65012 13.9255 6.82106 13.9977 7 14C7.17966 14 7.35197 13.9286 7.47901 13.8016C7.60605 13.6745 7.67742 13.5022 7.67742 13.3226V7.67742H13.3226C13.5022 7.67742 13.6745 7.60605 13.8016 7.47901C13.9286 7.35197 14 7.17966 14 7C13.9977 6.82106 13.9255 6.65012 13.799 6.52358C13.6725 6.39704 13.5015 6.32492 13.3226 6.32258H7.67742Z",
|
|
||||||
fill: "currentColor"
|
|
||||||
}, null, -1);
|
|
||||||
var _hoisted_2 = [_hoisted_1];
|
var _hoisted_2 = [_hoisted_1];
|
||||||
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
return openBlock(), createElementBlock("svg", mergeProps({
|
return openBlock(), createElementBlock("svg", mergeProps({
|
||||||
@ -44,7 +24,6 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|||||||
__name(render, "render");
|
__name(render, "render");
|
||||||
script.render = render;
|
script.render = render;
|
||||||
export {
|
export {
|
||||||
script as a,
|
script as s
|
||||||
script$1 as s
|
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=index-d698Brhb.js.map
|
//# sourceMappingURL=index-lMQBwSDj.js.map
|
1
web/assets/index-p6KSJ2Zq.js.map
generated
vendored
1
web/assets/index-p6KSJ2Zq.js.map
generated
vendored
File diff suppressed because one or more lines are too long
250
web/assets/keybindingService-D48fkLBy.js
generated
vendored
Normal file
250
web/assets/keybindingService-D48fkLBy.js
generated
vendored
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
|
import { a$ as useKeybindingStore, a2 as useCommandStore, a as useSettingStore, cq as KeyComboImpl, cr as KeybindingImpl } from "./index-C4Fk50Nx.js";
|
||||||
|
const CORE_KEYBINDINGS = [
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
ctrl: true,
|
||||||
|
key: "Enter"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.QueuePrompt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
ctrl: true,
|
||||||
|
shift: true,
|
||||||
|
key: "Enter"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.QueuePromptFront"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
ctrl: true,
|
||||||
|
alt: true,
|
||||||
|
key: "Enter"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Interrupt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "r"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.RefreshNodeDefinitions"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "q"
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleSidebarTab.queue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "w"
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleSidebarTab.workflows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "n"
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleSidebarTab.node-library"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "m"
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleSidebarTab.model-library"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "s",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.SaveWorkflow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "o",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.OpenWorkflow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "Backspace"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.ClearWorkflow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "g",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Graph.GroupSelectedNodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: ",",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.ShowSettingsDialog"
|
||||||
|
},
|
||||||
|
// For '=' both holding shift and not holding shift
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "=",
|
||||||
|
alt: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ZoomIn",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "+",
|
||||||
|
alt: true,
|
||||||
|
shift: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ZoomIn",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
// For number pad '+'
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "+",
|
||||||
|
alt: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ZoomIn",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "-",
|
||||||
|
alt: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ZoomOut",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "."
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.FitView",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "p"
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ToggleSelected.Pin",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "c",
|
||||||
|
alt: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ToggleSelectedNodes.Collapse",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "b",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ToggleSelectedNodes.Bypass",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "m",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Comfy.Canvas.ToggleSelectedNodes.Mute",
|
||||||
|
targetSelector: "#graph-canvas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "`",
|
||||||
|
ctrl: true
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleBottomPanelTab.logs-terminal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
combo: {
|
||||||
|
key: "f"
|
||||||
|
},
|
||||||
|
commandId: "Workspace.ToggleFocusMode"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const useKeybindingService = /* @__PURE__ */ __name(() => {
|
||||||
|
const keybindingStore = useKeybindingStore();
|
||||||
|
const commandStore = useCommandStore();
|
||||||
|
const settingStore = useSettingStore();
|
||||||
|
const keybindHandler = /* @__PURE__ */ __name(async function(event) {
|
||||||
|
const keyCombo = KeyComboImpl.fromEvent(event);
|
||||||
|
if (keyCombo.isModifier) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const target = event.composedPath()[0];
|
||||||
|
if (!keyCombo.hasModifier && (target.tagName === "TEXTAREA" || target.tagName === "INPUT" || target.tagName === "SPAN" && target.classList.contains("property_value"))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const keybinding = keybindingStore.getKeybinding(keyCombo);
|
||||||
|
if (keybinding && keybinding.targetSelector !== "#graph-canvas") {
|
||||||
|
event.preventDefault();
|
||||||
|
await commandStore.execute(keybinding.commandId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.ctrlKey || event.altKey || event.metaKey) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key === "Escape") {
|
||||||
|
const modals = document.querySelectorAll(".comfy-modal");
|
||||||
|
for (const modal of modals) {
|
||||||
|
const modalDisplay = window.getComputedStyle(modal).getPropertyValue("display");
|
||||||
|
if (modalDisplay !== "none") {
|
||||||
|
modal.style.display = "none";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const d of document.querySelectorAll("dialog")) d.close();
|
||||||
|
}
|
||||||
|
}, "keybindHandler");
|
||||||
|
const registerCoreKeybindings = /* @__PURE__ */ __name(() => {
|
||||||
|
for (const keybinding of CORE_KEYBINDINGS) {
|
||||||
|
keybindingStore.addDefaultKeybinding(new KeybindingImpl(keybinding));
|
||||||
|
}
|
||||||
|
}, "registerCoreKeybindings");
|
||||||
|
function registerUserKeybindings() {
|
||||||
|
const unsetBindings = settingStore.get("Comfy.Keybinding.UnsetBindings");
|
||||||
|
for (const keybinding of unsetBindings) {
|
||||||
|
keybindingStore.unsetKeybinding(new KeybindingImpl(keybinding));
|
||||||
|
}
|
||||||
|
const newBindings = settingStore.get("Comfy.Keybinding.NewBindings");
|
||||||
|
for (const keybinding of newBindings) {
|
||||||
|
keybindingStore.addUserKeybinding(new KeybindingImpl(keybinding));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__name(registerUserKeybindings, "registerUserKeybindings");
|
||||||
|
async function persistUserKeybindings() {
|
||||||
|
await settingStore.set(
|
||||||
|
"Comfy.Keybinding.NewBindings",
|
||||||
|
Object.values(keybindingStore.userKeybindings.value)
|
||||||
|
);
|
||||||
|
await settingStore.set(
|
||||||
|
"Comfy.Keybinding.UnsetBindings",
|
||||||
|
Object.values(keybindingStore.userUnsetKeybindings.value)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
__name(persistUserKeybindings, "persistUserKeybindings");
|
||||||
|
return {
|
||||||
|
keybindHandler,
|
||||||
|
registerCoreKeybindings,
|
||||||
|
registerUserKeybindings,
|
||||||
|
persistUserKeybindings
|
||||||
|
};
|
||||||
|
}, "useKeybindingService");
|
||||||
|
export {
|
||||||
|
useKeybindingService as u
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=keybindingService-D48fkLBy.js.map
|
4
web/assets/serverConfigStore-DYv7_Nld.js → web/assets/serverConfigStore-BawYAb1j.js
generated
vendored
4
web/assets/serverConfigStore-DYv7_Nld.js → web/assets/serverConfigStore-BawYAb1j.js
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
var __defProp = Object.defineProperty;
|
var __defProp = Object.defineProperty;
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||||
import { d as defineStore, r as ref, q as computed } from "./index-DIU5yZe9.js";
|
import { $ as defineStore, ab as ref, c as computed } from "./index-C4Fk50Nx.js";
|
||||||
const useServerConfigStore = defineStore("serverConfig", () => {
|
const useServerConfigStore = defineStore("serverConfig", () => {
|
||||||
const serverConfigById = ref({});
|
const serverConfigById = ref({});
|
||||||
const serverConfigs = computed(() => {
|
const serverConfigs = computed(() => {
|
||||||
@ -87,4 +87,4 @@ const useServerConfigStore = defineStore("serverConfig", () => {
|
|||||||
export {
|
export {
|
||||||
useServerConfigStore as u
|
useServerConfigStore as u
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=serverConfigStore-DYv7_Nld.js.map
|
//# sourceMappingURL=serverConfigStore-BawYAb1j.js.map
|
1
web/assets/serverConfigStore-DYv7_Nld.js.map
generated
vendored
1
web/assets/serverConfigStore-DYv7_Nld.js.map
generated
vendored
File diff suppressed because one or more lines are too long
766
web/assets/widgetInputs-Bvm3AgOa.js
generated
vendored
766
web/assets/widgetInputs-Bvm3AgOa.js
generated
vendored
@ -1,766 +0,0 @@
|
|||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
||||||
import { c as LGraphNode, b as app, cg as applyTextReplacements, cf as ComfyWidgets, cj as addValueControlWidgets, j as LiteGraph } from "./index-DIU5yZe9.js";
|
|
||||||
const CONVERTED_TYPE = "converted-widget";
|
|
||||||
const VALID_TYPES = [
|
|
||||||
"STRING",
|
|
||||||
"combo",
|
|
||||||
"number",
|
|
||||||
"toggle",
|
|
||||||
"BOOLEAN",
|
|
||||||
"text",
|
|
||||||
"string"
|
|
||||||
];
|
|
||||||
const CONFIG = Symbol();
|
|
||||||
const GET_CONFIG = Symbol();
|
|
||||||
const TARGET = Symbol();
|
|
||||||
const replacePropertyName = "Run widget replace on values";
|
|
||||||
class PrimitiveNode extends LGraphNode {
|
|
||||||
static {
|
|
||||||
__name(this, "PrimitiveNode");
|
|
||||||
}
|
|
||||||
controlValues;
|
|
||||||
lastType;
|
|
||||||
static category;
|
|
||||||
constructor(title) {
|
|
||||||
super(title);
|
|
||||||
this.addOutput("connect to widget input", "*");
|
|
||||||
this.serialize_widgets = true;
|
|
||||||
this.isVirtualNode = true;
|
|
||||||
if (!this.properties || !(replacePropertyName in this.properties)) {
|
|
||||||
this.addProperty(replacePropertyName, false, "boolean");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
applyToGraph(extraLinks = []) {
|
|
||||||
if (!this.outputs[0].links?.length) return;
|
|
||||||
function get_links(node) {
|
|
||||||
let links2 = [];
|
|
||||||
for (const l of node.outputs[0].links) {
|
|
||||||
const linkInfo = app.graph.links[l];
|
|
||||||
const n = node.graph.getNodeById(linkInfo.target_id);
|
|
||||||
if (n.type == "Reroute") {
|
|
||||||
links2 = links2.concat(get_links(n));
|
|
||||||
} else {
|
|
||||||
links2.push(l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return links2;
|
|
||||||
}
|
|
||||||
__name(get_links, "get_links");
|
|
||||||
let links = [
|
|
||||||
...get_links(this).map((l) => app.graph.links[l]),
|
|
||||||
...extraLinks
|
|
||||||
];
|
|
||||||
let v = this.widgets?.[0].value;
|
|
||||||
if (v && this.properties[replacePropertyName]) {
|
|
||||||
v = applyTextReplacements(app, v);
|
|
||||||
}
|
|
||||||
for (const linkInfo of links) {
|
|
||||||
const node = this.graph.getNodeById(linkInfo.target_id);
|
|
||||||
const input = node.inputs[linkInfo.target_slot];
|
|
||||||
let widget;
|
|
||||||
if (input.widget[TARGET]) {
|
|
||||||
widget = input.widget[TARGET];
|
|
||||||
} else {
|
|
||||||
const widgetName = input.widget.name;
|
|
||||||
if (widgetName) {
|
|
||||||
widget = node.widgets.find((w) => w.name === widgetName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (widget) {
|
|
||||||
widget.value = v;
|
|
||||||
if (widget.callback) {
|
|
||||||
widget.callback(
|
|
||||||
widget.value,
|
|
||||||
app.canvas,
|
|
||||||
node,
|
|
||||||
app.canvas.graph_mouse,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
refreshComboInNode() {
|
|
||||||
const widget = this.widgets?.[0];
|
|
||||||
if (widget?.type === "combo") {
|
|
||||||
widget.options.values = this.outputs[0].widget[GET_CONFIG]()[0];
|
|
||||||
if (!widget.options.values.includes(widget.value)) {
|
|
||||||
widget.value = widget.options.values[0];
|
|
||||||
widget.callback(widget.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onAfterGraphConfigured() {
|
|
||||||
if (this.outputs[0].links?.length && !this.widgets?.length) {
|
|
||||||
if (!this.#onFirstConnection()) return;
|
|
||||||
if (this.widgets) {
|
|
||||||
for (let i = 0; i < this.widgets_values.length; i++) {
|
|
||||||
const w = this.widgets[i];
|
|
||||||
if (w) {
|
|
||||||
w.value = this.widgets_values[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.#mergeWidgetConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onConnectionsChange(_, index, connected) {
|
|
||||||
if (app.configuringGraph) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const links = this.outputs[0].links;
|
|
||||||
if (connected) {
|
|
||||||
if (links?.length && !this.widgets?.length) {
|
|
||||||
this.#onFirstConnection();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.#mergeWidgetConfig();
|
|
||||||
if (!links?.length) {
|
|
||||||
this.onLastDisconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onConnectOutput(slot, type, input, target_node, target_slot) {
|
|
||||||
if (!input.widget) {
|
|
||||||
if (!(input.type in ComfyWidgets)) return false;
|
|
||||||
}
|
|
||||||
if (this.outputs[slot].links?.length) {
|
|
||||||
const valid = this.#isValidConnection(input);
|
|
||||||
if (valid) {
|
|
||||||
this.applyToGraph([{ target_id: target_node.id, target_slot }]);
|
|
||||||
}
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#onFirstConnection(recreating) {
|
|
||||||
if (!this.outputs[0].links) {
|
|
||||||
this.onLastDisconnect();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const linkId = this.outputs[0].links[0];
|
|
||||||
const link = this.graph.links[linkId];
|
|
||||||
if (!link) return;
|
|
||||||
const theirNode = this.graph.getNodeById(link.target_id);
|
|
||||||
if (!theirNode || !theirNode.inputs) return;
|
|
||||||
const input = theirNode.inputs[link.target_slot];
|
|
||||||
if (!input) return;
|
|
||||||
let widget;
|
|
||||||
if (!input.widget) {
|
|
||||||
if (!(input.type in ComfyWidgets)) return;
|
|
||||||
widget = { name: input.name, [GET_CONFIG]: () => [input.type, {}] };
|
|
||||||
} else {
|
|
||||||
widget = input.widget;
|
|
||||||
}
|
|
||||||
const config = widget[GET_CONFIG]?.();
|
|
||||||
if (!config) return;
|
|
||||||
const { type } = getWidgetType(config);
|
|
||||||
this.outputs[0].type = type;
|
|
||||||
this.outputs[0].name = type;
|
|
||||||
this.outputs[0].widget = widget;
|
|
||||||
this.#createWidget(
|
|
||||||
widget[CONFIG] ?? config,
|
|
||||||
theirNode,
|
|
||||||
widget.name,
|
|
||||||
recreating,
|
|
||||||
widget[TARGET]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#createWidget(inputData, node, widgetName, recreating, targetWidget) {
|
|
||||||
let type = inputData[0];
|
|
||||||
if (type instanceof Array) {
|
|
||||||
type = "COMBO";
|
|
||||||
}
|
|
||||||
const [oldWidth, oldHeight] = this.size;
|
|
||||||
let widget;
|
|
||||||
if (type in ComfyWidgets) {
|
|
||||||
widget = (ComfyWidgets[type](this, "value", inputData, app) || {}).widget;
|
|
||||||
} else {
|
|
||||||
widget = this.addWidget(type, "value", null, () => {
|
|
||||||
}, {});
|
|
||||||
}
|
|
||||||
if (targetWidget) {
|
|
||||||
widget.value = targetWidget.value;
|
|
||||||
} else if (node?.widgets && widget) {
|
|
||||||
const theirWidget = node.widgets.find((w) => w.name === widgetName);
|
|
||||||
if (theirWidget) {
|
|
||||||
widget.value = theirWidget.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!inputData?.[1]?.control_after_generate && (widget.type === "number" || widget.type === "combo")) {
|
|
||||||
let control_value = this.widgets_values?.[1];
|
|
||||||
if (!control_value) {
|
|
||||||
control_value = "fixed";
|
|
||||||
}
|
|
||||||
addValueControlWidgets(
|
|
||||||
this,
|
|
||||||
widget,
|
|
||||||
control_value,
|
|
||||||
void 0,
|
|
||||||
inputData
|
|
||||||
);
|
|
||||||
let filter = this.widgets_values?.[2];
|
|
||||||
if (filter && this.widgets.length === 3) {
|
|
||||||
this.widgets[2].value = filter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const controlValues = this.controlValues;
|
|
||||||
if (this.lastType === this.widgets[0].type && controlValues?.length === this.widgets.length - 1) {
|
|
||||||
for (let i = 0; i < controlValues.length; i++) {
|
|
||||||
this.widgets[i + 1].value = controlValues[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const callback = widget.callback;
|
|
||||||
const self = this;
|
|
||||||
widget.callback = function() {
|
|
||||||
const r = callback ? callback.apply(this, arguments) : void 0;
|
|
||||||
self.applyToGraph();
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
this.size = [
|
|
||||||
Math.max(this.size[0], oldWidth),
|
|
||||||
Math.max(this.size[1], oldHeight)
|
|
||||||
];
|
|
||||||
if (!recreating) {
|
|
||||||
const sz = this.computeSize();
|
|
||||||
if (this.size[0] < sz[0]) {
|
|
||||||
this.size[0] = sz[0];
|
|
||||||
}
|
|
||||||
if (this.size[1] < sz[1]) {
|
|
||||||
this.size[1] = sz[1];
|
|
||||||
}
|
|
||||||
requestAnimationFrame(() => {
|
|
||||||
if (this.onResize) {
|
|
||||||
this.onResize(this.size);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
recreateWidget() {
|
|
||||||
const values = this.widgets?.map((w) => w.value);
|
|
||||||
this.#removeWidgets();
|
|
||||||
this.#onFirstConnection(true);
|
|
||||||
if (values?.length) {
|
|
||||||
for (let i = 0; i < this.widgets?.length; i++)
|
|
||||||
this.widgets[i].value = values[i];
|
|
||||||
}
|
|
||||||
return this.widgets?.[0];
|
|
||||||
}
|
|
||||||
#mergeWidgetConfig() {
|
|
||||||
const output = this.outputs[0];
|
|
||||||
const links = output.links;
|
|
||||||
const hasConfig = !!output.widget[CONFIG];
|
|
||||||
if (hasConfig) {
|
|
||||||
delete output.widget[CONFIG];
|
|
||||||
}
|
|
||||||
if (links?.length < 2 && hasConfig) {
|
|
||||||
if (links.length) {
|
|
||||||
this.recreateWidget();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const config1 = output.widget[GET_CONFIG]();
|
|
||||||
const isNumber = config1[0] === "INT" || config1[0] === "FLOAT";
|
|
||||||
if (!isNumber) return;
|
|
||||||
for (const linkId of links) {
|
|
||||||
const link = app.graph.links[linkId];
|
|
||||||
if (!link) continue;
|
|
||||||
const theirNode = app.graph.getNodeById(link.target_id);
|
|
||||||
const theirInput = theirNode.inputs[link.target_slot];
|
|
||||||
this.#isValidConnection(theirInput, hasConfig);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
isValidWidgetLink(originSlot, targetNode, targetWidget) {
|
|
||||||
const config2 = getConfig.call(targetNode, targetWidget.name) ?? [
|
|
||||||
targetWidget.type,
|
|
||||||
targetWidget.options || {}
|
|
||||||
];
|
|
||||||
if (!isConvertibleWidget(targetWidget, config2)) return false;
|
|
||||||
const output = this.outputs[originSlot];
|
|
||||||
if (!(output.widget?.[CONFIG] ?? output.widget?.[GET_CONFIG]())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return !!mergeIfValid.call(this, output, config2);
|
|
||||||
}
|
|
||||||
#isValidConnection(input, forceUpdate) {
|
|
||||||
const output = this.outputs[0];
|
|
||||||
const config2 = input.widget[GET_CONFIG]();
|
|
||||||
return !!mergeIfValid.call(
|
|
||||||
this,
|
|
||||||
output,
|
|
||||||
config2,
|
|
||||||
forceUpdate,
|
|
||||||
this.recreateWidget
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#removeWidgets() {
|
|
||||||
if (this.widgets) {
|
|
||||||
for (const w of this.widgets) {
|
|
||||||
if (w.onRemove) {
|
|
||||||
w.onRemove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.controlValues = [];
|
|
||||||
this.lastType = this.widgets[0]?.type;
|
|
||||||
for (let i = 1; i < this.widgets.length; i++) {
|
|
||||||
this.controlValues.push(this.widgets[i].value);
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
delete this.lastType;
|
|
||||||
delete this.controlValues;
|
|
||||||
}, 15);
|
|
||||||
this.widgets.length = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onLastDisconnect() {
|
|
||||||
this.outputs[0].type = "*";
|
|
||||||
this.outputs[0].name = "connect to widget input";
|
|
||||||
delete this.outputs[0].widget;
|
|
||||||
this.#removeWidgets();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function getWidgetConfig(slot) {
|
|
||||||
return slot.widget[CONFIG] ?? slot.widget[GET_CONFIG]?.() ?? ["*", {}];
|
|
||||||
}
|
|
||||||
__name(getWidgetConfig, "getWidgetConfig");
|
|
||||||
function getConfig(widgetName) {
|
|
||||||
const { nodeData } = this.constructor;
|
|
||||||
return nodeData?.input?.required?.[widgetName] ?? nodeData?.input?.optional?.[widgetName];
|
|
||||||
}
|
|
||||||
__name(getConfig, "getConfig");
|
|
||||||
function isConvertibleWidget(widget, config) {
|
|
||||||
return (VALID_TYPES.includes(widget.type) || VALID_TYPES.includes(config[0])) && !widget.options?.forceInput;
|
|
||||||
}
|
|
||||||
__name(isConvertibleWidget, "isConvertibleWidget");
|
|
||||||
function hideWidget(node, widget, suffix = "") {
|
|
||||||
if (widget.type?.startsWith(CONVERTED_TYPE)) return;
|
|
||||||
widget.origType = widget.type;
|
|
||||||
widget.origComputeSize = widget.computeSize;
|
|
||||||
widget.origSerializeValue = widget.serializeValue;
|
|
||||||
widget.computeSize = () => [0, -4];
|
|
||||||
widget.type = CONVERTED_TYPE + suffix;
|
|
||||||
widget.serializeValue = () => {
|
|
||||||
if (!node.inputs) {
|
|
||||||
return void 0;
|
|
||||||
}
|
|
||||||
let node_input = node.inputs.find((i) => i.widget?.name === widget.name);
|
|
||||||
if (!node_input || !node_input.link) {
|
|
||||||
return void 0;
|
|
||||||
}
|
|
||||||
return widget.origSerializeValue ? widget.origSerializeValue() : widget.value;
|
|
||||||
};
|
|
||||||
if (widget.linkedWidgets) {
|
|
||||||
for (const w of widget.linkedWidgets) {
|
|
||||||
hideWidget(node, w, ":" + widget.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(hideWidget, "hideWidget");
|
|
||||||
function showWidget(widget) {
|
|
||||||
widget.type = widget.origType;
|
|
||||||
widget.computeSize = widget.origComputeSize;
|
|
||||||
widget.serializeValue = widget.origSerializeValue;
|
|
||||||
delete widget.origType;
|
|
||||||
delete widget.origComputeSize;
|
|
||||||
delete widget.origSerializeValue;
|
|
||||||
if (widget.linkedWidgets) {
|
|
||||||
for (const w of widget.linkedWidgets) {
|
|
||||||
showWidget(w);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(showWidget, "showWidget");
|
|
||||||
function convertToInput(node, widget, config) {
|
|
||||||
hideWidget(node, widget);
|
|
||||||
const { type } = getWidgetType(config);
|
|
||||||
const [oldWidth, oldHeight] = node.size;
|
|
||||||
const inputIsOptional = !!widget.options?.inputIsOptional;
|
|
||||||
const input = node.addInput(widget.name, type, {
|
|
||||||
widget: { name: widget.name, [GET_CONFIG]: () => config },
|
|
||||||
...inputIsOptional ? { shape: LiteGraph.SlotShape.HollowCircle } : {}
|
|
||||||
});
|
|
||||||
for (const widget2 of node.widgets) {
|
|
||||||
widget2.last_y += LiteGraph.NODE_SLOT_HEIGHT;
|
|
||||||
}
|
|
||||||
node.setSize([
|
|
||||||
Math.max(oldWidth, node.size[0]),
|
|
||||||
Math.max(oldHeight, node.size[1])
|
|
||||||
]);
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
__name(convertToInput, "convertToInput");
|
|
||||||
function convertToWidget(node, widget) {
|
|
||||||
showWidget(widget);
|
|
||||||
const [oldWidth, oldHeight] = node.size;
|
|
||||||
node.removeInput(node.inputs.findIndex((i) => i.widget?.name === widget.name));
|
|
||||||
for (const widget2 of node.widgets) {
|
|
||||||
widget2.last_y -= LiteGraph.NODE_SLOT_HEIGHT;
|
|
||||||
}
|
|
||||||
node.setSize([
|
|
||||||
Math.max(oldWidth, node.size[0]),
|
|
||||||
Math.max(oldHeight, node.size[1])
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
__name(convertToWidget, "convertToWidget");
|
|
||||||
function getWidgetType(config) {
|
|
||||||
let type = config[0];
|
|
||||||
if (type instanceof Array) {
|
|
||||||
type = "COMBO";
|
|
||||||
}
|
|
||||||
return { type };
|
|
||||||
}
|
|
||||||
__name(getWidgetType, "getWidgetType");
|
|
||||||
function isValidCombo(combo, obj) {
|
|
||||||
if (!(obj instanceof Array)) {
|
|
||||||
console.log(`connection rejected: tried to connect combo to ${obj}`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (combo.length !== obj.length) {
|
|
||||||
console.log(`connection rejected: combo lists dont match`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (combo.find((v, i) => obj[i] !== v)) {
|
|
||||||
console.log(`connection rejected: combo lists dont match`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
__name(isValidCombo, "isValidCombo");
|
|
||||||
function isPrimitiveNode(node) {
|
|
||||||
return node.type === "PrimitiveNode";
|
|
||||||
}
|
|
||||||
__name(isPrimitiveNode, "isPrimitiveNode");
|
|
||||||
function setWidgetConfig(slot, config, target) {
|
|
||||||
if (!slot.widget) return;
|
|
||||||
if (config) {
|
|
||||||
slot.widget[GET_CONFIG] = () => config;
|
|
||||||
slot.widget[TARGET] = target;
|
|
||||||
} else {
|
|
||||||
delete slot.widget;
|
|
||||||
}
|
|
||||||
if (slot.link) {
|
|
||||||
const link = app.graph.links[slot.link];
|
|
||||||
if (link) {
|
|
||||||
const originNode = app.graph.getNodeById(link.origin_id);
|
|
||||||
if (isPrimitiveNode(originNode)) {
|
|
||||||
if (config) {
|
|
||||||
originNode.recreateWidget();
|
|
||||||
} else if (!app.configuringGraph) {
|
|
||||||
originNode.disconnectOutput(0);
|
|
||||||
originNode.onLastDisconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__name(setWidgetConfig, "setWidgetConfig");
|
|
||||||
function mergeIfValid(output, config2, forceUpdate, recreateWidget, config1) {
|
|
||||||
if (!config1) {
|
|
||||||
config1 = getWidgetConfig(output);
|
|
||||||
}
|
|
||||||
if (config1[0] instanceof Array) {
|
|
||||||
if (!isValidCombo(config1[0], config2[0])) return;
|
|
||||||
} else if (config1[0] !== config2[0]) {
|
|
||||||
console.log(`connection rejected: types dont match`, config1[0], config2[0]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const keys = /* @__PURE__ */ new Set([
|
|
||||||
...Object.keys(config1[1] ?? {}),
|
|
||||||
...Object.keys(config2[1] ?? {})
|
|
||||||
]);
|
|
||||||
let customConfig;
|
|
||||||
const getCustomConfig = /* @__PURE__ */ __name(() => {
|
|
||||||
if (!customConfig) {
|
|
||||||
if (typeof structuredClone === "undefined") {
|
|
||||||
customConfig = JSON.parse(JSON.stringify(config1[1] ?? {}));
|
|
||||||
} else {
|
|
||||||
customConfig = structuredClone(config1[1] ?? {});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return customConfig;
|
|
||||||
}, "getCustomConfig");
|
|
||||||
const isNumber = config1[0] === "INT" || config1[0] === "FLOAT";
|
|
||||||
for (const k of keys.values()) {
|
|
||||||
if (k !== "default" && k !== "forceInput" && k !== "defaultInput" && k !== "control_after_generate" && k !== "multiline" && k !== "tooltip") {
|
|
||||||
let v1 = config1[1][k];
|
|
||||||
let v2 = config2[1]?.[k];
|
|
||||||
if (v1 === v2 || !v1 && !v2) continue;
|
|
||||||
if (isNumber) {
|
|
||||||
if (k === "min") {
|
|
||||||
const theirMax = config2[1]?.["max"];
|
|
||||||
if (theirMax != null && v1 > theirMax) {
|
|
||||||
console.log("connection rejected: min > max", v1, theirMax);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
getCustomConfig()[k] = v1 == null ? v2 : v2 == null ? v1 : Math.max(v1, v2);
|
|
||||||
continue;
|
|
||||||
} else if (k === "max") {
|
|
||||||
const theirMin = config2[1]?.["min"];
|
|
||||||
if (theirMin != null && v1 < theirMin) {
|
|
||||||
console.log("connection rejected: max < min", v1, theirMin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
getCustomConfig()[k] = v1 == null ? v2 : v2 == null ? v1 : Math.min(v1, v2);
|
|
||||||
continue;
|
|
||||||
} else if (k === "step") {
|
|
||||||
let step;
|
|
||||||
if (v1 == null) {
|
|
||||||
step = v2;
|
|
||||||
} else if (v2 == null) {
|
|
||||||
step = v1;
|
|
||||||
} else {
|
|
||||||
if (v1 < v2) {
|
|
||||||
const a = v2;
|
|
||||||
v2 = v1;
|
|
||||||
v1 = a;
|
|
||||||
}
|
|
||||||
if (v1 % v2) {
|
|
||||||
console.log(
|
|
||||||
"connection rejected: steps not divisible",
|
|
||||||
"current:",
|
|
||||||
v1,
|
|
||||||
"new:",
|
|
||||||
v2
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
step = v1;
|
|
||||||
}
|
|
||||||
getCustomConfig()[k] = step;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log(`connection rejected: config ${k} values dont match`, v1, v2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (customConfig || forceUpdate) {
|
|
||||||
if (customConfig) {
|
|
||||||
output.widget[CONFIG] = [config1[0], customConfig];
|
|
||||||
}
|
|
||||||
const widget = recreateWidget?.call(this);
|
|
||||||
if (widget) {
|
|
||||||
const min = widget.options.min;
|
|
||||||
const max = widget.options.max;
|
|
||||||
if (min != null && widget.value < min) widget.value = min;
|
|
||||||
if (max != null && widget.value > max) widget.value = max;
|
|
||||||
widget.callback(widget.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { customConfig };
|
|
||||||
}
|
|
||||||
__name(mergeIfValid, "mergeIfValid");
|
|
||||||
let useConversionSubmenusSetting;
|
|
||||||
app.registerExtension({
|
|
||||||
name: "Comfy.WidgetInputs",
|
|
||||||
init() {
|
|
||||||
useConversionSubmenusSetting = app.ui.settings.addSetting({
|
|
||||||
id: "Comfy.NodeInputConversionSubmenus",
|
|
||||||
name: "In the node context menu, place the entries that convert between input/widget in sub-menus.",
|
|
||||||
type: "boolean",
|
|
||||||
defaultValue: true
|
|
||||||
});
|
|
||||||
},
|
|
||||||
async beforeRegisterNodeDef(nodeType, nodeData, app2) {
|
|
||||||
const origGetExtraMenuOptions = nodeType.prototype.getExtraMenuOptions;
|
|
||||||
nodeType.prototype.convertWidgetToInput = function(widget) {
|
|
||||||
const config = getConfig.call(this, widget.name) ?? [
|
|
||||||
widget.type,
|
|
||||||
widget.options || {}
|
|
||||||
];
|
|
||||||
if (!isConvertibleWidget(widget, config)) return false;
|
|
||||||
if (widget.type?.startsWith(CONVERTED_TYPE)) return false;
|
|
||||||
convertToInput(this, widget, config);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
nodeType.prototype.getExtraMenuOptions = function(_, options) {
|
|
||||||
const r = origGetExtraMenuOptions ? origGetExtraMenuOptions.apply(this, arguments) : void 0;
|
|
||||||
if (this.widgets) {
|
|
||||||
let toInput = [];
|
|
||||||
let toWidget = [];
|
|
||||||
for (const w of this.widgets) {
|
|
||||||
if (w.options?.forceInput) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (w.type === CONVERTED_TYPE) {
|
|
||||||
toWidget.push({
|
|
||||||
// @ts-expect-error never
|
|
||||||
content: `Convert ${w.name} to widget`,
|
|
||||||
callback: /* @__PURE__ */ __name(() => convertToWidget(this, w), "callback")
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
const config = getConfig.call(this, w.name) ?? [
|
|
||||||
w.type,
|
|
||||||
w.options || {}
|
|
||||||
];
|
|
||||||
if (isConvertibleWidget(w, config)) {
|
|
||||||
toInput.push({
|
|
||||||
content: `Convert ${w.name} to input`,
|
|
||||||
callback: /* @__PURE__ */ __name(() => convertToInput(this, w, config), "callback")
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toInput.length) {
|
|
||||||
if (useConversionSubmenusSetting.value) {
|
|
||||||
options.push({
|
|
||||||
content: "Convert Widget to Input",
|
|
||||||
submenu: {
|
|
||||||
options: toInput
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
options.push(...toInput, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (toWidget.length) {
|
|
||||||
if (useConversionSubmenusSetting.value) {
|
|
||||||
options.push({
|
|
||||||
content: "Convert Input to Widget",
|
|
||||||
submenu: {
|
|
||||||
options: toWidget
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
options.push(...toWidget, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
nodeType.prototype.onGraphConfigured = function() {
|
|
||||||
if (!this.inputs) return;
|
|
||||||
this.widgets ??= [];
|
|
||||||
for (const input of this.inputs) {
|
|
||||||
if (input.widget) {
|
|
||||||
if (!input.widget[GET_CONFIG]) {
|
|
||||||
input.widget[GET_CONFIG] = () => getConfig.call(this, input.widget.name);
|
|
||||||
}
|
|
||||||
if (input.widget.config) {
|
|
||||||
if (input.widget.config[0] instanceof Array) {
|
|
||||||
input.type = "COMBO";
|
|
||||||
const link = app2.graph.links[input.link];
|
|
||||||
if (link) {
|
|
||||||
link.type = input.type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete input.widget.config;
|
|
||||||
}
|
|
||||||
const w = this.widgets.find((w2) => w2.name === input.widget.name);
|
|
||||||
if (w) {
|
|
||||||
hideWidget(this, w);
|
|
||||||
} else {
|
|
||||||
convertToWidget(this, input);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const origOnNodeCreated = nodeType.prototype.onNodeCreated;
|
|
||||||
nodeType.prototype.onNodeCreated = function() {
|
|
||||||
const r = origOnNodeCreated ? origOnNodeCreated.apply(this) : void 0;
|
|
||||||
if (!app2.configuringGraph && this.widgets) {
|
|
||||||
for (const w of this.widgets) {
|
|
||||||
if (w?.options?.forceInput || w?.options?.defaultInput) {
|
|
||||||
const config = getConfig.call(this, w.name) ?? [
|
|
||||||
w.type,
|
|
||||||
w.options || {}
|
|
||||||
];
|
|
||||||
convertToInput(this, w, config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
const origOnConfigure = nodeType.prototype.onConfigure;
|
|
||||||
nodeType.prototype.onConfigure = function() {
|
|
||||||
const r = origOnConfigure ? origOnConfigure.apply(this, arguments) : void 0;
|
|
||||||
if (!app2.configuringGraph && this.inputs) {
|
|
||||||
for (const input of this.inputs) {
|
|
||||||
if (input.widget && !input.widget[GET_CONFIG]) {
|
|
||||||
input.widget[GET_CONFIG] = () => (
|
|
||||||
// @ts-expect-error input.widget has unknown type
|
|
||||||
getConfig.call(this, input.widget.name)
|
|
||||||
);
|
|
||||||
const w = this.widgets.find((w2) => w2.name === input.widget.name);
|
|
||||||
if (w) {
|
|
||||||
hideWidget(this, w);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
function isNodeAtPos(pos) {
|
|
||||||
for (const n of app2.graph.nodes) {
|
|
||||||
if (n.pos[0] === pos[0] && n.pos[1] === pos[1]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
__name(isNodeAtPos, "isNodeAtPos");
|
|
||||||
const origOnInputDblClick = nodeType.prototype.onInputDblClick;
|
|
||||||
const ignoreDblClick = Symbol();
|
|
||||||
nodeType.prototype.onInputDblClick = function(slot) {
|
|
||||||
const r = origOnInputDblClick ? origOnInputDblClick.apply(this, arguments) : void 0;
|
|
||||||
const input = this.inputs[slot];
|
|
||||||
if (!input.widget || !input[ignoreDblClick]) {
|
|
||||||
if (!(input.type in ComfyWidgets) && !(input.widget?.[GET_CONFIG]?.()?.[0] instanceof Array)) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const node = LiteGraph.createNode("PrimitiveNode");
|
|
||||||
app2.graph.add(node);
|
|
||||||
const pos = [
|
|
||||||
this.pos[0] - node.size[0] - 30,
|
|
||||||
this.pos[1]
|
|
||||||
];
|
|
||||||
while (isNodeAtPos(pos)) {
|
|
||||||
pos[1] += LiteGraph.NODE_TITLE_HEIGHT;
|
|
||||||
}
|
|
||||||
node.pos = pos;
|
|
||||||
node.connect(0, this, slot);
|
|
||||||
node.title = input.name;
|
|
||||||
input[ignoreDblClick] = true;
|
|
||||||
setTimeout(() => {
|
|
||||||
delete input[ignoreDblClick];
|
|
||||||
}, 300);
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
const onConnectInput = nodeType.prototype.onConnectInput;
|
|
||||||
nodeType.prototype.onConnectInput = function(targetSlot, type, output, originNode, originSlot) {
|
|
||||||
const v = onConnectInput?.(this, arguments);
|
|
||||||
if (type !== "COMBO") return v;
|
|
||||||
if (originNode.outputs[originSlot].widget) return v;
|
|
||||||
const targetCombo = this.inputs[targetSlot].widget?.[GET_CONFIG]?.()?.[0];
|
|
||||||
if (!targetCombo || !(targetCombo instanceof Array)) return v;
|
|
||||||
const originConfig = originNode.constructor?.nodeData?.output?.[originSlot];
|
|
||||||
if (!originConfig || !isValidCombo(targetCombo, originConfig)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
};
|
|
||||||
},
|
|
||||||
registerCustomNodes() {
|
|
||||||
LiteGraph.registerNodeType(
|
|
||||||
"PrimitiveNode",
|
|
||||||
Object.assign(PrimitiveNode, {
|
|
||||||
title: "Primitive"
|
|
||||||
})
|
|
||||||
);
|
|
||||||
PrimitiveNode.category = "utils";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
window.comfyAPI = window.comfyAPI || {};
|
|
||||||
window.comfyAPI.widgetInputs = window.comfyAPI.widgetInputs || {};
|
|
||||||
window.comfyAPI.widgetInputs.getWidgetConfig = getWidgetConfig;
|
|
||||||
window.comfyAPI.widgetInputs.convertToInput = convertToInput;
|
|
||||||
window.comfyAPI.widgetInputs.setWidgetConfig = setWidgetConfig;
|
|
||||||
window.comfyAPI.widgetInputs.mergeIfValid = mergeIfValid;
|
|
||||||
export {
|
|
||||||
convertToInput,
|
|
||||||
getWidgetConfig,
|
|
||||||
mergeIfValid,
|
|
||||||
setWidgetConfig
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=widgetInputs-Bvm3AgOa.js.map
|
|
1
web/assets/widgetInputs-Bvm3AgOa.js.map
generated
vendored
1
web/assets/widgetInputs-Bvm3AgOa.js.map
generated
vendored
File diff suppressed because one or more lines are too long
3
web/extensions/core/colorPalette.js
vendored
3
web/extensions/core/colorPalette.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for extensions/core/colorPalette.ts
|
|
||||||
export const defaultColorPalette = window.comfyAPI.colorPalette.defaultColorPalette;
|
|
||||||
export const getColorPalette = window.comfyAPI.colorPalette.getColorPalette;
|
|
3
web/extensions/core/vintageClipboard.js
vendored
3
web/extensions/core/vintageClipboard.js
vendored
@ -1,3 +0,0 @@
|
|||||||
// Shim for extensions/core/vintageClipboard.ts
|
|
||||||
export const serialise = window.comfyAPI.vintageClipboard.serialise;
|
|
||||||
export const deserialiseAndCreate = window.comfyAPI.vintageClipboard.deserialiseAndCreate;
|
|
4
web/index.html
vendored
4
web/index.html
vendored
@ -6,8 +6,8 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
||||||
<link rel="stylesheet" type="text/css" href="user.css" />
|
<link rel="stylesheet" type="text/css" href="user.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="materialdesignicons.min.css" />
|
<link rel="stylesheet" type="text/css" href="materialdesignicons.min.css" />
|
||||||
<script type="module" crossorigin src="./assets/index-DIU5yZe9.js"></script>
|
<script type="module" crossorigin src="./assets/index-C4Fk50Nx.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="./assets/index-1vLlIVor.css">
|
<link rel="stylesheet" crossorigin href="./assets/index-DmMtlpqz.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="litegraph grid">
|
<body class="litegraph grid">
|
||||||
<div id="vue-app"></div>
|
<div id="vue-app"></div>
|
||||||
|
1
web/scripts/utils.js
vendored
1
web/scripts/utils.js
vendored
@ -3,6 +3,7 @@ export const clone = window.comfyAPI.utils.clone;
|
|||||||
export const applyTextReplacements = window.comfyAPI.utils.applyTextReplacements;
|
export const applyTextReplacements = window.comfyAPI.utils.applyTextReplacements;
|
||||||
export const addStylesheet = window.comfyAPI.utils.addStylesheet;
|
export const addStylesheet = window.comfyAPI.utils.addStylesheet;
|
||||||
export const downloadBlob = window.comfyAPI.utils.downloadBlob;
|
export const downloadBlob = window.comfyAPI.utils.downloadBlob;
|
||||||
|
export const uploadFile = window.comfyAPI.utils.uploadFile;
|
||||||
export const prop = window.comfyAPI.utils.prop;
|
export const prop = window.comfyAPI.utils.prop;
|
||||||
export const getStorageValue = window.comfyAPI.utils.getStorageValue;
|
export const getStorageValue = window.comfyAPI.utils.getStorageValue;
|
||||||
export const setStorageValue = window.comfyAPI.utils.setStorageValue;
|
export const setStorageValue = window.comfyAPI.utils.setStorageValue;
|
||||||
|
2
web/scripts/widgets.js
vendored
2
web/scripts/widgets.js
vendored
@ -1,6 +1,6 @@
|
|||||||
// Shim for scripts/widgets.ts
|
// Shim for scripts/widgets.ts
|
||||||
export const updateControlWidgetLabel = window.comfyAPI.widgets.updateControlWidgetLabel;
|
export const updateControlWidgetLabel = window.comfyAPI.widgets.updateControlWidgetLabel;
|
||||||
|
export const IS_CONTROL_WIDGET = window.comfyAPI.widgets.IS_CONTROL_WIDGET;
|
||||||
export const addValueControlWidget = window.comfyAPI.widgets.addValueControlWidget;
|
export const addValueControlWidget = window.comfyAPI.widgets.addValueControlWidget;
|
||||||
export const addValueControlWidgets = window.comfyAPI.widgets.addValueControlWidgets;
|
export const addValueControlWidgets = window.comfyAPI.widgets.addValueControlWidgets;
|
||||||
export const initWidgets = window.comfyAPI.widgets.initWidgets;
|
|
||||||
export const ComfyWidgets = window.comfyAPI.widgets.ComfyWidgets;
|
export const ComfyWidgets = window.comfyAPI.widgets.ComfyWidgets;
|
||||||
|
Loading…
Reference in New Issue
Block a user