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":"InstallView-1bbt62og.js","sources":["../../src/components/install/DesktopSettingsConfiguration.vue","../../../../../../../assets/images/nvidia-logo.svg","../../../../../../../assets/images/apple-mps-logo.png","../../../../../../../assets/images/manual-configuration.svg","../../src/components/install/GpuPicker.vue","../../src/components/install/InstallLocationPicker.vue","../../src/components/install/MigrationPicker.vue","../../src/components/install/mirror/MirrorItem.vue","../../src/components/install/MirrorsConfiguration.vue","../../src/views/InstallView.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col gap-6 w-[600px]\">\n <div class=\"flex flex-col gap-4\">\n <h2 class=\"text-2xl font-semibold text-neutral-100\">\n {{ $t('install.desktopAppSettings') }}\n </h2>\n\n <p class=\"text-neutral-400 my-0\">\n {{ $t('install.desktopAppSettingsDescription') }}\n </p>\n </div>\n\n <div class=\"flex flex-col bg-neutral-800 p-4 rounded-lg\">\n <!-- Auto Update Setting -->\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-1\">\n <h3 class=\"text-lg font-medium text-neutral-100\">\n {{ $t('install.settings.autoUpdate') }}\n </h3>\n <p class=\"text-sm text-neutral-400 mt-1\">\n {{ $t('install.settings.autoUpdateDescription') }}\n </p>\n </div>\n <ToggleSwitch v-model=\"autoUpdate\" />\n </div>\n\n <Divider />\n\n <!-- Metrics Collection Setting -->\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-1\">\n <h3 class=\"text-lg font-medium text-neutral-100\">\n {{ $t('install.settings.allowMetrics') }}\n </h3>\n <p class=\"text-sm text-neutral-400 mt-1\">\n {{ $t('install.settings.allowMetricsDescription') }}\n </p>\n <a\n href=\"#\"\n class=\"text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block\"\n @click.prevent=\"showMetricsInfo\"\n >\n {{ $t('install.settings.learnMoreAboutData') }}\n </a>\n </div>\n <ToggleSwitch v-model=\"allowMetrics\" />\n </div>\n </div>\n\n <!-- Info Dialog -->\n <Dialog\n v-model:visible=\"showDialog\"\n modal\n :header=\"$t('install.settings.dataCollectionDialog.title')\"\n >\n <div class=\"text-neutral-300\">\n <h4 class=\"font-medium mb-2\">\n {{ $t('install.settings.dataCollectionDialog.whatWeCollect') }}\n </h4>\n <ul class=\"list-disc pl-6 space-y-1\">\n <li>\n {{\n $t('install.settings.dataCollectionDialog.collect.errorReports')\n }}\n </li>\n <li>\n {{ $t('install.settings.dataCollectionDialog.collect.systemInfo') }}\n </li>\n <li>\n {{\n $t(\n 'install.settings.dataCollectionDialog.collect.userJourneyEvents'\n )\n }}\n </li>\n </ul>\n\n <h4 class=\"font-medium mt-4 mb-2\">\n {{ $t('install.settings.dataCollectionDialog.whatWeDoNotCollect') }}\n </h4>\n <ul class=\"list-disc pl-6 space-y-1\">\n <li>\n {{\n $t(\n 'install.settings.dataCollectionDialog.doNotCollect.personalInformation'\n )\n }}\n </li>\n <li>\n {{\n $t(\n 'install.settings.dataCollectionDialog.doNotCollect.workflowContents'\n )\n }}\n </li>\n <li>\n {{\n $t(\n 'install.settings.dataCollectionDialog.doNotCollect.fileSystemInformation'\n )\n }}\n </li>\n <li>\n {{\n $t(\n 'install.settings.dataCollectionDialog.doNotCollect.customNodeConfigurations'\n )\n }}\n </li>\n </ul>\n\n <div class=\"mt-4\">\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.settings.dataCollectionDialog.viewFullPolicy') }}\n </a>\n </div>\n </div>\n </Dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Dialog from 'primevue/dialog'\nimport Divider from 'primevue/divider'\nimport ToggleSwitch from 'primevue/toggleswitch'\nimport { ref } from 'vue'\n\nconst showDialog = ref(false)\nconst autoUpdate = defineModel<boolean>('autoUpdate', { required: true })\nconst allowMetrics = defineModel<boolean>('allowMetrics', { required: true })\n\nconst showMetricsInfo = () => {\n showDialog.value = true\n}\n</script>\n","export default \"__VITE_PUBLIC_ASSET__fe43f3f5__\"","export default \"__VITE_PUBLIC_ASSET__2bae65e3__\"","export default \"__VITE_PUBLIC_ASSET__57befc1b__\"","<template>\n <div class=\"flex flex-col gap-6 w-[600px] h-[30rem] select-none\">\n <!-- Installation Path Section -->\n <div class=\"grow flex flex-col gap-4 text-neutral-300\">\n <h2 class=\"text-2xl font-semibold text-neutral-100\">\n {{ $t('install.gpuSelection.selectGpu') }}\n </h2>\n\n <p class=\"m-1 text-neutral-400\">\n {{ $t('install.gpuSelection.selectGpuDescription') }}:\n </p>\n\n <!-- GPU Selection buttons -->\n <div\n class=\"flex gap-2 text-center transition-opacity\"\n :class=\"{ selected: selected }\"\n >\n <!-- NVIDIA -->\n <div\n v-if=\"platform !== 'darwin'\"\n class=\"gpu-button\"\n :class=\"{ selected: selected === 'nvidia' }\"\n role=\"button\"\n @click=\"pickGpu('nvidia')\"\n >\n <img\n class=\"m-12\"\n alt=\"NVIDIA logo\"\n width=\"196\"\n height=\"32\"\n src=\"/assets/images/nvidia-logo.svg\"\n />\n </div>\n <!-- MPS -->\n <div\n v-if=\"platform === 'darwin'\"\n class=\"gpu-button\"\n :class=\"{ selected: selected === 'mps' }\"\n role=\"button\"\n @click=\"pickGpu('mps')\"\n >\n <img\n class=\"rounded-lg hover-brighten\"\n alt=\"Apple Metal Performance Shaders Logo\"\n width=\"292\"\n ratio\n src=\"/assets/images/apple-mps-logo.png\"\n />\n </div>\n <!-- Manual configuration -->\n <div\n class=\"gpu-button\"\n :class=\"{ selected: selected === 'unsupported' }\"\n role=\"button\"\n @click=\"pickGpu('unsupported')\"\n >\n <img\n class=\"m-12\"\n alt=\"Manual configuration\"\n width=\"196\"\n src=\"/assets/images/manual-configuration.svg\"\n />\n </div>\n </div>\n\n <!-- Details on selected GPU -->\n <p v-if=\"selected === 'nvidia'\" class=\"m-1\">\n <Tag icon=\"pi pi-check\" severity=\"success\" :value=\"'CUDA'\" />\n {{ $t('install.gpuSelection.nvidiaDescription') }}\n </p>\n\n <p v-if=\"selected === 'mps'\" class=\"m-1\">\n <Tag icon=\"pi pi-check\" severity=\"success\" :value=\"'MPS'\" />\n {{ $t('install.gpuSelection.mpsDescription') }}\n </p>\n\n <div v-if=\"selected === 'unsupported'\" class=\"text-neutral-300\">\n <p class=\"m-1\">\n <Tag\n icon=\"pi pi-exclamation-triangle\"\n severity=\"warn\"\n :value=\"t('icon.exclamation-triangle')\"\n />\n {{ $t('install.gpuSelection.customSkipsPython') }}\n </p>\n\n <ul>\n <li>\n <strong>\n {{ $t('install.gpuSelection.customComfyNeedsPython') }}\n </strong>\n </li>\n <li>{{ $t('install.gpuSelection.customManualVenv') }}</li>\n <li>{{ $t('install.gpuSelection.customInstallRequirements') }}</li>\n <li>{{ $t('install.gpuSelection.customMayNotWork') }}</li>\n </ul>\n </div>\n\n <div v-if=\"selected === 'cpu'\">\n <p class=\"m-1\">\n <Tag\n icon=\"pi pi-exclamation-triangle\"\n severity=\"warn\"\n :value=\"t('icon.exclamation-triangle')\"\n ></Tag>\n {{ $t('install.gpuSelection.cpuModeDescription') }}\n </p>\n <p class=\"m-1\">\n {{ $t('install.gpuSelection.cpuModeDescription2') }}\n </p>\n </div>\n </div>\n\n <div\n class=\"transition-opacity flex gap-3 h-0\"\n :class=\"{\n 'opacity-40': selected && selected !== 'cpu'\n }\"\n >\n <ToggleSwitch\n v-model=\"cpuMode\"\n inputId=\"cpu-mode\"\n class=\"-translate-y-40\"\n />\n <label for=\"cpu-mode\" class=\"select-none\">\n {{ $t('install.gpuSelection.enableCpuMode') }}\n </label>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { TorchDeviceType } from '@comfyorg/comfyui-electron-types'\nimport Tag from 'primevue/tag'\nimport ToggleSwitch from 'primevue/toggleswitch'\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { electronAPI } from '@/utils/envUtil'\n\nconst { t } = useI18n()\n\nconst cpuMode = computed({\n get: () => selected.value === 'cpu',\n set: (value) => {\n selected.value = value ? 'cpu' : null\n }\n})\nconst selected = defineModel<TorchDeviceType>('device', {\n required: true\n})\n\nconst electron = electronAPI()\nconst platform = electron.getPlatform()\n\nconst pickGpu = (value: typeof selected.value) => {\n const newValue = selected.value === value ? null : value\n selected.value = newValue\n}\n</script>\n\n<style scoped>\n.p-tag {\n --p-tag-gap: 0.5rem;\n}\n\n.hover-brighten {\n @apply transition-colors;\n transition-property: filter, box-shadow;\n\n &:hover {\n filter: brightness(107%) contrast(105%);\n box-shadow: 0 0 0.25rem #ffffff79;\n }\n}\n.p-accordioncontent-content {\n @apply bg-neutral-900 rounded-lg transition-colors;\n}\n\ndiv.selected {\n .gpu-button:not(.selected) {\n @apply opacity-50 hover:opacity-100;\n }\n}\n\n.gpu-button {\n @apply w-1/2 m-0 cursor-pointer rounded-lg flex flex-col items-center justify-around bg-neutral-800 bg-opacity-50 hover:bg-opacity-75 transition-colors;\n\n &.selected {\n @apply opacity-100 bg-neutral-700 bg-opacity-50 hover:bg-opacity-60;\n }\n}\n\n.disabled {\n @apply pointer-events-none opacity-40;\n}\n\n.p-card-header {\n @apply text-center grow;\n}\n\n.p-card-body {\n @apply text-center pt-0;\n}\n</style>\n","<template>\n <div class=\"flex flex-col gap-6 w-[600px]\">\n <!-- Installation Path Section -->\n <div class=\"flex flex-col gap-4\">\n <h2 class=\"text-2xl font-semibold text-neutral-100\">\n {{ $t('install.chooseInstallationLocation') }}\n </h2>\n\n <p class=\"text-neutral-400 my-0\">\n {{ $t('install.installLocationDescription') }}\n </p>\n\n <div class=\"flex gap-2\">\n <IconField class=\"flex-1\">\n <InputText\n v-model=\"installPath\"\n class=\"w-full\"\n :class=\"{ 'p-invalid': pathError }\"\n @update:modelValue=\"validatePath\"\n @focus=\"onFocus\"\n />\n <InputIcon\n class=\"pi pi-info-circle\"\n v-tooltip.top=\"$t('install.installLocationTooltip')\"\n />\n </IconField>\n <Button icon=\"pi pi-folder\" @click=\"browsePath\" class=\"w-12\" />\n </div>\n\n <Message v-if=\"pathError\" severity=\"error\" class=\"whitespace-pre-line\">\n {{ pathError }}\n </Message>\n <Message v-if=\"pathExists\" severity=\"warn\">\n {{ $t('install.pathExists') }}\n </Message>\n </div>\n\n <!-- System Paths Info -->\n <div class=\"bg-neutral-800 p-4 rounded-lg\">\n <h3 class=\"text-lg font-medium mt-0 mb-3 text-neutral-100\">\n {{ $t('install.systemLocations') }}\n </h3>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-folder text-neutral-400\" />\n <span class=\"text-neutral-400\">App Data:</span>\n <span class=\"text-neutral-200\">{{ appData }}</span>\n <span\n class=\"pi pi-info-circle\"\n v-tooltip=\"$t('install.appDataLocationTooltip')\"\n ></span>\n </div>\n <div class=\"flex items-center gap-2\">\n <i class=\"pi pi-desktop text-neutral-400\" />\n <span class=\"text-neutral-400\">App Path:</span>\n <span class=\"text-neutral-200\">{{ appPath }}</span>\n <span\n class=\"pi pi-info-circle\"\n v-tooltip=\"$t('install.appPathLocationTooltip')\"\n ></span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Button from 'primevue/button'\nimport IconField from 'primevue/iconfield'\nimport InputIcon from 'primevue/inputicon'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport { onMounted, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { electronAPI } from '@/utils/envUtil'\n\nconst { t } = useI18n()\n\nconst installPath = defineModel<string>('installPath', { required: true })\nconst pathError = defineModel<string>('pathError', { required: true })\nconst pathExists = ref(false)\nconst appData = ref('')\nconst appPath = ref('')\nconst inputTouched = ref(false)\n\nconst electron = electronAPI()\n\n// Get system paths on component mount\nonMounted(async () => {\n const paths = await electron.getSystemPaths()\n appData.value = paths.appData\n appPath.value = paths.appPath\n installPath.value = paths.defaultInstallPath\n\n await validatePath(paths.defaultInstallPath)\n})\n\nconst validatePath = async (path: string) => {\n try {\n pathError.value = ''\n pathExists.value = false\n const validation = await electron.validateInstallPath(path)\n\n // Create a pre-formatted list of errors\n if (!validation.isValid) {\n const errors: string[] = []\n if (validation.cannotWrite) errors.push(t('install.cannotWrite'))\n if (validation.freeSpace < validation.requiredSpace) {\n const requiredGB = validation.requiredSpace / 1024 / 1024 / 1024\n errors.push(`${t('install.insufficientFreeSpace')}: ${requiredGB} GB`)\n }\n if (validation.parentMissing) errors.push(t('install.parentMissing'))\n if (validation.error)\n errors.push(`${t('install.unhandledError')}: ${validation.error}`)\n pathError.value = errors.join('\\n')\n }\n\n // Display the path exists warning\n if (validation.exists) pathExists.value = true\n } catch (error) {\n pathError.value = t('install.pathValidationFailed')\n }\n}\n\nconst browsePath = async () => {\n try {\n const result = await electron.showDirectoryPicker()\n if (result) {\n installPath.value = result\n await validatePath(result)\n }\n } catch (error) {\n pathError.value = t('install.failedToSelectDirectory')\n }\n}\n\nconst onFocus = () => {\n if (!inputTouched.value) {\n inputTouched.value = true\n return\n }\n // Refresh validation on re-focus\n validatePath(installPath.value)\n}\n</script>\n","<template>\n <div class=\"flex flex-col gap-6 w-[600px]\">\n <!-- Source Location Section -->\n <div class=\"flex flex-col gap-4\">\n <h2 class=\"text-2xl font-semibold text-neutral-100\">\n {{ $t('install.migrateFromExistingInstallation') }}\n </h2>\n\n <p class=\"text-neutral-400 my-0\">\n {{ $t('install.migrationSourcePathDescription') }}\n </p>\n\n <div class=\"flex gap-2\">\n <InputText\n v-model=\"sourcePath\"\n placeholder=\"Select existing ComfyUI installation (optional)\"\n class=\"flex-1\"\n :class=\"{ 'p-invalid': pathError }\"\n @update:modelValue=\"validateSource\"\n />\n <Button icon=\"pi pi-folder\" @click=\"browsePath\" class=\"w-12\" />\n </div>\n\n <Message v-if=\"pathError\" severity=\"error\">\n {{ pathError }}\n </Message>\n </div>\n\n <!-- Migration Options -->\n <div\n v-if=\"isValidSource\"\n class=\"flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg\"\n >\n <h3 class=\"text-lg mt-0 font-medium text-neutral-100\">\n {{ $t('install.selectItemsToMigrate') }}\n </h3>\n\n <div class=\"flex flex-col gap-3\">\n <div\n v-for=\"item in migrationItems\"\n :key=\"item.id\"\n class=\"flex items-center gap-3 p-2 hover:bg-neutral-700 rounded\"\n @click=\"item.selected = !item.selected\"\n >\n <Checkbox\n v-model=\"item.selected\"\n :inputId=\"item.id\"\n :binary=\"true\"\n @click.stop\n />\n <div>\n <label :for=\"item.id\" class=\"text-neutral-200 font-medium\">\n {{ item.label }}\n </label>\n <p class=\"text-sm text-neutral-400 my-1\">\n {{ item.description }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Skip Migration -->\n <div v-else class=\"text-neutral-400 italic\">\n {{ $t('install.migrationOptional') }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { MigrationItems } from '@comfyorg/comfyui-electron-types'\nimport Button from 'primevue/button'\nimport Checkbox from 'primevue/checkbox'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport { computed, ref, watchEffect } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport { electronAPI } from '@/utils/envUtil'\n\nconst { t } = useI18n()\n\nconst electron = electronAPI()\n\nconst sourcePath = defineModel<string>('sourcePath', { required: false })\nconst migrationItemIds = defineModel<string[]>('migrationItemIds', {\n required: false\n})\n\nconst migrationItems = ref(\n MigrationItems.map((item) => ({\n ...item,\n selected: true\n }))\n)\n\nconst pathError = ref('')\nconst isValidSource = computed(\n () => sourcePath.value !== '' && pathError.value === ''\n)\n\nconst validateSource = async (sourcePath: string) => {\n if (!sourcePath) {\n pathError.value = ''\n return\n }\n\n try {\n pathError.value = ''\n const validation = await electron.validateComfyUISource(sourcePath)\n\n if (!validation.isValid) pathError.value = validation.error\n } catch (error) {\n console.error(error)\n pathError.value = t('install.pathValidationFailed')\n }\n}\n\nconst browsePath = async () => {\n try {\n const result = await electron.showDirectoryPicker()\n if (result) {\n sourcePath.value = result\n await validateSource(result)\n }\n } catch (error) {\n console.error(error)\n pathError.value = t('install.failedToSelectDirectory')\n }\n}\n\nwatchEffect(() => {\n migrationItemIds.value = migrationItems.value\n .filter((item) => item.selected)\n .map((item) => item.id)\n})\n</script>\n","<template>\n <div class=\"flex flex-col items-center gap-4\">\n <div class=\"w-full\">\n <h3 class=\"text-lg font-medium text-neutral-100\">\n {{ $t(`settings.${normalizedSettingId}.name`) }}\n </h3>\n <p class=\"text-sm text-neutral-400 mt-1\">\n {{ $t(`settings.${normalizedSettingId}.tooltip`) }}\n </p>\n </div>\n <UrlInput\n v-model=\"modelValue\"\n :validate-url-fn=\"\n (mirror: string) =>\n checkMirrorReachable(mirror + (item.validationPathSuffix ?? ''))\n \"\n @state-change=\"validationState = $event\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\n\nimport UrlInput from '@/components/common/UrlInput.vue'\nimport { UVMirror } from '@/constants/uvMirrors'\nimport { normalizeI18nKey } from '@/utils/formatUtil'\nimport { checkMirrorReachable } from '@/utils/networkUtil'\nimport { ValidationState } from '@/utils/validationUtil'\n\nconst { item } = defineProps<{\n item: UVMirror\n}>()\n\nconst emit = defineEmits<{\n 'state-change': [state: ValidationState]\n}>()\n\nconst modelValue = defineModel<string>('modelValue', { required: true })\nconst validationState = ref<ValidationState>(ValidationState.IDLE)\n\nconst normalizedSettingId = computed(() => {\n return normalizeI18nKey(item.settingId)\n})\n\nonMounted(() => {\n modelValue.value = item.mirror\n})\n\nwatch(validationState, (newState) => {\n emit('state-change', newState)\n\n // Set fallback mirror if default mirror is invalid\n if (\n newState === ValidationState.INVALID &&\n modelValue.value === item.mirror\n ) {\n modelValue.value = item.fallbackMirror\n }\n})\n</script>\n","<template>\n <Panel\n :header=\"$t('install.settings.mirrorSettings')\"\n toggleable\n :collapsed=\"!showMirrorInputs\"\n pt:root=\"bg-neutral-800 border-none w-[600px]\"\n >\n <template\n v-for=\"([item, modelValue], index) in mirrors\"\n :key=\"item.settingId + item.mirror\"\n >\n <Divider v-if=\"index > 0\" />\n\n <MirrorItem\n :item=\"item\"\n v-model=\"modelValue.value\"\n @state-change=\"validationStates[index] = $event\"\n />\n </template>\n <template #icons>\n <i\n :class=\"{\n 'pi pi-spin pi-spinner text-neutral-400':\n validationState === ValidationState.LOADING,\n 'pi pi-check text-green-500':\n validationState === ValidationState.VALID,\n 'pi pi-times text-red-500':\n validationState === ValidationState.INVALID\n }\"\n v-tooltip=\"validationStateTooltip\"\n />\n </template>\n </Panel>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n CUDA_TORCH_URL,\n NIGHTLY_CPU_TORCH_URL,\n TorchDeviceType\n} from '@comfyorg/comfyui-electron-types'\nimport Divider from 'primevue/divider'\nimport Panel from 'primevue/panel'\nimport { ModelRef, computed, onMounted, ref } from 'vue'\n\nimport MirrorItem from '@/components/install/mirror/MirrorItem.vue'\nimport { PYPI_MIRROR, PYTHON_MIRROR, UVMirror } from '@/constants/uvMirrors'\nimport { t } from '@/i18n'\nimport { isInChina } from '@/utils/networkUtil'\nimport { ValidationState, mergeValidationStates } from '@/utils/validationUtil'\n\nconst showMirrorInputs = ref(false)\nconst { device } = defineProps<{ device: TorchDeviceType }>()\nconst pythonMirror = defineModel<string>('pythonMirror', { required: true })\nconst pypiMirror = defineModel<string>('pypiMirror', { required: true })\nconst torchMirror = defineModel<string>('torchMirror', { required: true })\n\nconst getTorchMirrorItem = (device: TorchDeviceType): UVMirror => {\n const settingId = 'Comfy-Desktop.UV.TorchInstallMirror'\n switch (device) {\n case 'mps':\n return {\n settingId,\n mirror: NIGHTLY_CPU_TORCH_URL,\n fallbackMirror: NIGHTLY_CPU_TORCH_URL\n }\n case 'nvidia':\n return {\n settingId,\n mirror: CUDA_TORCH_URL,\n fallbackMirror: CUDA_TORCH_URL\n }\n case 'cpu':\n default:\n return {\n settingId,\n mirror: PYPI_MIRROR.mirror,\n fallbackMirror: PYPI_MIRROR.fallbackMirror\n }\n }\n}\n\nconst userIsInChina = ref(false)\nonMounted(async () => {\n userIsInChina.value = await isInChina()\n})\n\nconst useFallbackMirror = (mirror: UVMirror) => ({\n ...mirror,\n mirror: mirror.fallbackMirror\n})\n\nconst mirrors = computed<[UVMirror, ModelRef<string>][]>(() =>\n (\n [\n [PYTHON_MIRROR, pythonMirror],\n [PYPI_MIRROR, pypiMirror],\n [getTorchMirrorItem(device), torchMirror]\n ] as [UVMirror, ModelRef<string>][]\n ).map(([item, modelValue]) => [\n userIsInChina.value ? useFallbackMirror(item) : item,\n modelValue\n ])\n)\n\nconst validationStates = ref<ValidationState[]>(\n mirrors.value.map(() => ValidationState.IDLE)\n)\nconst validationState = computed(() => {\n return mergeValidationStates(validationStates.value)\n})\nconst validationStateTooltip = computed(() => {\n switch (validationState.value) {\n case ValidationState.INVALID:\n return t('install.settings.mirrorsUnreachable')\n case ValidationState.VALID:\n return t('install.settings.mirrorsReachable')\n default:\n return t('install.settings.checkingMirrors')\n }\n})\n</script>\n","<template>\n <BaseViewTemplate dark>\n <!-- h-full to make sure the stepper does not layout shift between steps\n as for each step the stepper height is different. Inherit the center element\n placement from BaseViewTemplate would cause layout shift. -->\n <Stepper\n class=\"h-full p-8 2xl:p-16\"\n value=\"0\"\n @update:value=\"handleStepChange\"\n >\n <StepList class=\"select-none\">\n <Step value=\"0\">\n {{ $t('install.gpu') }}\n </Step>\n <Step value=\"1\" :disabled=\"noGpu\">\n {{ $t('install.installLocation') }}\n </Step>\n <Step value=\"2\" :disabled=\"noGpu || hasError || highestStep < 1\">\n {{ $t('install.migration') }}\n </Step>\n <Step value=\"3\" :disabled=\"noGpu || hasError || highestStep < 2\">\n {{ $t('install.desktopSettings') }}\n </Step>\n </StepList>\n <StepPanels>\n <StepPanel value=\"0\" v-slot=\"{ activateCallback }\">\n <GpuPicker v-model:device=\"device\" />\n <div class=\"flex pt-6 justify-end\">\n <Button\n :label=\"$t('g.next')\"\n icon=\"pi pi-arrow-right\"\n iconPos=\"right\"\n @click=\"activateCallback('1')\"\n :disabled=\"typeof device !== 'string'\"\n />\n </div>\n </StepPanel>\n <StepPanel value=\"1\" v-slot=\"{ activateCallback }\">\n <InstallLocationPicker\n v-model:installPath=\"installPath\"\n v-model:pathError=\"pathError\"\n />\n <div class=\"flex pt-6 justify-between\">\n <Button\n :label=\"$t('g.back')\"\n severity=\"secondary\"\n icon=\"pi pi-arrow-left\"\n @click=\"activateCallback('0')\"\n />\n <Button\n :label=\"$t('g.next')\"\n icon=\"pi pi-arrow-right\"\n iconPos=\"right\"\n @click=\"activateCallback('2')\"\n :disabled=\"pathError !== ''\"\n />\n </div>\n </StepPanel>\n <StepPanel value=\"2\" v-slot=\"{ activateCallback }\">\n <MigrationPicker\n v-model:sourcePath=\"migrationSourcePath\"\n v-model:migrationItemIds=\"migrationItemIds\"\n />\n <div class=\"flex pt-6 justify-between\">\n <Button\n :label=\"$t('g.back')\"\n severity=\"secondary\"\n icon=\"pi pi-arrow-left\"\n @click=\"activateCallback('1')\"\n />\n <Button\n :label=\"$t('g.next')\"\n icon=\"pi pi-arrow-right\"\n iconPos=\"right\"\n @click=\"activateCallback('3')\"\n />\n </div>\n </StepPanel>\n <StepPanel value=\"3\" v-slot=\"{ activateCallback }\">\n <DesktopSettingsConfiguration\n v-model:autoUpdate=\"autoUpdate\"\n v-model:allowMetrics=\"allowMetrics\"\n />\n <MirrorsConfiguration\n :device=\"device\"\n v-model:pythonMirror=\"pythonMirror\"\n v-model:pypiMirror=\"pypiMirror\"\n v-model:torchMirror=\"torchMirror\"\n class=\"mt-6\"\n />\n <div class=\"flex mt-6 justify-between\">\n <Button\n :label=\"$t('g.back')\"\n severity=\"secondary\"\n icon=\"pi pi-arrow-left\"\n @click=\"activateCallback('2')\"\n />\n <Button\n :label=\"$t('g.install')\"\n icon=\"pi pi-check\"\n iconPos=\"right\"\n :disabled=\"hasError\"\n @click=\"install()\"\n />\n </div>\n </StepPanel>\n </StepPanels>\n </Stepper>\n </BaseViewTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport type {\n InstallOptions,\n TorchDeviceType\n} from '@comfyorg/comfyui-electron-types'\nimport Button from 'primevue/button'\nimport Step from 'primevue/step'\nimport StepList from 'primevue/steplist'\nimport StepPanel from 'primevue/steppanel'\nimport StepPanels from 'primevue/steppanels'\nimport Stepper from 'primevue/stepper'\nimport { computed, onMounted, ref, toRaw } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport DesktopSettingsConfiguration from '@/components/install/DesktopSettingsConfiguration.vue'\nimport GpuPicker from '@/components/install/GpuPicker.vue'\nimport InstallLocationPicker from '@/components/install/InstallLocationPicker.vue'\nimport MigrationPicker from '@/components/install/MigrationPicker.vue'\nimport MirrorsConfiguration from '@/components/install/MirrorsConfiguration.vue'\nimport { electronAPI } from '@/utils/envUtil'\nimport BaseViewTemplate from '@/views/templates/BaseViewTemplate.vue'\n\nconst device = ref<TorchDeviceType>(null)\n\nconst installPath = ref('')\nconst pathError = ref('')\n\nconst migrationSourcePath = ref('')\nconst migrationItemIds = ref<string[]>([])\n\nconst autoUpdate = ref(true)\nconst allowMetrics = ref(true)\nconst pythonMirror = ref('')\nconst pypiMirror = ref('')\nconst torchMirror = ref('')\n\n/** Forces each install step to be visited at least once. */\nconst highestStep = ref(0)\n\nconst handleStepChange = (value: string | number) => {\n setHighestStep(value)\n\n electronAPI().Events.trackEvent('install_stepper_change', {\n step: value\n })\n}\n\nconst setHighestStep = (value: string | number) => {\n const int = typeof value === 'number' ? value : parseInt(value, 10)\n if (!isNaN(int) && int > highestStep.value) highestStep.value = int\n}\n\nconst hasError = computed(() => pathError.value !== '')\nconst noGpu = computed(() => typeof device.value !== 'string')\n\nconst electron = electronAPI()\nconst router = useRouter()\nconst install = () => {\n const options: InstallOptions = {\n installPath: installPath.value,\n autoUpdate: autoUpdate.value,\n allowMetrics: allowMetrics.value,\n migrationSourcePath: migrationSourcePath.value,\n migrationItemIds: toRaw(migrationItemIds.value),\n pythonMirror: pythonMirror.value,\n pypiMirror: pypiMirror.value,\n torchMirror: torchMirror.value,\n device: device.value\n }\n electron.installComfyUI(options)\n\n const nextPage =\n options.device === 'unsupported' ? '/manual-configuration' : '/server-start'\n router.push(nextPage)\n}\n\nonMounted(async () => {\n if (!electron) return\n\n const detectedGpu = await electron.Config.getDetectedGpu()\n if (detectedGpu === 'mps' || detectedGpu === 'nvidia') {\n device.value = detectedGpu\n }\n\n electronAPI().Events.trackEvent('install_stepper_change', {\n step: '0',\n gpu: detectedGpu\n })\n})\n</script>\n\n<style scoped>\n:deep(.p-steppanel) {\n @apply bg-transparent;\n}\n</style>\n"],"names":["_useModel","t","sourcePath"],"mappings":"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"}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
|
2
|
+
.p-tag[data-v-79125ff6] {
|
3
|
+
--p-tag-gap: 0.5rem;
|
4
|
+
}
|
5
|
+
.hover-brighten {
|
6
|
+
&[data-v-79125ff6] {
|
7
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
8
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
9
|
+
transition-duration: 150ms;
|
10
|
+
transition-property: filter, box-shadow;
|
11
|
+
}
|
12
|
+
&[data-v-79125ff6]:hover {
|
13
|
+
filter: brightness(107%) contrast(105%);
|
14
|
+
box-shadow: 0 0 0.25rem #ffffff79;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
.p-accordioncontent-content[data-v-79125ff6] {
|
18
|
+
border-radius: 0.5rem;
|
19
|
+
--tw-bg-opacity: 1;
|
20
|
+
background-color: rgb(23 23 23 / var(--tw-bg-opacity));
|
21
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
22
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
23
|
+
transition-duration: 150ms;
|
24
|
+
}
|
25
|
+
div.selected {
|
26
|
+
.gpu-button[data-v-79125ff6]:not(.selected) {
|
27
|
+
opacity: 0.5;
|
28
|
+
}
|
29
|
+
.gpu-button[data-v-79125ff6]:not(.selected):hover {
|
30
|
+
opacity: 1;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
.gpu-button[data-v-79125ff6] {
|
34
|
+
margin: 0px;
|
35
|
+
display: flex;
|
36
|
+
width: 50%;
|
37
|
+
cursor: pointer;
|
38
|
+
flex-direction: column;
|
39
|
+
align-items: center;
|
40
|
+
justify-content: space-around;
|
41
|
+
border-radius: 0.5rem;
|
42
|
+
background-color: rgb(38 38 38 / var(--tw-bg-opacity));
|
43
|
+
--tw-bg-opacity: 0.5;
|
44
|
+
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
|
45
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
46
|
+
transition-duration: 150ms;
|
47
|
+
}
|
48
|
+
.gpu-button[data-v-79125ff6]:hover {
|
49
|
+
--tw-bg-opacity: 0.75;
|
50
|
+
}
|
51
|
+
.gpu-button {
|
52
|
+
&.selected[data-v-79125ff6] {
|
53
|
+
--tw-bg-opacity: 1;
|
54
|
+
background-color: rgb(64 64 64 / var(--tw-bg-opacity));
|
55
|
+
}
|
56
|
+
&.selected[data-v-79125ff6] {
|
57
|
+
--tw-bg-opacity: 0.5;
|
58
|
+
}
|
59
|
+
&.selected[data-v-79125ff6] {
|
60
|
+
opacity: 1;
|
61
|
+
}
|
62
|
+
&.selected[data-v-79125ff6]:hover {
|
63
|
+
--tw-bg-opacity: 0.6;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
.disabled[data-v-79125ff6] {
|
67
|
+
pointer-events: none;
|
68
|
+
opacity: 0.4;
|
69
|
+
}
|
70
|
+
.p-card-header[data-v-79125ff6] {
|
71
|
+
flex-grow: 1;
|
72
|
+
text-align: center;
|
73
|
+
}
|
74
|
+
.p-card-body[data-v-79125ff6] {
|
75
|
+
padding-top: 0px;
|
76
|
+
text-align: center;
|
77
|
+
}
|
78
|
+
|
79
|
+
[data-v-cd6731d2] .p-steppanel {
|
80
|
+
background-color: transparent
|
81
|
+
}
|
@@ -0,0 +1,292 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
3
|
+
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, dK as FilterMatchMode, ay as useKeybindingStore, J as useCommandStore, I as useI18n, X as normalizeI18nKey, w as watchEffect, b3 as useToast, r as resolveDirective, y as createBlock, dL as SearchBox, m as createBaseVNode, l as script$2, bt as script$4, aC as withModifiers, bw as script$5, ao as script$6, i as withDirectives, dM as _sfc_main$2, dN as KeyComboImpl, dO as KeybindingImpl, _ as _export_sfc } from "./index-C4MmAha5.js";
|
4
|
+
import { g as script$1, h as script$3 } from "./index-CfhNTyds.js";
|
5
|
+
import { u as useKeybindingService } from "./keybindingService-CjdvrYgE.js";
|
6
|
+
import "./index-BbmkkEvb.js";
|
7
|
+
const _hoisted_1$1 = {
|
8
|
+
key: 0,
|
9
|
+
class: "px-2"
|
10
|
+
};
|
11
|
+
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
12
|
+
__name: "KeyComboDisplay",
|
13
|
+
props: {
|
14
|
+
keyCombo: {},
|
15
|
+
isModified: { type: Boolean, default: false }
|
16
|
+
},
|
17
|
+
setup(__props) {
|
18
|
+
const props = __props;
|
19
|
+
const keySequences = computed(() => props.keyCombo.getKeySequences());
|
20
|
+
return (_ctx, _cache) => {
|
21
|
+
return openBlock(), createElementBlock("span", null, [
|
22
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => {
|
23
|
+
return openBlock(), createElementBlock(Fragment, { key: index }, [
|
24
|
+
createVNode(unref(script), {
|
25
|
+
severity: _ctx.isModified ? "info" : "secondary"
|
26
|
+
}, {
|
27
|
+
default: withCtx(() => [
|
28
|
+
createTextVNode(toDisplayString(sequence), 1)
|
29
|
+
]),
|
30
|
+
_: 2
|
31
|
+
}, 1032, ["severity"]),
|
32
|
+
index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true)
|
33
|
+
], 64);
|
34
|
+
}), 128))
|
35
|
+
]);
|
36
|
+
};
|
37
|
+
}
|
38
|
+
});
|
39
|
+
const _hoisted_1 = { class: "actions invisible flex flex-row" };
|
40
|
+
const _hoisted_2 = ["title"];
|
41
|
+
const _hoisted_3 = { key: 1 };
|
42
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
43
|
+
__name: "KeybindingPanel",
|
44
|
+
setup(__props) {
|
45
|
+
const filters = ref({
|
46
|
+
global: { value: "", matchMode: FilterMatchMode.CONTAINS }
|
47
|
+
});
|
48
|
+
const keybindingStore = useKeybindingStore();
|
49
|
+
const keybindingService = useKeybindingService();
|
50
|
+
const commandStore = useCommandStore();
|
51
|
+
const { t } = useI18n();
|
52
|
+
const commandsData = computed(() => {
|
53
|
+
return Object.values(commandStore.commands).map((command) => ({
|
54
|
+
id: command.id,
|
55
|
+
label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label),
|
56
|
+
keybinding: keybindingStore.getKeybindingByCommandId(command.id)
|
57
|
+
}));
|
58
|
+
});
|
59
|
+
const selectedCommandData = ref(null);
|
60
|
+
const editDialogVisible = ref(false);
|
61
|
+
const newBindingKeyCombo = ref(null);
|
62
|
+
const currentEditingCommand = ref(null);
|
63
|
+
const keybindingInput = ref(null);
|
64
|
+
const existingKeybindingOnCombo = computed(() => {
|
65
|
+
if (!currentEditingCommand.value) {
|
66
|
+
return null;
|
67
|
+
}
|
68
|
+
if (currentEditingCommand.value.keybinding?.combo?.equals(
|
69
|
+
newBindingKeyCombo.value
|
70
|
+
)) {
|
71
|
+
return null;
|
72
|
+
}
|
73
|
+
if (!newBindingKeyCombo.value) {
|
74
|
+
return null;
|
75
|
+
}
|
76
|
+
return keybindingStore.getKeybinding(newBindingKeyCombo.value);
|
77
|
+
});
|
78
|
+
function editKeybinding(commandData) {
|
79
|
+
currentEditingCommand.value = commandData;
|
80
|
+
newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null;
|
81
|
+
editDialogVisible.value = true;
|
82
|
+
}
|
83
|
+
__name(editKeybinding, "editKeybinding");
|
84
|
+
watchEffect(() => {
|
85
|
+
if (editDialogVisible.value) {
|
86
|
+
setTimeout(() => {
|
87
|
+
keybindingInput.value?.$el?.focus();
|
88
|
+
}, 300);
|
89
|
+
}
|
90
|
+
});
|
91
|
+
function removeKeybinding(commandData) {
|
92
|
+
if (commandData.keybinding) {
|
93
|
+
keybindingStore.unsetKeybinding(commandData.keybinding);
|
94
|
+
keybindingService.persistUserKeybindings();
|
95
|
+
}
|
96
|
+
}
|
97
|
+
__name(removeKeybinding, "removeKeybinding");
|
98
|
+
function captureKeybinding(event) {
|
99
|
+
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
100
|
+
switch (event.key) {
|
101
|
+
case "Escape":
|
102
|
+
cancelEdit();
|
103
|
+
return;
|
104
|
+
case "Enter":
|
105
|
+
saveKeybinding();
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
const keyCombo = KeyComboImpl.fromEvent(event);
|
110
|
+
newBindingKeyCombo.value = keyCombo;
|
111
|
+
}
|
112
|
+
__name(captureKeybinding, "captureKeybinding");
|
113
|
+
function cancelEdit() {
|
114
|
+
editDialogVisible.value = false;
|
115
|
+
currentEditingCommand.value = null;
|
116
|
+
newBindingKeyCombo.value = null;
|
117
|
+
}
|
118
|
+
__name(cancelEdit, "cancelEdit");
|
119
|
+
function saveKeybinding() {
|
120
|
+
if (currentEditingCommand.value && newBindingKeyCombo.value) {
|
121
|
+
const updated = keybindingStore.updateKeybindingOnCommand(
|
122
|
+
new KeybindingImpl({
|
123
|
+
commandId: currentEditingCommand.value.id,
|
124
|
+
combo: newBindingKeyCombo.value
|
125
|
+
})
|
126
|
+
);
|
127
|
+
if (updated) {
|
128
|
+
keybindingService.persistUserKeybindings();
|
129
|
+
}
|
130
|
+
}
|
131
|
+
cancelEdit();
|
132
|
+
}
|
133
|
+
__name(saveKeybinding, "saveKeybinding");
|
134
|
+
const toast = useToast();
|
135
|
+
async function resetKeybindings() {
|
136
|
+
keybindingStore.resetKeybindings();
|
137
|
+
await keybindingService.persistUserKeybindings();
|
138
|
+
toast.add({
|
139
|
+
severity: "info",
|
140
|
+
summary: "Info",
|
141
|
+
detail: "Keybindings reset",
|
142
|
+
life: 3e3
|
143
|
+
});
|
144
|
+
}
|
145
|
+
__name(resetKeybindings, "resetKeybindings");
|
146
|
+
return (_ctx, _cache) => {
|
147
|
+
const _directive_tooltip = resolveDirective("tooltip");
|
148
|
+
return openBlock(), createBlock(_sfc_main$2, {
|
149
|
+
value: "Keybinding",
|
150
|
+
class: "keybinding-panel"
|
151
|
+
}, {
|
152
|
+
header: withCtx(() => [
|
153
|
+
createVNode(SearchBox, {
|
154
|
+
modelValue: filters.value["global"].value,
|
155
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event),
|
156
|
+
placeholder: _ctx.$t("g.searchKeybindings") + "..."
|
157
|
+
}, null, 8, ["modelValue", "placeholder"])
|
158
|
+
]),
|
159
|
+
default: withCtx(() => [
|
160
|
+
createVNode(unref(script$3), {
|
161
|
+
value: commandsData.value,
|
162
|
+
selection: selectedCommandData.value,
|
163
|
+
"onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event),
|
164
|
+
"global-filter-fields": ["id", "label"],
|
165
|
+
filters: filters.value,
|
166
|
+
selectionMode: "single",
|
167
|
+
stripedRows: "",
|
168
|
+
pt: {
|
169
|
+
header: "px-0"
|
170
|
+
}
|
171
|
+
}, {
|
172
|
+
default: withCtx(() => [
|
173
|
+
createVNode(unref(script$1), {
|
174
|
+
field: "actions",
|
175
|
+
header: ""
|
176
|
+
}, {
|
177
|
+
body: withCtx((slotProps) => [
|
178
|
+
createBaseVNode("div", _hoisted_1, [
|
179
|
+
createVNode(unref(script$2), {
|
180
|
+
icon: "pi pi-pencil",
|
181
|
+
class: "p-button-text",
|
182
|
+
onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick")
|
183
|
+
}, null, 8, ["onClick"]),
|
184
|
+
createVNode(unref(script$2), {
|
185
|
+
icon: "pi pi-trash",
|
186
|
+
class: "p-button-text p-button-danger",
|
187
|
+
onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"),
|
188
|
+
disabled: !slotProps.data.keybinding
|
189
|
+
}, null, 8, ["onClick", "disabled"])
|
190
|
+
])
|
191
|
+
]),
|
192
|
+
_: 1
|
193
|
+
}),
|
194
|
+
createVNode(unref(script$1), {
|
195
|
+
field: "id",
|
196
|
+
header: _ctx.$t("g.command"),
|
197
|
+
sortable: "",
|
198
|
+
class: "max-w-64 2xl:max-w-full"
|
199
|
+
}, {
|
200
|
+
body: withCtx((slotProps) => [
|
201
|
+
createBaseVNode("div", {
|
202
|
+
class: "overflow-hidden text-ellipsis whitespace-nowrap",
|
203
|
+
title: slotProps.data.id
|
204
|
+
}, toDisplayString(slotProps.data.label), 9, _hoisted_2)
|
205
|
+
]),
|
206
|
+
_: 1
|
207
|
+
}, 8, ["header"]),
|
208
|
+
createVNode(unref(script$1), {
|
209
|
+
field: "keybinding",
|
210
|
+
header: _ctx.$t("g.keybinding")
|
211
|
+
}, {
|
212
|
+
body: withCtx((slotProps) => [
|
213
|
+
slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, {
|
214
|
+
key: 0,
|
215
|
+
keyCombo: slotProps.data.keybinding.combo,
|
216
|
+
isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id)
|
217
|
+
}, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-"))
|
218
|
+
]),
|
219
|
+
_: 1
|
220
|
+
}, 8, ["header"])
|
221
|
+
]),
|
222
|
+
_: 1
|
223
|
+
}, 8, ["value", "selection", "filters"]),
|
224
|
+
createVNode(unref(script$6), {
|
225
|
+
class: "min-w-96",
|
226
|
+
visible: editDialogVisible.value,
|
227
|
+
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event),
|
228
|
+
modal: "",
|
229
|
+
header: currentEditingCommand.value?.label,
|
230
|
+
onHide: cancelEdit
|
231
|
+
}, {
|
232
|
+
footer: withCtx(() => [
|
233
|
+
createVNode(unref(script$2), {
|
234
|
+
label: "Save",
|
235
|
+
icon: "pi pi-check",
|
236
|
+
onClick: saveKeybinding,
|
237
|
+
disabled: !!existingKeybindingOnCombo.value,
|
238
|
+
autofocus: ""
|
239
|
+
}, null, 8, ["disabled"])
|
240
|
+
]),
|
241
|
+
default: withCtx(() => [
|
242
|
+
createBaseVNode("div", null, [
|
243
|
+
createVNode(unref(script$4), {
|
244
|
+
class: "mb-2 text-center",
|
245
|
+
ref_key: "keybindingInput",
|
246
|
+
ref: keybindingInput,
|
247
|
+
modelValue: newBindingKeyCombo.value?.toString() ?? "",
|
248
|
+
placeholder: "Press keys for new binding",
|
249
|
+
onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]),
|
250
|
+
autocomplete: "off",
|
251
|
+
fluid: "",
|
252
|
+
invalid: !!existingKeybindingOnCombo.value
|
253
|
+
}, null, 8, ["modelValue", "invalid"]),
|
254
|
+
existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), {
|
255
|
+
key: 0,
|
256
|
+
severity: "error"
|
257
|
+
}, {
|
258
|
+
default: withCtx(() => [
|
259
|
+
_cache[3] || (_cache[3] = createTextVNode(" Keybinding already exists on ")),
|
260
|
+
createVNode(unref(script), {
|
261
|
+
severity: "secondary",
|
262
|
+
value: existingKeybindingOnCombo.value.commandId
|
263
|
+
}, null, 8, ["value"])
|
264
|
+
]),
|
265
|
+
_: 1
|
266
|
+
})) : createCommentVNode("", true)
|
267
|
+
])
|
268
|
+
]),
|
269
|
+
_: 1
|
270
|
+
}, 8, ["visible", "header"]),
|
271
|
+
withDirectives(createVNode(unref(script$2), {
|
272
|
+
class: "mt-4",
|
273
|
+
label: _ctx.$t("g.reset"),
|
274
|
+
icon: "pi pi-trash",
|
275
|
+
severity: "danger",
|
276
|
+
fluid: "",
|
277
|
+
text: "",
|
278
|
+
onClick: resetKeybindings
|
279
|
+
}, null, 8, ["label"]), [
|
280
|
+
[_directive_tooltip, _ctx.$t("g.resetKeybindingsTooltip")]
|
281
|
+
])
|
282
|
+
]),
|
283
|
+
_: 1
|
284
|
+
});
|
285
|
+
};
|
286
|
+
}
|
287
|
+
});
|
288
|
+
const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8454e24f"]]);
|
289
|
+
export {
|
290
|
+
KeybindingPanel as default
|
291
|
+
};
|
292
|
+
//# sourceMappingURL=KeybindingPanel-BxEJxxOC.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"KeybindingPanel-BxEJxxOC.js","sources":["../../src/components/dialog/content/setting/keybinding/KeyComboDisplay.vue","../../src/components/dialog/content/setting/KeybindingPanel.vue"],"sourcesContent":["<template>\n <span>\n <template v-for=\"(sequence, index) in keySequences\" :key=\"index\">\n <Tag :severity=\"isModified ? 'info' : 'secondary'\">\n {{ sequence }}\n </Tag>\n <span v-if=\"index < keySequences.length - 1\" class=\"px-2\">+</span>\n </template>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport Tag from 'primevue/tag'\nimport { computed } from 'vue'\n\nimport { KeyComboImpl } from '@/stores/keybindingStore'\n\nconst props = withDefaults(\n defineProps<{\n keyCombo: KeyComboImpl\n isModified: boolean\n }>(),\n {\n isModified: false\n }\n)\n\nconst keySequences = computed(() => props.keyCombo.getKeySequences())\n</script>\n","<template>\n <PanelTemplate value=\"Keybinding\" class=\"keybinding-panel\">\n <template #header>\n <SearchBox\n v-model=\"filters['global'].value\"\n :placeholder=\"$t('g.searchKeybindings') + '...'\"\n />\n </template>\n\n <DataTable\n :value=\"commandsData\"\n v-model:selection=\"selectedCommandData\"\n :global-filter-fields=\"['id', 'label']\"\n :filters=\"filters\"\n selectionMode=\"single\"\n stripedRows\n :pt=\"{\n header: 'px-0'\n }\"\n >\n <Column field=\"actions\" header=\"\">\n <template #body=\"slotProps\">\n <div class=\"actions invisible flex flex-row\">\n <Button\n icon=\"pi pi-pencil\"\n class=\"p-button-text\"\n @click=\"editKeybinding(slotProps.data)\"\n />\n <Button\n icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\"\n @click=\"removeKeybinding(slotProps.data)\"\n :disabled=\"!slotProps.data.keybinding\"\n />\n </div>\n </template>\n </Column>\n <Column\n field=\"id\"\n :header=\"$t('g.command')\"\n sortable\n class=\"max-w-64 2xl:max-w-full\"\n >\n <template #body=\"slotProps\">\n <div\n class=\"overflow-hidden text-ellipsis whitespace-nowrap\"\n :title=\"slotProps.data.id\"\n >\n {{ slotProps.data.label }}\n </div>\n </template>\n </Column>\n <Column field=\"keybinding\" :header=\"$t('g.keybinding')\">\n <template #body=\"slotProps\">\n <KeyComboDisplay\n v-if=\"slotProps.data.keybinding\"\n :keyCombo=\"slotProps.data.keybinding.combo\"\n :isModified=\"\n keybindingStore.isCommandKeybindingModified(slotProps.data.id)\n \"\n />\n <span v-else>-</span>\n </template>\n </Column>\n </DataTable>\n\n <Dialog\n class=\"min-w-96\"\n v-model:visible=\"editDialogVisible\"\n modal\n :header=\"currentEditingCommand?.label\"\n @hide=\"cancelEdit\"\n >\n <div>\n <InputText\n class=\"mb-2 text-center\"\n ref=\"keybindingInput\"\n :modelValue=\"newBindingKeyCombo?.toString() ?? ''\"\n placeholder=\"Press keys for new binding\"\n @keydown.stop.prevent=\"captureKeybinding\"\n autocomplete=\"off\"\n fluid\n :invalid=\"!!existingKeybindingOnCombo\"\n />\n <Message v-if=\"existingKeybindingOnCombo\" severity=\"error\">\n Keybinding already exists on\n <Tag\n severity=\"secondary\"\n :value=\"existingKeybindingOnCombo.commandId\"\n />\n </Message>\n </div>\n <template #footer>\n <Button\n label=\"Save\"\n icon=\"pi pi-check\"\n @click=\"saveKeybinding\"\n :disabled=\"!!existingKeybindingOnCombo\"\n autofocus\n />\n </template>\n </Dialog>\n <Button\n class=\"mt-4\"\n :label=\"$t('g.reset')\"\n v-tooltip=\"$t('g.resetKeybindingsTooltip')\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n fluid\n text\n @click=\"resetKeybindings\"\n />\n </PanelTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport { FilterMatchMode } from '@primevue/core/api'\nimport Button from 'primevue/button'\nimport Column from 'primevue/column'\nimport DataTable from 'primevue/datatable'\nimport Dialog from 'primevue/dialog'\nimport InputText from 'primevue/inputtext'\nimport Message from 'primevue/message'\nimport Tag from 'primevue/tag'\nimport { useToast } from 'primevue/usetoast'\nimport { computed, ref, watchEffect } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport SearchBox from '@/components/common/SearchBox.vue'\nimport { useKeybindingService } from '@/services/keybindingService'\nimport { useCommandStore } from '@/stores/commandStore'\nimport {\n KeyComboImpl,\n KeybindingImpl,\n useKeybindingStore\n} from '@/stores/keybindingStore'\nimport { normalizeI18nKey } from '@/utils/formatUtil'\n\nimport PanelTemplate from './PanelTemplate.vue'\nimport KeyComboDisplay from './keybinding/KeyComboDisplay.vue'\n\nconst filters = ref({\n global: { value: '', matchMode: FilterMatchMode.CONTAINS }\n})\n\nconst keybindingStore = useKeybindingStore()\nconst keybindingService = useKeybindingService()\nconst commandStore = useCommandStore()\nconst { t } = useI18n()\n\ninterface ICommandData {\n id: string\n keybinding: KeybindingImpl | null\n label: string\n}\n\nconst commandsData = computed<ICommandData[]>(() => {\n return Object.values(commandStore.commands).map((command) => ({\n id: command.id,\n label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label),\n keybinding: keybindingStore.getKeybindingByCommandId(command.id)\n }))\n})\n\nconst selectedCommandData = ref<ICommandData | null>(null)\nconst editDialogVisible = ref(false)\nconst newBindingKeyCombo = ref<KeyComboImpl | null>(null)\nconst currentEditingCommand = ref<ICommandData | null>(null)\nconst keybindingInput = ref(null)\n\nconst existingKeybindingOnCombo = computed<KeybindingImpl | null>(() => {\n if (!currentEditingCommand.value) {\n return null\n }\n\n // If the new keybinding is the same as the current editing command, then don't show the error\n if (\n currentEditingCommand.value.keybinding?.combo?.equals(\n newBindingKeyCombo.value\n )\n ) {\n return null\n }\n\n if (!newBindingKeyCombo.value) {\n return null\n }\n\n return keybindingStore.getKeybinding(newBindingKeyCombo.value)\n})\n\nfunction editKeybinding(commandData: ICommandData) {\n currentEditingCommand.value = commandData\n newBindingKeyCombo.value = commandData.keybinding\n ? commandData.keybinding.combo\n : null\n editDialogVisible.value = true\n}\n\nwatchEffect(() => {\n if (editDialogVisible.value) {\n // nextTick doesn't work here, so we use a timeout instead\n setTimeout(() => {\n keybindingInput.value?.$el?.focus()\n }, 300)\n }\n})\n\nfunction removeKeybinding(commandData: ICommandData) {\n if (commandData.keybinding) {\n keybindingStore.unsetKeybinding(commandData.keybinding)\n keybindingService.persistUserKeybindings()\n }\n}\n\nfunction captureKeybinding(event: KeyboardEvent) {\n // Allow the use of keyboard shortcuts when adding keyboard shortcuts\n if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {\n switch (event.key) {\n case 'Escape':\n cancelEdit()\n return\n case 'Enter':\n saveKeybinding()\n return\n }\n }\n const keyCombo = KeyComboImpl.fromEvent(event)\n newBindingKeyCombo.value = keyCombo\n}\n\nfunction cancelEdit() {\n editDialogVisible.value = false\n currentEditingCommand.value = null\n newBindingKeyCombo.value = null\n}\n\nfunction saveKeybinding() {\n if (currentEditingCommand.value && newBindingKeyCombo.value) {\n const updated = keybindingStore.updateKeybindingOnCommand(\n new KeybindingImpl({\n commandId: currentEditingCommand.value.id,\n combo: newBindingKeyCombo.value\n })\n )\n if (updated) {\n keybindingService.persistUserKeybindings()\n }\n }\n cancelEdit()\n}\n\nconst toast = useToast()\nasync function resetKeybindings() {\n keybindingStore.resetKeybindings()\n await keybindingService.persistUserKeybindings()\n toast.add({\n severity: 'info',\n summary: 'Info',\n detail: 'Keybindings reset',\n life: 3000\n })\n}\n</script>\n\n<style scoped>\n:deep(.p-datatable-tbody) > tr > td {\n @apply p-1;\n min-height: 2rem;\n}\n\n:deep(.p-datatable-row-selected) .actions,\n:deep(.p-datatable-selectable-row:hover) .actions {\n @apply visible;\n}\n</style>\n"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
.task-card-ok[data-v-c3bd7658] {
|
3
|
+
|
4
|
+
position: absolute;
|
5
|
+
|
6
|
+
right: -1rem;
|
7
|
+
|
8
|
+
bottom: -1rem;
|
9
|
+
|
10
|
+
grid-column: 1 / -1;
|
11
|
+
|
12
|
+
grid-row: 1 / -1;
|
13
|
+
|
14
|
+
--tw-text-opacity: 1;
|
15
|
+
|
16
|
+
color: rgb(150 206 76 / var(--tw-text-opacity));
|
17
|
+
|
18
|
+
opacity: 1;
|
19
|
+
|
20
|
+
transition-property: opacity;
|
21
|
+
|
22
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
23
|
+
|
24
|
+
transition-duration: 150ms;
|
25
|
+
|
26
|
+
font-size: 4rem;
|
27
|
+
text-shadow: 0.25rem 0 0.5rem black;
|
28
|
+
z-index: 10;
|
29
|
+
}
|
30
|
+
.p-card {
|
31
|
+
&[data-v-c3bd7658] {
|
32
|
+
|
33
|
+
transition-property: opacity;
|
34
|
+
|
35
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
36
|
+
|
37
|
+
transition-duration: 150ms;
|
38
|
+
|
39
|
+
--p-card-background: var(--p-button-secondary-background);
|
40
|
+
opacity: 0.9;
|
41
|
+
}
|
42
|
+
&.opacity-65[data-v-c3bd7658] {
|
43
|
+
opacity: 0.4;
|
44
|
+
}
|
45
|
+
&[data-v-c3bd7658]:hover {
|
46
|
+
opacity: 1;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
[data-v-c3bd7658] .p-card-header {
|
50
|
+
z-index: 0;
|
51
|
+
}
|
52
|
+
[data-v-c3bd7658] .p-card-body {
|
53
|
+
z-index: 1;
|
54
|
+
flex-grow: 1;
|
55
|
+
justify-content: space-between;
|
56
|
+
}
|
57
|
+
.task-div {
|
58
|
+
> i[data-v-c3bd7658] {
|
59
|
+
pointer-events: none;
|
60
|
+
}
|
61
|
+
&:hover > i[data-v-c3bd7658] {
|
62
|
+
opacity: 0.2;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
[data-v-1073ace1] .p-tag {
|
67
|
+
--p-tag-gap: 0.375rem;
|
68
|
+
}
|
69
|
+
.backspan[data-v-1073ace1]::before {
|
70
|
+
position: absolute;
|
71
|
+
margin: 0px;
|
72
|
+
color: var(--p-text-muted-color);
|
73
|
+
font-family: 'primeicons';
|
74
|
+
top: -2rem;
|
75
|
+
right: -2rem;
|
76
|
+
speak: none;
|
77
|
+
font-style: normal;
|
78
|
+
font-weight: normal;
|
79
|
+
font-variant: normal;
|
80
|
+
text-transform: none;
|
81
|
+
line-height: 1;
|
82
|
+
display: inline-block;
|
83
|
+
-webkit-font-smoothing: antialiased;
|
84
|
+
opacity: 0.02;
|
85
|
+
font-size: min(14rem, 90vw);
|
86
|
+
z-index: 0;
|
87
|
+
}
|