Remove web directory from package
51
comfy/web/assets/BaseViewTemplate-DaGOaycP.js
generated
vendored
@ -1,51 +0,0 @@
|
||||
import { d as defineComponent, T as ref, p as onMounted, bh as isElectron, V as nextTick, bi as electronAPI, o as openBlock, f as createElementBlock, i as withDirectives, v as vShow, j as unref, bj as isNativeWindow, m as createBaseVNode, A as renderSlot, Z as normalizeClass } from "./index-DIgj6hpb.js";
|
||||
const _hoisted_1 = { class: "flex-grow w-full flex items-center justify-center overflow-auto" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "BaseViewTemplate",
|
||||
props: {
|
||||
dark: { type: Boolean, default: false }
|
||||
},
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
const darkTheme = {
|
||||
color: "rgba(0, 0, 0, 0)",
|
||||
symbolColor: "#d4d4d4"
|
||||
};
|
||||
const lightTheme = {
|
||||
color: "rgba(0, 0, 0, 0)",
|
||||
symbolColor: "#171717"
|
||||
};
|
||||
const topMenuRef = ref(null);
|
||||
onMounted(async () => {
|
||||
if (isElectron()) {
|
||||
await nextTick();
|
||||
electronAPI().changeTheme({
|
||||
...props.dark ? darkTheme : lightTheme,
|
||||
height: topMenuRef.value.getBoundingClientRect().height
|
||||
});
|
||||
}
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
class: normalizeClass(["font-sans w-screen h-screen flex flex-col", [
|
||||
props.dark ? "text-neutral-300 bg-neutral-900 dark-theme" : "text-neutral-900 bg-neutral-300"
|
||||
]])
|
||||
}, [
|
||||
withDirectives(createBaseVNode("div", {
|
||||
ref_key: "topMenuRef",
|
||||
ref: topMenuRef,
|
||||
class: "app-drag w-full h-[var(--comfy-topbar-height)]"
|
||||
}, null, 512), [
|
||||
[vShow, unref(isNativeWindow)()]
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
renderSlot(_ctx.$slots, "default")
|
||||
])
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as _
|
||||
};
|
||||
//# sourceMappingURL=BaseViewTemplate-DaGOaycP.js.map
|
||||
1
comfy/web/assets/BaseViewTemplate-DaGOaycP.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"BaseViewTemplate-DaGOaycP.js","sources":["../../src/views/templates/BaseViewTemplate.vue"],"sourcesContent":["<template>\n <div\n class=\"font-sans w-screen h-screen flex flex-col\"\n :class=\"[\n props.dark\n ? 'text-neutral-300 bg-neutral-900 dark-theme'\n : 'text-neutral-900 bg-neutral-300'\n ]\"\n >\n <!-- Virtual top menu for native window (drag handle) -->\n <div\n v-show=\"isNativeWindow()\"\n ref=\"topMenuRef\"\n class=\"app-drag w-full h-[var(--comfy-topbar-height)]\"\n />\n <div\n class=\"flex-grow w-full flex items-center justify-center overflow-auto\"\n >\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref } from 'vue'\n\nimport { electronAPI, isElectron, isNativeWindow } from '@/utils/envUtil'\n\nconst props = withDefaults(\n defineProps<{\n dark?: boolean\n }>(),\n {\n dark: false\n }\n)\n\nconst darkTheme = {\n color: 'rgba(0, 0, 0, 0)',\n symbolColor: '#d4d4d4'\n}\n\nconst lightTheme = {\n color: 'rgba(0, 0, 0, 0)',\n symbolColor: '#171717'\n}\n\nconst topMenuRef = ref<HTMLDivElement | null>(null)\nonMounted(async () => {\n if (isElectron()) {\n await nextTick()\n\n electronAPI().changeTheme({\n ...(props.dark ? darkTheme : lightTheme),\n height: topMenuRef.value.getBoundingClientRect().height\n })\n }\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;AA4BA,UAAM,QAAQ;AASd,UAAM,YAAY;AAAA,MAChB,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAEA,UAAM,aAAa;AAAA,MACjB,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAEM,UAAA,aAAa,IAA2B,IAAI;AAClD,cAAU,YAAY;AACpB,UAAI,cAAc;AAChB,cAAM,SAAS;AAEf,oBAAA,EAAc,YAAY;AAAA,UACxB,GAAI,MAAM,OAAO,YAAY;AAAA,UAC7B,QAAQ,WAAW,MAAM,wBAAwB;AAAA,QAAA,CAClD;AAAA,MAAA;AAAA,IACH,CACD;;;;;;;;;;;;;;;;;;;;;"}
|
||||
1
comfy/web/assets/CREDIT.txt
generated
vendored
@ -1 +0,0 @@
|
||||
Thanks to OpenArt (https://openart.ai) for providing the sorted-custom-node-map data, captured in September 2024.
|
||||
19
comfy/web/assets/DesktopStartView-Dy1mcl-U.js
generated
vendored
@ -1,19 +0,0 @@
|
||||
import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, k as createVNode, j as unref, bN as script } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "DesktopStartView",
|
||||
setup(__props) {
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script), { class: "m-8 w-48 h-48" })
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=DesktopStartView-Dy1mcl-U.js.map
|
||||
1
comfy/web/assets/DesktopStartView-Dy1mcl-U.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"DesktopStartView-Dy1mcl-U.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
||||
20
comfy/web/assets/DesktopUpdateView-CoZUcBzh.css
generated
vendored
@ -1,20 +0,0 @@
|
||||
|
||||
.download-bg[data-v-8d77828d]::before {
|
||||
position: absolute;
|
||||
margin: 0px;
|
||||
color: var(--p-text-muted-color);
|
||||
font-family: 'primeicons';
|
||||
top: -2rem;
|
||||
right: 2rem;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
display: inline-block;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
opacity: 0.02;
|
||||
font-size: min(14rem, 90vw);
|
||||
z-index: 0
|
||||
}
|
||||
59
comfy/web/assets/DesktopUpdateView-dW35wQOR.js
generated
vendored
@ -1,59 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, T as ref, bU as onUnmounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, j as unref, bp as t, k as createVNode, bN as script, l as script$1, bi as electronAPI, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { s as script$2 } from "./index-CE2hpomb.js";
|
||||
import { _ as _sfc_main$1 } from "./TerminalOutputDrawer-B_NZxAv8.js";
|
||||
import { _ as _sfc_main$2 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
import "./index-C_ACzX5-.js";
|
||||
const _hoisted_1 = { class: "h-screen w-screen grid items-center justify-around overflow-y-auto" };
|
||||
const _hoisted_2 = { class: "relative m-8 text-center" };
|
||||
const _hoisted_3 = { class: "download-bg pi-download text-4xl font-bold" };
|
||||
const _hoisted_4 = { class: "m-8" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "DesktopUpdateView",
|
||||
setup(__props) {
|
||||
const electron = electronAPI();
|
||||
const terminalVisible = ref(false);
|
||||
const toggleConsoleDrawer = /* @__PURE__ */ __name(() => {
|
||||
terminalVisible.value = !terminalVisible.value;
|
||||
}, "toggleConsoleDrawer");
|
||||
onUnmounted(() => electron.Validation.dispose());
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(_sfc_main$2, { dark: "" }, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("h1", _hoisted_3, toDisplayString(unref(t)("desktopUpdate.title")), 1),
|
||||
createBaseVNode("div", _hoisted_4, [
|
||||
createBaseVNode("span", null, toDisplayString(unref(t)("desktopUpdate.description")), 1)
|
||||
]),
|
||||
createVNode(unref(script), { class: "m-8 w-48 h-48" }),
|
||||
createVNode(unref(script$1), {
|
||||
style: { "transform": "translateX(-50%)" },
|
||||
class: "fixed bottom-0 left-1/2 my-8",
|
||||
label: unref(t)("maintenance.consoleLogs"),
|
||||
icon: "pi pi-desktop",
|
||||
"icon-pos": "left",
|
||||
severity: "secondary",
|
||||
onClick: toggleConsoleDrawer
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(_sfc_main$1, {
|
||||
modelValue: terminalVisible.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => terminalVisible.value = $event),
|
||||
header: unref(t)("g.terminal"),
|
||||
"default-message": unref(t)("desktopUpdate.terminalDefaultMessage")
|
||||
}, null, 8, ["modelValue", "header", "default-message"])
|
||||
])
|
||||
]),
|
||||
createVNode(unref(script$2))
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const DesktopUpdateView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8d77828d"]]);
|
||||
export {
|
||||
DesktopUpdateView as default
|
||||
};
|
||||
//# sourceMappingURL=DesktopUpdateView-dW35wQOR.js.map
|
||||
1
comfy/web/assets/DesktopUpdateView-dW35wQOR.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"DesktopUpdateView-dW35wQOR.js","sources":["../../src/views/DesktopUpdateView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark>\n <div\n class=\"h-screen w-screen grid items-center justify-around overflow-y-auto\"\n >\n <div class=\"relative m-8 text-center\">\n <!-- Header -->\n <h1 class=\"download-bg pi-download text-4xl font-bold\">\n {{ t('desktopUpdate.title') }}\n </h1>\n\n <div class=\"m-8\">\n <span>{{ t('desktopUpdate.description') }}</span>\n </div>\n\n <ProgressSpinner class=\"m-8 w-48 h-48\" />\n\n <!-- Console button -->\n <Button\n style=\"transform: translateX(-50%)\"\n class=\"fixed bottom-0 left-1/2 my-8\"\n :label=\"t('maintenance.consoleLogs')\"\n icon=\"pi pi-desktop\"\n icon-pos=\"left\"\n severity=\"secondary\"\n @click=\"toggleConsoleDrawer\"\n />\n\n <TerminalOutputDrawer\n v-model=\"terminalVisible\"\n :header=\"t('g.terminal')\"\n :default-message=\"t('desktopUpdate.terminalDefaultMessage')\"\n />\n </div>\n </div>\n <Toast />\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport ProgressSpinner from 'primevue/progressspinner'\nimport Toast from 'primevue/toast'\nimport { onUnmounted, ref } from 'vue'\n\nimport TerminalOutputDrawer from '@/components/maintenance/TerminalOutputDrawer.vue'\nimport { t } from '@/i18n'\nimport { electronAPI } from '@/utils/envUtil'\n\nimport BaseViewTemplate from './templates/BaseViewTemplate.vue'\n\nconst electron = electronAPI()\n\nconst terminalVisible = ref(false)\n\nconst toggleConsoleDrawer = () => {\n terminalVisible.value = !terminalVisible.value\n}\n\nonUnmounted(() => electron.Validation.dispose())\n</script>\n\n<style scoped>\n.download-bg::before {\n @apply m-0 absolute text-muted;\n font-family: 'primeicons';\n top: -2rem;\n right: 2rem;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n display: inline-block;\n -webkit-font-smoothing: antialiased;\n opacity: 0.02;\n font-size: min(14rem, 90vw);\n z-index: 0;\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAmDA,UAAM,WAAW,YAAY;AAEvB,UAAA,kBAAkB,IAAI,KAAK;AAEjC,UAAM,sBAAsB,6BAAM;AAChB,sBAAA,QAAQ,CAAC,gBAAgB;AAAA,IAC3C,GAF4B;AAI5B,gBAAY,MAAM,SAAS,WAAW,QAAA,CAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
58
comfy/web/assets/DownloadGitView-La5U0bHp.js
generated
vendored
@ -1,58 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, br as useRouter } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
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_2 = { class: "mt-24 text-4xl font-bold text-red-500" };
|
||||
const _hoisted_3 = { class: "space-y-4" };
|
||||
const _hoisted_4 = { class: "text-xl" };
|
||||
const _hoisted_5 = { class: "text-xl" };
|
||||
const _hoisted_6 = { class: "text-m" };
|
||||
const _hoisted_7 = { class: "flex gap-4 flex-row-reverse" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "DownloadGitView",
|
||||
setup(__props) {
|
||||
const openGitDownloads = /* @__PURE__ */ __name(() => {
|
||||
window.open("https://git-scm.com/downloads/", "_blank");
|
||||
}, "openGitDownloads");
|
||||
const skipGit = /* @__PURE__ */ __name(() => {
|
||||
console.warn("pushing");
|
||||
const router = useRouter();
|
||||
router.push("install");
|
||||
}, "skipGit");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(_sfc_main$1, null, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("downloadGit.title")), 1),
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.message")), 1),
|
||||
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("downloadGit.instructions")), 1),
|
||||
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.warning")), 1)
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_7, [
|
||||
createVNode(unref(script), {
|
||||
label: _ctx.$t("downloadGit.gitWebsite"),
|
||||
icon: "pi pi-external-link",
|
||||
"icon-pos": "right",
|
||||
onClick: openGitDownloads,
|
||||
severity: "primary"
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(unref(script), {
|
||||
label: _ctx.$t("downloadGit.skip"),
|
||||
icon: "pi pi-exclamation-triangle",
|
||||
onClick: skipGit,
|
||||
severity: "secondary"
|
||||
}, null, 8, ["label"])
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=DownloadGitView-La5U0bHp.js.map
|
||||
1
comfy/web/assets/DownloadGitView-La5U0bHp.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"DownloadGitView-La5U0bHp.js","sources":["../../src/views/DownloadGitView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate>\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 </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\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":";;;;;;;;;;;;;;AAiDA,UAAM,mBAAmB,6BAAM;AACtB,aAAA,KAAK,kCAAkC,QAAQ;AAAA,IACxD,GAFyB;AAIzB,UAAM,UAAU,6BAAM;AACpB,cAAQ,KAAK,SAAS;AACtB,YAAM,SAAS,UAAU;AACzB,aAAO,KAAK,SAAS;AAAA,IACvB,GAJgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
182
comfy/web/assets/ExtensionPanel-CSL3CfyH.js
generated
vendored
@ -1,182 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, T as ref, dI as FilterMatchMode, dN as useExtensionStore, a as useSettingStore, p as onMounted, c as computed, o as openBlock, y as createBlock, z as withCtx, k as createVNode, dJ as SearchBox, j as unref, bw as script, m as createBaseVNode, f as createElementBlock, D as renderList, E as toDisplayString, ak as createTextVNode, F as Fragment, l as script$1, B as createCommentVNode, ah as script$3, aI as script$4, bA as script$5, dK as _sfc_main$1 } from "./index-DIgj6hpb.js";
|
||||
import { g as script$2, h as script$6 } from "./index-Czd3J-KM.js";
|
||||
import "./index-D8hjiWMw.js";
|
||||
const _hoisted_1 = { class: "flex justify-end" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "ExtensionPanel",
|
||||
setup(__props) {
|
||||
const filters = ref({
|
||||
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
||||
});
|
||||
const extensionStore = useExtensionStore();
|
||||
const settingStore = useSettingStore();
|
||||
const editingEnabledExtensions = ref({});
|
||||
onMounted(() => {
|
||||
extensionStore.extensions.forEach((ext) => {
|
||||
editingEnabledExtensions.value[ext.name] = extensionStore.isExtensionEnabled(ext.name);
|
||||
});
|
||||
});
|
||||
const changedExtensions = computed(() => {
|
||||
return extensionStore.extensions.filter(
|
||||
(ext) => editingEnabledExtensions.value[ext.name] !== extensionStore.isExtensionEnabled(ext.name)
|
||||
);
|
||||
});
|
||||
const hasChanges = computed(() => {
|
||||
return changedExtensions.value.length > 0;
|
||||
});
|
||||
const updateExtensionStatus = /* @__PURE__ */ __name(() => {
|
||||
const editingDisabledExtensionNames = Object.entries(
|
||||
editingEnabledExtensions.value
|
||||
).filter(([_, enabled]) => !enabled).map(([name]) => name);
|
||||
settingStore.set("Comfy.Extension.Disabled", [
|
||||
...extensionStore.inactiveDisabledExtensionNames,
|
||||
...editingDisabledExtensionNames
|
||||
]);
|
||||
}, "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(() => {
|
||||
window.location.reload();
|
||||
}, "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 openBlock(), createBlock(_sfc_main$1, {
|
||||
value: "Extension",
|
||||
class: "extension-panel"
|
||||
}, {
|
||||
header: withCtx(() => [
|
||||
createVNode(SearchBox, {
|
||||
modelValue: filters.value["global"].value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
|
||||
placeholder: _ctx.$t("g.searchExtensions") + "..."
|
||||
}, null, 8, ["modelValue", "placeholder"]),
|
||||
hasChanges.value ? (openBlock(), createBlock(unref(script), {
|
||||
key: 0,
|
||||
severity: "info",
|
||||
"pt:text": "w-full",
|
||||
class: "max-h-96 overflow-y-auto"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("ul", null, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(changedExtensions.value, (ext) => {
|
||||
return openBlock(), createElementBlock("li", {
|
||||
key: ext.name
|
||||
}, [
|
||||
createBaseVNode("span", null, toDisplayString(unref(extensionStore).isExtensionEnabled(ext.name) ? "[-]" : "[+]"), 1),
|
||||
createTextVNode(" " + toDisplayString(ext.name), 1)
|
||||
]);
|
||||
}), 128))
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createVNode(unref(script$1), {
|
||||
label: _ctx.$t("g.reloadToApplyChanges"),
|
||||
onClick: applyChanges,
|
||||
outlined: "",
|
||||
severity: "danger"
|
||||
}, null, 8, ["label"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$6), {
|
||||
value: unref(extensionStore).extensions,
|
||||
stripedRows: "",
|
||||
size: "small",
|
||||
filters: filters.value
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$2), {
|
||||
header: _ctx.$t("g.extensionName"),
|
||||
sortable: "",
|
||||
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: {
|
||||
headerCell: "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) => [
|
||||
createVNode(unref(script$5), {
|
||||
disabled: unref(extensionStore).isExtensionReadOnly(slotProps.data.name),
|
||||
modelValue: editingEnabledExtensions.value[slotProps.data.name],
|
||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"),
|
||||
onChange: updateExtensionStatus
|
||||
}, null, 8, ["disabled", "modelValue", "onUpdate:modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["value", "filters"])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=ExtensionPanel-CSL3CfyH.js.map
|
||||
1
comfy/web/assets/ExtensionPanel-CSL3CfyH.js.map
generated
vendored
5329
comfy/web/assets/GraphView-J5fY4zmU.js
generated
vendored
1
comfy/web/assets/GraphView-J5fY4zmU.js.map
generated
vendored
404
comfy/web/assets/GraphView-NWS5Ob8A.css
generated
vendored
@ -1,404 +0,0 @@
|
||||
|
||||
.comfy-menu-hamburger[data-v-4c2fbe7d] {
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
display: flex;
|
||||
flex-direction: row
|
||||
}
|
||||
|
||||
[data-v-e50caa15] .p-splitter-gutter {
|
||||
pointer-events: auto;
|
||||
}
|
||||
[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;
|
||||
background-color: var(--p-primary-color);
|
||||
}
|
||||
.side-bar-panel[data-v-e50caa15] {
|
||||
background-color: var(--bg-color);
|
||||
pointer-events: auto;
|
||||
}
|
||||
.bottom-panel[data-v-e50caa15] {
|
||||
background-color: var(--bg-color);
|
||||
pointer-events: auto;
|
||||
}
|
||||
.splitter-overlay[data-v-e50caa15] {
|
||||
pointer-events: none;
|
||||
border-style: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
.splitter-overlay-root[data-v-e50caa15] {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
/* Set it the same as the ComfyUI menu */
|
||||
/* Note: Lite-graph DOM widgets have the same z-index as the node id, so
|
||||
999 should be sufficient to make sure splitter overlays on node's DOM
|
||||
widgets */
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.p-buttongroup-vertical[data-v-27a9500c] {
|
||||
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-27a9500c] {
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.node-tooltip[data-v-f03142eb] {
|
||||
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;
|
||||
}
|
||||
|
||||
.selection-overlay-container[data-v-79be2f2e] > * {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.show-border[data-v-79be2f2e] {
|
||||
border-radius: 0.375rem;
|
||||
border-width: 2px;
|
||||
border-style: dashed;
|
||||
border-color: var(--border-color);
|
||||
}
|
||||
|
||||
.color-picker-container[data-v-665d04c1] {
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
[data-v-665d04c1] .p-togglebutton {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
padding-left: 0.25rem;
|
||||
padding-right: 0.25rem;
|
||||
}
|
||||
|
||||
.selection-toolbox[data-v-5f2fc3fa] {
|
||||
transform: translateX(-50%) translateY(-120%);
|
||||
}
|
||||
|
||||
.group-title-editor.node-title-editor[data-v-4e10cee2] {
|
||||
z-index: 9999;
|
||||
padding: 0.25rem;
|
||||
}
|
||||
[data-v-4e10cee2] .editable-text {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
[data-v-4e10cee2] .editable-text input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
/* Override the default font size */
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
[data-v-186bfdc4] .highlight {
|
||||
background-color: var(--p-primary-color);
|
||||
color: var(--p-primary-contrast-color);
|
||||
font-weight: bold;
|
||||
border-radius: 0.25rem;
|
||||
padding: 0 0.125rem;
|
||||
margin: -0.125rem 0.125rem;
|
||||
}
|
||||
|
||||
.invisible-dialog-root {
|
||||
width: 60%;
|
||||
min-width: 24rem;
|
||||
max-width: 48rem;
|
||||
border: 0 !important;
|
||||
background-color: transparent !important;
|
||||
margin-top: 25vh;
|
||||
margin-left: 400px;
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
.invisible-dialog-root {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
.node-search-box-dialog-mask {
|
||||
align-items: flex-start !important;
|
||||
}
|
||||
|
||||
.side-bar-button-icon {
|
||||
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-6ab4daa6] {
|
||||
width: var(--sidebar-width);
|
||||
height: var(--sidebar-width);
|
||||
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);
|
||||
}
|
||||
|
||||
.side-tool-bar-container[data-v-04875455] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
width: var(--sidebar-width);
|
||||
height: 100%;
|
||||
|
||||
background-color: var(--comfy-menu-secondary-bg);
|
||||
color: var(--fg-color);
|
||||
box-shadow: var(--bar-shadow);
|
||||
|
||||
--sidebar-width: 4rem;
|
||||
--sidebar-icon-size: 1.5rem;
|
||||
}
|
||||
.side-tool-bar-container.small-sidebar[data-v-04875455] {
|
||||
--sidebar-width: 2.5rem;
|
||||
--sidebar-icon-size: 1rem;
|
||||
}
|
||||
.side-tool-bar-end[data-v-04875455] {
|
||||
align-self: flex-end;
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
.status-indicator[data-v-fd6ae3af] {
|
||||
position: absolute;
|
||||
font-weight: 700;
|
||||
font-size: 1.5rem;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%)
|
||||
}
|
||||
|
||||
[data-v-54fadc45] .p-togglebutton {
|
||||
position: relative;
|
||||
flex-shrink: 0;
|
||||
border-radius: 0px;
|
||||
border-width: 0px;
|
||||
border-right-width: 1px;
|
||||
border-style: solid;
|
||||
background-color: transparent;
|
||||
padding: 0px;
|
||||
border-right-color: var(--border-color)
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton::before {
|
||||
display: none
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton:first-child {
|
||||
border-left-width: 1px;
|
||||
border-style: solid;
|
||||
border-left-color: var(--border-color)
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton:not(:first-child) {
|
||||
border-left-width: 0px
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton.p-togglebutton-checked {
|
||||
height: 100%;
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
border-bottom-color: var(--p-button-text-primary-color)
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton:not(.p-togglebutton-checked) {
|
||||
opacity: 0.75
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton-checked .close-button,[data-v-54fadc45] .p-togglebutton:hover .close-button {
|
||||
visibility: visible
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton:hover .status-indicator {
|
||||
display: none
|
||||
}
|
||||
[data-v-54fadc45] .p-togglebutton .close-button {
|
||||
visibility: hidden
|
||||
}
|
||||
[data-v-54fadc45] .p-scrollpanel-content {
|
||||
height: 100%
|
||||
}
|
||||
|
||||
/* Scrollbar half opacity to avoid blocking the active tab bottom border */
|
||||
[data-v-54fadc45] .p-scrollpanel:hover .p-scrollpanel-bar,[data-v-54fadc45] .p-scrollpanel:active .p-scrollpanel-bar {
|
||||
opacity: 0.5
|
||||
}
|
||||
[data-v-54fadc45] .p-selectbutton {
|
||||
height: 100%;
|
||||
border-radius: 0px
|
||||
}
|
||||
|
||||
[data-v-6ab68035] .workflow-tabs {
|
||||
background-color: var(--comfy-menu-bg);
|
||||
}
|
||||
|
||||
[data-v-2dc25459] .p-inputtext {
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.comfyui-queue-button[data-v-4579e2ce] .p-splitbutton-dropdown {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.actionbar[data-v-ebd56d51] {
|
||||
pointer-events: all;
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
}
|
||||
.actionbar.is-docked[data-v-ebd56d51] {
|
||||
position: static;
|
||||
border-style: none;
|
||||
background-color: transparent;
|
||||
padding: 0px;
|
||||
}
|
||||
.actionbar.is-dragging[data-v-ebd56d51] {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
[data-v-ebd56d51] .p-panel-content {
|
||||
padding: 0.25rem;
|
||||
}
|
||||
.is-docked[data-v-ebd56d51] .p-panel-content {
|
||||
padding: 0px;
|
||||
}
|
||||
[data-v-ebd56d51] .p-panel-header {
|
||||
display: none;
|
||||
}
|
||||
.drag-handle[data-v-ebd56d51] {
|
||||
height: -moz-max-content;
|
||||
height: max-content;
|
||||
width: 0.75rem;
|
||||
}
|
||||
|
||||
[data-v-6a9cf415] .p-menubar-submenu.dropdown-direction-up {
|
||||
top: auto;
|
||||
bottom: 100%;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
.keybinding-tag[data-v-6a9cf415] {
|
||||
background: var(--p-content-hover-background);
|
||||
border-color: var(--p-content-border-color);
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.comfyui-menu[data-v-99f99a6b] {
|
||||
width: 100vw;
|
||||
height: var(--comfy-topbar-height);
|
||||
background: var(--comfy-menu-bg);
|
||||
color: var(--fg-color);
|
||||
box-shadow: var(--bar-shadow);
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-size: 0.8em;
|
||||
box-sizing: border-box;
|
||||
z-index: 1000;
|
||||
order: 0;
|
||||
grid-column: 1/-1;
|
||||
}
|
||||
.comfyui-menu.dropzone[data-v-99f99a6b] {
|
||||
background: var(--p-highlight-background);
|
||||
}
|
||||
.comfyui-menu.dropzone-active[data-v-99f99a6b] {
|
||||
background: var(--p-highlight-background-focus);
|
||||
}
|
||||
[data-v-99f99a6b] .p-menubar-item-label {
|
||||
line-height: revert;
|
||||
}
|
||||
.comfyui-logo[data-v-99f99a6b] {
|
||||
font-size: 1.2em;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.comfyui-body[data-v-e89d9273] {
|
||||
grid-template-columns: auto 1fr auto;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
}
|
||||
|
||||
/**
|
||||
+------------------+------------------+------------------+
|
||||
| |
|
||||
| .comfyui-body- |
|
||||
| top |
|
||||
| (spans all cols) |
|
||||
| |
|
||||
+------------------+------------------+------------------+
|
||||
| | | |
|
||||
| .comfyui-body- | #graph-canvas | .comfyui-body- |
|
||||
| left | | right |
|
||||
| | | |
|
||||
| | | |
|
||||
+------------------+------------------+------------------+
|
||||
| |
|
||||
| .comfyui-body- |
|
||||
| bottom |
|
||||
| (spans all cols) |
|
||||
| |
|
||||
+------------------+------------------+------------------+
|
||||
*/
|
||||
.comfyui-body-top[data-v-e89d9273] {
|
||||
order: -5;
|
||||
/* Span across all columns */
|
||||
grid-column: 1/-1;
|
||||
/* Position at the first row */
|
||||
grid-row: 1;
|
||||
/* Top menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */
|
||||
/* Top menu bar z-index needs to be higher than bottom menu bar z-index as by default
|
||||
pysssss's image feed is located at body-bottom, and it can overlap with the queue button, which
|
||||
is located in body-top. */
|
||||
z-index: 1001;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.comfyui-body-left[data-v-e89d9273] {
|
||||
order: -4;
|
||||
/* Position in the first column */
|
||||
grid-column: 1;
|
||||
/* Position below the top element */
|
||||
grid-row: 2;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
}
|
||||
.graph-canvas-container[data-v-e89d9273] {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
order: -3;
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.comfyui-body-right[data-v-e89d9273] {
|
||||
order: -2;
|
||||
z-index: 10;
|
||||
grid-column: 3;
|
||||
grid-row: 2;
|
||||
}
|
||||
.comfyui-body-bottom[data-v-e89d9273] {
|
||||
order: 4;
|
||||
/* Span across all columns */
|
||||
grid-column: 1/-1;
|
||||
grid-row: 3;
|
||||
/* Bottom menu bar dropdown needs to be above of graph canvas splitter overlay which is z-index: 999 */
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
971
comfy/web/assets/InstallView-BwawagSr.js
generated
vendored
@ -1,971 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, T as ref, bz as useModel, o as openBlock, f as createElementBlock, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, bA as script, bu as script$1, aD as withModifiers, z as withCtx, ao as script$2, I as useI18n, c as computed, Z as normalizeClass, B as createCommentVNode, ah as script$3, ak as createTextVNode, bi as electronAPI, _ as _export_sfc, p as onMounted, r as resolveDirective, bt as script$4, i as withDirectives, bB as script$5, bC as script$6, l as script$7, y as createBlock, bw as script$8, bD as MigrationItems, w as watchEffect, F as Fragment, D as renderList, bE as script$9, bF as mergeModels, bG as ValidationState, X as normalizeI18nKey, N as watch, bH as checkMirrorReachable, bI as _sfc_main$7, bJ as isInChina, bK as mergeValidationStates, bp as t, a8 as script$a, bL as CUDA_TORCH_URL, bM as NIGHTLY_CPU_TORCH_URL, br as useRouter, at as toRaw } from "./index-DIgj6hpb.js";
|
||||
import { s as script$b, a as script$c, b as script$d, c as script$e, d as script$f } from "./index-BKScv1mm.js";
|
||||
import { P as PYTHON_MIRROR, a as PYPI_MIRROR } from "./uvMirrors-B-HKMf6X.js";
|
||||
import { _ as _sfc_main$8 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
const _hoisted_1$5 = { class: "flex flex-col gap-6 w-[600px]" };
|
||||
const _hoisted_2$5 = { class: "flex flex-col gap-4" };
|
||||
const _hoisted_3$5 = { class: "text-2xl font-semibold text-neutral-100" };
|
||||
const _hoisted_4$5 = { class: "text-neutral-400 my-0" };
|
||||
const _hoisted_5$3 = { class: "flex flex-col bg-neutral-800 p-4 rounded-lg" };
|
||||
const _hoisted_6$3 = { class: "flex items-center gap-4" };
|
||||
const _hoisted_7$3 = { class: "flex-1" };
|
||||
const _hoisted_8$3 = { class: "text-lg font-medium text-neutral-100" };
|
||||
const _hoisted_9$3 = { class: "text-sm text-neutral-400 mt-1" };
|
||||
const _hoisted_10$3 = { class: "flex items-center gap-4" };
|
||||
const _hoisted_11$3 = { class: "flex-1" };
|
||||
const _hoisted_12$3 = { class: "text-lg font-medium text-neutral-100" };
|
||||
const _hoisted_13$1 = { class: "text-sm text-neutral-400 mt-1" };
|
||||
const _hoisted_14$1 = { class: "text-neutral-300" };
|
||||
const _hoisted_15 = { class: "font-medium mb-2" };
|
||||
const _hoisted_16 = { class: "list-disc pl-6 space-y-1" };
|
||||
const _hoisted_17 = { class: "font-medium mt-4 mb-2" };
|
||||
const _hoisted_18 = { class: "list-disc pl-6 space-y-1" };
|
||||
const _hoisted_19 = { class: "mt-4" };
|
||||
const _hoisted_20 = {
|
||||
href: "https://comfy.org/privacy",
|
||||
target: "_blank",
|
||||
class: "text-blue-400 hover:text-blue-300 underline"
|
||||
};
|
||||
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
||||
__name: "DesktopSettingsConfiguration",
|
||||
props: {
|
||||
"autoUpdate": { type: Boolean, ...{ required: true } },
|
||||
"autoUpdateModifiers": {},
|
||||
"allowMetrics": { type: Boolean, ...{ required: true } },
|
||||
"allowMetricsModifiers": {}
|
||||
},
|
||||
emits: ["update:autoUpdate", "update:allowMetrics"],
|
||||
setup(__props) {
|
||||
const showDialog = ref(false);
|
||||
const autoUpdate = useModel(__props, "autoUpdate");
|
||||
const allowMetrics = useModel(__props, "allowMetrics");
|
||||
const showMetricsInfo = /* @__PURE__ */ __name(() => {
|
||||
showDialog.value = true;
|
||||
}, "showMetricsInfo");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$5, [
|
||||
createBaseVNode("div", _hoisted_2$5, [
|
||||
createBaseVNode("h2", _hoisted_3$5, toDisplayString(_ctx.$t("install.desktopAppSettings")), 1),
|
||||
createBaseVNode("p", _hoisted_4$5, toDisplayString(_ctx.$t("install.desktopAppSettingsDescription")), 1)
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_5$3, [
|
||||
createBaseVNode("div", _hoisted_6$3, [
|
||||
createBaseVNode("div", _hoisted_7$3, [
|
||||
createBaseVNode("h3", _hoisted_8$3, toDisplayString(_ctx.$t("install.settings.autoUpdate")), 1),
|
||||
createBaseVNode("p", _hoisted_9$3, toDisplayString(_ctx.$t("install.settings.autoUpdateDescription")), 1)
|
||||
]),
|
||||
createVNode(unref(script), {
|
||||
modelValue: autoUpdate.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => autoUpdate.value = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
createVNode(unref(script$1)),
|
||||
createBaseVNode("div", _hoisted_10$3, [
|
||||
createBaseVNode("div", _hoisted_11$3, [
|
||||
createBaseVNode("h3", _hoisted_12$3, toDisplayString(_ctx.$t("install.settings.allowMetrics")), 1),
|
||||
createBaseVNode("p", _hoisted_13$1, toDisplayString(_ctx.$t("install.settings.allowMetricsDescription")), 1),
|
||||
createBaseVNode("a", {
|
||||
href: "#",
|
||||
class: "text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block",
|
||||
onClick: withModifiers(showMetricsInfo, ["prevent"])
|
||||
}, toDisplayString(_ctx.$t("install.settings.learnMoreAboutData")), 1)
|
||||
]),
|
||||
createVNode(unref(script), {
|
||||
modelValue: allowMetrics.value,
|
||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => allowMetrics.value = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
])
|
||||
]),
|
||||
createVNode(unref(script$2), {
|
||||
visible: showDialog.value,
|
||||
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => showDialog.value = $event),
|
||||
modal: "",
|
||||
header: _ctx.$t("install.settings.dataCollectionDialog.title")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_14$1, [
|
||||
createBaseVNode("h4", _hoisted_15, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeCollect")), 1),
|
||||
createBaseVNode("ul", _hoisted_16, [
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.errorReports")), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.systemInfo")), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
||||
"install.settings.dataCollectionDialog.collect.userJourneyEvents"
|
||||
)), 1)
|
||||
]),
|
||||
createBaseVNode("h4", _hoisted_17, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeDoNotCollect")), 1),
|
||||
createBaseVNode("ul", _hoisted_18, [
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
||||
"install.settings.dataCollectionDialog.doNotCollect.personalInformation"
|
||||
)), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
||||
"install.settings.dataCollectionDialog.doNotCollect.workflowContents"
|
||||
)), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
||||
"install.settings.dataCollectionDialog.doNotCollect.fileSystemInformation"
|
||||
)), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t(
|
||||
"install.settings.dataCollectionDialog.doNotCollect.customNodeConfigurations"
|
||||
)), 1)
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_19, [
|
||||
createBaseVNode("a", _hoisted_20, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.viewFullPolicy")), 1)
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["visible", "header"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _imports_0 = "" + new URL("images/nvidia-logo.svg", import.meta.url).href;
|
||||
const _imports_1 = "" + new URL("images/apple-mps-logo.png", import.meta.url).href;
|
||||
const _imports_2 = "" + new URL("images/manual-configuration.svg", import.meta.url).href;
|
||||
const _hoisted_1$4 = { class: "flex flex-col gap-6 w-[600px] h-[30rem] select-none" };
|
||||
const _hoisted_2$4 = { class: "grow flex flex-col gap-4 text-neutral-300" };
|
||||
const _hoisted_3$4 = { class: "text-2xl font-semibold text-neutral-100" };
|
||||
const _hoisted_4$4 = { class: "m-1 text-neutral-400" };
|
||||
const _hoisted_5$2 = {
|
||||
key: 0,
|
||||
class: "m-1"
|
||||
};
|
||||
const _hoisted_6$2 = {
|
||||
key: 1,
|
||||
class: "m-1"
|
||||
};
|
||||
const _hoisted_7$2 = {
|
||||
key: 2,
|
||||
class: "text-neutral-300"
|
||||
};
|
||||
const _hoisted_8$2 = { class: "m-1" };
|
||||
const _hoisted_9$2 = { key: 3 };
|
||||
const _hoisted_10$2 = { class: "m-1" };
|
||||
const _hoisted_11$2 = { class: "m-1" };
|
||||
const _hoisted_12$2 = {
|
||||
for: "cpu-mode",
|
||||
class: "select-none"
|
||||
};
|
||||
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
||||
__name: "GpuPicker",
|
||||
props: {
|
||||
"device": {
|
||||
required: true
|
||||
},
|
||||
"deviceModifiers": {}
|
||||
},
|
||||
emits: ["update:device"],
|
||||
setup(__props) {
|
||||
const { t: t2 } = useI18n();
|
||||
const cpuMode = computed({
|
||||
get: /* @__PURE__ */ __name(() => selected.value === "cpu", "get"),
|
||||
set: /* @__PURE__ */ __name((value) => {
|
||||
selected.value = value ? "cpu" : null;
|
||||
}, "set")
|
||||
});
|
||||
const selected = useModel(__props, "device");
|
||||
const electron = electronAPI();
|
||||
const platform = electron.getPlatform();
|
||||
const pickGpu = /* @__PURE__ */ __name((value) => {
|
||||
const newValue = selected.value === value ? null : value;
|
||||
selected.value = newValue;
|
||||
}, "pickGpu");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$4, [
|
||||
createBaseVNode("div", _hoisted_2$4, [
|
||||
createBaseVNode("h2", _hoisted_3$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpu")), 1),
|
||||
createBaseVNode("p", _hoisted_4$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpuDescription")) + ": ", 1),
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["flex gap-2 text-center transition-opacity", { selected: selected.value }])
|
||||
}, [
|
||||
unref(platform) !== "darwin" ? (openBlock(), createElementBlock("div", {
|
||||
key: 0,
|
||||
class: normalizeClass(["gpu-button", { selected: selected.value === "nvidia" }]),
|
||||
role: "button",
|
||||
onClick: _cache[0] || (_cache[0] = ($event) => pickGpu("nvidia"))
|
||||
}, _cache[4] || (_cache[4] = [
|
||||
createBaseVNode("img", {
|
||||
class: "m-12",
|
||||
alt: "NVIDIA logo",
|
||||
width: "196",
|
||||
height: "32",
|
||||
src: _imports_0
|
||||
}, null, -1)
|
||||
]), 2)) : createCommentVNode("", true),
|
||||
unref(platform) === "darwin" ? (openBlock(), createElementBlock("div", {
|
||||
key: 1,
|
||||
class: normalizeClass(["gpu-button", { selected: selected.value === "mps" }]),
|
||||
role: "button",
|
||||
onClick: _cache[1] || (_cache[1] = ($event) => pickGpu("mps"))
|
||||
}, _cache[5] || (_cache[5] = [
|
||||
createBaseVNode("img", {
|
||||
class: "rounded-lg hover-brighten",
|
||||
alt: "Apple Metal Performance Shaders Logo",
|
||||
width: "292",
|
||||
ratio: "",
|
||||
src: _imports_1
|
||||
}, null, -1)
|
||||
]), 2)) : createCommentVNode("", true),
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["gpu-button", { selected: selected.value === "unsupported" }]),
|
||||
role: "button",
|
||||
onClick: _cache[2] || (_cache[2] = ($event) => pickGpu("unsupported"))
|
||||
}, _cache[6] || (_cache[6] = [
|
||||
createBaseVNode("img", {
|
||||
class: "m-12",
|
||||
alt: "Manual configuration",
|
||||
width: "196",
|
||||
src: _imports_2
|
||||
}, null, -1)
|
||||
]), 2)
|
||||
], 2),
|
||||
selected.value === "nvidia" ? (openBlock(), createElementBlock("p", _hoisted_5$2, [
|
||||
createVNode(unref(script$3), {
|
||||
icon: "pi pi-check",
|
||||
severity: "success",
|
||||
value: "CUDA"
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.nvidiaDescription")), 1)
|
||||
])) : createCommentVNode("", true),
|
||||
selected.value === "mps" ? (openBlock(), createElementBlock("p", _hoisted_6$2, [
|
||||
createVNode(unref(script$3), {
|
||||
icon: "pi pi-check",
|
||||
severity: "success",
|
||||
value: "MPS"
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.mpsDescription")), 1)
|
||||
])) : createCommentVNode("", true),
|
||||
selected.value === "unsupported" ? (openBlock(), createElementBlock("div", _hoisted_7$2, [
|
||||
createBaseVNode("p", _hoisted_8$2, [
|
||||
createVNode(unref(script$3), {
|
||||
icon: "pi pi-exclamation-triangle",
|
||||
severity: "warn",
|
||||
value: unref(t2)("icon.exclamation-triangle")
|
||||
}, null, 8, ["value"]),
|
||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.customSkipsPython")), 1)
|
||||
]),
|
||||
createBaseVNode("ul", null, [
|
||||
createBaseVNode("li", null, [
|
||||
createBaseVNode("strong", null, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
|
||||
]),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1),
|
||||
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customMayNotWork")), 1)
|
||||
])
|
||||
])) : createCommentVNode("", true),
|
||||
selected.value === "cpu" ? (openBlock(), createElementBlock("div", _hoisted_9$2, [
|
||||
createBaseVNode("p", _hoisted_10$2, [
|
||||
createVNode(unref(script$3), {
|
||||
icon: "pi pi-exclamation-triangle",
|
||||
severity: "warn",
|
||||
value: unref(t2)("icon.exclamation-triangle")
|
||||
}, null, 8, ["value"]),
|
||||
createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription")), 1)
|
||||
]),
|
||||
createBaseVNode("p", _hoisted_11$2, toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription2")), 1)
|
||||
])) : createCommentVNode("", true)
|
||||
]),
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["transition-opacity flex gap-3 h-0", {
|
||||
"opacity-40": selected.value && selected.value !== "cpu"
|
||||
}])
|
||||
}, [
|
||||
createVNode(unref(script), {
|
||||
modelValue: cpuMode.value,
|
||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => cpuMode.value = $event),
|
||||
inputId: "cpu-mode",
|
||||
class: "-translate-y-40"
|
||||
}, null, 8, ["modelValue"]),
|
||||
createBaseVNode("label", _hoisted_12$2, toDisplayString(_ctx.$t("install.gpuSelection.enableCpuMode")), 1)
|
||||
], 2)
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const GpuPicker = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-79125ff6"]]);
|
||||
const _hoisted_1$3 = { class: "flex flex-col gap-6 w-[600px]" };
|
||||
const _hoisted_2$3 = { class: "flex flex-col gap-4" };
|
||||
const _hoisted_3$3 = { class: "text-2xl font-semibold text-neutral-100" };
|
||||
const _hoisted_4$3 = { class: "text-neutral-400 my-0" };
|
||||
const _hoisted_5$1 = { class: "flex gap-2" };
|
||||
const _hoisted_6$1 = { class: "bg-neutral-800 p-4 rounded-lg" };
|
||||
const _hoisted_7$1 = { class: "text-lg font-medium mt-0 mb-3 text-neutral-100" };
|
||||
const _hoisted_8$1 = { class: "flex flex-col gap-2" };
|
||||
const _hoisted_9$1 = { class: "flex items-center gap-2" };
|
||||
const _hoisted_10$1 = { class: "text-neutral-200" };
|
||||
const _hoisted_11$1 = { class: "pi pi-info-circle" };
|
||||
const _hoisted_12$1 = { class: "flex items-center gap-2" };
|
||||
const _hoisted_13 = { class: "text-neutral-200" };
|
||||
const _hoisted_14 = { class: "pi pi-info-circle" };
|
||||
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
||||
__name: "InstallLocationPicker",
|
||||
props: {
|
||||
"installPath": { required: true },
|
||||
"installPathModifiers": {},
|
||||
"pathError": { required: true },
|
||||
"pathErrorModifiers": {}
|
||||
},
|
||||
emits: ["update:installPath", "update:pathError"],
|
||||
setup(__props) {
|
||||
const { t: t2 } = useI18n();
|
||||
const installPath = useModel(__props, "installPath");
|
||||
const pathError = useModel(__props, "pathError");
|
||||
const pathExists = ref(false);
|
||||
const appData = ref("");
|
||||
const appPath = ref("");
|
||||
const inputTouched = ref(false);
|
||||
const electron = electronAPI();
|
||||
onMounted(async () => {
|
||||
const paths = await electron.getSystemPaths();
|
||||
appData.value = paths.appData;
|
||||
appPath.value = paths.appPath;
|
||||
installPath.value = paths.defaultInstallPath;
|
||||
await validatePath(paths.defaultInstallPath);
|
||||
});
|
||||
const validatePath = /* @__PURE__ */ __name(async (path) => {
|
||||
try {
|
||||
pathError.value = "";
|
||||
pathExists.value = false;
|
||||
const validation = await electron.validateInstallPath(path);
|
||||
if (!validation.isValid) {
|
||||
const errors = [];
|
||||
if (validation.cannotWrite) errors.push(t2("install.cannotWrite"));
|
||||
if (validation.freeSpace < validation.requiredSpace) {
|
||||
const requiredGB = validation.requiredSpace / 1024 / 1024 / 1024;
|
||||
errors.push(`${t2("install.insufficientFreeSpace")}: ${requiredGB} GB`);
|
||||
}
|
||||
if (validation.parentMissing) errors.push(t2("install.parentMissing"));
|
||||
if (validation.error)
|
||||
errors.push(`${t2("install.unhandledError")}: ${validation.error}`);
|
||||
pathError.value = errors.join("\n");
|
||||
}
|
||||
if (validation.exists) pathExists.value = true;
|
||||
} catch (error) {
|
||||
pathError.value = t2("install.pathValidationFailed");
|
||||
}
|
||||
}, "validatePath");
|
||||
const browsePath = /* @__PURE__ */ __name(async () => {
|
||||
try {
|
||||
const result = await electron.showDirectoryPicker();
|
||||
if (result) {
|
||||
installPath.value = result;
|
||||
await validatePath(result);
|
||||
}
|
||||
} catch (error) {
|
||||
pathError.value = t2("install.failedToSelectDirectory");
|
||||
}
|
||||
}, "browsePath");
|
||||
const onFocus = /* @__PURE__ */ __name(() => {
|
||||
if (!inputTouched.value) {
|
||||
inputTouched.value = true;
|
||||
return;
|
||||
}
|
||||
validatePath(installPath.value);
|
||||
}, "onFocus");
|
||||
return (_ctx, _cache) => {
|
||||
const _directive_tooltip = resolveDirective("tooltip");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$3, [
|
||||
createBaseVNode("div", _hoisted_2$3, [
|
||||
createBaseVNode("h2", _hoisted_3$3, toDisplayString(_ctx.$t("install.chooseInstallationLocation")), 1),
|
||||
createBaseVNode("p", _hoisted_4$3, toDisplayString(_ctx.$t("install.installLocationDescription")), 1),
|
||||
createBaseVNode("div", _hoisted_5$1, [
|
||||
createVNode(unref(script$6), { class: "flex-1" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$4), {
|
||||
modelValue: installPath.value,
|
||||
"onUpdate:modelValue": [
|
||||
_cache[0] || (_cache[0] = ($event) => installPath.value = $event),
|
||||
validatePath
|
||||
],
|
||||
class: normalizeClass(["w-full", { "p-invalid": pathError.value }]),
|
||||
onFocus
|
||||
}, null, 8, ["modelValue", "class"]),
|
||||
withDirectives(createVNode(unref(script$5), { class: "pi pi-info-circle" }, null, 512), [
|
||||
[
|
||||
_directive_tooltip,
|
||||
_ctx.$t("install.installLocationTooltip"),
|
||||
void 0,
|
||||
{ top: true }
|
||||
]
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$7), {
|
||||
icon: "pi pi-folder",
|
||||
onClick: browsePath,
|
||||
class: "w-12"
|
||||
})
|
||||
]),
|
||||
pathError.value ? (openBlock(), createBlock(unref(script$8), {
|
||||
key: 0,
|
||||
severity: "error",
|
||||
class: "whitespace-pre-line"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(pathError.value), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true),
|
||||
pathExists.value ? (openBlock(), createBlock(unref(script$8), {
|
||||
key: 1,
|
||||
severity: "warn"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.pathExists")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true)
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_6$1, [
|
||||
createBaseVNode("h3", _hoisted_7$1, toDisplayString(_ctx.$t("install.systemLocations")), 1),
|
||||
createBaseVNode("div", _hoisted_8$1, [
|
||||
createBaseVNode("div", _hoisted_9$1, [
|
||||
_cache[1] || (_cache[1] = createBaseVNode("i", { class: "pi pi-folder text-neutral-400" }, null, -1)),
|
||||
_cache[2] || (_cache[2] = createBaseVNode("span", { class: "text-neutral-400" }, "App Data:", -1)),
|
||||
createBaseVNode("span", _hoisted_10$1, toDisplayString(appData.value), 1),
|
||||
withDirectives(createBaseVNode("span", _hoisted_11$1, null, 512), [
|
||||
[_directive_tooltip, _ctx.$t("install.appDataLocationTooltip")]
|
||||
])
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_12$1, [
|
||||
_cache[3] || (_cache[3] = createBaseVNode("i", { class: "pi pi-desktop text-neutral-400" }, null, -1)),
|
||||
_cache[4] || (_cache[4] = createBaseVNode("span", { class: "text-neutral-400" }, "App Path:", -1)),
|
||||
createBaseVNode("span", _hoisted_13, toDisplayString(appPath.value), 1),
|
||||
withDirectives(createBaseVNode("span", _hoisted_14, null, 512), [
|
||||
[_directive_tooltip, _ctx.$t("install.appPathLocationTooltip")]
|
||||
])
|
||||
])
|
||||
])
|
||||
])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1$2 = { class: "flex flex-col gap-6 w-[600px]" };
|
||||
const _hoisted_2$2 = { class: "flex flex-col gap-4" };
|
||||
const _hoisted_3$2 = { class: "text-2xl font-semibold text-neutral-100" };
|
||||
const _hoisted_4$2 = { class: "text-neutral-400 my-0" };
|
||||
const _hoisted_5 = { class: "flex gap-2" };
|
||||
const _hoisted_6 = {
|
||||
key: 0,
|
||||
class: "flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg"
|
||||
};
|
||||
const _hoisted_7 = { class: "text-lg mt-0 font-medium text-neutral-100" };
|
||||
const _hoisted_8 = { class: "flex flex-col gap-3" };
|
||||
const _hoisted_9 = ["onClick"];
|
||||
const _hoisted_10 = ["for"];
|
||||
const _hoisted_11 = { class: "text-sm text-neutral-400 my-1" };
|
||||
const _hoisted_12 = {
|
||||
key: 1,
|
||||
class: "text-neutral-400 italic"
|
||||
};
|
||||
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
||||
__name: "MigrationPicker",
|
||||
props: {
|
||||
"sourcePath": { required: false },
|
||||
"sourcePathModifiers": {},
|
||||
"migrationItemIds": {
|
||||
required: false
|
||||
},
|
||||
"migrationItemIdsModifiers": {}
|
||||
},
|
||||
emits: ["update:sourcePath", "update:migrationItemIds"],
|
||||
setup(__props) {
|
||||
const { t: t2 } = useI18n();
|
||||
const electron = electronAPI();
|
||||
const sourcePath = useModel(__props, "sourcePath");
|
||||
const migrationItemIds = useModel(__props, "migrationItemIds");
|
||||
const migrationItems = ref(
|
||||
MigrationItems.map((item) => ({
|
||||
...item,
|
||||
selected: true
|
||||
}))
|
||||
);
|
||||
const pathError = ref("");
|
||||
const isValidSource = computed(
|
||||
() => sourcePath.value !== "" && pathError.value === ""
|
||||
);
|
||||
const validateSource = /* @__PURE__ */ __name(async (sourcePath2) => {
|
||||
if (!sourcePath2) {
|
||||
pathError.value = "";
|
||||
return;
|
||||
}
|
||||
try {
|
||||
pathError.value = "";
|
||||
const validation = await electron.validateComfyUISource(sourcePath2);
|
||||
if (!validation.isValid) pathError.value = validation.error;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
pathError.value = t2("install.pathValidationFailed");
|
||||
}
|
||||
}, "validateSource");
|
||||
const browsePath = /* @__PURE__ */ __name(async () => {
|
||||
try {
|
||||
const result = await electron.showDirectoryPicker();
|
||||
if (result) {
|
||||
sourcePath.value = result;
|
||||
await validateSource(result);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
pathError.value = t2("install.failedToSelectDirectory");
|
||||
}
|
||||
}, "browsePath");
|
||||
watchEffect(() => {
|
||||
migrationItemIds.value = migrationItems.value.filter((item) => item.selected).map((item) => item.id);
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$2, [
|
||||
createBaseVNode("div", _hoisted_2$2, [
|
||||
createBaseVNode("h2", _hoisted_3$2, toDisplayString(_ctx.$t("install.migrateFromExistingInstallation")), 1),
|
||||
createBaseVNode("p", _hoisted_4$2, toDisplayString(_ctx.$t("install.migrationSourcePathDescription")), 1),
|
||||
createBaseVNode("div", _hoisted_5, [
|
||||
createVNode(unref(script$4), {
|
||||
modelValue: sourcePath.value,
|
||||
"onUpdate:modelValue": [
|
||||
_cache[0] || (_cache[0] = ($event) => sourcePath.value = $event),
|
||||
validateSource
|
||||
],
|
||||
placeholder: "Select existing ComfyUI installation (optional)",
|
||||
class: normalizeClass(["flex-1", { "p-invalid": pathError.value }])
|
||||
}, null, 8, ["modelValue", "class"]),
|
||||
createVNode(unref(script$7), {
|
||||
icon: "pi pi-folder",
|
||||
onClick: browsePath,
|
||||
class: "w-12"
|
||||
})
|
||||
]),
|
||||
pathError.value ? (openBlock(), createBlock(unref(script$8), {
|
||||
key: 0,
|
||||
severity: "error"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(pathError.value), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true)
|
||||
]),
|
||||
isValidSource.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
||||
createBaseVNode("h3", _hoisted_7, toDisplayString(_ctx.$t("install.selectItemsToMigrate")), 1),
|
||||
createBaseVNode("div", _hoisted_8, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(migrationItems.value, (item) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
key: item.id,
|
||||
class: "flex items-center gap-3 p-2 hover:bg-neutral-700 rounded",
|
||||
onClick: /* @__PURE__ */ __name(($event) => item.selected = !item.selected, "onClick")
|
||||
}, [
|
||||
createVNode(unref(script$9), {
|
||||
modelValue: item.selected,
|
||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => item.selected = $event, "onUpdate:modelValue"),
|
||||
inputId: item.id,
|
||||
binary: true,
|
||||
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
||||
}, ["stop"]))
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "inputId"]),
|
||||
createBaseVNode("div", null, [
|
||||
createBaseVNode("label", {
|
||||
for: item.id,
|
||||
class: "text-neutral-200 font-medium"
|
||||
}, toDisplayString(item.label), 9, _hoisted_10),
|
||||
createBaseVNode("p", _hoisted_11, toDisplayString(item.description), 1)
|
||||
])
|
||||
], 8, _hoisted_9);
|
||||
}), 128))
|
||||
])
|
||||
])) : (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(_ctx.$t("install.migrationOptional")), 1))
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1$1 = { class: "flex flex-col items-center gap-4" };
|
||||
const _hoisted_2$1 = { class: "w-full" };
|
||||
const _hoisted_3$1 = { class: "text-lg font-medium text-neutral-100" };
|
||||
const _hoisted_4$1 = { class: "text-sm text-neutral-400 mt-1" };
|
||||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||||
__name: "MirrorItem",
|
||||
props: /* @__PURE__ */ mergeModels({
|
||||
item: {}
|
||||
}, {
|
||||
"modelValue": { required: true },
|
||||
"modelModifiers": {}
|
||||
}),
|
||||
emits: /* @__PURE__ */ mergeModels(["state-change"], ["update:modelValue"]),
|
||||
setup(__props, { emit: __emit }) {
|
||||
const emit = __emit;
|
||||
const modelValue = useModel(__props, "modelValue");
|
||||
const validationState = ref(ValidationState.IDLE);
|
||||
const normalizedSettingId = computed(() => {
|
||||
return normalizeI18nKey(__props.item.settingId);
|
||||
});
|
||||
onMounted(() => {
|
||||
modelValue.value = __props.item.mirror;
|
||||
});
|
||||
watch(validationState, (newState) => {
|
||||
emit("state-change", newState);
|
||||
if (newState === ValidationState.INVALID && modelValue.value === __props.item.mirror) {
|
||||
modelValue.value = __props.item.fallbackMirror;
|
||||
}
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$1, [
|
||||
createBaseVNode("div", _hoisted_2$1, [
|
||||
createBaseVNode("h3", _hoisted_3$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.name`)), 1),
|
||||
createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.tooltip`)), 1)
|
||||
]),
|
||||
createVNode(_sfc_main$7, {
|
||||
modelValue: modelValue.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
||||
"validate-url-fn": /* @__PURE__ */ __name((mirror) => unref(checkMirrorReachable)(mirror + (_ctx.item.validationPathSuffix ?? "")), "validate-url-fn"),
|
||||
onStateChange: _cache[1] || (_cache[1] = ($event) => validationState.value = $event)
|
||||
}, null, 8, ["modelValue", "validate-url-fn"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "MirrorsConfiguration",
|
||||
props: /* @__PURE__ */ mergeModels({
|
||||
device: {}
|
||||
}, {
|
||||
"pythonMirror": { required: true },
|
||||
"pythonMirrorModifiers": {},
|
||||
"pypiMirror": { required: true },
|
||||
"pypiMirrorModifiers": {},
|
||||
"torchMirror": { required: true },
|
||||
"torchMirrorModifiers": {}
|
||||
}),
|
||||
emits: ["update:pythonMirror", "update:pypiMirror", "update:torchMirror"],
|
||||
setup(__props) {
|
||||
const showMirrorInputs = ref(false);
|
||||
const pythonMirror = useModel(__props, "pythonMirror");
|
||||
const pypiMirror = useModel(__props, "pypiMirror");
|
||||
const torchMirror = useModel(__props, "torchMirror");
|
||||
const getTorchMirrorItem = /* @__PURE__ */ __name((device) => {
|
||||
const settingId = "Comfy-Desktop.UV.TorchInstallMirror";
|
||||
switch (device) {
|
||||
case "mps":
|
||||
return {
|
||||
settingId,
|
||||
mirror: NIGHTLY_CPU_TORCH_URL,
|
||||
fallbackMirror: NIGHTLY_CPU_TORCH_URL
|
||||
};
|
||||
case "nvidia":
|
||||
return {
|
||||
settingId,
|
||||
mirror: CUDA_TORCH_URL,
|
||||
fallbackMirror: CUDA_TORCH_URL
|
||||
};
|
||||
case "cpu":
|
||||
default:
|
||||
return {
|
||||
settingId,
|
||||
mirror: PYPI_MIRROR.mirror,
|
||||
fallbackMirror: PYPI_MIRROR.fallbackMirror
|
||||
};
|
||||
}
|
||||
}, "getTorchMirrorItem");
|
||||
const userIsInChina = ref(false);
|
||||
onMounted(async () => {
|
||||
userIsInChina.value = await isInChina();
|
||||
});
|
||||
const useFallbackMirror = /* @__PURE__ */ __name((mirror) => ({
|
||||
...mirror,
|
||||
mirror: mirror.fallbackMirror
|
||||
}), "useFallbackMirror");
|
||||
const mirrors = computed(
|
||||
() => [
|
||||
[PYTHON_MIRROR, pythonMirror],
|
||||
[PYPI_MIRROR, pypiMirror],
|
||||
[getTorchMirrorItem(__props.device), torchMirror]
|
||||
].map(([item, modelValue]) => [
|
||||
userIsInChina.value ? useFallbackMirror(item) : item,
|
||||
modelValue
|
||||
])
|
||||
);
|
||||
const validationStates = ref(
|
||||
mirrors.value.map(() => ValidationState.IDLE)
|
||||
);
|
||||
const validationState = computed(() => {
|
||||
return mergeValidationStates(validationStates.value);
|
||||
});
|
||||
const validationStateTooltip = computed(() => {
|
||||
switch (validationState.value) {
|
||||
case ValidationState.INVALID:
|
||||
return t("install.settings.mirrorsUnreachable");
|
||||
case ValidationState.VALID:
|
||||
return t("install.settings.mirrorsReachable");
|
||||
default:
|
||||
return t("install.settings.checkingMirrors");
|
||||
}
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _directive_tooltip = resolveDirective("tooltip");
|
||||
return openBlock(), createBlock(unref(script$a), {
|
||||
header: _ctx.$t("install.settings.mirrorSettings"),
|
||||
toggleable: "",
|
||||
collapsed: !showMirrorInputs.value,
|
||||
"pt:root": "bg-neutral-800 border-none w-[600px]"
|
||||
}, {
|
||||
icons: withCtx(() => [
|
||||
withDirectives(createBaseVNode("i", {
|
||||
class: normalizeClass({
|
||||
"pi pi-spin pi-spinner text-neutral-400": validationState.value === unref(ValidationState).LOADING,
|
||||
"pi pi-check text-green-500": validationState.value === unref(ValidationState).VALID,
|
||||
"pi pi-times text-red-500": validationState.value === unref(ValidationState).INVALID
|
||||
})
|
||||
}, null, 2), [
|
||||
[_directive_tooltip, validationStateTooltip.value]
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(mirrors.value, ([item, modelValue], index) => {
|
||||
return openBlock(), createElementBlock(Fragment, {
|
||||
key: item.settingId + item.mirror
|
||||
}, [
|
||||
index > 0 ? (openBlock(), createBlock(unref(script$1), { key: 0 })) : createCommentVNode("", true),
|
||||
createVNode(_sfc_main$2, {
|
||||
item,
|
||||
modelValue: modelValue.value,
|
||||
"onUpdate:modelValue": /* @__PURE__ */ __name(($event) => modelValue.value = $event, "onUpdate:modelValue"),
|
||||
onStateChange: /* @__PURE__ */ __name(($event) => validationStates.value[index] = $event, "onStateChange")
|
||||
}, null, 8, ["item", "modelValue", "onUpdate:modelValue", "onStateChange"])
|
||||
], 64);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["header", "collapsed"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { class: "flex pt-6 justify-end" };
|
||||
const _hoisted_2 = { class: "flex pt-6 justify-between" };
|
||||
const _hoisted_3 = { class: "flex pt-6 justify-between" };
|
||||
const _hoisted_4 = { class: "flex mt-6 justify-between" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "InstallView",
|
||||
setup(__props) {
|
||||
const device = ref(null);
|
||||
const installPath = ref("");
|
||||
const pathError = ref("");
|
||||
const migrationSourcePath = ref("");
|
||||
const migrationItemIds = ref([]);
|
||||
const autoUpdate = ref(true);
|
||||
const allowMetrics = ref(true);
|
||||
const pythonMirror = ref("");
|
||||
const pypiMirror = ref("");
|
||||
const torchMirror = ref("");
|
||||
const highestStep = ref(0);
|
||||
const handleStepChange = /* @__PURE__ */ __name((value) => {
|
||||
setHighestStep(value);
|
||||
electronAPI().Events.trackEvent("install_stepper_change", {
|
||||
step: value
|
||||
});
|
||||
}, "handleStepChange");
|
||||
const setHighestStep = /* @__PURE__ */ __name((value) => {
|
||||
const int = typeof value === "number" ? value : parseInt(value, 10);
|
||||
if (!isNaN(int) && int > highestStep.value) highestStep.value = int;
|
||||
}, "setHighestStep");
|
||||
const hasError = computed(() => pathError.value !== "");
|
||||
const noGpu = computed(() => typeof device.value !== "string");
|
||||
const electron = electronAPI();
|
||||
const router = useRouter();
|
||||
const install = /* @__PURE__ */ __name(() => {
|
||||
const options = {
|
||||
installPath: installPath.value,
|
||||
autoUpdate: autoUpdate.value,
|
||||
allowMetrics: allowMetrics.value,
|
||||
migrationSourcePath: migrationSourcePath.value,
|
||||
migrationItemIds: toRaw(migrationItemIds.value),
|
||||
pythonMirror: pythonMirror.value,
|
||||
pypiMirror: pypiMirror.value,
|
||||
torchMirror: torchMirror.value,
|
||||
device: device.value
|
||||
};
|
||||
electron.installComfyUI(options);
|
||||
const nextPage = options.device === "unsupported" ? "/manual-configuration" : "/server-start";
|
||||
router.push(nextPage);
|
||||
}, "install");
|
||||
onMounted(async () => {
|
||||
if (!electron) return;
|
||||
const detectedGpu = await electron.Config.getDetectedGpu();
|
||||
if (detectedGpu === "mps" || detectedGpu === "nvidia") {
|
||||
device.value = detectedGpu;
|
||||
}
|
||||
electronAPI().Events.trackEvent("install_stepper_change", {
|
||||
step: "0",
|
||||
gpu: detectedGpu
|
||||
});
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(_sfc_main$8, { dark: "" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$f), {
|
||||
class: "h-full p-8 2xl:p-16",
|
||||
value: "0",
|
||||
"onUpdate:value": handleStepChange
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$b), { class: "select-none" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$c), { value: "0" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.gpu")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$c), {
|
||||
value: "1",
|
||||
disabled: noGpu.value
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.installLocation")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"]),
|
||||
createVNode(unref(script$c), {
|
||||
value: "2",
|
||||
disabled: noGpu.value || hasError.value || highestStep.value < 1
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.migration")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"]),
|
||||
createVNode(unref(script$c), {
|
||||
value: "3",
|
||||
disabled: noGpu.value || hasError.value || highestStep.value < 2
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.desktopSettings")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$d), null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$e), { value: "0" }, {
|
||||
default: withCtx(({ activateCallback }) => [
|
||||
createVNode(GpuPicker, {
|
||||
device: device.value,
|
||||
"onUpdate:device": _cache[0] || (_cache[0] = ($event) => device.value = $event)
|
||||
}, null, 8, ["device"]),
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.next"),
|
||||
icon: "pi pi-arrow-right",
|
||||
iconPos: "right",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick"),
|
||||
disabled: typeof device.value !== "string"
|
||||
}, null, 8, ["label", "onClick", "disabled"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$e), { value: "1" }, {
|
||||
default: withCtx(({ activateCallback }) => [
|
||||
createVNode(_sfc_main$4, {
|
||||
installPath: installPath.value,
|
||||
"onUpdate:installPath": _cache[1] || (_cache[1] = ($event) => installPath.value = $event),
|
||||
pathError: pathError.value,
|
||||
"onUpdate:pathError": _cache[2] || (_cache[2] = ($event) => pathError.value = $event)
|
||||
}, null, 8, ["installPath", "pathError"]),
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.back"),
|
||||
severity: "secondary",
|
||||
icon: "pi pi-arrow-left",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("0"), "onClick")
|
||||
}, null, 8, ["label", "onClick"]),
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.next"),
|
||||
icon: "pi pi-arrow-right",
|
||||
iconPos: "right",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick"),
|
||||
disabled: pathError.value !== ""
|
||||
}, null, 8, ["label", "onClick", "disabled"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$e), { value: "2" }, {
|
||||
default: withCtx(({ activateCallback }) => [
|
||||
createVNode(_sfc_main$3, {
|
||||
sourcePath: migrationSourcePath.value,
|
||||
"onUpdate:sourcePath": _cache[3] || (_cache[3] = ($event) => migrationSourcePath.value = $event),
|
||||
migrationItemIds: migrationItemIds.value,
|
||||
"onUpdate:migrationItemIds": _cache[4] || (_cache[4] = ($event) => migrationItemIds.value = $event)
|
||||
}, null, 8, ["sourcePath", "migrationItemIds"]),
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.back"),
|
||||
severity: "secondary",
|
||||
icon: "pi pi-arrow-left",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick")
|
||||
}, null, 8, ["label", "onClick"]),
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.next"),
|
||||
icon: "pi pi-arrow-right",
|
||||
iconPos: "right",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("3"), "onClick")
|
||||
}, null, 8, ["label", "onClick"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$e), { value: "3" }, {
|
||||
default: withCtx(({ activateCallback }) => [
|
||||
createVNode(_sfc_main$6, {
|
||||
autoUpdate: autoUpdate.value,
|
||||
"onUpdate:autoUpdate": _cache[5] || (_cache[5] = ($event) => autoUpdate.value = $event),
|
||||
allowMetrics: allowMetrics.value,
|
||||
"onUpdate:allowMetrics": _cache[6] || (_cache[6] = ($event) => allowMetrics.value = $event)
|
||||
}, null, 8, ["autoUpdate", "allowMetrics"]),
|
||||
createVNode(_sfc_main$1, {
|
||||
device: device.value,
|
||||
pythonMirror: pythonMirror.value,
|
||||
"onUpdate:pythonMirror": _cache[7] || (_cache[7] = ($event) => pythonMirror.value = $event),
|
||||
pypiMirror: pypiMirror.value,
|
||||
"onUpdate:pypiMirror": _cache[8] || (_cache[8] = ($event) => pypiMirror.value = $event),
|
||||
torchMirror: torchMirror.value,
|
||||
"onUpdate:torchMirror": _cache[9] || (_cache[9] = ($event) => torchMirror.value = $event),
|
||||
class: "mt-6"
|
||||
}, null, 8, ["device", "pythonMirror", "pypiMirror", "torchMirror"]),
|
||||
createBaseVNode("div", _hoisted_4, [
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.back"),
|
||||
severity: "secondary",
|
||||
icon: "pi pi-arrow-left",
|
||||
onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick")
|
||||
}, null, 8, ["label", "onClick"]),
|
||||
createVNode(unref(script$7), {
|
||||
label: _ctx.$t("g.install"),
|
||||
icon: "pi pi-check",
|
||||
iconPos: "right",
|
||||
disabled: hasError.value,
|
||||
onClick: _cache[10] || (_cache[10] = ($event) => install())
|
||||
}, null, 8, ["label", "disabled"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const InstallView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cd6731d2"]]);
|
||||
export {
|
||||
InstallView as default
|
||||
};
|
||||
//# sourceMappingURL=InstallView-BwawagSr.js.map
|
||||
1
comfy/web/assets/InstallView-BwawagSr.js.map
generated
vendored
81
comfy/web/assets/InstallView-C_PLT5gk.css
generated
vendored
@ -1,81 +0,0 @@
|
||||
|
||||
.p-tag[data-v-79125ff6] {
|
||||
--p-tag-gap: 0.5rem;
|
||||
}
|
||||
.hover-brighten {
|
||||
&[data-v-79125ff6] {
|
||||
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;
|
||||
}
|
||||
&[data-v-79125ff6]:hover {
|
||||
filter: brightness(107%) contrast(105%);
|
||||
box-shadow: 0 0 0.25rem #ffffff79;
|
||||
}
|
||||
}
|
||||
.p-accordioncontent-content[data-v-79125ff6] {
|
||||
border-radius: 0.5rem;
|
||||
--tw-bg-opacity: 1;
|
||||
background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1));
|
||||
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[data-v-79125ff6]:not(.selected) {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.gpu-button[data-v-79125ff6]:not(.selected):hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.gpu-button[data-v-79125ff6] {
|
||||
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, 1));
|
||||
--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[data-v-79125ff6]:hover {
|
||||
--tw-bg-opacity: 0.75;
|
||||
}
|
||||
.gpu-button {
|
||||
&.selected[data-v-79125ff6] {
|
||||
--tw-bg-opacity: 1;
|
||||
background-color: rgb(64 64 64 / var(--tw-bg-opacity, 1));
|
||||
}
|
||||
&.selected[data-v-79125ff6] {
|
||||
--tw-bg-opacity: 0.5;
|
||||
}
|
||||
&.selected[data-v-79125ff6] {
|
||||
opacity: 1;
|
||||
}
|
||||
&.selected[data-v-79125ff6]:hover {
|
||||
--tw-bg-opacity: 0.6;
|
||||
}
|
||||
}
|
||||
.disabled[data-v-79125ff6] {
|
||||
pointer-events: none;
|
||||
opacity: 0.4;
|
||||
}
|
||||
.p-card-header[data-v-79125ff6] {
|
||||
flex-grow: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.p-card-body[data-v-79125ff6] {
|
||||
padding-top: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
[data-v-cd6731d2] .p-steppanel {
|
||||
background-color: transparent
|
||||
}
|
||||
292
comfy/web/assets/KeybindingPanel-BetULlhU.js
generated
vendored
@ -1,292 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, c as computed, o as openBlock, f as createElementBlock, F as Fragment, D as renderList, k as createVNode, z as withCtx, ak as createTextVNode, E as toDisplayString, j as unref, ah as script, B as createCommentVNode, T as ref, dI as FilterMatchMode, az as useKeybindingStore, J as useCommandStore, I as useI18n, X as normalizeI18nKey, w as watchEffect, b3 as useToast, r as resolveDirective, y as createBlock, dJ as SearchBox, m as createBaseVNode, l as script$2, bt as script$4, aD as withModifiers, bw as script$5, ao as script$6, i as withDirectives, dK as _sfc_main$2, dL as KeyComboImpl, dM as KeybindingImpl, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { g as script$1, h as script$3 } from "./index-Czd3J-KM.js";
|
||||
import { u as useKeybindingService } from "./keybindingService-CqDMAs0_.js";
|
||||
import "./index-D8hjiWMw.js";
|
||||
const _hoisted_1$1 = {
|
||||
key: 0,
|
||||
class: "px-2"
|
||||
};
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "KeyComboDisplay",
|
||||
props: {
|
||||
keyCombo: {},
|
||||
isModified: { type: Boolean, default: false }
|
||||
},
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
const keySequences = computed(() => props.keyCombo.getKeySequences());
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("span", null, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => {
|
||||
return openBlock(), createElementBlock(Fragment, { key: index }, [
|
||||
createVNode(unref(script), {
|
||||
severity: _ctx.isModified ? "info" : "secondary"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(sequence), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["severity"]),
|
||||
index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true)
|
||||
], 64);
|
||||
}), 128))
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { class: "actions invisible flex flex-row" };
|
||||
const _hoisted_2 = ["title"];
|
||||
const _hoisted_3 = { key: 1 };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "KeybindingPanel",
|
||||
setup(__props) {
|
||||
const filters = ref({
|
||||
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
||||
});
|
||||
const keybindingStore = useKeybindingStore();
|
||||
const keybindingService = useKeybindingService();
|
||||
const commandStore = useCommandStore();
|
||||
const { t } = useI18n();
|
||||
const commandsData = computed(() => {
|
||||
return Object.values(commandStore.commands).map((command) => ({
|
||||
id: command.id,
|
||||
label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label),
|
||||
keybinding: keybindingStore.getKeybindingByCommandId(command.id)
|
||||
}));
|
||||
});
|
||||
const selectedCommandData = ref(null);
|
||||
const editDialogVisible = ref(false);
|
||||
const newBindingKeyCombo = ref(null);
|
||||
const currentEditingCommand = ref(null);
|
||||
const keybindingInput = ref(null);
|
||||
const existingKeybindingOnCombo = computed(() => {
|
||||
if (!currentEditingCommand.value) {
|
||||
return null;
|
||||
}
|
||||
if (currentEditingCommand.value.keybinding?.combo?.equals(
|
||||
newBindingKeyCombo.value
|
||||
)) {
|
||||
return null;
|
||||
}
|
||||
if (!newBindingKeyCombo.value) {
|
||||
return null;
|
||||
}
|
||||
return keybindingStore.getKeybinding(newBindingKeyCombo.value);
|
||||
});
|
||||
function editKeybinding(commandData) {
|
||||
currentEditingCommand.value = commandData;
|
||||
newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null;
|
||||
editDialogVisible.value = true;
|
||||
}
|
||||
__name(editKeybinding, "editKeybinding");
|
||||
watchEffect(() => {
|
||||
if (editDialogVisible.value) {
|
||||
setTimeout(() => {
|
||||
keybindingInput.value?.$el?.focus();
|
||||
}, 300);
|
||||
}
|
||||
});
|
||||
function removeKeybinding(commandData) {
|
||||
if (commandData.keybinding) {
|
||||
keybindingStore.unsetKeybinding(commandData.keybinding);
|
||||
keybindingService.persistUserKeybindings();
|
||||
}
|
||||
}
|
||||
__name(removeKeybinding, "removeKeybinding");
|
||||
function captureKeybinding(event) {
|
||||
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
||||
switch (event.key) {
|
||||
case "Escape":
|
||||
cancelEdit();
|
||||
return;
|
||||
case "Enter":
|
||||
saveKeybinding();
|
||||
return;
|
||||
}
|
||||
}
|
||||
const keyCombo = KeyComboImpl.fromEvent(event);
|
||||
newBindingKeyCombo.value = keyCombo;
|
||||
}
|
||||
__name(captureKeybinding, "captureKeybinding");
|
||||
function cancelEdit() {
|
||||
editDialogVisible.value = false;
|
||||
currentEditingCommand.value = null;
|
||||
newBindingKeyCombo.value = null;
|
||||
}
|
||||
__name(cancelEdit, "cancelEdit");
|
||||
function saveKeybinding() {
|
||||
if (currentEditingCommand.value && newBindingKeyCombo.value) {
|
||||
const updated = keybindingStore.updateKeybindingOnCommand(
|
||||
new KeybindingImpl({
|
||||
commandId: currentEditingCommand.value.id,
|
||||
combo: newBindingKeyCombo.value
|
||||
})
|
||||
);
|
||||
if (updated) {
|
||||
keybindingService.persistUserKeybindings();
|
||||
}
|
||||
}
|
||||
cancelEdit();
|
||||
}
|
||||
__name(saveKeybinding, "saveKeybinding");
|
||||
const toast = useToast();
|
||||
async function resetKeybindings() {
|
||||
keybindingStore.resetKeybindings();
|
||||
await keybindingService.persistUserKeybindings();
|
||||
toast.add({
|
||||
severity: "info",
|
||||
summary: "Info",
|
||||
detail: "Keybindings reset",
|
||||
life: 3e3
|
||||
});
|
||||
}
|
||||
__name(resetKeybindings, "resetKeybindings");
|
||||
return (_ctx, _cache) => {
|
||||
const _directive_tooltip = resolveDirective("tooltip");
|
||||
return openBlock(), createBlock(_sfc_main$2, {
|
||||
value: "Keybinding",
|
||||
class: "keybinding-panel"
|
||||
}, {
|
||||
header: withCtx(() => [
|
||||
createVNode(SearchBox, {
|
||||
modelValue: filters.value["global"].value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
|
||||
placeholder: _ctx.$t("g.searchKeybindings") + "..."
|
||||
}, null, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$3), {
|
||||
value: commandsData.value,
|
||||
selection: selectedCommandData.value,
|
||||
"onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event),
|
||||
"global-filter-fields": ["id", "label"],
|
||||
filters: filters.value,
|
||||
selectionMode: "single",
|
||||
stripedRows: "",
|
||||
pt: {
|
||||
header: "px-0"
|
||||
}
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(script$1), {
|
||||
field: "actions",
|
||||
header: ""
|
||||
}, {
|
||||
body: withCtx((slotProps) => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createVNode(unref(script$2), {
|
||||
icon: "pi pi-pencil",
|
||||
class: "p-button-text",
|
||||
onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick")
|
||||
}, null, 8, ["onClick"]),
|
||||
createVNode(unref(script$2), {
|
||||
icon: "pi pi-trash",
|
||||
class: "p-button-text p-button-danger",
|
||||
onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"),
|
||||
disabled: !slotProps.data.keybinding
|
||||
}, null, 8, ["onClick", "disabled"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(unref(script$1), {
|
||||
field: "id",
|
||||
header: _ctx.$t("g.command"),
|
||||
sortable: "",
|
||||
class: "max-w-64 2xl:max-w-full"
|
||||
}, {
|
||||
body: withCtx((slotProps) => [
|
||||
createBaseVNode("div", {
|
||||
class: "overflow-hidden text-ellipsis whitespace-nowrap",
|
||||
title: slotProps.data.id
|
||||
}, toDisplayString(slotProps.data.label), 9, _hoisted_2)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["header"]),
|
||||
createVNode(unref(script$1), {
|
||||
field: "keybinding",
|
||||
header: _ctx.$t("g.keybinding")
|
||||
}, {
|
||||
body: withCtx((slotProps) => [
|
||||
slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
|
||||
key: 0,
|
||||
keyCombo: slotProps.data.keybinding.combo,
|
||||
isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id)
|
||||
}, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["header"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["value", "selection", "filters"]),
|
||||
createVNode(unref(script$6), {
|
||||
class: "min-w-96",
|
||||
visible: editDialogVisible.value,
|
||||
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event),
|
||||
modal: "",
|
||||
header: currentEditingCommand.value?.label,
|
||||
onHide: cancelEdit
|
||||
}, {
|
||||
footer: withCtx(() => [
|
||||
createVNode(unref(script$2), {
|
||||
label: "Save",
|
||||
icon: "pi pi-check",
|
||||
onClick: saveKeybinding,
|
||||
disabled: !!existingKeybindingOnCombo.value,
|
||||
autofocus: ""
|
||||
}, null, 8, ["disabled"])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", null, [
|
||||
createVNode(unref(script$4), {
|
||||
class: "mb-2 text-center",
|
||||
ref_key: "keybindingInput",
|
||||
ref: keybindingInput,
|
||||
modelValue: newBindingKeyCombo.value?.toString() ?? "",
|
||||
placeholder: "Press keys for new binding",
|
||||
onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]),
|
||||
autocomplete: "off",
|
||||
fluid: "",
|
||||
invalid: !!existingKeybindingOnCombo.value
|
||||
}, null, 8, ["modelValue", "invalid"]),
|
||||
existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), {
|
||||
key: 0,
|
||||
severity: "error"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
_cache[3] || (_cache[3] = createTextVNode(" Keybinding already exists on ")),
|
||||
createVNode(unref(script), {
|
||||
severity: "secondary",
|
||||
value: existingKeybindingOnCombo.value.commandId
|
||||
}, null, 8, ["value"])
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["visible", "header"]),
|
||||
withDirectives(createVNode(unref(script$2), {
|
||||
class: "mt-4",
|
||||
label: _ctx.$t("g.reset"),
|
||||
icon: "pi pi-trash",
|
||||
severity: "danger",
|
||||
fluid: "",
|
||||
text: "",
|
||||
onClick: resetKeybindings
|
||||
}, null, 8, ["label"]), [
|
||||
[_directive_tooltip, _ctx.$t("g.resetKeybindingsTooltip")]
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8454e24f"]]);
|
||||
export {
|
||||
KeybindingPanel as default
|
||||
};
|
||||
//# sourceMappingURL=KeybindingPanel-BetULlhU.js.map
|
||||
1
comfy/web/assets/KeybindingPanel-BetULlhU.js.map
generated
vendored
8
comfy/web/assets/KeybindingPanel-CwPLIgAf.css
generated
vendored
@ -1,8 +0,0 @@
|
||||
|
||||
[data-v-8454e24f] .p-datatable-tbody > tr > td {
|
||||
padding: 0.25rem;
|
||||
min-height: 2rem
|
||||
}
|
||||
[data-v-8454e24f] .p-datatable-row-selected .actions,[data-v-8454e24f] .p-datatable-selectable-row:hover .actions {
|
||||
visibility: visible
|
||||
}
|
||||
770
comfy/web/assets/MaintenanceView-BFp9KqAr.js
generated
vendored
@ -1,770 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, bF as mergeModels, bz as useModel, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, Z as normalizeClass, i as withDirectives, v as vShow, k as createVNode, j as unref, bN as script, l as script$1, c as computed, bO as PrimeIcons, bp as t, ah as script$2, bi as electronAPI, ad as defineStore, T as ref, bP as useTimeout, N as watch, f as createElementBlock, B as createCommentVNode, ak as createTextVNode, E as toDisplayString, aE as mergeProps, bQ as script$3, _ as _export_sfc, r as resolveDirective, bR as script$4, b3 as useToast, bS as useConfirm, F as Fragment, bu as script$5, D as renderList, bT as script$6, p as onMounted, bU as onUnmounted, a2 as script$7, as as isRef } from "./index-DIgj6hpb.js";
|
||||
import { s as script$8 } from "./index-CE2hpomb.js";
|
||||
import "./index-mHcHTYAB.js";
|
||||
import { _ as _sfc_main$7 } from "./TerminalOutputDrawer-B_NZxAv8.js";
|
||||
import { _ as _sfc_main$8 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
import "./index-DdgRmRKP.js";
|
||||
import "./index-D8hjiWMw.js";
|
||||
import "./index-Czd3J-KM.js";
|
||||
import "./index-C_ACzX5-.js";
|
||||
import "./index-BKScv1mm.js";
|
||||
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
||||
__name: "RefreshButton",
|
||||
props: /* @__PURE__ */ mergeModels({
|
||||
outlined: { type: Boolean, default: true },
|
||||
disabled: { type: Boolean },
|
||||
severity: { default: "secondary" }
|
||||
}, {
|
||||
"modelValue": { type: Boolean, ...{ required: true } },
|
||||
"modelModifiers": {}
|
||||
}),
|
||||
emits: /* @__PURE__ */ mergeModels(["refresh"], ["update:modelValue"]),
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
const active = useModel(__props, "modelValue");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(unref(script$1), {
|
||||
class: "relative p-button-icon-only",
|
||||
outlined: props.outlined,
|
||||
severity: props.severity,
|
||||
disabled: active.value || props.disabled,
|
||||
onClick: _cache[0] || (_cache[0] = (event) => _ctx.$emit("refresh", event))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", {
|
||||
class: normalizeClass(["p-button-icon pi pi-refresh transition-all", { "opacity-0": active.value }]),
|
||||
"data-pc-section": "icon"
|
||||
}, null, 2),
|
||||
_cache[1] || (_cache[1] = createBaseVNode("span", {
|
||||
class: "p-button-label",
|
||||
"data-pc-section": "label"
|
||||
}, " ", -1)),
|
||||
withDirectives(createVNode(unref(script), { class: "absolute w-1/2 h-1/2" }, null, 512), [
|
||||
[vShow, active.value]
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["outlined", "severity", "disabled"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
||||
__name: "StatusTag",
|
||||
props: {
|
||||
error: { type: Boolean },
|
||||
refreshing: { type: Boolean }
|
||||
},
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
const icon = computed(() => {
|
||||
if (props.refreshing) return PrimeIcons.QUESTION;
|
||||
if (props.error) return PrimeIcons.TIMES;
|
||||
return PrimeIcons.CHECK;
|
||||
});
|
||||
const severity = computed(() => {
|
||||
if (props.refreshing) return "info";
|
||||
if (props.error) return "danger";
|
||||
return "success";
|
||||
});
|
||||
const value = computed(() => {
|
||||
if (props.refreshing) return t("maintenance.refreshing");
|
||||
if (props.error) return t("g.error");
|
||||
return t("maintenance.OK");
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(unref(script$2), {
|
||||
icon: icon.value,
|
||||
severity: severity.value,
|
||||
value: value.value
|
||||
}, null, 8, ["icon", "severity", "value"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const electron = electronAPI();
|
||||
const openUrl = /* @__PURE__ */ __name((url) => {
|
||||
window.open(url, "_blank");
|
||||
return true;
|
||||
}, "openUrl");
|
||||
const DESKTOP_MAINTENANCE_TASKS = [
|
||||
{
|
||||
id: "basePath",
|
||||
execute: /* @__PURE__ */ __name(async () => await electron.setBasePath(), "execute"),
|
||||
name: "Base path",
|
||||
shortDescription: "Change the application base path.",
|
||||
errorDescription: "Unable to open the base path. Please select a new one.",
|
||||
description: "The base path is the default location where ComfyUI stores data. It is the location fo the python environment, and may also contain models, custom nodes, and other extensions.",
|
||||
isInstallationFix: true,
|
||||
button: {
|
||||
icon: PrimeIcons.QUESTION,
|
||||
text: "Select"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "git",
|
||||
headerImg: "assets/images/Git-Logo-White.svg",
|
||||
execute: /* @__PURE__ */ __name(() => openUrl("https://git-scm.com/downloads/"), "execute"),
|
||||
name: "Download git",
|
||||
shortDescription: "Open the git download page.",
|
||||
errorDescription: "Git is missing. Please download and install git, then restart ComfyUI Desktop.",
|
||||
description: "Git is required to download and manage custom nodes and other extensions. This task opens the download page in your default browser, where you can download the latest version of git. Once you have installed git, please restart ComfyUI Desktop.",
|
||||
button: {
|
||||
icon: PrimeIcons.EXTERNAL_LINK,
|
||||
text: "Download"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "vcRedist",
|
||||
execute: /* @__PURE__ */ __name(() => openUrl("https://aka.ms/vs/17/release/vc_redist.x64.exe"), "execute"),
|
||||
name: "Download VC++ Redist",
|
||||
shortDescription: "Download the latest VC++ Redistributable runtime.",
|
||||
description: "The Visual C++ runtime libraries are required to run ComfyUI. You will need to download and install this file.",
|
||||
button: {
|
||||
icon: PrimeIcons.EXTERNAL_LINK,
|
||||
text: "Download"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "reinstall",
|
||||
severity: "danger",
|
||||
requireConfirm: true,
|
||||
execute: /* @__PURE__ */ __name(async () => {
|
||||
await electron.reinstall();
|
||||
return true;
|
||||
}, "execute"),
|
||||
name: "Reinstall ComfyUI",
|
||||
shortDescription: "Deletes the desktop app config and load the welcome screen.",
|
||||
description: "Delete the desktop app config, restart the app, and load the installation screen.",
|
||||
confirmText: "Delete all saved config and reinstall?",
|
||||
button: {
|
||||
icon: PrimeIcons.EXCLAMATION_TRIANGLE,
|
||||
text: "Reinstall"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "pythonPackages",
|
||||
requireConfirm: true,
|
||||
execute: /* @__PURE__ */ __name(async () => {
|
||||
try {
|
||||
await electron.uv.installRequirements();
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}, "execute"),
|
||||
name: "Install python packages",
|
||||
shortDescription: "Installs the base python packages required to run ComfyUI.",
|
||||
errorDescription: "Python packages that are required to run ComfyUI are not installed.",
|
||||
description: "This will install the python packages required to run ComfyUI. This includes torch, torchvision, and other dependencies.",
|
||||
usesTerminal: true,
|
||||
isInstallationFix: true,
|
||||
button: {
|
||||
icon: PrimeIcons.DOWNLOAD,
|
||||
text: "Install"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "uv",
|
||||
execute: /* @__PURE__ */ __name(() => openUrl("https://docs.astral.sh/uv/getting-started/installation/"), "execute"),
|
||||
name: "uv executable",
|
||||
shortDescription: "uv installs and maintains the python environment.",
|
||||
description: "This will open the download page for Astral's uv tool. uv is used to install python and manage python packages.",
|
||||
button: {
|
||||
icon: "pi pi-asterisk",
|
||||
text: "Download"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "uvCache",
|
||||
severity: "danger",
|
||||
requireConfirm: true,
|
||||
execute: /* @__PURE__ */ __name(async () => await electron.uv.clearCache(), "execute"),
|
||||
name: "uv cache",
|
||||
shortDescription: "Remove the Astral uv cache of python packages.",
|
||||
description: "This will remove the uv cache directory and its contents. All downloaded python packages will need to be downloaded again.",
|
||||
confirmText: "Delete uv cache of python packages?",
|
||||
usesTerminal: true,
|
||||
isInstallationFix: true,
|
||||
button: {
|
||||
icon: PrimeIcons.TRASH,
|
||||
text: "Clear cache"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "venvDirectory",
|
||||
severity: "danger",
|
||||
requireConfirm: true,
|
||||
execute: /* @__PURE__ */ __name(async () => await electron.uv.resetVenv(), "execute"),
|
||||
name: "Reset virtual environment",
|
||||
shortDescription: "Remove and recreate the .venv directory. This removes all python packages.",
|
||||
description: "The python environment is where ComfyUI installs python and python packages. It is used to run the ComfyUI server.",
|
||||
confirmText: "Delete the .venv directory?",
|
||||
usesTerminal: true,
|
||||
isInstallationFix: true,
|
||||
button: {
|
||||
icon: PrimeIcons.FOLDER,
|
||||
text: "Recreate"
|
||||
}
|
||||
}
|
||||
];
|
||||
class MaintenanceTaskRunner {
|
||||
static {
|
||||
__name(this, "MaintenanceTaskRunner");
|
||||
}
|
||||
constructor(task) {
|
||||
this.task = task;
|
||||
}
|
||||
_state;
|
||||
/** The current state of the task. Setter also controls {@link resolved} as a side-effect. */
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
/** Updates the task state and {@link resolved} status. */
|
||||
setState(value) {
|
||||
if (this._state === "error" && value === "OK") this.resolved = true;
|
||||
if (value === "error") this.resolved &&= false;
|
||||
this._state = value;
|
||||
}
|
||||
/** `true` if the task has been resolved (was `error`, now `OK`). This is a side-effect of the {@link state} setter. */
|
||||
resolved;
|
||||
/** Whether the task state is currently being refreshed. */
|
||||
refreshing;
|
||||
/** Whether the task is currently running. */
|
||||
executing;
|
||||
/** The error message that occurred when the task failed. */
|
||||
error;
|
||||
update(update) {
|
||||
const state = update[this.task.id];
|
||||
this.refreshing = state === void 0;
|
||||
if (state) this.setState(state);
|
||||
}
|
||||
finaliseUpdate(update) {
|
||||
this.refreshing = false;
|
||||
this.setState(update[this.task.id] ?? "skipped");
|
||||
}
|
||||
/** Wraps the execution of a maintenance task, updating state and rethrowing errors. */
|
||||
async execute(task) {
|
||||
try {
|
||||
this.executing = true;
|
||||
const success = await task.execute();
|
||||
if (!success) return false;
|
||||
this.error = void 0;
|
||||
return true;
|
||||
} catch (error) {
|
||||
this.error = error?.message;
|
||||
throw error;
|
||||
} finally {
|
||||
this.executing = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
const useMaintenanceTaskStore = defineStore("maintenanceTask", () => {
|
||||
const electron2 = electronAPI();
|
||||
const isRefreshing = ref(false);
|
||||
const isRunningTerminalCommand = computed(
|
||||
() => tasks.value.filter((task) => task.usesTerminal).some((task) => getRunner(task)?.executing)
|
||||
);
|
||||
const isRunningInstallationFix = computed(
|
||||
() => tasks.value.filter((task) => task.isInstallationFix).some((task) => getRunner(task)?.executing)
|
||||
);
|
||||
const tasks = ref(DESKTOP_MAINTENANCE_TASKS);
|
||||
const taskRunners = ref(
|
||||
new Map(
|
||||
DESKTOP_MAINTENANCE_TASKS.map((x) => [x.id, new MaintenanceTaskRunner(x)])
|
||||
)
|
||||
);
|
||||
const anyErrors = computed(
|
||||
() => tasks.value.some((task) => getRunner(task).state === "error")
|
||||
);
|
||||
const getRunner = /* @__PURE__ */ __name((task) => taskRunners.value.get(task.id), "getRunner");
|
||||
const processUpdate = /* @__PURE__ */ __name((validationUpdate) => {
|
||||
const update = validationUpdate;
|
||||
isRefreshing.value = true;
|
||||
for (const task of tasks.value) {
|
||||
getRunner(task).update(update);
|
||||
}
|
||||
if (!update.inProgress && isRefreshing.value) {
|
||||
isRefreshing.value = false;
|
||||
for (const task of tasks.value) {
|
||||
getRunner(task).finaliseUpdate(update);
|
||||
}
|
||||
}
|
||||
}, "processUpdate");
|
||||
const clearResolved = /* @__PURE__ */ __name(() => {
|
||||
for (const task of tasks.value) {
|
||||
getRunner(task).resolved &&= false;
|
||||
}
|
||||
}, "clearResolved");
|
||||
const refreshDesktopTasks = /* @__PURE__ */ __name(async () => {
|
||||
isRefreshing.value = true;
|
||||
console.log("Refreshing desktop tasks");
|
||||
await electron2.Validation.validateInstallation(processUpdate);
|
||||
}, "refreshDesktopTasks");
|
||||
const execute = /* @__PURE__ */ __name(async (task) => {
|
||||
return getRunner(task).execute(task);
|
||||
}, "execute");
|
||||
return {
|
||||
tasks,
|
||||
isRefreshing,
|
||||
isRunningTerminalCommand,
|
||||
isRunningInstallationFix,
|
||||
execute,
|
||||
getRunner,
|
||||
processUpdate,
|
||||
clearResolved,
|
||||
/** True if any tasks are in an error state. */
|
||||
anyErrors,
|
||||
refreshDesktopTasks
|
||||
};
|
||||
});
|
||||
function useMinLoadingDurationRef(value, minDuration = 250) {
|
||||
const current = ref(value.value);
|
||||
const { ready, start } = useTimeout(minDuration, {
|
||||
controls: true,
|
||||
immediate: false
|
||||
});
|
||||
watch(value, (newValue) => {
|
||||
if (newValue && !current.value) start();
|
||||
current.value = newValue;
|
||||
});
|
||||
return computed(() => current.value || !ready.value);
|
||||
}
|
||||
__name(useMinLoadingDurationRef, "useMinLoadingDurationRef");
|
||||
const _hoisted_1$3 = {
|
||||
key: 0,
|
||||
class: "pi pi-exclamation-triangle text-red-500 absolute m-2 top-0 -right-14 opacity-15",
|
||||
style: { "font-size": "10rem" }
|
||||
};
|
||||
const _hoisted_2$3 = ["src"];
|
||||
const _hoisted_3$3 = { class: "flex gap-4 mt-1" };
|
||||
const _hoisted_4$3 = {
|
||||
key: 0,
|
||||
class: "task-card-ok pi pi-check"
|
||||
};
|
||||
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
||||
__name: "TaskCard",
|
||||
props: {
|
||||
task: {}
|
||||
},
|
||||
emits: ["execute"],
|
||||
setup(__props) {
|
||||
const taskStore = useMaintenanceTaskStore();
|
||||
const runner = computed(() => taskStore.getRunner(props.task));
|
||||
const props = __props;
|
||||
const description = computed(
|
||||
() => runner.value.state === "error" ? props.task.errorDescription ?? props.task.shortDescription : props.task.shortDescription
|
||||
);
|
||||
const reactiveLoading = computed(() => runner.value.refreshing);
|
||||
const reactiveExecuting = computed(() => runner.value.executing);
|
||||
const isLoading = useMinLoadingDurationRef(reactiveLoading, 250);
|
||||
const isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250);
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
class: normalizeClass(["task-div max-w-48 min-h-52 grid relative", { "opacity-75": unref(isLoading) }])
|
||||
}, [
|
||||
createVNode(unref(script$3), mergeProps({
|
||||
class: ["max-w-48 relative h-full overflow-hidden", { "opacity-65": runner.value.state !== "error" }]
|
||||
}, (({ onClick, ...rest }) => rest)(_ctx.$attrs)), {
|
||||
header: withCtx(() => [
|
||||
runner.value.state === "error" ? (openBlock(), createElementBlock("i", _hoisted_1$3)) : createCommentVNode("", true),
|
||||
_ctx.task.headerImg ? (openBlock(), createElementBlock("img", {
|
||||
key: 1,
|
||||
src: _ctx.task.headerImg,
|
||||
class: "object-contain w-full h-full opacity-25 pt-4 px-4"
|
||||
}, null, 8, _hoisted_2$3)) : createCommentVNode("", true)
|
||||
]),
|
||||
title: withCtx(() => [
|
||||
createTextVNode(toDisplayString(_ctx.task.name), 1)
|
||||
]),
|
||||
content: withCtx(() => [
|
||||
createTextVNode(toDisplayString(description.value), 1)
|
||||
]),
|
||||
footer: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_3$3, [
|
||||
createVNode(unref(script$1), {
|
||||
icon: _ctx.task.button?.icon,
|
||||
label: _ctx.task.button?.text,
|
||||
class: "w-full",
|
||||
raised: "",
|
||||
"icon-pos": "right",
|
||||
onClick: _cache[0] || (_cache[0] = (event) => _ctx.$emit("execute", event)),
|
||||
loading: unref(isExecuting)
|
||||
}, null, 8, ["icon", "label", "loading"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 16, ["class"]),
|
||||
!unref(isLoading) && runner.value.state === "OK" ? (openBlock(), createElementBlock("i", _hoisted_4$3)) : createCommentVNode("", true)
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
const TaskCard = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-c3bd7658"]]);
|
||||
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
||||
__name: "TaskListStatusIcon",
|
||||
props: {
|
||||
state: {},
|
||||
loading: {}
|
||||
},
|
||||
setup(__props) {
|
||||
const tooltip = computed(() => {
|
||||
if (props.state === "error") {
|
||||
return t("g.error");
|
||||
} else if (props.state === "OK") {
|
||||
return t("maintenance.OK");
|
||||
} else {
|
||||
return t("maintenance.Skipped");
|
||||
}
|
||||
});
|
||||
const cssClasses = computed(() => {
|
||||
let classes;
|
||||
if (props.state === "error") {
|
||||
classes = `${PrimeIcons.EXCLAMATION_TRIANGLE} text-red-500`;
|
||||
} else if (props.state === "OK") {
|
||||
classes = `${PrimeIcons.CHECK} text-green-500`;
|
||||
} else {
|
||||
classes = PrimeIcons.MINUS;
|
||||
}
|
||||
return `text-3xl pi ${classes}`;
|
||||
});
|
||||
const props = __props;
|
||||
return (_ctx, _cache) => {
|
||||
const _directive_tooltip = resolveDirective("tooltip");
|
||||
return !_ctx.state || _ctx.loading ? (openBlock(), createBlock(unref(script), {
|
||||
key: 0,
|
||||
class: "h-8 w-8"
|
||||
})) : withDirectives((openBlock(), createElementBlock("i", {
|
||||
key: 1,
|
||||
class: normalizeClass(cssClasses.value)
|
||||
}, null, 2)), [
|
||||
[
|
||||
_directive_tooltip,
|
||||
{ value: tooltip.value, showDelay: 250 },
|
||||
void 0,
|
||||
{ top: true }
|
||||
]
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1$2 = { class: "text-center w-16" };
|
||||
const _hoisted_2$2 = { class: "inline-block" };
|
||||
const _hoisted_3$2 = { class: "whitespace-pre-line" };
|
||||
const _hoisted_4$2 = { class: "text-right px-4" };
|
||||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||||
__name: "TaskListItem",
|
||||
props: {
|
||||
task: {}
|
||||
},
|
||||
emits: ["execute"],
|
||||
setup(__props) {
|
||||
const taskStore = useMaintenanceTaskStore();
|
||||
const runner = computed(() => taskStore.getRunner(props.task));
|
||||
const props = __props;
|
||||
const severity = computed(
|
||||
() => runner.value.state === "error" || runner.value.state === "warning" ? "primary" : "secondary"
|
||||
);
|
||||
const reactiveLoading = computed(() => runner.value.refreshing);
|
||||
const reactiveExecuting = computed(() => runner.value.executing);
|
||||
const isLoading = useMinLoadingDurationRef(reactiveLoading, 250);
|
||||
const isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250);
|
||||
const infoPopover = ref();
|
||||
const toggle = /* @__PURE__ */ __name((event) => {
|
||||
infoPopover.value.toggle(event);
|
||||
}, "toggle");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("tr", {
|
||||
class: normalizeClass(["border-neutral-700 border-solid border-y", {
|
||||
"opacity-50": runner.value.resolved,
|
||||
"opacity-75": unref(isLoading) && runner.value.resolved
|
||||
}])
|
||||
}, [
|
||||
createBaseVNode("td", _hoisted_1$2, [
|
||||
createVNode(_sfc_main$3, {
|
||||
state: runner.value.state,
|
||||
loading: unref(isLoading)
|
||||
}, null, 8, ["state", "loading"])
|
||||
]),
|
||||
createBaseVNode("td", null, [
|
||||
createBaseVNode("p", _hoisted_2$2, toDisplayString(_ctx.task.name), 1),
|
||||
createVNode(unref(script$1), {
|
||||
class: "inline-block mx-2",
|
||||
type: "button",
|
||||
icon: unref(PrimeIcons).INFO_CIRCLE,
|
||||
severity: "secondary",
|
||||
text: true,
|
||||
onClick: toggle
|
||||
}, null, 8, ["icon"]),
|
||||
createVNode(unref(script$4), {
|
||||
ref_key: "infoPopover",
|
||||
ref: infoPopover,
|
||||
class: "block m-1 max-w-64 min-w-32"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_3$2, toDisplayString(_ctx.task.description), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 512)
|
||||
]),
|
||||
createBaseVNode("td", _hoisted_4$2, [
|
||||
createVNode(unref(script$1), {
|
||||
icon: _ctx.task.button?.icon,
|
||||
label: _ctx.task.button?.text,
|
||||
severity: severity.value,
|
||||
"icon-pos": "right",
|
||||
onClick: _cache[0] || (_cache[0] = (event) => _ctx.$emit("execute", event)),
|
||||
loading: unref(isExecuting)
|
||||
}, null, 8, ["icon", "label", "severity", "loading"])
|
||||
])
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1$1 = { class: "my-4" };
|
||||
const _hoisted_2$1 = { class: "text-neutral-400 w-full text-center" };
|
||||
const _hoisted_3$1 = {
|
||||
key: 0,
|
||||
class: "w-full border-collapse border-hidden"
|
||||
};
|
||||
const _hoisted_4$1 = {
|
||||
key: 1,
|
||||
class: "flex flex-wrap justify-evenly gap-8 pad-y my-4"
|
||||
};
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "TaskListPanel",
|
||||
props: {
|
||||
displayAsList: {},
|
||||
filter: {},
|
||||
isRefreshing: { type: Boolean }
|
||||
},
|
||||
setup(__props) {
|
||||
const toast = useToast();
|
||||
const confirm = useConfirm();
|
||||
const taskStore = useMaintenanceTaskStore();
|
||||
const props = __props;
|
||||
const executeTask = /* @__PURE__ */ __name(async (task) => {
|
||||
let message;
|
||||
try {
|
||||
if (await taskStore.execute(task) === true) return;
|
||||
message = t("maintenance.error.taskFailed");
|
||||
} catch (error) {
|
||||
message = error?.message;
|
||||
}
|
||||
toast.add({
|
||||
severity: "error",
|
||||
summary: t("maintenance.error.toastTitle"),
|
||||
detail: message ?? t("maintenance.error.defaultDescription"),
|
||||
life: 1e4
|
||||
});
|
||||
}, "executeTask");
|
||||
const confirmButton = /* @__PURE__ */ __name(async (event, task) => {
|
||||
if (!task.requireConfirm) {
|
||||
await executeTask(task);
|
||||
return;
|
||||
}
|
||||
confirm.require({
|
||||
target: event.currentTarget,
|
||||
message: task.confirmText ?? t("maintenance.confirmTitle"),
|
||||
icon: "pi pi-exclamation-circle",
|
||||
rejectProps: {
|
||||
label: t("g.cancel"),
|
||||
severity: "secondary",
|
||||
outlined: true
|
||||
},
|
||||
acceptProps: {
|
||||
label: task.button?.text ?? t("g.save"),
|
||||
severity: task.severity ?? "primary"
|
||||
},
|
||||
// TODO: Not awaited.
|
||||
accept: /* @__PURE__ */ __name(async () => {
|
||||
await executeTask(task);
|
||||
}, "accept")
|
||||
});
|
||||
}, "confirmButton");
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("section", _hoisted_1$1, [
|
||||
_ctx.filter.tasks.length === 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
||||
createVNode(unref(script$5)),
|
||||
createBaseVNode("p", _hoisted_2$1, toDisplayString(_ctx.$t("maintenance.allOk")), 1)
|
||||
], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
||||
_ctx.displayAsList === unref(PrimeIcons).LIST ? (openBlock(), createElementBlock("table", _hoisted_3$1, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filter.tasks, (task) => {
|
||||
return openBlock(), createBlock(_sfc_main$2, {
|
||||
key: task.id,
|
||||
task,
|
||||
onExecute: /* @__PURE__ */ __name((event) => confirmButton(event, task), "onExecute")
|
||||
}, null, 8, ["task", "onExecute"]);
|
||||
}), 128))
|
||||
])) : (openBlock(), createElementBlock("div", _hoisted_4$1, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filter.tasks, (task) => {
|
||||
return openBlock(), createBlock(TaskCard, {
|
||||
key: task.id,
|
||||
task,
|
||||
onExecute: /* @__PURE__ */ __name((event) => confirmButton(event, task), "onExecute")
|
||||
}, null, 8, ["task", "onExecute"]);
|
||||
}), 128))
|
||||
]))
|
||||
], 64)),
|
||||
createVNode(unref(script$6))
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { class: "min-w-full min-h-full font-sans w-screen h-screen grid justify-around text-neutral-300 bg-neutral-900 dark-theme overflow-y-auto" };
|
||||
const _hoisted_2 = { class: "max-w-screen-sm w-screen m-8 relative" };
|
||||
const _hoisted_3 = { class: "backspan pi-wrench text-4xl font-bold" };
|
||||
const _hoisted_4 = { class: "w-full flex flex-wrap gap-4 items-center" };
|
||||
const _hoisted_5 = { class: "grow" };
|
||||
const _hoisted_6 = { class: "flex gap-4 items-center" };
|
||||
const _hoisted_7 = { class: "max-sm:hidden" };
|
||||
const _hoisted_8 = { class: "flex justify-between gap-4 flex-row" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "MaintenanceView",
|
||||
setup(__props) {
|
||||
const electron2 = electronAPI();
|
||||
const toast = useToast();
|
||||
const taskStore = useMaintenanceTaskStore();
|
||||
const { clearResolved, processUpdate, refreshDesktopTasks } = taskStore;
|
||||
const terminalVisible = ref(false);
|
||||
const reactiveIsRefreshing = computed(() => taskStore.isRefreshing);
|
||||
const isRefreshing = useMinLoadingDurationRef(reactiveIsRefreshing, 250);
|
||||
const anyErrors = computed(() => taskStore.anyErrors);
|
||||
const displayAsList = ref(PrimeIcons.TH_LARGE);
|
||||
const errorFilter = computed(
|
||||
() => taskStore.tasks.filter((x) => {
|
||||
const { state, resolved } = taskStore.getRunner(x);
|
||||
return state === "error" || resolved;
|
||||
})
|
||||
);
|
||||
const filterOptions = ref([
|
||||
{ icon: PrimeIcons.FILTER_FILL, value: "All", tasks: taskStore.tasks },
|
||||
{ icon: PrimeIcons.EXCLAMATION_TRIANGLE, value: "Errors", tasks: errorFilter }
|
||||
]);
|
||||
const filter = ref(filterOptions.value[0]);
|
||||
const completeValidation = /* @__PURE__ */ __name(async () => {
|
||||
const isValid = await electron2.Validation.complete();
|
||||
if (!isValid) {
|
||||
toast.add({
|
||||
severity: "error",
|
||||
summary: t("g.error"),
|
||||
detail: t("maintenance.error.cannotContinue"),
|
||||
life: 5e3
|
||||
});
|
||||
}
|
||||
}, "completeValidation");
|
||||
const toggleConsoleDrawer = /* @__PURE__ */ __name(() => {
|
||||
terminalVisible.value = !terminalVisible.value;
|
||||
}, "toggleConsoleDrawer");
|
||||
watch(
|
||||
() => taskStore.isRunningTerminalCommand,
|
||||
(value) => {
|
||||
terminalVisible.value = value;
|
||||
}
|
||||
);
|
||||
onMounted(async () => {
|
||||
electron2.Validation.onUpdate(processUpdate);
|
||||
const update = await electron2.Validation.getStatus();
|
||||
if (Object.values(update).some((x) => x === "error")) {
|
||||
filter.value = filterOptions.value[1];
|
||||
}
|
||||
processUpdate(update);
|
||||
});
|
||||
onUnmounted(() => electron2.Validation.dispose());
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(_sfc_main$8, { dark: "" }, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("h1", _hoisted_3, toDisplayString(unref(t)("maintenance.title")), 1),
|
||||
createBaseVNode("div", _hoisted_4, [
|
||||
createBaseVNode("span", _hoisted_5, [
|
||||
createTextVNode(toDisplayString(unref(t)("maintenance.status")) + ": ", 1),
|
||||
createVNode(_sfc_main$5, {
|
||||
refreshing: unref(isRefreshing),
|
||||
error: anyErrors.value
|
||||
}, null, 8, ["refreshing", "error"])
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_6, [
|
||||
createVNode(unref(script$7), {
|
||||
modelValue: displayAsList.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => displayAsList.value = $event),
|
||||
options: [unref(PrimeIcons).LIST, unref(PrimeIcons).TH_LARGE],
|
||||
"allow-empty": false
|
||||
}, {
|
||||
option: withCtx((opts) => [
|
||||
createBaseVNode("i", {
|
||||
class: normalizeClass(opts.option)
|
||||
}, null, 2)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "options"]),
|
||||
createVNode(unref(script$7), {
|
||||
modelValue: filter.value,
|
||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => filter.value = $event),
|
||||
options: filterOptions.value,
|
||||
"allow-empty": false,
|
||||
optionLabel: "value",
|
||||
dataKey: "value",
|
||||
"area-labelledby": "custom",
|
||||
onChange: unref(clearResolved)
|
||||
}, {
|
||||
option: withCtx((opts) => [
|
||||
createBaseVNode("i", {
|
||||
class: normalizeClass(opts.option.icon)
|
||||
}, null, 2),
|
||||
createBaseVNode("span", _hoisted_7, toDisplayString(opts.option.value), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "options", "onChange"]),
|
||||
createVNode(_sfc_main$6, {
|
||||
modelValue: unref(isRefreshing),
|
||||
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isRef(isRefreshing) ? isRefreshing.value = $event : null),
|
||||
severity: "secondary",
|
||||
onRefresh: unref(refreshDesktopTasks)
|
||||
}, null, 8, ["modelValue", "onRefresh"])
|
||||
])
|
||||
]),
|
||||
createVNode(_sfc_main$1, {
|
||||
class: "border-neutral-700 border-solid border-x-0 border-y",
|
||||
filter: filter.value,
|
||||
displayAsList: displayAsList.value,
|
||||
isRefreshing: unref(isRefreshing)
|
||||
}, null, 8, ["filter", "displayAsList", "isRefreshing"]),
|
||||
createBaseVNode("div", _hoisted_8, [
|
||||
createVNode(unref(script$1), {
|
||||
label: unref(t)("maintenance.consoleLogs"),
|
||||
icon: "pi pi-desktop",
|
||||
"icon-pos": "left",
|
||||
severity: "secondary",
|
||||
onClick: toggleConsoleDrawer
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(unref(script$1), {
|
||||
label: unref(t)("g.continue"),
|
||||
icon: "pi pi-arrow-right",
|
||||
"icon-pos": "left",
|
||||
severity: anyErrors.value ? "secondary" : "primary",
|
||||
onClick: _cache[3] || (_cache[3] = () => completeValidation()),
|
||||
loading: unref(isRefreshing)
|
||||
}, null, 8, ["label", "severity", "loading"])
|
||||
])
|
||||
]),
|
||||
createVNode(_sfc_main$7, {
|
||||
modelValue: terminalVisible.value,
|
||||
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => terminalVisible.value = $event),
|
||||
header: unref(t)("g.terminal"),
|
||||
"default-message": unref(t)("maintenance.terminalDefaultMessage")
|
||||
}, null, 8, ["modelValue", "header", "default-message"]),
|
||||
createVNode(unref(script$8))
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const MaintenanceView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1073ace1"]]);
|
||||
export {
|
||||
MaintenanceView as default
|
||||
};
|
||||
//# sourceMappingURL=MaintenanceView-BFp9KqAr.js.map
|
||||
1
comfy/web/assets/MaintenanceView-BFp9KqAr.js.map
generated
vendored
87
comfy/web/assets/MaintenanceView-DSwnnc8G.css
generated
vendored
@ -1,87 +0,0 @@
|
||||
|
||||
.task-card-ok[data-v-c3bd7658] {
|
||||
|
||||
position: absolute;
|
||||
|
||||
right: -1rem;
|
||||
|
||||
bottom: -1rem;
|
||||
|
||||
grid-column: 1 / -1;
|
||||
|
||||
grid-row: 1 / -1;
|
||||
|
||||
--tw-text-opacity: 1;
|
||||
|
||||
color: rgb(150 206 76 / var(--tw-text-opacity, 1));
|
||||
|
||||
opacity: 1;
|
||||
|
||||
transition-property: opacity;
|
||||
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
transition-duration: 150ms;
|
||||
|
||||
font-size: 4rem;
|
||||
text-shadow: 0.25rem 0 0.5rem black;
|
||||
z-index: 10;
|
||||
}
|
||||
.p-card {
|
||||
&[data-v-c3bd7658] {
|
||||
|
||||
transition-property: opacity;
|
||||
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
transition-duration: 150ms;
|
||||
|
||||
--p-card-background: var(--p-button-secondary-background);
|
||||
opacity: 0.9;
|
||||
}
|
||||
&.opacity-65[data-v-c3bd7658] {
|
||||
opacity: 0.4;
|
||||
}
|
||||
&[data-v-c3bd7658]:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
[data-v-c3bd7658] .p-card-header {
|
||||
z-index: 0;
|
||||
}
|
||||
[data-v-c3bd7658] .p-card-body {
|
||||
z-index: 1;
|
||||
flex-grow: 1;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.task-div {
|
||||
> i[data-v-c3bd7658] {
|
||||
pointer-events: none;
|
||||
}
|
||||
&:hover > i[data-v-c3bd7658] {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
[data-v-1073ace1] .p-tag {
|
||||
--p-tag-gap: 0.375rem;
|
||||
}
|
||||
.backspan[data-v-1073ace1]::before {
|
||||
position: absolute;
|
||||
margin: 0px;
|
||||
color: var(--p-text-muted-color);
|
||||
font-family: 'primeicons';
|
||||
top: -2rem;
|
||||
right: -2rem;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
display: inline-block;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
opacity: 0.02;
|
||||
font-size: min(14rem, 90vw);
|
||||
z-index: 0;
|
||||
}
|
||||
7
comfy/web/assets/ManualConfigurationView-Cq3hPfap.css
generated
vendored
@ -1,7 +0,0 @@
|
||||
|
||||
.p-tag[data-v-dc169863] {
|
||||
--p-tag-gap: 0.5rem;
|
||||
}
|
||||
.comfy-installer[data-v-dc169863] {
|
||||
margin-top: max(1rem, max(0px, calc((100vh - 42rem) * 0.5)));
|
||||
}
|
||||
74
comfy/web/assets/ManualConfigurationView-hsnBcOeR.js
generated
vendored
@ -1,74 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, I as useI18n, T as ref, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, ah as script, a8 as script$1, l as script$2, bi as electronAPI, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.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
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const ManualConfigurationView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-dc169863"]]);
|
||||
export {
|
||||
ManualConfigurationView as default
|
||||
};
|
||||
//# sourceMappingURL=ManualConfigurationView-hsnBcOeR.js.map
|
||||
1
comfy/web/assets/ManualConfigurationView-hsnBcOeR.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"ManualConfigurationView-hsnBcOeR.js","sources":["../../src/views/ManualConfigurationView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark>\n <!-- Installation Path Section -->\n <div\n class=\"comfy-installer grow flex flex-col gap-4 text-neutral-300 max-w-110\"\n >\n <h2 class=\"text-2xl font-semibold text-neutral-100\">\n {{ $t('install.manualConfiguration.title') }}\n </h2>\n\n <p class=\"m-1 text-neutral-300\">\n <Tag\n icon=\"pi pi-exclamation-triangle\"\n severity=\"warn\"\n :value=\"t('icon.exclamation-triangle')\"\n ></Tag>\n <strong class=\"ml-2\">{{\n $t('install.gpuSelection.customComfyNeedsPython')\n }}</strong>\n </p>\n\n <div>\n <p class=\"m-1 mb-4\">\n {{ $t('install.manualConfiguration.requirements') }}:\n </p>\n <ul class=\"m-0\">\n <li>{{ $t('install.gpuSelection.customManualVenv') }}</li>\n <li>{{ $t('install.gpuSelection.customInstallRequirements') }}</li>\n </ul>\n </div>\n\n <p class=\"m-1\">{{ $t('install.manualConfiguration.createVenv') }}:</p>\n\n <Panel :header=\"t('install.manualConfiguration.virtualEnvironmentPath')\">\n <span class=\"font-mono\">{{ `${basePath}${sep}.venv${sep}` }}</span>\n </Panel>\n\n <p class=\"m-1\">\n {{ $t('install.manualConfiguration.restartWhenFinished') }}\n </p>\n\n <Button\n class=\"place-self-end\"\n :label=\"t('menuLabels.Restart')\"\n severity=\"warn\"\n icon=\"pi pi-refresh\"\n @click=\"restartApp('Manual configuration complete')\"\n />\n </div>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport Panel from 'primevue/panel'\nimport Tag from 'primevue/tag'\nimport { onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { electronAPI } from '@/utils/envUtil'\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\n\nconst { t } = useI18n()\n\nconst electron = electronAPI()\n\nconst basePath = ref<string>(null)\nconst sep = ref<'\\\\' | '/'>('/')\n\nconst restartApp = (message?: string) => electron.restartApp(message)\n\nonMounted(async () => {\n basePath.value = await electron.getBasePath()\n if (basePath.value.indexOf('/') === -1) sep.value = '\\\\'\n})\n</script>\n\n<style scoped>\n.p-tag {\n --p-tag-gap: 0.5rem;\n}\n\n.comfy-installer {\n margin-top: max(1rem, max(0px, calc((100vh - 42rem) * 0.5)));\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA8DM,UAAA,EAAE,EAAE,IAAI,QAAQ;AAEtB,UAAM,WAAW,YAAY;AAEvB,UAAA,WAAW,IAAY,IAAI;AAC3B,UAAA,MAAM,IAAgB,GAAG;AAE/B,UAAM,aAAa,wBAAC,YAAqB,SAAS,WAAW,OAAO,GAAjD;AAEnB,cAAU,YAAY;AACX,eAAA,QAAQ,MAAM,SAAS,YAAY;AAC5C,UAAI,SAAS,MAAM,QAAQ,GAAG,MAAM,QAAQ,QAAQ;AAAA,IAAA,CACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
86
comfy/web/assets/MetricsConsentView-CVHnHa_u.js
generated
vendored
@ -1,86 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
import { d as defineComponent, b3 as useToast, I as useI18n, T as ref, br as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, ak as createTextVNode, k as createVNode, j as unref, bA as script, l as script$1, bi as electronAPI } from "./index-DIgj6hpb.js";
|
||||
const _hoisted_1 = { class: "h-full p-8 2xl:p-16 flex flex-col items-center justify-center" };
|
||||
const _hoisted_2 = { class: "bg-neutral-800 rounded-lg shadow-lg p-6 w-full max-w-[600px] flex flex-col gap-6" };
|
||||
const _hoisted_3 = { class: "text-3xl font-semibold text-neutral-100" };
|
||||
const _hoisted_4 = { class: "text-neutral-400" };
|
||||
const _hoisted_5 = { class: "text-neutral-400" };
|
||||
const _hoisted_6 = {
|
||||
href: "https://comfy.org/privacy",
|
||||
target: "_blank",
|
||||
class: "text-blue-400 hover:text-blue-300 underline"
|
||||
};
|
||||
const _hoisted_7 = { class: "flex items-center gap-4" };
|
||||
const _hoisted_8 = {
|
||||
id: "metricsDescription",
|
||||
class: "text-neutral-100"
|
||||
};
|
||||
const _hoisted_9 = { class: "flex pt-6 justify-end" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "MetricsConsentView",
|
||||
setup(__props) {
|
||||
const toast = useToast();
|
||||
const { t } = useI18n();
|
||||
const allowMetrics = ref(true);
|
||||
const router = useRouter();
|
||||
const isUpdating = ref(false);
|
||||
const updateConsent = /* @__PURE__ */ __name(async () => {
|
||||
isUpdating.value = true;
|
||||
try {
|
||||
await electronAPI().setMetricsConsent(allowMetrics.value);
|
||||
} catch (error) {
|
||||
toast.add({
|
||||
severity: "error",
|
||||
summary: t("install.errorUpdatingConsent"),
|
||||
detail: t("install.errorUpdatingConsentDetail"),
|
||||
life: 3e3
|
||||
});
|
||||
} finally {
|
||||
isUpdating.value = false;
|
||||
}
|
||||
router.push("/");
|
||||
}, "updateConsent");
|
||||
return (_ctx, _cache) => {
|
||||
const _component_BaseViewTemplate = _sfc_main$1;
|
||||
return openBlock(), createBlock(_component_BaseViewTemplate, { dark: "" }, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("h2", _hoisted_3, toDisplayString(_ctx.$t("install.helpImprove")), 1),
|
||||
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("install.updateConsent")), 1),
|
||||
createBaseVNode("p", _hoisted_5, [
|
||||
createTextVNode(toDisplayString(_ctx.$t("install.moreInfo")) + " ", 1),
|
||||
createBaseVNode("a", _hoisted_6, toDisplayString(_ctx.$t("install.privacyPolicy")), 1),
|
||||
_cache[1] || (_cache[1] = createTextVNode(". "))
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_7, [
|
||||
createVNode(unref(script), {
|
||||
modelValue: allowMetrics.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => allowMetrics.value = $event),
|
||||
"aria-describedby": "metricsDescription"
|
||||
}, null, 8, ["modelValue"]),
|
||||
createBaseVNode("span", _hoisted_8, toDisplayString(allowMetrics.value ? _ctx.$t("install.metricsEnabled") : _ctx.$t("install.metricsDisabled")), 1)
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_9, [
|
||||
createVNode(unref(script$1), {
|
||||
label: _ctx.$t("g.ok"),
|
||||
icon: "pi pi-check",
|
||||
loading: isUpdating.value,
|
||||
iconPos: "right",
|
||||
onClick: updateConsent
|
||||
}, null, 8, ["label", "loading"])
|
||||
])
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=MetricsConsentView-CVHnHa_u.js.map
|
||||
1
comfy/web/assets/MetricsConsentView-CVHnHa_u.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"MetricsConsentView-CVHnHa_u.js","sources":["../../src/views/MetricsConsentView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark>\n <div class=\"h-full p-8 2xl:p-16 flex flex-col items-center justify-center\">\n <div\n class=\"bg-neutral-800 rounded-lg shadow-lg p-6 w-full max-w-[600px] flex flex-col gap-6\"\n >\n <h2 class=\"text-3xl font-semibold text-neutral-100\">\n {{ $t('install.helpImprove') }}\n </h2>\n <p class=\"text-neutral-400\">\n {{ $t('install.updateConsent') }}\n </p>\n <p class=\"text-neutral-400\">\n {{ $t('install.moreInfo') }}\n <a\n href=\"https://comfy.org/privacy\"\n target=\"_blank\"\n class=\"text-blue-400 hover:text-blue-300 underline\"\n >\n {{ $t('install.privacyPolicy') }} </a\n >.\n </p>\n <div class=\"flex items-center gap-4\">\n <ToggleSwitch\n v-model=\"allowMetrics\"\n aria-describedby=\"metricsDescription\"\n />\n <span id=\"metricsDescription\" class=\"text-neutral-100\">\n {{\n allowMetrics\n ? $t('install.metricsEnabled')\n : $t('install.metricsDisabled')\n }}\n </span>\n </div>\n <div class=\"flex pt-6 justify-end\">\n <Button\n :label=\"$t('g.ok')\"\n icon=\"pi pi-check\"\n :loading=\"isUpdating\"\n iconPos=\"right\"\n @click=\"updateConsent\"\n />\n </div>\n </div>\n </div>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport ToggleSwitch from 'primevue/toggleswitch'\nimport { useToast } from 'primevue/usetoast'\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useRouter } from 'vue-router'\n\nimport { electronAPI } from '@/utils/envUtil'\n\nconst toast = useToast()\nconst { t } = useI18n()\n\nconst allowMetrics = ref(true)\nconst router = useRouter()\nconst isUpdating = ref(false)\n\nconst updateConsent = async () => {\n isUpdating.value = true\n try {\n await electronAPI().setMetricsConsent(allowMetrics.value)\n } catch (error) {\n toast.add({\n severity: 'error',\n summary: t('install.errorUpdatingConsent'),\n detail: t('install.errorUpdatingConsentDetail'),\n life: 3000\n })\n } finally {\n isUpdating.value = false\n }\n router.push('/')\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2DA,UAAM,QAAQ,SAAS;AACjB,UAAA,EAAE,EAAE,IAAI,QAAQ;AAEhB,UAAA,eAAe,IAAI,IAAI;AAC7B,UAAM,SAAS,UAAU;AACnB,UAAA,aAAa,IAAI,KAAK;AAE5B,UAAM,gBAAgB,mCAAY;AAChC,iBAAW,QAAQ;AACf,UAAA;AACF,cAAM,YAAY,EAAE,kBAAkB,aAAa,KAAK;AAAA,eACjD,OAAO;AACd,cAAM,IAAI;AAAA,UACR,UAAU;AAAA,UACV,SAAS,EAAE,8BAA8B;AAAA,UACzC,QAAQ,EAAE,oCAAoC;AAAA,UAC9C,MAAM;AAAA,QAAA,CACP;AAAA,MAAA,UACD;AACA,mBAAW,QAAQ;AAAA,MAAA;AAErB,aAAO,KAAK,GAAG;AAAA,IACjB,GAfsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
19
comfy/web/assets/NotSupportedView-BiyVuLfX.css
generated
vendored
@ -1,19 +0,0 @@
|
||||
|
||||
.sad-container {
|
||||
&[data-v-ebb20958] {
|
||||
display: grid;
|
||||
align-items: center;
|
||||
justify-content: space-evenly;
|
||||
grid-template-columns: 25rem 1fr;
|
||||
}
|
||||
&[data-v-ebb20958] > * {
|
||||
grid-row: 1;
|
||||
}
|
||||
}
|
||||
.sad-text[data-v-ebb20958] {
|
||||
grid-column: 1/3;
|
||||
}
|
||||
.sad-girl[data-v-ebb20958] {
|
||||
grid-column: 2/3;
|
||||
width: min(75vw, 100vh);
|
||||
}
|
||||
86
comfy/web/assets/NotSupportedView-CMCKSnEd.js
generated
vendored
@ -1,86 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, br as useRouter, r as resolveDirective, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, i as withDirectives, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href;
|
||||
const _hoisted_1 = { class: "sad-container" };
|
||||
const _hoisted_2 = { class: "no-drag sad-text flex items-center" };
|
||||
const _hoisted_3 = { class: "flex flex-col gap-8 p-8 min-w-110" };
|
||||
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 _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, [
|
||||
_cache[0] || (_cache[0] = createBaseVNode("img", {
|
||||
class: "sad-girl",
|
||||
src: _imports_0,
|
||||
alt: "Sad girl illustration"
|
||||
}, null, -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")]
|
||||
])
|
||||
])
|
||||
])
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const NotSupportedView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ebb20958"]]);
|
||||
export {
|
||||
NotSupportedView as default
|
||||
};
|
||||
//# sourceMappingURL=NotSupportedView-CMCKSnEd.js.map
|
||||
1
comfy/web/assets/NotSupportedView-CMCKSnEd.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"NotSupportedView-CMCKSnEd.js","sources":["../../../../../../assets/images/sad_girl.png","../../src/views/NotSupportedView.vue"],"sourcesContent":["export default \"__VITE_PUBLIC_ASSET__b82952e7__\"","<template>\n <BaseViewTemplate>\n <div class=\"sad-container\">\n <!-- Right side image -->\n <img\n class=\"sad-girl\"\n src=\"/assets/images/sad_girl.png\"\n alt=\"Sad girl illustration\"\n />\n\n <div class=\"no-drag sad-text flex items-center\">\n <div class=\"flex flex-col gap-8 p-8 min-w-110\">\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 </div>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\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\n<style scoped>\n.sad-container {\n @apply grid items-center justify-evenly;\n grid-template-columns: 25rem 1fr;\n\n & > * {\n grid-row: 1;\n }\n}\n\n.sad-text {\n grid-column: 1/3;\n}\n\n.sad-girl {\n grid-column: 2/3;\n width: min(75vw, 100vh);\n}\n</style>\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,MACF;AAAA,IACF,GALiB;AAOjB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAChE,GAFoB;AAIpB,UAAM,SAAS,UAAU;AACzB,UAAM,oBAAoB,6BAAM;AAC9B,aAAO,KAAK,UAAU;AAAA,IACxB,GAF0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
156
comfy/web/assets/ServerConfigPanel-di9WinBR.js
generated
vendored
@ -1,156 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { o as openBlock, f as createElementBlock, m as createBaseVNode, H as markRaw, d as defineComponent, a as useSettingStore, ar as storeToRefs, N as watch, dU as useCopyToClipboard, I as useI18n, y as createBlock, z as withCtx, j as unref, bw as script, E as toDisplayString, D as renderList, F as Fragment, k as createVNode, l as script$1, B as createCommentVNode, bu as script$2, dV as FormItem, dK as _sfc_main$1, bi as electronAPI } from "./index-DIgj6hpb.js";
|
||||
import { u as useServerConfigStore } from "./serverConfigStore-3t3U367D.js";
|
||||
const _hoisted_1$1 = {
|
||||
viewBox: "0 0 24 24",
|
||||
width: "1.2em",
|
||||
height: "1.2em"
|
||||
};
|
||||
function render(_ctx, _cache) {
|
||||
return openBlock(), createElementBlock("svg", _hoisted_1$1, _cache[0] || (_cache[0] = [
|
||||
createBaseVNode("path", {
|
||||
fill: "none",
|
||||
stroke: "currentColor",
|
||||
"stroke-linecap": "round",
|
||||
"stroke-linejoin": "round",
|
||||
"stroke-width": "2",
|
||||
d: "m4 17l6-6l-6-6m8 14h8"
|
||||
}, null, -1)
|
||||
]));
|
||||
}
|
||||
__name(render, "render");
|
||||
const __unplugin_components_0 = markRaw({ name: "lucide-terminal", render });
|
||||
const _hoisted_1 = { class: "flex flex-col gap-2" };
|
||||
const _hoisted_2 = { class: "flex justify-end gap-2" };
|
||||
const _hoisted_3 = { class: "flex items-center justify-between" };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "ServerConfigPanel",
|
||||
setup(__props) {
|
||||
const settingStore = useSettingStore();
|
||||
const serverConfigStore = useServerConfigStore();
|
||||
const {
|
||||
serverConfigsByCategory,
|
||||
serverConfigValues,
|
||||
launchArgs,
|
||||
commandLineArgs,
|
||||
modifiedConfigs
|
||||
} = storeToRefs(serverConfigStore);
|
||||
const revertChanges = /* @__PURE__ */ __name(() => {
|
||||
serverConfigStore.revertChanges();
|
||||
}, "revertChanges");
|
||||
const restartApp = /* @__PURE__ */ __name(() => {
|
||||
electronAPI().restartApp();
|
||||
}, "restartApp");
|
||||
watch(launchArgs, (newVal) => {
|
||||
settingStore.set("Comfy.Server.LaunchArgs", newVal);
|
||||
});
|
||||
watch(serverConfigValues, (newVal) => {
|
||||
settingStore.set("Comfy.Server.ServerConfigValues", newVal);
|
||||
});
|
||||
const { copyToClipboard } = useCopyToClipboard();
|
||||
const copyCommandLineArgs = /* @__PURE__ */ __name(async () => {
|
||||
await copyToClipboard(commandLineArgs.value);
|
||||
}, "copyCommandLineArgs");
|
||||
const { t } = useI18n();
|
||||
const translateItem = /* @__PURE__ */ __name((item) => {
|
||||
return {
|
||||
...item,
|
||||
name: t(`serverConfigItems.${item.id}.name`, item.name),
|
||||
tooltip: item.tooltip ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip) : void 0
|
||||
};
|
||||
}, "translateItem");
|
||||
return (_ctx, _cache) => {
|
||||
const _component_i_lucide58terminal = __unplugin_components_0;
|
||||
return openBlock(), createBlock(_sfc_main$1, {
|
||||
value: "Server-Config",
|
||||
class: "server-config-panel"
|
||||
}, {
|
||||
header: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_1, [
|
||||
unref(modifiedConfigs).length > 0 ? (openBlock(), createBlock(unref(script), {
|
||||
key: 0,
|
||||
severity: "info",
|
||||
"pt:text": "w-full"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("p", null, toDisplayString(_ctx.$t("serverConfig.modifiedConfigs")), 1),
|
||||
createBaseVNode("ul", null, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(modifiedConfigs), (config) => {
|
||||
return openBlock(), createElementBlock("li", {
|
||||
key: config.id
|
||||
}, toDisplayString(config.name) + ": " + toDisplayString(config.initialValue) + " → " + toDisplayString(config.value), 1);
|
||||
}), 128))
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createVNode(unref(script$1), {
|
||||
label: _ctx.$t("serverConfig.revertChanges"),
|
||||
onClick: revertChanges,
|
||||
outlined: ""
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(unref(script$1), {
|
||||
label: _ctx.$t("serverConfig.restart"),
|
||||
onClick: restartApp,
|
||||
outlined: "",
|
||||
severity: "danger"
|
||||
}, null, 8, ["label"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true),
|
||||
unref(commandLineArgs) ? (openBlock(), createBlock(unref(script), {
|
||||
key: 1,
|
||||
severity: "secondary",
|
||||
"pt:text": "w-full"
|
||||
}, {
|
||||
icon: withCtx(() => [
|
||||
createVNode(_component_i_lucide58terminal, { class: "text-xl font-bold" })
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createBaseVNode("p", null, toDisplayString(unref(commandLineArgs)), 1),
|
||||
createVNode(unref(script$1), {
|
||||
icon: "pi pi-clipboard",
|
||||
onClick: copyCommandLineArgs,
|
||||
severity: "secondary",
|
||||
text: ""
|
||||
})
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true)
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(serverConfigsByCategory)), ([label, items], i) => {
|
||||
return openBlock(), createElementBlock("div", { key: label }, [
|
||||
i > 0 ? (openBlock(), createBlock(unref(script$2), { key: 0 })) : createCommentVNode("", true),
|
||||
createBaseVNode("h3", null, toDisplayString(_ctx.$t(`serverConfigCategories.${label}`, label)), 1),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
key: item.name,
|
||||
class: "mb-4"
|
||||
}, [
|
||||
createVNode(FormItem, {
|
||||
item: translateItem(item),
|
||||
formValue: item.value,
|
||||
"onUpdate:formValue": /* @__PURE__ */ __name(($event) => item.value = $event, "onUpdate:formValue"),
|
||||
id: item.id,
|
||||
labelClass: {
|
||||
"text-highlight": item.initialValue !== item.value
|
||||
}
|
||||
}, null, 8, ["item", "formValue", "onUpdate:formValue", "id", "labelClass"])
|
||||
]);
|
||||
}), 128))
|
||||
]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=ServerConfigPanel-di9WinBR.js.map
|
||||
1
comfy/web/assets/ServerConfigPanel-di9WinBR.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"ServerConfigPanel-di9WinBR.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 v-for=\"item in items\" :key=\"item.name\" class=\"mb-4\">\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 { storeToRefs } from 'pinia'\nimport Button from 'primevue/button'\nimport Divider from 'primevue/divider'\nimport Message from 'primevue/message'\nimport { watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport FormItem from '@/components/common/FormItem.vue'\nimport { useCopyToClipboard } from '@/composables/useCopyToClipboard'\nimport type { ServerConfig } from '@/constants/serverConfig'\nimport { useServerConfigStore } from '@/stores/serverConfigStore'\nimport { useSettingStore } from '@/stores/settingStore'\nimport type { FormItem as FormItemType } from '@/types/settingTypes'\nimport { electronAPI } from '@/utils/envUtil'\n\nimport PanelTemplate from './PanelTemplate.vue'\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFA,UAAM,eAAe,gBAAgB;AACrC,UAAM,oBAAoB,qBAAqB;AACzC,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,YAAY,iBAAiB;AAEjC,UAAM,gBAAgB,6BAAM;AAC1B,wBAAkB,cAAc;AAAA,IAClC,GAFsB;AAItB,UAAM,aAAa,6BAAM;AACvB,kBAAA,EAAc,WAAW;AAAA,IAC3B,GAFmB;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,gBAAgB,IAAI,mBAAmB;AAC/C,UAAM,sBAAsB,mCAAY;AAChC,YAAA,gBAAgB,gBAAgB,KAAK;AAAA,IAC7C,GAF4B;AAItB,UAAA,EAAE,EAAE,IAAI,QAAQ;AAChB,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,MACN;AAAA,IACF,GARsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
5
comfy/web/assets/ServerStartView-BLlSvhJ0.css
generated
vendored
@ -1,5 +0,0 @@
|
||||
|
||||
[data-v-32a7f48f] .xterm-helper-textarea {
|
||||
/* Hide this as it moves all over when uv is running */
|
||||
display: none;
|
||||
}
|
||||
100
comfy/web/assets/ServerStartView-CvFWnVGg.js
generated
vendored
@ -1,100 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, I as useI18n, T as ref, bx as ProgressStatus, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, ak as createTextVNode, E as toDisplayString, j as unref, f as createElementBlock, B as createCommentVNode, k as createVNode, l as script, i as withDirectives, v as vShow, by as BaseTerminal, bi as electronAPI, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
const _hoisted_1 = { class: "flex flex-col w-full h-full items-center" };
|
||||
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, autoRows: true, autoCols: true });
|
||||
electron.onLogMessage((message) => {
|
||||
terminal.write(message);
|
||||
});
|
||||
terminal.options.cursorBlink = false;
|
||||
terminal.options.disableStdin = true;
|
||||
terminal.options.cursorInactiveStyle = "block";
|
||||
}, "terminalCreated");
|
||||
const troubleshoot = /* @__PURE__ */ __name(() => electron.startTroubleshooting(), "troubleshoot");
|
||||
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("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-wrench",
|
||||
label: unref(t)("serverStart.troubleshoot"),
|
||||
onClick: troubleshoot
|
||||
}, 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-32a7f48f"]]);
|
||||
export {
|
||||
ServerStartView as default
|
||||
};
|
||||
//# sourceMappingURL=ServerStartView-CvFWnVGg.js.map
|
||||
1
comfy/web/assets/ServerStartView-CvFWnVGg.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"ServerStartView-CvFWnVGg.js","sources":["../../src/views/ServerStartView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark class=\"flex-col\">\n <div class=\"flex flex-col w-full h-full items-center\">\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-wrench\"\n :label=\"t('serverStart.troubleshoot')\"\n @click=\"troubleshoot\"\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 </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { ProgressStatus } from '@comfyorg/comfyui-electron-types'\nimport { Terminal } from '@xterm/xterm'\nimport Button from 'primevue/button'\nimport { Ref, onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport BaseTerminal from '@/components/bottomPanel/tabs/terminal/BaseTerminal.vue'\nimport type { useTerminal } from '@/composables/bottomPanelTabs/useTerminal'\nimport { electronAPI } from '@/utils/envUtil'\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\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, autoRows: true, autoCols: 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 troubleshoot = () => electron.startTroubleshooting()\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":";;;;;;;;;;;;;;;AAyDA,UAAM,WAAW,YAAY;AACvB,UAAA,EAAE,EAAE,IAAI,QAAQ;AAEhB,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,IACpB,GANuB;AAQvB,UAAM,kBAAkB,wBACtB,EAAE,UAAU,YAAA,GACZ,SACG;AACK,cAAA;AAER,kBAAY,EAAE,MAAM,UAAU,MAAM,UAAU,MAAM;AAC3C,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,IACzC,GAdwB;AAgBlB,UAAA,eAAe,6BAAM,SAAS,qBAAqB,GAApC;AACrB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAChE,GAFoB;AAGd,UAAA,WAAW,6BAAM,SAAS,eAAe,GAA9B;AAEjB,cAAU,YAAY;AACpB,eAAS,UAAU;AACnB,eAAS,iBAAiB,cAAc;AACxB,sBAAA,QAAQ,MAAM,SAAS,mBAAmB;AAAA,IAAA,CAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
676
comfy/web/assets/TerminalOutputDrawer-B_NZxAv8.js
generated
vendored
@ -1,676 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { bV as commonjsGlobal, bW as getDefaultExportFromCjs, H as markRaw, bX as xtermExports, p as onMounted, bU as onUnmounted, d as defineComponent, bF as mergeModels, bz as useModel, o as openBlock, y as createBlock, z as withCtx, k as createVNode, by as BaseTerminal, j as unref, bi as electronAPI } from "./index-DIgj6hpb.js";
|
||||
import { s as script } from "./index-C_ACzX5-.js";
|
||||
var addonSerialize$2 = { exports: {} };
|
||||
var addonSerialize = addonSerialize$2.exports;
|
||||
(function(module, exports) {
|
||||
!function(e, t) {
|
||||
true ? module.exports = t() : false ? (void 0)([], t) : true ? exports.SerializeAddon = t() : e.SerializeAddon = t();
|
||||
}(commonjsGlobal, () => (() => {
|
||||
"use strict";
|
||||
var e = { 930: (e2, t2, s2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.ColorContrastCache = void 0;
|
||||
const r2 = s2(485);
|
||||
t2.ColorContrastCache = class {
|
||||
constructor() {
|
||||
this._color = new r2.TwoKeyMap(), this._css = new r2.TwoKeyMap();
|
||||
}
|
||||
setCss(e3, t3, s3) {
|
||||
this._css.set(e3, t3, s3);
|
||||
}
|
||||
getCss(e3, t3) {
|
||||
return this._css.get(e3, t3);
|
||||
}
|
||||
setColor(e3, t3, s3) {
|
||||
this._color.set(e3, t3, s3);
|
||||
}
|
||||
getColor(e3, t3) {
|
||||
return this._color.get(e3, t3);
|
||||
}
|
||||
clear() {
|
||||
this._color.clear(), this._css.clear();
|
||||
}
|
||||
};
|
||||
}, 997: function(e2, t2, s2) {
|
||||
var r2 = this && this.__decorate || function(e3, t3, s3, r3) {
|
||||
var o2, i2 = arguments.length, n2 = i2 < 3 ? t3 : null === r3 ? r3 = Object.getOwnPropertyDescriptor(t3, s3) : r3;
|
||||
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) n2 = Reflect.decorate(e3, t3, s3, r3);
|
||||
else for (var l2 = e3.length - 1; l2 >= 0; l2--) (o2 = e3[l2]) && (n2 = (i2 < 3 ? o2(n2) : i2 > 3 ? o2(t3, s3, n2) : o2(t3, s3)) || n2);
|
||||
return i2 > 3 && n2 && Object.defineProperty(t3, s3, n2), n2;
|
||||
}, o = this && this.__param || function(e3, t3) {
|
||||
return function(s3, r3) {
|
||||
t3(s3, r3, e3);
|
||||
};
|
||||
};
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.ThemeService = t2.DEFAULT_ANSI_COLORS = void 0;
|
||||
const i = s2(930), n = s2(160), l = s2(345), a = s2(859), c = s2(97), h = n.css.toColor("#ffffff"), u = n.css.toColor("#000000"), _ = n.css.toColor("#ffffff"), d = n.css.toColor("#000000"), C = { css: "rgba(255, 255, 255, 0.3)", rgba: 4294967117 };
|
||||
t2.DEFAULT_ANSI_COLORS = Object.freeze((() => {
|
||||
const e3 = [n.css.toColor("#2e3436"), n.css.toColor("#cc0000"), n.css.toColor("#4e9a06"), n.css.toColor("#c4a000"), n.css.toColor("#3465a4"), n.css.toColor("#75507b"), n.css.toColor("#06989a"), n.css.toColor("#d3d7cf"), n.css.toColor("#555753"), n.css.toColor("#ef2929"), n.css.toColor("#8ae234"), n.css.toColor("#fce94f"), n.css.toColor("#729fcf"), n.css.toColor("#ad7fa8"), n.css.toColor("#34e2e2"), n.css.toColor("#eeeeec")], t3 = [0, 95, 135, 175, 215, 255];
|
||||
for (let s3 = 0; s3 < 216; s3++) {
|
||||
const r3 = t3[s3 / 36 % 6 | 0], o2 = t3[s3 / 6 % 6 | 0], i2 = t3[s3 % 6];
|
||||
e3.push({ css: n.channels.toCss(r3, o2, i2), rgba: n.channels.toRgba(r3, o2, i2) });
|
||||
}
|
||||
for (let t4 = 0; t4 < 24; t4++) {
|
||||
const s3 = 8 + 10 * t4;
|
||||
e3.push({ css: n.channels.toCss(s3, s3, s3), rgba: n.channels.toRgba(s3, s3, s3) });
|
||||
}
|
||||
return e3;
|
||||
})());
|
||||
let f = t2.ThemeService = class extends a.Disposable {
|
||||
get colors() {
|
||||
return this._colors;
|
||||
}
|
||||
constructor(e3) {
|
||||
super(), this._optionsService = e3, this._contrastCache = new i.ColorContrastCache(), this._halfContrastCache = new i.ColorContrastCache(), this._onChangeColors = this.register(new l.EventEmitter()), this.onChangeColors = this._onChangeColors.event, this._colors = { foreground: h, background: u, cursor: _, cursorAccent: d, selectionForeground: void 0, selectionBackgroundTransparent: C, selectionBackgroundOpaque: n.color.blend(u, C), selectionInactiveBackgroundTransparent: C, selectionInactiveBackgroundOpaque: n.color.blend(u, C), ansi: t2.DEFAULT_ANSI_COLORS.slice(), contrastCache: this._contrastCache, halfContrastCache: this._halfContrastCache }, this._updateRestoreColors(), this._setTheme(this._optionsService.rawOptions.theme), this.register(this._optionsService.onSpecificOptionChange("minimumContrastRatio", () => this._contrastCache.clear())), this.register(this._optionsService.onSpecificOptionChange("theme", () => this._setTheme(this._optionsService.rawOptions.theme)));
|
||||
}
|
||||
_setTheme(e3 = {}) {
|
||||
const s3 = this._colors;
|
||||
if (s3.foreground = g(e3.foreground, h), s3.background = g(e3.background, u), s3.cursor = g(e3.cursor, _), s3.cursorAccent = g(e3.cursorAccent, d), s3.selectionBackgroundTransparent = g(e3.selectionBackground, C), s3.selectionBackgroundOpaque = n.color.blend(s3.background, s3.selectionBackgroundTransparent), s3.selectionInactiveBackgroundTransparent = g(e3.selectionInactiveBackground, s3.selectionBackgroundTransparent), s3.selectionInactiveBackgroundOpaque = n.color.blend(s3.background, s3.selectionInactiveBackgroundTransparent), s3.selectionForeground = e3.selectionForeground ? g(e3.selectionForeground, n.NULL_COLOR) : void 0, s3.selectionForeground === n.NULL_COLOR && (s3.selectionForeground = void 0), n.color.isOpaque(s3.selectionBackgroundTransparent)) {
|
||||
const e4 = 0.3;
|
||||
s3.selectionBackgroundTransparent = n.color.opacity(s3.selectionBackgroundTransparent, e4);
|
||||
}
|
||||
if (n.color.isOpaque(s3.selectionInactiveBackgroundTransparent)) {
|
||||
const e4 = 0.3;
|
||||
s3.selectionInactiveBackgroundTransparent = n.color.opacity(s3.selectionInactiveBackgroundTransparent, e4);
|
||||
}
|
||||
if (s3.ansi = t2.DEFAULT_ANSI_COLORS.slice(), s3.ansi[0] = g(e3.black, t2.DEFAULT_ANSI_COLORS[0]), s3.ansi[1] = g(e3.red, t2.DEFAULT_ANSI_COLORS[1]), s3.ansi[2] = g(e3.green, t2.DEFAULT_ANSI_COLORS[2]), s3.ansi[3] = g(e3.yellow, t2.DEFAULT_ANSI_COLORS[3]), s3.ansi[4] = g(e3.blue, t2.DEFAULT_ANSI_COLORS[4]), s3.ansi[5] = g(e3.magenta, t2.DEFAULT_ANSI_COLORS[5]), s3.ansi[6] = g(e3.cyan, t2.DEFAULT_ANSI_COLORS[6]), s3.ansi[7] = g(e3.white, t2.DEFAULT_ANSI_COLORS[7]), s3.ansi[8] = g(e3.brightBlack, t2.DEFAULT_ANSI_COLORS[8]), s3.ansi[9] = g(e3.brightRed, t2.DEFAULT_ANSI_COLORS[9]), s3.ansi[10] = g(e3.brightGreen, t2.DEFAULT_ANSI_COLORS[10]), s3.ansi[11] = g(e3.brightYellow, t2.DEFAULT_ANSI_COLORS[11]), s3.ansi[12] = g(e3.brightBlue, t2.DEFAULT_ANSI_COLORS[12]), s3.ansi[13] = g(e3.brightMagenta, t2.DEFAULT_ANSI_COLORS[13]), s3.ansi[14] = g(e3.brightCyan, t2.DEFAULT_ANSI_COLORS[14]), s3.ansi[15] = g(e3.brightWhite, t2.DEFAULT_ANSI_COLORS[15]), e3.extendedAnsi) {
|
||||
const r3 = Math.min(s3.ansi.length - 16, e3.extendedAnsi.length);
|
||||
for (let o2 = 0; o2 < r3; o2++) s3.ansi[o2 + 16] = g(e3.extendedAnsi[o2], t2.DEFAULT_ANSI_COLORS[o2 + 16]);
|
||||
}
|
||||
this._contrastCache.clear(), this._halfContrastCache.clear(), this._updateRestoreColors(), this._onChangeColors.fire(this.colors);
|
||||
}
|
||||
restoreColor(e3) {
|
||||
this._restoreColor(e3), this._onChangeColors.fire(this.colors);
|
||||
}
|
||||
_restoreColor(e3) {
|
||||
if (void 0 !== e3) switch (e3) {
|
||||
case 256:
|
||||
this._colors.foreground = this._restoreColors.foreground;
|
||||
break;
|
||||
case 257:
|
||||
this._colors.background = this._restoreColors.background;
|
||||
break;
|
||||
case 258:
|
||||
this._colors.cursor = this._restoreColors.cursor;
|
||||
break;
|
||||
default:
|
||||
this._colors.ansi[e3] = this._restoreColors.ansi[e3];
|
||||
}
|
||||
else for (let e4 = 0; e4 < this._restoreColors.ansi.length; ++e4) this._colors.ansi[e4] = this._restoreColors.ansi[e4];
|
||||
}
|
||||
modifyColors(e3) {
|
||||
e3(this._colors), this._onChangeColors.fire(this.colors);
|
||||
}
|
||||
_updateRestoreColors() {
|
||||
this._restoreColors = { foreground: this._colors.foreground, background: this._colors.background, cursor: this._colors.cursor, ansi: this._colors.ansi.slice() };
|
||||
}
|
||||
};
|
||||
function g(e3, t3) {
|
||||
if (void 0 !== e3) try {
|
||||
return n.css.toColor(e3);
|
||||
} catch {
|
||||
}
|
||||
return t3;
|
||||
}
|
||||
__name(g, "g");
|
||||
t2.ThemeService = f = r2([o(0, c.IOptionsService)], f);
|
||||
}, 160: (e2, t2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.contrastRatio = t2.toPaddedHex = t2.rgba = t2.rgb = t2.css = t2.color = t2.channels = t2.NULL_COLOR = void 0;
|
||||
let s2 = 0, r2 = 0, o = 0, i = 0;
|
||||
var n, l, a, c, h;
|
||||
function u(e3) {
|
||||
const t3 = e3.toString(16);
|
||||
return t3.length < 2 ? "0" + t3 : t3;
|
||||
}
|
||||
__name(u, "u");
|
||||
function _(e3, t3) {
|
||||
return e3 < t3 ? (t3 + 0.05) / (e3 + 0.05) : (e3 + 0.05) / (t3 + 0.05);
|
||||
}
|
||||
__name(_, "_");
|
||||
t2.NULL_COLOR = { css: "#00000000", rgba: 0 }, function(e3) {
|
||||
e3.toCss = function(e4, t3, s3, r3) {
|
||||
return void 0 !== r3 ? `#${u(e4)}${u(t3)}${u(s3)}${u(r3)}` : `#${u(e4)}${u(t3)}${u(s3)}`;
|
||||
}, e3.toRgba = function(e4, t3, s3, r3 = 255) {
|
||||
return (e4 << 24 | t3 << 16 | s3 << 8 | r3) >>> 0;
|
||||
}, e3.toColor = function(t3, s3, r3, o2) {
|
||||
return { css: e3.toCss(t3, s3, r3, o2), rgba: e3.toRgba(t3, s3, r3, o2) };
|
||||
};
|
||||
}(n || (t2.channels = n = {})), function(e3) {
|
||||
function t3(e4, t4) {
|
||||
return i = Math.round(255 * t4), [s2, r2, o] = h.toChannels(e4.rgba), { css: n.toCss(s2, r2, o, i), rgba: n.toRgba(s2, r2, o, i) };
|
||||
}
|
||||
__name(t3, "t");
|
||||
e3.blend = function(e4, t4) {
|
||||
if (i = (255 & t4.rgba) / 255, 1 === i) return { css: t4.css, rgba: t4.rgba };
|
||||
const l2 = t4.rgba >> 24 & 255, a2 = t4.rgba >> 16 & 255, c2 = t4.rgba >> 8 & 255, h2 = e4.rgba >> 24 & 255, u2 = e4.rgba >> 16 & 255, _2 = e4.rgba >> 8 & 255;
|
||||
return s2 = h2 + Math.round((l2 - h2) * i), r2 = u2 + Math.round((a2 - u2) * i), o = _2 + Math.round((c2 - _2) * i), { css: n.toCss(s2, r2, o), rgba: n.toRgba(s2, r2, o) };
|
||||
}, e3.isOpaque = function(e4) {
|
||||
return 255 == (255 & e4.rgba);
|
||||
}, e3.ensureContrastRatio = function(e4, t4, s3) {
|
||||
const r3 = h.ensureContrastRatio(e4.rgba, t4.rgba, s3);
|
||||
if (r3) return n.toColor(r3 >> 24 & 255, r3 >> 16 & 255, r3 >> 8 & 255);
|
||||
}, e3.opaque = function(e4) {
|
||||
const t4 = (255 | e4.rgba) >>> 0;
|
||||
return [s2, r2, o] = h.toChannels(t4), { css: n.toCss(s2, r2, o), rgba: t4 };
|
||||
}, e3.opacity = t3, e3.multiplyOpacity = function(e4, s3) {
|
||||
return i = 255 & e4.rgba, t3(e4, i * s3 / 255);
|
||||
}, e3.toColorRGB = function(e4) {
|
||||
return [e4.rgba >> 24 & 255, e4.rgba >> 16 & 255, e4.rgba >> 8 & 255];
|
||||
};
|
||||
}(l || (t2.color = l = {})), function(e3) {
|
||||
let t3, l2;
|
||||
try {
|
||||
const e4 = document.createElement("canvas");
|
||||
e4.width = 1, e4.height = 1;
|
||||
const s3 = e4.getContext("2d", { willReadFrequently: true });
|
||||
s3 && (t3 = s3, t3.globalCompositeOperation = "copy", l2 = t3.createLinearGradient(0, 0, 1, 1));
|
||||
} catch {
|
||||
}
|
||||
e3.toColor = function(e4) {
|
||||
if (e4.match(/#[\da-f]{3,8}/i)) switch (e4.length) {
|
||||
case 4:
|
||||
return s2 = parseInt(e4.slice(1, 2).repeat(2), 16), r2 = parseInt(e4.slice(2, 3).repeat(2), 16), o = parseInt(e4.slice(3, 4).repeat(2), 16), n.toColor(s2, r2, o);
|
||||
case 5:
|
||||
return s2 = parseInt(e4.slice(1, 2).repeat(2), 16), r2 = parseInt(e4.slice(2, 3).repeat(2), 16), o = parseInt(e4.slice(3, 4).repeat(2), 16), i = parseInt(e4.slice(4, 5).repeat(2), 16), n.toColor(s2, r2, o, i);
|
||||
case 7:
|
||||
return { css: e4, rgba: (parseInt(e4.slice(1), 16) << 8 | 255) >>> 0 };
|
||||
case 9:
|
||||
return { css: e4, rgba: parseInt(e4.slice(1), 16) >>> 0 };
|
||||
}
|
||||
const a2 = e4.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);
|
||||
if (a2) return s2 = parseInt(a2[1]), r2 = parseInt(a2[2]), o = parseInt(a2[3]), i = Math.round(255 * (void 0 === a2[5] ? 1 : parseFloat(a2[5]))), n.toColor(s2, r2, o, i);
|
||||
if (!t3 || !l2) throw new Error("css.toColor: Unsupported css format");
|
||||
if (t3.fillStyle = l2, t3.fillStyle = e4, "string" != typeof t3.fillStyle) throw new Error("css.toColor: Unsupported css format");
|
||||
if (t3.fillRect(0, 0, 1, 1), [s2, r2, o, i] = t3.getImageData(0, 0, 1, 1).data, 255 !== i) throw new Error("css.toColor: Unsupported css format");
|
||||
return { rgba: n.toRgba(s2, r2, o, i), css: e4 };
|
||||
};
|
||||
}(a || (t2.css = a = {})), function(e3) {
|
||||
function t3(e4, t4, s3) {
|
||||
const r3 = e4 / 255, o2 = t4 / 255, i2 = s3 / 255;
|
||||
return 0.2126 * (r3 <= 0.03928 ? r3 / 12.92 : Math.pow((r3 + 0.055) / 1.055, 2.4)) + 0.7152 * (o2 <= 0.03928 ? o2 / 12.92 : Math.pow((o2 + 0.055) / 1.055, 2.4)) + 0.0722 * (i2 <= 0.03928 ? i2 / 12.92 : Math.pow((i2 + 0.055) / 1.055, 2.4));
|
||||
}
|
||||
__name(t3, "t");
|
||||
e3.relativeLuminance = function(e4) {
|
||||
return t3(e4 >> 16 & 255, e4 >> 8 & 255, 255 & e4);
|
||||
}, e3.relativeLuminance2 = t3;
|
||||
}(c || (t2.rgb = c = {})), function(e3) {
|
||||
function t3(e4, t4, s3) {
|
||||
const r3 = e4 >> 24 & 255, o2 = e4 >> 16 & 255, i2 = e4 >> 8 & 255;
|
||||
let n2 = t4 >> 24 & 255, l3 = t4 >> 16 & 255, a2 = t4 >> 8 & 255, h2 = _(c.relativeLuminance2(n2, l3, a2), c.relativeLuminance2(r3, o2, i2));
|
||||
for (; h2 < s3 && (n2 > 0 || l3 > 0 || a2 > 0); ) n2 -= Math.max(0, Math.ceil(0.1 * n2)), l3 -= Math.max(0, Math.ceil(0.1 * l3)), a2 -= Math.max(0, Math.ceil(0.1 * a2)), h2 = _(c.relativeLuminance2(n2, l3, a2), c.relativeLuminance2(r3, o2, i2));
|
||||
return (n2 << 24 | l3 << 16 | a2 << 8 | 255) >>> 0;
|
||||
}
|
||||
__name(t3, "t");
|
||||
function l2(e4, t4, s3) {
|
||||
const r3 = e4 >> 24 & 255, o2 = e4 >> 16 & 255, i2 = e4 >> 8 & 255;
|
||||
let n2 = t4 >> 24 & 255, l3 = t4 >> 16 & 255, a2 = t4 >> 8 & 255, h2 = _(c.relativeLuminance2(n2, l3, a2), c.relativeLuminance2(r3, o2, i2));
|
||||
for (; h2 < s3 && (n2 < 255 || l3 < 255 || a2 < 255); ) n2 = Math.min(255, n2 + Math.ceil(0.1 * (255 - n2))), l3 = Math.min(255, l3 + Math.ceil(0.1 * (255 - l3))), a2 = Math.min(255, a2 + Math.ceil(0.1 * (255 - a2))), h2 = _(c.relativeLuminance2(n2, l3, a2), c.relativeLuminance2(r3, o2, i2));
|
||||
return (n2 << 24 | l3 << 16 | a2 << 8 | 255) >>> 0;
|
||||
}
|
||||
__name(l2, "l");
|
||||
e3.blend = function(e4, t4) {
|
||||
if (i = (255 & t4) / 255, 1 === i) return t4;
|
||||
const l3 = t4 >> 24 & 255, a2 = t4 >> 16 & 255, c2 = t4 >> 8 & 255, h2 = e4 >> 24 & 255, u2 = e4 >> 16 & 255, _2 = e4 >> 8 & 255;
|
||||
return s2 = h2 + Math.round((l3 - h2) * i), r2 = u2 + Math.round((a2 - u2) * i), o = _2 + Math.round((c2 - _2) * i), n.toRgba(s2, r2, o);
|
||||
}, e3.ensureContrastRatio = function(e4, s3, r3) {
|
||||
const o2 = c.relativeLuminance(e4 >> 8), i2 = c.relativeLuminance(s3 >> 8);
|
||||
if (_(o2, i2) < r3) {
|
||||
if (i2 < o2) {
|
||||
const i3 = t3(e4, s3, r3), n3 = _(o2, c.relativeLuminance(i3 >> 8));
|
||||
if (n3 < r3) {
|
||||
const t4 = l2(e4, s3, r3);
|
||||
return n3 > _(o2, c.relativeLuminance(t4 >> 8)) ? i3 : t4;
|
||||
}
|
||||
return i3;
|
||||
}
|
||||
const n2 = l2(e4, s3, r3), a2 = _(o2, c.relativeLuminance(n2 >> 8));
|
||||
if (a2 < r3) {
|
||||
const i3 = t3(e4, s3, r3);
|
||||
return a2 > _(o2, c.relativeLuminance(i3 >> 8)) ? n2 : i3;
|
||||
}
|
||||
return n2;
|
||||
}
|
||||
}, e3.reduceLuminance = t3, e3.increaseLuminance = l2, e3.toChannels = function(e4) {
|
||||
return [e4 >> 24 & 255, e4 >> 16 & 255, e4 >> 8 & 255, 255 & e4];
|
||||
};
|
||||
}(h || (t2.rgba = h = {})), t2.toPaddedHex = u, t2.contrastRatio = _;
|
||||
}, 345: (e2, t2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.runAndSubscribe = t2.forwardEvent = t2.EventEmitter = void 0, t2.EventEmitter = class {
|
||||
constructor() {
|
||||
this._listeners = [], this._disposed = false;
|
||||
}
|
||||
get event() {
|
||||
return this._event || (this._event = (e3) => (this._listeners.push(e3), { dispose: /* @__PURE__ */ __name(() => {
|
||||
if (!this._disposed) {
|
||||
for (let t3 = 0; t3 < this._listeners.length; t3++) if (this._listeners[t3] === e3) return void this._listeners.splice(t3, 1);
|
||||
}
|
||||
}, "dispose") })), this._event;
|
||||
}
|
||||
fire(e3, t3) {
|
||||
const s2 = [];
|
||||
for (let e4 = 0; e4 < this._listeners.length; e4++) s2.push(this._listeners[e4]);
|
||||
for (let r2 = 0; r2 < s2.length; r2++) s2[r2].call(void 0, e3, t3);
|
||||
}
|
||||
dispose() {
|
||||
this.clearListeners(), this._disposed = true;
|
||||
}
|
||||
clearListeners() {
|
||||
this._listeners && (this._listeners.length = 0);
|
||||
}
|
||||
}, t2.forwardEvent = function(e3, t3) {
|
||||
return e3((e4) => t3.fire(e4));
|
||||
}, t2.runAndSubscribe = function(e3, t3) {
|
||||
return t3(void 0), e3((e4) => t3(e4));
|
||||
};
|
||||
}, 859: (e2, t2) => {
|
||||
function s2(e3) {
|
||||
for (const t3 of e3) t3.dispose();
|
||||
e3.length = 0;
|
||||
}
|
||||
__name(s2, "s");
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.getDisposeArrayDisposable = t2.disposeArray = t2.toDisposable = t2.MutableDisposable = t2.Disposable = void 0, t2.Disposable = class {
|
||||
constructor() {
|
||||
this._disposables = [], this._isDisposed = false;
|
||||
}
|
||||
dispose() {
|
||||
this._isDisposed = true;
|
||||
for (const e3 of this._disposables) e3.dispose();
|
||||
this._disposables.length = 0;
|
||||
}
|
||||
register(e3) {
|
||||
return this._disposables.push(e3), e3;
|
||||
}
|
||||
unregister(e3) {
|
||||
const t3 = this._disposables.indexOf(e3);
|
||||
-1 !== t3 && this._disposables.splice(t3, 1);
|
||||
}
|
||||
}, t2.MutableDisposable = class {
|
||||
constructor() {
|
||||
this._isDisposed = false;
|
||||
}
|
||||
get value() {
|
||||
return this._isDisposed ? void 0 : this._value;
|
||||
}
|
||||
set value(e3) {
|
||||
this._isDisposed || e3 === this._value || (this._value?.dispose(), this._value = e3);
|
||||
}
|
||||
clear() {
|
||||
this.value = void 0;
|
||||
}
|
||||
dispose() {
|
||||
this._isDisposed = true, this._value?.dispose(), this._value = void 0;
|
||||
}
|
||||
}, t2.toDisposable = function(e3) {
|
||||
return { dispose: e3 };
|
||||
}, t2.disposeArray = s2, t2.getDisposeArrayDisposable = function(e3) {
|
||||
return { dispose: /* @__PURE__ */ __name(() => s2(e3), "dispose") };
|
||||
};
|
||||
}, 485: (e2, t2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.FourKeyMap = t2.TwoKeyMap = void 0;
|
||||
class s2 {
|
||||
static {
|
||||
__name(this, "s");
|
||||
}
|
||||
constructor() {
|
||||
this._data = {};
|
||||
}
|
||||
set(e3, t3, s3) {
|
||||
this._data[e3] || (this._data[e3] = {}), this._data[e3][t3] = s3;
|
||||
}
|
||||
get(e3, t3) {
|
||||
return this._data[e3] ? this._data[e3][t3] : void 0;
|
||||
}
|
||||
clear() {
|
||||
this._data = {};
|
||||
}
|
||||
}
|
||||
t2.TwoKeyMap = s2, t2.FourKeyMap = class {
|
||||
constructor() {
|
||||
this._data = new s2();
|
||||
}
|
||||
set(e3, t3, r2, o, i) {
|
||||
this._data.get(e3, t3) || this._data.set(e3, t3, new s2()), this._data.get(e3, t3).set(r2, o, i);
|
||||
}
|
||||
get(e3, t3, s3, r2) {
|
||||
return this._data.get(e3, t3)?.get(s3, r2);
|
||||
}
|
||||
clear() {
|
||||
this._data.clear();
|
||||
}
|
||||
};
|
||||
}, 726: (e2, t2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.createDecorator = t2.getServiceDependencies = t2.serviceRegistry = void 0;
|
||||
const s2 = "di$target", r2 = "di$dependencies";
|
||||
t2.serviceRegistry = /* @__PURE__ */ new Map(), t2.getServiceDependencies = function(e3) {
|
||||
return e3[r2] || [];
|
||||
}, t2.createDecorator = function(e3) {
|
||||
if (t2.serviceRegistry.has(e3)) return t2.serviceRegistry.get(e3);
|
||||
const o = /* @__PURE__ */ __name(function(e4, t3, i) {
|
||||
if (3 !== arguments.length) throw new Error("@IServiceName-decorator can only be used to decorate a parameter");
|
||||
!function(e5, t4, o2) {
|
||||
t4[s2] === t4 ? t4[r2].push({ id: e5, index: o2 }) : (t4[r2] = [{ id: e5, index: o2 }], t4[s2] = t4);
|
||||
}(o, e4, i);
|
||||
}, "o");
|
||||
return o.toString = () => e3, t2.serviceRegistry.set(e3, o), o;
|
||||
};
|
||||
}, 97: (e2, t2, s2) => {
|
||||
Object.defineProperty(t2, "__esModule", { value: true }), t2.IDecorationService = t2.IUnicodeService = t2.IOscLinkService = t2.IOptionsService = t2.ILogService = t2.LogLevelEnum = t2.IInstantiationService = t2.ICharsetService = t2.ICoreService = t2.ICoreMouseService = t2.IBufferService = void 0;
|
||||
const r2 = s2(726);
|
||||
var o;
|
||||
t2.IBufferService = (0, r2.createDecorator)("BufferService"), t2.ICoreMouseService = (0, r2.createDecorator)("CoreMouseService"), t2.ICoreService = (0, r2.createDecorator)("CoreService"), t2.ICharsetService = (0, r2.createDecorator)("CharsetService"), t2.IInstantiationService = (0, r2.createDecorator)("InstantiationService"), function(e3) {
|
||||
e3[e3.TRACE = 0] = "TRACE", e3[e3.DEBUG = 1] = "DEBUG", e3[e3.INFO = 2] = "INFO", e3[e3.WARN = 3] = "WARN", e3[e3.ERROR = 4] = "ERROR", e3[e3.OFF = 5] = "OFF";
|
||||
}(o || (t2.LogLevelEnum = o = {})), t2.ILogService = (0, r2.createDecorator)("LogService"), t2.IOptionsService = (0, r2.createDecorator)("OptionsService"), t2.IOscLinkService = (0, r2.createDecorator)("OscLinkService"), t2.IUnicodeService = (0, r2.createDecorator)("UnicodeService"), t2.IDecorationService = (0, r2.createDecorator)("DecorationService");
|
||||
} }, t = {};
|
||||
function s(r2) {
|
||||
var o = t[r2];
|
||||
if (void 0 !== o) return o.exports;
|
||||
var i = t[r2] = { exports: {} };
|
||||
return e[r2].call(i.exports, i, i.exports, s), i.exports;
|
||||
}
|
||||
__name(s, "s");
|
||||
var r = {};
|
||||
return (() => {
|
||||
var e2 = r;
|
||||
Object.defineProperty(e2, "__esModule", { value: true }), e2.HTMLSerializeHandler = e2.SerializeAddon = void 0;
|
||||
const t2 = s(997);
|
||||
function o(e3, t3, s2) {
|
||||
return Math.max(t3, Math.min(e3, s2));
|
||||
}
|
||||
__name(o, "o");
|
||||
class i {
|
||||
static {
|
||||
__name(this, "i");
|
||||
}
|
||||
constructor(e3) {
|
||||
this._buffer = e3;
|
||||
}
|
||||
serialize(e3, t3) {
|
||||
const s2 = this._buffer.getNullCell(), r2 = this._buffer.getNullCell();
|
||||
let o2 = s2;
|
||||
const i2 = e3.start.y, n2 = e3.end.y, l2 = e3.start.x, a2 = e3.end.x;
|
||||
this._beforeSerialize(n2 - i2, i2, n2);
|
||||
for (let t4 = i2; t4 <= n2; t4++) {
|
||||
const i3 = this._buffer.getLine(t4);
|
||||
if (i3) {
|
||||
const n3 = t4 === e3.start.y ? l2 : 0, c2 = t4 === e3.end.y ? a2 : i3.length;
|
||||
for (let e4 = n3; e4 < c2; e4++) {
|
||||
const n4 = i3.getCell(e4, o2 === s2 ? r2 : s2);
|
||||
n4 ? (this._nextCell(n4, o2, t4, e4), o2 = n4) : console.warn(`Can't get cell at row=${t4}, col=${e4}`);
|
||||
}
|
||||
}
|
||||
this._rowEnd(t4, t4 === n2);
|
||||
}
|
||||
return this._afterSerialize(), this._serializeString(t3);
|
||||
}
|
||||
_nextCell(e3, t3, s2, r2) {
|
||||
}
|
||||
_rowEnd(e3, t3) {
|
||||
}
|
||||
_beforeSerialize(e3, t3, s2) {
|
||||
}
|
||||
_afterSerialize() {
|
||||
}
|
||||
_serializeString(e3) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
function n(e3, t3) {
|
||||
return e3.getFgColorMode() === t3.getFgColorMode() && e3.getFgColor() === t3.getFgColor();
|
||||
}
|
||||
__name(n, "n");
|
||||
function l(e3, t3) {
|
||||
return e3.getBgColorMode() === t3.getBgColorMode() && e3.getBgColor() === t3.getBgColor();
|
||||
}
|
||||
__name(l, "l");
|
||||
function a(e3, t3) {
|
||||
return e3.isInverse() === t3.isInverse() && e3.isBold() === t3.isBold() && e3.isUnderline() === t3.isUnderline() && e3.isOverline() === t3.isOverline() && e3.isBlink() === t3.isBlink() && e3.isInvisible() === t3.isInvisible() && e3.isItalic() === t3.isItalic() && e3.isDim() === t3.isDim() && e3.isStrikethrough() === t3.isStrikethrough();
|
||||
}
|
||||
__name(a, "a");
|
||||
class c extends i {
|
||||
static {
|
||||
__name(this, "c");
|
||||
}
|
||||
constructor(e3, t3) {
|
||||
super(e3), this._terminal = t3, this._rowIndex = 0, this._allRows = new Array(), this._allRowSeparators = new Array(), this._currentRow = "", this._nullCellCount = 0, this._cursorStyle = this._buffer.getNullCell(), this._cursorStyleRow = 0, this._cursorStyleCol = 0, this._backgroundCell = this._buffer.getNullCell(), this._firstRow = 0, this._lastCursorRow = 0, this._lastCursorCol = 0, this._lastContentCursorRow = 0, this._lastContentCursorCol = 0, this._thisRowLastChar = this._buffer.getNullCell(), this._thisRowLastSecondChar = this._buffer.getNullCell(), this._nextRowFirstChar = this._buffer.getNullCell();
|
||||
}
|
||||
_beforeSerialize(e3, t3, s2) {
|
||||
this._allRows = new Array(e3), this._lastContentCursorRow = t3, this._lastCursorRow = t3, this._firstRow = t3;
|
||||
}
|
||||
_rowEnd(e3, t3) {
|
||||
this._nullCellCount > 0 && !l(this._cursorStyle, this._backgroundCell) && (this._currentRow += `\x1B[${this._nullCellCount}X`);
|
||||
let s2 = "";
|
||||
if (!t3) {
|
||||
e3 - this._firstRow >= this._terminal.rows && this._buffer.getLine(this._cursorStyleRow)?.getCell(this._cursorStyleCol, this._backgroundCell);
|
||||
const t4 = this._buffer.getLine(e3), r2 = this._buffer.getLine(e3 + 1);
|
||||
if (r2.isWrapped) {
|
||||
s2 = "";
|
||||
const o2 = t4.getCell(t4.length - 1, this._thisRowLastChar), i2 = t4.getCell(t4.length - 2, this._thisRowLastSecondChar), n2 = r2.getCell(0, this._nextRowFirstChar), a2 = n2.getWidth() > 1;
|
||||
let c2 = false;
|
||||
(n2.getChars() && a2 ? this._nullCellCount <= 1 : this._nullCellCount <= 0) && ((o2.getChars() || 0 === o2.getWidth()) && l(o2, n2) && (c2 = true), a2 && (i2.getChars() || 0 === i2.getWidth()) && l(o2, n2) && l(i2, n2) && (c2 = true)), c2 || (s2 = "-".repeat(this._nullCellCount + 1), s2 += "\x1B[1D\x1B[1X", this._nullCellCount > 0 && (s2 += "\x1B[A", s2 += `\x1B[${t4.length - this._nullCellCount}C`, s2 += `\x1B[${this._nullCellCount}X`, s2 += `\x1B[${t4.length - this._nullCellCount}D`, s2 += "\x1B[B"), this._lastContentCursorRow = e3 + 1, this._lastContentCursorCol = 0, this._lastCursorRow = e3 + 1, this._lastCursorCol = 0);
|
||||
} else s2 = "\r\n", this._lastCursorRow = e3 + 1, this._lastCursorCol = 0;
|
||||
}
|
||||
this._allRows[this._rowIndex] = this._currentRow, this._allRowSeparators[this._rowIndex++] = s2, this._currentRow = "", this._nullCellCount = 0;
|
||||
}
|
||||
_diffStyle(e3, t3) {
|
||||
const s2 = [], r2 = !n(e3, t3), o2 = !l(e3, t3), i2 = !a(e3, t3);
|
||||
if (r2 || o2 || i2) if (e3.isAttributeDefault()) t3.isAttributeDefault() || s2.push(0);
|
||||
else {
|
||||
if (r2) {
|
||||
const t4 = e3.getFgColor();
|
||||
e3.isFgRGB() ? s2.push(38, 2, t4 >>> 16 & 255, t4 >>> 8 & 255, 255 & t4) : e3.isFgPalette() ? t4 >= 16 ? s2.push(38, 5, t4) : s2.push(8 & t4 ? 90 + (7 & t4) : 30 + (7 & t4)) : s2.push(39);
|
||||
}
|
||||
if (o2) {
|
||||
const t4 = e3.getBgColor();
|
||||
e3.isBgRGB() ? s2.push(48, 2, t4 >>> 16 & 255, t4 >>> 8 & 255, 255 & t4) : e3.isBgPalette() ? t4 >= 16 ? s2.push(48, 5, t4) : s2.push(8 & t4 ? 100 + (7 & t4) : 40 + (7 & t4)) : s2.push(49);
|
||||
}
|
||||
i2 && (e3.isInverse() !== t3.isInverse() && s2.push(e3.isInverse() ? 7 : 27), e3.isBold() !== t3.isBold() && s2.push(e3.isBold() ? 1 : 22), e3.isUnderline() !== t3.isUnderline() && s2.push(e3.isUnderline() ? 4 : 24), e3.isOverline() !== t3.isOverline() && s2.push(e3.isOverline() ? 53 : 55), e3.isBlink() !== t3.isBlink() && s2.push(e3.isBlink() ? 5 : 25), e3.isInvisible() !== t3.isInvisible() && s2.push(e3.isInvisible() ? 8 : 28), e3.isItalic() !== t3.isItalic() && s2.push(e3.isItalic() ? 3 : 23), e3.isDim() !== t3.isDim() && s2.push(e3.isDim() ? 2 : 22), e3.isStrikethrough() !== t3.isStrikethrough() && s2.push(e3.isStrikethrough() ? 9 : 29));
|
||||
}
|
||||
return s2;
|
||||
}
|
||||
_nextCell(e3, t3, s2, r2) {
|
||||
if (0 === e3.getWidth()) return;
|
||||
const o2 = "" === e3.getChars(), i2 = this._diffStyle(e3, this._cursorStyle);
|
||||
if (o2 ? !l(this._cursorStyle, e3) : i2.length > 0) {
|
||||
this._nullCellCount > 0 && (l(this._cursorStyle, this._backgroundCell) || (this._currentRow += `\x1B[${this._nullCellCount}X`), this._currentRow += `\x1B[${this._nullCellCount}C`, this._nullCellCount = 0), this._lastContentCursorRow = this._lastCursorRow = s2, this._lastContentCursorCol = this._lastCursorCol = r2, this._currentRow += `\x1B[${i2.join(";")}m`;
|
||||
const e4 = this._buffer.getLine(s2);
|
||||
void 0 !== e4 && (e4.getCell(r2, this._cursorStyle), this._cursorStyleRow = s2, this._cursorStyleCol = r2);
|
||||
}
|
||||
o2 ? this._nullCellCount += e3.getWidth() : (this._nullCellCount > 0 && (l(this._cursorStyle, this._backgroundCell) || (this._currentRow += `\x1B[${this._nullCellCount}X`), this._currentRow += `\x1B[${this._nullCellCount}C`, this._nullCellCount = 0), this._currentRow += e3.getChars(), this._lastContentCursorRow = this._lastCursorRow = s2, this._lastContentCursorCol = this._lastCursorCol = r2 + e3.getWidth());
|
||||
}
|
||||
_serializeString(e3) {
|
||||
let t3 = this._allRows.length;
|
||||
this._buffer.length - this._firstRow <= this._terminal.rows && (t3 = this._lastContentCursorRow + 1 - this._firstRow, this._lastCursorCol = this._lastContentCursorCol, this._lastCursorRow = this._lastContentCursorRow);
|
||||
let s2 = "";
|
||||
for (let e4 = 0; e4 < t3; e4++) s2 += this._allRows[e4], e4 + 1 < t3 && (s2 += this._allRowSeparators[e4]);
|
||||
if (!e3) {
|
||||
const e4 = this._buffer.baseY + this._buffer.cursorY, t4 = this._buffer.cursorX, o3 = /* @__PURE__ */ __name((e5) => {
|
||||
e5 > 0 ? s2 += `\x1B[${e5}C` : e5 < 0 && (s2 += `\x1B[${-e5}D`);
|
||||
}, "o");
|
||||
(e4 !== this._lastCursorRow || t4 !== this._lastCursorCol) && ((r2 = e4 - this._lastCursorRow) > 0 ? s2 += `\x1B[${r2}B` : r2 < 0 && (s2 += `\x1B[${-r2}A`), o3(t4 - this._lastCursorCol));
|
||||
}
|
||||
var r2;
|
||||
const o2 = this._terminal._core._inputHandler._curAttrData, i2 = this._diffStyle(o2, this._cursorStyle);
|
||||
return i2.length > 0 && (s2 += `\x1B[${i2.join(";")}m`), s2;
|
||||
}
|
||||
}
|
||||
e2.SerializeAddon = class {
|
||||
activate(e3) {
|
||||
this._terminal = e3;
|
||||
}
|
||||
_serializeBufferByScrollback(e3, t3, s2) {
|
||||
const r2 = t3.length, i2 = void 0 === s2 ? r2 : o(s2 + e3.rows, 0, r2);
|
||||
return this._serializeBufferByRange(e3, t3, { start: r2 - i2, end: r2 - 1 }, false);
|
||||
}
|
||||
_serializeBufferByRange(e3, t3, s2, r2) {
|
||||
return new c(t3, e3).serialize({ start: { x: 0, y: "number" == typeof s2.start ? s2.start : s2.start.line }, end: { x: e3.cols, y: "number" == typeof s2.end ? s2.end : s2.end.line } }, r2);
|
||||
}
|
||||
_serializeBufferAsHTML(e3, t3) {
|
||||
const s2 = e3.buffer.active, r2 = new h(s2, e3, t3);
|
||||
if (!t3.onlySelection) {
|
||||
const i3 = s2.length, n2 = t3.scrollback, l2 = void 0 === n2 ? i3 : o(n2 + e3.rows, 0, i3);
|
||||
return r2.serialize({ start: { x: 0, y: i3 - l2 }, end: { x: e3.cols, y: i3 - 1 } });
|
||||
}
|
||||
const i2 = this._terminal?.getSelectionPosition();
|
||||
return void 0 !== i2 ? r2.serialize({ start: { x: i2.start.x, y: i2.start.y }, end: { x: i2.end.x, y: i2.end.y } }) : "";
|
||||
}
|
||||
_serializeModes(e3) {
|
||||
let t3 = "";
|
||||
const s2 = e3.modes;
|
||||
if (s2.applicationCursorKeysMode && (t3 += "\x1B[?1h"), s2.applicationKeypadMode && (t3 += "\x1B[?66h"), s2.bracketedPasteMode && (t3 += "\x1B[?2004h"), s2.insertMode && (t3 += "\x1B[4h"), s2.originMode && (t3 += "\x1B[?6h"), s2.reverseWraparoundMode && (t3 += "\x1B[?45h"), s2.sendFocusMode && (t3 += "\x1B[?1004h"), false === s2.wraparoundMode && (t3 += "\x1B[?7l"), "none" !== s2.mouseTrackingMode) switch (s2.mouseTrackingMode) {
|
||||
case "x10":
|
||||
t3 += "\x1B[?9h";
|
||||
break;
|
||||
case "vt200":
|
||||
t3 += "\x1B[?1000h";
|
||||
break;
|
||||
case "drag":
|
||||
t3 += "\x1B[?1002h";
|
||||
break;
|
||||
case "any":
|
||||
t3 += "\x1B[?1003h";
|
||||
}
|
||||
return t3;
|
||||
}
|
||||
serialize(e3) {
|
||||
if (!this._terminal) throw new Error("Cannot use addon until it has been loaded");
|
||||
let t3 = e3?.range ? this._serializeBufferByRange(this._terminal, this._terminal.buffer.normal, e3.range, true) : this._serializeBufferByScrollback(this._terminal, this._terminal.buffer.normal, e3?.scrollback);
|
||||
return e3?.excludeAltBuffer || "alternate" !== this._terminal.buffer.active.type || (t3 += `\x1B[?1049h\x1B[H${this._serializeBufferByScrollback(this._terminal, this._terminal.buffer.alternate, void 0)}`), e3?.excludeModes || (t3 += this._serializeModes(this._terminal)), t3;
|
||||
}
|
||||
serializeAsHTML(e3) {
|
||||
if (!this._terminal) throw new Error("Cannot use addon until it has been loaded");
|
||||
return this._serializeBufferAsHTML(this._terminal, e3 || {});
|
||||
}
|
||||
dispose() {
|
||||
}
|
||||
};
|
||||
class h extends i {
|
||||
static {
|
||||
__name(this, "h");
|
||||
}
|
||||
constructor(e3, s2, r2) {
|
||||
super(e3), this._terminal = s2, this._options = r2, this._currentRow = "", this._htmlContent = "", s2._core._themeService ? this._ansiColors = s2._core._themeService.colors.ansi : this._ansiColors = t2.DEFAULT_ANSI_COLORS;
|
||||
}
|
||||
_padStart(e3, t3, s2) {
|
||||
return t3 >>= 0, s2 = s2 ?? " ", e3.length > t3 ? e3 : ((t3 -= e3.length) > s2.length && (s2 += s2.repeat(t3 / s2.length)), s2.slice(0, t3) + e3);
|
||||
}
|
||||
_beforeSerialize(e3, t3, s2) {
|
||||
this._htmlContent += "<html><body><!--StartFragment--><pre>";
|
||||
let r2 = "#000000", o2 = "#ffffff";
|
||||
this._options.includeGlobalBackground && (r2 = this._terminal.options.theme?.foreground ?? "#ffffff", o2 = this._terminal.options.theme?.background ?? "#000000");
|
||||
const i2 = [];
|
||||
i2.push("color: " + r2 + ";"), i2.push("background-color: " + o2 + ";"), i2.push("font-family: " + this._terminal.options.fontFamily + ";"), i2.push("font-size: " + this._terminal.options.fontSize + "px;"), this._htmlContent += "<div style='" + i2.join(" ") + "'>";
|
||||
}
|
||||
_afterSerialize() {
|
||||
this._htmlContent += "</div>", this._htmlContent += "</pre><!--EndFragment--></body></html>";
|
||||
}
|
||||
_rowEnd(e3, t3) {
|
||||
this._htmlContent += "<div><span>" + this._currentRow + "</span></div>", this._currentRow = "";
|
||||
}
|
||||
_getHexColor(e3, t3) {
|
||||
const s2 = t3 ? e3.getFgColor() : e3.getBgColor();
|
||||
return (t3 ? e3.isFgRGB() : e3.isBgRGB()) ? "#" + [s2 >> 16 & 255, s2 >> 8 & 255, 255 & s2].map((e4) => this._padStart(e4.toString(16), 2, "0")).join("") : (t3 ? e3.isFgPalette() : e3.isBgPalette()) ? this._ansiColors[s2].css : void 0;
|
||||
}
|
||||
_diffStyle(e3, t3) {
|
||||
const s2 = [], r2 = !n(e3, t3), o2 = !l(e3, t3), i2 = !a(e3, t3);
|
||||
if (r2 || o2 || i2) {
|
||||
const t4 = this._getHexColor(e3, true);
|
||||
t4 && s2.push("color: " + t4 + ";");
|
||||
const r3 = this._getHexColor(e3, false);
|
||||
return r3 && s2.push("background-color: " + r3 + ";"), e3.isInverse() && s2.push("color: #000000; background-color: #BFBFBF;"), e3.isBold() && s2.push("font-weight: bold;"), e3.isUnderline() && e3.isOverline() ? s2.push("text-decoration: overline underline;") : e3.isUnderline() ? s2.push("text-decoration: underline;") : e3.isOverline() && s2.push("text-decoration: overline;"), e3.isBlink() && s2.push("text-decoration: blink;"), e3.isInvisible() && s2.push("visibility: hidden;"), e3.isItalic() && s2.push("font-style: italic;"), e3.isDim() && s2.push("opacity: 0.5;"), e3.isStrikethrough() && s2.push("text-decoration: line-through;"), s2;
|
||||
}
|
||||
}
|
||||
_nextCell(e3, t3, s2, r2) {
|
||||
if (0 === e3.getWidth()) return;
|
||||
const o2 = "" === e3.getChars(), i2 = this._diffStyle(e3, t3);
|
||||
i2 && (this._currentRow += 0 === i2.length ? "</span><span>" : "</span><span style='" + i2.join(" ") + "'>"), this._currentRow += o2 ? " " : e3.getChars();
|
||||
}
|
||||
_serializeString() {
|
||||
return this._htmlContent;
|
||||
}
|
||||
}
|
||||
e2.HTMLSerializeHandler = h;
|
||||
})(), r;
|
||||
})());
|
||||
})(addonSerialize$2, addonSerialize$2.exports);
|
||||
var addonSerializeExports = addonSerialize$2.exports;
|
||||
const addonSerialize$1 = /* @__PURE__ */ getDefaultExportFromCjs(addonSerializeExports);
|
||||
function useTerminalBuffer() {
|
||||
const serializeAddon = new addonSerializeExports.SerializeAddon();
|
||||
const terminal = markRaw(new xtermExports.Terminal({ convertEol: true }));
|
||||
const copyTo = /* @__PURE__ */ __name((destinationTerminal) => {
|
||||
destinationTerminal.write(serializeAddon.serialize());
|
||||
}, "copyTo");
|
||||
const write = /* @__PURE__ */ __name((message) => terminal.write(message), "write");
|
||||
const serialize = /* @__PURE__ */ __name(() => serializeAddon.serialize(), "serialize");
|
||||
onMounted(() => {
|
||||
terminal.loadAddon(serializeAddon);
|
||||
});
|
||||
onUnmounted(() => {
|
||||
terminal.dispose();
|
||||
});
|
||||
return {
|
||||
copyTo,
|
||||
serialize,
|
||||
write
|
||||
};
|
||||
}
|
||||
__name(useTerminalBuffer, "useTerminalBuffer");
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "TerminalOutputDrawer",
|
||||
props: /* @__PURE__ */ mergeModels({
|
||||
header: {},
|
||||
defaultMessage: {}
|
||||
}, {
|
||||
"modelValue": { type: Boolean, ...{ required: true } },
|
||||
"modelModifiers": {}
|
||||
}),
|
||||
emits: ["update:modelValue"],
|
||||
setup(__props) {
|
||||
const terminalVisible = useModel(__props, "modelValue");
|
||||
const props = __props;
|
||||
const electron = electronAPI();
|
||||
const buffer = useTerminalBuffer();
|
||||
let xterm = null;
|
||||
const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => {
|
||||
xterm = terminal;
|
||||
useAutoSize({ root, autoRows: true, autoCols: true });
|
||||
terminal.write(props.defaultMessage);
|
||||
buffer.copyTo(terminal);
|
||||
terminal.options.cursorBlink = false;
|
||||
terminal.options.cursorStyle = "bar";
|
||||
terminal.options.cursorInactiveStyle = "bar";
|
||||
terminal.options.disableStdin = true;
|
||||
}, "terminalCreated");
|
||||
const terminalUnmounted = /* @__PURE__ */ __name(() => {
|
||||
xterm = null;
|
||||
}, "terminalUnmounted");
|
||||
onMounted(async () => {
|
||||
electron.onLogMessage((message) => {
|
||||
buffer.write(message);
|
||||
xterm?.write(message);
|
||||
});
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createBlock(unref(script), {
|
||||
visible: terminalVisible.value,
|
||||
"onUpdate:visible": _cache[0] || (_cache[0] = ($event) => terminalVisible.value = $event),
|
||||
header: _ctx.header,
|
||||
position: "bottom",
|
||||
style: { "height": "max(50vh, 34rem)" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(BaseTerminal, {
|
||||
onCreated: terminalCreated,
|
||||
onUnmounted: terminalUnmounted
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["visible", "header"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as _
|
||||
};
|
||||
//# sourceMappingURL=TerminalOutputDrawer-B_NZxAv8.js.map
|
||||
1
comfy/web/assets/TerminalOutputDrawer-B_NZxAv8.js.map
generated
vendored
101
comfy/web/assets/UserSelectView-ByltuBH7.js
generated
vendored
@ -1,101 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, av as useUserStore, br as useRouter, T as ref, c as computed, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, bs as withKeys, j as unref, bt as script, bu as script$1, bv as script$2, bw as script$3, ak as createTextVNode, B as createCommentVNode, l as script$4 } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.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 = { class: "flex w-full flex-col items-center" };
|
||||
const _hoisted_3 = { class: "flex w-full flex-col gap-2" };
|
||||
const _hoisted_4 = { for: "new-user-input" };
|
||||
const _hoisted_5 = { class: "flex w-full flex-col gap-2" };
|
||||
const _hoisted_6 = { for: "existing-user-select" };
|
||||
const _hoisted_7 = { 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, [
|
||||
_cache[2] || (_cache[2] = createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1)),
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createBaseVNode("label", _hoisted_4, 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_5, [
|
||||
createBaseVNode("label", _hoisted_6, 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_7, [
|
||||
createVNode(unref(script$4), {
|
||||
label: _ctx.$t("userSelect.next"),
|
||||
onClick: login
|
||||
}, null, 8, ["label"])
|
||||
])
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
//# sourceMappingURL=UserSelectView-ByltuBH7.js.map
|
||||
1
comfy/web/assets/UserSelectView-ByltuBH7.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"UserSelectView-ByltuBH7.js","sources":["../../src/views/UserSelectView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark>\n <main\n id=\"comfy-user-selection\"\n class=\"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 <div 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 @keyup.enter=\"login\"\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 </div>\n </main>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport Divider from 'primevue/divider'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport Select from 'primevue/select'\nimport { computed, onMounted, ref } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport { User, useUserStore } from '@/stores/userStore'\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.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":";;;;;;;;;;;;;;;;;AAqDA,UAAM,YAAY,aAAa;AAC/B,UAAM,SAAS,UAAU;AAEnB,UAAA,eAAe,IAAiB,IAAI;AACpC,UAAA,cAAc,IAAI,EAAE;AACpB,UAAA,aAAa,IAAI,EAAE;AAEzB,UAAM,gBAAgB,SAAS,MAAM,YAAY,MAAM,WAAW,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,QAAA;AAGpC,kBAAU,MAAM,IAAI;AACpB,eAAO,KAAK,GAAG;AAAA,eACR,KAAK;AACZ,mBAAW,QAAQ,IAAI,WAAW,KAAK,UAAU,GAAG;AAAA,MAAA;AAAA,IAExD,GAfc;AAiBd,cAAU,YAAY;AAChB,UAAA,CAAC,UAAU,aAAa;AAC1B,cAAM,UAAU,WAAW;AAAA,MAAA;AAAA,IAC7B,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
36
comfy/web/assets/WelcomeView-aCH40CSK.css
generated
vendored
@ -1,36 +0,0 @@
|
||||
|
||||
.animated-gradient-text[data-v-7dfaf74c] {
|
||||
font-weight: 700;
|
||||
font-size: clamp(2rem, 8vw, 4rem);
|
||||
background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9);
|
||||
background-size: 300% auto;
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
animation: gradient-7dfaf74c 8s linear infinite;
|
||||
}
|
||||
.text-glow[data-v-7dfaf74c] {
|
||||
filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3));
|
||||
}
|
||||
@keyframes gradient-7dfaf74c {
|
||||
0% {
|
||||
background-position: 0% center;
|
||||
}
|
||||
100% {
|
||||
background-position: 300% center;
|
||||
}
|
||||
}
|
||||
.fade-in-up[data-v-7dfaf74c] {
|
||||
animation: fadeInUp-7dfaf74c 1.5s ease-out;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes fadeInUp-7dfaf74c {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
39
comfy/web/assets/WelcomeView-bWjYcpdL.js
generated
vendored
@ -1,39 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { d as defineComponent, br as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, _ as _export_sfc } from "./index-DIgj6hpb.js";
|
||||
import { _ as _sfc_main$1 } from "./BaseViewTemplate-DaGOaycP.js";
|
||||
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-bWjYcpdL.js.map
|
||||
1
comfy/web/assets/WelcomeView-bWjYcpdL.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"WelcomeView-bWjYcpdL.js","sources":["../../src/views/WelcomeView.vue"],"sourcesContent":["<template>\n <BaseViewTemplate dark>\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 </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport { useRouter } from 'vue-router'\n\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\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,UAAU;AACnB,UAAA,aAAa,wBAAC,SAAiB;AACnC,aAAO,KAAK,IAAI;AAAA,IAClB,GAFmB;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
1
comfy/web/assets/images/Git-Logo-White.svg
generated
vendored
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="292" height="92pt" viewBox="0 0 219 92"><defs><clipPath id="a"><path d="M159 .79h25V69h-25Zm0 0"/></clipPath><clipPath id="b"><path d="M183 9h35.371v60H183Zm0 0"/></clipPath><clipPath id="c"><path d="M0 .79h92V92H0Zm0 0"/></clipPath></defs><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M130.871 31.836c-4.785 0-8.351 2.352-8.351 8.008 0 4.261 2.347 7.222 8.093 7.222 4.871 0 8.18-2.867 8.18-7.398 0-5.133-2.961-7.832-7.922-7.832Zm-9.57 39.95c-1.133 1.39-2.262 2.87-2.262 4.612 0 3.48 4.434 4.524 10.527 4.524 5.051 0 11.926-.352 11.926-5.043 0-2.793-3.308-2.965-7.488-3.227Zm25.761-39.688c1.563 2.004 3.22 4.789 3.22 8.793 0 9.656-7.571 15.316-18.536 15.316-2.789 0-5.312-.348-6.879-.785l-2.87 4.613 8.526.52c15.059.96 23.934 1.398 23.934 12.968 0 10.008-8.789 15.665-23.934 15.665-15.75 0-21.757-4.004-21.757-10.88 0-3.917 1.742-6 4.789-8.878-2.875-1.211-3.828-3.387-3.828-5.739 0-1.914.953-3.656 2.523-5.312 1.566-1.652 3.305-3.305 5.395-5.219-4.262-2.09-7.485-6.617-7.485-13.058 0-10.008 6.613-16.88 19.93-16.88 3.742 0 6.004.344 8.008.872h16.972v7.394l-8.007.61"/><g clip-path="url(#a)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M170.379 16.281c-4.961 0-7.832-2.87-7.832-7.836 0-4.957 2.871-7.656 7.832-7.656 5.05 0 7.922 2.7 7.922 7.656 0 4.965-2.871 7.836-7.922 7.836Zm-11.227 52.305V61.71l4.438-.606c1.219-.175 1.394-.437 1.394-1.746V33.773c0-.953-.261-1.566-1.132-1.824l-4.7-1.656.957-7.047h18.016V59.36c0 1.399.086 1.57 1.395 1.746l4.437.606v6.875h-24.805"/></g><g clip-path="url(#b)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M218.371 65.21c-3.742 1.825-9.223 3.481-14.187 3.481-10.356 0-14.27-4.175-14.27-14.015V31.879c0-.524 0-.871-.7-.871h-6.093v-7.746c7.664-.871 10.707-4.703 11.664-14.188h8.27v12.36c0 .609 0 .87.695.87h12.27v8.704h-12.965v20.797c0 5.136 1.218 7.136 5.918 7.136 2.437 0 4.96-.609 7.047-1.39l2.351 7.66"/></g><g clip-path="url(#c)"><path style="stroke:none;fill-rule:nonzero;fill:#fff;fill-opacity:1" d="M89.422 42.371 49.629 2.582a5.868 5.868 0 0 0-8.3 0l-8.263 8.262 10.48 10.484a6.965 6.965 0 0 1 7.173 1.668 6.98 6.98 0 0 1 1.656 7.215l10.102 10.105a6.963 6.963 0 0 1 7.214 1.657 6.976 6.976 0 0 1 0 9.875 6.98 6.98 0 0 1-9.879 0 6.987 6.987 0 0 1-1.519-7.594l-9.422-9.422v24.793a6.979 6.979 0 0 1 1.848 1.32 6.988 6.988 0 0 1 0 9.88c-2.73 2.726-7.153 2.726-9.875 0a6.98 6.98 0 0 1 0-9.88 6.893 6.893 0 0 1 2.285-1.523V34.398a6.893 6.893 0 0 1-2.285-1.523 6.988 6.988 0 0 1-1.508-7.637L29.004 14.902 1.719 42.187a5.868 5.868 0 0 0 0 8.301l39.793 39.793a5.868 5.868 0 0 0 8.3 0l39.61-39.605a5.873 5.873 0 0 0 0-8.305"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
comfy/web/assets/images/apple-mps-logo.png
generated
vendored
|
Before Width: | Height: | Size: 66 KiB |
5
comfy/web/assets/images/manual-configuration.svg
generated
vendored
@ -1,5 +0,0 @@
|
||||
<?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>
|
||||
|
Before Width: | Height: | Size: 5.8 KiB |
6
comfy/web/assets/images/nvidia-logo.svg
generated
vendored
@ -1,6 +0,0 @@
|
||||
<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>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
comfy/web/assets/images/sad_girl.png
generated
vendored
|
Before Width: | Height: | Size: 174 KiB |
166
comfy/web/assets/index-B8O-6_L7.css
generated
vendored
@ -1,166 +0,0 @@
|
||||
.comfy-group-manage {
|
||||
background: var(--bg-color);
|
||||
color: var(--fg-color);
|
||||
padding: 0;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
border-color: black;
|
||||
margin: 20vh auto;
|
||||
max-height: 60vh;
|
||||
}
|
||||
.comfy-group-manage-outer {
|
||||
max-height: 60vh;
|
||||
min-width: 500px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.comfy-group-manage-outer > header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
justify-content: space-between;
|
||||
background: var(--comfy-menu-bg);
|
||||
padding: 15px 20px;
|
||||
}
|
||||
.comfy-group-manage-outer > header select {
|
||||
background: var(--comfy-input-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
color: var(--input-text);
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.comfy-group-manage h2 {
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
.comfy-group-manage main {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
}
|
||||
.comfy-group-manage .drag-handle {
|
||||
font-weight: bold;
|
||||
}
|
||||
.comfy-group-manage-list {
|
||||
border-right: 1px solid var(--comfy-menu-bg);
|
||||
}
|
||||
.comfy-group-manage-list ul {
|
||||
margin: 40px 0 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.comfy-group-manage-list-items {
|
||||
max-height: calc(100% - 40px);
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.comfy-group-manage-list li {
|
||||
display: flex;
|
||||
padding: 10px 20px 10px 10px;
|
||||
cursor: pointer;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
.comfy-group-manage-list div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.comfy-group-manage-list li:not(.selected):hover div {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.comfy-group-manage-list li.selected {
|
||||
background: var(--border-color);
|
||||
}
|
||||
.comfy-group-manage-list li span {
|
||||
opacity: 0.7;
|
||||
font-size: smaller;
|
||||
}
|
||||
.comfy-group-manage-node {
|
||||
flex: auto;
|
||||
background: var(--border-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.comfy-group-manage-node > div {
|
||||
overflow: auto;
|
||||
}
|
||||
.comfy-group-manage-node header {
|
||||
display: flex;
|
||||
background: var(--bg-color);
|
||||
height: 40px;
|
||||
}
|
||||
.comfy-group-manage-node header a {
|
||||
text-align: center;
|
||||
flex: auto;
|
||||
border-right: 1px solid var(--comfy-menu-bg);
|
||||
border-bottom: 1px solid var(--comfy-menu-bg);
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
font-size: 15px;
|
||||
}
|
||||
.comfy-group-manage-node header a:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
.comfy-group-manage-node header a:not(.active):hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.comfy-group-manage-node header a.active {
|
||||
background: var(--border-color);
|
||||
border-bottom: none;
|
||||
}
|
||||
.comfy-group-manage-node-page {
|
||||
display: none;
|
||||
overflow: auto;
|
||||
}
|
||||
.comfy-group-manage-node-page.active {
|
||||
display: block;
|
||||
}
|
||||
.comfy-group-manage-node-page div {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
.comfy-group-manage-node-page input {
|
||||
border: none;
|
||||
color: var(--input-text);
|
||||
background: var(--comfy-input-bg);
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.comfy-group-manage-node-page input[type="text"] {
|
||||
flex: auto;
|
||||
}
|
||||
.comfy-group-manage-node-page label {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
.comfy-group-manage footer {
|
||||
border-top: 1px solid var(--comfy-menu-bg);
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
.comfy-group-manage footer button {
|
||||
font-size: 14px;
|
||||
padding: 5px 10px;
|
||||
border-radius: 0;
|
||||
}
|
||||
.comfy-group-manage footer button:first-child {
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.spinner[data-v-852efd73] {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border: 4px solid #f3f3f3;
|
||||
border-top: 4px solid #3498db;
|
||||
border-radius: 50%;
|
||||
animation: spin-852efd73 1s linear infinite;
|
||||
}
|
||||
@keyframes spin-852efd73 {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
539
comfy/web/assets/index-BKScv1mm.js
generated
vendored
1
comfy/web/assets/index-BKScv1mm.js.map
generated
vendored
618
comfy/web/assets/index-CE2hpomb.js
generated
vendored
1
comfy/web/assets/index-CE2hpomb.js.map
generated
vendored
392
comfy/web/assets/index-C_ACzX5-.js
generated
vendored
@ -1,392 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { ce as BaseStyle, cf as script$2, cw as ZIndex, cr as addClass, ci as focus, d4 as blockBodyScroll, d6 as unblockBodyScroll, d7 as FocusTrap, l as script$3, cJ as script$4, cU as script$5, co as resolveComponent, r as resolveDirective, o as openBlock, y as createBlock, z as withCtx, f as createElementBlock, aE as mergeProps, k as createVNode, c8 as Transition, i as withDirectives, A as renderSlot, F as Fragment, m as createBaseVNode, Z as normalizeClass, E as toDisplayString, B as createCommentVNode, C as resolveDynamicComponent } from "./index-DIgj6hpb.js";
|
||||
var theme = /* @__PURE__ */ __name(function theme2(_ref) {
|
||||
var dt = _ref.dt;
|
||||
return "\n.p-drawer {\n display: flex;\n flex-direction: column;\n transform: translate3d(0px, 0px, 0px);\n position: relative;\n transition: transform 0.3s;\n background: ".concat(dt("drawer.background"), ";\n color: ").concat(dt("drawer.color"), ";\n border: 1px solid ").concat(dt("drawer.border.color"), ";\n box-shadow: ").concat(dt("drawer.shadow"), ";\n}\n\n.p-drawer-content {\n overflow-y: auto;\n flex-grow: 1;\n padding: ").concat(dt("drawer.content.padding"), ";\n}\n\n.p-drawer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n padding: ").concat(dt("drawer.header.padding"), ";\n}\n\n.p-drawer-footer {\n padding: ").concat(dt("drawer.footer.padding"), ";\n}\n\n.p-drawer-title {\n font-weight: ").concat(dt("drawer.title.font.weight"), ";\n font-size: ").concat(dt("drawer.title.font.size"), ";\n}\n\n.p-drawer-full .p-drawer {\n transition: none;\n transform: none;\n width: 100vw !important;\n height: 100vh !important;\n max-height: 100%;\n top: 0px !important;\n left: 0px !important;\n border-width: 1px;\n}\n\n.p-drawer-left .p-drawer-enter-from,\n.p-drawer-left .p-drawer-leave-to {\n transform: translateX(-100%);\n}\n\n.p-drawer-right .p-drawer-enter-from,\n.p-drawer-right .p-drawer-leave-to {\n transform: translateX(100%);\n}\n\n.p-drawer-top .p-drawer-enter-from,\n.p-drawer-top .p-drawer-leave-to {\n transform: translateY(-100%);\n}\n\n.p-drawer-bottom .p-drawer-enter-from,\n.p-drawer-bottom .p-drawer-leave-to {\n transform: translateY(100%);\n}\n\n.p-drawer-full .p-drawer-enter-from,\n.p-drawer-full .p-drawer-leave-to {\n opacity: 0;\n}\n\n.p-drawer-full .p-drawer-enter-active,\n.p-drawer-full .p-drawer-leave-active {\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.p-drawer-left .p-drawer {\n width: 20rem;\n height: 100%;\n border-inline-end-width: 1px;\n}\n\n.p-drawer-right .p-drawer {\n width: 20rem;\n height: 100%;\n border-inline-start-width: 1px;\n}\n\n.p-drawer-top .p-drawer {\n height: 10rem;\n width: 100%;\n border-block-end-width: 1px;\n}\n\n.p-drawer-bottom .p-drawer {\n height: 10rem;\n width: 100%;\n border-block-start-width: 1px;\n}\n\n.p-drawer-left .p-drawer-content,\n.p-drawer-right .p-drawer-content,\n.p-drawer-top .p-drawer-content,\n.p-drawer-bottom .p-drawer-content {\n width: 100%;\n height: 100%;\n}\n\n.p-drawer-open {\n display: flex;\n}\n\n.p-drawer-mask:dir(rtl) {\n flex-direction: row-reverse;\n}\n");
|
||||
}, "theme");
|
||||
var inlineStyles = {
|
||||
mask: /* @__PURE__ */ __name(function mask(_ref2) {
|
||||
var position = _ref2.position, modal = _ref2.modal;
|
||||
return {
|
||||
position: "fixed",
|
||||
height: "100%",
|
||||
width: "100%",
|
||||
left: 0,
|
||||
top: 0,
|
||||
display: "flex",
|
||||
justifyContent: position === "left" ? "flex-start" : position === "right" ? "flex-end" : "center",
|
||||
alignItems: position === "top" ? "flex-start" : position === "bottom" ? "flex-end" : "center",
|
||||
pointerEvents: modal ? "auto" : "none"
|
||||
};
|
||||
}, "mask"),
|
||||
root: {
|
||||
pointerEvents: "auto"
|
||||
}
|
||||
};
|
||||
var classes = {
|
||||
mask: /* @__PURE__ */ __name(function mask2(_ref3) {
|
||||
var instance = _ref3.instance, props = _ref3.props;
|
||||
var positions = ["left", "right", "top", "bottom"];
|
||||
var pos = positions.find(function(item) {
|
||||
return item === props.position;
|
||||
});
|
||||
return ["p-drawer-mask", {
|
||||
"p-overlay-mask p-overlay-mask-enter": props.modal,
|
||||
"p-drawer-open": instance.containerVisible,
|
||||
"p-drawer-full": instance.fullScreen
|
||||
}, pos ? "p-drawer-".concat(pos) : ""];
|
||||
}, "mask"),
|
||||
root: /* @__PURE__ */ __name(function root(_ref4) {
|
||||
var instance = _ref4.instance;
|
||||
return ["p-drawer p-component", {
|
||||
"p-drawer-full": instance.fullScreen
|
||||
}];
|
||||
}, "root"),
|
||||
header: "p-drawer-header",
|
||||
title: "p-drawer-title",
|
||||
pcCloseButton: "p-drawer-close-button",
|
||||
content: "p-drawer-content",
|
||||
footer: "p-drawer-footer"
|
||||
};
|
||||
var DrawerStyle = BaseStyle.extend({
|
||||
name: "drawer",
|
||||
theme,
|
||||
classes,
|
||||
inlineStyles
|
||||
});
|
||||
var script$1 = {
|
||||
name: "BaseDrawer",
|
||||
"extends": script$2,
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
"default": false
|
||||
},
|
||||
position: {
|
||||
type: String,
|
||||
"default": "left"
|
||||
},
|
||||
header: {
|
||||
type: null,
|
||||
"default": null
|
||||
},
|
||||
baseZIndex: {
|
||||
type: Number,
|
||||
"default": 0
|
||||
},
|
||||
autoZIndex: {
|
||||
type: Boolean,
|
||||
"default": true
|
||||
},
|
||||
dismissable: {
|
||||
type: Boolean,
|
||||
"default": true
|
||||
},
|
||||
showCloseIcon: {
|
||||
type: Boolean,
|
||||
"default": true
|
||||
},
|
||||
closeButtonProps: {
|
||||
type: Object,
|
||||
"default": /* @__PURE__ */ __name(function _default() {
|
||||
return {
|
||||
severity: "secondary",
|
||||
text: true,
|
||||
rounded: true
|
||||
};
|
||||
}, "_default")
|
||||
},
|
||||
closeIcon: {
|
||||
type: String,
|
||||
"default": void 0
|
||||
},
|
||||
modal: {
|
||||
type: Boolean,
|
||||
"default": true
|
||||
},
|
||||
blockScroll: {
|
||||
type: Boolean,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
style: DrawerStyle,
|
||||
provide: /* @__PURE__ */ __name(function provide() {
|
||||
return {
|
||||
$pcDrawer: this,
|
||||
$parentInstance: this
|
||||
};
|
||||
}, "provide")
|
||||
};
|
||||
var script = {
|
||||
name: "Drawer",
|
||||
"extends": script$1,
|
||||
inheritAttrs: false,
|
||||
emits: ["update:visible", "show", "after-show", "hide", "after-hide"],
|
||||
data: /* @__PURE__ */ __name(function data() {
|
||||
return {
|
||||
containerVisible: this.visible
|
||||
};
|
||||
}, "data"),
|
||||
container: null,
|
||||
mask: null,
|
||||
content: null,
|
||||
headerContainer: null,
|
||||
footerContainer: null,
|
||||
closeButton: null,
|
||||
outsideClickListener: null,
|
||||
documentKeydownListener: null,
|
||||
watch: {
|
||||
dismissable: /* @__PURE__ */ __name(function dismissable(newValue) {
|
||||
if (newValue) {
|
||||
this.enableDocumentSettings();
|
||||
} else {
|
||||
this.disableDocumentSettings();
|
||||
}
|
||||
}, "dismissable")
|
||||
},
|
||||
updated: /* @__PURE__ */ __name(function updated() {
|
||||
if (this.visible) {
|
||||
this.containerVisible = this.visible;
|
||||
}
|
||||
}, "updated"),
|
||||
beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount() {
|
||||
this.disableDocumentSettings();
|
||||
if (this.mask && this.autoZIndex) {
|
||||
ZIndex.clear(this.mask);
|
||||
}
|
||||
this.container = null;
|
||||
this.mask = null;
|
||||
}, "beforeUnmount"),
|
||||
methods: {
|
||||
hide: /* @__PURE__ */ __name(function hide() {
|
||||
this.$emit("update:visible", false);
|
||||
}, "hide"),
|
||||
onEnter: /* @__PURE__ */ __name(function onEnter() {
|
||||
this.$emit("show");
|
||||
this.focus();
|
||||
this.bindDocumentKeyDownListener();
|
||||
if (this.autoZIndex) {
|
||||
ZIndex.set("modal", this.mask, this.baseZIndex || this.$primevue.config.zIndex.modal);
|
||||
}
|
||||
}, "onEnter"),
|
||||
onAfterEnter: /* @__PURE__ */ __name(function onAfterEnter() {
|
||||
this.enableDocumentSettings();
|
||||
this.$emit("after-show");
|
||||
}, "onAfterEnter"),
|
||||
onBeforeLeave: /* @__PURE__ */ __name(function onBeforeLeave() {
|
||||
if (this.modal) {
|
||||
!this.isUnstyled && addClass(this.mask, "p-overlay-mask-leave");
|
||||
}
|
||||
}, "onBeforeLeave"),
|
||||
onLeave: /* @__PURE__ */ __name(function onLeave() {
|
||||
this.$emit("hide");
|
||||
}, "onLeave"),
|
||||
onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave() {
|
||||
if (this.autoZIndex) {
|
||||
ZIndex.clear(this.mask);
|
||||
}
|
||||
this.unbindDocumentKeyDownListener();
|
||||
this.containerVisible = false;
|
||||
this.disableDocumentSettings();
|
||||
this.$emit("after-hide");
|
||||
}, "onAfterLeave"),
|
||||
onMaskClick: /* @__PURE__ */ __name(function onMaskClick(event) {
|
||||
if (this.dismissable && this.modal && this.mask === event.target) {
|
||||
this.hide();
|
||||
}
|
||||
}, "onMaskClick"),
|
||||
focus: /* @__PURE__ */ __name(function focus$1() {
|
||||
var findFocusableElement = /* @__PURE__ */ __name(function findFocusableElement2(container) {
|
||||
return container && container.querySelector("[autofocus]");
|
||||
}, "findFocusableElement");
|
||||
var focusTarget = this.$slots.header && findFocusableElement(this.headerContainer);
|
||||
if (!focusTarget) {
|
||||
focusTarget = this.$slots["default"] && findFocusableElement(this.container);
|
||||
if (!focusTarget) {
|
||||
focusTarget = this.$slots.footer && findFocusableElement(this.footerContainer);
|
||||
if (!focusTarget) {
|
||||
focusTarget = this.closeButton;
|
||||
}
|
||||
}
|
||||
}
|
||||
focusTarget && focus(focusTarget);
|
||||
}, "focus$1"),
|
||||
enableDocumentSettings: /* @__PURE__ */ __name(function enableDocumentSettings() {
|
||||
if (this.dismissable && !this.modal) {
|
||||
this.bindOutsideClickListener();
|
||||
}
|
||||
if (this.blockScroll) {
|
||||
blockBodyScroll();
|
||||
}
|
||||
}, "enableDocumentSettings"),
|
||||
disableDocumentSettings: /* @__PURE__ */ __name(function disableDocumentSettings() {
|
||||
this.unbindOutsideClickListener();
|
||||
if (this.blockScroll) {
|
||||
unblockBodyScroll();
|
||||
}
|
||||
}, "disableDocumentSettings"),
|
||||
onKeydown: /* @__PURE__ */ __name(function onKeydown(event) {
|
||||
if (event.code === "Escape") {
|
||||
this.hide();
|
||||
}
|
||||
}, "onKeydown"),
|
||||
containerRef: /* @__PURE__ */ __name(function containerRef(el) {
|
||||
this.container = el;
|
||||
}, "containerRef"),
|
||||
maskRef: /* @__PURE__ */ __name(function maskRef(el) {
|
||||
this.mask = el;
|
||||
}, "maskRef"),
|
||||
contentRef: /* @__PURE__ */ __name(function contentRef(el) {
|
||||
this.content = el;
|
||||
}, "contentRef"),
|
||||
headerContainerRef: /* @__PURE__ */ __name(function headerContainerRef(el) {
|
||||
this.headerContainer = el;
|
||||
}, "headerContainerRef"),
|
||||
footerContainerRef: /* @__PURE__ */ __name(function footerContainerRef(el) {
|
||||
this.footerContainer = el;
|
||||
}, "footerContainerRef"),
|
||||
closeButtonRef: /* @__PURE__ */ __name(function closeButtonRef(el) {
|
||||
this.closeButton = el ? el.$el : void 0;
|
||||
}, "closeButtonRef"),
|
||||
bindDocumentKeyDownListener: /* @__PURE__ */ __name(function bindDocumentKeyDownListener() {
|
||||
if (!this.documentKeydownListener) {
|
||||
this.documentKeydownListener = this.onKeydown;
|
||||
document.addEventListener("keydown", this.documentKeydownListener);
|
||||
}
|
||||
}, "bindDocumentKeyDownListener"),
|
||||
unbindDocumentKeyDownListener: /* @__PURE__ */ __name(function unbindDocumentKeyDownListener() {
|
||||
if (this.documentKeydownListener) {
|
||||
document.removeEventListener("keydown", this.documentKeydownListener);
|
||||
this.documentKeydownListener = null;
|
||||
}
|
||||
}, "unbindDocumentKeyDownListener"),
|
||||
bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener() {
|
||||
var _this = this;
|
||||
if (!this.outsideClickListener) {
|
||||
this.outsideClickListener = function(event) {
|
||||
if (_this.isOutsideClicked(event)) {
|
||||
_this.hide();
|
||||
}
|
||||
};
|
||||
document.addEventListener("click", this.outsideClickListener);
|
||||
}
|
||||
}, "bindOutsideClickListener"),
|
||||
unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener() {
|
||||
if (this.outsideClickListener) {
|
||||
document.removeEventListener("click", this.outsideClickListener);
|
||||
this.outsideClickListener = null;
|
||||
}
|
||||
}, "unbindOutsideClickListener"),
|
||||
isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked(event) {
|
||||
return this.container && !this.container.contains(event.target);
|
||||
}, "isOutsideClicked")
|
||||
},
|
||||
computed: {
|
||||
fullScreen: /* @__PURE__ */ __name(function fullScreen() {
|
||||
return this.position === "full";
|
||||
}, "fullScreen"),
|
||||
closeAriaLabel: /* @__PURE__ */ __name(function closeAriaLabel() {
|
||||
return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : void 0;
|
||||
}, "closeAriaLabel")
|
||||
},
|
||||
directives: {
|
||||
focustrap: FocusTrap
|
||||
},
|
||||
components: {
|
||||
Button: script$3,
|
||||
Portal: script$4,
|
||||
TimesIcon: script$5
|
||||
}
|
||||
};
|
||||
var _hoisted_1 = ["aria-modal"];
|
||||
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
var _component_Button = resolveComponent("Button");
|
||||
var _component_Portal = resolveComponent("Portal");
|
||||
var _directive_focustrap = resolveDirective("focustrap");
|
||||
return openBlock(), createBlock(_component_Portal, null, {
|
||||
"default": withCtx(function() {
|
||||
return [$data.containerVisible ? (openBlock(), createElementBlock("div", mergeProps({
|
||||
key: 0,
|
||||
ref: $options.maskRef,
|
||||
onMousedown: _cache[0] || (_cache[0] = function() {
|
||||
return $options.onMaskClick && $options.onMaskClick.apply($options, arguments);
|
||||
}),
|
||||
"class": _ctx.cx("mask"),
|
||||
style: _ctx.sx("mask", true, {
|
||||
position: _ctx.position,
|
||||
modal: _ctx.modal
|
||||
})
|
||||
}, _ctx.ptm("mask")), [createVNode(Transition, mergeProps({
|
||||
name: "p-drawer",
|
||||
onEnter: $options.onEnter,
|
||||
onAfterEnter: $options.onAfterEnter,
|
||||
onBeforeLeave: $options.onBeforeLeave,
|
||||
onLeave: $options.onLeave,
|
||||
onAfterLeave: $options.onAfterLeave,
|
||||
appear: ""
|
||||
}, _ctx.ptm("transition")), {
|
||||
"default": withCtx(function() {
|
||||
return [_ctx.visible ? withDirectives((openBlock(), createElementBlock("div", mergeProps({
|
||||
key: 0,
|
||||
ref: $options.containerRef,
|
||||
"class": _ctx.cx("root"),
|
||||
style: _ctx.sx("root"),
|
||||
role: "complementary",
|
||||
"aria-modal": _ctx.modal
|
||||
}, _ctx.ptmi("root")), [_ctx.$slots.container ? renderSlot(_ctx.$slots, "container", {
|
||||
key: 0,
|
||||
closeCallback: $options.hide
|
||||
}) : (openBlock(), createElementBlock(Fragment, {
|
||||
key: 1
|
||||
}, [createBaseVNode("div", mergeProps({
|
||||
ref: $options.headerContainerRef,
|
||||
"class": _ctx.cx("header")
|
||||
}, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header", {
|
||||
"class": normalizeClass(_ctx.cx("title"))
|
||||
}, function() {
|
||||
return [_ctx.header ? (openBlock(), createElementBlock("div", mergeProps({
|
||||
key: 0,
|
||||
"class": _ctx.cx("title")
|
||||
}, _ctx.ptm("title")), toDisplayString(_ctx.header), 17)) : createCommentVNode("", true)];
|
||||
}), _ctx.showCloseIcon ? (openBlock(), createBlock(_component_Button, mergeProps({
|
||||
key: 0,
|
||||
ref: $options.closeButtonRef,
|
||||
type: "button",
|
||||
"class": _ctx.cx("pcCloseButton"),
|
||||
"aria-label": $options.closeAriaLabel,
|
||||
unstyled: _ctx.unstyled,
|
||||
onClick: $options.hide
|
||||
}, _ctx.closeButtonProps, {
|
||||
pt: _ctx.ptm("pcCloseButton"),
|
||||
"data-pc-group-section": "iconcontainer"
|
||||
}), {
|
||||
icon: withCtx(function(slotProps) {
|
||||
return [renderSlot(_ctx.$slots, "closeicon", {}, function() {
|
||||
return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.closeIcon ? "span" : "TimesIcon"), mergeProps({
|
||||
"class": [_ctx.closeIcon, slotProps["class"]]
|
||||
}, _ctx.ptm("pcCloseButton")["icon"]), null, 16, ["class"]))];
|
||||
})];
|
||||
}),
|
||||
_: 3
|
||||
}, 16, ["class", "aria-label", "unstyled", "onClick", "pt"])) : createCommentVNode("", true)], 16), createBaseVNode("div", mergeProps({
|
||||
ref: $options.contentRef,
|
||||
"class": _ctx.cx("content")
|
||||
}, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "default")], 16), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({
|
||||
key: 0,
|
||||
ref: $options.footerContainerRef,
|
||||
"class": _ctx.cx("footer")
|
||||
}, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true)], 64))], 16, _hoisted_1)), [[_directive_focustrap]]) : createCommentVNode("", true)];
|
||||
}),
|
||||
_: 3
|
||||
}, 16, ["onEnter", "onAfterEnter", "onBeforeLeave", "onLeave", "onAfterLeave"])], 16)) : createCommentVNode("", true)];
|
||||
}),
|
||||
_: 3
|
||||
});
|
||||
}
|
||||
__name(render, "render");
|
||||
script.render = render;
|
||||
export {
|
||||
script as s
|
||||
};
|
||||
//# sourceMappingURL=index-C_ACzX5-.js.map
|
||||
1
comfy/web/assets/index-C_ACzX5-.js.map
generated
vendored
55774
comfy/web/assets/index-CpICyVZm.js
generated
vendored
1
comfy/web/assets/index-CpICyVZm.js.map
generated
vendored
8790
comfy/web/assets/index-Czd3J-KM.js
generated
vendored
1
comfy/web/assets/index-Czd3J-KM.js.map
generated
vendored
27
comfy/web/assets/index-D8hjiWMw.js
generated
vendored
@ -1,27 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { cu as script$1, o as openBlock, f as createElementBlock, aE as mergeProps, m as createBaseVNode } from "./index-DIgj6hpb.js";
|
||||
var script = {
|
||||
name: "BarsIcon",
|
||||
"extends": script$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()), _cache[0] || (_cache[0] = [createBaseVNode("path", {
|
||||
"fill-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",
|
||||
fill: "currentColor"
|
||||
}, null, -1)]), 16);
|
||||
}
|
||||
__name(render, "render");
|
||||
script.render = render;
|
||||
export {
|
||||
script as s
|
||||
};
|
||||
//# sourceMappingURL=index-D8hjiWMw.js.map
|
||||
1
comfy/web/assets/index-D8hjiWMw.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"index-D8hjiWMw.js","sources":["../../../../../node_modules/@primevue/icons/bars/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\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()), _cache[0] || (_cache[0] = [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)]), 16);\n}\n\nscript.render = render;\n\nexport { script as default };\n//# sourceMappingURL=index.mjs.map\n"],"names":["BaseIcon","createElementVNode"],"mappings":";;;AAGG,IAAC,SAAS;AAAA,EACX,MAAM;AAAA,EACN,WAAWA;AACb;AAEA,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,KAAK,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAACC,gBAAmB,QAAQ;AAAA,IACpE,aAAa;AAAA,IACb,aAAa;AAAA,IACb,GAAG;AAAA,IACH,MAAM;AAAA,EACP,GAAE,MAAM,EAAE,CAAC,IAAI,EAAE;AACpB;AAbS;AAeT,OAAO,SAAS;","x_google_ignoreList":[0]}
|
||||
223630
comfy/web/assets/index-DIgj6hpb.js
generated
vendored
1
comfy/web/assets/index-DIgj6hpb.js.map
generated
vendored
4993
comfy/web/assets/index-DdgRmRKP.js
generated
vendored
1
comfy/web/assets/index-DdgRmRKP.js.map
generated
vendored
4961
comfy/web/assets/index-NNVvMeR_.css
generated
vendored
24875
comfy/web/assets/index-mHcHTYAB.js
generated
vendored
1
comfy/web/assets/index-mHcHTYAB.js.map
generated
vendored
250
comfy/web/assets/keybindingService-CqDMAs0_.js
generated
vendored
@ -1,250 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { az as useKeybindingStore, J as useCommandStore, a as useSettingStore, dL as KeyComboImpl, dM as KeybindingImpl } from "./index-DIgj6hpb.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",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "+",
|
||||
alt: true,
|
||||
shift: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ZoomIn",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
// For number pad '+'
|
||||
{
|
||||
combo: {
|
||||
key: "+",
|
||||
alt: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ZoomIn",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "-",
|
||||
alt: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ZoomOut",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "."
|
||||
},
|
||||
commandId: "Comfy.Canvas.FitView",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "p"
|
||||
},
|
||||
commandId: "Comfy.Canvas.ToggleSelected.Pin",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "c",
|
||||
alt: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Collapse",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "b",
|
||||
ctrl: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Bypass",
|
||||
targetElementId: "graph-canvas"
|
||||
},
|
||||
{
|
||||
combo: {
|
||||
key: "m",
|
||||
ctrl: true
|
||||
},
|
||||
commandId: "Comfy.Canvas.ToggleSelectedNodes.Mute",
|
||||
targetElementId: "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.isReservedByTextInput && (target.tagName === "TEXTAREA" || target.tagName === "INPUT" || target.tagName === "SPAN" && target.classList.contains("property_value"))) {
|
||||
return;
|
||||
}
|
||||
const keybinding = keybindingStore.getKeybinding(keyCombo);
|
||||
if (keybinding && keybinding.targetElementId !== "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.getUserKeybindings())
|
||||
);
|
||||
await settingStore.set(
|
||||
"Comfy.Keybinding.UnsetBindings",
|
||||
Object.values(keybindingStore.getUserUnsetKeybindings())
|
||||
);
|
||||
}
|
||||
__name(persistUserKeybindings, "persistUserKeybindings");
|
||||
return {
|
||||
keybindHandler,
|
||||
registerCoreKeybindings,
|
||||
registerUserKeybindings,
|
||||
persistUserKeybindings
|
||||
};
|
||||
}, "useKeybindingService");
|
||||
export {
|
||||
useKeybindingService as u
|
||||
};
|
||||
//# sourceMappingURL=keybindingService-CqDMAs0_.js.map
|
||||
1
comfy/web/assets/keybindingService-CqDMAs0_.js.map
generated
vendored
BIN
comfy/web/assets/primeicons-C6QP2o4f.woff2
generated
vendored
BIN
comfy/web/assets/primeicons-DMOk5skT.eot
generated
vendored
345
comfy/web/assets/primeicons-Dr5RGzOO.svg
generated
vendored
|
Before Width: | Height: | Size: 334 KiB |
BIN
comfy/web/assets/primeicons-MpK4pl85.ttf
generated
vendored
BIN
comfy/web/assets/primeicons-WjwUDZjB.woff
generated
vendored
90
comfy/web/assets/serverConfigStore-3t3U367D.js
generated
vendored
@ -1,90 +0,0 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
import { ad as defineStore, T as ref, c as computed } from "./index-DIgj6hpb.js";
|
||||
const useServerConfigStore = defineStore("serverConfig", () => {
|
||||
const serverConfigById = ref({});
|
||||
const serverConfigs = computed(() => {
|
||||
return Object.values(serverConfigById.value);
|
||||
});
|
||||
const modifiedConfigs = computed(
|
||||
() => {
|
||||
return serverConfigs.value.filter((config) => {
|
||||
return config.initialValue !== config.value;
|
||||
});
|
||||
}
|
||||
);
|
||||
const revertChanges = /* @__PURE__ */ __name(() => {
|
||||
for (const config of modifiedConfigs.value) {
|
||||
config.value = config.initialValue;
|
||||
}
|
||||
}, "revertChanges");
|
||||
const serverConfigsByCategory = computed(() => {
|
||||
return serverConfigs.value.reduce(
|
||||
(acc, config) => {
|
||||
const category = config.category?.[0] ?? "General";
|
||||
acc[category] = acc[category] || [];
|
||||
acc[category].push(config);
|
||||
return acc;
|
||||
},
|
||||
{}
|
||||
);
|
||||
});
|
||||
const serverConfigValues = computed(() => {
|
||||
return Object.fromEntries(
|
||||
serverConfigs.value.map((config) => {
|
||||
return [
|
||||
config.id,
|
||||
config.value === config.defaultValue || config.value === null || config.value === void 0 ? void 0 : config.value
|
||||
];
|
||||
})
|
||||
);
|
||||
});
|
||||
const launchArgs = computed(() => {
|
||||
const args = Object.assign(
|
||||
{},
|
||||
...serverConfigs.value.map((config) => {
|
||||
if (config.value === config.defaultValue || config.value === null || config.value === void 0) {
|
||||
return {};
|
||||
}
|
||||
return config.getValue ? config.getValue(config.value) : { [config.id]: config.value };
|
||||
})
|
||||
);
|
||||
return Object.fromEntries(
|
||||
Object.entries(args).map(([key, value]) => {
|
||||
if (value === true) {
|
||||
return [key, ""];
|
||||
}
|
||||
return [key, value.toString()];
|
||||
})
|
||||
);
|
||||
});
|
||||
const commandLineArgs = computed(() => {
|
||||
return Object.entries(launchArgs.value).map(([key, value]) => [`--${key}`, value]).flat().filter((arg) => arg !== "").join(" ");
|
||||
});
|
||||
function loadServerConfig(configs, values) {
|
||||
for (const config of configs) {
|
||||
const value = values[config.id] ?? config.defaultValue;
|
||||
serverConfigById.value[config.id] = {
|
||||
...config,
|
||||
value,
|
||||
initialValue: value
|
||||
};
|
||||
}
|
||||
}
|
||||
__name(loadServerConfig, "loadServerConfig");
|
||||
return {
|
||||
serverConfigById,
|
||||
serverConfigs,
|
||||
modifiedConfigs,
|
||||
serverConfigsByCategory,
|
||||
serverConfigValues,
|
||||
launchArgs,
|
||||
commandLineArgs,
|
||||
revertChanges,
|
||||
loadServerConfig
|
||||
};
|
||||
});
|
||||
export {
|
||||
useServerConfigStore as u
|
||||
};
|
||||
//# sourceMappingURL=serverConfigStore-3t3U367D.js.map
|
||||
1
comfy/web/assets/serverConfigStore-3t3U367D.js.map
generated
vendored
2602
comfy/web/assets/sorted-custom-node-map.json
generated
vendored
16
comfy/web/assets/uvMirrors-B-HKMf6X.js
generated
vendored
@ -1,16 +0,0 @@
|
||||
const PYTHON_MIRROR = {
|
||||
settingId: "Comfy-Desktop.UV.PythonInstallMirror",
|
||||
mirror: "https://github.com/astral-sh/python-build-standalone/releases/download",
|
||||
fallbackMirror: "https://bgithub.xyz/astral-sh/python-build-standalone/releases/download",
|
||||
validationPathSuffix: "/20250115/cpython-3.10.16+20250115-aarch64-apple-darwin-debug-full.tar.zst.sha256"
|
||||
};
|
||||
const PYPI_MIRROR = {
|
||||
settingId: "Comfy-Desktop.UV.PypiInstallMirror",
|
||||
mirror: "https://pypi.org/simple/",
|
||||
fallbackMirror: "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||||
};
|
||||
export {
|
||||
PYTHON_MIRROR as P,
|
||||
PYPI_MIRROR as a
|
||||
};
|
||||
//# sourceMappingURL=uvMirrors-B-HKMf6X.js.map
|
||||
1
comfy/web/assets/uvMirrors-B-HKMf6X.js.map
generated
vendored
@ -1 +0,0 @@
|
||||
{"version":3,"file":"uvMirrors-B-HKMf6X.js","sources":["../../src/constants/uvMirrors.ts"],"sourcesContent":["export interface UVMirror {\n /**\n * The setting id defined for the mirror.\n */\n settingId: string\n /**\n * The default mirror to use.\n */\n mirror: string\n /**\n * The fallback mirror to use.\n */\n fallbackMirror: string\n /**\n * The path suffix to validate the mirror is reachable.\n */\n validationPathSuffix?: string\n}\n\nexport const PYTHON_MIRROR: UVMirror = {\n settingId: 'Comfy-Desktop.UV.PythonInstallMirror',\n mirror:\n 'https://github.com/astral-sh/python-build-standalone/releases/download',\n fallbackMirror:\n 'https://bgithub.xyz/astral-sh/python-build-standalone/releases/download',\n validationPathSuffix:\n '/20250115/cpython-3.10.16+20250115-aarch64-apple-darwin-debug-full.tar.zst.sha256'\n}\n\nexport const PYPI_MIRROR: UVMirror = {\n settingId: 'Comfy-Desktop.UV.PypiInstallMirror',\n mirror: 'https://pypi.org/simple/',\n fallbackMirror: 'https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple'\n}\n"],"names":[],"mappings":"AAmBO,MAAM,gBAA0B;AAAA,EACrC,WAAW;AAAA,EACX,QACE;AAAA,EACF,gBACE;AAAA,EACF,sBACE;AACJ;AAEO,MAAM,cAAwB;AAAA,EACnC,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,gBAAgB;AAClB;"}
|
||||
BIN
comfy/web/cursor/colorSelect.png
vendored
|
Before Width: | Height: | Size: 373 B |
BIN
comfy/web/cursor/paintBucket.png
vendored
|
Before Width: | Height: | Size: 410 B |
0
comfy/web/extensions/.gitignore
vendored
2
comfy/web/extensions/core/clipspace.js
vendored
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\clipspace.ts
|
||||
export const ClipspaceDialog = window.comfyAPI.clipspace.ClipspaceDialog;
|
||||
3
comfy/web/extensions/core/groupNode.js
vendored
@ -1,3 +0,0 @@
|
||||
// Shim for extensions\core\groupNode.ts
|
||||
export const GroupNodeConfig = window.comfyAPI.groupNode.GroupNodeConfig;
|
||||
export const GroupNodeHandler = window.comfyAPI.groupNode.GroupNodeHandler;
|
||||
2
comfy/web/extensions/core/groupNodeManage.js
vendored
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\groupNodeManage.ts
|
||||
export const ManageGroupDialog = window.comfyAPI.groupNodeManage.ManageGroupDialog;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\AnimationManager.ts
|
||||
export const AnimationManager = window.comfyAPI.AnimationManager.AnimationManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\CameraManager.ts
|
||||
export const CameraManager = window.comfyAPI.CameraManager.CameraManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\ControlsManager.ts
|
||||
export const ControlsManager = window.comfyAPI.ControlsManager.ControlsManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\EventManager.ts
|
||||
export const EventManager = window.comfyAPI.EventManager.EventManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\LightingManager.ts
|
||||
export const LightingManager = window.comfyAPI.LightingManager.LightingManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\LoaderManager.ts
|
||||
export const LoaderManager = window.comfyAPI.LoaderManager.LoaderManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\ModelManager.ts
|
||||
export const ModelManager = window.comfyAPI.ModelManager.ModelManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\NodeStorage.ts
|
||||
export const NodeStorage = window.comfyAPI.NodeStorage.NodeStorage;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\PreviewManager.ts
|
||||
export const PreviewManager = window.comfyAPI.PreviewManager.PreviewManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\SceneManager.ts
|
||||
export const SceneManager = window.comfyAPI.SceneManager.SceneManager;
|
||||
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\load3d\ViewHelperManager.ts
|
||||
export const ViewHelperManager = window.comfyAPI.ViewHelperManager.ViewHelperManager;
|
||||
2
comfy/web/extensions/core/maskEditorOld.js
vendored
@ -1,2 +0,0 @@
|
||||
// Shim for extensions\core\maskEditorOld.ts
|
||||
export const MaskEditorDialogOld = window.comfyAPI.maskEditorOld.MaskEditorDialogOld;
|
||||
5
comfy/web/extensions/core/widgetInputs.js
vendored
@ -1,5 +0,0 @@
|
||||
// Shim for extensions\core\widgetInputs.ts
|
||||
export const getWidgetConfig = window.comfyAPI.widgetInputs.getWidgetConfig;
|
||||
export const convertToInput = window.comfyAPI.widgetInputs.convertToInput;
|
||||
export const setWidgetConfig = window.comfyAPI.widgetInputs.setWidgetConfig;
|
||||
export const mergeIfValid = window.comfyAPI.widgetInputs.mergeIfValid;
|
||||