comfyui-frontend-package 1.38.5__py3-none-any.whl → 1.38.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.
Files changed (139) hide show
  1. comfyui_frontend_package/static/assets/{AboutPanel-CHse5rOA.js → AboutPanel-lkjGFasi.js} +2 -2
  2. comfyui_frontend_package/static/assets/{AboutPanel-CHse5rOA.js.map → AboutPanel-lkjGFasi.js.map} +1 -1
  3. comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CAa8V66L.js → AudioPreviewPlayer-BxCSKPl9.js} +2 -2
  4. comfyui_frontend_package/static/assets/{AudioPreviewPlayer-CAa8V66L.js.map → AudioPreviewPlayer-BxCSKPl9.js.map} +1 -1
  5. comfyui_frontend_package/static/assets/AudioPreviewPlayer-CkxKvcVf.js +1 -0
  6. comfyui_frontend_package/static/assets/{BaseViewTemplate-DA6zfigT.js → BaseViewTemplate-CjODF2hh.js} +2 -2
  7. comfyui_frontend_package/static/assets/{BaseViewTemplate-DA6zfigT.js.map → BaseViewTemplate-CjODF2hh.js.map} +1 -1
  8. comfyui_frontend_package/static/assets/{CloudAuthTimeoutView-9OPBS1hE.js → CloudAuthTimeoutView-D-QkjPNh.js} +2 -2
  9. comfyui_frontend_package/static/assets/{CloudAuthTimeoutView-9OPBS1hE.js.map → CloudAuthTimeoutView-D-QkjPNh.js.map} +1 -1
  10. comfyui_frontend_package/static/assets/{CloudBadge-BnLiAHDN.js → CloudBadge-B4nmLus2.js} +2 -2
  11. comfyui_frontend_package/static/assets/{CloudBadge-BnLiAHDN.js.map → CloudBadge-B4nmLus2.js.map} +1 -1
  12. comfyui_frontend_package/static/assets/{CloudForgotPasswordView-BqDR_C7K.js → CloudForgotPasswordView-DOEV9hGr.js} +2 -2
  13. comfyui_frontend_package/static/assets/{CloudForgotPasswordView-BqDR_C7K.js.map → CloudForgotPasswordView-DOEV9hGr.js.map} +1 -1
  14. comfyui_frontend_package/static/assets/{CloudLayoutView-vTrrVUOY.js → CloudLayoutView-ShKH6rRV.js} +2 -2
  15. comfyui_frontend_package/static/assets/{CloudLayoutView-vTrrVUOY.js.map → CloudLayoutView-ShKH6rRV.js.map} +1 -1
  16. comfyui_frontend_package/static/assets/{CloudLoginView-T17euJly.js → CloudLoginView-C3Te42U9.js} +2 -2
  17. comfyui_frontend_package/static/assets/{CloudLoginView-T17euJly.js.map → CloudLoginView-C3Te42U9.js.map} +1 -1
  18. comfyui_frontend_package/static/assets/CloudRunButtonWrapper-Cub7EB34.js +3 -0
  19. comfyui_frontend_package/static/assets/{CloudRunButtonWrapper-hQc4BNkX.js.map → CloudRunButtonWrapper-Cub7EB34.js.map} +1 -1
  20. comfyui_frontend_package/static/assets/{CloudSignupView-vEDby5k3.js → CloudSignupView-X2oiL3ZR.js} +2 -2
  21. comfyui_frontend_package/static/assets/{CloudSignupView-vEDby5k3.js.map → CloudSignupView-X2oiL3ZR.js.map} +1 -1
  22. comfyui_frontend_package/static/assets/{CloudSubscriptionRedirectView-DPyO745g.js → CloudSubscriptionRedirectView-UjNv8emo.js} +2 -2
  23. comfyui_frontend_package/static/assets/{CloudSubscriptionRedirectView-DPyO745g.js.map → CloudSubscriptionRedirectView-UjNv8emo.js.map} +1 -1
  24. comfyui_frontend_package/static/assets/{CloudSurveyView-CBtTd9Ru.js → CloudSurveyView-IaiucCTP.js} +2 -2
  25. comfyui_frontend_package/static/assets/{CloudSurveyView-CBtTd9Ru.js.map → CloudSurveyView-IaiucCTP.js.map} +1 -1
  26. comfyui_frontend_package/static/assets/ComfyQueueButton-BppnHbrl.js +1 -0
  27. comfyui_frontend_package/static/assets/{ComfyQueueButton-MZrp7wYJ.js → ComfyQueueButton-HjSIKZKO.js} +2 -2
  28. comfyui_frontend_package/static/assets/{ComfyQueueButton-MZrp7wYJ.js.map → ComfyQueueButton-HjSIKZKO.js.map} +1 -1
  29. comfyui_frontend_package/static/assets/{ExtensionPanel-CrWVGUtg.js → ExtensionPanel-Bzb9QtKj.js} +2 -2
  30. comfyui_frontend_package/static/assets/{ExtensionPanel-CrWVGUtg.js.map → ExtensionPanel-Bzb9QtKj.js.map} +1 -1
  31. comfyui_frontend_package/static/assets/{GlobalToast-BiCmpIvO.js → GlobalToast-BSCvu6Hw.js} +2 -2
  32. comfyui_frontend_package/static/assets/{GlobalToast-BiCmpIvO.js.map → GlobalToast-BSCvu6Hw.js.map} +1 -1
  33. comfyui_frontend_package/static/assets/{GraphView-BCkpNGgz.js → GraphView-gYVCtm1V.js} +5 -5
  34. comfyui_frontend_package/static/assets/GraphView-gYVCtm1V.js.map +1 -0
  35. comfyui_frontend_package/static/assets/{KeybindingPanel-CAXL5TlV.js → KeybindingPanel-DF-bG4iO.js} +2 -2
  36. comfyui_frontend_package/static/assets/{KeybindingPanel-CAXL5TlV.js.map → KeybindingPanel-DF-bG4iO.js.map} +1 -1
  37. comfyui_frontend_package/static/assets/{LegacyCreditsPanel-6vR8koQy.js → LegacyCreditsPanel-D-CboO8k.js} +2 -2
  38. comfyui_frontend_package/static/assets/{LegacyCreditsPanel-6vR8koQy.js.map → LegacyCreditsPanel-D-CboO8k.js.map} +1 -1
  39. comfyui_frontend_package/static/assets/Load3D-c9UwgGoI.js +1 -0
  40. comfyui_frontend_package/static/assets/{Load3D-ei1BUF9O.js → Load3D-vYr8M3jJ.js} +2 -2
  41. comfyui_frontend_package/static/assets/{Load3D-ei1BUF9O.js.map → Load3D-vYr8M3jJ.js.map} +1 -1
  42. comfyui_frontend_package/static/assets/{PanelTemplate-BjN5XNg2.js → PanelTemplate-BJda9e5J.js} +2 -2
  43. comfyui_frontend_package/static/assets/{PanelTemplate-BjN5XNg2.js.map → PanelTemplate-BJda9e5J.js.map} +1 -1
  44. comfyui_frontend_package/static/assets/{ServerConfigPanel-CxovH9Qk.js → ServerConfigPanel-VsC6xlZJ.js} +2 -2
  45. comfyui_frontend_package/static/assets/{ServerConfigPanel-CxovH9Qk.js.map → ServerConfigPanel-VsC6xlZJ.js.map} +1 -1
  46. comfyui_frontend_package/static/assets/{SubscribeButton-CTOQRkfg.js → SubscribeButton-DZBycfCA.js} +2 -2
  47. comfyui_frontend_package/static/assets/{SubscribeButton-CTOQRkfg.js.map → SubscribeButton-DZBycfCA.js.map} +1 -1
  48. comfyui_frontend_package/static/assets/{SubscribeToRun-DnXzV8y0.js → SubscribeToRun-4YolxBOL.js} +2 -2
  49. comfyui_frontend_package/static/assets/{SubscribeToRun-DnXzV8y0.js.map → SubscribeToRun-4YolxBOL.js.map} +1 -1
  50. comfyui_frontend_package/static/assets/{SubscriptionPanel-D9uv7z8f.js → SubscriptionPanel-B6txX4Vm.js} +2 -2
  51. comfyui_frontend_package/static/assets/{SubscriptionPanel-D9uv7z8f.js.map → SubscriptionPanel-B6txX4Vm.js.map} +1 -1
  52. comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent--VmT16oc.js → SubscriptionRequiredDialogContent-COEF2VQ_.js} +2 -2
  53. comfyui_frontend_package/static/assets/{SubscriptionRequiredDialogContent--VmT16oc.js.map → SubscriptionRequiredDialogContent-COEF2VQ_.js.map} +1 -1
  54. comfyui_frontend_package/static/assets/{UserCheckView-spD3LyMu.js → UserCheckView-x-fkcYzc.js} +2 -2
  55. comfyui_frontend_package/static/assets/{UserCheckView-spD3LyMu.js.map → UserCheckView-x-fkcYzc.js.map} +1 -1
  56. comfyui_frontend_package/static/assets/{UserPanel-Su6NtJ5q.js → UserPanel-7N9QknQj.js} +2 -2
  57. comfyui_frontend_package/static/assets/{UserPanel-Su6NtJ5q.js.map → UserPanel-7N9QknQj.js.map} +1 -1
  58. comfyui_frontend_package/static/assets/{UserSelectView-C5LBOPcv.js → UserSelectView-BYjOkfSa.js} +2 -2
  59. comfyui_frontend_package/static/assets/{UserSelectView-C5LBOPcv.js.map → UserSelectView-BYjOkfSa.js.map} +1 -1
  60. comfyui_frontend_package/static/assets/{ValueControlPopover-BdlDzT8l.js → ValueControlPopover-BPAa35QG.js} +2 -2
  61. comfyui_frontend_package/static/assets/{ValueControlPopover-BdlDzT8l.js.map → ValueControlPopover-BPAa35QG.js.map} +1 -1
  62. comfyui_frontend_package/static/assets/{WidgetAudioUI-BDZxDx_r.js → WidgetAudioUI-Dw-r3Ews.js} +2 -2
  63. comfyui_frontend_package/static/assets/{WidgetAudioUI-BDZxDx_r.js.map → WidgetAudioUI-Dw-r3Ews.js.map} +1 -1
  64. comfyui_frontend_package/static/assets/{WidgetImageCrop-CYRW7t2Q.js → WidgetImageCrop-kERy9g5I.js} +2 -2
  65. comfyui_frontend_package/static/assets/{WidgetImageCrop-CYRW7t2Q.js.map → WidgetImageCrop-kERy9g5I.js.map} +1 -1
  66. comfyui_frontend_package/static/assets/{WidgetInputNumber-BOKO36G3.js → WidgetInputNumber-BaClCNAC.js} +1 -1
  67. comfyui_frontend_package/static/assets/WidgetInputNumber-DU_D0Fzy.js +3 -0
  68. comfyui_frontend_package/static/assets/WidgetInputNumber-DU_D0Fzy.js.map +1 -0
  69. comfyui_frontend_package/static/assets/{WidgetLegacy-Bslv9wZZ.js → WidgetLegacy-B4nipUM9.js} +1 -1
  70. comfyui_frontend_package/static/assets/{WidgetRecordAudio-Bzy8PIzN.js → WidgetRecordAudio-Nk8dH238.js} +2 -2
  71. comfyui_frontend_package/static/assets/{WidgetRecordAudio-Bzy8PIzN.js.map → WidgetRecordAudio-Nk8dH238.js.map} +1 -1
  72. comfyui_frontend_package/static/assets/WidgetSelect-DzZPpO_-.js +1 -0
  73. comfyui_frontend_package/static/assets/{WidgetSelect-zgrFVzHH.js → WidgetSelect-nSQrk_hd.js} +2 -2
  74. comfyui_frontend_package/static/assets/{WidgetSelect-zgrFVzHH.js.map → WidgetSelect-nSQrk_hd.js.map} +1 -1
  75. comfyui_frontend_package/static/assets/{WidgetWithControl-Dh2FWOiA.js → WidgetWithControl-Da6zUB5e.js} +3 -3
  76. comfyui_frontend_package/static/assets/{WidgetWithControl-Dh2FWOiA.js.map → WidgetWithControl-Da6zUB5e.js.map} +1 -1
  77. comfyui_frontend_package/static/assets/{api-CUAc7rDA.js → api-Dwq2LQIW.js} +4 -4
  78. comfyui_frontend_package/static/assets/api-Dwq2LQIW.js.map +1 -0
  79. comfyui_frontend_package/static/assets/{audioService-DvndbCi2.js → audioService-DvVaKhuU.js} +2 -2
  80. comfyui_frontend_package/static/assets/{audioService-DvndbCi2.js.map → audioService-DvVaKhuU.js.map} +1 -1
  81. comfyui_frontend_package/static/assets/{audioUtils-DpjpcKbH.js → audioUtils-DD4rUYVZ.js} +2 -2
  82. comfyui_frontend_package/static/assets/{audioUtils-DpjpcKbH.js.map → audioUtils-DD4rUYVZ.js.map} +1 -1
  83. comfyui_frontend_package/static/assets/{auth-B8ZZ0KKQ.js → auth-B9axG-yZ.js} +2 -2
  84. comfyui_frontend_package/static/assets/{auth-B8ZZ0KKQ.js.map → auth-B9axG-yZ.js.map} +1 -1
  85. comfyui_frontend_package/static/assets/auth-D74DTev8.js +1 -0
  86. comfyui_frontend_package/static/assets/{cloudBadges-C1a7fBky.js → cloudBadges-D5mGJbRy.js} +2 -2
  87. comfyui_frontend_package/static/assets/{cloudBadges-C1a7fBky.js.map → cloudBadges-D5mGJbRy.js.map} +1 -1
  88. comfyui_frontend_package/static/assets/{cloudFeedbackTopbarButton-DR0T8sWG.js → cloudFeedbackTopbarButton-RZUssOmb.js} +2 -2
  89. comfyui_frontend_package/static/assets/{cloudFeedbackTopbarButton-DR0T8sWG.js.map → cloudFeedbackTopbarButton-RZUssOmb.js.map} +1 -1
  90. comfyui_frontend_package/static/assets/{cloudRemoteConfig-DhMjC5TB.js → cloudRemoteConfig-F9J0iGyF.js} +2 -2
  91. comfyui_frontend_package/static/assets/{cloudRemoteConfig-DhMjC5TB.js.map → cloudRemoteConfig-F9J0iGyF.js.map} +1 -1
  92. comfyui_frontend_package/static/assets/{cloudSessionCookie-Duxk6ux1.js → cloudSessionCookie-MEORlqtg.js} +2 -2
  93. comfyui_frontend_package/static/assets/{cloudSessionCookie-Duxk6ux1.js.map → cloudSessionCookie-MEORlqtg.js.map} +1 -1
  94. comfyui_frontend_package/static/assets/{cloudSubscription-B8l6B9Nx.js → cloudSubscription-CuWNXKVx.js} +2 -2
  95. comfyui_frontend_package/static/assets/{cloudSubscription-B8l6B9Nx.js.map → cloudSubscription-CuWNXKVx.js.map} +1 -1
  96. comfyui_frontend_package/static/assets/{core-DBfeqMDR.js → core-IYu8XAIx.js} +4 -4
  97. comfyui_frontend_package/static/assets/{core-DBfeqMDR.js.map → core-IYu8XAIx.js.map} +1 -1
  98. comfyui_frontend_package/static/assets/{dialogService-BZ1FmjZL.js → dialogService-YG0RH337.js} +9 -9
  99. comfyui_frontend_package/static/assets/{dialogService-BZ1FmjZL.js.map → dialogService-YG0RH337.js.map} +1 -1
  100. comfyui_frontend_package/static/assets/firebaseAuthStore-DnNaPbuZ.js +1 -0
  101. comfyui_frontend_package/static/assets/{graphHasMissingNodes-C79Wi51S.js → graphHasMissingNodes-BhD1N6zI.js} +2 -2
  102. comfyui_frontend_package/static/assets/{graphHasMissingNodes-C79Wi51S.js.map → graphHasMissingNodes-BhD1N6zI.js.map} +1 -1
  103. comfyui_frontend_package/static/assets/{index-CGxJFSof.js → index-BMy3twho.js} +3 -3
  104. comfyui_frontend_package/static/assets/{index-CGxJFSof.js.map → index-BMy3twho.js.map} +1 -1
  105. comfyui_frontend_package/static/assets/{index-DNpOhRra.css → index-KMO9qFHH.css} +1 -1
  106. comfyui_frontend_package/static/assets/{keybindingService-B88NjeAU.js → keybindingService-CBLPjYHI.js} +2 -2
  107. comfyui_frontend_package/static/assets/{keybindingService-B88NjeAU.js.map → keybindingService-CBLPjYHI.js.map} +1 -1
  108. comfyui_frontend_package/static/assets/{releaseStore-x0vHjxrw.js → releaseStore-DDOxzkVb.js} +2 -2
  109. comfyui_frontend_package/static/assets/{releaseStore-x0vHjxrw.js.map → releaseStore-DDOxzkVb.js.map} +1 -1
  110. comfyui_frontend_package/static/assets/releaseStore-iVkqunL8.js +1 -0
  111. comfyui_frontend_package/static/assets/{subscriptionCheckoutUtil-B_OvUP2T.js → subscriptionCheckoutUtil-DswSOreM.js} +2 -2
  112. comfyui_frontend_package/static/assets/{subscriptionCheckoutUtil-B_OvUP2T.js.map → subscriptionCheckoutUtil-DswSOreM.js.map} +1 -1
  113. comfyui_frontend_package/static/assets/{useCurrentUser-BJcn2Vgo.js → useCurrentUser-NdaCJzIK.js} +1 -1
  114. comfyui_frontend_package/static/assets/{useErrorHandling-CI8_F4yx.js → useErrorHandling-Cfa5N_7c.js} +2 -2
  115. comfyui_frontend_package/static/assets/{useErrorHandling-CI8_F4yx.js.map → useErrorHandling-Cfa5N_7c.js.map} +1 -1
  116. comfyui_frontend_package/static/assets/{useSubscriptionDialog-Chxkdny5.js → useSubscriptionDialog-792qfEJ2.js} +3 -3
  117. comfyui_frontend_package/static/assets/{useSubscriptionDialog-Chxkdny5.js.map → useSubscriptionDialog-792qfEJ2.js.map} +1 -1
  118. comfyui_frontend_package/static/assets/useSubscriptionDialog-B-eGeK3j.js +1 -0
  119. comfyui_frontend_package/static/assets/{userStore-BkgQPjq6.js → userStore-BAS9m9W6.js} +2 -2
  120. comfyui_frontend_package/static/assets/{userStore-BkgQPjq6.js.map → userStore-BAS9m9W6.js.map} +1 -1
  121. comfyui_frontend_package/static/assets/vendor-three-BFcUNSs9.js.map +1 -1
  122. comfyui_frontend_package/static/index.html +1 -1
  123. {comfyui_frontend_package-1.38.5.dist-info → comfyui_frontend_package-1.38.6.dist-info}/METADATA +1 -1
  124. {comfyui_frontend_package-1.38.5.dist-info → comfyui_frontend_package-1.38.6.dist-info}/RECORD +126 -126
  125. comfyui_frontend_package/static/assets/AudioPreviewPlayer-BoEdyGI_.js +0 -1
  126. comfyui_frontend_package/static/assets/CloudRunButtonWrapper-hQc4BNkX.js +0 -3
  127. comfyui_frontend_package/static/assets/ComfyQueueButton-BbQnRThI.js +0 -1
  128. comfyui_frontend_package/static/assets/GraphView-BCkpNGgz.js.map +0 -1
  129. comfyui_frontend_package/static/assets/Load3D-DHBmC_AU.js +0 -1
  130. comfyui_frontend_package/static/assets/WidgetInputNumber-DGKypM5j.js +0 -3
  131. comfyui_frontend_package/static/assets/WidgetInputNumber-DGKypM5j.js.map +0 -1
  132. comfyui_frontend_package/static/assets/WidgetSelect-DsJGH12l.js +0 -1
  133. comfyui_frontend_package/static/assets/api-CUAc7rDA.js.map +0 -1
  134. comfyui_frontend_package/static/assets/auth-D3RiiqZ8.js +0 -1
  135. comfyui_frontend_package/static/assets/firebaseAuthStore-CZgxeMyf.js +0 -1
  136. comfyui_frontend_package/static/assets/releaseStore-CubqSv5t.js +0 -1
  137. comfyui_frontend_package/static/assets/useSubscriptionDialog-BzMzio2H.js +0 -1
  138. {comfyui_frontend_package-1.38.5.dist-info → comfyui_frontend_package-1.38.6.dist-info}/WHEEL +0 -0
  139. {comfyui_frontend_package-1.38.5.dist-info → comfyui_frontend_package-1.38.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ import"./vendor-primevue-DcMRXJN3.js";import"./vendor-other-DlQF6V2E.js";import"./api-Dwq2LQIW.js";import"./remoteConfig-CZcEXsZS.js";import"./colorUtil-CzxntCbX.js";import"./useErrorHandling-Cfa5N_7c.js";import"./Button-Do2I1OAA.js";import"./PanelTemplate-BJda9e5J.js";import{Br as u,Vr as b}from"./dialogService-YG0RH337.js";import"./vendor-tiptap-_UqYL7N_.js";import"./vendor-xterm-BU_lcTPR.js";import"./vendor-three-BFcUNSs9.js";import"./markdownRendererUtil-DglHsU8t.js";import"./userStore-BAS9m9W6.js";export{u as FirebaseAuthStoreError,b as useFirebaseAuthStore};
@@ -1,3 +1,3 @@
1
- var r=Object.defineProperty;var t=(o,e)=>r(o,"name",{value:e,configurable:!0});import{Jo as i}from"./vendor-other-DlQF6V2E.js";import{H as l}from"./api-CUAc7rDA.js";var c=t((o,e)=>{const s=o?.type;return s?!e[s]:!1},"isNodeMissingDefinition");const a=t((o,e)=>{if(!o)return[];const s=i(e);return l(o,n=>c(n,s))},"collectMissingNodes"),m=t((o,e)=>a(o,e).length>0,"graphHasMissingNodes");export{m as t};
1
+ var r=Object.defineProperty;var t=(o,e)=>r(o,"name",{value:e,configurable:!0});import{Jo as i}from"./vendor-other-DlQF6V2E.js";import{H as l}from"./api-Dwq2LQIW.js";var c=t((o,e)=>{const s=o?.type;return s?!e[s]:!1},"isNodeMissingDefinition");const a=t((o,e)=>{if(!o)return[];const s=i(e);return l(o,n=>c(n,s))},"collectMissingNodes"),m=t((o,e)=>a(o,e).length>0,"graphHasMissingNodes");export{m as t};
2
2
 
3
- //# sourceMappingURL=graphHasMissingNodes-C79Wi51S.js.map
3
+ //# sourceMappingURL=graphHasMissingNodes-BhD1N6zI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphHasMissingNodes-C79Wi51S.js","names":[],"sources":["../../src/workbench/extensions/manager/utils/graphHasMissingNodes.ts"],"sourcesContent":["import { unref } from 'vue'\nimport type { MaybeRef } from 'vue'\n\nimport type {\n LGraph,\n LGraphNode,\n Subgraph\n} from '@/lib/litegraph/src/litegraph'\nimport type { ComfyNodeDefImpl } from '@/stores/nodeDefStore'\nimport { collectAllNodes } from '@/utils/graphTraversalUtil'\n\nexport type NodeDefLookup = Record<string, ComfyNodeDefImpl | undefined>\n\nconst isNodeMissingDefinition = (\n node: LGraphNode,\n nodeDefsByName: NodeDefLookup\n) => {\n const nodeName = node?.type\n if (!nodeName) return false\n return !nodeDefsByName[nodeName]\n}\n\nexport const collectMissingNodes = (\n graph: LGraph | Subgraph | null | undefined,\n nodeDefsByName: MaybeRef<NodeDefLookup>\n): LGraphNode[] => {\n if (!graph) return []\n const lookup = unref(nodeDefsByName)\n return collectAllNodes(graph, (node) => isNodeMissingDefinition(node, lookup))\n}\n\nexport const graphHasMissingNodes = (\n graph: LGraph | Subgraph | null | undefined,\n nodeDefsByName: MaybeRef<NodeDefLookup>\n) => {\n return collectMissingNodes(graph, nodeDefsByName).length > 0\n}\n"],"mappings":"qKAaA,IAAM,EAAA,EAAA,CACJ,EACA,IACG,CACH,MAAM,EAAW,GAAM,KACvB,OAAK,EACE,CAAC,EAAe,CAAA,EADD,IALlB,2BASN,MAAa,EAAA,EAAA,CACX,EACA,IACiB,CACjB,GAAI,CAAC,EAAO,MAAO,CAAA,EACnB,MAAM,EAAS,EAAM,CAAA,EACrB,OAAO,EAAgB,EAAQ,GAAS,EAAwB,EAAM,CAAA,CAAO,GANlE,uBASA,EAAA,EAAA,CACX,EACA,IAEO,EAAoB,EAAO,CAAA,EAAgB,OAAS,EAJhD"}
1
+ {"version":3,"file":"graphHasMissingNodes-BhD1N6zI.js","names":[],"sources":["../../src/workbench/extensions/manager/utils/graphHasMissingNodes.ts"],"sourcesContent":["import { unref } from 'vue'\nimport type { MaybeRef } from 'vue'\n\nimport type {\n LGraph,\n LGraphNode,\n Subgraph\n} from '@/lib/litegraph/src/litegraph'\nimport type { ComfyNodeDefImpl } from '@/stores/nodeDefStore'\nimport { collectAllNodes } from '@/utils/graphTraversalUtil'\n\nexport type NodeDefLookup = Record<string, ComfyNodeDefImpl | undefined>\n\nconst isNodeMissingDefinition = (\n node: LGraphNode,\n nodeDefsByName: NodeDefLookup\n) => {\n const nodeName = node?.type\n if (!nodeName) return false\n return !nodeDefsByName[nodeName]\n}\n\nexport const collectMissingNodes = (\n graph: LGraph | Subgraph | null | undefined,\n nodeDefsByName: MaybeRef<NodeDefLookup>\n): LGraphNode[] => {\n if (!graph) return []\n const lookup = unref(nodeDefsByName)\n return collectAllNodes(graph, (node) => isNodeMissingDefinition(node, lookup))\n}\n\nexport const graphHasMissingNodes = (\n graph: LGraph | Subgraph | null | undefined,\n nodeDefsByName: MaybeRef<NodeDefLookup>\n) => {\n return collectMissingNodes(graph, nodeDefsByName).length > 0\n}\n"],"mappings":"qKAaA,IAAM,EAAA,EAAA,CACJ,EACA,IACG,CACH,MAAM,EAAW,GAAM,KACvB,OAAK,EACE,CAAC,EAAe,CAAA,EADD,IALlB,2BASN,MAAa,EAAA,EAAA,CACX,EACA,IACiB,CACjB,GAAI,CAAC,EAAO,MAAO,CAAA,EACnB,MAAM,EAAS,EAAM,CAAA,EACrB,OAAO,EAAgB,EAAQ,GAAS,EAAwB,EAAM,CAAA,CAAO,GANlE,uBASA,EAAA,EAAA,CACX,EACA,IAEO,EAAoB,EAAO,CAAA,EAAgB,OAAS,EAJhD"}
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CloudLayoutView-vTrrVUOY.js","./_plugin-vue_export-helper-PHE0iSCb.js","./vendor-primevue-DcMRXJN3.js","./vendor-other-DlQF6V2E.js","./rolldown-runtime-BN4meiq5.js","./vendor-other-CaaUC6Qe.css","./dialogService-BZ1FmjZL.js","./vendor-vue-D9IUuwPJ.js","./vendor-three-BFcUNSs9.js","./vendor-tiptap-_UqYL7N_.js","./vendor-xterm-BU_lcTPR.js","./vendor-xterm-kHJ-D0s7.css","./PanelTemplate-BjN5XNg2.js","./api-CUAc7rDA.js","./widget-DNFXpyU8.js","./colorUtil-CzxntCbX.js","./src-DTrob8OL.js","./Button-Do2I1OAA.js","./vendor-reka-ui-CmnTduBl.js","./Slider-De1ykl8L.js","./useErrorHandling-CI8_F4yx.js","./remoteConfig-CZcEXsZS.js","./userStore-BkgQPjq6.js","./markdownRendererUtil-DglHsU8t.js","./dialogService-BMbgJ9MG.css","./GlobalToast-BiCmpIvO.js","./BaseViewTemplate-DA6zfigT.js","./CloudLayoutView-CRIL4g5f.css","./CloudLoginView-T17euJly.js","./previousFullPath-DgVT6Vaj.js","./CloudLoginView-1gcQ_jIf.css","./useCurrentUser-BJcn2Vgo.js","./CloudSignupView-vEDby5k3.js","./CloudSignupView-YgrB8UJ5.css","./CloudForgotPasswordView-BqDR_C7K.js","./CloudForgotPasswordView-BSMBvT-Y.css","./CloudSurveyView-CBtTd9Ru.js","./auth-B8ZZ0KKQ.js","./CloudSurveyView-BS7kjG6B.css","./UserCheckView-spD3LyMu.js","./CloudSorryContactSupportView-DKX16YHp.js","./CloudSorryContactSupportView-cvR6d1qS.css","./CloudAuthTimeoutView-9OPBS1hE.js","./CloudSubscriptionRedirectView-DPyO745g.js","./subscriptionCheckoutUtil-B_OvUP2T.js","./GraphView-BCkpNGgz.js","./LazyImage-D5qRMpUj.js","./UserAvatar-Cfg5vVJL.js","./SubscribeButton-CTOQRkfg.js","./keybindingService-B88NjeAU.js","./SubscribeToRun-DnXzV8y0.js","./useSubscriptionDialog-Chxkdny5.js","./preservedQueryNamespaces-BXriQIIi.js","./releaseStore-x0vHjxrw.js","./WidgetInputNumber-DGKypM5j.js","./WidgetWithControl-Dh2FWOiA.js","./WidgetLayoutField-DXI3EnEF.js","./layout-C9TPTaej.js","./widgetPropFilter-CKhENku4.js","./WidgetInputNumber-rqpFMwbY.css","./serverConfigStore-60S1CDhK.js","./nodeFilterUtil-BYFD-MqA.js","./graphHasMissingNodes-C79Wi51S.js","./GraphView-CA3XIDKA.css","./UserSelectView-C5LBOPcv.js","./auth-D3RiiqZ8.js","./remoteConfig-Bzwz16pB.js"])))=>i.map(i=>d[i]);
2
- var U=Object.defineProperty;var o=(n,a)=>U(n,"name",{value:a,configurable:!0});import{Q as F,V as M,Z as z,dt as u,ft as q,gt as B,ht as N,pt as G,vt as L,yt as H}from"./vendor-primevue-DcMRXJN3.js";import{$o as $,Ci as I,Do as P,Ea as K,Ha as k,Ji as W,Jo as v,Pa as T,Ua as h,Va as f,Wa as Q,Ya as C,_o as S,co as j,do as p,ho as O,ns as Y,po as x,qa as g,ro as y,wi as J,za as Z}from"./vendor-other-DlQF6V2E.js";import{a as X,f as ee,h as te,i as re,l as oe,m as ae,o as se,u as ie}from"./vendor-vue-D9IUuwPJ.js";import{A as D,Bt as E,E as ne,Lt as _,zt as ue}from"./api-CUAc7rDA.js";import{r as ce}from"./remoteConfig-CZcEXsZS.js";import"./colorUtil-CzxntCbX.js";import{n as le}from"./useErrorHandling-CI8_F4yx.js";import"./Button-Do2I1OAA.js";import"./PanelTemplate-BjN5XNg2.js";import{P as pe,Vr as me,Xn as de,_ as _e,t as V,v as fe,vt as he,w as ye}from"./dialogService-BZ1FmjZL.js";import"./vendor-tiptap-_UqYL7N_.js";import"./vendor-xterm-BU_lcTPR.js";import"./vendor-three-BFcUNSs9.js";import"./markdownRendererUtil-DglHsU8t.js";import{t as ge}from"./userStore-BkgQPjq6.js";import{i as ve,n as Ee,t as we}from"./preservedQueryNamespaces-BXriQIIi.js";o((function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const r of t.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function i(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}o(i,"getFetchOpts");function s(e){if(e.ep)return;e.ep=!0;const t=i(e);fetch(e.href,t)}o(s,"processPreload")}),"polyfill")();var R={apiKey:"AIzaSyC2-fomLqgCjb7ELwta1I9cEarPK8ziTGs",authDomain:"dreamboothy.firebaseapp.com",databaseURL:"https://dreamboothy-default-rtdb.firebaseio.com",projectId:"dreamboothy",storageBucket:"dreamboothy.appspot.com",messagingSenderId:"357148958219",appId:"1:357148958219:web:f5917f72e5f36a2015310e",measurementId:"G-3ZBD3MBTG4"};function be(){return _?ce.value.firebase_config??R:R}o(be,"getFirebaseConfig");var Pe={class:"relative h-full w-full overflow-hidden"},Se=C({__name:"LayoutDefault",setup(n){return J("/assets/favicon.ico"),(a,i)=>{const s=O("router-view");return p(),h("main",Pe,[g(s)])}}}),Ce=Se;const Ae=o((n,a)=>{const i=a.map(s=>({...s}));n.beforeEach((s,e,t)=>{const r=new Set(Object.keys(s.query));i.forEach(({namespace:m,keys:c})=>{ve(m),c.some(l=>r.has(l))&&Ee(m,s.query,c)}),t()})},"installPreservedQueryTracker"),Le=[{path:"/cloud",component:o(()=>u(()=>import("./CloudLayoutView-vTrrVUOY.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url),"component"),children:[{path:"login",name:"cloud-login",component:o(()=>u(()=>import("./CloudLoginView-T17euJly.js"),__vite__mapDeps([28,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,29,30]),import.meta.url),"component"),beforeEnter:o(async(n,a,i)=>{if(!n.query.switchAccount){const{useCurrentUser:s}=await u(async()=>{const{useCurrentUser:t}=await import("./useCurrentUser-BJcn2Vgo.js");return{useCurrentUser:t}},__vite__mapDeps([31,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),{isLoggedIn:e}=s();if(e.value)return i({name:"cloud-user-check"})}i()},"beforeEnter")},{path:"signup",name:"cloud-signup",component:o(()=>u(()=>import("./CloudSignupView-vEDby5k3.js"),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,29,33]),import.meta.url),"component")},{path:"forgot-password",name:"cloud-forgot-password",component:o(()=>u(()=>import("./CloudForgotPasswordView-BqDR_C7K.js"),__vite__mapDeps([34,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,35]),import.meta.url),"component")},{path:"survey",name:"cloud-survey",component:o(()=>u(()=>import("./CloudSurveyView-CBtTd9Ru.js"),__vite__mapDeps([36,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,37,38]),import.meta.url),"component"),meta:{requiresAuth:!0}},{path:"user-check",name:"cloud-user-check",component:o(()=>u(()=>import("./UserCheckView-spD3LyMu.js"),__vite__mapDeps([39,2,3,4,5,7,17,18,16,20,13,14,15,21,37]),import.meta.url),"component"),meta:{requiresAuth:!0}},{path:"sorry-contact-support",name:"cloud-sorry-contact-support",component:o(()=>u(()=>import("./CloudSorryContactSupportView-DKX16YHp.js"),__vite__mapDeps([40,1,3,4,5,7,41]),import.meta.url),"component")},{path:"auth-timeout",name:"cloud-auth-timeout",component:o(()=>u(()=>import("./CloudAuthTimeoutView-9OPBS1hE.js"),__vite__mapDeps([42,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),"component"),props:!0},{path:"subscribe",name:"cloud-subscribe",component:o(()=>u(()=>import("./CloudSubscriptionRedirectView-DPyO745g.js"),__vite__mapDeps([43,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,44]),import.meta.url),"component"),meta:{requiresAuth:!0}}]}];var Ie=window.location.protocol==="file:";function De(){return E()?"/":_?"./":window.location.pathname}o(De,"getBasePath");var Re=De(),A=re({history:Ie?X():se(Re),routes:[..._?Le:[],{path:"/",component:Ce,children:[{path:"",name:"GraphView",component:o(()=>u(()=>import("./GraphView-BCkpNGgz.js"),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,46,47,25,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]),import.meta.url),"component"),beforeEnter:o(async(n,a,i)=>{const s=ge();await s.initialize(),s.needsLogin?i("/user-select"):i()},"beforeEnter")},{path:"user-select",name:"UserSelectView",component:o(()=>u(()=>import("./UserSelectView-C5LBOPcv.js"),__vite__mapDeps([64,2,3,4,5,7,17,18,16,13,14,15,22,26]),import.meta.url),"component")}]}],scrollBehavior(n,a,i){return i||{top:0}}});Ae(A,[{namespace:we.TEMPLATE,keys:["template","source","mode"]}]);if(_){let s=function(e){const t=String(e.name);if(a.has(t))return!0;const r=e.path;return i.has(r)};o(s,"isPublicRoute");const{flags:n}=le(),a=new Set(["cloud-login","cloud-signup","cloud-forgot-password","cloud-sorry-contact-support"]),i=new Set(["/cloud/login","/cloud/signup","/cloud/forgot-password","/cloud/sorry-contact-support"]);A.beforeEach(async(e,t,r)=>{const m=me();if(!m.isInitialized)try{const{isInitialized:d}=ae(m);await W(d).toBe(!0,{timeout:16e3})}catch(d){return console.error("Auth initialization failed:",d),r({name:"cloud-auth-timeout"})}const c=!!await m.getAuthHeader();if(s(e))return r();if(e.name==="cloud-user-check")return e.meta.requiresAuth&&!c?r({name:"cloud-login"}):r();if(t.name==="cloud-user-check"&&e.path==="/")return r();const l=e.fullPath==="/"?void 0:{previousFullPath:encodeURIComponent(e.fullPath)};if(e.meta.requiresAuth&&!c)return r({name:"cloud-login",query:l});if(!c)return E()?await V().showSignInDialog()?r():r(!1):r({name:"cloud-login",query:l});if(!E()&&c&&e.path==="/"){if(!n.onboardingSurveyEnabled)return r();const{getSurveyCompletedStatus:d}=await u(async()=>{const{getSurveyCompletedStatus:b}=await import("./auth-D3RiiqZ8.js");return{getSurveyCompletedStatus:b}},__vite__mapDeps([65,2,3,4,5,13,7,14,15,37]),import.meta.url);try{if(!await d())return r({name:"cloud-survey"})}catch(b){return console.error("Failed to check user status:",b),r({name:"cloud-user-check"})}}return r()})}var ke=A,Te={key:0},Oe=["id"],Ve=C({__name:"GlobalDialog",setup(n){const a=de();return(i,s)=>(p(!0),h(T,null,x(v(a).dialogStack,e=>(p(),f(v(F),y({key:e.key,visible:e.visible,"onUpdate:visible":o(t=>e.visible=t,"onUpdate:visible"),class:"global-dialog",ref_for:!0},e.dialogComponentProps,{pt:e.dialogComponentProps.pt,"aria-labelledby":e.key}),Q({header:P(()=>[e.dialogComponentProps?.headless?k("",!0):(p(),h("div",Te,[e.headerComponent?(p(),f(S(e.headerComponent),y({key:0,ref_for:!0},e.headerProps,{id:e.key}),null,16,["id"])):(p(),h("h3",{key:1,id:e.key},$(e.title||" "),9,Oe))]))]),default:P(()=>[(p(),f(S(e.component),y({ref_for:!0},e.contentProps,{maximized:e.dialogComponentProps.maximized}),null,16,["maximized"]))]),_:2},[e.footerComponent?{name:"footer",fn:P(()=>[(p(),f(S(e.footerComponent),y({ref_for:!0},e.footerProps),null,16))]),key:"0"}:void 0]),1040,["visible","onUpdate:visible","pt","aria-labelledby"]))),128))}}),Ue=Ve,Fe=C({__name:"App",setup(n){const a=he(),i=_e(),s=ye(),e=V(),t=Z(()=>a.spinner),r=o(c=>{a.shiftDown=c.shiftKey},"handleKey");I(window,"keydown",r),I(window,"keyup",r);const m=o(c=>{const{target:l}=c;switch(!0){case l instanceof HTMLTextAreaElement:case(l instanceof HTMLInputElement&&l.type==="text"):ue()?.showContextMenu({type:"text"});return}},"showContextMenu");return j(()=>{window.__COMFYUI_FRONTEND_VERSION__=fe.app_version,E()&&document.addEventListener("contextmenu",m),window.addEventListener("vite:preloadError",async c=>{!pe.vueAppReady||!s.activeWorkflow?.isModified?window.location.reload():await e.confirm({title:D("g.vitePreloadErrorTitle"),message:D("g.vitePreloadErrorMessage")}).then(l=>{l&&window.location.reload()})}),i.initializeConflictDetection()}),(c,l)=>{const d=O("router-view");return p(),h(T,null,[g(d),t.value?(p(),f(v(z),{key:0,class:"absolute inset-0 flex h-[unset] items-center justify-center"})):k("",!0),g(Ue),g(v(M),{"full-screen":"",blocked:t.value},null,8,["blocked"])],64)}}}),Me=Fe;if(_){const{loadRemoteConfig:n}=await u(async()=>{const{loadRemoteConfig:a}=await import("./remoteConfig-Bzwz16pB.js");return{loadRemoteConfig:a}},__vite__mapDeps([66,3,4,5,21]),import.meta.url);await n()}var ze=H(L,{semantic:{primary:L.primitive.blue}}),qe=Y(be()),w=K(Me),Be=ee();te({app:w,dsn:"https://e2d0c0bd392ffdce48e856c2a055f437@o4507954455314432.ingest.us.sentry.io/4508621568475136",enabled:!0,release:"1.38.5",normalizeDepth:8,tracesSampleRate:_?1:0,replaysSessionSampleRate:0,replaysOnErrorSampleRate:0,..._?{}:{integrations:[],autoSessionTracking:!1,defaultIntegrations:!1}});w.directive("tooltip",q);w.use(ke).use(B,{theme:{preset:ze,options:{prefix:"p",cssLayer:{name:"primevue",order:"theme, base, primevue"},darkModeSelector:".dark-theme, :root:has(.dark-theme)"}}}).use(N).use(G).use(Be).use(ne).use(oe,{firebaseApp:qe,modules:[ie()]});w.mount("#vue-app");
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CloudLayoutView-ShKH6rRV.js","./_plugin-vue_export-helper-PHE0iSCb.js","./vendor-primevue-DcMRXJN3.js","./vendor-other-DlQF6V2E.js","./rolldown-runtime-BN4meiq5.js","./vendor-other-CaaUC6Qe.css","./dialogService-YG0RH337.js","./vendor-vue-D9IUuwPJ.js","./vendor-three-BFcUNSs9.js","./vendor-tiptap-_UqYL7N_.js","./vendor-xterm-BU_lcTPR.js","./vendor-xterm-kHJ-D0s7.css","./PanelTemplate-BJda9e5J.js","./api-Dwq2LQIW.js","./widget-DNFXpyU8.js","./colorUtil-CzxntCbX.js","./src-DTrob8OL.js","./Button-Do2I1OAA.js","./vendor-reka-ui-CmnTduBl.js","./Slider-De1ykl8L.js","./useErrorHandling-Cfa5N_7c.js","./remoteConfig-CZcEXsZS.js","./userStore-BAS9m9W6.js","./markdownRendererUtil-DglHsU8t.js","./dialogService-BMbgJ9MG.css","./GlobalToast-BSCvu6Hw.js","./BaseViewTemplate-CjODF2hh.js","./CloudLayoutView-CRIL4g5f.css","./CloudLoginView-C3Te42U9.js","./previousFullPath-DgVT6Vaj.js","./CloudLoginView-1gcQ_jIf.css","./useCurrentUser-NdaCJzIK.js","./CloudSignupView-X2oiL3ZR.js","./CloudSignupView-YgrB8UJ5.css","./CloudForgotPasswordView-DOEV9hGr.js","./CloudForgotPasswordView-BSMBvT-Y.css","./CloudSurveyView-IaiucCTP.js","./auth-B9axG-yZ.js","./CloudSurveyView-BS7kjG6B.css","./UserCheckView-x-fkcYzc.js","./CloudSorryContactSupportView-DKX16YHp.js","./CloudSorryContactSupportView-cvR6d1qS.css","./CloudAuthTimeoutView-D-QkjPNh.js","./CloudSubscriptionRedirectView-UjNv8emo.js","./subscriptionCheckoutUtil-DswSOreM.js","./GraphView-gYVCtm1V.js","./LazyImage-D5qRMpUj.js","./UserAvatar-Cfg5vVJL.js","./SubscribeButton-DZBycfCA.js","./keybindingService-CBLPjYHI.js","./SubscribeToRun-4YolxBOL.js","./useSubscriptionDialog-792qfEJ2.js","./preservedQueryNamespaces-BXriQIIi.js","./releaseStore-DDOxzkVb.js","./WidgetInputNumber-DU_D0Fzy.js","./WidgetWithControl-Da6zUB5e.js","./WidgetLayoutField-DXI3EnEF.js","./layout-C9TPTaej.js","./widgetPropFilter-CKhENku4.js","./WidgetInputNumber-rqpFMwbY.css","./serverConfigStore-60S1CDhK.js","./nodeFilterUtil-BYFD-MqA.js","./graphHasMissingNodes-BhD1N6zI.js","./GraphView-CA3XIDKA.css","./UserSelectView-BYjOkfSa.js","./auth-D74DTev8.js","./remoteConfig-Bzwz16pB.js"])))=>i.map(i=>d[i]);
2
+ var U=Object.defineProperty;var o=(n,a)=>U(n,"name",{value:a,configurable:!0});import{Q as F,V as M,Z as z,dt as u,ft as q,gt as B,ht as N,pt as G,vt as L,yt as H}from"./vendor-primevue-DcMRXJN3.js";import{$o as $,Ci as I,Do as P,Ea as K,Ha as k,Ji as W,Jo as v,Pa as T,Ua as h,Va as f,Wa as Q,Ya as C,_o as S,co as j,do as p,ho as O,ns as Y,po as x,qa as g,ro as y,wi as J,za as Z}from"./vendor-other-DlQF6V2E.js";import{a as X,f as ee,h as te,i as re,l as oe,m as ae,o as se,u as ie}from"./vendor-vue-D9IUuwPJ.js";import{A as D,Bt as E,E as ne,Lt as _,zt as ue}from"./api-Dwq2LQIW.js";import{r as ce}from"./remoteConfig-CZcEXsZS.js";import"./colorUtil-CzxntCbX.js";import{n as le}from"./useErrorHandling-Cfa5N_7c.js";import"./Button-Do2I1OAA.js";import"./PanelTemplate-BJda9e5J.js";import{P as pe,Vr as me,Xn as de,_ as _e,t as V,v as fe,vt as he,w as ye}from"./dialogService-YG0RH337.js";import"./vendor-tiptap-_UqYL7N_.js";import"./vendor-xterm-BU_lcTPR.js";import"./vendor-three-BFcUNSs9.js";import"./markdownRendererUtil-DglHsU8t.js";import{t as ge}from"./userStore-BAS9m9W6.js";import{i as ve,n as Ee,t as we}from"./preservedQueryNamespaces-BXriQIIi.js";o((function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const r of t.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function i(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}o(i,"getFetchOpts");function s(e){if(e.ep)return;e.ep=!0;const t=i(e);fetch(e.href,t)}o(s,"processPreload")}),"polyfill")();var R={apiKey:"AIzaSyC2-fomLqgCjb7ELwta1I9cEarPK8ziTGs",authDomain:"dreamboothy.firebaseapp.com",databaseURL:"https://dreamboothy-default-rtdb.firebaseio.com",projectId:"dreamboothy",storageBucket:"dreamboothy.appspot.com",messagingSenderId:"357148958219",appId:"1:357148958219:web:f5917f72e5f36a2015310e",measurementId:"G-3ZBD3MBTG4"};function be(){return _?ce.value.firebase_config??R:R}o(be,"getFirebaseConfig");var Pe={class:"relative h-full w-full overflow-hidden"},Se=C({__name:"LayoutDefault",setup(n){return J("/assets/favicon.ico"),(a,i)=>{const s=O("router-view");return p(),h("main",Pe,[g(s)])}}}),Ce=Se;const Ae=o((n,a)=>{const i=a.map(s=>({...s}));n.beforeEach((s,e,t)=>{const r=new Set(Object.keys(s.query));i.forEach(({namespace:m,keys:c})=>{ve(m),c.some(l=>r.has(l))&&Ee(m,s.query,c)}),t()})},"installPreservedQueryTracker"),Le=[{path:"/cloud",component:o(()=>u(()=>import("./CloudLayoutView-ShKH6rRV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url),"component"),children:[{path:"login",name:"cloud-login",component:o(()=>u(()=>import("./CloudLoginView-C3Te42U9.js"),__vite__mapDeps([28,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,29,30]),import.meta.url),"component"),beforeEnter:o(async(n,a,i)=>{if(!n.query.switchAccount){const{useCurrentUser:s}=await u(async()=>{const{useCurrentUser:t}=await import("./useCurrentUser-NdaCJzIK.js");return{useCurrentUser:t}},__vite__mapDeps([31,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),{isLoggedIn:e}=s();if(e.value)return i({name:"cloud-user-check"})}i()},"beforeEnter")},{path:"signup",name:"cloud-signup",component:o(()=>u(()=>import("./CloudSignupView-X2oiL3ZR.js"),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,29,33]),import.meta.url),"component")},{path:"forgot-password",name:"cloud-forgot-password",component:o(()=>u(()=>import("./CloudForgotPasswordView-DOEV9hGr.js"),__vite__mapDeps([34,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,35]),import.meta.url),"component")},{path:"survey",name:"cloud-survey",component:o(()=>u(()=>import("./CloudSurveyView-IaiucCTP.js"),__vite__mapDeps([36,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,37,38]),import.meta.url),"component"),meta:{requiresAuth:!0}},{path:"user-check",name:"cloud-user-check",component:o(()=>u(()=>import("./UserCheckView-x-fkcYzc.js"),__vite__mapDeps([39,2,3,4,5,7,17,18,16,20,13,14,15,21,37]),import.meta.url),"component"),meta:{requiresAuth:!0}},{path:"sorry-contact-support",name:"cloud-sorry-contact-support",component:o(()=>u(()=>import("./CloudSorryContactSupportView-DKX16YHp.js"),__vite__mapDeps([40,1,3,4,5,7,41]),import.meta.url),"component")},{path:"auth-timeout",name:"cloud-auth-timeout",component:o(()=>u(()=>import("./CloudAuthTimeoutView-D-QkjPNh.js"),__vite__mapDeps([42,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]),import.meta.url),"component"),props:!0},{path:"subscribe",name:"cloud-subscribe",component:o(()=>u(()=>import("./CloudSubscriptionRedirectView-UjNv8emo.js"),__vite__mapDeps([43,2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,44]),import.meta.url),"component"),meta:{requiresAuth:!0}}]}];var Ie=window.location.protocol==="file:";function De(){return E()?"/":_?"./":window.location.pathname}o(De,"getBasePath");var Re=De(),A=re({history:Ie?X():se(Re),routes:[..._?Le:[],{path:"/",component:Ce,children:[{path:"",name:"GraphView",component:o(()=>u(()=>import("./GraphView-gYVCtm1V.js"),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,46,47,25,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]),import.meta.url),"component"),beforeEnter:o(async(n,a,i)=>{const s=ge();await s.initialize(),s.needsLogin?i("/user-select"):i()},"beforeEnter")},{path:"user-select",name:"UserSelectView",component:o(()=>u(()=>import("./UserSelectView-BYjOkfSa.js"),__vite__mapDeps([64,2,3,4,5,7,17,18,16,13,14,15,22,26]),import.meta.url),"component")}]}],scrollBehavior(n,a,i){return i||{top:0}}});Ae(A,[{namespace:we.TEMPLATE,keys:["template","source","mode"]}]);if(_){let s=function(e){const t=String(e.name);if(a.has(t))return!0;const r=e.path;return i.has(r)};o(s,"isPublicRoute");const{flags:n}=le(),a=new Set(["cloud-login","cloud-signup","cloud-forgot-password","cloud-sorry-contact-support"]),i=new Set(["/cloud/login","/cloud/signup","/cloud/forgot-password","/cloud/sorry-contact-support"]);A.beforeEach(async(e,t,r)=>{const m=me();if(!m.isInitialized)try{const{isInitialized:d}=ae(m);await W(d).toBe(!0,{timeout:16e3})}catch(d){return console.error("Auth initialization failed:",d),r({name:"cloud-auth-timeout"})}const c=!!await m.getAuthHeader();if(s(e))return r();if(e.name==="cloud-user-check")return e.meta.requiresAuth&&!c?r({name:"cloud-login"}):r();if(t.name==="cloud-user-check"&&e.path==="/")return r();const l=e.fullPath==="/"?void 0:{previousFullPath:encodeURIComponent(e.fullPath)};if(e.meta.requiresAuth&&!c)return r({name:"cloud-login",query:l});if(!c)return E()?await V().showSignInDialog()?r():r(!1):r({name:"cloud-login",query:l});if(!E()&&c&&e.path==="/"){if(!n.onboardingSurveyEnabled)return r();const{getSurveyCompletedStatus:d}=await u(async()=>{const{getSurveyCompletedStatus:b}=await import("./auth-D74DTev8.js");return{getSurveyCompletedStatus:b}},__vite__mapDeps([65,2,3,4,5,13,7,14,15,37]),import.meta.url);try{if(!await d())return r({name:"cloud-survey"})}catch(b){return console.error("Failed to check user status:",b),r({name:"cloud-user-check"})}}return r()})}var ke=A,Te={key:0},Oe=["id"],Ve=C({__name:"GlobalDialog",setup(n){const a=de();return(i,s)=>(p(!0),h(T,null,x(v(a).dialogStack,e=>(p(),f(v(F),y({key:e.key,visible:e.visible,"onUpdate:visible":o(t=>e.visible=t,"onUpdate:visible"),class:"global-dialog",ref_for:!0},e.dialogComponentProps,{pt:e.dialogComponentProps.pt,"aria-labelledby":e.key}),Q({header:P(()=>[e.dialogComponentProps?.headless?k("",!0):(p(),h("div",Te,[e.headerComponent?(p(),f(S(e.headerComponent),y({key:0,ref_for:!0},e.headerProps,{id:e.key}),null,16,["id"])):(p(),h("h3",{key:1,id:e.key},$(e.title||" "),9,Oe))]))]),default:P(()=>[(p(),f(S(e.component),y({ref_for:!0},e.contentProps,{maximized:e.dialogComponentProps.maximized}),null,16,["maximized"]))]),_:2},[e.footerComponent?{name:"footer",fn:P(()=>[(p(),f(S(e.footerComponent),y({ref_for:!0},e.footerProps),null,16))]),key:"0"}:void 0]),1040,["visible","onUpdate:visible","pt","aria-labelledby"]))),128))}}),Ue=Ve,Fe=C({__name:"App",setup(n){const a=he(),i=_e(),s=ye(),e=V(),t=Z(()=>a.spinner),r=o(c=>{a.shiftDown=c.shiftKey},"handleKey");I(window,"keydown",r),I(window,"keyup",r);const m=o(c=>{const{target:l}=c;switch(!0){case l instanceof HTMLTextAreaElement:case(l instanceof HTMLInputElement&&l.type==="text"):ue()?.showContextMenu({type:"text"});return}},"showContextMenu");return j(()=>{window.__COMFYUI_FRONTEND_VERSION__=fe.app_version,E()&&document.addEventListener("contextmenu",m),window.addEventListener("vite:preloadError",async c=>{!pe.vueAppReady||!s.activeWorkflow?.isModified?window.location.reload():await e.confirm({title:D("g.vitePreloadErrorTitle"),message:D("g.vitePreloadErrorMessage")}).then(l=>{l&&window.location.reload()})}),i.initializeConflictDetection()}),(c,l)=>{const d=O("router-view");return p(),h(T,null,[g(d),t.value?(p(),f(v(z),{key:0,class:"absolute inset-0 flex h-[unset] items-center justify-center"})):k("",!0),g(Ue),g(v(M),{"full-screen":"",blocked:t.value},null,8,["blocked"])],64)}}}),Me=Fe;if(_){const{loadRemoteConfig:n}=await u(async()=>{const{loadRemoteConfig:a}=await import("./remoteConfig-Bzwz16pB.js");return{loadRemoteConfig:a}},__vite__mapDeps([66,3,4,5,21]),import.meta.url);await n()}var ze=H(L,{semantic:{primary:L.primitive.blue}}),qe=Y(be()),w=K(Me),Be=ee();te({app:w,dsn:"https://e2d0c0bd392ffdce48e856c2a055f437@o4507954455314432.ingest.us.sentry.io/4508621568475136",enabled:!0,release:"1.38.6",normalizeDepth:8,tracesSampleRate:_?1:0,replaysSessionSampleRate:0,replaysOnErrorSampleRate:0,..._?{}:{integrations:[],autoSessionTracking:!1,defaultIntegrations:!1}});w.directive("tooltip",q);w.use(ke).use(B,{theme:{preset:ze,options:{prefix:"p",cssLayer:{name:"primevue",order:"theme, base, primevue"},darkModeSelector:".dark-theme, :root:has(.dark-theme)"}}}).use(N).use(G).use(Be).use(ne).use(oe,{firebaseApp:qe,modules:[ie()]});w.mount("#vue-app");
3
3
 
4
- //# sourceMappingURL=index-CGxJFSof.js.map
4
+ //# sourceMappingURL=index-BMy3twho.js.map
@@ -1 +1 @@
1
- {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/config/firebase.ts","../../src/views/layouts/LayoutDefault.vue","../../src/platform/navigation/preservedQueryTracker.ts","../../src/platform/cloud/onboarding/onboardingCloudRoutes.ts","../../src/router.ts","../../src/components/dialog/GlobalDialog.vue","../../src/App.vue","../../src/main.ts"],"sourcesContent":["import type { FirebaseOptions } from 'firebase/app'\n\nimport { isCloud } from '@/platform/distribution/types'\nimport { remoteConfig } from '@/platform/remoteConfig/remoteConfig'\n\nconst DEV_CONFIG: FirebaseOptions = {\n apiKey: 'AIzaSyDa_YMeyzV0SkVe92vBZ1tVikWBmOU5KVE',\n authDomain: 'dreamboothy-dev.firebaseapp.com',\n databaseURL: 'https://dreamboothy-dev-default-rtdb.firebaseio.com',\n projectId: 'dreamboothy-dev',\n storageBucket: 'dreamboothy-dev.appspot.com',\n messagingSenderId: '313257147182',\n appId: '1:313257147182:web:be38f6ebf74345fc7618bf',\n measurementId: 'G-YEVSMYXSPY'\n}\n\nconst PROD_CONFIG: FirebaseOptions = {\n apiKey: 'AIzaSyC2-fomLqgCjb7ELwta1I9cEarPK8ziTGs',\n authDomain: 'dreamboothy.firebaseapp.com',\n databaseURL: 'https://dreamboothy-default-rtdb.firebaseio.com',\n projectId: 'dreamboothy',\n storageBucket: 'dreamboothy.appspot.com',\n messagingSenderId: '357148958219',\n appId: '1:357148958219:web:f5917f72e5f36a2015310e',\n measurementId: 'G-3ZBD3MBTG4'\n}\n\nconst BUILD_TIME_CONFIG = __USE_PROD_CONFIG__ ? PROD_CONFIG : DEV_CONFIG\n\n/**\n * Returns the Firebase configuration for the current environment.\n * - Cloud builds use runtime configuration delivered via feature flags\n * - OSS / localhost builds fall back to the build-time config determined by __USE_PROD_CONFIG__\n */\nexport function getFirebaseConfig(): FirebaseOptions {\n if (!isCloud) {\n return BUILD_TIME_CONFIG\n }\n\n const runtimeConfig = remoteConfig.value.firebase_config\n return runtimeConfig ?? BUILD_TIME_CONFIG\n}\n","<template>\n <main class=\"relative h-full w-full overflow-hidden\">\n <router-view />\n </main>\n</template>\n\n<script setup lang=\"ts\">\nimport { useFavicon } from '@vueuse/core'\n\nuseFavicon('/assets/favicon.ico')\n</script>\n","import type { Router } from 'vue-router'\n\nimport {\n capturePreservedQuery,\n hydratePreservedQuery\n} from '@/platform/navigation/preservedQueryManager'\n\nexport const installPreservedQueryTracker = (\n router: Router,\n definitions: Array<{ namespace: string; keys: string[] }>\n) => {\n const trackedDefinitions = definitions.map((definition) => ({\n ...definition\n }))\n\n router.beforeEach((to, _from, next) => {\n const queryKeys = new Set(Object.keys(to.query))\n\n trackedDefinitions.forEach(({ namespace, keys }) => {\n hydratePreservedQuery(namespace)\n const shouldCapture = keys.some((key) => queryKeys.has(key))\n if (shouldCapture) {\n capturePreservedQuery(namespace, to.query, keys)\n }\n })\n\n next()\n })\n}\n","import type { RouteRecordRaw } from 'vue-router'\n\nexport const cloudOnboardingRoutes: RouteRecordRaw[] = [\n {\n path: '/cloud',\n component: () =>\n import('@/platform/cloud/onboarding/components/CloudLayoutView.vue'),\n children: [\n {\n path: 'login',\n name: 'cloud-login',\n component: () =>\n import('@/platform/cloud/onboarding/CloudLoginView.vue'),\n beforeEnter: async (to, _from, next) => {\n // Only redirect if not explicitly switching accounts\n if (!to.query.switchAccount) {\n const { useCurrentUser } =\n await import('@/composables/auth/useCurrentUser')\n const { isLoggedIn } = useCurrentUser()\n\n if (isLoggedIn.value) {\n // User is already logged in, redirect to user-check\n // user-check will handle survey, or main page routing\n return next({ name: 'cloud-user-check' })\n }\n }\n next()\n }\n },\n {\n path: 'signup',\n name: 'cloud-signup',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSignupView.vue')\n },\n {\n path: 'forgot-password',\n name: 'cloud-forgot-password',\n component: () =>\n import('@/platform/cloud/onboarding/CloudForgotPasswordView.vue')\n },\n {\n path: 'survey',\n name: 'cloud-survey',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSurveyView.vue'),\n meta: { requiresAuth: true }\n },\n {\n path: 'user-check',\n name: 'cloud-user-check',\n component: () =>\n import('@/platform/cloud/onboarding/UserCheckView.vue'),\n meta: { requiresAuth: true }\n },\n {\n path: 'sorry-contact-support',\n name: 'cloud-sorry-contact-support',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSorryContactSupportView.vue')\n },\n {\n path: 'auth-timeout',\n name: 'cloud-auth-timeout',\n component: () =>\n import('@/platform/cloud/onboarding/CloudAuthTimeoutView.vue'),\n props: true\n },\n {\n path: 'subscribe',\n name: 'cloud-subscribe',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSubscriptionRedirectView.vue'),\n meta: { requiresAuth: true }\n }\n ]\n }\n]\n","import { until } from '@vueuse/core'\nimport { storeToRefs } from 'pinia'\nimport {\n createRouter,\n createWebHashHistory,\n createWebHistory\n} from 'vue-router'\nimport type { RouteLocationNormalized } from 'vue-router'\n\nimport { useFeatureFlags } from '@/composables/useFeatureFlags'\nimport { isCloud } from '@/platform/distribution/types'\nimport { useDialogService } from '@/services/dialogService'\nimport { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'\nimport { useUserStore } from '@/stores/userStore'\nimport { isElectron } from '@/utils/envUtil'\nimport LayoutDefault from '@/views/layouts/LayoutDefault.vue'\n\nimport { installPreservedQueryTracker } from '@/platform/navigation/preservedQueryTracker'\nimport { PRESERVED_QUERY_NAMESPACES } from '@/platform/navigation/preservedQueryNamespaces'\nimport { cloudOnboardingRoutes } from './platform/cloud/onboarding/onboardingCloudRoutes'\n\nconst isFileProtocol = window.location.protocol === 'file:'\n\n/**\n * Determine base path for the router.\n * - Electron: always root\n * - Cloud: use Vite's BASE_URL (configured at build time)\n * - Standard web (including reverse proxy subpaths): use window.location.pathname\n * to support deployments like http://mysite.com/ComfyUI/\n */\nfunction getBasePath(): string {\n if (isElectron()) return '/'\n if (isCloud) return import.meta.env?.BASE_URL || '/'\n return window.location.pathname\n}\n\nconst basePath = getBasePath()\n\nconst router = createRouter({\n history: isFileProtocol\n ? createWebHashHistory()\n : // Base path must be specified to ensure correct relative paths\n // Example: For URL 'http://localhost:7801/ComfyBackendDirect',\n // we need this base path or assets will incorrectly resolve from 'http://localhost:7801/'\n createWebHistory(basePath),\n routes: [\n ...(isCloud ? cloudOnboardingRoutes : []),\n {\n path: '/',\n component: LayoutDefault,\n children: [\n {\n path: '',\n name: 'GraphView',\n component: () => import('@/views/GraphView.vue'),\n beforeEnter: async (_to, _from, next) => {\n // Then check user store\n const userStore = useUserStore()\n await userStore.initialize()\n if (userStore.needsLogin) {\n next('/user-select')\n } else {\n next()\n }\n }\n },\n {\n path: 'user-select',\n name: 'UserSelectView',\n component: () => import('@/views/UserSelectView.vue')\n }\n ]\n }\n ],\n\n scrollBehavior(_to, _from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { top: 0 }\n }\n }\n})\n\ninstallPreservedQueryTracker(router, [\n {\n namespace: PRESERVED_QUERY_NAMESPACES.TEMPLATE,\n keys: ['template', 'source', 'mode']\n }\n])\n\nif (isCloud) {\n const { flags } = useFeatureFlags()\n const PUBLIC_ROUTE_NAMES = new Set([\n 'cloud-login',\n 'cloud-signup',\n 'cloud-forgot-password',\n 'cloud-sorry-contact-support'\n ])\n const PUBLIC_ROUTE_PATHS = new Set([\n '/cloud/login',\n '/cloud/signup',\n '/cloud/forgot-password',\n '/cloud/sorry-contact-support'\n ])\n\n function isPublicRoute(to: RouteLocationNormalized) {\n const name = String(to.name)\n if (PUBLIC_ROUTE_NAMES.has(name)) return true\n const path = to.path\n return PUBLIC_ROUTE_PATHS.has(path)\n }\n // Global authentication guard\n router.beforeEach(async (to, _from, next) => {\n const authStore = useFirebaseAuthStore()\n\n // Wait for Firebase auth to initialize\n // Timeout after 16 seconds\n if (!authStore.isInitialized) {\n try {\n const { isInitialized } = storeToRefs(authStore)\n await until(isInitialized).toBe(true, { timeout: 16_000 })\n } catch (error) {\n console.error('Auth initialization failed:', error)\n return next({ name: 'cloud-auth-timeout' })\n }\n }\n\n // Pass authenticated users\n const authHeader = await authStore.getAuthHeader()\n const isLoggedIn = !!authHeader\n\n // Allow public routes\n if (isPublicRoute(to)) {\n return next()\n }\n\n // Special handling for user-check\n // These routes need auth but handle their own routing logic\n if (to.name === 'cloud-user-check') {\n if (to.meta.requiresAuth && !isLoggedIn) {\n return next({ name: 'cloud-login' })\n }\n return next()\n }\n\n // Prevent redirect loop when coming from user-check\n if (_from.name === 'cloud-user-check' && to.path === '/') {\n return next()\n }\n\n const query =\n to.fullPath === '/'\n ? undefined\n : { previousFullPath: encodeURIComponent(to.fullPath) }\n\n // Check if route requires authentication\n if (to.meta.requiresAuth && !isLoggedIn) {\n return next({\n name: 'cloud-login',\n query\n })\n }\n\n // Handle other protected routes\n if (!isLoggedIn) {\n // For Electron, use dialog\n if (isElectron()) {\n const dialogService = useDialogService()\n const loginSuccess = await dialogService.showSignInDialog()\n return loginSuccess ? next() : next(false)\n }\n\n // For web, redirect to login\n return next({\n name: 'cloud-login',\n query\n })\n }\n\n // User is logged in - check if they need onboarding (when enabled)\n // For root path, check actual user status to handle waitlisted users\n if (!isElectron() && isLoggedIn && to.path === '/') {\n if (!flags.onboardingSurveyEnabled) {\n return next()\n }\n // Import auth functions dynamically to avoid circular dependency\n const { getSurveyCompletedStatus } =\n await import('@/platform/cloud/onboarding/auth')\n try {\n // Check user's actual status\n const surveyCompleted = await getSurveyCompletedStatus()\n\n // Survey is required for all users (when feature flag enabled)\n if (!surveyCompleted) {\n return next({ name: 'cloud-survey' })\n }\n } catch (error) {\n console.error('Failed to check user status:', error)\n // On error, redirect to user-check as fallback\n return next({ name: 'cloud-user-check' })\n }\n }\n\n // User is logged in and accessing protected route\n return next()\n })\n}\n\nexport default router\n","<!-- The main global dialog to show various things -->\n<template>\n <Dialog\n v-for=\"item in dialogStore.dialogStack\"\n :key=\"item.key\"\n v-model:visible=\"item.visible\"\n class=\"global-dialog\"\n v-bind=\"item.dialogComponentProps\"\n :pt=\"item.dialogComponentProps.pt\"\n :aria-labelledby=\"item.key\"\n >\n <template #header>\n <div v-if=\"!item.dialogComponentProps?.headless\">\n <component\n :is=\"item.headerComponent\"\n v-if=\"item.headerComponent\"\n v-bind=\"item.headerProps\"\n :id=\"item.key\"\n />\n <h3 v-else :id=\"item.key\">\n {{ item.title || ' ' }}\n </h3>\n </div>\n </template>\n\n <component\n :is=\"item.component\"\n v-bind=\"item.contentProps\"\n :maximized=\"item.dialogComponentProps.maximized\"\n />\n\n <template v-if=\"item.footerComponent\" #footer>\n <component :is=\"item.footerComponent\" v-bind=\"item.footerProps\" />\n </template>\n </Dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport Dialog from 'primevue/dialog'\n\nimport { useDialogStore } from '@/stores/dialogStore'\n\nconst dialogStore = useDialogStore()\n</script>\n\n<style>\n@reference '../../assets/css/style.css';\n\n.global-dialog .p-dialog-header {\n @apply p-2 2xl:p-[var(--p-dialog-header-padding)];\n @apply pb-0;\n}\n\n.global-dialog .p-dialog-content {\n @apply p-2 2xl:p-[var(--p-dialog-content-padding)];\n @apply pt-0;\n}\n</style>\n","<template>\n <router-view />\n <ProgressSpinner\n v-if=\"isLoading\"\n class=\"absolute inset-0 flex h-[unset] items-center justify-center\"\n />\n <GlobalDialog />\n <BlockUI full-screen :blocked=\"isLoading\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useEventListener } from '@vueuse/core'\nimport BlockUI from 'primevue/blockui'\nimport ProgressSpinner from 'primevue/progressspinner'\nimport { computed, onMounted } from 'vue'\n\nimport GlobalDialog from '@/components/dialog/GlobalDialog.vue'\nimport config from '@/config'\nimport { t } from '@/i18n'\nimport { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'\nimport { app } from '@/scripts/app'\nimport { useDialogService } from '@/services/dialogService'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\nimport { useConflictDetection } from '@/workbench/extensions/manager/composables/useConflictDetection'\n\nimport { electronAPI, isElectron } from './utils/envUtil'\n\nconst workspaceStore = useWorkspaceStore()\nconst conflictDetection = useConflictDetection()\nconst workflowStore = useWorkflowStore()\nconst dialogService = useDialogService()\nconst isLoading = computed<boolean>(() => workspaceStore.spinner)\nconst handleKey = (e: KeyboardEvent) => {\n workspaceStore.shiftDown = e.shiftKey\n}\nuseEventListener(window, 'keydown', handleKey)\nuseEventListener(window, 'keyup', handleKey)\n\nconst showContextMenu = (event: MouseEvent) => {\n const { target } = event\n switch (true) {\n case target instanceof HTMLTextAreaElement:\n case target instanceof HTMLInputElement && target.type === 'text':\n // TODO: Context input menu explicitly for text input\n electronAPI()?.showContextMenu({ type: 'text' })\n return\n }\n}\n\nonMounted(() => {\n window['__COMFYUI_FRONTEND_VERSION__'] = config.app_version\n\n if (isElectron()) {\n document.addEventListener('contextmenu', showContextMenu)\n }\n\n // Handle Vite preload errors (e.g., when assets are deleted after deployment)\n window.addEventListener('vite:preloadError', async (_event) => {\n // Auto-reload if app is not ready or there are no unsaved changes\n if (!app.vueAppReady || !workflowStore.activeWorkflow?.isModified) {\n window.location.reload()\n } else {\n // Show confirmation dialog if there are unsaved changes\n await dialogService\n .confirm({\n title: t('g.vitePreloadErrorTitle'),\n message: t('g.vitePreloadErrorMessage')\n })\n .then((confirmed) => {\n if (confirmed) {\n window.location.reload()\n }\n })\n }\n })\n\n // Initialize conflict detection in background\n // This runs async and doesn't block UI setup\n void conflictDetection.initializeConflictDetection()\n})\n</script>\n","import { definePreset } from '@primevue/themes'\nimport Aura from '@primevue/themes/aura'\nimport * as Sentry from '@sentry/vue'\nimport { initializeApp } from 'firebase/app'\nimport { createPinia } from 'pinia'\nimport 'primeicons/primeicons.css'\nimport PrimeVue from 'primevue/config'\nimport ConfirmationService from 'primevue/confirmationservice'\nimport ToastService from 'primevue/toastservice'\nimport Tooltip from 'primevue/tooltip'\nimport { createApp } from 'vue'\nimport { VueFire, VueFireAuth } from 'vuefire'\n\nimport { getFirebaseConfig } from '@/config/firebase'\nimport '@/lib/litegraph/public/css/litegraph.css'\nimport router from '@/router'\n\nimport App from './App.vue'\n// Intentionally relative import to ensure the CSS is loaded in the right order (after litegraph.css)\nimport './assets/css/style.css'\nimport { i18n } from './i18n'\n\n/**\n * CRITICAL: Load remote config FIRST for cloud builds to ensure\n * window.__CONFIG__is available for all modules during initialization\n */\nimport { isCloud } from '@/platform/distribution/types'\n\nif (isCloud) {\n const { loadRemoteConfig } =\n await import('@/platform/remoteConfig/remoteConfig')\n await loadRemoteConfig()\n}\n\nconst ComfyUIPreset = definePreset(Aura, {\n semantic: {\n // @ts-expect-error fixme ts strict error\n primary: Aura['primitive'].blue\n }\n})\n\nconst firebaseApp = initializeApp(getFirebaseConfig())\n\nconst app = createApp(App)\nconst pinia = createPinia()\nSentry.init({\n app,\n dsn: __SENTRY_DSN__,\n enabled: __SENTRY_ENABLED__,\n release: __COMFYUI_FRONTEND_VERSION__,\n normalizeDepth: 8,\n tracesSampleRate: isCloud ? 1.0 : 0,\n replaysSessionSampleRate: 0,\n replaysOnErrorSampleRate: 0,\n // Only set these for non-cloud builds\n ...(isCloud\n ? {}\n : {\n integrations: [],\n autoSessionTracking: false,\n defaultIntegrations: false\n })\n})\napp.directive('tooltip', Tooltip)\napp\n .use(router)\n .use(PrimeVue, {\n theme: {\n preset: ComfyUIPreset,\n options: {\n prefix: 'p',\n cssLayer: {\n name: 'primevue',\n order: 'theme, base, primevue'\n },\n // This is a workaround for the issue with the dark mode selector\n // https://github.com/primefaces/primevue/issues/5515\n darkModeSelector: '.dark-theme, :root:has(.dark-theme)'\n }\n }\n })\n .use(ConfirmationService)\n .use(ToastService)\n .use(pinia)\n .use(i18n)\n .use(VueFire, {\n firebaseApp,\n modules: [VueFireAuth()]\n })\n\napp.mount('#vue-app')\n"],"file":"index-CGxJFSof.js"}
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../src/config/firebase.ts","../../src/views/layouts/LayoutDefault.vue","../../src/platform/navigation/preservedQueryTracker.ts","../../src/platform/cloud/onboarding/onboardingCloudRoutes.ts","../../src/router.ts","../../src/components/dialog/GlobalDialog.vue","../../src/App.vue","../../src/main.ts"],"sourcesContent":["import type { FirebaseOptions } from 'firebase/app'\n\nimport { isCloud } from '@/platform/distribution/types'\nimport { remoteConfig } from '@/platform/remoteConfig/remoteConfig'\n\nconst DEV_CONFIG: FirebaseOptions = {\n apiKey: 'AIzaSyDa_YMeyzV0SkVe92vBZ1tVikWBmOU5KVE',\n authDomain: 'dreamboothy-dev.firebaseapp.com',\n databaseURL: 'https://dreamboothy-dev-default-rtdb.firebaseio.com',\n projectId: 'dreamboothy-dev',\n storageBucket: 'dreamboothy-dev.appspot.com',\n messagingSenderId: '313257147182',\n appId: '1:313257147182:web:be38f6ebf74345fc7618bf',\n measurementId: 'G-YEVSMYXSPY'\n}\n\nconst PROD_CONFIG: FirebaseOptions = {\n apiKey: 'AIzaSyC2-fomLqgCjb7ELwta1I9cEarPK8ziTGs',\n authDomain: 'dreamboothy.firebaseapp.com',\n databaseURL: 'https://dreamboothy-default-rtdb.firebaseio.com',\n projectId: 'dreamboothy',\n storageBucket: 'dreamboothy.appspot.com',\n messagingSenderId: '357148958219',\n appId: '1:357148958219:web:f5917f72e5f36a2015310e',\n measurementId: 'G-3ZBD3MBTG4'\n}\n\nconst BUILD_TIME_CONFIG = __USE_PROD_CONFIG__ ? PROD_CONFIG : DEV_CONFIG\n\n/**\n * Returns the Firebase configuration for the current environment.\n * - Cloud builds use runtime configuration delivered via feature flags\n * - OSS / localhost builds fall back to the build-time config determined by __USE_PROD_CONFIG__\n */\nexport function getFirebaseConfig(): FirebaseOptions {\n if (!isCloud) {\n return BUILD_TIME_CONFIG\n }\n\n const runtimeConfig = remoteConfig.value.firebase_config\n return runtimeConfig ?? BUILD_TIME_CONFIG\n}\n","<template>\n <main class=\"relative h-full w-full overflow-hidden\">\n <router-view />\n </main>\n</template>\n\n<script setup lang=\"ts\">\nimport { useFavicon } from '@vueuse/core'\n\nuseFavicon('/assets/favicon.ico')\n</script>\n","import type { Router } from 'vue-router'\n\nimport {\n capturePreservedQuery,\n hydratePreservedQuery\n} from '@/platform/navigation/preservedQueryManager'\n\nexport const installPreservedQueryTracker = (\n router: Router,\n definitions: Array<{ namespace: string; keys: string[] }>\n) => {\n const trackedDefinitions = definitions.map((definition) => ({\n ...definition\n }))\n\n router.beforeEach((to, _from, next) => {\n const queryKeys = new Set(Object.keys(to.query))\n\n trackedDefinitions.forEach(({ namespace, keys }) => {\n hydratePreservedQuery(namespace)\n const shouldCapture = keys.some((key) => queryKeys.has(key))\n if (shouldCapture) {\n capturePreservedQuery(namespace, to.query, keys)\n }\n })\n\n next()\n })\n}\n","import type { RouteRecordRaw } from 'vue-router'\n\nexport const cloudOnboardingRoutes: RouteRecordRaw[] = [\n {\n path: '/cloud',\n component: () =>\n import('@/platform/cloud/onboarding/components/CloudLayoutView.vue'),\n children: [\n {\n path: 'login',\n name: 'cloud-login',\n component: () =>\n import('@/platform/cloud/onboarding/CloudLoginView.vue'),\n beforeEnter: async (to, _from, next) => {\n // Only redirect if not explicitly switching accounts\n if (!to.query.switchAccount) {\n const { useCurrentUser } =\n await import('@/composables/auth/useCurrentUser')\n const { isLoggedIn } = useCurrentUser()\n\n if (isLoggedIn.value) {\n // User is already logged in, redirect to user-check\n // user-check will handle survey, or main page routing\n return next({ name: 'cloud-user-check' })\n }\n }\n next()\n }\n },\n {\n path: 'signup',\n name: 'cloud-signup',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSignupView.vue')\n },\n {\n path: 'forgot-password',\n name: 'cloud-forgot-password',\n component: () =>\n import('@/platform/cloud/onboarding/CloudForgotPasswordView.vue')\n },\n {\n path: 'survey',\n name: 'cloud-survey',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSurveyView.vue'),\n meta: { requiresAuth: true }\n },\n {\n path: 'user-check',\n name: 'cloud-user-check',\n component: () =>\n import('@/platform/cloud/onboarding/UserCheckView.vue'),\n meta: { requiresAuth: true }\n },\n {\n path: 'sorry-contact-support',\n name: 'cloud-sorry-contact-support',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSorryContactSupportView.vue')\n },\n {\n path: 'auth-timeout',\n name: 'cloud-auth-timeout',\n component: () =>\n import('@/platform/cloud/onboarding/CloudAuthTimeoutView.vue'),\n props: true\n },\n {\n path: 'subscribe',\n name: 'cloud-subscribe',\n component: () =>\n import('@/platform/cloud/onboarding/CloudSubscriptionRedirectView.vue'),\n meta: { requiresAuth: true }\n }\n ]\n }\n]\n","import { until } from '@vueuse/core'\nimport { storeToRefs } from 'pinia'\nimport {\n createRouter,\n createWebHashHistory,\n createWebHistory\n} from 'vue-router'\nimport type { RouteLocationNormalized } from 'vue-router'\n\nimport { useFeatureFlags } from '@/composables/useFeatureFlags'\nimport { isCloud } from '@/platform/distribution/types'\nimport { useDialogService } from '@/services/dialogService'\nimport { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'\nimport { useUserStore } from '@/stores/userStore'\nimport { isElectron } from '@/utils/envUtil'\nimport LayoutDefault from '@/views/layouts/LayoutDefault.vue'\n\nimport { installPreservedQueryTracker } from '@/platform/navigation/preservedQueryTracker'\nimport { PRESERVED_QUERY_NAMESPACES } from '@/platform/navigation/preservedQueryNamespaces'\nimport { cloudOnboardingRoutes } from './platform/cloud/onboarding/onboardingCloudRoutes'\n\nconst isFileProtocol = window.location.protocol === 'file:'\n\n/**\n * Determine base path for the router.\n * - Electron: always root\n * - Cloud: use Vite's BASE_URL (configured at build time)\n * - Standard web (including reverse proxy subpaths): use window.location.pathname\n * to support deployments like http://mysite.com/ComfyUI/\n */\nfunction getBasePath(): string {\n if (isElectron()) return '/'\n if (isCloud) return import.meta.env?.BASE_URL || '/'\n return window.location.pathname\n}\n\nconst basePath = getBasePath()\n\nconst router = createRouter({\n history: isFileProtocol\n ? createWebHashHistory()\n : // Base path must be specified to ensure correct relative paths\n // Example: For URL 'http://localhost:7801/ComfyBackendDirect',\n // we need this base path or assets will incorrectly resolve from 'http://localhost:7801/'\n createWebHistory(basePath),\n routes: [\n ...(isCloud ? cloudOnboardingRoutes : []),\n {\n path: '/',\n component: LayoutDefault,\n children: [\n {\n path: '',\n name: 'GraphView',\n component: () => import('@/views/GraphView.vue'),\n beforeEnter: async (_to, _from, next) => {\n // Then check user store\n const userStore = useUserStore()\n await userStore.initialize()\n if (userStore.needsLogin) {\n next('/user-select')\n } else {\n next()\n }\n }\n },\n {\n path: 'user-select',\n name: 'UserSelectView',\n component: () => import('@/views/UserSelectView.vue')\n }\n ]\n }\n ],\n\n scrollBehavior(_to, _from, savedPosition) {\n if (savedPosition) {\n return savedPosition\n } else {\n return { top: 0 }\n }\n }\n})\n\ninstallPreservedQueryTracker(router, [\n {\n namespace: PRESERVED_QUERY_NAMESPACES.TEMPLATE,\n keys: ['template', 'source', 'mode']\n }\n])\n\nif (isCloud) {\n const { flags } = useFeatureFlags()\n const PUBLIC_ROUTE_NAMES = new Set([\n 'cloud-login',\n 'cloud-signup',\n 'cloud-forgot-password',\n 'cloud-sorry-contact-support'\n ])\n const PUBLIC_ROUTE_PATHS = new Set([\n '/cloud/login',\n '/cloud/signup',\n '/cloud/forgot-password',\n '/cloud/sorry-contact-support'\n ])\n\n function isPublicRoute(to: RouteLocationNormalized) {\n const name = String(to.name)\n if (PUBLIC_ROUTE_NAMES.has(name)) return true\n const path = to.path\n return PUBLIC_ROUTE_PATHS.has(path)\n }\n // Global authentication guard\n router.beforeEach(async (to, _from, next) => {\n const authStore = useFirebaseAuthStore()\n\n // Wait for Firebase auth to initialize\n // Timeout after 16 seconds\n if (!authStore.isInitialized) {\n try {\n const { isInitialized } = storeToRefs(authStore)\n await until(isInitialized).toBe(true, { timeout: 16_000 })\n } catch (error) {\n console.error('Auth initialization failed:', error)\n return next({ name: 'cloud-auth-timeout' })\n }\n }\n\n // Pass authenticated users\n const authHeader = await authStore.getAuthHeader()\n const isLoggedIn = !!authHeader\n\n // Allow public routes\n if (isPublicRoute(to)) {\n return next()\n }\n\n // Special handling for user-check\n // These routes need auth but handle their own routing logic\n if (to.name === 'cloud-user-check') {\n if (to.meta.requiresAuth && !isLoggedIn) {\n return next({ name: 'cloud-login' })\n }\n return next()\n }\n\n // Prevent redirect loop when coming from user-check\n if (_from.name === 'cloud-user-check' && to.path === '/') {\n return next()\n }\n\n const query =\n to.fullPath === '/'\n ? undefined\n : { previousFullPath: encodeURIComponent(to.fullPath) }\n\n // Check if route requires authentication\n if (to.meta.requiresAuth && !isLoggedIn) {\n return next({\n name: 'cloud-login',\n query\n })\n }\n\n // Handle other protected routes\n if (!isLoggedIn) {\n // For Electron, use dialog\n if (isElectron()) {\n const dialogService = useDialogService()\n const loginSuccess = await dialogService.showSignInDialog()\n return loginSuccess ? next() : next(false)\n }\n\n // For web, redirect to login\n return next({\n name: 'cloud-login',\n query\n })\n }\n\n // User is logged in - check if they need onboarding (when enabled)\n // For root path, check actual user status to handle waitlisted users\n if (!isElectron() && isLoggedIn && to.path === '/') {\n if (!flags.onboardingSurveyEnabled) {\n return next()\n }\n // Import auth functions dynamically to avoid circular dependency\n const { getSurveyCompletedStatus } =\n await import('@/platform/cloud/onboarding/auth')\n try {\n // Check user's actual status\n const surveyCompleted = await getSurveyCompletedStatus()\n\n // Survey is required for all users (when feature flag enabled)\n if (!surveyCompleted) {\n return next({ name: 'cloud-survey' })\n }\n } catch (error) {\n console.error('Failed to check user status:', error)\n // On error, redirect to user-check as fallback\n return next({ name: 'cloud-user-check' })\n }\n }\n\n // User is logged in and accessing protected route\n return next()\n })\n}\n\nexport default router\n","<!-- The main global dialog to show various things -->\n<template>\n <Dialog\n v-for=\"item in dialogStore.dialogStack\"\n :key=\"item.key\"\n v-model:visible=\"item.visible\"\n class=\"global-dialog\"\n v-bind=\"item.dialogComponentProps\"\n :pt=\"item.dialogComponentProps.pt\"\n :aria-labelledby=\"item.key\"\n >\n <template #header>\n <div v-if=\"!item.dialogComponentProps?.headless\">\n <component\n :is=\"item.headerComponent\"\n v-if=\"item.headerComponent\"\n v-bind=\"item.headerProps\"\n :id=\"item.key\"\n />\n <h3 v-else :id=\"item.key\">\n {{ item.title || ' ' }}\n </h3>\n </div>\n </template>\n\n <component\n :is=\"item.component\"\n v-bind=\"item.contentProps\"\n :maximized=\"item.dialogComponentProps.maximized\"\n />\n\n <template v-if=\"item.footerComponent\" #footer>\n <component :is=\"item.footerComponent\" v-bind=\"item.footerProps\" />\n </template>\n </Dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport Dialog from 'primevue/dialog'\n\nimport { useDialogStore } from '@/stores/dialogStore'\n\nconst dialogStore = useDialogStore()\n</script>\n\n<style>\n@reference '../../assets/css/style.css';\n\n.global-dialog .p-dialog-header {\n @apply p-2 2xl:p-[var(--p-dialog-header-padding)];\n @apply pb-0;\n}\n\n.global-dialog .p-dialog-content {\n @apply p-2 2xl:p-[var(--p-dialog-content-padding)];\n @apply pt-0;\n}\n</style>\n","<template>\n <router-view />\n <ProgressSpinner\n v-if=\"isLoading\"\n class=\"absolute inset-0 flex h-[unset] items-center justify-center\"\n />\n <GlobalDialog />\n <BlockUI full-screen :blocked=\"isLoading\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useEventListener } from '@vueuse/core'\nimport BlockUI from 'primevue/blockui'\nimport ProgressSpinner from 'primevue/progressspinner'\nimport { computed, onMounted } from 'vue'\n\nimport GlobalDialog from '@/components/dialog/GlobalDialog.vue'\nimport config from '@/config'\nimport { t } from '@/i18n'\nimport { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'\nimport { app } from '@/scripts/app'\nimport { useDialogService } from '@/services/dialogService'\nimport { useWorkspaceStore } from '@/stores/workspaceStore'\nimport { useConflictDetection } from '@/workbench/extensions/manager/composables/useConflictDetection'\n\nimport { electronAPI, isElectron } from './utils/envUtil'\n\nconst workspaceStore = useWorkspaceStore()\nconst conflictDetection = useConflictDetection()\nconst workflowStore = useWorkflowStore()\nconst dialogService = useDialogService()\nconst isLoading = computed<boolean>(() => workspaceStore.spinner)\nconst handleKey = (e: KeyboardEvent) => {\n workspaceStore.shiftDown = e.shiftKey\n}\nuseEventListener(window, 'keydown', handleKey)\nuseEventListener(window, 'keyup', handleKey)\n\nconst showContextMenu = (event: MouseEvent) => {\n const { target } = event\n switch (true) {\n case target instanceof HTMLTextAreaElement:\n case target instanceof HTMLInputElement && target.type === 'text':\n // TODO: Context input menu explicitly for text input\n electronAPI()?.showContextMenu({ type: 'text' })\n return\n }\n}\n\nonMounted(() => {\n window['__COMFYUI_FRONTEND_VERSION__'] = config.app_version\n\n if (isElectron()) {\n document.addEventListener('contextmenu', showContextMenu)\n }\n\n // Handle Vite preload errors (e.g., when assets are deleted after deployment)\n window.addEventListener('vite:preloadError', async (_event) => {\n // Auto-reload if app is not ready or there are no unsaved changes\n if (!app.vueAppReady || !workflowStore.activeWorkflow?.isModified) {\n window.location.reload()\n } else {\n // Show confirmation dialog if there are unsaved changes\n await dialogService\n .confirm({\n title: t('g.vitePreloadErrorTitle'),\n message: t('g.vitePreloadErrorMessage')\n })\n .then((confirmed) => {\n if (confirmed) {\n window.location.reload()\n }\n })\n }\n })\n\n // Initialize conflict detection in background\n // This runs async and doesn't block UI setup\n void conflictDetection.initializeConflictDetection()\n})\n</script>\n","import { definePreset } from '@primevue/themes'\nimport Aura from '@primevue/themes/aura'\nimport * as Sentry from '@sentry/vue'\nimport { initializeApp } from 'firebase/app'\nimport { createPinia } from 'pinia'\nimport 'primeicons/primeicons.css'\nimport PrimeVue from 'primevue/config'\nimport ConfirmationService from 'primevue/confirmationservice'\nimport ToastService from 'primevue/toastservice'\nimport Tooltip from 'primevue/tooltip'\nimport { createApp } from 'vue'\nimport { VueFire, VueFireAuth } from 'vuefire'\n\nimport { getFirebaseConfig } from '@/config/firebase'\nimport '@/lib/litegraph/public/css/litegraph.css'\nimport router from '@/router'\n\nimport App from './App.vue'\n// Intentionally relative import to ensure the CSS is loaded in the right order (after litegraph.css)\nimport './assets/css/style.css'\nimport { i18n } from './i18n'\n\n/**\n * CRITICAL: Load remote config FIRST for cloud builds to ensure\n * window.__CONFIG__is available for all modules during initialization\n */\nimport { isCloud } from '@/platform/distribution/types'\n\nif (isCloud) {\n const { loadRemoteConfig } =\n await import('@/platform/remoteConfig/remoteConfig')\n await loadRemoteConfig()\n}\n\nconst ComfyUIPreset = definePreset(Aura, {\n semantic: {\n // @ts-expect-error fixme ts strict error\n primary: Aura['primitive'].blue\n }\n})\n\nconst firebaseApp = initializeApp(getFirebaseConfig())\n\nconst app = createApp(App)\nconst pinia = createPinia()\nSentry.init({\n app,\n dsn: __SENTRY_DSN__,\n enabled: __SENTRY_ENABLED__,\n release: __COMFYUI_FRONTEND_VERSION__,\n normalizeDepth: 8,\n tracesSampleRate: isCloud ? 1.0 : 0,\n replaysSessionSampleRate: 0,\n replaysOnErrorSampleRate: 0,\n // Only set these for non-cloud builds\n ...(isCloud\n ? {}\n : {\n integrations: [],\n autoSessionTracking: false,\n defaultIntegrations: false\n })\n})\napp.directive('tooltip', Tooltip)\napp\n .use(router)\n .use(PrimeVue, {\n theme: {\n preset: ComfyUIPreset,\n options: {\n prefix: 'p',\n cssLayer: {\n name: 'primevue',\n order: 'theme, base, primevue'\n },\n // This is a workaround for the issue with the dark mode selector\n // https://github.com/primefaces/primevue/issues/5515\n darkModeSelector: '.dark-theme, :root:has(.dark-theme)'\n }\n }\n })\n .use(ConfirmationService)\n .use(ToastService)\n .use(pinia)\n .use(i18n)\n .use(VueFire, {\n firebaseApp,\n modules: [VueFireAuth()]\n })\n\napp.mount('#vue-app')\n"],"file":"index-BMy3twho.js"}