Compare commits
35
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7689cf23c2 | ||
|
|
64e2553c83 | ||
|
|
fdff294b8c | ||
|
|
7bd14ec4df | ||
|
|
3d584d9e68 | ||
|
|
8e1e254a8b | ||
|
|
5d8379dc50 | ||
|
|
c084687f0e | ||
|
|
6617ed5244 | ||
|
|
583f16358e | ||
|
|
a1872b9d96 | ||
|
|
b2ed89bf23 | ||
|
|
27be9e53a0 | ||
|
|
fcb9e14b10 | ||
|
|
3a13898314 | ||
|
|
5c72c9d3e8 | ||
|
|
42da8a1ee9 | ||
|
|
716bebfa57 | ||
|
|
a823325559 | ||
|
|
b25965ce33 | ||
|
|
3f16d825b2 | ||
|
|
008d3b0649 | ||
|
|
8d74ed0cca | ||
|
|
90ada1a3f8 | ||
|
|
ad5b73e81d | ||
|
|
610dd6be61 | ||
|
|
7f41ac743e | ||
|
|
b1e3650d38 | ||
|
|
7043ca2f2f | ||
|
|
79223fe124 | ||
|
|
245c5bdb7f | ||
|
|
dc51306504 | ||
|
|
9dca10cb23 | ||
|
|
a97c497ff5 | ||
|
|
8d440db432 |
+9
-1
@@ -1,6 +1,14 @@
|
||||
# ChangeLog
|
||||
|
||||
## v1.7.0 - 2023-01-14
|
||||
## v1.8.1 - 2024-03-22
|
||||
|
||||
- Update xyz_plot to support score mode
|
||||
|
||||
## v1.8.0 - 2024-03-19
|
||||
|
||||
- Update xyz_plot to support Z axis
|
||||
|
||||
## v1.7.0 - 2024-01-14
|
||||
|
||||
- Add xyz_plot and select_inputs nodes
|
||||
|
||||
|
||||
+8
-2
@@ -4,8 +4,9 @@ from aiohttp import web
|
||||
import server
|
||||
|
||||
from .utils import collections_path, browser_path, sources_path, download_logs_path, outputs_path
|
||||
from .routes import sources, collections, config, files, downloads
|
||||
from .nodes import select_inputs, load_image_by_url, xyz_plot, upload_to_remote
|
||||
from .routes import sources, collections, config, files, downloads, xyz_plot as xyz_plot_routes
|
||||
from .nodes import select_inputs, load_image_by_url, xyz_plot, dify_text_generator, upload_to_remote
|
||||
|
||||
|
||||
browser_app = web.Application()
|
||||
browser_app.add_routes([
|
||||
@@ -31,6 +32,9 @@ browser_app.add_routes([
|
||||
web.get("/downloads", downloads.api_list_downloads),
|
||||
web.get("/downloads/{uuid}", downloads.api_show_download),
|
||||
|
||||
web.put("/xyz_plot/score", xyz_plot_routes.api_update_score),
|
||||
web.get("/xyz_plot/statistic", xyz_plot_routes.api_get_score_statistic),
|
||||
|
||||
web.static("/web", os.path.join(browser_path, 'web/build')),
|
||||
|
||||
web.static("/s/outputs", outputs_path),
|
||||
@@ -44,11 +48,13 @@ NODE_CLASS_MAPPINGS = {
|
||||
"LoadImageByUrl //Browser": load_image_by_url.LoadImageByUrl,
|
||||
"SelectInputs //Browser": select_inputs.SelectInputs,
|
||||
"XyzPlot //Browser": xyz_plot.XyzPlot,
|
||||
"DifyTextGenerator //Browser": dify_text_generator.DifyTextGenerator,
|
||||
"UploadToRemote //Browser": upload_to_remote.UploadToRemote,
|
||||
}
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"LoadImageByUrl //Browser": "Load Image By URL",
|
||||
"SelectInputs //Browser": "Select Node Inputs",
|
||||
"XyzPlot //Browser": "XYZ Plot",
|
||||
"DifyTextGenerator //Browser": "Dify Text Generator",
|
||||
"UploadToRemote //Browser": "Upload To Remote",
|
||||
}
|
||||
|
||||
@@ -7,6 +7,13 @@
|
||||
"type": "git",
|
||||
"description": "Examples of ComfyUI workflows"
|
||||
},
|
||||
{
|
||||
"title": "ComfyUI-Workflows-ZHO",
|
||||
"author": "ZHO-ZHO-ZHO",
|
||||
"url": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Workflows-ZHO",
|
||||
"type": "git",
|
||||
"description": "我的 ComfyUI 工作流合集 | My ComfyUI workflows collection"
|
||||
},
|
||||
{
|
||||
"title": "comfyui-workflow",
|
||||
"author": "hylarucoder",
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
class DifyTextGenerator:
|
||||
CATEGORY = "Browser"
|
||||
|
||||
RETURN_TYPES = ("STRING", )
|
||||
|
||||
FUNCTION = "run"
|
||||
|
||||
OUTPUT_NODE = True
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"dify_api_endpoint": ["STRING", {}],
|
||||
"api_key": ["STRING", {}],
|
||||
},
|
||||
"optional": {
|
||||
"query": ["STRING", {"multiline": True, "placeholder": "Input as the Query field."}],
|
||||
"inputs_json_str": ["STRING", {"multiline": True, "placeholder": "JSON format. It will overwrite the query field above."}],
|
||||
},
|
||||
}
|
||||
|
||||
def run(self, dify_api_endpoint, api_key, query, inputs_json_str=None):
|
||||
# for some special network environments like AutoDL
|
||||
proxies = {"http": "", "https": ""}
|
||||
header = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {api_key}",
|
||||
}
|
||||
data = {
|
||||
"user": "comfyui-browser",
|
||||
"response_mode": "blocking",
|
||||
"inputs" : { "query": query },
|
||||
}
|
||||
if inputs_json_str and len(inputs_json_str.strip()) > 0:
|
||||
# something weird, I have to add '{' and '}' manually
|
||||
data["inputs"] = json.loads("{" + inputs_json_str + "}")
|
||||
|
||||
r = requests.post(
|
||||
dify_api_endpoint,
|
||||
headers=header,
|
||||
data=json.dumps(data),
|
||||
proxies=proxies
|
||||
)
|
||||
|
||||
if not r.ok:
|
||||
raise Exception(f"Request Dify Error: {r.text}")
|
||||
|
||||
content = json.loads(r.content)
|
||||
return (content["answer"], )
|
||||
@@ -23,13 +23,14 @@ class UploadToRemote:
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"images": ["IMAGE", {}],
|
||||
"remote_url": ["STRING", {}],
|
||||
"extension": (['jpeg', 'webp', 'png', 'jpg', 'gif'], ),
|
||||
"quality": ("INT", {"default": 85, "min": 1, "max": 100, "step": 1}),
|
||||
"embed_workflow": (["false", "true"],),
|
||||
},
|
||||
"optional": {
|
||||
"images": ["IMAGE", {}],
|
||||
"extra": ["STRING", {"forceInput": True}],
|
||||
"track_id": ["STRING", {"placeholder": "Optional. Post it as the track_id field."}],
|
||||
},
|
||||
"hidden": {
|
||||
@@ -39,7 +40,7 @@ class UploadToRemote:
|
||||
}
|
||||
|
||||
|
||||
def run(self, images, remote_url, extension='jpeg', quality=85, embed_workflow='false', track_id=None, unique_id=None, prompt=None):
|
||||
def run(self, remote_url, extension='jpeg', quality=85, images=[], extra='', embed_workflow='false', track_id=None, unique_id=None, prompt=None):
|
||||
def process_images(images, extension='jpeg', quality=85, embed_workflow='false', prompt=None):
|
||||
results = list()
|
||||
for image in images:
|
||||
@@ -72,22 +73,27 @@ class UploadToRemote:
|
||||
|
||||
return results
|
||||
|
||||
async def callback(images, remote_url, extension='jpeg', quality=85, embed_workflow='false', track_id=None, unique_id=None, prompt=None):
|
||||
async def callback(images, extra, remote_url, extension='jpeg', quality=85, embed_workflow='false', track_id=None, unique_id=None, prompt=None):
|
||||
data = {
|
||||
"images": process_images(images, extension, quality, embed_workflow, prompt)
|
||||
"images": process_images(images, extension, quality, embed_workflow, prompt),
|
||||
"extra": extra,
|
||||
}
|
||||
if track_id:
|
||||
data['track_id'] = track_id
|
||||
if unique_id:
|
||||
data['unique_id'] = unique_id
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
data = json.dumps(data).encode('utf-8')
|
||||
res = requests.post(remote_url, data=data)
|
||||
res = requests.post(remote_url, data=data, headers=headers)
|
||||
# TODO: check the response
|
||||
|
||||
|
||||
threading.Thread(
|
||||
target=asyncio.run,
|
||||
args=(callback(images, remote_url, extension, quality, embed_workflow, track_id, unique_id, prompt),),
|
||||
args=(callback(images, extra, remote_url, extension, quality, embed_workflow, track_id, unique_id, prompt),),
|
||||
).start()
|
||||
|
||||
return ()
|
||||
|
||||
+107
-41
@@ -1,10 +1,11 @@
|
||||
import shutil
|
||||
import time
|
||||
import requests
|
||||
import json
|
||||
from PIL import Image
|
||||
import numpy as np
|
||||
import os
|
||||
import copy
|
||||
import pandas as pd
|
||||
|
||||
import folder_paths
|
||||
|
||||
@@ -35,8 +36,11 @@ class XyzPlot:
|
||||
"input_y": ["INPUT", {}],
|
||||
"value_x": ["STRING", {"multiline": True, "placeholder": 'X values split by semicolon such as "1girl; 1boy"'}],
|
||||
"value_y": ["STRING", {"multiline": True, "placeholder": 'Y values split by semicolon such as "1girl; 1boy"'}],
|
||||
"value_z": ["STRING", {"multiline": True, "placeholder": 'Z values split by semicolon such as "1girl; 1boy"'}],
|
||||
"output_folder_name": ["STRING", {"default": "xyz_plot"}],
|
||||
"result_filename": ["STRING", {"default": "result"}],
|
||||
},
|
||||
"optional": {
|
||||
"input_z": ["INPUT", {}],
|
||||
},
|
||||
"hidden": {
|
||||
"prompt": "PROMPT",
|
||||
@@ -56,8 +60,11 @@ class XyzPlot:
|
||||
self.y_index = 0
|
||||
|
||||
@staticmethod
|
||||
def get_filename(ix, iy, i):
|
||||
return f"x{ix}_y{iy}_{i}.jpeg"
|
||||
def get_filename(ix, iy, iz, i):
|
||||
if (iz >= 0):
|
||||
return f"x{ix}_y{iy}_z{iz}_{i}.jpeg"
|
||||
else:
|
||||
return f"x{ix}_y{iy}_{i}.jpeg"
|
||||
|
||||
@staticmethod
|
||||
def get_preview_url(folder_name, filename):
|
||||
@@ -71,51 +78,104 @@ class XyzPlot:
|
||||
i = 255. * image.cpu().numpy()
|
||||
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
|
||||
img = img.convert('RGB')
|
||||
filename = self.get_filename(self.x_index, self.y_index, index)
|
||||
filename = self.get_filename(self.x_index, self.y_index, self.z_index, index)
|
||||
target_path = os.path.join(self.output_folder_name, filename)
|
||||
img.save(target_path, 'JPEG', quality=90)
|
||||
|
||||
def run(self, images, input_x, input_y, value_x, value_y, output_folder_name, result_filename, prompt, unique_id, extra_pnginfo=None):
|
||||
self.output_folder_name = os.path.join(folder_paths.get_output_directory(), output_folder_name)
|
||||
def run(self, images, input_x, input_y, value_x, value_y, output_folder_name, prompt, unique_id, input_z=None, value_z="", extra_pnginfo=None):
|
||||
self.output_folder_name = os.path.join(
|
||||
folder_paths.get_output_directory(),
|
||||
output_folder_name,
|
||||
)
|
||||
|
||||
if 'xyz_data' in prompt[unique_id]['inputs']:
|
||||
self.x_index = prompt[unique_id]['inputs']['xyz_data']['x_index']
|
||||
self.y_index = prompt[unique_id]['inputs']['xyz_data']['y_index']
|
||||
self.z_index = prompt[unique_id]['inputs']['xyz_data']['z_index']
|
||||
self.save_images(images)
|
||||
return ()
|
||||
|
||||
if os.path.exists(self.output_folder_name):
|
||||
shutil.move(self.output_folder_name, self.output_folder_name + f'_old_{int(time.time())}')
|
||||
|
||||
def filter_values(value):
|
||||
return list(filter(lambda x: x != '', value.split(";")))
|
||||
|
||||
def queue_new_prompt(prompt):
|
||||
data = json.dumps({
|
||||
'prompt': prompt
|
||||
}).encode('utf-8')
|
||||
|
||||
# for some special network environments like AutoDL
|
||||
proxies = {"http": "", "https": ""}
|
||||
return requests.post(SERVER_BASE_URL + '/prompt', data=data, proxies=proxies)
|
||||
|
||||
|
||||
batch_size = len(images)
|
||||
values_x = value_x.split(";")
|
||||
values_y = value_y.split(";")
|
||||
new_prompt = copy.deepcopy(prompt)
|
||||
ret = {}
|
||||
values_x = filter_values(value_x)
|
||||
values_y = filter_values(value_y)
|
||||
values_z = filter_values(value_z)
|
||||
new_prompt = copy.deepcopy(prompt)
|
||||
ret = []
|
||||
for ix, vx in enumerate(values_x):
|
||||
vx = vx.strip()
|
||||
row = {}
|
||||
row = []
|
||||
for iy, vy in enumerate(values_y):
|
||||
vy = vy.strip()
|
||||
new_prompt[input_x["node_id"]]["inputs"][input_x["widget_name"]] = vx
|
||||
new_prompt[input_y["node_id"]]["inputs"][input_y["widget_name"]] = vy
|
||||
|
||||
new_prompt[unique_id]['inputs']['xyz_data'] = {
|
||||
"source_unique_id": unique_id,
|
||||
"output_folder_name": output_folder_name,
|
||||
"x_index": ix,
|
||||
"y_index": iy,
|
||||
"z_index": -1,
|
||||
}
|
||||
data = json.dumps({
|
||||
'prompt': new_prompt
|
||||
}).encode('utf-8')
|
||||
|
||||
# for some special network environments like AutoDL
|
||||
proxies = {"http": "", "https": ""}
|
||||
r = requests.post(SERVER_BASE_URL + '/prompt', data=data, proxies=proxies)
|
||||
ceil = []
|
||||
if (input_z and len(values_z) > 0):
|
||||
for iz, vz in enumerate(values_z):
|
||||
vz = vz.strip()
|
||||
new_prompt[input_z["node_id"]]["inputs"][input_z["widget_name"]] = vz
|
||||
new_prompt[unique_id]['inputs']['xyz_data']['z_index'] = iz
|
||||
queue_new_prompt(new_prompt)
|
||||
zCeil = []
|
||||
for i in range(batch_size):
|
||||
filename = self.get_filename(ix, iy, iz, i)
|
||||
preview_url = self.get_preview_url(output_folder_name, filename)
|
||||
zCeil.append({
|
||||
"uuid": ":".join([output_folder_name, str(ix), str(iy), str(iz), str(i)]),
|
||||
"type": "img",
|
||||
"src": preview_url,
|
||||
})
|
||||
ceil.append({
|
||||
"type": "axis",
|
||||
"value": vz,
|
||||
"children": zCeil,
|
||||
})
|
||||
else:
|
||||
queue_new_prompt(new_prompt)
|
||||
for i in range(batch_size):
|
||||
filename = self.get_filename(ix, iy, -1, i)
|
||||
preview_url = self.get_preview_url(output_folder_name, filename)
|
||||
ceil.append({
|
||||
"uuid": ":".join([output_folder_name, str(ix), str(iy), "-1", str(i)]),
|
||||
"type": "img",
|
||||
"src": preview_url,
|
||||
})
|
||||
|
||||
row[vy] = ""
|
||||
for i in range(batch_size):
|
||||
filename = self.get_filename(ix, iy, i)
|
||||
preview_url = self.get_preview_url(output_folder_name, filename)
|
||||
row[vy] += f'<img src="{preview_url}" width="100">'
|
||||
row.append({
|
||||
"type": "axis",
|
||||
"value": vy,
|
||||
"children": ceil,
|
||||
})
|
||||
|
||||
ret[vx] = row
|
||||
ret.append({
|
||||
"type": "axis",
|
||||
"value": vx,
|
||||
"children": row,
|
||||
})
|
||||
|
||||
# Check if the directory exists
|
||||
if not os.path.exists(self.output_folder_name):
|
||||
@@ -125,30 +185,36 @@ class XyzPlot:
|
||||
raise Exception(f"Failed to create directory: {e}")
|
||||
|
||||
browser_base_url = f"/browser/s/outputs/{output_folder_name}"
|
||||
|
||||
workflow_html = ""
|
||||
retData = {
|
||||
"result": ret,
|
||||
}
|
||||
if extra_pnginfo:
|
||||
workflow_filename = f"{result_filename}_workflow.json"
|
||||
with open(f"{self.output_folder_name}/{workflow_filename}", "w") as f:
|
||||
workflow_filename = "workflow.json"
|
||||
with open(f"{self.output_folder_name}/{workflow_filename}", "w", encoding="utf-8") as f:
|
||||
json.dump(extra_pnginfo, f)
|
||||
workflow_html = f'<p><a target="_blank" href="{browser_base_url}/{workflow_filename}">Open the workflow</a></p>'
|
||||
retData["workflow"] = {
|
||||
"url": f'{browser_base_url}/{workflow_filename}',
|
||||
}
|
||||
|
||||
axisConst = ["X", "Y", "Z"]
|
||||
retData["annotations"] = []
|
||||
for index, ele in enumerate([input_x, input_y, input_z]):
|
||||
if not ele:
|
||||
continue
|
||||
retData["annotations"].append({
|
||||
"axis": axisConst[index],
|
||||
"key": f"#{ele['node_id']} {ele['node_title']}",
|
||||
"type": ele['widget_name'],
|
||||
})
|
||||
|
||||
|
||||
# To generate grid HTML
|
||||
def gird_title(input):
|
||||
return f"#{input['node_id']} {input['node_title']} - {input['widget_name']}"
|
||||
|
||||
df = pd.DataFrame(ret)
|
||||
html = workflow_html
|
||||
html += f"<p>X: {gird_title(input_x)}</p><p>Y: {gird_title(input_y)}</p>"
|
||||
html += df.to_html(escape=False)
|
||||
target_path = f"{self.output_folder_name}/{result_filename}.html"
|
||||
with open(target_path, "w") as f:
|
||||
f.write(html)
|
||||
target_path = f"{self.output_folder_name}/result.json"
|
||||
with open(target_path, "w", encoding="utf-8") as f:
|
||||
json.dump(retData, f)
|
||||
|
||||
return {
|
||||
"ui": {
|
||||
"result_path": [f"{browser_base_url}/{result_filename}.html"],
|
||||
"result_path": [f"/browser/web/xyz_plot.html?path={browser_base_url}/result.json"],
|
||||
},
|
||||
"result": (),
|
||||
}
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
import os
|
||||
from aiohttp import web
|
||||
import datetime
|
||||
import csv
|
||||
import json
|
||||
|
||||
import folder_paths
|
||||
|
||||
LOG_FILE_NAME = 'score_log.csv'
|
||||
|
||||
async def api_update_score(request):
|
||||
body = await request.json()
|
||||
user_uuid = body.get("user", "anonymous")
|
||||
source = body.get("source")
|
||||
score = body.get("score")
|
||||
|
||||
source_arr = source.split(":")
|
||||
if len(source_arr) != 5:
|
||||
return web.Response(status=404)
|
||||
|
||||
log_path = os.path.join(
|
||||
folder_paths.get_output_directory(),
|
||||
source_arr[0],
|
||||
LOG_FILE_NAME,
|
||||
)
|
||||
|
||||
dtstr = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S%Z")
|
||||
|
||||
# created_at, user_uuid, score, ix, iy, iz, index
|
||||
new_line = ",".join([dtstr, user_uuid, str(score), source_arr[1], source_arr[2], source_arr[3], source_arr[4]]) + '\n'
|
||||
if not os.path.exists(log_path):
|
||||
with open(log_path, "w", encoding="utf-8") as f:
|
||||
f.write(new_line)
|
||||
else:
|
||||
lines = []
|
||||
with open(log_path, "r", encoding="utf-8") as f:
|
||||
lines = f.readlines()
|
||||
pattern = ",".join([source_arr[1], source_arr[2], source_arr[3], source_arr[4]])
|
||||
lines = [line for line in lines if pattern not in line]
|
||||
lines.append(new_line)
|
||||
with open(log_path, "w", encoding="utf-8") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
return web.Response(status=200)
|
||||
|
||||
async def api_get_score_statistic(request):
|
||||
target_path = request.query.get('path')
|
||||
if not target_path:
|
||||
return web.Response(status=404)
|
||||
|
||||
#/browser/s/outputs/xyz_plot_4/result.json
|
||||
if len(target_path.split('/')) < 5:
|
||||
return web.Response(status=400)
|
||||
|
||||
target_path = target_path.split('/')[4]
|
||||
log_path = os.path.join(
|
||||
folder_paths.get_output_directory(),
|
||||
target_path,
|
||||
LOG_FILE_NAME,
|
||||
)
|
||||
if not os.path.exists(log_path):
|
||||
return web.Response(status=404)
|
||||
|
||||
data = []
|
||||
with open(log_path, 'r', encoding='utf-8') as f:
|
||||
reader = csv.reader(f)
|
||||
for row in reader:
|
||||
data.append(row)
|
||||
|
||||
statistic = {}
|
||||
for row in data:
|
||||
if not row[3] in statistic:
|
||||
statistic[row[3]] = { 'total': 0 }
|
||||
if not row[4] in statistic[row[3]]:
|
||||
statistic[row[3]][row[4]] = { 'total': 0 }
|
||||
if not row[5] in statistic[row[3]][row[4]]:
|
||||
statistic[row[3]][row[4]][row[5]] = 0
|
||||
|
||||
statistic[row[3]][row[4]][row[5]] += int(row[2])
|
||||
statistic[row[3]][row[4]]['total'] += int(row[2])
|
||||
statistic[row[3]]['total'] += int(row[2])
|
||||
|
||||
result_path = os.path.join(
|
||||
folder_paths.get_output_directory(),
|
||||
target_path,
|
||||
'result.json',
|
||||
)
|
||||
xyz_result = []
|
||||
with open(result_path, 'r', encoding='utf-8') as f:
|
||||
xyz_result = json.load(f)['result']
|
||||
|
||||
stat_ret = []
|
||||
for ix, _ in enumerate(xyz_result):
|
||||
vy = xyz_result[ix]['children']
|
||||
rx = {
|
||||
'type': 'axis',
|
||||
'score': statistic.get(str(ix), {}).get('total', 0),
|
||||
'children': [],
|
||||
}
|
||||
for iy, _ in enumerate(vy):
|
||||
vz = vy[iy]['children']
|
||||
ry = {
|
||||
'type': 'axis',
|
||||
'score': statistic.get(str(ix), {}).get(str(iy), {}).get('total', 0),
|
||||
'children': [],
|
||||
}
|
||||
if vz[0]['type'] == 'img':
|
||||
ry['children'].append({
|
||||
'type': 'axis',
|
||||
'score': statistic.get(str(ix), {}).get(str(iy), {}).get('-1', 0),
|
||||
})
|
||||
else:
|
||||
for iz, _ in enumerate(vz):
|
||||
ry['children'].append({
|
||||
'type': 'axis',
|
||||
'score': statistic.get(str(ix), {}).get(str(iy), {}).get(str(iz), 0),
|
||||
})
|
||||
rx['children'].append(ry)
|
||||
stat_ret.append(rx)
|
||||
|
||||
|
||||
return web.json_response({
|
||||
'result': stat_ret,
|
||||
})
|
||||
Generated
+85
@@ -12,18 +12,24 @@
|
||||
"svelte-i18n": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^8.4.1",
|
||||
"@sveltejs/adapter-auto": "^3.0.1",
|
||||
"@sveltejs/adapter-static": "^3.0.1",
|
||||
"@sveltejs/kit": "^2.0.4",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.1",
|
||||
"@types/node": "^20.11.28",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"daisyui": "^4.4.22",
|
||||
"dexie": "4.0.1-beta.14",
|
||||
"postcss": "^8.4.32",
|
||||
"sass": "^1.72.0",
|
||||
"svelte": "^4.2.8",
|
||||
"svelte-check": "^3.6.2",
|
||||
"tailwindcss": "^3.4.0",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.3.3",
|
||||
"uuid": "^9.0.1",
|
||||
"vite": "^5.0.10"
|
||||
}
|
||||
},
|
||||
@@ -396,6 +402,22 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@faker-js/faker": {
|
||||
"version": "8.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz",
|
||||
"integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/fakerjs"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
||||
"npm": ">=6.14.13"
|
||||
}
|
||||
},
|
||||
"node_modules/@formatjs/ecma402-abstract": {
|
||||
"version": "1.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz",
|
||||
@@ -822,12 +844,27 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
|
||||
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.11.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.29.tgz",
|
||||
"integrity": "sha512-P99thMkD/1YkCvAtOd6/zGedKNA0p2fj4ZpjCzcNiSCBWgm3cNRTBfa/qjFnsKkkojxu4vVLtWpesnZ9+ap+gA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pug": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz",
|
||||
"integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/uuid": {
|
||||
"version": "9.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
|
||||
"integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.11.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
|
||||
@@ -1291,6 +1328,12 @@
|
||||
"integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/dexie": {
|
||||
"version": "4.0.1-beta.14",
|
||||
"resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.1-beta.14.tgz",
|
||||
"integrity": "sha512-1Glgs4nyHUriknstBku1T0Qz9qxJbHQy49JFeDEacHQK+XljN/sn1zyIH/HwouQ7a+WAdWHInm51i0GqWOAyHg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/didyoumean": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
||||
@@ -1614,6 +1657,12 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/immutable": {
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
|
||||
"integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/import-fresh": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
@@ -2442,6 +2491,23 @@
|
||||
"rimraf": "^2.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.72.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz",
|
||||
"integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
"immutable": "^4.0.0",
|
||||
"source-map-js": ">=0.6.2 <2.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"sass": "sass.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/set-cookie-parser": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
|
||||
@@ -2992,6 +3058,12 @@
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.0.13",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
|
||||
@@ -3028,6 +3100,19 @@
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
"https://github.com/sponsors/broofa",
|
||||
"https://github.com/sponsors/ctavan"
|
||||
],
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "5.0.10",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz",
|
||||
|
||||
+9
-1
@@ -11,18 +11,26 @@
|
||||
"extract": "svelte-i18n extract './src/**/*.svelte' ./src/i18n/zh-CN.json && svelte-i18n extract './src/**/*.svelte' ./src/i18n/en-US.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^8.4.1",
|
||||
"@sveltejs/adapter-auto": "^3.0.1",
|
||||
"@sveltejs/adapter-static": "^3.0.1",
|
||||
"@sveltejs/kit": "^2.0.4",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.1",
|
||||
"@types/node": "^20.11.28",
|
||||
"@types/pubsub-js": "^1.8.6",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"daisyui": "^4.4.22",
|
||||
"dexie": "4.0.1-beta.14",
|
||||
"postcss": "^8.4.32",
|
||||
"pubsub-js": "^1.9.4",
|
||||
"sass": "^1.72.0",
|
||||
"svelte": "^4.2.8",
|
||||
"svelte-check": "^3.6.2",
|
||||
"tailwindcss": "^3.4.0",
|
||||
"tslib": "^2.6.2",
|
||||
"typescript": "^5.3.3",
|
||||
"uuid": "^9.0.1",
|
||||
"vite": "^5.0.10"
|
||||
},
|
||||
"type": "module",
|
||||
@@ -30,4 +38,4 @@
|
||||
"dayjs": "^1.11.10",
|
||||
"svelte-i18n": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
Generated
+87
-10
@@ -13,6 +13,9 @@ dependencies:
|
||||
version: 4.0.0(svelte@4.2.8)
|
||||
|
||||
devDependencies:
|
||||
'@faker-js/faker':
|
||||
specifier: ^8.4.1
|
||||
version: 8.4.1
|
||||
'@sveltejs/adapter-auto':
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1(@sveltejs/kit@2.0.4)
|
||||
@@ -25,21 +28,39 @@ devDependencies:
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1(svelte@4.2.8)(vite@5.0.10)
|
||||
'@types/node':
|
||||
specifier: ^20.11.28
|
||||
version: 20.11.28
|
||||
'@types/pubsub-js':
|
||||
specifier: ^1.8.6
|
||||
version: 1.8.6
|
||||
'@types/uuid':
|
||||
specifier: ^9.0.8
|
||||
version: 9.0.8
|
||||
autoprefixer:
|
||||
specifier: ^10.4.16
|
||||
version: 10.4.16(postcss@8.4.32)
|
||||
daisyui:
|
||||
specifier: ^4.4.22
|
||||
version: 4.4.22(postcss@8.4.32)
|
||||
dexie:
|
||||
specifier: 4.0.1-beta.14
|
||||
version: 4.0.1-beta.14
|
||||
postcss:
|
||||
specifier: ^8.4.32
|
||||
version: 8.4.32
|
||||
pubsub-js:
|
||||
specifier: ^1.9.4
|
||||
version: 1.9.4
|
||||
sass:
|
||||
specifier: ^1.72.0
|
||||
version: 1.72.0
|
||||
svelte:
|
||||
specifier: ^4.2.8
|
||||
version: 4.2.8
|
||||
svelte-check:
|
||||
specifier: ^3.6.2
|
||||
version: 3.6.2(postcss@8.4.32)(svelte@4.2.8)
|
||||
version: 3.6.2(postcss@8.4.32)(sass@1.72.0)(svelte@4.2.8)
|
||||
tailwindcss:
|
||||
specifier: ^3.4.0
|
||||
version: 3.4.0
|
||||
@@ -49,9 +70,12 @@ devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.3.3
|
||||
version: 5.3.3
|
||||
uuid:
|
||||
specifier: ^9.0.1
|
||||
version: 9.0.1
|
||||
vite:
|
||||
specifier: ^5.0.10
|
||||
version: 5.0.10
|
||||
version: 5.0.10(@types/node@20.11.28)(sass@1.72.0)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -251,6 +275,11 @@ packages:
|
||||
requiresBuild: true
|
||||
optional: true
|
||||
|
||||
/@faker-js/faker@8.4.1:
|
||||
resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'}
|
||||
dev: true
|
||||
|
||||
/@formatjs/ecma402-abstract@1.18.0:
|
||||
resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==}
|
||||
dependencies:
|
||||
@@ -484,7 +513,7 @@ packages:
|
||||
sirv: 2.0.3
|
||||
svelte: 4.2.8
|
||||
tiny-glob: 0.2.9
|
||||
vite: 5.0.10
|
||||
vite: 5.0.10(@types/node@20.11.28)(sass@1.72.0)
|
||||
dev: true
|
||||
|
||||
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10):
|
||||
@@ -498,7 +527,7 @@ packages:
|
||||
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10)
|
||||
debug: 4.3.4
|
||||
svelte: 4.2.8
|
||||
vite: 5.0.10
|
||||
vite: 5.0.10(@types/node@20.11.28)(sass@1.72.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
@@ -517,7 +546,7 @@ packages:
|
||||
magic-string: 0.30.5
|
||||
svelte: 4.2.8
|
||||
svelte-hmr: 0.15.3(svelte@4.2.8)
|
||||
vite: 5.0.10
|
||||
vite: 5.0.10(@types/node@20.11.28)(sass@1.72.0)
|
||||
vitefu: 0.2.5(vite@5.0.10)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -530,10 +559,24 @@ packages:
|
||||
/@types/estree@1.0.5:
|
||||
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
|
||||
|
||||
/@types/node@20.11.28:
|
||||
resolution: {integrity: sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==}
|
||||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
dev: true
|
||||
|
||||
/@types/pubsub-js@1.8.6:
|
||||
resolution: {integrity: sha512-Kwug5cwV0paUDm/NfwDx1sp9xI0bGIvmWJjJWCU8NngkCCMt3EIC7oPDvb6fV7BR8kPpFyyBu4D11bda/2MdPA==}
|
||||
dev: true
|
||||
|
||||
/@types/pug@2.0.10:
|
||||
resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
|
||||
dev: true
|
||||
|
||||
/@types/uuid@9.0.8:
|
||||
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
|
||||
dev: true
|
||||
|
||||
/acorn@8.11.2:
|
||||
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
@@ -759,6 +802,10 @@ packages:
|
||||
resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
|
||||
dev: true
|
||||
|
||||
/dexie@4.0.1-beta.14:
|
||||
resolution: {integrity: sha512-1Glgs4nyHUriknstBku1T0Qz9qxJbHQy49JFeDEacHQK+XljN/sn1zyIH/HwouQ7a+WAdWHInm51i0GqWOAyHg==}
|
||||
dev: true
|
||||
|
||||
/didyoumean@1.2.2:
|
||||
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
|
||||
dev: true
|
||||
@@ -971,6 +1018,10 @@ packages:
|
||||
function-bind: 1.1.2
|
||||
dev: true
|
||||
|
||||
/immutable@4.3.5:
|
||||
resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==}
|
||||
dev: true
|
||||
|
||||
/import-fresh@3.3.0:
|
||||
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -1305,6 +1356,10 @@ packages:
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/pubsub-js@1.9.4:
|
||||
resolution: {integrity: sha512-hJYpaDvPH4w8ZX/0Fdf9ma1AwRgU353GfbaVfPjfJQf1KxZ2iHaHl3fAUw1qlJIR5dr4F3RzjGaWohYUEyoh7A==}
|
||||
dev: true
|
||||
|
||||
/queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
dev: true
|
||||
@@ -1390,6 +1445,16 @@ packages:
|
||||
rimraf: 2.7.1
|
||||
dev: true
|
||||
|
||||
/sass@1.72.0:
|
||||
resolution: {integrity: sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
chokidar: 3.5.3
|
||||
immutable: 4.3.5
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/set-cookie-parser@2.6.0:
|
||||
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
|
||||
dev: true
|
||||
@@ -1443,7 +1508,7 @@ packages:
|
||||
engines: {node: '>= 0.4'}
|
||||
dev: true
|
||||
|
||||
/svelte-check@3.6.2(postcss@8.4.32)(svelte@4.2.8):
|
||||
/svelte-check@3.6.2(postcss@8.4.32)(sass@1.72.0)(svelte@4.2.8):
|
||||
resolution: {integrity: sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -1456,7 +1521,7 @@ packages:
|
||||
picocolors: 1.0.0
|
||||
sade: 1.8.1
|
||||
svelte: 4.2.8
|
||||
svelte-preprocess: 5.1.3(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3)
|
||||
svelte-preprocess: 5.1.3(postcss@8.4.32)(sass@1.72.0)(svelte@4.2.8)(typescript@5.3.3)
|
||||
typescript: 5.3.3
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
@@ -1496,7 +1561,7 @@ packages:
|
||||
tiny-glob: 0.2.9
|
||||
dev: false
|
||||
|
||||
/svelte-preprocess@5.1.3(postcss@8.4.32)(svelte@4.2.8)(typescript@5.3.3):
|
||||
/svelte-preprocess@5.1.3(postcss@8.4.32)(sass@1.72.0)(svelte@4.2.8)(typescript@5.3.3):
|
||||
resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
|
||||
engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
|
||||
requiresBuild: true
|
||||
@@ -1538,6 +1603,7 @@ packages:
|
||||
detect-indent: 6.1.0
|
||||
magic-string: 0.30.5
|
||||
postcss: 8.4.32
|
||||
sass: 1.72.0
|
||||
sorcery: 0.11.0
|
||||
strip-indent: 3.0.0
|
||||
svelte: 4.2.8
|
||||
@@ -1652,6 +1718,10 @@ packages:
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/undici-types@5.26.5:
|
||||
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
|
||||
dev: true
|
||||
|
||||
/update-browserslist-db@1.0.13(browserslist@4.22.2):
|
||||
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
|
||||
hasBin: true
|
||||
@@ -1667,7 +1737,12 @@ packages:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: true
|
||||
|
||||
/vite@5.0.10:
|
||||
/uuid@9.0.1:
|
||||
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/vite@5.0.10(@types/node@20.11.28)(sass@1.72.0):
|
||||
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
hasBin: true
|
||||
@@ -1695,9 +1770,11 @@ packages:
|
||||
terser:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@types/node': 20.11.28
|
||||
esbuild: 0.19.10
|
||||
postcss: 8.4.32
|
||||
rollup: 4.9.1
|
||||
sass: 1.72.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
@@ -1710,7 +1787,7 @@ packages:
|
||||
vite:
|
||||
optional: true
|
||||
dependencies:
|
||||
vite: 5.0.10
|
||||
vite: 5.0.10(@types/node@20.11.28)(sass@1.72.0)
|
||||
dev: true
|
||||
|
||||
/wrappy@1.0.2:
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@@ -0,0 +1,10 @@
|
||||
@tailwind base
|
||||
@tailwind components
|
||||
@tailwind utilities
|
||||
|
||||
.table-zebra-grey
|
||||
tbody
|
||||
tr:nth-child(even)
|
||||
background-color: #424242
|
||||
th
|
||||
background-color: #424242
|
||||
@@ -0,0 +1,53 @@
|
||||
import Dexie, { type Table } from 'dexie';
|
||||
export interface User {
|
||||
uuid: string;
|
||||
name: string;
|
||||
ctime: number;
|
||||
mtime: number;
|
||||
}
|
||||
|
||||
export interface Score {
|
||||
uuid: string;
|
||||
score: number;
|
||||
link?: string;
|
||||
ctime: number;
|
||||
mtime: number;
|
||||
}
|
||||
|
||||
export class ScoreDB extends Dexie {
|
||||
user!: Table<User>;
|
||||
scoreboard!: Table<Score>;
|
||||
|
||||
constructor() {
|
||||
super('scores');
|
||||
this.version(1).stores({
|
||||
user: 'uuid, name, ctime, mtime',
|
||||
scoreboard: 'uuid, score, link, ctime, mtime',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const db = new ScoreDB();
|
||||
|
||||
export function getUser() {
|
||||
return db.user.toArray().then((d) => (d.length > 0 ? d[0] : null));
|
||||
}
|
||||
|
||||
export function getScore(uuid: string) {
|
||||
return db.scoreboard
|
||||
.where('uuid')
|
||||
.equals(uuid)
|
||||
.toArray()
|
||||
.then((d) => (d.length > 0 ? d[0] : null));
|
||||
}
|
||||
|
||||
export function updateScore(
|
||||
uuid: string,
|
||||
value: Partial<Omit<Score, 'ctime' | 'mtime' | 'uuid'>>
|
||||
) {
|
||||
return db.scoreboard.where('uuid').equals(uuid).modify({
|
||||
link: value.link,
|
||||
score: value.score,
|
||||
mtime: Date.now(),
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<script>
|
||||
export let width = 34;
|
||||
export let height = 34;
|
||||
</script>
|
||||
|
||||
<svg
|
||||
viewBox="0 0 1024 1024"
|
||||
{height}
|
||||
{width}
|
||||
class="inline-block stroke-current fill-current"
|
||||
><path
|
||||
stroke-width="2"
|
||||
d="M509.92 795.84c157.904 0 285.92-128.016 285.92-285.92C795.84 352 667.808 224 509.92 224 352 224 224 352 224 509.92c0 157.904 128 285.92 285.92 285.92z m0 48C325.504 843.84 176 694.32 176 509.92 176 325.504 325.504 176 509.92 176c184.416 0 333.92 149.504 333.92 333.92 0 184.416-149.504 333.92-333.92 333.92z m-2.448-400.704h16a16 16 0 0 1 16 16v201.728a16 16 0 0 1-16 16h-16a16 16 0 0 1-16-16V459.136a16 16 0 0 1 16-16z m0-100.176h16a16 16 0 0 1 16 16v23.648a16 16 0 0 1-16 16h-16a16 16 0 0 1-16-16v-23.648a16 16 0 0 1 16-16z"
|
||||
></path></svg
|
||||
>
|
||||
@@ -0,0 +1,109 @@
|
||||
<script lang="ts">
|
||||
import { TableMode, imageWidth, mode } from './store';
|
||||
|
||||
export let extraItems:
|
||||
| undefined
|
||||
| {
|
||||
label: string;
|
||||
onClick?: () => void;
|
||||
}[] = undefined;
|
||||
|
||||
export let sidebarItems: typeof extraItems = undefined;
|
||||
|
||||
let _imageWidth = 180;
|
||||
let _mode = TableMode.View;
|
||||
|
||||
mode.subscribe((v) => {
|
||||
_mode = v;
|
||||
});
|
||||
$: {
|
||||
imageWidth.set(_imageWidth);
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="drawer absolute h-full w-full overflow-y-hidden">
|
||||
<input id="my-drawer-3" type="checkbox" class="drawer-toggle" />
|
||||
<div class="drawer-content flex flex-col">
|
||||
<!-- Navbar -->
|
||||
<div class="w-full navbar bg-base-300">
|
||||
<div class="flex-none">
|
||||
{#if sidebarItems}
|
||||
<label
|
||||
for="my-drawer-3"
|
||||
aria-label="open sidebar"
|
||||
class="btn btn-square btn-ghost"
|
||||
>
|
||||
<svg
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
class="inline-block w-6 h-6 stroke-current"
|
||||
><path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M4 6h16M4 12h16M4 18h16"
|
||||
></path>
|
||||
</svg>
|
||||
</label>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="flex-1 px-2 mx-2">
|
||||
<slot name="title" />
|
||||
</div>
|
||||
<div class="flex-none">
|
||||
{#if extraItems}
|
||||
<ul class="menu menu-horizontal items-center">
|
||||
<li>
|
||||
<div>
|
||||
<input
|
||||
type="range"
|
||||
min="30"
|
||||
max="300"
|
||||
bind:value={_imageWidth}
|
||||
class="range"
|
||||
/>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
{#each extraItems as item}
|
||||
<li>
|
||||
<button on:click={item.onClick}>
|
||||
{item.label}
|
||||
</button>
|
||||
</li>
|
||||
{/each}
|
||||
<li>
|
||||
<button
|
||||
on:click={() => {
|
||||
if (_mode === TableMode.Score) {
|
||||
mode.set(TableMode.View);
|
||||
} else {
|
||||
mode.set(TableMode.Score);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{_mode === TableMode.Score ? 'Score' : 'View'}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<slot />
|
||||
</div>
|
||||
<div class="drawer-side z-50">
|
||||
<label for="my-drawer-3" aria-label="close sidebar" class="drawer-overlay"
|
||||
></label>
|
||||
{#if sidebarItems}
|
||||
<ul class="menu p-4 w-80 min-h-full bg-base-200">
|
||||
{#each sidebarItems as item}
|
||||
<li>
|
||||
<a on:click={item.onClick}>
|
||||
{item.label}
|
||||
</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,35 @@
|
||||
export interface Payload {
|
||||
workflow: Workflow;
|
||||
annotations: Annotation[];
|
||||
result: Axis[];
|
||||
}
|
||||
|
||||
export interface Workflow {
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface Annotation {
|
||||
axis: string;
|
||||
key: string;
|
||||
type: string;
|
||||
}
|
||||
|
||||
export interface Axis {
|
||||
type: 'axis';
|
||||
value: string;
|
||||
children: AxisValue[];
|
||||
}
|
||||
|
||||
export type AxisValue = Axis | ImgResult;
|
||||
|
||||
export interface ImgResult {
|
||||
type: 'img';
|
||||
uuid: string;
|
||||
src: string;
|
||||
}
|
||||
|
||||
export interface AxisScore {
|
||||
type: 'axis';
|
||||
score: number;
|
||||
children?: AxisScore[];
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<script lang="ts">
|
||||
export let score: number;
|
||||
</script>
|
||||
|
||||
<span>
|
||||
({score})
|
||||
</span>
|
||||
@@ -0,0 +1,19 @@
|
||||
import { writable } from 'svelte/store';
|
||||
import PubSub from 'pubsub-js';
|
||||
|
||||
export const imageWidth = writable(50);
|
||||
export const comfyUrl = writable('');
|
||||
|
||||
export enum TableMode {
|
||||
Score,
|
||||
View,
|
||||
}
|
||||
export const mode = writable(TableMode.View);
|
||||
|
||||
export function createRefetchStatisticPublisher() {
|
||||
return () => PubSub.publish('refetch-statistics');
|
||||
}
|
||||
|
||||
export function createRefetchStatisticSubscriber(fn: () => void) {
|
||||
return PubSub.subscribe('refetch-statistics', fn);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<script lang="ts">
|
||||
import Score from './score.svelte';
|
||||
import type { Axis, AxisScore } from './models';
|
||||
import TableHolder from './table-holder.svelte';
|
||||
import { el } from '@faker-js/faker';
|
||||
import { zip } from './utils';
|
||||
export let axis: Axis;
|
||||
export let score: AxisScore | undefined;
|
||||
</script>
|
||||
|
||||
<tr>
|
||||
<!-- prompts -->
|
||||
<th style="max-width:30vw" class="z-10">
|
||||
{axis.value}
|
||||
{#if score}
|
||||
<Score score={score.score} />
|
||||
{/if}
|
||||
</th>
|
||||
{#if score && score.children}
|
||||
{#each zip(axis.children, score.children) as [dim2, score2]}
|
||||
{#if dim2.type === 'axis' && score2.children}
|
||||
<td>
|
||||
{#each zip(dim2.children, score2.children) as [dim3, score3]}
|
||||
<TableHolder value={dim3} score={score3}></TableHolder>
|
||||
{/each}
|
||||
</td>
|
||||
{/if}
|
||||
{/each}
|
||||
{:else}
|
||||
{#each axis.children as dim2}
|
||||
{#if dim2.type === 'axis'}
|
||||
<td>
|
||||
{#each dim2.children as dim3}
|
||||
<TableHolder value={dim3} score={undefined}></TableHolder>
|
||||
{/each}
|
||||
</td>
|
||||
{/if}
|
||||
{/each}
|
||||
{/if}
|
||||
</tr>
|
||||
@@ -0,0 +1,21 @@
|
||||
<script lang="ts">
|
||||
import type { Axis, AxisScore } from './models';
|
||||
import Score from './score.svelte';
|
||||
import TableHolder from './table-holder.svelte';
|
||||
export let value: Axis;
|
||||
export let score: AxisScore | undefined;
|
||||
</script>
|
||||
|
||||
<div class="m-1 border box-border inline-block">
|
||||
<div class="text-center font-bold">
|
||||
{value.value}
|
||||
{#if score}
|
||||
<Score score={score.score} />
|
||||
{/if}
|
||||
</div>
|
||||
<div class="flex justify-around my-1">
|
||||
{#each value.children as item}
|
||||
<TableHolder value={item} {score} />
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,118 @@
|
||||
<script lang="ts">
|
||||
import type { ImgResult } from './models';
|
||||
import { TableMode, comfyUrl, imageWidth, mode } from './store';
|
||||
import { db, getScore, getUser, updateScore, type User } from '$lib/db';
|
||||
export let value: ImgResult;
|
||||
export let width = 100;
|
||||
import { createRefetchStatisticPublisher } from './store';
|
||||
let refetch = createRefetchStatisticPublisher();
|
||||
let api = '';
|
||||
comfyUrl.subscribe((d) => (api = d));
|
||||
|
||||
let like = false;
|
||||
let _mode = TableMode.View;
|
||||
imageWidth.subscribe((d) => {
|
||||
width = d;
|
||||
});
|
||||
|
||||
mode.subscribe((v) => {
|
||||
_mode = v;
|
||||
if (v === TableMode.Score && value.uuid)
|
||||
db.scoreboard
|
||||
.where('uuid')
|
||||
.equals(value.uuid)
|
||||
.toArray()
|
||||
.then((arr) => {
|
||||
if (arr.length > 0 && arr[0].score > 0) {
|
||||
like = true;
|
||||
} else {
|
||||
like = false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function updateSelfScore(score: number) {
|
||||
return updateScore(value.uuid, { score });
|
||||
}
|
||||
|
||||
async function onLike() {
|
||||
const { score } = (await getScore(value.uuid)) ?? {};
|
||||
if (score === undefined) {
|
||||
await db.scoreboard.add({
|
||||
uuid: value.uuid,
|
||||
score: 1,
|
||||
link: value.src,
|
||||
ctime: Date.now(),
|
||||
mtime: Date.now(),
|
||||
});
|
||||
} else if (score === 1) {
|
||||
return;
|
||||
} else {
|
||||
await updateSelfScore(1);
|
||||
}
|
||||
return apiUpdateScore(1)
|
||||
.then(async (res) => {
|
||||
if (res && res.ok) {
|
||||
like = true;
|
||||
refetch();
|
||||
} else await updateSelfScore(0);
|
||||
})
|
||||
.catch(() => {
|
||||
updateSelfScore(0);
|
||||
});
|
||||
}
|
||||
|
||||
async function onDislike() {
|
||||
const { score } = (await getScore(value.uuid)) ?? {};
|
||||
if (score === undefined || score === 0) {
|
||||
return;
|
||||
}
|
||||
await updateSelfScore(0);
|
||||
return apiUpdateScore(0)
|
||||
.then(async (res) => {
|
||||
if (res && res.ok) {
|
||||
like = false;
|
||||
refetch();
|
||||
} else await updateSelfScore(1);
|
||||
})
|
||||
.catch(() => {
|
||||
updateSelfScore(1);
|
||||
});
|
||||
}
|
||||
|
||||
async function apiUpdateScore(score: number) {
|
||||
const user = await getUser();
|
||||
if (!user) return;
|
||||
return fetch(api + '/browser/xyz_plot/score', {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify({
|
||||
user: user.name,
|
||||
source: value.uuid,
|
||||
score,
|
||||
}),
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="px-0.5 box-border inline-block relative" style={`width:${width}px`}>
|
||||
<img
|
||||
class="w-full"
|
||||
src={value.src}
|
||||
alt={value.uuid}
|
||||
style={`width:${width}px`}
|
||||
/>
|
||||
{#if _mode === TableMode.Score}
|
||||
<button
|
||||
class="absolute w-full h-full top-0 left-0 flex justify-end items-end p-1"
|
||||
tabindex="0"
|
||||
on:click={like ? onDislike : onLike}
|
||||
>
|
||||
<svg class="inline-block w-1/4" viewBox="0 0 1024 1024">
|
||||
<path
|
||||
d="M725.333333 192c-89.6 0-168.533333 44.8-213.333333 115.2C467.2 236.8 388.266667 192 298.666667 192 157.866667 192 42.666667 307.2 42.666667 448c0 253.866667 469.333333 512 469.333333 512s469.333333-256 469.333333-512c0-140.8-115.2-256-256-256z"
|
||||
fill={like ? '#F44336' : 'grey'}
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import type { AxisScore, AxisValue } from './models';
|
||||
import TableCellAxis from './table-cell-axis.svelte';
|
||||
import TableCellImg from './table-cell-img.svelte';
|
||||
|
||||
export let value: AxisValue;
|
||||
export let score: AxisScore | undefined;
|
||||
</script>
|
||||
|
||||
{#if value.type === 'img'}
|
||||
<TableCellImg {value} />
|
||||
{:else if value.type === 'axis'}
|
||||
<TableCellAxis {value} bind:score />
|
||||
{/if}
|
||||
@@ -0,0 +1,67 @@
|
||||
<script lang="ts">
|
||||
import { el } from '@faker-js/faker';
|
||||
import type { AxisScore, Payload } from './models';
|
||||
import Score from './score.svelte';
|
||||
import TableAxis from './table-axis.svelte';
|
||||
import { zip } from './utils';
|
||||
export let height: number = 0;
|
||||
export let payload: Payload;
|
||||
export let scores: AxisScore[] | undefined = undefined;
|
||||
|
||||
let headScore: AxisScore[] | undefined = undefined;
|
||||
$: headScore = scores
|
||||
? scores[0]
|
||||
.children!.map(
|
||||
(d) =>
|
||||
JSON.parse(
|
||||
JSON.stringify({ ...d, children: undefined }),
|
||||
) as AxisScore,
|
||||
)
|
||||
.map((axis, idx) => ({
|
||||
...axis,
|
||||
score:
|
||||
scores
|
||||
?.map((axis) => axis.children![idx].score)
|
||||
.reduce((a, b) => a + b) ?? 0,
|
||||
}))
|
||||
: undefined;
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="overflow-x-auto max-w-full inline-block"
|
||||
style={`max-height: ${height}px`}
|
||||
>
|
||||
<table class="table table-xs table-pin-rows table-pin-cols table-zebra-grey">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
{#if headScore}
|
||||
{#each zip(payload.result[0].children, headScore) as [axis, score]}
|
||||
{#if axis.type === 'axis'}
|
||||
<td class="text-wrap">
|
||||
{axis.value}<Score score={score.score} />
|
||||
</td>
|
||||
{/if}
|
||||
{/each}
|
||||
{:else}
|
||||
{#each payload.result[0].children as axis}
|
||||
{#if axis.type === 'axis'}
|
||||
<td class="text-wrap">{axis.value}</td>
|
||||
{/if}
|
||||
{/each}
|
||||
{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#if scores}
|
||||
{#each zip(payload.result, scores) as [axis, score]}
|
||||
<TableAxis {axis} {score} />
|
||||
{/each}
|
||||
{:else}
|
||||
{#each payload.result as axis}
|
||||
<TableAxis {axis} score={undefined} />
|
||||
{/each}
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
export function zip<T = unknown, U = unknown>(arr1: T[], arr2: U[]): [T, U][] {
|
||||
return Array.from({ length: arr1.length }).map((_, i) => [arr1[i], arr2[i]]);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { faker } from '@faker-js/faker';
|
||||
|
||||
export function fakeUsername() {
|
||||
const now = Date.now();
|
||||
const suf = now.toString(32);
|
||||
return `${faker.person.lastName()}_${suf}`;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import "../app.css";
|
||||
import '../app.sass';
|
||||
</script>
|
||||
|
||||
<slot />
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { waitLocale } from 'svelte-i18n';
|
||||
|
||||
/** @type {import('./$types').PageLoad} */
|
||||
export async function load({ url }) {
|
||||
await waitLocale();
|
||||
|
||||
if (typeof process === 'undefined') {
|
||||
const path = url.searchParams.get('path');
|
||||
return {
|
||||
path,
|
||||
};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import MultiDimTableLayout from '$lib/multi-dim-table/layout.svelte';
|
||||
import AnalyzeTable from '$lib/multi-dim-table/table.svelte';
|
||||
import {
|
||||
comfyUrl,
|
||||
createRefetchStatisticPublisher,
|
||||
} from '$lib/multi-dim-table/store';
|
||||
import InfoIcon from '$lib/icons/info.svelte';
|
||||
import { db, getUser } from '$lib/db';
|
||||
import { v1 as uuid } from 'uuid';
|
||||
import { fakeUsername } from '$lib/random';
|
||||
import { createRefetchStatisticSubscriber } from '$lib/multi-dim-table/store';
|
||||
|
||||
/** @type {import('./$types').PageData} */
|
||||
export let data;
|
||||
|
||||
/** @type {string | null} */
|
||||
export let path;
|
||||
|
||||
/** @type {import('$lib/multi-dim-table/models').AxisScore[]} */
|
||||
let scores;
|
||||
|
||||
$: ({ path } = data);
|
||||
$: comfyUrl.set(data.comfyUrl);
|
||||
|
||||
let mounted = false;
|
||||
|
||||
/** @type {import("$lib/multi-dim-table/models").Payload}*/
|
||||
let payload;
|
||||
let loading = false;
|
||||
|
||||
/**@type {HTMLElement | undefined}*/
|
||||
let tableContainerRef;
|
||||
|
||||
createRefetchStatisticSubscriber(() => {
|
||||
fetch(data.comfyUrl + '/browser/xyz_plot/statistic?path=' + data.path)
|
||||
.then(async (d) => {
|
||||
if (d.ok) {
|
||||
scores = await d.json().then((d) => d.result);
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
const refetch = createRefetchStatisticPublisher();
|
||||
|
||||
$: {
|
||||
if (mounted && path) {
|
||||
loading = true;
|
||||
fetch(path)
|
||||
.then((d) => d.json())
|
||||
.then((d) => (payload = d))
|
||||
.finally(() => {
|
||||
loading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$: {
|
||||
if (mounted && path) {
|
||||
refetch();
|
||||
}
|
||||
}
|
||||
|
||||
onMount(async () => {
|
||||
mounted = true;
|
||||
const user = await getUser();
|
||||
if (!user) {
|
||||
db.user.add({
|
||||
uuid: uuid(),
|
||||
name: fakeUsername(),
|
||||
ctime: Date.now(),
|
||||
mtime: Date.now(),
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
{#if typeof data.path === 'string' && data.path.length > 0}
|
||||
{#if loading}
|
||||
<div class="flex flex-col w-screen h-screen justify-center items-center">
|
||||
<span class="loading loading-dots loading-lg"></span>
|
||||
</div>
|
||||
{:else if !payload}
|
||||
null
|
||||
{:else}
|
||||
<MultiDimTableLayout
|
||||
extraItems={[
|
||||
{
|
||||
label: 'Open Workflow',
|
||||
onClick: () => {
|
||||
open(payload.workflow.url);
|
||||
},
|
||||
},
|
||||
]}
|
||||
>
|
||||
<div slot="title">
|
||||
XYZ Plot
|
||||
<div
|
||||
class="tooltip tooltip-bottom z-10 before:whitespace-pre-wrap"
|
||||
data-tip={payload.annotations
|
||||
.map((d) => `${d.axis}: ${d.key} - ${d.type}`)
|
||||
.join('\n')}
|
||||
>
|
||||
<InfoIcon />
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full h-full" bind:this={tableContainerRef}>
|
||||
<AnalyzeTable
|
||||
bind:payload
|
||||
bind:scores
|
||||
height={tableContainerRef?.clientHeight ?? 0}
|
||||
/>
|
||||
</div>
|
||||
</MultiDimTableLayout>
|
||||
{/if}
|
||||
{:else}
|
||||
Invalid Path
|
||||
{/if}
|
||||
@@ -8,6 +8,9 @@ import folder_paths
|
||||
from comfy.cli_args import args
|
||||
|
||||
SERVER_BASE_URL = f'http://{args.listen}:{args.port}'
|
||||
# To support IPv6
|
||||
if ':' in args.listen:
|
||||
SERVER_BASE_URL = f'http://[{args.listen}]:{args.port}'
|
||||
|
||||
browser_path = path.dirname(__file__)
|
||||
collections_path = path.join(browser_path, 'collections')
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
var o=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}export{o as c,l as g};
|
||||
@@ -0,0 +1 @@
|
||||
function e(n){return n?.length!==void 0?n:Array.from(n)}export{e};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{n as f,k as w,r as m,s as q,l as x}from"./scheduler.3IkOjBO1.js";const a=[];function z(e,i){return{subscribe:A(e,i).subscribe}}function A(e,i=f){let r;const n=new Set;function u(t){if(q(e,t)&&(e=t,r)){const o=!a.length;for(const s of n)s[1](),a.push(s,e);if(o){for(let s=0;s<a.length;s+=2)a[s][0](a[s+1]);a.length=0}}}function l(t){u(t(e))}function b(t,o=f){const s=[t,o];return n.add(s),n.size===1&&(r=i(u,l)||f),t(e),()=>{n.delete(s),n.size===0&&r&&(r(),r=null)}}return{set:u,update:l,subscribe:b}}function B(e,i,r){const n=!Array.isArray(e),u=n?[e]:e;if(!u.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const l=i.length<2;return z(r,(b,t)=>{let o=!1;const s=[];let d=0,p=f;const h=()=>{if(d)return;p();const c=i(n?s[0]:s,b,t);l?b(c):p=x(c)?c:f},y=u.map((c,g)=>w(c,_=>{s[g]=_,d&=~(1<<g),o&&h()},()=>{d|=1<<g}));return o=!0,h(),function(){m(y),p(),o=!1}})}export{B as d,A as w};
|
||||
import{n as f,l as w,r as m,s as q,k as x}from"./scheduler.Tg1fnMp_.js";const a=[];function z(e,i){return{subscribe:A(e,i).subscribe}}function A(e,i=f){let r;const n=new Set;function u(t){if(q(e,t)&&(e=t,r)){const o=!a.length;for(const s of n)s[1](),a.push(s,e);if(o){for(let s=0;s<a.length;s+=2)a[s][0](a[s+1]);a.length=0}}}function l(t){u(t(e))}function b(t,o=f){const s=[t,o];return n.add(s),n.size===1&&(r=i(u,l)||f),t(e),()=>{n.delete(s),n.size===0&&r&&(r(),r=null)}}return{set:u,update:l,subscribe:b}}function B(e,i,r){const n=!Array.isArray(e),u=n?[e]:e;if(!u.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const l=i.length<2;return z(r,(b,t)=>{let o=!1;const s=[];let d=0,p=f;const h=()=>{if(d)return;p();const c=i(n?s[0]:s,b,t);l?b(c):p=x(c)?c:f},y=u.map((c,g)=>w(c,_=>{s[g]=_,d&=~(1<<g),o&&h()},()=>{d|=1<<g}));return o=!0,h(),function(){m(y),p(),o=!1}})}export{B as d,A as w};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
function x(){}function w(t,n){for(const e in n)t[e]=n[e];return t}function j(t){return t()}function A(){return Object.create(null)}function E(t){t.forEach(j)}function D(t){return typeof t=="function"}function F(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let i;function P(t,n){return t===n?!0:(i||(i=document.createElement("a")),i.href=n,t===i.href)}function S(t){return Object.keys(t).length===0}function q(t,...n){if(t==null){for(const r of n)r(void 0);return x}const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function U(t,n,e){t.$$.on_destroy.push(q(n,e))}function B(t,n,e,r){if(t){const o=m(t,n,e,r);return t[0](o)}}function m(t,n,e,r){return t[1]&&r?w(e.ctx.slice(),t[1](r(n))):e.ctx}function C(t,n,e,r){if(t[2]&&r){const o=t[2](r(e));if(n.dirty===void 0)return o;if(typeof o=="object"){const l=[],_=Math.max(n.dirty.length,o.length);for(let s=0;s<_;s+=1)l[s]=n.dirty[s]|o[s];return l}return n.dirty|o}return n.dirty}function G(t,n,e,r,o,l){if(o){const _=m(n,e,r,l);t.p(_,o)}}function H(t){if(t.ctx.length>32){const n=[],e=t.ctx.length/32;for(let r=0;r<e;r++)n[r]=-1;return n}return-1}let f;function h(t){f=t}function g(){if(!f)throw new Error("Function called outside component initialization");return f}function I(t){g().$$.on_mount.push(t)}function J(t){g().$$.after_update.push(t)}function K(t){g().$$.on_destroy.push(t)}const a=[],y=[];let u=[];const p=[],k=Promise.resolve();let b=!1;function v(){b||(b=!0,k.then(z))}function L(){return v(),k}function O(t){u.push(t)}function N(t){p.push(t)}const d=new Set;let c=0;function z(){if(c!==0)return;const t=f;do{try{for(;c<a.length;){const n=a[c];c++,h(n),M(n.$$)}}catch(n){throw a.length=0,c=0,n}for(h(null),a.length=0,c=0;y.length;)y.pop()();for(let n=0;n<u.length;n+=1){const e=u[n];d.has(e)||(d.add(e),e())}u.length=0}while(a.length);for(;p.length;)p.pop()();b=!1,d.clear(),h(t)}function M(t){if(t.fragment!==null){t.update(),E(t.before_update);const n=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,n),t.after_update.forEach(O)}}function Q(t){const n=[],e=[];u.forEach(r=>t.indexOf(r)===-1?n.push(r):e.push(r)),e.forEach(r=>r()),u=n}export{v as A,J as a,y as b,B as c,C as d,U as e,P as f,H as g,N as h,K as i,O as j,q as k,D as l,A as m,x as n,I as o,z as p,S as q,E as r,F as s,L as t,G as u,Q as v,f as w,h as x,j as y,a as z};
|
||||
function x(){}function w(t,n){for(const e in n)t[e]=n[e];return t}function j(t){return t()}function A(){return Object.create(null)}function E(t){t.forEach(j)}function D(t){return typeof t=="function"}function F(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let i;function P(t,n){return t===n?!0:(i||(i=document.createElement("a")),i.href=n,t===i.href)}function S(t){return Object.keys(t).length===0}function q(t,...n){if(t==null){for(const r of n)r(void 0);return x}const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function U(t,n,e){t.$$.on_destroy.push(q(n,e))}function B(t,n,e,r){if(t){const o=m(t,n,e,r);return t[0](o)}}function m(t,n,e,r){return t[1]&&r?w(e.ctx.slice(),t[1](r(n))):e.ctx}function C(t,n,e,r){if(t[2]&&r){const o=t[2](r(e));if(n.dirty===void 0)return o;if(typeof o=="object"){const l=[],_=Math.max(n.dirty.length,o.length);for(let s=0;s<_;s+=1)l[s]=n.dirty[s]|o[s];return l}return n.dirty|o}return n.dirty}function G(t,n,e,r,o,l){if(o){const _=m(n,e,r,l);t.p(_,o)}}function H(t){if(t.ctx.length>32){const n=[],e=t.ctx.length/32;for(let r=0;r<e;r++)n[r]=-1;return n}return-1}let f;function h(t){f=t}function g(){if(!f)throw new Error("Function called outside component initialization");return f}function I(t){g().$$.on_mount.push(t)}function J(t){g().$$.after_update.push(t)}function K(t){g().$$.on_destroy.push(t)}const a=[],y=[];let u=[];const p=[],k=Promise.resolve();let b=!1;function v(){b||(b=!0,k.then(z))}function L(){return v(),k}function O(t){u.push(t)}function N(t){p.push(t)}const d=new Set;let c=0;function z(){if(c!==0)return;const t=f;do{try{for(;c<a.length;){const n=a[c];c++,h(n),M(n.$$)}}catch(n){throw a.length=0,c=0,n}for(h(null),a.length=0,c=0;y.length;)y.pop()();for(let n=0;n<u.length;n+=1){const e=u[n];d.has(e)||(d.add(e),e())}u.length=0}while(a.length);for(;p.length;)p.pop()();b=!1,d.clear(),h(t)}function M(t){if(t.fragment!==null){t.update(),E(t.before_update);const n=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,n),t.after_update.forEach(O)}}function Q(t){const n=[],e=[];u.forEach(r=>t.indexOf(r)===-1?n.push(r):e.push(r)),e.forEach(r=>r()),u=n}export{v as A,J as a,y as b,B as c,C as d,U as e,P as f,H as g,N as h,K as i,O as j,D as k,q as l,A as m,x as n,I as o,z as p,S as q,E as r,F as s,L as t,G as u,Q as v,f as w,h as x,j as y,a as z};
|
||||
@@ -1 +0,0 @@
|
||||
import{w as u}from"./index.KGH7dGZH.js";const b=globalThis.__sveltekit_vb5m50?.base??"",v=globalThis.__sveltekit_vb5m50?.assets??b,k="1705164974856",R="sveltekit:snapshot",T="sveltekit:scroll",w="sveltekit:states",I="sveltekit:pageurl",S="sveltekit:history",y="sveltekit:navigation",f={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},_=location.origin;function N(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function U(){return{x:pageXOffset,y:pageYOffset}}function c(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const d={...f,"":f.hover};function g(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function L(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=g(e)}}function O(e,t){let n;try{n=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,r=!n||!!a||E(n,t)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),l=n?.origin===_&&e.hasAttribute("download");return{url:n,external:r,target:a,download:l}}function Y(e){let t=null,n=null,a=null,r=null,l=null,o=null,s=e;for(;s&&s!==document.documentElement;)a===null&&(a=c(s,"preload-code")),r===null&&(r=c(s,"preload-data")),t===null&&(t=c(s,"keepfocus")),n===null&&(n=c(s,"noscroll")),l===null&&(l=c(s,"reload")),o===null&&(o=c(s,"replacestate")),s=g(s);function i(h){switch(h){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:d[a??"off"],preload_data:d[r??"off"],keepfocus:i(t),noscroll:i(n),reload:i(l),replace_state:i(o)}}function p(e){const t=u(e);let n=!0;function a(){n=!0,t.update(o=>o)}function r(o){n=!1,t.set(o)}function l(o){let s;return t.subscribe(i=>{(s===void 0||n&&i!==s)&&o(s=i)})}return{notify:a,set:r,subscribe:l}}function m(){const{set:e,subscribe:t}=u(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${v}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const o=(await r.json()).version!==k;return o&&(e(!0),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:a}}function E(e,t){return e.origin!==_||!e.pathname.startsWith(t)}function x(e){e.client}const P={url:p({}),page:p({}),navigating:u(null),updated:m()};export{S as H,y as N,I as P,T as S,w as a,R as b,Y as c,P as d,b as e,L as f,O as g,f as h,E as i,x as j,_ as o,N as r,U as s};
|
||||
@@ -0,0 +1 @@
|
||||
import{w as u}from"./index.Bo7-JXlm.js";const b=globalThis.__sveltekit_19afu?.base??"",v=globalThis.__sveltekit_19afu?.assets??b,k="1711098245920",R="sveltekit:snapshot",T="sveltekit:scroll",w="sveltekit:states",I="sveltekit:pageurl",S="sveltekit:history",y="sveltekit:navigation",f={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},_=location.origin;function N(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function U(){return{x:pageXOffset,y:pageYOffset}}function c(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const d={...f,"":f.hover};function g(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function L(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=g(e)}}function O(e,t){let n;try{n=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const o=e instanceof SVGAElement?e.target.baseVal:e.target,r=!n||!!o||m(n,t)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),l=n?.origin===_&&e.hasAttribute("download");return{url:n,external:r,target:o,download:l}}function Y(e){let t=null,n=null,o=null,r=null,l=null,a=null,s=e;for(;s&&s!==document.documentElement;)o===null&&(o=c(s,"preload-code")),r===null&&(r=c(s,"preload-data")),t===null&&(t=c(s,"keepfocus")),n===null&&(n=c(s,"noscroll")),l===null&&(l=c(s,"reload")),a===null&&(a=c(s,"replacestate")),s=g(s);function i(h){switch(h){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:d[o??"off"],preload_data:d[r??"off"],keepfocus:i(t),noscroll:i(n),reload:i(l),replace_state:i(a)}}function p(e){const t=u(e);let n=!0;function o(){n=!0,t.update(a=>a)}function r(a){n=!1,t.set(a)}function l(a){let s;return t.subscribe(i=>{(s===void 0||n&&i!==s)&&a(s=i)})}return{notify:o,set:r,subscribe:l}}function E(){const{set:e,subscribe:t}=u(!1);let n;async function o(){clearTimeout(n);try{const r=await fetch(`${v}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const a=(await r.json()).version!==k;return a&&(e(!0),clearTimeout(n)),a}catch{return!1}}return{subscribe:t,check:o}}function m(e,t){return e.origin!==_||!e.pathname.startsWith(t)}function x(e){e.client}const P={url:p({}),page:p({}),navigating:u(null),updated:E()};export{S as H,y as N,I as P,T as S,w as a,R as b,Y as c,P as d,b as e,L as f,O as g,f as h,m as i,x as j,_ as o,N as r,U as s};
|
||||
@@ -1,7 +0,0 @@
|
||||
import{_ as I}from"../chunks/preload-helper.0HuHagjb.js";import{s as S,a as j,o as C,t as M,b as P}from"../chunks/scheduler.3IkOjBO1.js";import{S as U,i as z,s as B,e as p,c as F,a as w,t as d,b as N,d as h,f as g,g as G,h as H,j as J,k as R,l as m,m as K,n as Q,o as W,p as D,q as k,r as v,u as V,v as E,w as y}from"../chunks/index.b4_itZyM.js";const ie={};function X(r){let e,n,i;var s=r[1][0];function _(t,o){return{props:{data:t[3],form:t[2]}}}return s&&(e=k(s,_(r)),r[12](e)),{c(){e&&v(e.$$.fragment),n=p()},l(t){e&&V(e.$$.fragment,t),n=p()},m(t,o){e&&E(e,t,o),w(t,n,o),i=!0},p(t,o){if(o&2&&s!==(s=t[1][0])){if(e){D();const a=e;d(a.$$.fragment,1,0,()=>{y(a,1)}),N()}s?(e=k(s,_(t)),t[12](e),v(e.$$.fragment),h(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const a={};o&8&&(a.data=t[3]),o&4&&(a.form=t[2]),e.$set(a)}},i(t){i||(e&&h(e.$$.fragment,t),i=!0)},o(t){e&&d(e.$$.fragment,t),i=!1},d(t){t&&g(n),r[12](null),e&&y(e,t)}}}function Y(r){let e,n,i;var s=r[1][0];function _(t,o){return{props:{data:t[3],$$slots:{default:[Z]},$$scope:{ctx:t}}}}return s&&(e=k(s,_(r)),r[11](e)),{c(){e&&v(e.$$.fragment),n=p()},l(t){e&&V(e.$$.fragment,t),n=p()},m(t,o){e&&E(e,t,o),w(t,n,o),i=!0},p(t,o){if(o&2&&s!==(s=t[1][0])){if(e){D();const a=e;d(a.$$.fragment,1,0,()=>{y(a,1)}),N()}s?(e=k(s,_(t)),t[11](e),v(e.$$.fragment),h(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const a={};o&8&&(a.data=t[3]),o&8215&&(a.$$scope={dirty:o,ctx:t}),e.$set(a)}},i(t){i||(e&&h(e.$$.fragment,t),i=!0)},o(t){e&&d(e.$$.fragment,t),i=!1},d(t){t&&g(n),r[11](null),e&&y(e,t)}}}function Z(r){let e,n,i;var s=r[1][1];function _(t,o){return{props:{data:t[4],form:t[2]}}}return s&&(e=k(s,_(r)),r[10](e)),{c(){e&&v(e.$$.fragment),n=p()},l(t){e&&V(e.$$.fragment,t),n=p()},m(t,o){e&&E(e,t,o),w(t,n,o),i=!0},p(t,o){if(o&2&&s!==(s=t[1][1])){if(e){D();const a=e;d(a.$$.fragment,1,0,()=>{y(a,1)}),N()}s?(e=k(s,_(t)),t[10](e),v(e.$$.fragment),h(e.$$.fragment,1),E(e,n.parentNode,n)):e=null}else if(s){const a={};o&16&&(a.data=t[4]),o&4&&(a.form=t[2]),e.$set(a)}},i(t){i||(e&&h(e.$$.fragment,t),i=!0)},o(t){e&&d(e.$$.fragment,t),i=!1},d(t){t&&g(n),r[10](null),e&&y(e,t)}}}function A(r){let e,n=r[6]&&L(r);return{c(){e=G("div"),n&&n.c(),this.h()},l(i){e=H(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var s=J(e);n&&n.l(s),s.forEach(g),this.h()},h(){R(e,"id","svelte-announcer"),R(e,"aria-live","assertive"),R(e,"aria-atomic","true"),m(e,"position","absolute"),m(e,"left","0"),m(e,"top","0"),m(e,"clip","rect(0 0 0 0)"),m(e,"clip-path","inset(50%)"),m(e,"overflow","hidden"),m(e,"white-space","nowrap"),m(e,"width","1px"),m(e,"height","1px")},m(i,s){w(i,e,s),n&&n.m(e,null)},p(i,s){i[6]?n?n.p(i,s):(n=L(i),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(i){i&&g(e),n&&n.d()}}}function L(r){let e;return{c(){e=K(r[7])},l(n){e=Q(n,r[7])},m(n,i){w(n,e,i)},p(n,i){i&128&&W(e,n[7])},d(n){n&&g(e)}}}function $(r){let e,n,i,s,_;const t=[Y,X],o=[];function a(f,u){return f[1][1]?0:1}e=a(r),n=o[e]=t[e](r);let c=r[5]&&A(r);return{c(){n.c(),i=B(),c&&c.c(),s=p()},l(f){n.l(f),i=F(f),c&&c.l(f),s=p()},m(f,u){o[e].m(f,u),w(f,i,u),c&&c.m(f,u),w(f,s,u),_=!0},p(f,[u]){let b=e;e=a(f),e===b?o[e].p(f,u):(D(),d(o[b],1,1,()=>{o[b]=null}),N(),n=o[e],n?n.p(f,u):(n=o[e]=t[e](f),n.c()),h(n,1),n.m(i.parentNode,i)),f[5]?c?c.p(f,u):(c=A(f),c.c(),c.m(s.parentNode,s)):c&&(c.d(1),c=null)},i(f){_||(h(n),_=!0)},o(f){d(n),_=!1},d(f){f&&(g(i),g(s)),o[e].d(f),c&&c.d(f)}}}function x(r,e,n){let{stores:i}=e,{page:s}=e,{constructors:_}=e,{components:t=[]}=e,{form:o}=e,{data_0:a=null}=e,{data_1:c=null}=e;j(i.page.notify);let f=!1,u=!1,b=null;C(()=>{const l=i.page.subscribe(()=>{f&&(n(6,u=!0),M().then(()=>{n(7,b=document.title||"untitled page")}))});return n(5,f=!0),l});function O(l){P[l?"unshift":"push"](()=>{t[1]=l,n(0,t)})}function T(l){P[l?"unshift":"push"](()=>{t[0]=l,n(0,t)})}function q(l){P[l?"unshift":"push"](()=>{t[0]=l,n(0,t)})}return r.$$set=l=>{"stores"in l&&n(8,i=l.stores),"page"in l&&n(9,s=l.page),"constructors"in l&&n(1,_=l.constructors),"components"in l&&n(0,t=l.components),"form"in l&&n(2,o=l.form),"data_0"in l&&n(3,a=l.data_0),"data_1"in l&&n(4,c=l.data_1)},r.$$.update=()=>{r.$$.dirty&768&&i.page.set(s)},[t,_,o,a,c,f,u,b,i,s,O,T,q]}class se extends U{constructor(e){super(),z(this,e,x,$,S,{stores:8,page:9,constructors:1,components:0,form:2,data_0:3,data_1:4})}}const oe=[()=>I(()=>import("../nodes/0.z_vse_tt.js"),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url),()=>I(()=>import("../nodes/1.2vGAU644.js"),__vite__mapDeps([7,4,5,8,3]),import.meta.url),()=>I(()=>import("../nodes/2.g-1vMRVf.js"),__vite__mapDeps([9,4,5,2,3]),import.meta.url)],re=[],ae={"/":[2]},fe={handleError:({error:r})=>{console.error(r)}};export{ae as dictionary,fe as hooks,ie as matchers,oe as nodes,se as root,re as server_loads};
|
||||
function __vite__mapDeps(indexes) {
|
||||
if (!__vite__mapDeps.viteFileDeps) {
|
||||
__vite__mapDeps.viteFileDeps = ["../nodes/0.z_vse_tt.js","../chunks/preload-helper.0HuHagjb.js","../chunks/runtime.-hGPaMd1.js","../chunks/index.KGH7dGZH.js","../chunks/scheduler.3IkOjBO1.js","../chunks/index.b4_itZyM.js","../assets/0.S8gUIXi-.css","../nodes/1.2vGAU644.js","../chunks/singletons.SrwXqy11.js","../nodes/2.g-1vMRVf.js"]
|
||||
}
|
||||
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,4 +1,4 @@
|
||||
import{_ as c}from"../chunks/preload-helper.0HuHagjb.js";import{r as u,g as n,i as _,$ as f,w as m}from"../chunks/runtime.-hGPaMd1.js";import{s as p,c as g,u as d,g as $,d as L}from"../chunks/scheduler.3IkOjBO1.js";import{S as y,i as S,d as v,t as b}from"../chunks/index.b4_itZyM.js";u("en-US",()=>c(()=>import("../chunks/en-US.JAQIzv30.js"),__vite__mapDeps([]),import.meta.url));u("zh-CN",()=>c(()=>import("../chunks/zh-CN.giVTFcLQ.js"),__vite__mapDeps([]),import.meta.url));const r="lang",h="en-US";let i=window.navigator.language;n()&&(i=n());localStorage.getItem(r)&&(i=localStorage.getItem(r));_({fallbackLocale:h,initialLocale:i,handleMissingMessage:o=>o.id.split(".").pop()});f.subscribe(o=>{localStorage.setItem(r,o)});const w=!0;async function I({url:o}){await m();let a="";return typeof process>"u"&&(a=o.searchParams.get("comfyUrl")||""),{comfyUrl:a}}const j=Object.freeze(Object.defineProperty({__proto__:null,load:I,prerender:w},Symbol.toStringTag,{value:"Module"}));function P(o){let a;const s=o[1].default,t=g(s,o,o[0],null);return{c(){t&&t.c()},l(e){t&&t.l(e)},m(e,l){t&&t.m(e,l),a=!0},p(e,[l]){t&&t.p&&(!a||l&1)&&d(t,s,e,e[0],a?L(s,e[0],l,null):$(e[0]),null)},i(e){a||(v(t,e),a=!0)},o(e){b(t,e),a=!1},d(e){t&&t.d(e)}}}function E(o,a,s){let{$$slots:t={},$$scope:e}=a;return o.$$set=l=>{"$$scope"in l&&s(0,e=l.$$scope)},[e,t]}class z extends y{constructor(a){super(),S(this,a,E,P,p,{})}}export{z as component,j as universal};
|
||||
import{_ as c}from"../chunks/preload-helper.0HuHagjb.js";import{r as u,g as n,i as _,$ as f,w as m}from"../chunks/runtime.bOPOS4G5.js";import{s as p,c as g,u as d,g as $,d as L}from"../chunks/scheduler.Tg1fnMp_.js";import{S as y,i as S,d as v,t as b}from"../chunks/index.xa2X6v7V.js";u("en-US",()=>c(()=>import("../chunks/en-US.JAQIzv30.js"),__vite__mapDeps([]),import.meta.url));u("zh-CN",()=>c(()=>import("../chunks/zh-CN.giVTFcLQ.js"),__vite__mapDeps([]),import.meta.url));const r="lang",h="en-US";let i=window.navigator.language;n()&&(i=n());localStorage.getItem(r)&&(i=localStorage.getItem(r));_({fallbackLocale:h,initialLocale:i,handleMissingMessage:o=>o.id.split(".").pop()});f.subscribe(o=>{localStorage.setItem(r,o)});const w=!0;async function I({url:o}){await m();let a="";return typeof process>"u"&&(a=o.searchParams.get("comfyUrl")||""),{comfyUrl:a}}const j=Object.freeze(Object.defineProperty({__proto__:null,load:I,prerender:w},Symbol.toStringTag,{value:"Module"}));function P(o){let a;const s=o[1].default,t=g(s,o,o[0],null);return{c(){t&&t.c()},l(e){t&&t.l(e)},m(e,l){t&&t.m(e,l),a=!0},p(e,[l]){t&&t.p&&(!a||l&1)&&d(t,s,e,e[0],a?L(s,e[0],l,null):$(e[0]),null)},i(e){a||(v(t,e),a=!0)},o(e){b(t,e),a=!1},d(e){t&&t.d(e)}}}function E(o,a,s){let{$$slots:t={},$$scope:e}=a;return o.$$set=l=>{"$$scope"in l&&s(0,e=l.$$scope)},[e,t]}class z extends y{constructor(a){super(),S(this,a,E,P,p,{})}}export{z as component,j as universal};
|
||||
function __vite__mapDeps(indexes) {
|
||||
if (!__vite__mapDeps.viteFileDeps) {
|
||||
__vite__mapDeps.viteFileDeps = []
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{s as E,n as b,e as x}from"../chunks/scheduler.3IkOjBO1.js";import{S,i as j,g as _,m as f,s as q,h as d,j as g,n as h,f as p,c as y,a as l,x as v,o as $}from"../chunks/index.b4_itZyM.js";import{d as C}from"../chunks/singletons.SrwXqy11.js";const H=()=>{const s=C;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},P={subscribe(s){return H().page.subscribe(s)}};function k(s){let t,r=s[0].status+"",o,n,i,c=s[0].error?.message+"",u;return{c(){t=_("h1"),o=f(r),n=q(),i=_("p"),u=f(c)},l(e){t=d(e,"H1",{});var a=g(t);o=h(a,r),a.forEach(p),n=y(e),i=d(e,"P",{});var m=g(i);u=h(m,c),m.forEach(p)},m(e,a){l(e,t,a),v(t,o),l(e,n,a),l(e,i,a),v(i,u)},p(e,[a]){a&1&&r!==(r=e[0].status+"")&&$(o,r),a&1&&c!==(c=e[0].error?.message+"")&&$(u,c)},i:b,o:b,d(e){e&&(p(t),p(n),p(i))}}}function w(s,t,r){let o;return x(s,P,n=>r(0,o=n)),[o]}let D=class extends S{constructor(t){super(),j(this,t,w,k,E,{})}};export{D as component};
|
||||
import{s as E,n as b,e as x}from"../chunks/scheduler.Tg1fnMp_.js";import{S,i as j,g as _,m as f,s as q,h as d,j as g,n as h,f as p,c as y,a as l,x as v,o as $}from"../chunks/index.xa2X6v7V.js";import{d as C}from"../chunks/singletons.b6n7ppVR.js";const H=()=>{const s=C;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},P={subscribe(s){return H().page.subscribe(s)}};function k(s){let t,r=s[0].status+"",o,n,i,c=s[0].error?.message+"",u;return{c(){t=_("h1"),o=f(r),n=q(),i=_("p"),u=f(c)},l(e){t=d(e,"H1",{});var a=g(t);o=h(a,r),a.forEach(p),n=y(e),i=d(e,"P",{});var m=g(i);u=h(m,c),m.forEach(p)},m(e,a){l(e,t,a),v(t,o),l(e,n,a),l(e,i,a),v(i,u)},p(e,[a]){a&1&&r!==(r=e[0].status+"")&&$(o,r),a&1&&c!==(c=e[0].error?.message+"")&&$(u,c)},i:b,o:b,d(e){e&&(p(t),p(n),p(i))}}}function w(s,t,r){let o;return x(s,P,n=>r(0,o=n)),[o]}let D=class extends S{constructor(t){super(),j(this,t,w,k,E,{})}};export{D as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{w as r}from"../chunks/runtime.bOPOS4G5.js";import{s as l,c as i,u,g as f,d as c}from"../chunks/scheduler.Tg1fnMp_.js";import{S as _,i as p,d as m,t as d}from"../chunks/index.xa2X6v7V.js";async function g({url:o}){return await r(),typeof process>"u"?{path:o.searchParams.get("path")}:{}}const v=Object.freeze(Object.defineProperty({__proto__:null,load:g},Symbol.toStringTag,{value:"Module"}));function $(o){let s;const n=o[1].default,e=i(n,o,o[0],null);return{c(){e&&e.c()},l(t){e&&e.l(t)},m(t,a){e&&e.m(t,a),s=!0},p(t,[a]){e&&e.p&&(!s||a&1)&&u(e,n,t,t[0],s?c(n,t[0],a,null):f(t[0]),null)},i(t){s||(m(e,t),s=!0)},o(t){d(e,t),s=!1},d(t){e&&e.d(t)}}}function h(o,s,n){let{$$slots:e={},$$scope:t}=s;return o.$$set=a=>{"$$scope"in a&&n(0,t=a.$$scope)},[t,e]}class w extends _{constructor(s){super(),p(this,s,h,$,l,{})}}export{w as component,v as universal};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":"1705164974856"}
|
||||
{"version":"1711098245920"}
|
||||
+17
-15
File diff suppressed because one or more lines are too long
@@ -0,0 +1,52 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-theme="forest">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="./favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<link href="./_app/immutable/assets/0.sGZW4pel.css" rel="stylesheet">
|
||||
<link rel="modulepreload" href="./_app/immutable/entry/start.WorQkyMw.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/scheduler.Tg1fnMp_.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/singletons.b6n7ppVR.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/index.Bo7-JXlm.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/entry/app.qKAh-8tw.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/preload-helper.0HuHagjb.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/index.xa2X6v7V.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/nodes/0.DDyQKHBy.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/runtime.bOPOS4G5.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/_commonjsHelpers.5-cIlDoe.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/nodes/2.R9w-bO9C.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/nodes/4.L8Hmv_u7.js">
|
||||
<link rel="modulepreload" href="./_app/immutable/chunks/each.-oqiv04n.js">
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div style="display: contents"> Invalid Path
|
||||
|
||||
<script>
|
||||
{
|
||||
__sveltekit_19afu = {
|
||||
base: new URL(".", location).pathname.slice(0, -1),
|
||||
env: null
|
||||
};
|
||||
|
||||
const element = document.currentScript.parentElement;
|
||||
|
||||
const data = [null,null,null];
|
||||
|
||||
Promise.all([
|
||||
import("./_app/immutable/entry/start.WorQkyMw.js"),
|
||||
import("./_app/immutable/entry/app.qKAh-8tw.js")
|
||||
]).then(([kit, app]) => {
|
||||
kit.start(app, element, {
|
||||
node_ids: [0, 2, 4],
|
||||
data,
|
||||
form: null,
|
||||
error: null
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user