comfyui-frontend-package 1.10.16__py3-none-any.whl → 1.11.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- comfyui_frontend_package/static/assets/BaseViewTemplate--LOH-rtG.js +51 -0
- comfyui_frontend_package/static/assets/BaseViewTemplate--LOH-rtG.js.map +1 -0
- comfyui_frontend_package/static/assets/CREDIT.txt +1 -0
- comfyui_frontend_package/static/assets/DesktopStartView-DhFg_-WV.js +19 -0
- comfyui_frontend_package/static/assets/DesktopStartView-DhFg_-WV.js.map +1 -0
- comfyui_frontend_package/static/assets/DesktopUpdateView-B2ahA--K.js +59 -0
- comfyui_frontend_package/static/assets/DesktopUpdateView-B2ahA--K.js.map +1 -0
- comfyui_frontend_package/static/assets/DesktopUpdateView-CoZUcBzh.css +20 -0
- comfyui_frontend_package/static/assets/DownloadGitView-C11P67fb.js +58 -0
- comfyui_frontend_package/static/assets/DownloadGitView-C11P67fb.js.map +1 -0
- comfyui_frontend_package/static/assets/ExtensionPanel-CXFlxUSQ.js +182 -0
- comfyui_frontend_package/static/assets/ExtensionPanel-CXFlxUSQ.js.map +1 -0
- comfyui_frontend_package/static/assets/GraphView-BK1pQvbk.js +5362 -0
- comfyui_frontend_package/static/assets/GraphView-BK1pQvbk.js.map +1 -0
- comfyui_frontend_package/static/assets/GraphView-D3oOJ76s.css +404 -0
- comfyui_frontend_package/static/assets/InstallView-1bbt62og.js +971 -0
- comfyui_frontend_package/static/assets/InstallView-1bbt62og.js.map +1 -0
- comfyui_frontend_package/static/assets/InstallView-B5n3tAa3.css +81 -0
- comfyui_frontend_package/static/assets/KeybindingPanel-BxEJxxOC.js +292 -0
- comfyui_frontend_package/static/assets/KeybindingPanel-BxEJxxOC.js.map +1 -0
- comfyui_frontend_package/static/assets/KeybindingPanel-CwPLIgAf.css +8 -0
- comfyui_frontend_package/static/assets/MaintenanceView-Cu_e206A.css +87 -0
- comfyui_frontend_package/static/assets/MaintenanceView-D4JI2WFp.js +770 -0
- comfyui_frontend_package/static/assets/MaintenanceView-D4JI2WFp.js.map +1 -0
- comfyui_frontend_package/static/assets/ManualConfigurationView-Cq3hPfap.css +7 -0
- comfyui_frontend_package/static/assets/ManualConfigurationView-DK79zT46.js +74 -0
- comfyui_frontend_package/static/assets/ManualConfigurationView-DK79zT46.js.map +1 -0
- comfyui_frontend_package/static/assets/MetricsConsentView-BiHGP4XO.js +86 -0
- comfyui_frontend_package/static/assets/MetricsConsentView-BiHGP4XO.js.map +1 -0
- comfyui_frontend_package/static/assets/NotSupportedView-BiyVuLfX.css +19 -0
- comfyui_frontend_package/static/assets/NotSupportedView-CaASlgg3.js +86 -0
- comfyui_frontend_package/static/assets/NotSupportedView-CaASlgg3.js.map +1 -0
- comfyui_frontend_package/static/assets/ServerConfigPanel-DvcXNRqp.js +156 -0
- comfyui_frontend_package/static/assets/ServerConfigPanel-DvcXNRqp.js.map +1 -0
- comfyui_frontend_package/static/assets/ServerStartView-BLlSvhJ0.css +5 -0
- comfyui_frontend_package/static/assets/ServerStartView-Cnfs01qI.js +100 -0
- comfyui_frontend_package/static/assets/ServerStartView-Cnfs01qI.js.map +1 -0
- comfyui_frontend_package/static/assets/TerminalOutputDrawer-BIo0jnWo.js +676 -0
- comfyui_frontend_package/static/assets/TerminalOutputDrawer-BIo0jnWo.js.map +1 -0
- comfyui_frontend_package/static/assets/UserSelectView-BTlXdLHz.js +101 -0
- comfyui_frontend_package/static/assets/UserSelectView-BTlXdLHz.js.map +1 -0
- comfyui_frontend_package/static/assets/WelcomeView-CmbTXsg3.js +39 -0
- comfyui_frontend_package/static/assets/WelcomeView-CmbTXsg3.js.map +1 -0
- comfyui_frontend_package/static/assets/WelcomeView-aCH40CSK.css +36 -0
- comfyui_frontend_package/static/assets/images/Git-Logo-White.svg +1 -0
- comfyui_frontend_package/static/assets/images/apple-mps-logo.png +0 -0
- comfyui_frontend_package/static/assets/images/manual-configuration.svg +5 -0
- comfyui_frontend_package/static/assets/images/nvidia-logo.svg +6 -0
- comfyui_frontend_package/static/assets/images/sad_girl.png +0 -0
- comfyui_frontend_package/static/assets/index-AvZodD-Y.js +618 -0
- comfyui_frontend_package/static/assets/index-AvZodD-Y.js.map +1 -0
- comfyui_frontend_package/static/assets/index-B3IfdwoO.css +166 -0
- comfyui_frontend_package/static/assets/index-BbmkkEvb.js +27 -0
- comfyui_frontend_package/static/assets/index-BbmkkEvb.js.map +1 -0
- comfyui_frontend_package/static/assets/index-Bdy4Ebj5.js +539 -0
- comfyui_frontend_package/static/assets/index-Bdy4Ebj5.js.map +1 -0
- comfyui_frontend_package/static/assets/index-BsBSowr8.js +55812 -0
- comfyui_frontend_package/static/assets/index-BsBSowr8.js.map +1 -0
- comfyui_frontend_package/static/assets/index-C4MmAha5.js +225173 -0
- comfyui_frontend_package/static/assets/index-C4MmAha5.js.map +1 -0
- comfyui_frontend_package/static/assets/index-CDFcdZLR.js +4993 -0
- comfyui_frontend_package/static/assets/index-CDFcdZLR.js.map +1 -0
- comfyui_frontend_package/static/assets/index-CfhNTyds.js +8790 -0
- comfyui_frontend_package/static/assets/index-CfhNTyds.js.map +1 -0
- comfyui_frontend_package/static/assets/index-DIKvkpu7.js +24875 -0
- comfyui_frontend_package/static/assets/index-DIKvkpu7.js.map +1 -0
- comfyui_frontend_package/static/assets/index-memhI4xy.js +392 -0
- comfyui_frontend_package/static/assets/index-memhI4xy.js.map +1 -0
- comfyui_frontend_package/static/assets/index-vE6pZhFv.css +4989 -0
- comfyui_frontend_package/static/assets/keybindingService-CjdvrYgE.js +250 -0
- comfyui_frontend_package/static/assets/keybindingService-CjdvrYgE.js.map +1 -0
- comfyui_frontend_package/static/assets/primeicons-C6QP2o4f.woff2 +0 -0
- comfyui_frontend_package/static/assets/primeicons-DMOk5skT.eot +0 -0
- comfyui_frontend_package/static/assets/primeicons-Dr5RGzOO.svg +345 -0
- comfyui_frontend_package/static/assets/primeicons-MpK4pl85.ttf +0 -0
- comfyui_frontend_package/static/assets/primeicons-WjwUDZjB.woff +0 -0
- comfyui_frontend_package/static/assets/serverConfigStore-YaL-KzUL.js +90 -0
- comfyui_frontend_package/static/assets/serverConfigStore-YaL-KzUL.js.map +1 -0
- comfyui_frontend_package/static/assets/sorted-custom-node-map.json +2602 -0
- comfyui_frontend_package/static/assets/uvMirrors-B-HKMf6X.js +16 -0
- comfyui_frontend_package/static/assets/uvMirrors-B-HKMf6X.js.map +1 -0
- comfyui_frontend_package/static/cursor/colorSelect.png +0 -0
- comfyui_frontend_package/static/cursor/paintBucket.png +0 -0
- comfyui_frontend_package/static/extensions/core/clipspace.js +2 -0
- comfyui_frontend_package/static/extensions/core/groupNode.js +3 -0
- comfyui_frontend_package/static/extensions/core/groupNodeManage.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/AnimationManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/CameraManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/ControlsManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/EventManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/LightingManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/LoaderManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/ModelManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/NodeStorage.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/PreviewManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/SceneManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/load3d/ViewHelperManager.js +2 -0
- comfyui_frontend_package/static/extensions/core/maskEditorOld.js +2 -0
- comfyui_frontend_package/static/extensions/core/widgetInputs.js +6 -0
- comfyui_frontend_package/static/fonts/materialdesignicons-webfont.woff2 +0 -0
- comfyui_frontend_package/static/index.html +15 -0
- comfyui_frontend_package/static/materialdesignicons.min.css +3 -0
- comfyui_frontend_package/static/scripts/api.js +3 -0
- comfyui_frontend_package/static/scripts/app.js +4 -0
- comfyui_frontend_package/static/scripts/changeTracker.js +2 -0
- comfyui_frontend_package/static/scripts/defaultGraph.js +4 -0
- comfyui_frontend_package/static/scripts/domWidget.js +2 -0
- comfyui_frontend_package/static/scripts/metadata/ebml.js +2 -0
- comfyui_frontend_package/static/scripts/metadata/flac.js +3 -0
- comfyui_frontend_package/static/scripts/metadata/png.js +3 -0
- comfyui_frontend_package/static/scripts/pnginfo.js +6 -0
- comfyui_frontend_package/static/scripts/ui/components/asyncDialog.js +2 -0
- comfyui_frontend_package/static/scripts/ui/components/button.js +2 -0
- comfyui_frontend_package/static/scripts/ui/components/buttonGroup.js +2 -0
- comfyui_frontend_package/static/scripts/ui/components/popup.js +2 -0
- comfyui_frontend_package/static/scripts/ui/components/splitButton.js +2 -0
- comfyui_frontend_package/static/scripts/ui/dialog.js +2 -0
- comfyui_frontend_package/static/scripts/ui/draggableList.js +2 -0
- comfyui_frontend_package/static/scripts/ui/imagePreview.js +3 -0
- comfyui_frontend_package/static/scripts/ui/menu/index.js +2 -0
- comfyui_frontend_package/static/scripts/ui/settings.js +2 -0
- comfyui_frontend_package/static/scripts/ui/toggleSwitch.js +2 -0
- comfyui_frontend_package/static/scripts/ui/utils.js +3 -0
- comfyui_frontend_package/static/scripts/ui.js +4 -0
- comfyui_frontend_package/static/scripts/utils.js +9 -0
- comfyui_frontend_package/static/scripts/widgets.js +6 -0
- comfyui_frontend_package/static/templates/2_pass_pose_worship-1.webp +0 -0
- comfyui_frontend_package/static/templates/2_pass_pose_worship-2.webp +0 -0
- comfyui_frontend_package/static/templates/2_pass_pose_worship.json +673 -0
- comfyui_frontend_package/static/templates/area_composition-1.webp +0 -0
- comfyui_frontend_package/static/templates/area_composition.json +966 -0
- comfyui_frontend_package/static/templates/area_composition_reversed-1.webp +0 -0
- comfyui_frontend_package/static/templates/area_composition_reversed.json +967 -0
- comfyui_frontend_package/static/templates/area_composition_square_area_for_subject-1.webp +0 -0
- comfyui_frontend_package/static/templates/area_composition_square_area_for_subject.json +620 -0
- comfyui_frontend_package/static/templates/controlnet_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/controlnet_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/controlnet_example.json +385 -0
- comfyui_frontend_package/static/templates/default-1.webp +0 -0
- comfyui_frontend_package/static/templates/default.json +373 -0
- comfyui_frontend_package/static/templates/depth_controlnet-1.webp +0 -0
- comfyui_frontend_package/static/templates/depth_controlnet-2.webp +0 -0
- comfyui_frontend_package/static/templates/depth_controlnet.json +378 -0
- comfyui_frontend_package/static/templates/depth_t2i_adapter-1.webp +0 -0
- comfyui_frontend_package/static/templates/depth_t2i_adapter-2.webp +0 -0
- comfyui_frontend_package/static/templates/depth_t2i_adapter.json +371 -0
- comfyui_frontend_package/static/templates/embedding_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/embedding_example.json +267 -0
- comfyui_frontend_package/static/templates/esrgan_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/esrgan_example.json +329 -0
- comfyui_frontend_package/static/templates/flux_canny_model_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_canny_model_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/flux_canny_model_example.json +474 -0
- comfyui_frontend_package/static/templates/flux_depth_lora_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_depth_lora_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/flux_depth_lora_example.json +454 -0
- comfyui_frontend_package/static/templates/flux_dev_checkpoint_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_dev_checkpoint_example.json +332 -0
- comfyui_frontend_package/static/templates/flux_dev_example.json +771 -0
- comfyui_frontend_package/static/templates/flux_fill_inpaint_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_fill_inpaint_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/flux_fill_inpaint_example.json +458 -0
- comfyui_frontend_package/static/templates/flux_fill_outpaint_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_fill_outpaint_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/flux_fill_outpaint_example.json +491 -0
- comfyui_frontend_package/static/templates/flux_redux_model_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_redux_model_example.json +951 -0
- comfyui_frontend_package/static/templates/flux_schnell-1.webp +0 -0
- comfyui_frontend_package/static/templates/flux_schnell.json +302 -0
- comfyui_frontend_package/static/templates/gligen_textbox_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/gligen_textbox_example.json +376 -0
- comfyui_frontend_package/static/templates/hiresfix_esrgan_workflow-1.webp +0 -0
- comfyui_frontend_package/static/templates/hiresfix_esrgan_workflow.json +607 -0
- comfyui_frontend_package/static/templates/hiresfix_latent_workflow-1.webp +0 -0
- comfyui_frontend_package/static/templates/hiresfix_latent_workflow.json +442 -0
- comfyui_frontend_package/static/templates/hunyuan_video_text_to_video-1.webp +0 -0
- comfyui_frontend_package/static/templates/hunyuan_video_text_to_video.json +553 -0
- comfyui_frontend_package/static/templates/image2image-1.webp +0 -0
- comfyui_frontend_package/static/templates/image2image.json +447 -0
- comfyui_frontend_package/static/templates/image_to_video-1.webp +0 -0
- comfyui_frontend_package/static/templates/image_to_video.json +314 -0
- comfyui_frontend_package/static/templates/inpain_model_outpainting-1.webp +0 -0
- comfyui_frontend_package/static/templates/inpain_model_outpainting-2.webp +0 -0
- comfyui_frontend_package/static/templates/inpain_model_outpainting.json +360 -0
- comfyui_frontend_package/static/templates/inpaint_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/inpaint_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/inpaint_example.json +323 -0
- comfyui_frontend_package/static/templates/latent_upscale_different_prompt_model-1.webp +0 -0
- comfyui_frontend_package/static/templates/latent_upscale_different_prompt_model.json +528 -0
- comfyui_frontend_package/static/templates/lora-1.webp +0 -0
- comfyui_frontend_package/static/templates/lora.json +311 -0
- comfyui_frontend_package/static/templates/lora_multiple-1.webp +0 -0
- comfyui_frontend_package/static/templates/lora_multiple.json +357 -0
- comfyui_frontend_package/static/templates/ltxv_image_to_video-1.webp +0 -0
- comfyui_frontend_package/static/templates/ltxv_image_to_video.json +482 -0
- comfyui_frontend_package/static/templates/ltxv_text_to_video-1.webp +0 -0
- comfyui_frontend_package/static/templates/ltxv_text_to_video.json +419 -0
- comfyui_frontend_package/static/templates/mixing_controlnets-1.webp +0 -0
- comfyui_frontend_package/static/templates/mixing_controlnets-2.webp +0 -0
- comfyui_frontend_package/static/templates/mixing_controlnets.json +492 -0
- comfyui_frontend_package/static/templates/mochi_text_to_video_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/mochi_text_to_video_example.json +308 -0
- comfyui_frontend_package/static/templates/sd3.5_large_blur-1.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_blur-2.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_blur.json +582 -0
- comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example-2.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example.json +470 -0
- comfyui_frontend_package/static/templates/sd3.5_large_depth-1.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_depth-2.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_large_depth.json +713 -0
- comfyui_frontend_package/static/templates/sd3.5_simple_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/sd3.5_simple_example.json +278 -0
- comfyui_frontend_package/static/templates/sdxl_refiner_prompt_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/sdxl_refiner_prompt_example.json +728 -0
- comfyui_frontend_package/static/templates/sdxl_revision_text_prompts-1.webp +0 -0
- comfyui_frontend_package/static/templates/sdxl_revision_text_prompts.json +490 -0
- comfyui_frontend_package/static/templates/sdxl_revision_zero_positive-1.webp +0 -0
- comfyui_frontend_package/static/templates/sdxl_revision_zero_positive.json +494 -0
- comfyui_frontend_package/static/templates/sdxl_simple_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/sdxl_simple_example.json +896 -0
- comfyui_frontend_package/static/templates/sdxlturbo_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/sdxlturbo_example.json +372 -0
- comfyui_frontend_package/static/templates/stable_audio_example-1.flac +0 -0
- comfyui_frontend_package/static/templates/stable_audio_example.json +302 -0
- comfyui_frontend_package/static/templates/stable_zero123_example-1.webp +0 -0
- comfyui_frontend_package/static/templates/stable_zero123_example.json +273 -0
- comfyui_frontend_package/static/templates/txt_to_image_to_video-1.webp +0 -0
- comfyui_frontend_package/static/templates/txt_to_image_to_video.json +535 -0
- comfyui_frontend_package/static/user.css +1 -0
- {comfyui_frontend_package-1.10.16.dist-info → comfyui_frontend_package-1.11.6.dist-info}/METADATA +1 -1
- comfyui_frontend_package-1.11.6.dist-info/RECORD +235 -0
- comfyui_frontend_package-1.11.6.dist-info/top_level.txt +1 -0
- comfyui_frontend_package-1.10.16.dist-info/RECORD +0 -5
- comfyui_frontend_package-1.10.16.dist-info/top_level.txt +0 -1
- {comfyui_frontend → comfyui_frontend_package}/__init__.py +0 -0
- {comfyui_frontend_package-1.10.16.dist-info → comfyui_frontend_package-1.11.6.dist-info}/WHEEL +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MaintenanceView-D4JI2WFp.js","sources":["../../src/components/common/RefreshButton.vue","../../src/components/maintenance/StatusTag.vue","../../src/constants/desktopMaintenanceTasks.ts","../../src/stores/maintenanceTaskStore.ts","../../src/utils/refUtil.ts","../../src/components/maintenance/TaskCard.vue","../../src/components/maintenance/TaskListStatusIcon.vue","../../src/components/maintenance/TaskListItem.vue","../../src/components/maintenance/TaskListPanel.vue","../../src/views/MaintenanceView.vue"],"sourcesContent":["<!--\n A refresh button that disables and shows a progress spinner whilst active.\n\n Usage:\n ```vue\n <RefreshButton\n v-model=\"isRefreshing\"\n :outlined=\"false\"\n @refresh=\"refresh\"\n />\n ```\n-->\n<template>\n <Button\n class=\"relative p-button-icon-only\"\n :outlined=\"props.outlined\"\n :severity=\"props.severity\"\n :disabled=\"active || props.disabled\"\n @click=\"(event) => $emit('refresh', event)\"\n >\n <span\n class=\"p-button-icon pi pi-refresh transition-all\"\n :class=\"{ 'opacity-0': active }\"\n data-pc-section=\"icon\"\n ></span>\n <span class=\"p-button-label\" data-pc-section=\"label\"> </span>\n <ProgressSpinner v-show=\"active\" class=\"absolute w-1/2 h-1/2\" />\n </Button>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport ProgressSpinner from 'primevue/progressspinner'\n\nimport { VueSeverity } from '@/types/primeVueTypes'\n\n// Properties\ninterface Props {\n outlined?: boolean\n disabled?: boolean\n severity?: VueSeverity\n}\nconst props = withDefaults(defineProps<Props>(), {\n outlined: true,\n severity: 'secondary'\n})\n\n// Model\nconst active = defineModel<boolean>({ required: true })\n\n// Emits\ndefineEmits(['refresh'])\n</script>\n","<template>\n <Tag :icon :severity :value />\n</template>\n\n<script setup lang=\"ts\">\nimport { PrimeIcons } from '@primevue/core/api'\nimport Tag from 'primevue/tag'\nimport { computed } from 'vue'\n\nimport { t } from '@/i18n'\n\n// Properties\nconst props = defineProps<{\n error: boolean\n refreshing?: boolean\n}>()\n\n// Bindings\nconst icon = computed(() => {\n if (props.refreshing) return PrimeIcons.QUESTION\n if (props.error) return PrimeIcons.TIMES\n return PrimeIcons.CHECK\n})\n\nconst severity = computed(() => {\n if (props.refreshing) return 'info'\n if (props.error) return 'danger'\n return 'success'\n})\n\nconst value = computed(() => {\n if (props.refreshing) return t('maintenance.refreshing')\n if (props.error) return t('g.error')\n return t('maintenance.OK')\n})\n</script>\n","import { PrimeIcons } from '@primevue/core'\n\nimport type { MaintenanceTask } from '@/types/desktop/maintenanceTypes'\nimport { electronAPI } from '@/utils/envUtil'\n\nconst electron = electronAPI()\n\nconst openUrl = (url: string) => {\n window.open(url, '_blank')\n return true\n}\n\nexport const DESKTOP_MAINTENANCE_TASKS: Readonly<MaintenanceTask>[] = [\n {\n id: 'basePath',\n execute: async () => await electron.setBasePath(),\n name: 'Base path',\n shortDescription: 'Change the application base path.',\n errorDescription: 'Unable to open the base path. Please select a new one.',\n description:\n '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.',\n isInstallationFix: true,\n button: {\n icon: PrimeIcons.QUESTION,\n text: 'Select'\n }\n },\n {\n id: 'git',\n headerImg: 'assets/images/Git-Logo-White.svg',\n execute: () => openUrl('https://git-scm.com/downloads/'),\n name: 'Download git',\n shortDescription: 'Open the git download page.',\n errorDescription:\n 'Git is missing. Please download and install git, then restart ComfyUI Desktop.',\n description:\n '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.',\n button: {\n icon: PrimeIcons.EXTERNAL_LINK,\n text: 'Download'\n }\n },\n {\n id: 'vcRedist',\n execute: () => openUrl('https://aka.ms/vs/17/release/vc_redist.x64.exe'),\n name: 'Download VC++ Redist',\n shortDescription: 'Download the latest VC++ Redistributable runtime.',\n description:\n 'The Visual C++ runtime libraries are required to run ComfyUI. You will need to download and install this file.',\n button: {\n icon: PrimeIcons.EXTERNAL_LINK,\n text: 'Download'\n }\n },\n {\n id: 'reinstall',\n severity: 'danger',\n requireConfirm: true,\n execute: async () => {\n await electron.reinstall()\n return true\n },\n name: 'Reinstall ComfyUI',\n shortDescription:\n 'Deletes the desktop app config and load the welcome screen.',\n description:\n 'Delete the desktop app config, restart the app, and load the installation screen.',\n confirmText: 'Delete all saved config and reinstall?',\n button: {\n icon: PrimeIcons.EXCLAMATION_TRIANGLE,\n text: 'Reinstall'\n }\n },\n {\n id: 'pythonPackages',\n requireConfirm: true,\n execute: async () => {\n try {\n await electron.uv.installRequirements()\n return true\n } catch (error) {\n return false\n }\n },\n name: 'Install python packages',\n shortDescription:\n 'Installs the base python packages required to run ComfyUI.',\n errorDescription:\n 'Python packages that are required to run ComfyUI are not installed.',\n description:\n 'This will install the python packages required to run ComfyUI. This includes torch, torchvision, and other dependencies.',\n usesTerminal: true,\n isInstallationFix: true,\n button: {\n icon: PrimeIcons.DOWNLOAD,\n text: 'Install'\n }\n },\n {\n id: 'uv',\n execute: () =>\n openUrl('https://docs.astral.sh/uv/getting-started/installation/'),\n name: 'uv executable',\n shortDescription: 'uv installs and maintains the python environment.',\n description:\n \"This will open the download page for Astral's uv tool. uv is used to install python and manage python packages.\",\n button: {\n icon: 'pi pi-asterisk',\n text: 'Download'\n }\n },\n {\n id: 'uvCache',\n severity: 'danger',\n requireConfirm: true,\n execute: async () => await electron.uv.clearCache(),\n name: 'uv cache',\n shortDescription: 'Remove the Astral uv cache of python packages.',\n description:\n 'This will remove the uv cache directory and its contents. All downloaded python packages will need to be downloaded again.',\n confirmText: 'Delete uv cache of python packages?',\n usesTerminal: true,\n isInstallationFix: true,\n button: {\n icon: PrimeIcons.TRASH,\n text: 'Clear cache'\n }\n },\n {\n id: 'venvDirectory',\n severity: 'danger',\n requireConfirm: true,\n execute: async () => await electron.uv.resetVenv(),\n name: 'Reset virtual environment',\n shortDescription:\n 'Remove and recreate the .venv directory. This removes all python packages.',\n description:\n 'The python environment is where ComfyUI installs python and python packages. It is used to run the ComfyUI server.',\n confirmText: 'Delete the .venv directory?',\n usesTerminal: true,\n isInstallationFix: true,\n button: {\n icon: PrimeIcons.FOLDER,\n text: 'Recreate'\n }\n }\n] as const\n","import type { InstallValidation } from '@comfyorg/comfyui-electron-types'\nimport { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\n\nimport { DESKTOP_MAINTENANCE_TASKS } from '@/constants/desktopMaintenanceTasks'\nimport type { MaintenanceTask } from '@/types/desktop/maintenanceTypes'\nimport { electronAPI } from '@/utils/envUtil'\n\n/** State of a maintenance task, managed by the maintenance task store. */\ntype MaintenanceTaskState = 'warning' | 'error' | 'OK' | 'skipped'\n\n// Type not exported by API\ntype ValidationState = InstallValidation['basePath']\n// Add index to API type\ntype IndexedUpdate = InstallValidation & Record<string, ValidationState>\n\n/** State of a maintenance task, managed by the maintenance task store. */\nexport class MaintenanceTaskRunner {\n constructor(readonly task: MaintenanceTask) {}\n\n private _state?: MaintenanceTaskState\n /** The current state of the task. Setter also controls {@link resolved} as a side-effect. */\n get state() {\n return this._state\n }\n\n /** Updates the task state and {@link resolved} status. */\n setState(value: MaintenanceTaskState) {\n // Mark resolved\n if (this._state === 'error' && value === 'OK') this.resolved = true\n // Mark unresolved (if previously resolved)\n if (value === 'error') this.resolved &&= false\n\n this._state = value\n }\n\n /** `true` if the task has been resolved (was `error`, now `OK`). This is a side-effect of the {@link state} setter. */\n resolved?: boolean\n\n /** Whether the task state is currently being refreshed. */\n refreshing?: boolean\n /** Whether the task is currently running. */\n executing?: boolean\n /** The error message that occurred when the task failed. */\n error?: string\n\n update(update: IndexedUpdate) {\n const state = update[this.task.id]\n\n this.refreshing = state === undefined\n if (state) this.setState(state)\n }\n\n finaliseUpdate(update: IndexedUpdate) {\n this.refreshing = false\n this.setState(update[this.task.id] ?? 'skipped')\n }\n\n /** Wraps the execution of a maintenance task, updating state and rethrowing errors. */\n async execute(task: MaintenanceTask) {\n try {\n this.executing = true\n const success = await task.execute()\n if (!success) return false\n\n this.error = undefined\n return true\n } catch (error) {\n this.error = (error as Error)?.message\n throw error\n } finally {\n this.executing = false\n }\n }\n}\n\n/**\n * User-initiated maintenance tasks. Currently only used by the desktop app maintenance view.\n *\n * Includes running state, task list, and execution / refresh logic.\n * @returns The maintenance task store\n */\nexport const useMaintenanceTaskStore = defineStore('maintenanceTask', () => {\n /** Refresh should run for at least this long, even if it completes much faster. Ensures refresh feels like it is doing something. */\n const electron = electronAPI()\n\n // Reactive state\n const isRefreshing = ref(false)\n const isRunningTerminalCommand = computed(() =>\n tasks.value\n .filter((task) => task.usesTerminal)\n .some((task) => getRunner(task)?.executing)\n )\n const isRunningInstallationFix = computed(() =>\n tasks.value\n .filter((task) => task.isInstallationFix)\n .some((task) => getRunner(task)?.executing)\n )\n\n // Task list\n const tasks = ref(DESKTOP_MAINTENANCE_TASKS)\n\n const taskRunners = ref(\n new Map<MaintenanceTask['id'], MaintenanceTaskRunner>(\n DESKTOP_MAINTENANCE_TASKS.map((x) => [x.id, new MaintenanceTaskRunner(x)])\n )\n )\n\n /** True if any tasks are in an error state. */\n const anyErrors = computed(() =>\n tasks.value.some((task) => getRunner(task).state === 'error')\n )\n\n /**\n * Returns the matching state object for a task.\n * @param task Task to get the matching state object for\n * @returns The state object for this task\n */\n const getRunner = (task: MaintenanceTask) => taskRunners.value.get(task.id)!\n\n /**\n * Updates the task list with the latest validation state.\n * @param validationUpdate Update details passed in by electron\n */\n const processUpdate = (validationUpdate: InstallValidation) => {\n const update = validationUpdate as IndexedUpdate\n isRefreshing.value = true\n\n // Update each task state\n for (const task of tasks.value) {\n getRunner(task).update(update)\n }\n\n // Final update\n if (!update.inProgress && isRefreshing.value) {\n isRefreshing.value = false\n\n for (const task of tasks.value) {\n getRunner(task).finaliseUpdate(update)\n }\n }\n }\n\n /** Clears the resolved status of tasks (when changing filters) */\n const clearResolved = () => {\n for (const task of tasks.value) {\n getRunner(task).resolved &&= false\n }\n }\n\n /** @todo Refreshes Electron tasks only. */\n const refreshDesktopTasks = async () => {\n isRefreshing.value = true\n console.log('Refreshing desktop tasks')\n await electron.Validation.validateInstallation(processUpdate)\n }\n\n const execute = async (task: MaintenanceTask) => {\n return getRunner(task).execute(task)\n }\n\n return {\n tasks,\n isRefreshing,\n isRunningTerminalCommand,\n isRunningInstallationFix,\n execute,\n getRunner,\n processUpdate,\n clearResolved,\n /** True if any tasks are in an error state. */\n anyErrors,\n refreshDesktopTasks\n }\n})\n","import { useTimeout } from '@vueuse/core'\nimport { type Ref, computed, ref, watch } from 'vue'\n\n/**\n * Vue boolean ref (writable computed) with one difference: when set to `true` it stays that way for at least {@link minDuration}.\n * If set to `false` before {@link minDuration} has passed, it uses a timer to delay the change.\n * @param value The default value to set on this ref\n * @param minDuration The minimum time that this ref must be `true` for\n * @returns A custom boolean vue ref with a minimum activation time\n */\nexport function useMinLoadingDurationRef(\n value: Ref<boolean>,\n minDuration = 250\n) {\n const current = ref(value.value)\n\n const { ready, start } = useTimeout(minDuration, {\n controls: true,\n immediate: false\n })\n\n watch(value, (newValue) => {\n if (newValue && !current.value) start()\n\n current.value = newValue\n })\n\n return computed(() => current.value || !ready.value)\n}\n","<template>\n <div\n class=\"task-div max-w-48 min-h-52 grid relative\"\n :class=\"{ 'opacity-75': isLoading }\"\n >\n <Card\n class=\"max-w-48 relative h-full overflow-hidden\"\n :class=\"{ 'opacity-65': runner.state !== 'error' }\"\n v-bind=\"(({ onClick, ...rest }) => rest)($attrs)\"\n >\n <template #header>\n <i\n v-if=\"runner.state === 'error'\"\n class=\"pi pi-exclamation-triangle text-red-500 absolute m-2 top-0 -right-14 opacity-15\"\n style=\"font-size: 10rem\"\n />\n <img\n v-if=\"task.headerImg\"\n :src=\"task.headerImg\"\n class=\"object-contain w-full h-full opacity-25 pt-4 px-4\"\n />\n </template>\n <template #title>{{ task.name }}</template>\n <template #content>{{ description }}</template>\n <template #footer>\n <div class=\"flex gap-4 mt-1\">\n <Button\n :icon=\"task.button?.icon\"\n :label=\"task.button?.text\"\n class=\"w-full\"\n raised\n icon-pos=\"right\"\n @click=\"(event) => $emit('execute', event)\"\n :loading=\"isExecuting\"\n />\n </div>\n </template>\n </Card>\n\n <i\n v-if=\"!isLoading && runner.state === 'OK'\"\n class=\"task-card-ok pi pi-check\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport Card from 'primevue/card'\nimport { computed } from 'vue'\n\nimport { useMaintenanceTaskStore } from '@/stores/maintenanceTaskStore'\nimport type { MaintenanceTask } from '@/types/desktop/maintenanceTypes'\nimport { useMinLoadingDurationRef } from '@/utils/refUtil'\n\nconst taskStore = useMaintenanceTaskStore()\nconst runner = computed(() => taskStore.getRunner(props.task))\n\n// Properties\nconst props = defineProps<{\n task: MaintenanceTask\n}>()\n\n// Events\ndefineEmits<{\n execute: [event: MouseEvent]\n}>()\n\n// Bindings\nconst description = computed(() =>\n runner.value.state === 'error'\n ? props.task.errorDescription ?? props.task.shortDescription\n : props.task.shortDescription\n)\n\n// Use a minimum run time to ensure tasks \"feel\" like they have run\nconst reactiveLoading = computed(() => runner.value.refreshing)\nconst reactiveExecuting = computed(() => runner.value.executing)\n\nconst isLoading = useMinLoadingDurationRef(reactiveLoading, 250)\nconst isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250)\n</script>\n\n<style scoped>\n.task-card-ok {\n @apply text-green-500 absolute -right-4 -bottom-4 opacity-100 row-span-full col-span-full transition-opacity;\n\n font-size: 4rem;\n text-shadow: 0.25rem 0 0.5rem black;\n z-index: 10;\n}\n\n.p-card {\n @apply transition-opacity;\n\n --p-card-background: var(--p-button-secondary-background);\n opacity: 0.9;\n\n &.opacity-65 {\n opacity: 0.4;\n }\n\n &:hover {\n opacity: 1;\n }\n}\n\n:deep(.p-card-header) {\n z-index: 0;\n}\n\n:deep(.p-card-body) {\n z-index: 1;\n flex-grow: 1;\n justify-content: space-between;\n}\n\n.task-div {\n > i {\n pointer-events: none;\n }\n\n &:hover > i {\n opacity: 0.2;\n }\n}\n</style>\n","<template>\n <ProgressSpinner v-if=\"!state || loading\" class=\"h-8 w-8\" />\n <template v-else>\n <i :class=\"cssClasses\" v-tooltip.top=\"{ value: tooltip, showDelay: 250 }\" />\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { PrimeIcons } from '@primevue/core/api'\nimport ProgressSpinner from 'primevue/progressspinner'\nimport { MaybeRef, computed } from 'vue'\n\nimport { t } from '@/i18n'\n\n// Properties\nconst tooltip = computed(() => {\n if (props.state === 'error') {\n return t('g.error')\n } else if (props.state === 'OK') {\n return t('maintenance.OK')\n } else {\n return t('maintenance.Skipped')\n }\n})\n\nconst cssClasses = computed(() => {\n let classes: string\n if (props.state === 'error') {\n classes = `${PrimeIcons.EXCLAMATION_TRIANGLE} text-red-500`\n } else if (props.state === 'OK') {\n classes = `${PrimeIcons.CHECK} text-green-500`\n } else {\n classes = PrimeIcons.MINUS\n }\n\n return `text-3xl pi ${classes}`\n})\n\n// Model\nconst props = defineProps<{\n state: 'warning' | 'error' | 'resolved' | 'OK' | 'skipped' | undefined\n loading?: MaybeRef<boolean>\n}>()\n</script>\n","<template>\n <tr\n class=\"border-neutral-700 border-solid border-y\"\n :class=\"{\n 'opacity-50': runner.resolved,\n 'opacity-75': isLoading && runner.resolved\n }\"\n >\n <td class=\"text-center w-16\">\n <TaskListStatusIcon :state=\"runner.state\" :loading=\"isLoading\" />\n </td>\n <td>\n <p class=\"inline-block\">{{ task.name }}</p>\n <Button\n class=\"inline-block mx-2\"\n type=\"button\"\n :icon=\"PrimeIcons.INFO_CIRCLE\"\n severity=\"secondary\"\n :text=\"true\"\n @click=\"toggle\"\n />\n\n <Popover ref=\"infoPopover\" class=\"block m-1 max-w-64 min-w-32\">\n <span class=\"whitespace-pre-line\">{{ task.description }}</span>\n </Popover>\n </td>\n <td class=\"text-right px-4\">\n <Button\n :icon=\"task.button?.icon\"\n :label=\"task.button?.text\"\n :severity\n icon-pos=\"right\"\n @click=\"(event) => $emit('execute', event)\"\n :loading=\"isExecuting\"\n />\n </td>\n </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport { PrimeIcons } from '@primevue/core/api'\nimport Button from 'primevue/button'\nimport Popover from 'primevue/popover'\nimport { computed, ref } from 'vue'\n\nimport { useMaintenanceTaskStore } from '@/stores/maintenanceTaskStore'\nimport type { MaintenanceTask } from '@/types/desktop/maintenanceTypes'\nimport { VueSeverity } from '@/types/primeVueTypes'\nimport { useMinLoadingDurationRef } from '@/utils/refUtil'\n\nimport TaskListStatusIcon from './TaskListStatusIcon.vue'\n\nconst taskStore = useMaintenanceTaskStore()\nconst runner = computed(() => taskStore.getRunner(props.task))\n\n// Properties\nconst props = defineProps<{\n task: MaintenanceTask\n}>()\n\n// Events\ndefineEmits<{\n execute: [event: MouseEvent]\n}>()\n\n// Binding\nconst severity = computed<VueSeverity>(() =>\n runner.value.state === 'error' || runner.value.state === 'warning'\n ? 'primary'\n : 'secondary'\n)\n\n// Use a minimum run time to ensure tasks \"feel\" like they have run\nconst reactiveLoading = computed(() => runner.value.refreshing)\nconst reactiveExecuting = computed(() => runner.value.executing)\n\nconst isLoading = useMinLoadingDurationRef(reactiveLoading, 250)\nconst isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250)\n\n// Popover\nconst infoPopover = ref()\n\nconst toggle = (event: Event) => {\n infoPopover.value.toggle(event)\n}\n</script>\n","<template>\n <!-- Tasks -->\n <section class=\"my-4\">\n <template v-if=\"filter.tasks.length === 0\">\n <!-- Empty filter -->\n <Divider />\n <p class=\"text-neutral-400 w-full text-center\">\n {{ $t('maintenance.allOk') }}\n </p>\n </template>\n\n <template v-else>\n <!-- Display: List -->\n <table\n v-if=\"displayAsList === PrimeIcons.LIST\"\n class=\"w-full border-collapse border-hidden\"\n >\n <TaskListItem\n v-for=\"task in filter.tasks\"\n :key=\"task.id\"\n :task\n @execute=\"(event) => confirmButton(event, task)\"\n />\n </table>\n\n <!-- Display: Cards -->\n <template v-else>\n <div class=\"flex flex-wrap justify-evenly gap-8 pad-y my-4\">\n <TaskCard\n v-for=\"task in filter.tasks\"\n :key=\"task.id\"\n :task\n @execute=\"(event) => confirmButton(event, task)\"\n />\n </div>\n </template>\n </template>\n <ConfirmPopup />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { PrimeIcons } from '@primevue/core/api'\nimport { useConfirm, useToast } from 'primevue'\nimport ConfirmPopup from 'primevue/confirmpopup'\nimport Divider from 'primevue/divider'\n\nimport { t } from '@/i18n'\nimport { useMaintenanceTaskStore } from '@/stores/maintenanceTaskStore'\nimport type {\n MaintenanceFilter,\n MaintenanceTask\n} from '@/types/desktop/maintenanceTypes'\n\nimport TaskCard from './TaskCard.vue'\nimport TaskListItem from './TaskListItem.vue'\n\nconst toast = useToast()\nconst confirm = useConfirm()\nconst taskStore = useMaintenanceTaskStore()\n\n// Properties\nconst props = defineProps<{\n displayAsList: string\n filter: MaintenanceFilter\n isRefreshing: boolean\n}>()\n\nconst executeTask = async (task: MaintenanceTask) => {\n let message: string | undefined\n\n try {\n // Success\n if ((await taskStore.execute(task)) === true) return\n\n message = t('maintenance.error.taskFailed')\n } catch (error) {\n message = (error as Error)?.message\n }\n\n toast.add({\n severity: 'error',\n summary: t('maintenance.error.toastTitle'),\n detail: message ?? t('maintenance.error.defaultDescription'),\n life: 10_000\n })\n}\n\n// Commands\nconst confirmButton = async (event: MouseEvent, task: MaintenanceTask) => {\n if (!task.requireConfirm) {\n await executeTask(task)\n return\n }\n\n confirm.require({\n target: event.currentTarget as HTMLElement,\n message: task.confirmText ?? t('maintenance.confirmTitle'),\n icon: 'pi pi-exclamation-circle',\n rejectProps: {\n label: t('g.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptProps: {\n label: task.button?.text ?? t('g.save'),\n severity: task.severity ?? 'primary'\n },\n // TODO: Not awaited.\n accept: async () => {\n await executeTask(task)\n }\n })\n}\n</script>\n","<template>\n <BaseViewTemplate dark>\n <div\n 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\"\n >\n <div class=\"max-w-screen-sm w-screen m-8 relative\">\n <!-- Header -->\n <h1 class=\"backspan pi-wrench text-4xl font-bold\">\n {{ t('maintenance.title') }}\n </h1>\n\n <!-- Toolbar -->\n <div class=\"w-full flex flex-wrap gap-4 items-center\">\n <span class=\"grow\">\n {{ t('maintenance.status') }}:\n <StatusTag :refreshing=\"isRefreshing\" :error=\"anyErrors\" />\n </span>\n <div class=\"flex gap-4 items-center\">\n <SelectButton\n v-model=\"displayAsList\"\n :options=\"[PrimeIcons.LIST, PrimeIcons.TH_LARGE]\"\n :allow-empty=\"false\"\n >\n <template #option=\"opts\"><i :class=\"opts.option\" /></template>\n </SelectButton>\n <SelectButton\n v-model=\"filter\"\n :options=\"filterOptions\"\n :allow-empty=\"false\"\n optionLabel=\"value\"\n dataKey=\"value\"\n area-labelledby=\"custom\"\n @change=\"clearResolved\"\n >\n <template #option=\"opts\">\n <i :class=\"opts.option.icon\"></i>\n <span class=\"max-sm:hidden\">{{ opts.option.value }}</span>\n </template>\n </SelectButton>\n <RefreshButton\n v-model=\"isRefreshing\"\n severity=\"secondary\"\n @refresh=\"refreshDesktopTasks\"\n />\n </div>\n </div>\n\n <!-- Tasks -->\n <TaskListPanel\n class=\"border-neutral-700 border-solid border-x-0 border-y\"\n :filter\n :displayAsList\n :isRefreshing\n />\n\n <!-- Actions -->\n <div class=\"flex justify-between gap-4 flex-row\">\n <Button\n :label=\"t('maintenance.consoleLogs')\"\n icon=\"pi pi-desktop\"\n icon-pos=\"left\"\n severity=\"secondary\"\n @click=\"toggleConsoleDrawer\"\n />\n <Button\n :label=\"t('g.continue')\"\n icon=\"pi pi-arrow-right\"\n icon-pos=\"left\"\n :severity=\"anyErrors ? 'secondary' : 'primary'\"\n @click=\"() => completeValidation()\"\n :loading=\"isRefreshing\"\n />\n </div>\n </div>\n\n <TerminalOutputDrawer\n v-model=\"terminalVisible\"\n :header=\"t('g.terminal')\"\n :default-message=\"t('maintenance.terminalDefaultMessage')\"\n />\n <Toast />\n </div>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { PrimeIcons } from '@primevue/core/api'\nimport Button from 'primevue/button'\nimport SelectButton from 'primevue/selectbutton'\nimport Toast from 'primevue/toast'\nimport { useToast } from 'primevue/usetoast'\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { watch } from 'vue'\n\nimport RefreshButton from '@/components/common/RefreshButton.vue'\nimport StatusTag from '@/components/maintenance/StatusTag.vue'\nimport TaskListPanel from '@/components/maintenance/TaskListPanel.vue'\nimport TerminalOutputDrawer from '@/components/maintenance/TerminalOutputDrawer.vue'\nimport { t } from '@/i18n'\nimport { useMaintenanceTaskStore } from '@/stores/maintenanceTaskStore'\nimport { MaintenanceFilter } from '@/types/desktop/maintenanceTypes'\nimport { electronAPI } from '@/utils/envUtil'\nimport { useMinLoadingDurationRef } from '@/utils/refUtil'\n\nimport BaseViewTemplate from './templates/BaseViewTemplate.vue'\n\nconst electron = electronAPI()\nconst toast = useToast()\nconst taskStore = useMaintenanceTaskStore()\nconst { clearResolved, processUpdate, refreshDesktopTasks } = taskStore\n\nconst terminalVisible = ref(false)\n\n// Use a minimum run time to ensure tasks \"feel\" like they have run\nconst reactiveIsRefreshing = computed(() => taskStore.isRefreshing)\n/** `true` when waiting on tasks to complete. */\nconst isRefreshing = useMinLoadingDurationRef(reactiveIsRefreshing, 250)\n\n/** True if any tasks are in an error state. */\nconst anyErrors = computed(() => taskStore.anyErrors)\n\n/** Whether to display tasks as a list or cards. */\nconst displayAsList = ref(PrimeIcons.TH_LARGE)\n\nconst errorFilter = computed(() =>\n taskStore.tasks.filter((x) => {\n const { state, resolved } = taskStore.getRunner(x)\n return state === 'error' || resolved\n })\n)\n\nconst filterOptions = ref([\n { icon: PrimeIcons.FILTER_FILL, value: 'All', tasks: taskStore.tasks },\n { icon: PrimeIcons.EXCLAMATION_TRIANGLE, value: 'Errors', tasks: errorFilter }\n])\n\n/** Filter binding; can be set to show all tasks, or only errors. */\nconst filter = ref<MaintenanceFilter>(filterOptions.value[0])\n\n/** If valid, leave the validation window. */\nconst completeValidation = async () => {\n const isValid = await electron.Validation.complete()\n if (!isValid) {\n toast.add({\n severity: 'error',\n summary: t('g.error'),\n detail: t('maintenance.error.cannotContinue'),\n life: 5_000\n })\n }\n}\n\nconst toggleConsoleDrawer = () => {\n terminalVisible.value = !terminalVisible.value\n}\n\n// Show terminal when in use\nwatch(\n () => taskStore.isRunningTerminalCommand,\n (value) => {\n terminalVisible.value = value\n }\n)\n\nonMounted(async () => {\n electron.Validation.onUpdate(processUpdate)\n\n const update = await electron.Validation.getStatus()\n if (Object.values(update).some((x) => x === 'error')) {\n filter.value = filterOptions.value[1]\n }\n processUpdate(update)\n})\n\nonUnmounted(() => electron.Validation.dispose())\n</script>\n\n<style scoped>\n:deep(.p-tag) {\n --p-tag-gap: 0.375rem;\n}\n\n.backspan::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":["_useModel","electron"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0CA,UAAM,QAAQ;AAMR,UAAA,SAASA,SAAuC,SAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCtD,UAAM,QAAQ;AAMR,UAAA,OAAO,SAAS,MAAM;AACtB,UAAA,MAAM,WAAY,QAAO,WAAW;AACpC,UAAA,MAAM,MAAO,QAAO,WAAW;AACnC,aAAO,WAAW;AAAA,IAAA,CACnB;AAEK,UAAA,WAAW,SAAS,MAAM;AAC1B,UAAA,MAAM,WAAmB,QAAA;AACzB,UAAA,MAAM,MAAc,QAAA;AACjB,aAAA;AAAA,IAAA,CACR;AAEK,UAAA,QAAQ,SAAS,MAAM;AAC3B,UAAI,MAAM,WAAmB,QAAA,EAAE,wBAAwB;AACvD,UAAI,MAAM,MAAc,QAAA,EAAE,SAAS;AACnC,aAAO,EAAE,gBAAgB;AAAA,IAAA,CAC1B;;;;;;;;;;AC7BD,MAAM,WAAW,YAAY;AAE7B,MAAM,UAAU,wBAAC,QAAgB;AACxB,SAAA,KAAK,KAAK,QAAQ;AAClB,SAAA;AACT,GAHgB;AAKT,MAAM,4BAAyD;AAAA,EACpE;AAAA,IACE,IAAI;AAAA,IACJ,SAAS,mCAAY,MAAM,SAAS,YAAY,GAAvC;AAAA,IACT,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,aACE;AAAA,IACF,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,SAAS,6BAAM,QAAQ,gCAAgC,GAA9C;AAAA,IACT,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,kBACE;AAAA,IACF,aACE;AAAA,IACF,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS,6BAAM,QAAQ,gDAAgD,GAA9D;AAAA,IACT,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,aACE;AAAA,IACF,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,SAAS,mCAAY;AACnB,YAAM,SAAS;AACR,aAAA;AAAA,IACT,GAHS;AAAA,IAIT,MAAM;AAAA,IACN,kBACE;AAAA,IACF,aACE;AAAA,IACF,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,gBAAgB;AAAA,IAChB,SAAS,mCAAY;AACf,UAAA;AACI,cAAA,SAAS,GAAG;AACX,eAAA;AAAA,eACA,OAAO;AACP,eAAA;AAAA,MACT;AAAA,IACF,GAPS;AAAA,IAQT,MAAM;AAAA,IACN,kBACE;AAAA,IACF,kBACE;AAAA,IACF,aACE;AAAA,IACF,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS,6BACP,QAAQ,yDAAyD,GAD1D;AAAA,IAET,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,aACE;AAAA,IACF,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,SAAS,mCAAY,MAAM,SAAS,GAAG,WAAW,GAAzC;AAAA,IACT,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,aACE;AAAA,IACF,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,SAAS,mCAAY,MAAM,SAAS,GAAG,UAAU,GAAxC;AAAA,IACT,MAAM;AAAA,IACN,kBACE;AAAA,IACF,aACE;AAAA,IACF,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,MAAM;AAAA,IACR;AAAA,EACF;AACF;ACjIO,MAAM,sBAAsB;AAAA,SAAA;AAAA;AAAA;AAAA,EACjC,YAAqB,MAAuB;AAAvB,SAAA,OAAA;AAAA,EAAwB;AAAA,EAErC;AAAA;AAAA,EAER,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,SAAS,OAA6B;AAEpC,QAAI,KAAK,WAAW,WAAW,UAAU,WAAW,WAAW;AAE3D,QAAA,UAAU,QAAS,MAAK,aAAa;AAEzC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EAEA,OAAO,QAAuB;AAC5B,UAAM,QAAQ,OAAO,KAAK,KAAK,EAAE;AAEjC,SAAK,aAAa,UAAU;AACxB,QAAA,MAAY,MAAA,SAAS,KAAK;AAAA,EAChC;AAAA,EAEA,eAAe,QAAuB;AACpC,SAAK,aAAa;AAClB,SAAK,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK,SAAS;AAAA,EACjD;AAAA;AAAA,EAGA,MAAM,QAAQ,MAAuB;AAC/B,QAAA;AACF,WAAK,YAAY;AACX,YAAA,UAAU,MAAM,KAAK;AACvB,UAAA,CAAC,QAAgB,QAAA;AAErB,WAAK,QAAQ;AACN,aAAA;AAAA,aACA,OAAO;AACd,WAAK,QAAS,OAAiB;AACzB,YAAA;AAAA,IAAA,UACN;AACA,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AACF;AAQa,MAAA,0BAA0B,YAAY,mBAAmB,MAAM;AAE1E,QAAMC,YAAW;AAGX,QAAA,eAAe,IAAI,KAAK;AAC9B,QAAM,2BAA2B;AAAA,IAAS,MACxC,MAAM,MACH,OAAO,CAAC,SAAS,KAAK,YAAY,EAClC,KAAK,CAAC,SAAS,UAAU,IAAI,GAAG,SAAS;AAAA,EAAA;AAE9C,QAAM,2BAA2B;AAAA,IAAS,MACxC,MAAM,MACH,OAAO,CAAC,SAAS,KAAK,iBAAiB,EACvC,KAAK,CAAC,SAAS,UAAU,IAAI,GAAG,SAAS;AAAA,EAAA;AAIxC,QAAA,QAAQ,IAAI,yBAAyB;AAE3C,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,MACF,0BAA0B,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,sBAAsB,CAAC,CAAC,CAAC;AAAA,IAC3E;AAAA,EAAA;AAIF,QAAM,YAAY;AAAA,IAAS,MACzB,MAAM,MAAM,KAAK,CAAC,SAAS,UAAU,IAAI,EAAE,UAAU,OAAO;AAAA,EAAA;AAQ9D,QAAM,YAAY,wBAAC,SAA0B,YAAY,MAAM,IAAI,KAAK,EAAE,GAAxD;AAMZ,QAAA,gBAAgB,wBAAC,qBAAwC;AAC7D,UAAM,SAAS;AACf,iBAAa,QAAQ;AAGV,eAAA,QAAQ,MAAM,OAAO;AACpB,gBAAA,IAAI,EAAE,OAAO,MAAM;AAAA,IAC/B;AAGA,QAAI,CAAC,OAAO,cAAc,aAAa,OAAO;AAC5C,mBAAa,QAAQ;AAEV,iBAAA,QAAQ,MAAM,OAAO;AACpB,kBAAA,IAAI,EAAE,eAAe,MAAM;AAAA,MACvC;AAAA,IACF;AAAA,EAAA,GAhBoB;AAoBtB,QAAM,gBAAgB,6BAAM;AACf,eAAA,QAAQ,MAAM,OAAO;AACpB,gBAAA,IAAI,EAAE,aAAa;AAAA,IAC/B;AAAA,EAAA,GAHoB;AAOtB,QAAM,sBAAsB,mCAAY;AACtC,iBAAa,QAAQ;AACrB,YAAQ,IAAI,0BAA0B;AAChC,UAAAA,UAAS,WAAW,qBAAqB,aAAa;AAAA,EAAA,GAHlC;AAMtB,QAAA,UAAU,8BAAO,SAA0B;AAC/C,WAAO,UAAU,IAAI,EAAE,QAAQ,IAAI;AAAA,EAAA,GADrB;AAIT,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,EAAA;AAEJ,CAAC;ACpKe,SAAA,yBACd,OACA,cAAc,KACd;AACM,QAAA,UAAU,IAAI,MAAM,KAAK;AAE/B,QAAM,EAAE,OAAO,UAAU,WAAW,aAAa;AAAA,IAC/C,UAAU;AAAA,IACV,WAAW;AAAA,EAAA,CACZ;AAEK,QAAA,OAAO,CAAC,aAAa;AACzB,QAAI,YAAY,CAAC,QAAQ,MAAa,OAAA;AAEtC,YAAQ,QAAQ;AAAA,EAAA,CACjB;AAED,SAAO,SAAS,MAAM,QAAQ,SAAS,CAAC,MAAM,KAAK;AACrD;AAlBgB;;;;;;;;;;;;;;;;;;;AC6ChB,UAAM,YAAY;AAClB,UAAM,SAAS,SAAS,MAAM,UAAU,UAAU,MAAM,IAAI,CAAC;AAG7D,UAAM,QAAQ;AAUd,UAAM,cAAc;AAAA,MAAS,MAC3B,OAAO,MAAM,UAAU,UACnB,MAAM,KAAK,oBAAoB,MAAM,KAAK,mBAC1C,MAAM,KAAK;AAAA,IAAA;AAIjB,UAAM,kBAAkB,SAAS,MAAM,OAAO,MAAM,UAAU;AAC9D,UAAM,oBAAoB,SAAS,MAAM,OAAO,MAAM,SAAS;AAEzD,UAAA,YAAY,yBAAyB,iBAAiB,GAAG;AACzD,UAAA,cAAc,yBAAyB,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjE7D,UAAA,UAAU,SAAS,MAAM;AACzB,UAAA,MAAM,UAAU,SAAS;AAC3B,eAAO,EAAE,SAAS;AAAA,MAAA,WACT,MAAM,UAAU,MAAM;AAC/B,eAAO,EAAE,gBAAgB;AAAA,MAAA,OACpB;AACL,eAAO,EAAE,qBAAqB;AAAA,MAChC;AAAA,IAAA,CACD;AAEK,UAAA,aAAa,SAAS,MAAM;AAC5B,UAAA;AACA,UAAA,MAAM,UAAU,SAAS;AACjB,kBAAA,GAAG,WAAW,oBAAoB;AAAA,MAAA,WACnC,MAAM,UAAU,MAAM;AACrB,kBAAA,GAAG,WAAW,KAAK;AAAA,MAAA,OACxB;AACL,kBAAU,WAAW;AAAA,MACvB;AAEA,aAAO,eAAe,OAAO;AAAA,IAAA,CAC9B;AAGD,UAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACad,UAAM,YAAY;AAClB,UAAM,SAAS,SAAS,MAAM,UAAU,UAAU,MAAM,IAAI,CAAC;AAG7D,UAAM,QAAQ;AAUd,UAAM,WAAW;AAAA,MAAsB,MACrC,OAAO,MAAM,UAAU,WAAW,OAAO,MAAM,UAAU,YACrD,YACA;AAAA,IAAA;AAIN,UAAM,kBAAkB,SAAS,MAAM,OAAO,MAAM,UAAU;AAC9D,UAAM,oBAAoB,SAAS,MAAM,OAAO,MAAM,SAAS;AAEzD,UAAA,YAAY,yBAAyB,iBAAiB,GAAG;AACzD,UAAA,cAAc,yBAAyB,mBAAmB,GAAG;AAGnE,UAAM,cAAc;AAEd,UAAA,SAAS,wBAAC,UAAiB;AACnB,kBAAA,MAAM,OAAO,KAAK;AAAA,IAAA,GADjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBf,UAAM,QAAQ;AACd,UAAM,UAAU;AAChB,UAAM,YAAY;AAGlB,UAAM,QAAQ;AAMR,UAAA,cAAc,8BAAO,SAA0B;AAC/C,UAAA;AAEA,UAAA;AAEF,YAAK,MAAM,UAAU,QAAQ,IAAI,MAAO,KAAM;AAE9C,kBAAU,EAAE,8BAA8B;AAAA,eACnC,OAAO;AACd,kBAAW,OAAiB;AAAA,MAC9B;AAEA,YAAM,IAAI;AAAA,QACR,UAAU;AAAA,QACV,SAAS,EAAE,8BAA8B;AAAA,QACzC,QAAQ,WAAW,EAAE,sCAAsC;AAAA,QAC3D,MAAM;AAAA,MAAA,CACP;AAAA,IAAA,GAjBiB;AAqBd,UAAA,gBAAgB,8BAAO,OAAmB,SAA0B;AACpE,UAAA,CAAC,KAAK,gBAAgB;AACxB,cAAM,YAAY,IAAI;AACtB;AAAA,MACF;AAEA,cAAQ,QAAQ;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,SAAS,KAAK,eAAe,EAAE,0BAA0B;AAAA,QACzD,MAAM;AAAA,QACN,aAAa;AAAA,UACX,OAAO,EAAE,UAAU;AAAA,UACnB,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,aAAa;AAAA,UACX,OAAO,KAAK,QAAQ,QAAQ,EAAE,QAAQ;AAAA,UACtC,UAAU,KAAK,YAAY;AAAA,QAC7B;AAAA;AAAA,QAEA,QAAQ,mCAAY;AAClB,gBAAM,YAAY,IAAI;AAAA,QACxB,GAFQ;AAAA,MAER,CACD;AAAA,IAAA,GAvBmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiBtB,UAAMA,YAAW;AACjB,UAAM,QAAQ;AACd,UAAM,YAAY;AAClB,UAAM,EAAE,eAAe,eAAe,oBAAA,IAAwB;AAExD,UAAA,kBAAkB,IAAI,KAAK;AAGjC,UAAM,uBAAuB,SAAS,MAAM,UAAU,YAAY;AAE5D,UAAA,eAAe,yBAAyB,sBAAsB,GAAG;AAGvE,UAAM,YAAY,SAAS,MAAM,UAAU,SAAS;AAG9C,UAAA,gBAAgB,IAAI,WAAW,QAAQ;AAE7C,UAAM,cAAc;AAAA,MAAS,MAC3B,UAAU,MAAM,OAAO,CAAC,MAAM;AAC5B,cAAM,EAAE,OAAO,SAAA,IAAa,UAAU,UAAU,CAAC;AACjD,eAAO,UAAU,WAAW;AAAA,MAAA,CAC7B;AAAA,IAAA;AAGH,UAAM,gBAAgB,IAAI;AAAA,MACxB,EAAE,MAAM,WAAW,aAAa,OAAO,OAAO,OAAO,UAAU,MAAM;AAAA,MACrE,EAAE,MAAM,WAAW,sBAAsB,OAAO,UAAU,OAAO,YAAY;AAAA,IAAA,CAC9E;AAGD,UAAM,SAAS,IAAuB,cAAc,MAAM,CAAC,CAAC;AAG5D,UAAM,qBAAqB,mCAAY;AACrC,YAAM,UAAU,MAAMA,UAAS,WAAW,SAAS;AACnD,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI;AAAA,UACR,UAAU;AAAA,UACV,SAAS,EAAE,SAAS;AAAA,UACpB,QAAQ,EAAE,kCAAkC;AAAA,UAC5C,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AAAA,IAAA,GATyB;AAY3B,UAAM,sBAAsB,6BAAM;AAChB,sBAAA,QAAQ,CAAC,gBAAgB;AAAA,IAAA,GADf;AAK5B;AAAA,MACE,MAAM,UAAU;AAAA,MAChB,CAAC,UAAU;AACT,wBAAgB,QAAQ;AAAA,MAC1B;AAAA,IAAA;AAGF,cAAU,YAAY;AACX,MAAAA,UAAA,WAAW,SAAS,aAAa;AAE1C,YAAM,SAAS,MAAMA,UAAS,WAAW,UAAU;AAC/C,UAAA,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,MAAM,MAAM,OAAO,GAAG;AAC7C,eAAA,QAAQ,cAAc,MAAM,CAAC;AAAA,MACtC;AACA,oBAAc,MAAM;AAAA,IAAA,CACrB;AAED,gBAAY,MAAMA,UAAS,WAAW,QAAS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
3
|
+
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-C4MmAha5.js";
|
4
|
+
import { _ as _sfc_main$1 } from "./BaseViewTemplate--LOH-rtG.js";
|
5
|
+
const _hoisted_1 = { class: "comfy-installer grow flex flex-col gap-4 text-neutral-300 max-w-110" };
|
6
|
+
const _hoisted_2 = { class: "text-2xl font-semibold text-neutral-100" };
|
7
|
+
const _hoisted_3 = { class: "m-1 text-neutral-300" };
|
8
|
+
const _hoisted_4 = { class: "ml-2" };
|
9
|
+
const _hoisted_5 = { class: "m-1 mb-4" };
|
10
|
+
const _hoisted_6 = { class: "m-0" };
|
11
|
+
const _hoisted_7 = { class: "m-1" };
|
12
|
+
const _hoisted_8 = { class: "font-mono" };
|
13
|
+
const _hoisted_9 = { class: "m-1" };
|
14
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
15
|
+
__name: "ManualConfigurationView",
|
16
|
+
setup(__props) {
|
17
|
+
const { t } = useI18n();
|
18
|
+
const electron = electronAPI();
|
19
|
+
const basePath = ref(null);
|
20
|
+
const sep = ref("/");
|
21
|
+
const restartApp = /* @__PURE__ */ __name((message) => electron.restartApp(message), "restartApp");
|
22
|
+
onMounted(async () => {
|
23
|
+
basePath.value = await electron.getBasePath();
|
24
|
+
if (basePath.value.indexOf("/") === -1) sep.value = "\\";
|
25
|
+
});
|
26
|
+
return (_ctx, _cache) => {
|
27
|
+
return openBlock(), createBlock(_sfc_main$1, { dark: "" }, {
|
28
|
+
default: withCtx(() => [
|
29
|
+
createBaseVNode("div", _hoisted_1, [
|
30
|
+
createBaseVNode("h2", _hoisted_2, toDisplayString(_ctx.$t("install.manualConfiguration.title")), 1),
|
31
|
+
createBaseVNode("p", _hoisted_3, [
|
32
|
+
createVNode(unref(script), {
|
33
|
+
icon: "pi pi-exclamation-triangle",
|
34
|
+
severity: "warn",
|
35
|
+
value: unref(t)("icon.exclamation-triangle")
|
36
|
+
}, null, 8, ["value"]),
|
37
|
+
createBaseVNode("strong", _hoisted_4, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
|
38
|
+
]),
|
39
|
+
createBaseVNode("div", null, [
|
40
|
+
createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("install.manualConfiguration.requirements")) + ": ", 1),
|
41
|
+
createBaseVNode("ul", _hoisted_6, [
|
42
|
+
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
|
43
|
+
createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1)
|
44
|
+
])
|
45
|
+
]),
|
46
|
+
createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("install.manualConfiguration.createVenv")) + ":", 1),
|
47
|
+
createVNode(unref(script$1), {
|
48
|
+
header: unref(t)("install.manualConfiguration.virtualEnvironmentPath")
|
49
|
+
}, {
|
50
|
+
default: withCtx(() => [
|
51
|
+
createBaseVNode("span", _hoisted_8, toDisplayString(`${basePath.value}${sep.value}.venv${sep.value}`), 1)
|
52
|
+
]),
|
53
|
+
_: 1
|
54
|
+
}, 8, ["header"]),
|
55
|
+
createBaseVNode("p", _hoisted_9, toDisplayString(_ctx.$t("install.manualConfiguration.restartWhenFinished")), 1),
|
56
|
+
createVNode(unref(script$2), {
|
57
|
+
class: "place-self-end",
|
58
|
+
label: unref(t)("menuLabels.Restart"),
|
59
|
+
severity: "warn",
|
60
|
+
icon: "pi pi-refresh",
|
61
|
+
onClick: _cache[0] || (_cache[0] = ($event) => restartApp("Manual configuration complete"))
|
62
|
+
}, null, 8, ["label"])
|
63
|
+
])
|
64
|
+
]),
|
65
|
+
_: 1
|
66
|
+
});
|
67
|
+
};
|
68
|
+
}
|
69
|
+
});
|
70
|
+
const ManualConfigurationView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-dc169863"]]);
|
71
|
+
export {
|
72
|
+
ManualConfigurationView as default
|
73
|
+
};
|
74
|
+
//# sourceMappingURL=ManualConfigurationView-DK79zT46.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ManualConfigurationView-DK79zT46.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,MAAM;AAEd,UAAM,WAAW;AAEX,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
3
|
+
import { _ as _sfc_main$1 } from "./BaseViewTemplate--LOH-rtG.js";
|
4
|
+
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-C4MmAha5.js";
|
5
|
+
const _hoisted_1 = { class: "h-full p-8 2xl:p-16 flex flex-col items-center justify-center" };
|
6
|
+
const _hoisted_2 = { class: "bg-neutral-800 rounded-lg shadow-lg p-6 w-full max-w-[600px] flex flex-col gap-6" };
|
7
|
+
const _hoisted_3 = { class: "text-3xl font-semibold text-neutral-100" };
|
8
|
+
const _hoisted_4 = { class: "text-neutral-400" };
|
9
|
+
const _hoisted_5 = { class: "text-neutral-400" };
|
10
|
+
const _hoisted_6 = {
|
11
|
+
href: "https://comfy.org/privacy",
|
12
|
+
target: "_blank",
|
13
|
+
class: "text-blue-400 hover:text-blue-300 underline"
|
14
|
+
};
|
15
|
+
const _hoisted_7 = { class: "flex items-center gap-4" };
|
16
|
+
const _hoisted_8 = {
|
17
|
+
id: "metricsDescription",
|
18
|
+
class: "text-neutral-100"
|
19
|
+
};
|
20
|
+
const _hoisted_9 = { class: "flex pt-6 justify-end" };
|
21
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
22
|
+
__name: "MetricsConsentView",
|
23
|
+
setup(__props) {
|
24
|
+
const toast = useToast();
|
25
|
+
const { t } = useI18n();
|
26
|
+
const allowMetrics = ref(true);
|
27
|
+
const router = useRouter();
|
28
|
+
const isUpdating = ref(false);
|
29
|
+
const updateConsent = /* @__PURE__ */ __name(async () => {
|
30
|
+
isUpdating.value = true;
|
31
|
+
try {
|
32
|
+
await electronAPI().setMetricsConsent(allowMetrics.value);
|
33
|
+
} catch (error) {
|
34
|
+
toast.add({
|
35
|
+
severity: "error",
|
36
|
+
summary: t("install.errorUpdatingConsent"),
|
37
|
+
detail: t("install.errorUpdatingConsentDetail"),
|
38
|
+
life: 3e3
|
39
|
+
});
|
40
|
+
} finally {
|
41
|
+
isUpdating.value = false;
|
42
|
+
}
|
43
|
+
router.push("/");
|
44
|
+
}, "updateConsent");
|
45
|
+
return (_ctx, _cache) => {
|
46
|
+
const _component_BaseViewTemplate = _sfc_main$1;
|
47
|
+
return openBlock(), createBlock(_component_BaseViewTemplate, { dark: "" }, {
|
48
|
+
default: withCtx(() => [
|
49
|
+
createBaseVNode("div", _hoisted_1, [
|
50
|
+
createBaseVNode("div", _hoisted_2, [
|
51
|
+
createBaseVNode("h2", _hoisted_3, toDisplayString(_ctx.$t("install.helpImprove")), 1),
|
52
|
+
createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("install.updateConsent")), 1),
|
53
|
+
createBaseVNode("p", _hoisted_5, [
|
54
|
+
createTextVNode(toDisplayString(_ctx.$t("install.moreInfo")) + " ", 1),
|
55
|
+
createBaseVNode("a", _hoisted_6, toDisplayString(_ctx.$t("install.privacyPolicy")), 1),
|
56
|
+
_cache[1] || (_cache[1] = createTextVNode(". "))
|
57
|
+
]),
|
58
|
+
createBaseVNode("div", _hoisted_7, [
|
59
|
+
createVNode(unref(script), {
|
60
|
+
modelValue: allowMetrics.value,
|
61
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => allowMetrics.value = $event),
|
62
|
+
"aria-describedby": "metricsDescription"
|
63
|
+
}, null, 8, ["modelValue"]),
|
64
|
+
createBaseVNode("span", _hoisted_8, toDisplayString(allowMetrics.value ? _ctx.$t("install.metricsEnabled") : _ctx.$t("install.metricsDisabled")), 1)
|
65
|
+
]),
|
66
|
+
createBaseVNode("div", _hoisted_9, [
|
67
|
+
createVNode(unref(script$1), {
|
68
|
+
label: _ctx.$t("g.ok"),
|
69
|
+
icon: "pi pi-check",
|
70
|
+
loading: isUpdating.value,
|
71
|
+
iconPos: "right",
|
72
|
+
onClick: updateConsent
|
73
|
+
}, null, 8, ["label", "loading"])
|
74
|
+
])
|
75
|
+
])
|
76
|
+
])
|
77
|
+
]),
|
78
|
+
_: 1
|
79
|
+
});
|
80
|
+
};
|
81
|
+
}
|
82
|
+
});
|
83
|
+
export {
|
84
|
+
_sfc_main as default
|
85
|
+
};
|
86
|
+
//# sourceMappingURL=MetricsConsentView-BiHGP4XO.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MetricsConsentView-BiHGP4XO.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;AACR,UAAA,EAAE,MAAM;AAER,UAAA,eAAe,IAAI,IAAI;AAC7B,UAAM,SAAS;AACT,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,MACrB;AACA,aAAO,KAAK,GAAG;AAAA,IAAA,GAdK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
.sad-container {
|
3
|
+
&[data-v-ebb20958] {
|
4
|
+
display: grid;
|
5
|
+
align-items: center;
|
6
|
+
justify-content: space-evenly;
|
7
|
+
grid-template-columns: 25rem 1fr;
|
8
|
+
}
|
9
|
+
&[data-v-ebb20958] > * {
|
10
|
+
grid-row: 1;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
.sad-text[data-v-ebb20958] {
|
14
|
+
grid-column: 1/3;
|
15
|
+
}
|
16
|
+
.sad-girl[data-v-ebb20958] {
|
17
|
+
grid-column: 2/3;
|
18
|
+
width: min(75vw, 100vh);
|
19
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
3
|
+
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-C4MmAha5.js";
|
4
|
+
import { _ as _sfc_main$1 } from "./BaseViewTemplate--LOH-rtG.js";
|
5
|
+
const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href;
|
6
|
+
const _hoisted_1 = { class: "sad-container" };
|
7
|
+
const _hoisted_2 = { class: "no-drag sad-text flex items-center" };
|
8
|
+
const _hoisted_3 = { class: "flex flex-col gap-8 p-8 min-w-110" };
|
9
|
+
const _hoisted_4 = { class: "text-4xl font-bold text-red-500" };
|
10
|
+
const _hoisted_5 = { class: "space-y-4" };
|
11
|
+
const _hoisted_6 = { class: "text-xl" };
|
12
|
+
const _hoisted_7 = { class: "list-disc list-inside space-y-1 text-neutral-800" };
|
13
|
+
const _hoisted_8 = { class: "flex gap-4" };
|
14
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
15
|
+
__name: "NotSupportedView",
|
16
|
+
setup(__props) {
|
17
|
+
const openDocs = /* @__PURE__ */ __name(() => {
|
18
|
+
window.open(
|
19
|
+
"https://github.com/Comfy-Org/desktop#currently-supported-platforms",
|
20
|
+
"_blank"
|
21
|
+
);
|
22
|
+
}, "openDocs");
|
23
|
+
const reportIssue = /* @__PURE__ */ __name(() => {
|
24
|
+
window.open("https://forum.comfy.org/c/v1-feedback/", "_blank");
|
25
|
+
}, "reportIssue");
|
26
|
+
const router = useRouter();
|
27
|
+
const continueToInstall = /* @__PURE__ */ __name(() => {
|
28
|
+
router.push("/install");
|
29
|
+
}, "continueToInstall");
|
30
|
+
return (_ctx, _cache) => {
|
31
|
+
const _directive_tooltip = resolveDirective("tooltip");
|
32
|
+
return openBlock(), createBlock(_sfc_main$1, null, {
|
33
|
+
default: withCtx(() => [
|
34
|
+
createBaseVNode("div", _hoisted_1, [
|
35
|
+
_cache[0] || (_cache[0] = createBaseVNode("img", {
|
36
|
+
class: "sad-girl",
|
37
|
+
src: _imports_0,
|
38
|
+
alt: "Sad girl illustration"
|
39
|
+
}, null, -1)),
|
40
|
+
createBaseVNode("div", _hoisted_2, [
|
41
|
+
createBaseVNode("div", _hoisted_3, [
|
42
|
+
createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("notSupported.title")), 1),
|
43
|
+
createBaseVNode("div", _hoisted_5, [
|
44
|
+
createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("notSupported.message")), 1),
|
45
|
+
createBaseVNode("ul", _hoisted_7, [
|
46
|
+
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1),
|
47
|
+
createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1)
|
48
|
+
])
|
49
|
+
]),
|
50
|
+
createBaseVNode("div", _hoisted_8, [
|
51
|
+
createVNode(unref(script), {
|
52
|
+
label: _ctx.$t("notSupported.learnMore"),
|
53
|
+
icon: "pi pi-github",
|
54
|
+
onClick: openDocs,
|
55
|
+
severity: "secondary"
|
56
|
+
}, null, 8, ["label"]),
|
57
|
+
createVNode(unref(script), {
|
58
|
+
label: _ctx.$t("notSupported.reportIssue"),
|
59
|
+
icon: "pi pi-flag",
|
60
|
+
onClick: reportIssue,
|
61
|
+
severity: "secondary"
|
62
|
+
}, null, 8, ["label"]),
|
63
|
+
withDirectives(createVNode(unref(script), {
|
64
|
+
label: _ctx.$t("notSupported.continue"),
|
65
|
+
icon: "pi pi-arrow-right",
|
66
|
+
iconPos: "right",
|
67
|
+
onClick: continueToInstall,
|
68
|
+
severity: "danger"
|
69
|
+
}, null, 8, ["label"]), [
|
70
|
+
[_directive_tooltip, _ctx.$t("notSupported.continueTooltip")]
|
71
|
+
])
|
72
|
+
])
|
73
|
+
])
|
74
|
+
])
|
75
|
+
])
|
76
|
+
]),
|
77
|
+
_: 1
|
78
|
+
});
|
79
|
+
};
|
80
|
+
}
|
81
|
+
});
|
82
|
+
const NotSupportedView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ebb20958"]]);
|
83
|
+
export {
|
84
|
+
NotSupportedView as default
|
85
|
+
};
|
86
|
+
//# sourceMappingURL=NotSupportedView-CaASlgg3.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NotSupportedView-CaASlgg3.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,MAAA;AAAA,IACF,GAJe;AAOjB,UAAM,cAAc,6BAAM;AACjB,aAAA,KAAK,0CAA0C,QAAQ;AAAA,IAAA,GAD5C;AAIpB,UAAM,SAAS;AACf,UAAM,oBAAoB,6BAAM;AAC9B,aAAO,KAAK,UAAU;AAAA,IAAA,GADE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
3
|
+
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, dW 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, dX as FormItem, dM as _sfc_main$1, bi as electronAPI } from "./index-C4MmAha5.js";
|
4
|
+
import { u as useServerConfigStore } from "./serverConfigStore-YaL-KzUL.js";
|
5
|
+
const _hoisted_1$1 = {
|
6
|
+
viewBox: "0 0 24 24",
|
7
|
+
width: "1.2em",
|
8
|
+
height: "1.2em"
|
9
|
+
};
|
10
|
+
function render(_ctx, _cache) {
|
11
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$1, _cache[0] || (_cache[0] = [
|
12
|
+
createBaseVNode("path", {
|
13
|
+
fill: "none",
|
14
|
+
stroke: "currentColor",
|
15
|
+
"stroke-linecap": "round",
|
16
|
+
"stroke-linejoin": "round",
|
17
|
+
"stroke-width": "2",
|
18
|
+
d: "m4 17l6-6l-6-6m8 14h8"
|
19
|
+
}, null, -1)
|
20
|
+
]));
|
21
|
+
}
|
22
|
+
__name(render, "render");
|
23
|
+
const __unplugin_components_0 = markRaw({ name: "lucide-terminal", render });
|
24
|
+
const _hoisted_1 = { class: "flex flex-col gap-2" };
|
25
|
+
const _hoisted_2 = { class: "flex justify-end gap-2" };
|
26
|
+
const _hoisted_3 = { class: "flex items-center justify-between" };
|
27
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
28
|
+
__name: "ServerConfigPanel",
|
29
|
+
setup(__props) {
|
30
|
+
const settingStore = useSettingStore();
|
31
|
+
const serverConfigStore = useServerConfigStore();
|
32
|
+
const {
|
33
|
+
serverConfigsByCategory,
|
34
|
+
serverConfigValues,
|
35
|
+
launchArgs,
|
36
|
+
commandLineArgs,
|
37
|
+
modifiedConfigs
|
38
|
+
} = storeToRefs(serverConfigStore);
|
39
|
+
const revertChanges = /* @__PURE__ */ __name(() => {
|
40
|
+
serverConfigStore.revertChanges();
|
41
|
+
}, "revertChanges");
|
42
|
+
const restartApp = /* @__PURE__ */ __name(() => {
|
43
|
+
electronAPI().restartApp();
|
44
|
+
}, "restartApp");
|
45
|
+
watch(launchArgs, (newVal) => {
|
46
|
+
settingStore.set("Comfy.Server.LaunchArgs", newVal);
|
47
|
+
});
|
48
|
+
watch(serverConfigValues, (newVal) => {
|
49
|
+
settingStore.set("Comfy.Server.ServerConfigValues", newVal);
|
50
|
+
});
|
51
|
+
const { copyToClipboard } = useCopyToClipboard();
|
52
|
+
const copyCommandLineArgs = /* @__PURE__ */ __name(async () => {
|
53
|
+
await copyToClipboard(commandLineArgs.value);
|
54
|
+
}, "copyCommandLineArgs");
|
55
|
+
const { t } = useI18n();
|
56
|
+
const translateItem = /* @__PURE__ */ __name((item) => {
|
57
|
+
return {
|
58
|
+
...item,
|
59
|
+
name: t(`serverConfigItems.${item.id}.name`, item.name),
|
60
|
+
tooltip: item.tooltip ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip) : void 0
|
61
|
+
};
|
62
|
+
}, "translateItem");
|
63
|
+
return (_ctx, _cache) => {
|
64
|
+
const _component_i_lucide58terminal = __unplugin_components_0;
|
65
|
+
return openBlock(), createBlock(_sfc_main$1, {
|
66
|
+
value: "Server-Config",
|
67
|
+
class: "server-config-panel"
|
68
|
+
}, {
|
69
|
+
header: withCtx(() => [
|
70
|
+
createBaseVNode("div", _hoisted_1, [
|
71
|
+
unref(modifiedConfigs).length > 0 ? (openBlock(), createBlock(unref(script), {
|
72
|
+
key: 0,
|
73
|
+
severity: "info",
|
74
|
+
"pt:text": "w-full"
|
75
|
+
}, {
|
76
|
+
default: withCtx(() => [
|
77
|
+
createBaseVNode("p", null, toDisplayString(_ctx.$t("serverConfig.modifiedConfigs")), 1),
|
78
|
+
createBaseVNode("ul", null, [
|
79
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(modifiedConfigs), (config) => {
|
80
|
+
return openBlock(), createElementBlock("li", {
|
81
|
+
key: config.id
|
82
|
+
}, toDisplayString(config.name) + ": " + toDisplayString(config.initialValue) + " → " + toDisplayString(config.value), 1);
|
83
|
+
}), 128))
|
84
|
+
]),
|
85
|
+
createBaseVNode("div", _hoisted_2, [
|
86
|
+
createVNode(unref(script$1), {
|
87
|
+
label: _ctx.$t("serverConfig.revertChanges"),
|
88
|
+
onClick: revertChanges,
|
89
|
+
outlined: ""
|
90
|
+
}, null, 8, ["label"]),
|
91
|
+
createVNode(unref(script$1), {
|
92
|
+
label: _ctx.$t("serverConfig.restart"),
|
93
|
+
onClick: restartApp,
|
94
|
+
outlined: "",
|
95
|
+
severity: "danger"
|
96
|
+
}, null, 8, ["label"])
|
97
|
+
])
|
98
|
+
]),
|
99
|
+
_: 1
|
100
|
+
})) : createCommentVNode("", true),
|
101
|
+
unref(commandLineArgs) ? (openBlock(), createBlock(unref(script), {
|
102
|
+
key: 1,
|
103
|
+
severity: "secondary",
|
104
|
+
"pt:text": "w-full"
|
105
|
+
}, {
|
106
|
+
icon: withCtx(() => [
|
107
|
+
createVNode(_component_i_lucide58terminal, { class: "text-xl font-bold" })
|
108
|
+
]),
|
109
|
+
default: withCtx(() => [
|
110
|
+
createBaseVNode("div", _hoisted_3, [
|
111
|
+
createBaseVNode("p", null, toDisplayString(unref(commandLineArgs)), 1),
|
112
|
+
createVNode(unref(script$1), {
|
113
|
+
icon: "pi pi-clipboard",
|
114
|
+
onClick: copyCommandLineArgs,
|
115
|
+
severity: "secondary",
|
116
|
+
text: ""
|
117
|
+
})
|
118
|
+
])
|
119
|
+
]),
|
120
|
+
_: 1
|
121
|
+
})) : createCommentVNode("", true)
|
122
|
+
])
|
123
|
+
]),
|
124
|
+
default: withCtx(() => [
|
125
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(serverConfigsByCategory)), ([label, items], i) => {
|
126
|
+
return openBlock(), createElementBlock("div", { key: label }, [
|
127
|
+
i > 0 ? (openBlock(), createBlock(unref(script$2), { key: 0 })) : createCommentVNode("", true),
|
128
|
+
createBaseVNode("h3", null, toDisplayString(_ctx.$t(`serverConfigCategories.${label}`, label)), 1),
|
129
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => {
|
130
|
+
return openBlock(), createElementBlock("div", {
|
131
|
+
key: item.name,
|
132
|
+
class: "mb-4"
|
133
|
+
}, [
|
134
|
+
createVNode(FormItem, {
|
135
|
+
item: translateItem(item),
|
136
|
+
formValue: item.value,
|
137
|
+
"onUpdate:formValue": /* @__PURE__ */ __name(($event) => item.value = $event, "onUpdate:formValue"),
|
138
|
+
id: item.id,
|
139
|
+
labelClass: {
|
140
|
+
"text-highlight": item.initialValue !== item.value
|
141
|
+
}
|
142
|
+
}, null, 8, ["item", "formValue", "onUpdate:formValue", "id", "labelClass"])
|
143
|
+
]);
|
144
|
+
}), 128))
|
145
|
+
]);
|
146
|
+
}), 128))
|
147
|
+
]),
|
148
|
+
_: 1
|
149
|
+
});
|
150
|
+
};
|
151
|
+
}
|
152
|
+
});
|
153
|
+
export {
|
154
|
+
_sfc_main as default
|
155
|
+
};
|
156
|
+
//# sourceMappingURL=ServerConfigPanel-DvcXNRqp.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ServerConfigPanel-DvcXNRqp.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;AACrB,UAAM,oBAAoB;AACpB,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,YAAY,iBAAiB;AAEjC,UAAM,gBAAgB,6BAAM;AAC1B,wBAAkB,cAAc;AAAA,IAAA,GADZ;AAItB,UAAM,aAAa,6BAAM;AACvB,kBAAA,EAAc;IAAW,GADR;AAIb,UAAA,YAAY,CAAC,WAAW;AACf,mBAAA,IAAI,2BAA2B,MAAM;AAAA,IAAA,CACnD;AAEK,UAAA,oBAAoB,CAAC,WAAW;AACvB,mBAAA,IAAI,mCAAmC,MAAM;AAAA,IAAA,CAC3D;AAEK,UAAA,EAAE,oBAAoB;AAC5B,UAAM,sBAAsB,mCAAY;AAChC,YAAA,gBAAgB,gBAAgB,KAAK;AAAA,IAAA,GADjB;AAItB,UAAA,EAAE,MAAM;AACR,UAAA,gBAAgB,wBAAC,SAA0C;AACxD,aAAA;AAAA,QACL,GAAG;AAAA,QACH,MAAM,EAAE,qBAAqB,KAAK,EAAE,SAAS,KAAK,IAAI;AAAA,QACtD,SAAS,KAAK,UACV,EAAE,qBAAqB,KAAK,EAAE,YAAY,KAAK,OAAO,IACtD;AAAA,MAAA;AAAA,IACN,GAPoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|