erdbpro 3.4.4 → 3.4.5

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 (147) hide show
  1. package/dist/assets/{AdminRoute-DsqESu86.js → AdminRoute-DrYi0_XF.js} +2 -2
  2. package/dist/assets/{Combination-CBqK2WAU.js → Combination-DBeRPSUX.js} +1 -1
  3. package/dist/assets/{DataViewerModeToolbar-BU6kDj47.js → DataViewerModeToolbar-DnGcPEs4.js} +1 -1
  4. package/dist/assets/{DbClientEditorRoute-BPkxDlEV.js → DbClientEditorRoute-Bh_OaDEN.js} +1 -1
  5. package/dist/assets/{DiagramEditorRoute-b4Ig6As2.js → DiagramEditorRoute-Bw_onGfJ.js} +1 -1
  6. package/dist/assets/{DrawingEditorRoute-D5qz16fk.js → DrawingEditorRoute-C4BSj3Ah.js} +2 -2
  7. package/dist/assets/{DrawingsView-D6jqtkJo.js → DrawingsView-D0eNZF8l.js} +1 -1
  8. package/dist/assets/{EntityNode-Cki4Jhtp.js → EntityNode-BubcTPns.js} +1 -1
  9. package/dist/assets/{ExcalidrawEditor-TMvfpKwf.js → ExcalidrawEditor-eQe4pyA3.js} +8 -8
  10. package/dist/assets/{FlowchartEditorRoute-CwXZOk29.js → FlowchartEditorRoute-EVt67UAs.js} +1 -1
  11. package/dist/assets/{FlowchartView-BFDLbzoI.js → FlowchartView-BDDl2HRQ.js} +1 -1
  12. package/dist/assets/{NoteEditorRoute-1iyXm69g.js → NoteEditorRoute-KduExmWL.js} +2 -2
  13. package/dist/assets/{NotesCompanionPane-ZAIDpKhe.js → NotesCompanionPane-Dgymv75J.js} +2 -2
  14. package/dist/assets/{NotesView-UWK1NzH3.js → NotesView-DZLeeonI.js} +3 -3
  15. package/dist/assets/{ProjectFileTabs-CnNVuuxZ.js → ProjectFileTabs-DNmVwnNp.js} +1 -1
  16. package/dist/assets/{TrashView-DKVlHc8k.js → TrashView-DodCb2d-.js} +1 -1
  17. package/dist/assets/{WorkspaceProvider-BFt1fLnH.js → WorkspaceProvider-BKu0LKCS.js} +3 -3
  18. package/dist/assets/{abnfDiagram-N423BO3Z-CRhYhlyn.js → abnfDiagram-N423BO3Z-BIaHzJSW.js} +1 -1
  19. package/dist/assets/{ar-SA-G6X2FPQ2-CiROUGDv.js → ar-SA-G6X2FPQ2-CG4gXaCk.js} +1 -1
  20. package/dist/assets/{architectureDiagram-T3A2C74G-Bszvbsiy.js → architectureDiagram-T3A2C74G-CiqSC_06.js} +1 -1
  21. package/dist/assets/{az-AZ-76LH7QW2-BoY22mYB.js → az-AZ-76LH7QW2--jJJqvOX.js} +1 -1
  22. package/dist/assets/{bg-BG-XCXSNQG7-BfSTkttr.js → bg-BG-XCXSNQG7-5KB8b4-1.js} +1 -1
  23. package/dist/assets/{blockDiagram-VBNYF7ZC-DY0FcgGi.js → blockDiagram-VBNYF7ZC-DVnzKjMe.js} +1 -1
  24. package/dist/assets/{bn-BD-2XOGV67Q-BtArxgmC.js → bn-BD-2XOGV67Q-CSVJMRsA.js} +1 -1
  25. package/dist/assets/{c4Diagram-5PPSVZJV-BeXLC2Fp.js → c4Diagram-5PPSVZJV-DgFibHYM.js} +1 -1
  26. package/dist/assets/{ca-ES-6MX7JW3Y-CEOeq30Y.js → ca-ES-6MX7JW3Y-C6W3PhTR.js} +1 -1
  27. package/dist/assets/channel-DRYJfrrf.js +1 -0
  28. package/dist/assets/{chunk-2GRJ4B5K-BrABFCRg.js → chunk-2GRJ4B5K-BfJo-pSq.js} +1 -1
  29. package/dist/assets/{chunk-4I5QYGJK-rnMKF4Yp.js → chunk-4I5QYGJK-Bk5sydqb.js} +1 -1
  30. package/dist/assets/{chunk-5RXB4S5H-DfCjXD_8.js → chunk-5RXB4S5H-DO-MIcW8.js} +1 -1
  31. package/dist/assets/{chunk-6Q2QTUOP-XrL0WVCh.js → chunk-6Q2QTUOP-CJO9T2Bg.js} +1 -1
  32. package/dist/assets/{chunk-7Z6QIM7H-C76Kvofr.js → chunk-7Z6QIM7H-wPvC3972.js} +1 -1
  33. package/dist/assets/{chunk-EIO257PC-DLzT_bHO.js → chunk-EIO257PC-BcR-Rmn-.js} +1 -1
  34. package/dist/assets/{chunk-GF5L2VYU-DB-q8Pjx.js → chunk-GF5L2VYU-Ck5ix3h2.js} +1 -1
  35. package/dist/assets/{chunk-I66GZJ75-BElJmWk6.js → chunk-I66GZJ75-BAPujJrX.js} +1 -1
  36. package/dist/assets/{chunk-JQJVKLGR-CcLom7yx.js → chunk-JQJVKLGR-B-Y010j-.js} +1 -1
  37. package/dist/assets/{chunk-KBJHAD2P-CijZRlin.js → chunk-KBJHAD2P-DwvdQHWQ.js} +1 -1
  38. package/dist/assets/{chunk-NSK5VX7P-BgGi-QUV.js → chunk-NSK5VX7P-BQcxfnS7.js} +1 -1
  39. package/dist/assets/{chunk-QR6OTTB3-PPOImnQe.js → chunk-QR6OTTB3-Bu6w4SAv.js} +1 -1
  40. package/dist/assets/{chunk-UBXNYLIW-DCkgIwAO.js → chunk-UBXNYLIW-Bg0ANHdr.js} +1 -1
  41. package/dist/assets/{chunk-W5SLKNZC-DsQvkmTJ.js → chunk-W5SLKNZC-WKiLOi7m.js} +1 -1
  42. package/dist/assets/{chunk-WRU74C26-CIYOFIRf.js → chunk-WRU74C26-DPaj0R57.js} +1 -1
  43. package/dist/assets/classDiagram-JCYQIIEL-BIX50rl-.js +1 -0
  44. package/dist/assets/classDiagram-v2-OCEON4UE-BIX50rl-.js +1 -0
  45. package/dist/assets/{cs-CZ-2BRQDIVT-DXGAPl52.js → cs-CZ-2BRQDIVT-D5UyiAfP.js} +1 -1
  46. package/dist/assets/{cynefinDiagram-MW4NZA55-CMoNLYRc.js → cynefinDiagram-MW4NZA55-BmAPgFC3.js} +1 -1
  47. package/dist/assets/{da-DK-5WZEPLOC-BYm2m-qs.js → da-DK-5WZEPLOC-DzEZP48n.js} +1 -1
  48. package/dist/assets/{dagre-VZM6K2ZE-CzwDhr_E.js → dagre-VZM6K2ZE-CxYfeVya.js} +1 -1
  49. package/dist/assets/{de-DE-XR44H4JA-Cj6FS0f3.js → de-DE-XR44H4JA-DjuR_7Bi.js} +1 -1
  50. package/dist/assets/{diagram-7IWD3JNH-DWOyz22F.js → diagram-7IWD3JNH-B5s4gGUD.js} +1 -1
  51. package/dist/assets/{diagram-B4RE2ZJO-CB8eQU5c.js → diagram-B4RE2ZJO-CxwFiZ8o.js} +1 -1
  52. package/dist/assets/{diagram-LBJQPF4R-SyCyf0e1.js → diagram-LBJQPF4R-pOUu0uVk.js} +1 -1
  53. package/dist/assets/{diagram-Q27KOJAE-D4RAD4ph.js → diagram-Q27KOJAE-DabrQjsP.js} +1 -1
  54. package/dist/assets/{diagram-UB23O5K3-QHDbFwLp.js → diagram-UB23O5K3-BSE4nJMe.js} +1 -1
  55. package/dist/assets/{dist-Bbp_4vOv.js → dist-BG5dNAT3.js} +4 -4
  56. package/dist/assets/{ebnfDiagram-BXEA7PRR-CxP4nARN.js → ebnfDiagram-BXEA7PRR-CP7jO6yI.js} +1 -1
  57. package/dist/assets/{el-GR-BZB4AONW-D6sm4SVh.js → el-GR-BZB4AONW-D-Db6qae.js} +1 -1
  58. package/dist/assets/{en-B4ZKOASM-h2uiUwq8.js → en-B4ZKOASM-BbFTnkBC.js} +1 -1
  59. package/dist/assets/{erDiagram-JOGREHBK-CrHty4vG.js → erDiagram-JOGREHBK-EqmxZSIG.js} +1 -1
  60. package/dist/assets/{erdActions-Dc1G4NT5.js → erdActions-VP-88Vry.js} +1 -1
  61. package/dist/assets/{es-ES-U4NZUMDT-DaHIB9Nh.js → es-ES-U4NZUMDT-RLVF3TwQ.js} +1 -1
  62. package/dist/assets/{eu-ES-A7QVB2H4-JL-tKIG_.js → eu-ES-A7QVB2H4-B3yllD6c.js} +1 -1
  63. package/dist/assets/{fa-IR-HGAKTJCU-mQfxi4rI.js → fa-IR-HGAKTJCU-6dh_ViSv.js} +1 -1
  64. package/dist/assets/{fi-FI-Z5N7JZ37-DVlwx9X6.js → fi-FI-Z5N7JZ37-Bn4at9_s.js} +1 -1
  65. package/dist/assets/flowDiagram-UKHOOZJN-Cmscwpyz.js +1 -0
  66. package/dist/assets/{fr-FR-RHASNOE6-CiH6Au8c.js → fr-FR-RHASNOE6-gr6d7jAa.js} +1 -1
  67. package/dist/assets/{ganttDiagram-PKOTCBZU-C8kCjgG9.js → ganttDiagram-PKOTCBZU-DJuDa00y.js} +1 -1
  68. package/dist/assets/{gitGraphDiagram-DS77QQ5N-DyDeob-5.js → gitGraphDiagram-DS77QQ5N-CXoCI54z.js} +1 -1
  69. package/dist/assets/{gl-ES-HMX3MZ6V-BBB-d8Mx.js → gl-ES-HMX3MZ6V-Bgv0CTGP.js} +1 -1
  70. package/dist/assets/{he-IL-6SHJWFNN-Z91w13F5.js → he-IL-6SHJWFNN-C-1FWvRf.js} +1 -1
  71. package/dist/assets/{hi-IN-IWLTKZ5I-CbheEEe8.js → hi-IN-IWLTKZ5I-D1hlRs_K.js} +1 -1
  72. package/dist/assets/{hu-HU-A5ZG7DT2-DiL7hHNi.js → hu-HU-A5ZG7DT2-BWKvbmHV.js} +1 -1
  73. package/dist/assets/{id-ID-SAP4L64H-B3UbeWNg.js → id-ID-SAP4L64H-BeLPjdZ_.js} +1 -1
  74. package/dist/assets/image-GAAHSSAO-BDqkWo5z.js +1 -0
  75. package/dist/assets/index-C3r2kpyC.js +884 -0
  76. package/dist/assets/{infoDiagram-6WML65LV-D5MCgtmM.js → infoDiagram-6WML65LV-D1lynf9u.js} +1 -1
  77. package/dist/assets/{ishikawaDiagram-WSZJBQD7-Ddxh-RLg.js → ishikawaDiagram-WSZJBQD7-DpVH03gN.js} +1 -1
  78. package/dist/assets/{it-IT-JPQ66NNP-Bw487Jbj.js → it-IT-JPQ66NNP-BE7vmYAT.js} +1 -1
  79. package/dist/assets/{ja-JP-DBVTYXUO-CezLzeOo.js → ja-JP-DBVTYXUO-qXtpKb5u.js} +1 -1
  80. package/dist/assets/{journeyDiagram-NVQOT4AX-BImXIfyg.js → journeyDiagram-NVQOT4AX-BsF2KEus.js} +1 -1
  81. package/dist/assets/{kaa-6HZHGXH3-BF8Spb5E.js → kaa-6HZHGXH3-aDi8T9ap.js} +1 -1
  82. package/dist/assets/{kab-KAB-ZGHBKWFO-C4ZUtiKB.js → kab-KAB-ZGHBKWFO-CR2CfRi_.js} +1 -1
  83. package/dist/assets/{kanban-definition-27J2QSJJ-9VGXUuIj.js → kanban-definition-27J2QSJJ-Cl4N_QQU.js} +1 -1
  84. package/dist/assets/{kk-KZ-P5N5QNE5-g_vnUUcj.js → kk-KZ-P5N5QNE5-DjUmH-P5.js} +1 -1
  85. package/dist/assets/{km-KH-HSX4SM5Z-BOwEXyZ7.js → km-KH-HSX4SM5Z-CyNPtzM3.js} +1 -1
  86. package/dist/assets/{ko-KR-MTYHY66A-DC1WnzBL.js → ko-KR-MTYHY66A-CgFlnosj.js} +1 -1
  87. package/dist/assets/{ku-TR-6OUDTVRD-DD9gJRrR.js → ku-TR-6OUDTVRD-D77qM3OE.js} +1 -1
  88. package/dist/assets/{line-6jHkzcbb.js → line-Bz4J9juH.js} +1 -1
  89. package/dist/assets/{lt-LT-XHIRWOB4-DrLrIYgA.js → lt-LT-XHIRWOB4-Cz0nGCpZ.js} +1 -1
  90. package/dist/assets/{lv-LV-5QDEKY6T-DXh-jV4R.js → lv-LV-5QDEKY6T-B0AN-h0Y.js} +1 -1
  91. package/dist/assets/{mindmap-definition-FAOFIHXS-NkDV2mqL.js → mindmap-definition-FAOFIHXS-CTk2KZzX.js} +1 -1
  92. package/dist/assets/{mr-IN-CRQNXWMA-D9QV3zBZ.js → mr-IN-CRQNXWMA-SQAI4q2W.js} +1 -1
  93. package/dist/assets/{my-MM-5M5IBNSE-BvY1X3Ab.js → my-MM-5M5IBNSE-RUb9G-l1.js} +1 -1
  94. package/dist/assets/{nb-NO-T6EIAALU-DVu4lTBi.js → nb-NO-T6EIAALU-CHt-iHDP.js} +1 -1
  95. package/dist/assets/{nl-NL-IS3SIHDZ-DckMtk8V.js → nl-NL-IS3SIHDZ-CcRbegnc.js} +1 -1
  96. package/dist/assets/{nn-NO-6E72VCQL-CUfF3pYd.js → nn-NO-6E72VCQL-DtnGt-Um.js} +1 -1
  97. package/dist/assets/{note-importer-Bi-otidG.js → note-importer-B6ql7t2r.js} +2 -2
  98. package/dist/assets/{oc-FR-POXYY2M6-CXethMle.js → oc-FR-POXYY2M6-Chi6gHvw.js} +1 -1
  99. package/dist/assets/{pa-IN-N4M65BXN-BHBqiuU1.js → pa-IN-N4M65BXN-b20NieWg.js} +1 -1
  100. package/dist/assets/{pegDiagram-VL7TDLO6-CuIxpAd8.js → pegDiagram-VL7TDLO6-DTlHveRH.js} +1 -1
  101. package/dist/assets/percentages-BXMCSKIN-NYJord4U.js +1 -0
  102. package/dist/assets/{pieDiagram-7S7Q4E2Y-D29C_sXK.js → pieDiagram-7S7Q4E2Y-BTnTvVK5.js} +1 -1
  103. package/dist/assets/{pl-PL-T2D74RX3-ydfSMrfV.js → pl-PL-T2D74RX3-B2Ing3px.js} +1 -1
  104. package/dist/assets/{pt-BR-5N22H2LF-Ck4s57Xw.js → pt-BR-5N22H2LF-CSpjm1Sp.js} +1 -1
  105. package/dist/assets/{pt-PT-UZXXM6DQ-Bw7y2bi5.js → pt-PT-UZXXM6DQ-BJ3Ndc7i.js} +1 -1
  106. package/dist/assets/{quadrantDiagram-CIZ2JOQS-xWx3bSs-.js → quadrantDiagram-CIZ2JOQS-DNIiCyYf.js} +1 -1
  107. package/dist/assets/{railroadDiagram-AXF67PYL-Bt7IOjkc.js → railroadDiagram-AXF67PYL-BS6Q9VmO.js} +1 -1
  108. package/dist/assets/{requirementDiagram-LRYGKXZP-BlrB1SY-.js → requirementDiagram-LRYGKXZP-CrLBS59l.js} +1 -1
  109. package/dist/assets/{ro-RO-JPDTUUEW-BaPy9LfR.js → ro-RO-JPDTUUEW-VjQCLUXP.js} +1 -1
  110. package/dist/assets/{ru-RU-B4JR7IUQ-au5VLX71.js → ru-RU-B4JR7IUQ-CRdjuuv9.js} +1 -1
  111. package/dist/assets/{sankeyDiagram-W5VNT64P-CegIEtnL.js → sankeyDiagram-W5VNT64P-gsIoAwUA.js} +1 -1
  112. package/dist/assets/{sequenceDiagram-SI44F4Z6-DPy1px1Q.js → sequenceDiagram-SI44F4Z6-XZTPXpTp.js} +1 -1
  113. package/dist/assets/{si-LK-N5RQ5JYF-CPhvhvOK.js → si-LK-N5RQ5JYF-B_feK85p.js} +1 -1
  114. package/dist/assets/{sk-SK-C5VTKIMK-DCt1WKzH.js → sk-SK-C5VTKIMK-fcWDOZ4q.js} +1 -1
  115. package/dist/assets/{sl-SI-NN7IZMDC-DQeMrjgb.js → sl-SI-NN7IZMDC-DZaUphkt.js} +1 -1
  116. package/dist/assets/{stateDiagram-OKZ733FA-DxMvdMib.js → stateDiagram-OKZ733FA-WPy8HF60.js} +1 -1
  117. package/dist/assets/stateDiagram-v2-UEYNNEHI-APHd0SA2.js +1 -0
  118. package/dist/assets/subset-shared.chunk-DyXAjJN9.js +1 -0
  119. package/dist/assets/{subset-worker.chunk-DNRuahaE.js → subset-worker.chunk-Clzwhyvs.js} +1 -1
  120. package/dist/assets/{sv-SE-XGPEYMSR-CDpaSmYY.js → sv-SE-XGPEYMSR-DrbbsUyQ.js} +1 -1
  121. package/dist/assets/{swimlanes-SLNWSIFB-uAM7GWDR.js → swimlanes-SLNWSIFB-D4z9qwfX.js} +1 -1
  122. package/dist/assets/swimlanesDiagram-ULZ7WXOC-uLXOIwEf.js +8 -0
  123. package/dist/assets/{ta-IN-2NMHFXQM-DaoR00gR.js → ta-IN-2NMHFXQM-Y5VJiFwc.js} +1 -1
  124. package/dist/assets/{th-TH-HPSO5L25-iuBe47r_.js → th-TH-HPSO5L25-BKS6bxz1.js} +1 -1
  125. package/dist/assets/{timeline-definition-Z64GVDOM-C66YbgeV.js → timeline-definition-Z64GVDOM-CAoZtDwA.js} +1 -1
  126. package/dist/assets/{tr-TR-DEFEU3FU-B_uUqanw.js → tr-TR-DEFEU3FU-CEHSX0uR.js} +1 -1
  127. package/dist/assets/{uk-UA-QMV73CPH-BTSn5Aae.js → uk-UA-QMV73CPH-DLxBVU34.js} +1 -1
  128. package/dist/assets/{vennDiagram-T6HMQDX7-BTAfAMLF.js → vennDiagram-T6HMQDX7-BRdzUVJj.js} +1 -1
  129. package/dist/assets/{vi-VN-M7AON7JQ-J57Rg3Ii.js → vi-VN-M7AON7JQ-D1GV_new.js} +1 -1
  130. package/dist/assets/{wardleyDiagram-T6FBY63Y-CNM2hyzo.js → wardleyDiagram-T6FBY63Y-JVbV7JBk.js} +1 -1
  131. package/dist/assets/{xychartDiagram-ELKLHX3M-_wSNKxRP.js → xychartDiagram-ELKLHX3M-ATEjNUSw.js} +1 -1
  132. package/dist/assets/{zh-CN-LNUGB5OW-CGCzix0k.js → zh-CN-LNUGB5OW-gSK0Mg4q.js} +1 -1
  133. package/dist/assets/{zh-HK-E62DVLB3-D74oZGZU.js → zh-HK-E62DVLB3-CKO-0Ly6.js} +1 -1
  134. package/dist/assets/{zh-TW-RAJ6MFWO-BfKVvrg0.js → zh-TW-RAJ6MFWO-BYW5DTNY.js} +1 -1
  135. package/dist/index.html +3 -3
  136. package/dist-server/index.js +5 -1
  137. package/package.json +1 -1
  138. package/dist/assets/channel-DguCx1QT.js +0 -1
  139. package/dist/assets/classDiagram-JCYQIIEL-CCpv7-JF.js +0 -1
  140. package/dist/assets/classDiagram-v2-OCEON4UE-CCpv7-JF.js +0 -1
  141. package/dist/assets/flowDiagram-UKHOOZJN-DZLVvIRA.js +0 -1
  142. package/dist/assets/image-GAAHSSAO-ebSOoDu1.js +0 -1
  143. package/dist/assets/index-CIb9-CLP.js +0 -845
  144. package/dist/assets/percentages-BXMCSKIN-BoJ2Ielj.js +0 -1
  145. package/dist/assets/stateDiagram-v2-UEYNNEHI-PDrqfO_v.js +0 -1
  146. package/dist/assets/subset-shared.chunk-DeBxeTa4.js +0 -1
  147. package/dist/assets/swimlanesDiagram-ULZ7WXOC-CmHZJc0X.js +0 -8
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-js-C7JaR3Vq.js","assets/core-DNaw6KYU.js","assets/app-Dwb58oCT.js","assets/image-DXXwzuA0.js","assets/index-CIb9-CLP.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/react-dom-CGnP4YFq.js","assets/preload-helper-Czpn1I53.js","assets/note-importer-Bi-otidG.js","assets/dist--spER_Rx.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/utils-TcK2FSyg.js","assets/api-B4Lp0KNi.js","assets/image-compression-COYPhRs3.js","assets/downloadSVG-sVCad7p8.js","assets/WorkspaceContext-M-vT9OAZ.js","assets/vanilla--C5Lp_AM.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/AIActionContext-sBtUZeB9.js","assets/useCompositeItem-ZIV61RjL.js","assets/floating-ui.utils-DrtUanoU.js","assets/createLucideIcon-CyJfQrak.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/input-BDCM7QEk.js","assets/link-2-DBo-eQZM.js","assets/wand-sparkles-C9YiTYBh.js","assets/popover-B51mz7qL.js","assets/scroll-area-CQ2HKq3N.js","assets/card-Dy6p8t6g.js","assets/textarea-Bvirh6bi.js","assets/extends-CvVTau-c.js","assets/table-DCsJJ7Zs.js","assets/label-Co-it7VP.js","assets/index-DuOqxUTN.css","assets/window-Cybt16bF.js","assets/event-DtFyPu7u.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{A as i,C as a,D as o,E as s,I as c,L as l,O as u,a as d,b as f,i as p,k as m,r as h,t as g,x as _,y as v,z as y}from"./note-importer-Bi-otidG.js";import{f as b,m as x,n as S,p as C,t as w}from"./downloadSVG-sVCad7p8.js";import{G as T,_ as E,n as D,s as O}from"./dist--spER_Rx.js";import{n as k,t as A}from"./WorkspaceContext-M-vT9OAZ.js";import{c as j,r as M,s as ee,t as N}from"./api-B4Lp0KNi.js";import{t as P}from"./dist-js-DXG5pDMi.js";var te=`hermes:note-titles`,ne=864e5,re=`hermes:note-content`,ie=864e5;function ae(){try{let e=localStorage.getItem(te);return e?JSON.parse(e):{}}catch{return{}}}function oe(e){try{localStorage.setItem(te,JSON.stringify(e))}catch{}}function se(e,t,n){let r=ae();r[e]={title:t,projectName:n,updatedAt:Date.now()},oe(r)}function F(e){let t=ae(),n=t[e];return n?Date.now()-n.updatedAt>ne?(delete t[e],oe(t),null):n:null}function ce(){try{let e=localStorage.getItem(re);return e?JSON.parse(e):{}}catch{return{}}}function le(e){try{localStorage.setItem(re,JSON.stringify(e))}catch{}}function I(e,t,n){let r=ce();r[e]={title:t,content:n,updatedAt:Date.now()},le(r)}function ue(e){let t=ce(),n=t[e];return n?Date.now()-n.updatedAt>ie?(delete t[e],le(t),null):n:null}var L=function(e){return e.ERD=`erd`,e.NOTES=`notes`,e.FLOWCHART=`flowchart`,e.DRAWINGS=`drawings`,e}({}),R=e(t(),1),de=()=>{if(typeof window>`u`)return null;let e=window.location.pathname.match(/^\/(view|share)\/(diagram|note|drawing|flowchart|erd|notes|drawings)\/([^/]+)/);return e?{type:{diagram:`erd`,erd:`erd`,note:`notes`,notes:`notes`,drawing:`drawings`,drawings:`drawings`,flowchart:`flowchart`}[e[2]]||e[2],uid:e[3]}:null},fe=R.memo(function(e){let{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,isAuthenticated:a,notesSaveTimeout:o,view:s,setView:d,setSidebarView:f}=e;l();let p=c(),m=(0,R.useRef)(null);return(0,R.useEffect)(()=>{let e=()=>{window.dispatchEvent(new CustomEvent(`notes:open-export-modal`))},t=()=>{window.dispatchEvent(new CustomEvent(`notes:open-import-modal`))};return window.addEventListener(`notes:open-export`,e),window.addEventListener(`notes:open-import`,t),()=>{window.removeEventListener(`notes:open-export`,e),window.removeEventListener(`notes:open-import`,t)}},[]),(0,R.useEffect)(()=>{if(a!==null||de())return;let e=p.pathname.match(/^\/notes\/([^/]+)/);if(e){let r=e[1],a=F(r),o=ue(r);a||o?t.some(e=>e.uid===r)||(d(`notes`),f(`notes`),i(r),n(e=>e.some(e=>e.uid===r)?e:[...e,{uid:r,title:o?.title||a?.title||`Untitled`,projects:a?.projectName?{name:a.projectName}:void 0,content:o?.content}])):u.getDraft(L.NOTES,r).then(e=>{if(!(!e||!e.data))try{let a=JSON.parse(e.data),o=a.content||``;o&&!t.some(e=>e.uid===r&&e.content)&&(d(`notes`),f(`notes`),i(r),n(e=>e.some(e=>e.uid===r&&e.content)?e:[...e,{uid:r,title:a.title||`Untitled`,content:o}]))}catch{}}).catch(()=>{})}},[p.pathname]),(0,R.useEffect)(()=>{let e=e=>{s!==`notes`||!r||((e.ctrlKey||e.metaKey)&&e.shiftKey&&e.key.toLowerCase()===`e`?(e.preventDefault(),window.dispatchEvent(new CustomEvent(`notes:open-export-modal`))):(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.key.toLowerCase()===`i`&&(e.preventDefault(),window.dispatchEvent(new CustomEvent(`notes:open-import-modal`))))};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[s,r]),(0,R.useEffect)(()=>()=>{o.current&&clearTimeout(o.current),m.current&&clearTimeout(m.current)},[o]),null}),pe=R.memo(function(){let{setBreadcrumbLabel:e}=k(),t=c().pathname===`/`;return R.useEffect(()=>(t&&e(`Dashboard`),()=>{t&&e(null)}),[t,e]),null}),me=R.memo(function(){return null}),he=n(),ge=(0,R.createContext)(null);function _e({children:e}){let[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!1),s=(0,R.useRef)(0),c=(0,R.useCallback)(async()=>{if(sessionStorage.getItem(`auth_mode`)===`guest`){n(!0),o(!0),i({id:`guest`,email:`guest@local`,name:`Guest User`});return}try{let e=await N(`/api/me`);if(e.ok){let t=await e.json();if(t.authenticated){t.token&&j(t.token),n(!0),o(!1),i(t.user),s.current=0;return}n(!1),o(!1),i(null),M()}else if(e.status===503){let t=await e.json().catch(()=>({}));if(t.db_error){console.error(`[checkAuth] Permanent database error:`,t.message),n(!1),o(!1),i(null),M();return}if(ee()&&s.current<30){s.current++;let e=Math.min(1500*1.3**(s.current-1),5e3);setTimeout(()=>c(),e);return}n(!1),o(!1),i(null),M()}else n(!1),o(!1),i(null),M();s.current=0}catch{let e=ee(),t=e?1/0:3;if(s.current<t){s.current++;let t=e?Math.min(1500*1.5**(s.current-1),1e4):1500*s.current;setTimeout(()=>c(),t)}}},[]);(0,R.useEffect)(()=>{c()},[c]),(0,R.useEffect)(()=>{let e=()=>{n(!1),o(!1),i(null)};return window.addEventListener(`auth:unauthorized`,e),()=>{window.removeEventListener(`auth:unauthorized`,e)}},[]);let l=(0,R.useCallback)(e=>{n(!0),o(!1),sessionStorage.removeItem(`auth_mode`),e&&i(e)},[]),u=(0,R.useCallback)(()=>{n(!0),o(!0),i({id:`guest`,email:`guest@local`,name:`Guest User`}),sessionStorage.setItem(`auth_mode`,`guest`)},[]),d=(0,R.useCallback)(async()=>{if(M(),a){n(!1),o(!1),i(null),sessionStorage.removeItem(`auth_mode`);return}try{(await N(`/api/logout`,{method:`POST`})).ok&&(M(),n(!1),o(!1),i(null))}catch(e){console.error(`Logout error:`,e)}},[a]);return(0,he.jsx)(ge.Provider,{value:{isAuthenticated:t,user:r,isGuest:a,setUser:i,setIsAuthenticated:n,checkAuth:c,handleLogin:l,handleGuestLogin:u,handleLogout:d},children:e})}function ve(){let e=(0,R.useContext)(ge);if(!e)throw Error(`useAuth must be used within an AuthProvider`);return e}var ye=`diagram_versions`;async function be(e){try{let t=localStorage.getItem(ye);return t?JSON.parse(t).find(t=>String(t.diagramId)===String(e))?.version??null:null}catch(e){return console.warn(`Failed to get cached version:`,e),null}}async function xe(e,t){try{let n=[],r=localStorage.getItem(ye);r&&(n=JSON.parse(r)),n=n.filter(t=>String(t.diagramId)!==String(e)),n.push({diagramId:e,version:t,timestamp:Date.now()}),n.length>100&&(n=n.slice(-100)),localStorage.setItem(ye,JSON.stringify(n))}catch(e){console.warn(`Failed to update cached version:`,e)}}async function Se(e){try{let t=localStorage.getItem(ye);if(!t)return;let n=JSON.parse(t);n=n.filter(t=>String(t.diagramId)!==String(e)),localStorage.setItem(ye,JSON.stringify(n))}catch(e){console.warn(`Failed to clear cached version:`,e)}}function Ce(e){return e&&{...e,project_id:e.project_id??e.projectId??null,source_type:e.source_type??e.sourceType,source_connection_id:e.source_connection_id??e.sourceConnectionId,dbml_source:e.dbml_source??e.dbmlSource??``,_version:e._version??e.version,created_at:e.created_at??e.createdAt,updated_at:e.updated_at??e.updatedAt}}function we(e,t){let n=new Map(e.map(e=>[e.id,e])),r=(e,t)=>{let r=n.get(e),i=t?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);return r?.data.columns.find(e=>e.id===i)?.name??``};return JSON.stringify({nodes:e.map(e=>({name:e.data.name,columns:(e.data.columns||[]).map(e=>({name:e.name,type:e.type,is_pk:e.is_pk,is_nullable:e.is_nullable,default_value:e.default_value,is_unique:e.is_unique,comment:e.comment,enum_name:e.enum_name,enum_values:e.enum_values})).sort((e,t)=>e.name.localeCompare(t.name)),comment:e.data.comment||``,constraints:(e.data.constraints||[]).map(t=>({kind:t.kind,name:t.name||``,columns:(t.column_ids||[]).map(t=>e.data.columns.find(e=>e.id===t)?.name||t).sort(),expression:t.expression||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t))),indexes:(e.data.indexes||[]).map(t=>({name:t.name,is_unique:!!t.is_unique,algorithm:t.algorithm||``,columns:(t.column_ids||[]).map(t=>e.data.columns.find(e=>e.id===t)?.name||t).sort()})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t)))})).sort((e,t)=>e.name.localeCompare(t.name)),edges:t.map(e=>({source:n.get(e.source)?.data.name,target:n.get(e.target)?.data.name,sourceColumn:r(e.source,e.sourceHandle),targetColumn:r(e.target,e.targetHandle),on_delete:e.data?.on_delete,on_update:e.data?.on_update,constraint_name:e.data?.constraint_name})).sort((e,t)=>`${e.source}.${e.sourceColumn}>${e.target}.${e.targetColumn}`.localeCompare(`${t.source}.${t.sourceColumn}>${t.target}.${t.targetColumn}`))})}function Te(e){try{return(typeof e==`string`?JSON.parse(e):e)?.schema_fingerprint??null}catch{return null}}function Ee(e,t,n){if(!e?.trim())return!0;try{let r=p(e);return we(r.nodes,r.edges)===we(t,n)}catch{return!0}}function De(e,t,n=!1){let[r,i]=(0,R.useState)([]),[a,o]=(0,R.useState)(null),[c,l]=(0,R.useState)(!0);(0,R.useRef)(null);let[f,p]=(0,R.useState)(0),[m,g]=(0,R.useState)(!1),_=(0,R.useRef)(r),v=(0,R.useRef)(a),y=(0,R.useRef)({}),b=(0,R.useRef)(n);(0,R.useEffect)(()=>{b.current=n},[n]);let x=()=>b.current||sessionStorage.getItem(`auth_mode`)===`guest`;return _.current=r,v.current=a,{diagrams:r,setDiagrams:i,activeDiagramId:a,setActiveDiagramId:o,fetchDiagrams:(0,R.useCallback)(async(e=!1,t=`all`,n=``,r=null,a=10,o,s)=>{if(x()){let[e,r]=await Promise.all([u.getAllResources(`erd`),u.getAllResources(`project`)]),c=new Map(r.filter(e=>!e.is_deleted).map(e=>[String(e.id),{uid:e.uid||String(e.id),name:e.name}])),d=e.filter(e=>!e.is_deleted);s?.sourceType&&(d=d.filter(e=>(e.source_type??e.sourceType??`blank`)===s.sourceType)),t!==`all`&&(d=d.filter(e=>String(e.project_id)===String(t))),n&&(d=d.filter(e=>e.name.toLowerCase().includes(n.toLowerCase())));let f=d.map(e=>({...e,projects:e.projects||c.get(String(e.project_id))||null}));f.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let m=a,h=((o===void 0?1:o)-1)*m,_=f.slice(h,h+m);i(_),p(f.length),g(!1),l(!1);return}s?.silent||l(!0);try{let c=o===void 0?e?_.current.length:0:(o-1)*a,l=t===null||t===`null`||t===`none`?`null`:t,u=n?`&q=${encodeURIComponent(n)}`:``,d=r===null?``:`&is_public=${r}`,f=s?.sourceType?`&source_type=${s.sourceType}`:``,m=await N(`/api/diagrams?limit=${a}&offset=${c}&project_id=${l}${u}${d}${f}`);if(m.ok){let t;try{t=await m.json()}catch(e){console.error(`Failed to parse JSON response in fetchDiagrams`,e);return}let n=t.data===void 0?Array.isArray(t)?t:[]:t.data,r=t.total===void 0?Array.isArray(n)?n.length:0:t.total,a=(Array.isArray(n)?n:[]).map(Ce);i(e?e=>[...e,...a]:e=>{let t=v.current;if(t!=null&&!a.some(e=>String(e.id)===String(t)||e.uid&&String(e.uid)===String(t))){let n=e.find(e=>String(e.id)===String(t)||e.uid&&String(e.uid)===String(t));if(n)return[...a,n]}return a}),p(r),g(a.length+c<r)}else{let e=await m.text();console.error(`Failed to fetch diagrams: ${m.status} ${m.statusText}`,e)}}catch(e){console.error(`Error in fetchDiagrams:`,e)}finally{l(!1)}},[]),createDiagram:async(e,t)=>{let n=t===`none`||t===`uncategorized`?null:t;if(x()){let t={id:Math.random().toString(36).substring(2,11),uid:crypto.randomUUID(),name:e,project_id:n||null,dbml_source:``,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),entities:[],relationships:[],type:`erd`};return await u.saveResource(t),i(e=>[t,...e]),D.success(`Diagram created locally`),t}try{let t=crypto.randomUUID(),r=await N(`/api/diagrams`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,project_id:n,uid:t})});if(r.ok){let e=Ce(await r.json());return e.uid||=t,i(t=>[e,...t]),D.success(`Diagram created successfully`),e}D.error(`Failed to create diagram`)}catch(e){console.error(`Error creating diagram:`,e),D.error(`Error creating diagram`)}return null},updateDiagram:async(e,t,n)=>{if(x()){let r=await u.getResource(e);r&&(r.name=t,r.updated_at=new Date().toISOString(),await u.saveResource(r),i(n=>n.map(n=>n.id===e?{...n,name:t}:n)),n?.silent||D.success(`Diagram renamed locally`));return}try{let r=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${r}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})})).ok?(i(n=>n.map(n=>n.id===e?{...n,name:t}:n)),n?.silent||D.success(`Diagram renamed successfully`)):D.error(`Failed to rename diagram`)}catch(e){console.error(`Error updating diagram:`,e),D.error(`Error renaming diagram`)}},deleteDiagram:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null,t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),p(e=>Math.max(0,e-1)),(a===e||String(a)===String(e))&&o(null),D.success(`Diagram moved to local trash`));return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}`,{method:`DELETE`})).ok?(i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),p(e=>Math.max(0,e-1)),String(a)===String(e)&&o(null),D.success(`Diagram moved to trash`)):D.error(`Failed to delete diagram`)}catch(e){console.error(`Error deleting diagram:`,e),D.error(`Error deleting diagram`)}},restoreDiagram:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null,t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Diagram restored locally`));return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}/restore`,{method:`POST`})).ok?(i(t=>t.map(t=>String(t.id)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Diagram restored successfully`)):D.error(`Failed to restore diagram`)}catch{D.error(`Error restoring diagram`)}},deleteDiagramPermanent:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null;let n=t?t.id:e;await u.deleteResource(n),await u.clearDraft(L.ERD,n),i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Diagram permanently deleted from local storage`);return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}/permanent`,{method:`DELETE`})).ok?(i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Diagram permanently deleted`)):D.error(`Failed to permanently delete diagram`)}catch{D.error(`Error permanently deleting diagram`)}},moveDiagramToProject:async(e,t,n)=>{let r=t===`none`||t===`uncategorized`?null:t;if(x()){let t=await u.getResource(e);return t?(t.project_id=r,await u.saveResource(t),i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,project_id:r}:t)),n?.silent||D.success(`Diagram moved to project locally`),!0):!1}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;if((await N(`/api/diagrams/${t}/project`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:r})})).ok)return i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,project_id:r}:t)),n?.silent||D.success(`Diagram moved to project`),!0;D.error(`Failed to move diagram`)}catch(e){console.error(`Error moving diagram:`,e),D.error(`Error moving diagram`)}},saveDiagram:(0,R.useCallback)(async(e,n,r,o)=>{if(!a||t!==`erd`&&t!==`diagram`)return;let{expectedVersion:c,dbmlSource:l}=o||{};try{let t=_.current.find(e=>String(e.id)===String(a)||String(e.uid)===String(a)),o=t,f=o?.source_connection_id??o?.sourceConnectionId??(o?.source_type??o?.sourceType)===`production_db`,p=[a,t?.uid,t?.id].filter(e=>e!=null).map(String),m=p.map(e=>y.current[e]).find(e=>e!==void 0),g=we(e,n),v=Te(t?.data),b=m??t?.dbml_source??t?.dbmlSource??``,S=l===void 0&&!!b&&(v===null?!Ee(b,e,n):v!==g),C=l??(S?d(e,n):b);p.forEach(e=>{y.current[e]=C});let w=!f&&C.trim()&&(l!==void 0||S||e.some(e=>!Array.isArray(e.data.constraints)||!Array.isArray(e.data.indexes)))?h(e,C):e,T=we(w,n),E;if(f){let t={};e.forEach(e=>{t[e.id]={x:e.position.x,y:e.position.y,color:e.data?.color,collapsed:e.data?.collapsed,hidden_columns:e.data?.hidden_columns,note:e.data?.note}}),E=JSON.stringify({nodes:t,viewport:r,_type:`production_db_positions`,dbml_source:C,schema_fingerprint:g})}else E=JSON.stringify({nodes:w,edges:n,viewport:r,dbml_source:C,schema_fingerprint:T});let D=!x();if(x()){let e=await u.getResource(a);if(e||=(await u.getAllResources(`erd`)).find(e=>e.uid===a)||null,e){let t=w.map(e=>({...e.data,x:e.position.x,y:e.position.y})),i=n.map(s);e.entities=t,e.relationships=i,e.viewport_x=r.x,e.viewport_y=r.y,e.viewport_zoom=r.zoom,e.dbml_source=C,e.updated_at=new Date().toISOString(),await u.saveResource(e)}else{let e=w.map(e=>({...e.data,x:e.position.x,y:e.position.y})),t=n.map(s),i={id:a,uid:a,name:`ERD`,project_id:null,is_deleted:!1,type:`erd`,entities:e,relationships:t,viewport_x:r.x,viewport_y:r.y,viewport_zoom:r.zoom,dbml_source:C,created_at:new Date().toISOString(),updated_at:new Date().toISOString()};await u.saveResource(i)}}i(e=>e.map(e=>String(e.id)===String(a)||String(e.uid)===String(a)?e.dbml_source===C&&e.dbmlSource===C?e:{...e,dbml_source:C,dbmlSource:C}:e));let O=c===void 0?await be(a):c;if(await u.saveDraft(L.ERD,a,E,D),!x()&&O!==null)try{let e=`draft_version_${a}`;sessionStorage.setItem(e,String(O))}catch{}}catch(e){console.error(`Error in local saveDiagram:`,e)}},[a,t]),hasMoreDiagrams:m,diagramsTotal:f,isLoading:c}}function Oe(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r),g=(0,R.useRef)(0),_=(0,R.useRef)(null),v=(0,R.useRef)(e);(0,R.useEffect)(()=>{v.current=e},[e]);let y=()=>v.current||sessionStorage.getItem(`auth_mode`)===`guest`,b=(0,R.useCallback)(()=>(g.current++,g.current),[]),x=(0,R.useCallback)(()=>g.current,[]);m.current=t,h.current=r;let S=(0,R.useCallback)(async(e=!1,t=`all`,r=``,i=null,a=10,s,c)=>{if(y()){let[e,i]=await Promise.all([u.getAllResources(`notes`),u.getAllResources(`project`)]),c=new Map(i.filter(e=>!e.is_deleted).map(e=>[String(e.id),{uid:e.uid||String(e.id),name:e.name}])),l=e.filter(e=>!e.is_deleted);t!==`all`&&(l=l.filter(e=>String(e.project_id)===String(t))),r&&(l=l.filter(e=>e.title.toLowerCase().includes(r.toLowerCase())));let f=l.map(e=>({...e,projects:e.projects||c.get(String(e.project_id))||null}));f.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let h=a,g=((s===void 0?1:s)-1)*h,_=f.slice(g,g+h).map(e=>{let t=m.current.find(t=>String(t.uid??t.id)===String(e.uid??e.id));return t&&t.content!=null?{...e,content:t.content}:e});n(_),d(f.length),p(!1),o(!1);return}c?.silent||o(!0);try{let o=s===void 0?e?m.current.length:0:(s-1)*a,c=t===null||t===`null`||t===`none`?`null`:t,l=r?`&q=${encodeURIComponent(r)}`:``,u=i===null?``:`&is_public=${i}`,f=await N(`/api/notes?limit=${a}&offset=${o}&project_id=${c}${l}${u}`);if(f.ok){let t=await f.json(),r=t.data===void 0?Array.isArray(t)?t:[]:t.data,i=t.total===void 0?Array.isArray(r)?r.length:0:t.total,a=Array.isArray(r)?r:[];n(e?e=>[...e,...a]:e=>{let t=h.current,n=a.map(t=>{let n=e.find(e=>String(e.uid??e.id)===String(t.uid??t.id));return n&&n.content!=null?{...t,content:n.content}:t});if(t&&!n.some(e=>e.uid===t)){let r=e.find(e=>e.uid===t);if(r)return[...n,r]}return n}),d(i),p(a.length+o<i)}else{let e=await f.text();console.error(`Failed to fetch notes: ${f.status} ${f.statusText}`,e)}}catch(e){console.error(`Error in fetchNotes:`,e)}finally{o(!1)}},[]),C=async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(y()){let t=crypto.randomUUID(),a={id:t,uid:t,title:e,content:r||``,project_id:i||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`notes`};return await u.saveResource(a),n(e=>[a,...e]),D.success(`Note created locally`),a}try{let t=crypto.randomUUID(),a=await N(`/api/notes`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:e,project_id:i,content:r||``,uid:t})});if(a.ok){let e=await a.json();return e.uid||=t,n(t=>[e,...t]),D.success(`Note created successfully`),e}}catch(e){console.error(`Error creating note:`,e)}return null};return{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,bumpContentVersion:b,getContentVersion:x,fetchNotes:S,createNote:C,updateNote:async(e,t,r)=>{if(y()){let i=m.current.find(t=>t.uid===e);i&&(i.title=t,i.updated_at=new Date().toISOString(),await u.saveResource(i),n(n=>n.map(n=>n.uid===e?{...n,title:t}:n)),r?.silent||D.success(`Note renamed locally`));return}try{(await N(`/api/notes/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})})).ok&&(n(n=>n.map(n=>n.uid===e?{...n,title:t}:n)),r?.silent||D.success(`Note renamed successfully`))}catch{}},deleteNote:async e=>{if(y()){let t=m.current.find(t=>t.uid===e);t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),n(t=>t.filter(t=>t.uid!==e)),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Note moved to local trash`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Note moved to trash`))}catch{}},moveNoteToProject:async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(y()){let t=m.current.find(t=>t.uid===e);return t&&(t.project_id=i,await u.saveResource(t),n(t=>t.map(t=>t.uid===e?{...t,project_id:i}:t)),r?.silent||D.success(`Note moved to project locally`)),!0}try{if((await N(`/api/notes/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:i})})).ok)return n(t=>t.map(t=>t.uid===e?{...t,project_id:i}:t)),r?.silent||D.success(`Note moved to project`),!0}catch{}return!1},saveNote:(0,R.useCallback)(async e=>{if(!e.id&&!e.uid)return!1;try{let t=!y(),r=JSON.stringify({content:e.content,title:e.title,project_id:e.project_id});if(y()){let t=await u.getResource(e.id||e.uid);t&&(t.content=e.content,t.updated_at=new Date().toISOString(),await u.saveResource(t))}return await u.saveDraft(L.NOTES,e.uid||e.id,r,t),n(t=>t.map(t=>String(t.uid??t.id)===String(e.uid??e.id)?{...t,content:e.content}:t)),!0}catch(e){return console.error(`Error in local saveNote:`,e),!1}},[]),restoreNote:async e=>{if(y()){let t=await u.getResource(e);t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),n(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Note restored locally`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}/restore`,{method:`POST`})).ok&&(n(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Note restored successfully`))}catch{}},deleteNotePermanent:async e=>{if(y()){let t=m.current.find(t=>t.uid===e);t&&(await u.deleteResource(t.id),await u.clearDraft(L.NOTES,e),n(t=>t.filter(t=>t.uid!==e)),D.success(`Note permanently deleted from local`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}/permanent`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Note permanently deleted`))}catch{}},hasMoreNotes:f,notesTotal:l,isLoading:a,isItemLoading:s,selectNote:async(e,t)=>{let r=m.current.find(t=>t.uid===e)||t?.fallbackNote;if(!r?.is_deleted&&_.current!==e){_.current=e,t?.silent||c(!0);try{let a=y()?Promise.resolve(null):(async()=>{try{let t=await N(`/api/notes/${e}`);if(!t.ok)return null;let n=await t.json();try{se(e,n.title||`Untitled`,n.projects?.name)}catch{}try{I(e,n.title||`Untitled`,n.content||``)}catch{}return n}catch(e){return console.error(`Failed to load note content:`,e),null}})(),o=m.current.find(t=>t.uid===e)||t?.fallbackNote,s=o?.content!==void 0&&o.content!==null&&o.content!==``,l=()=>t?.contentVersionAtStart===void 0||g.current===t?.contentVersionAtStart;if(s){t?.fallbackNote&&!m.current.some(t=>t.uid===e)&&(m.current=[...m.current,t.fallbackNote],n(m.current));let i=await a;i&&!i.is_deleted&&l()&&n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,...i}:t):[...t,i]);let o=await u.getDraft(L.NOTES,e);if(o&&o.sync_pending&&l())try{let a=JSON.parse(o.data);if(a.content||!i?.content){n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,content:a.content}:t):t),t?.silent||D.info(`Loaded unsynced local note draft`);try{I(e,r?.title||`Untitled`,a.content||``)}catch{}}}catch{}}else{let i=await a;i&&!i.is_deleted&&l()&&n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,...i}:t):[...t,i]),c(!1);let o=await u.getDraft(L.NOTES,e);if(o&&o.sync_pending&&l())try{let a=JSON.parse(o.data);if(a.content||!i?.content){n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,content:a.content}:t):t),t?.silent||D.info(`Loaded unsynced local note draft`);try{I(e,r?.title||`Untitled`,a.content||``)}catch{}}}catch{}}i(e)}finally{c(!1),_.current=null}}},duplicateNote:async(e,t)=>{let n=m.current.find(t=>t.uid===e);if(!n)return D.error(`Source note not found`),null;let r=n.content,i=await u.getDraft(L.NOTES,e);if(i)try{let e=JSON.parse(i.data);e.content&&(r=e.content)}catch{}return await C(t,n.project_id,r)}}}function ke(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(0),[l,d]=(0,R.useState)(!1),f=(0,R.useRef)(t),p=(0,R.useRef)(e);(0,R.useEffect)(()=>{p.current=e},[e]);let m=()=>p.current||sessionStorage.getItem(`auth_mode`)===`guest`;f.current=t;let[h,g]=(0,R.useState)({diagrams:[],notes:[],drawings:[],flowcharts:[]}),_=(0,R.useCallback)(async(e=!1,t=``)=>{if(m()){let[e,r,i,a,s]=await Promise.all([u.getAllResources(`project`),u.getAllResources(`erd`),u.getAllResources(`notes`),u.getAllResources(`drawings`),u.getAllResources(`flowchart`)]),l=e.filter(e=>!e.is_deleted).map(e=>({...e,uid:e.uid||String(e.id)}));t&&(l=l.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())));let f=l.map(e=>({...e,diagrams:r.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),notes:i.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),drawings:a.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),flowcharts:s.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id))}));n(f),g({diagrams:r.filter(e=>!e.is_deleted&&!e.project_id),notes:i.filter(e=>!e.is_deleted&&!e.project_id),drawings:a.filter(e=>!e.is_deleted&&!e.project_id),flowcharts:s.filter(e=>!e.is_deleted&&!e.project_id)}),c(l.length),d(!1),o(!1);return}o(!0);try{let r=e?f.current.length:0,i=t?`&q=${encodeURIComponent(t)}`:``,a=await N(`/api/projects?limit=100&offset=${r}${i}`);if(a.ok){let t=await a.json(),i=Array.isArray(t.data)?t.data:[],o=t.total===void 0?i.length:t.total;return n(e?e=>[...e,...i]:i),t.uncategorized&&g(t.uncategorized),c(o),d(i.length+r<o),t}{let e=await a.text();console.error(`Failed to fetch projects: ${a.status} ${a.statusText}`,e)}}catch(e){console.error(`Error in fetchProjects:`,e)}finally{o(!1)}return null},[]);return{projects:t,setProjects:n,uncategorized:h,setUncategorized:g,activeProjectId:r,setActiveProjectId:i,fetchProjects:_,createProject:async e=>{if(m()){let t={id:Math.random().toString(36).substring(2,11),uid:crypto.randomUUID(),name:e,is_deleted:!1,created_at:new Date().toISOString(),type:`project`};return await u.saveResource(t),n(e=>[t,...e]),D.success(`Project created locally`),t}try{let t=await N(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e})});if(t.ok){let e=await t.json();return n(t=>[e,...t]),D.success(`Project created successfully`),e}}catch{}return null},updateProject:async(e,t)=>{if(m()){let r=await u.getResource(e);r&&(r.name=t,await u.saveResource(r),n(n=>n.map(n=>n.id===e?{...n,name:t}:n)),D.success(`Project renamed locally`));return}try{(await N(`/api/projects/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})})).ok&&(n(n=>n.map(n=>n.id===e?{...n,name:t}:n)),D.success(`Project renamed successfully`))}catch{}},deleteProject:async e=>{if(m()){let t=await u.getResource(e);if(t){let a=new Date().toISOString();t.is_deleted=!0,t.deleted_at=a,await u.saveResource(t);for(let t of[`erd`,`notes`,`drawings`,`flowchart`]){let n=(await u.getAllResources(t)).filter(t=>String(t.project_id)===String(e));for(let e of n)e.is_deleted=!0,e.deleted_at=a,await u.saveResource(e)}n(t=>t.filter(t=>t.id!==e)),r===e&&i(null),D.success(`Project and its items moved to local trash`)}return!0}try{if((await N(`/api/projects/${e}`,{method:`DELETE`})).ok)return n(t=>t.filter(t=>t.id!==e)),r===e&&i(null),D.success(`Project moved to trash`),!0}catch{}return!1},restoreProject:async e=>{if(m()){let t=await u.getResource(e);if(t){t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t);for(let t of[`erd`,`notes`,`drawings`,`flowchart`]){let n=(await u.getAllResources(t)).filter(t=>String(t.project_id)===String(e));for(let e of n)e.is_deleted=!1,e.deleted_at=void 0,await u.saveResource(e)}_(),D.success(`Project and its items restored locally`)}return}await N(`/api/projects/${e}/restore`,{method:`POST`}),_()},deleteProjectPermanent:async e=>{if(m()){await u.deleteResource(e),n(t=>t.filter(t=>t.id!==e)),D.success(`Project permanently deleted from local`);return}await N(`/api/projects/${e}/permanent`,{method:`DELETE`}),n(t=>t.filter(t=>t.id!==e))},hasMoreProjects:l,projectsTotal:s,isLoading:a}}var z=(e,t)=>String(e.id)===String(t)||String(e.uid)===String(t),Ae=(e,t)=>e?{...e,...t,data:t.data===void 0?e.data:t.data}:t;function je(e,t){let n=t.uid??t.id;return e.some(e=>z(e,n))?e.map(e=>z(e,n)?Ae(e,t):e):[t,...e]}function Me(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r),g=(0,R.useRef)(e);(0,R.useEffect)(()=>{g.current=e},[e]);let _=()=>g.current||sessionStorage.getItem(`auth_mode`)===`guest`;m.current=t,h.current=r;let v=e=>{if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return``}},y=(0,R.useCallback)(async(e=!1,t=`all`,r=``,i=null,a=10,s,c)=>{if(_()){let e=(await u.getAllResources(`drawings`)).filter(e=>!e.is_deleted);t!==`all`&&(e=e.filter(e=>e.project_id===t)),r&&(e=e.filter(e=>e.title.toLowerCase().includes(r.toLowerCase())));let i=a,c=((s===void 0?1:s)-1)*i,l=e.slice(c,c+i);n(l),d(e.length),p(!1),o(!1);return}c?.silent||o(!0);try{let o=s===void 0?e?m.current.length:0:(s-1)*a,c=t===null||t===`null`||t===`none`?`null`:t,l=r?`&q=${encodeURIComponent(r)}`:``,u=i===null?``:`&is_public=${i}`,f=await N(`/api/drawings?limit=${a}&offset=${o}&project_id=${c}${l}${u}`);if(f.ok){let t=await f.json(),r=t.data===void 0?t:t.data,i=t.total===void 0?Array.isArray(r)?r.length:0:t.total,a=Array.isArray(r)?r:[];n(t=>{let n=a.map(e=>Ae(t.find(t=>z(t,e.uid??e.id)),e));if(e){let e=new Set(n.map(e=>String(e.uid??e.id)));return[...t.filter(t=>!e.has(String(t.uid??t.id))),...n]}let r=h.current;if(r&&!n.some(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r))){let e=t.find(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r));if(e)return[...n,e]}return n}),d(i),p(a.length+o<i)}}catch(e){console.error(`Error fetching drawings:`,e)}finally{o(!1)}},[]),b=async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(_()){let t={id:Math.random().toString(36).substring(2,9),title:e,data:r||``,project_id:i||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`drawings`};return await u.saveResource(t),n(e=>[t,...e]),D.success(`Drawing created locally`),t}try{let t=crypto.randomUUID(),a=await N(`/api/drawings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:e,project_id:i,data:r||``,uid:t})});if(a.ok){let e=await a.json();return e.uid||=t,n(t=>[e,...t]),D.success(`Drawing created successfully`),e}}catch{}return null};return{drawings:t,setDrawings:n,activeDrawingUid:r,setActiveDrawingUid:i,fetchDrawings:y,createDrawing:b,updateDrawing:async(e,t,r)=>{if(_()){let i=await u.getResource(e);i&&(i.title=t,i.updated_at=new Date().toISOString(),await u.saveResource(i),n(n=>n.map(n=>z(n,e)?{...n,title:t}:n)),r?.silent||D.success(`Drawing renamed locally`));return}try{(await N(`/api/drawings/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})})).ok&&(n(n=>n.map(n=>z(n,e)?{...n,title:t}:n)),r?.silent||D.success(`Drawing renamed successfully`))}catch{}},deleteDrawing:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),n(t=>t.filter(t=>!z(t,e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Drawing moved to local trash`));return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>!z(t,e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Drawing moved to trash`))}catch{}},moveDrawingToProject:async(e,t,r)=>{if(_()){let i=await u.getResource(e);return i||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,i&&(i.project_id=t,await u.saveResource(i),n(n=>n.map(n=>z(n,e)?{...n,project_id:t,projects:void 0}:n)),r?.silent||D.success(`Drawing moved to project locally`)),!0}try{if((await N(`/api/drawings/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:t})})).ok)return n(n=>n.map(n=>z(n,e)?{...n,project_id:t,projects:void 0}:n)),r?.silent||D.success(`Drawing moved to project`),!0}catch{}return!1},saveDrawing:(0,R.useCallback)(async e=>{let t=String(e.uid??e.id);if(!t)return!1;try{let r=!_(),i={title:e.title,data:e.data||``,project_id:e.project_id||null},a=JSON.stringify(i);if(n(t=>je(t,e)),_()){let n=await u.getResource(t);n&&(n.data=e.data,n.updated_at=new Date().toISOString(),await u.saveResource(n))}return await u.saveDraft(L.DRAWINGS,t,a,r),!0}catch(e){return console.error(`Error in local saveDrawing:`,e),!1}},[]),restoreDrawing:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),n(t=>t.map(t=>z(t,e)?{...t,is_deleted:!1}:t)),D.success(`Drawing restored locally`));return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}/restore`,{method:`POST`})).ok&&(n(t=>t.map(t=>z(t,e)?{...t,is_deleted:!1}:t)),D.success(`Drawing restored successfully`))}catch{}},deleteDrawingPermanent:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null;let r=t?t.id:e;await u.deleteResource(r),await u.clearDraft(L.DRAWINGS,r),n(t=>t.filter(t=>!z(t,e))),D.success(`Drawing permanently deleted from local`);return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}/permanent`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>!z(t,e))),D.success(`Drawing permanently deleted`))}catch{}},hasMoreDrawings:f,drawingsTotal:l,duplicateDrawing:async(e,t)=>{let n=m.current.find(t=>z(t,e));if(!n)return D.error(`Source drawing not found`),null;let r=n.data,i=await u.getDraft(L.DRAWINGS,e);if(i)try{let e=JSON.parse(i.data);e.data&&(r=e.data)}catch{}return await b(t,n.project_id,r)},selectDrawing:async(e,t)=>{t?.silent||c(!0);try{if(_()){let t=await u.getResource(e);if(!t||t.is_deleted)return;n(n=>{let r=n.some(t=>z(t,e)),i={...t,data:v(t.data)};return r?n.map(t=>z(t,e)?{...t,...i}:t):[...n,i]}),i(t.uid??e)}else{let t=await u.getDraft(L.DRAWINGS,e),r=t?.data?(()=>{try{let e=JSON.parse(t.data);return e&&typeof e==`object`?e:null}catch{return null}})():null,a=v(r?.data),o=!!t?.sync_pending&&!!a,s=null,c=null;try{let t=await N(`/api/drawings/${e}`);if(t.ok){let e=await t.json();e.is_deleted||(c=e,s=v(e.data),o&&(s=a))}}catch{s=a}o&&!s&&(s=a),s===null&&(s=``),s!==null&&(n(t=>{let n=t.some(t=>z(t,e)),i=o&&r?{...c||{uid:e,id:e},...r,uid:c?.uid??e,id:c?.id??e,data:s}:{...c||{uid:e,id:e},data:s};return n?t.map(t=>z(t,e)?{...t,...i}:t):[{...i},...t]}),i(String(c?.uid??e)))}}finally{c(!1)}},isLoading:a,isItemLoading:s}}function Ne(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r);m.current=t,h.current=r;let g=(e,t)=>String(e.id)===String(t)||String(e.uid)===String(t),_=(e,t)=>e?{...e,...t,data:t.data===void 0?e.data:t.data}:t,v=e=>{if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`?t:null}catch{return null}};return{flowcharts:t,setFlowcharts:n,activeFlowchartId:r,setActiveFlowchartId:i,fetchFlowcharts:(0,R.useCallback)(async(t=!1,r=`all`,i=``,a=null,s=10,c)=>{if(e){let e=(await u.getAllResources(`flowchart`)).filter(e=>!e.is_deleted);r!==`all`&&(e=e.filter(e=>e.project_id===r)),i&&(e=e.filter(e=>e.title.toLowerCase().includes(i.toLowerCase()))),e.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let t=((c?.page??1)-1)*s,a=e.slice(t,t+s);n(a),d(e.length),p(!1),o(!1);return}c?.silent||o(!0);try{let e=c?.page===void 0?t?m.current.length:0:(c.page-1)*s,o=r===null||r===`null`||r===`none`?`null`:r,l=i?`&q=${encodeURIComponent(i)}`:``,u=a===null?``:`&is_public=${a}`,f=await N(`/api/flowcharts?limit=${s}&offset=${e}&project_id=${o}${l}${u}`);if(f.ok){let r=await f.json(),i=r.data===void 0?r:r.data,a=r.total===void 0?Array.isArray(i)?i.length:0:r.total,o=Array.isArray(i)?i:[];n(e=>{let n=o.map(t=>{let n=e.find(e=>g(e,t.uid??t.id));return _(n,t)});if(t){let t=new Set(n.map(e=>String(e.uid??e.id)));return[...e.filter(e=>!t.has(String(e.uid??e.id))),...n]}let r=h.current;if(r!=null&&!n.some(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r))){let t=e.find(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r));if(t)return[...n,t]}return n}),d(a),p(o.length+e<a)}}catch(e){console.error(`Error fetching flowcharts:`,e)}finally{o(!1)}},[e]),createFlowchart:async(t,r,i)=>{let a=r===`none`||r===`uncategorized`?null:r;if(e){let e={id:Math.random().toString(36).substring(2,9),uid:crypto.randomUUID(),title:t,data:i||``,project_id:a||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`flowchart`};return await u.saveResource(e),n(t=>[e,...t]),D.success(`Flowchart created locally`),e}try{let e=crypto.randomUUID(),r=await N(`/api/flowcharts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,project_id:a,data:i||``,uid:e})});if(r.ok){let t=await r.json();return t.uid||=e,n(e=>[t,...e]),D.success(`Flowchart created successfully`),t}}catch{}return null},updateFlowchart:async(t,r,i)=>{if(e){let e=await u.getResource(t);e&&(e.title=r,e.updated_at=new Date().toISOString(),await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,title:r}:e)),i?.silent||D.success(`Flowchart renamed locally`));return}try{(await N(`/api/flowcharts/${t}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:r})})).ok&&(n(e=>e.map(e=>g(e,t)?{...e,title:r}:e)),i?.silent||D.success(`Flowchart renamed successfully`))}catch{}},deleteFlowchart:async t=>{if(e){let e=await u.getResource(t);if(e||=m.current.find(e=>g(e,t))||null,e){if(e.is_deleted=!0,e.deleted_at=new Date().toISOString(),await u.saveResource(e),n(e=>e.filter(e=>g(e,t))),d(e=>Math.max(0,e-1)),r!==null){let e=m.current.find(e=>g(e,t));e&&String(r)===String(e.id)&&i(null)}D.success(`Flowchart moved to local trash`)}return}try{let e=m.current.find(e=>g(e,t))?.uid||t;if((await N(`/api/flowcharts/${e}`,{method:`DELETE`})).ok){if(n(e=>e.filter(e=>g(e,t))),d(e=>Math.max(0,e-1)),r!==null){let e=m.current.find(e=>g(e,t));e&&String(r)===String(e.id)&&i(null)}D.success(`Flowchart moved to trash`)}}catch{}},moveFlowchartToProject:async(t,r,i)=>{if(e){let e=await u.getResource(t);return e&&(e.project_id=r,await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,project_id:r}:e)),i?.silent||D.success(`Flowchart moved to project locally`)),!0}try{if((await N(`/api/flowcharts/${t}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:r})})).ok)return n(e=>e.map(e=>g(e,t)?{...e,project_id:r}:e)),i?.silent||D.success(`Flowchart moved to project`),!0}catch{}return!1},saveFlowchart:(0,R.useCallback)(async t=>{if(!t.id&&!t.uid)return!1;try{let r=!e,i={title:t.title,data:t.data||``,project_id:t.project_id||null},a=JSON.stringify(i);if(e){let e=await u.getResource(t.id);e&&(e.data=t.data,e.updated_at=new Date().toISOString(),await u.saveResource(e)),n(e=>e.map(e=>g(e,t.uid??t.id)?{...e,data:t.data||``}:e))}let o=t.uid||t.id;return await u.saveDraft(L.FLOWCHART,o,a,r),!0}catch(e){return console.error(`Error in local saveFlowchart:`,e),!1}},[e]),restoreFlowchart:async t=>{if(e){let e=await u.getResource(t);e||=m.current.find(e=>g(e,t))||null,e&&(e.is_deleted=!1,e.deleted_at=void 0,await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,is_deleted:!1}:e)),D.success(`Flowchart restored locally`));return}try{let e=m.current.find(e=>g(e,t))?.uid||t;(await N(`/api/flowcharts/${e}/restore`,{method:`POST`})).ok&&(n(e=>e.map(e=>g(e,t)?{...e,is_deleted:!1}:e)),D.success(`Flowchart restored successfully`))}catch{}},deleteFlowchartPermanent:async t=>{if(e){let e=await u.getResource(t);e||=m.current.find(e=>g(e,t))||null;let r=e?.id||t,i=e?.uid||t;await u.deleteResource(r),await u.clearDraft(L.FLOWCHART,i),n(e=>e.filter(e=>g(e,t))),D.success(`Flowchart permanently deleted from local`);return}try{let e=m.current.find(e=>g(e,t))?.uid||t;(await N(`/api/flowcharts/${e}/permanent`,{method:`DELETE`})).ok&&(n(e=>e.filter(e=>g(e,t))),D.success(`Flowchart permanently deleted`))}catch{}},hasMoreFlowcharts:f,flowchartsTotal:l,isLoading:a,isItemLoading:s,selectFlowchart:async(t,r)=>{r?.silent||c(!0);try{let a=await u.getDraft(L.FLOWCHART,t),o=a?v(a.data):null,s=!!a?.sync_pending,c=o?.data,l=o?.title,d=o?.project_id;if(e){let e=await u.getResource(t);if(e||=m.current.find(e=>g(e,t))||null,!e||e.is_deleted)return;n(n=>{let r=n.some(e=>g(e,t)),i={...e,...o,data:c??e.data??``};return r?n.map(e=>g(e,t)?{...e,...i}:e):[...n,i]}),i(e.uid??t)}else{let e=await N(`/api/flowcharts/${t}`);if(e.ok){let a=await e.json();if(!a.is_deleted){let e=s?{...a,title:l??a.title,data:c??a.data,project_id:d??a.project_id}:a;n(t=>t.some(t=>t.uid&&String(t.uid)===String(e.uid)||String(t.id)===String(e.id))?t.map(t=>t.uid&&String(t.uid)===String(e.uid)||String(t.id)===String(e.id)?{...t,...e}:t):[...t,e]),i(e.uid??t)}else if(s&&o){let e=r?.fallbackFlowchart||{},a={...e,...o,uid:e.uid??t,id:e.id??t,data:c??e.data??``};n(e=>e.some(e=>g(e,t))?e.map(e=>g(e,t)?{...e,...a}:e):[...e,a]),i(String(a.uid??t))}}else if(s&&o){let e=r?.fallbackFlowchart||{},a={...e,...o,uid:e.uid??t,id:e.id??t,data:c??e.data??``};n(e=>e.some(e=>g(e,t))?e.map(e=>g(e,t)?{...e,...a}:e):[...e,a]),i(String(a.uid??t))}}}finally{c(!1)}}}}function Pe(e=!1){let[t,n]=(0,R.useState)({diagrams:[],dbClients:[],notes:[],drawings:[],flowcharts:[],projects:[]}),[r,i]=(0,R.useState)(!0),a=(0,R.useRef)(e);(0,R.useEffect)(()=>{a.current=e},[e]);let o=()=>a.current||sessionStorage.getItem(`auth_mode`)===`guest`,s=(0,R.useCallback)(async()=>{if(o()){try{let[e,t,r,i,a]=await Promise.all([u.getAllResources(`erd`),u.getAllResources(`notes`),u.getAllResources(`drawings`),u.getAllResources(`flowchart`),u.getAllResources(`project`)]),o=e=>e.filter(e=>e.is_deleted);n({diagrams:o(e),dbClients:[],notes:o(t),drawings:o(r),flowcharts:o(i),projects:o(a)})}catch(e){console.error(`Error fetching guest trash:`,e)}i(!1);return}i(!0);try{let e=await N(`/api/trash`);if(e.ok){let t=await e.json(),r={diagrams:Array.isArray(t.diagrams)?t.diagrams.sort((e,t)=>t.id-e.id):[],dbClients:Array.isArray(t.db_clients)?t.db_clients.sort((e,t)=>t.id-e.id):[],notes:Array.isArray(t.notes)?t.notes.sort((e,t)=>t.id-e.id):[],drawings:Array.isArray(t.drawings)?t.drawings.sort((e,t)=>t.id-e.id):[],flowcharts:Array.isArray(t.flowcharts)?t.flowcharts.sort((e,t)=>t.id-e.id):[],projects:Array.isArray(t.projects)?t.projects.sort((e,t)=>t.id-e.id):[]};n(r)}}catch(e){console.error(`Error fetching trash:`,e)}finally{i(!1)}},[]),c=async e=>{if(o()){let t=await u.getResource(e);return t?(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),s(),D.success(`Restored successfully locally`),!0):!1}return!1};return{trashData:t,setTrashData:n,fetchTrash:s,restoreNote:async e=>{if(o())return c(e);try{(await N(`/api/notes/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Note restored successfully`)):D.error(`Failed to restore note`)}catch{D.error(`Error restoring note`)}},restoreDrawing:async e=>{if(o())return c(e);try{(await N(`/api/drawings/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Drawing restored successfully`)):D.error(`Failed to restore drawing`)}catch{D.error(`Error restoring drawing`)}},restoreFlowchart:async e=>{if(o())return c(e);try{(await N(`/api/flowcharts/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Flowchart restored successfully`)):D.error(`Failed to restore flowchart`)}catch{D.error(`Error restoring flowchart`)}},restoreDbClient:async e=>{if(!(await N(`/api/db-clients/${e}/restore`,{method:`POST`})).ok){D.error(`Failed to restore DB Client`);return}await s(),D.success(`DB Client restored successfully`)},deleteDbClientPermanent:async e=>{if(!(await N(`/api/db-clients/${e}/permanent`,{method:`DELETE`})).ok){D.error(`Failed to permanently delete DB Client`);return}D.success(`DB Client permanently deleted`)},isLoading:r}}function Fe(){let[e,t]=(0,R.useState)(navigator.onLine);return(0,R.useEffect)(()=>{let e=()=>t(!0),n=()=>t(!1);return window.addEventListener(`online`,e),window.addEventListener(`offline`,n),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,n)}},[]),e}function Ie(e,t=!1){let[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(!1),[a,o]=(0,R.useState)(!1),c=(0,R.useRef)(null),l=(0,R.useCallback)((e,t)=>{if(!e)return e;try{if(t===L.DRAWINGS){let t;try{t=JSON.parse(e)}catch{return e}if(t&&typeof t==`object`&&`data`in t&&typeof t.data==`string`)try{let e=JSON.parse(t.data);if(e.files){let n=!1,r={...e.files};if(Object.keys(r).forEach(e=>{let t=r[e];if(t&&typeof t.dataURL==`string`){let i=t.dataURL.replace(/\\n/g,``).replace(/\\r/g,``).trim(),a=i.startsWith(`data:`),o=i.startsWith(`http://`)||i.startsWith(`https://`);o&&i!==t.dataURL?(r[e]={...t,dataURL:i},n=!0):!a&&!o&&(delete r[e],n=!0)}}),n)return console.warn(`Healing corrupted files map in Drawing draft`),t.data=JSON.stringify({...e,files:r}),JSON.stringify(t)}}catch{}}}catch(e){console.error(`Error during draft healing:`,e)}return e},[]),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(t);(0,R.useEffect)(()=>{p.current=t},[t]);let m=()=>p.current||sessionStorage.getItem(`auth_mode`)===`guest`,h=(0,R.useRef)(!1),g=(0,R.useCallback)(async()=>{try{let e=await u.getAllPendingSyncs();f(e.length>0)}catch(e){console.warn(`Failed to check pending sync status:`,e)}},[]),_=(0,R.useCallback)(async()=>{if(!(!e||!navigator.onLine||m())){if(i.current){h.current=!0;return}i.current=!0,r(!0),o(!1);try{let e=!0;for(;e;){h.current=!1;let t=await u.getAllPendingSyncs();if(t.length>0)for(let n of t)try{let t=``,r={},i={},a=l(n.data,n.type);try{i=JSON.parse(a)}catch{if(n.type!==L.DRAWINGS&&n.type!==L.FLOWCHART)throw Error(`Critical JSON parse error`)}if(n.type===L.NOTES)t=`/api/notes/${n.id}`,r={title:i.title,content:i.content,project_id:i.project_id};else if(n.type===L.ERD){if(t=`/api/diagrams/save/${n.id}`,i._type===`production_db_positions`){let e=await be(n.id);r={data:{nodes:i.nodes,viewport:i.viewport,_type:i._type},viewport:i.viewport,dbml_source:i.dbml_source??``,expectedVersion:e===null?void 0:e}}else{let e=(i.nodes||[]).map(e=>({...e.data,x:e.position?.x||0,y:e.position?.y||0})),t=(i.edges||[]).map(s),a=await be(n.id);r={entities:e,relationships:t,viewport:i.viewport,dbml_source:i.dbml_source??``,expectedVersion:a===null?void 0:a}}}else n.type===L.FLOWCHART?(t=`/api/flowcharts/${n.id}`,r={title:i.title,data:i.data||n.data,project_id:i.project_id}):n.type===L.DRAWINGS&&(t=`/api/drawings/${n.id}`,r={title:i.title,data:i.data||n.data,project_id:i.project_id});if(t){let i=n.updated_at,a=await N(t,{method:n.type===L.ERD?`POST`:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)});if(a.status===429){e=!1;break}if(a.status===409){try{let e=await a.json();await Se(n.id),n.type===L.ERD&&e.currentVersion!==void 0&&await xe(n.id,e.currentVersion)}catch{}continue}if(a.status===404){console.warn(`[SyncService] Draft ${n.type}#${n.id} returned 404 — marking as synced (data preserved in IndexedDB)`),await u.markSynced(n.type,n.id,i);continue}if(a.ok){let e=await a.json();n.type===L.ERD&&e.version!==void 0&&await xe(n.id,e.version),await u.markSynced(n.type,n.id,i)}}}catch{o(!0)}e=h.current}}catch{o(!0)}finally{r(!1),i.current=!1,g()}}},[e,t,l,g]),v=(0,R.useCallback)(()=>{m()||(f(!0),c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{_()},800))},[_]);(0,R.useEffect)(()=>{g(),setTimeout(()=>{navigator.onLine&&e&&!t&&_()},2e3);let n=()=>{_()};return window.addEventListener(`online`,n),()=>{window.removeEventListener(`online`,n),c.current&&clearTimeout(c.current)}},[_,e,t]);let y=(0,R.useCallback)(async(n,r)=>{if(!(!e||t))try{let e=(await u.getAllPendingSyncs()).filter(e=>e.type===n);for(let t of e){let e=r.find(e=>String(e.id)===String(t.id));e&&new Date(e.updated_at).getTime()>t.updated_at&&await u.deleteDraft(n,t.id)}}catch(e){console.error(`Error in checkAndClearStaleDrafts:`,e)}},[e,t]);return(0,R.useEffect)(()=>{(async()=>{if(!(!e||t)&&localStorage.getItem(`erd-builder-migration-diagram-to-erd`)!==`done`)try{let e=(await u.getAllPendingSyncs()).filter(e=>e.type===`diagram`);if(e.length>0)for(let t of e)await u.deleteDraft(`diagram`,t.id);localStorage.setItem(`erd-builder-migration-diagram-to-erd`,`done`)}catch(e){console.error(`Migration failed:`,e)}})()},[e,t]),{syncDrafts:_,triggerDebouncedSync:v,isSyncing:n,syncError:a,healDraftData:l,checkAndClearStaleDrafts:y,hasPendingSyncs:d,refreshPendingStatus:g}}function Le(){let[e,t]=(0,R.useState)(null),[n,r]=(0,R.useState)(!1);return(0,R.useEffect)(()=>{let e=e=>{e.preventDefault(),t(e),r(!0)},n=()=>{t(null),r(!1)};return window.addEventListener(`beforeinstallprompt`,e),window.addEventListener(`appinstalled`,n),()=>{window.removeEventListener(`beforeinstallprompt`,e),window.removeEventListener(`appinstalled`,n)}},[]),{isInstallable:n,installApp:(0,R.useCallback)(async()=>{if(!e)return;e.prompt();let{outcome:n}=await e.userChoice;t(null),r(!1)},[e])}}var Re=(e,t,n)=>({broadcastNodeMove:(0,R.useCallback)((e,t,n)=>{},[]),broadcastNodeUpdate:(0,R.useCallback)((e,t)=>{},[]),broadcastEdgesUpdate:(0,R.useCallback)(e=>{},[])}),ze=(e,t)=>`${e}\u0000${t}`,Be=(e,t)=>`${e.toLowerCase()}\u0000${t.toLowerCase()}`;function Ve(e,t,n){if(!t)return;let r=e.get(t);r?r.push(n):e.set(t,[n])}function He(e){return e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``)||null}function Ue(e){let t=He(e.sourceHandle),n=He(e.targetHandle);return!t||!n?null:[`${e.source}:${t}`,`${e.target}:${n}`].sort().join(`::`)}function We(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map;for(let t of e)for(let e of t.data.columns){let n=[String(e.id)],i=e.uid;i&&i!==e.id&&n.push(String(i));for(let i of n)r.set(ze(t.id,i),e)}let i=new Map,a=new Map,o=new Map;for(let e of t){Ve(i,Ue(e),e);let t=He(e.sourceHandle),s=He(e.targetHandle),c=n.get(e.source),l=n.get(e.target),u=t&&c?r.get(ze(c.id,t)):void 0,d=s&&l?r.get(ze(l.id,s)):void 0;if(!c||!l||!u||!d)continue;let f=u.name.toLowerCase(),p=d.name.toLowerCase();Ve(a,[`${c.id}:${f}`,`${l.id}:${p}`].sort().join(`::`),e),Ve(o,Be(c.data.name,f),e)}return{nodesById:n,columnsByNodeAndId:r,edgesByRelationKey:i,edgesByRelationName:a,edgesBySourceColumnName:o}}function Ge(e){return e&&e.replace(/^col-col-/,`col-`)}function Ke(e,t,n,r,i){let[a,s,c]=C([]),[l,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(0),m=(0,R.useRef)(``),[h,g,_]=b([]),[y,w]=(0,R.useState)(null),[T,O]=(0,R.useState)(null),k=(0,R.useRef)({x:0,y:0,zoom:1}),{setViewport:A,fitView:j,getNodes:M,getEdges:ee}=x(),P=(0,R.useCallback)(e=>{c(e),e.forEach(e=>{e.type===`position`&&e.position&&i?.broadcastNodeMove?.(e.id,e.position.x,e.position.y)})},[c,i?.broadcastNodeMove]),te=(0,R.useCallback)(e=>{_(e),setTimeout(()=>{i?.broadcastEdgesUpdate?.(h)},0)},[_,i?.broadcastEdgesUpdate,h]),{takeSnapshot:ne,undo:re,redo:ie,canUndo:ae,canRedo:oe,clearHistory:se}=S(),F=(0,R.useCallback)((e,t)=>{ne(e,t),p(e=>e+1)},[ne]),ce=(0,R.useCallback)(()=>{let e=re(a,h);e&&(s(e.nodes),g(e.edges))},[re,a,h,s,g]),le=(0,R.useCallback)(()=>{let e=ie(a,h);e&&(s(e.nodes),g(e.edges))},[ie,a,h,s,g]),I=(0,R.useRef)(!1),ue=(0,R.useRef)(t);(0,R.useEffect)(()=>{ue.current=t},[t]);let de=()=>ue.current||sessionStorage.getItem(`auth_mode`)===`guest`,fe=(0,R.useRef)(null),pe=(0,R.useCallback)(async(e,t,n)=>{if(fe.current===e)return null;fe.current=e,n?.silent||(d(!0),I.current=!0,t(e),s([]),g([]));try{await u.getDraft(L.ERD,e);let i;if(de()){let t=await u.getResource(e);if(t||=(await u.getAllResources(`erd`)).find(t=>t.uid===e)||null,!t)return d(!1),fe.current=null,null;i=t}else{let t=await N(`/api/diagrams/${e}`);if(!t.ok){let n=await t.text();return console.error(`Failed to fetch diagram ${e}:`,t.status,n),D.error(`Failed to load diagram details`),d(!1),fe.current=null,null}i=await t.json()}if(!i||i.is_deleted)return d(!1),null;if(n?.probe)return i;i.entities||(i.entities=[]),i.relationships||(i.relationships=[]),r(`erd`),se();let a=i,o=i.data;if(o&&o._type===`production_db_positions`&&o.source)try{let e=o.source,t=await N(`/api/diagrams/fetch-schema`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:e.type,host:e.host,port:e.port,user:e.user,password_encrypted:e.password_encrypted,database:e.database})});if(t.ok){let e=await t.json(),n=o.nodes||{},r=(e.schema||[]).map(e=>{let t=n[e.table_name]||{};return{id:e.table_name,name:e.table_name,x:t.x??0,y:t.y??0,color:t.color??`#6b7280`,columns:(e.columns||[]).map(t=>({...v(t,`${e.table_name}.${t.name}`),_is_fk:(e.foreign_keys||[]).some(e=>e.column===t.name)})),collapsed:t.collapsed??!1,hidden_columns:t.hidden_columns??[],note:t.note??``}}),s=[];(e.schema||[]).forEach(e=>{(e.foreign_keys||[]).forEach(t=>{s.push({id:crypto.randomUUID(),source_entity_id:e.table_name,target_entity_id:t.ref_table,source_column_id:`${e.table_name}.${t.column}`,target_column_id:`${t.ref_table}.${t.ref_column}`,source_handle:`col-${e.table_name}.${t.column}-source`,target_handle:`col-${t.ref_table}.${t.ref_column}-target`,label:``,type:`one-to-many`,data:{on_delete:t.on_delete,on_update:t.on_update,constraint_name:t.constraint_name}})})}),a={...i,entities:r,relationships:s,viewport_x:o.viewport?.x??i.viewport_x,viewport_y:o.viewport?.y??i.viewport_y,viewport_zoom:o.viewport?.zoom??i.viewport_zoom}}}catch(e){console.error(`Failed to fetch live schema:`,e),D.error(`Failed to load production DB schema`)}a.entities||(a.entities=[]),a.relationships||(a.relationships=[]);let c=a.entities.map(e=>({id:e.id,type:`entity`,position:{x:e.x,y:e.y},data:e})),l=a.relationships.map(e=>{let t=a.entities.find(t=>t.id===e.source_entity_id),n=a.entities.find(t=>t.id===e.target_entity_id),r=Ge(e.source_handle),i=Ge(e.target_handle);if(t&&n){let a=Number(t.x)||0,o=Number(n.x)||0,s=(e.source_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),c=(e.target_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);r=s?a<o?`col-${s}-source`:`col-${s}-source-l`:r,i=c?a<o?`col-${c}-target`:`col-${c}-target-r`:i}let o=(e.source_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),s=(e.target_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);return{id:e.id,source:e.source_entity_id,target:e.target_entity_id,sourceHandle:r||(o?`col-${o}-source`:void 0),targetHandle:i||(s?`col-${s}-target`:void 0),label:e.label,data:{on_delete:e.on_delete??e.onDelete,on_update:e.on_update??e.onUpdate,constraint_name:e.constraint_name??e.constraintName},type:`smoothstep`,animated:!1}});if(n?.isStale&&n.isStale())return;a.uid&&String(a.uid)!==String(e)&&t(a.uid),s(e=>n?.force||e.length===0?c:e),g(e=>n?.force||e.length===0?l:e),w(null);let f=a.viewport_x,p=a.viewport_y,m=a.viewport_zoom,h=f!==void 0&&p!==void 0&&m&&(f!==0||p!==0);return h&&(A({x:f,y:p,zoom:m},{duration:0}),k.current={x:f,y:p,zoom:m}),d(!1),!h&&c.length>0&&setTimeout(()=>j({padding:.2,duration:0}),100),!a.viewport_x&&c.length===0&&setTimeout(()=>A({x:0,y:0,zoom:1},{duration:0}),100),setTimeout(()=>{I.current=!1},2e3),a}catch{d(!1)}finally{fe.current=null}},[se,s,g,w,A]),me=(0,R.useCallback)(e=>e?e.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``):null,[]),he=(0,R.useCallback)(e=>{let t=me(e.sourceHandle),n=me(e.targetHandle);return!t||!n?null:[`${e.source}:${t}`,`${e.target}:${n}`].sort().join(`::`)},[me]),ge=(0,R.useCallback)(e=>{let t=new Set,n=[],r=!1;for(let i of e){let e=he(i);if(!e){n.push(i);continue}if(t.has(e)){r=!0;continue}t.add(e),n.push(i)}return r?n:e},[he]),_e=(0,R.useCallback)(t=>{if(e)return;let n=We(a,h),r=n.nodesById.get(t.source),s=n.nodesById.get(t.target);if(r&&s&&t.sourceHandle&&t.targetHandle){let e=t.sourceHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),i=t.targetHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),a=n.columnsByNodeAndId.get(ze(r.id,e)),o=n.columnsByNodeAndId.get(ze(s.id,i));if(a&&o&&a.type!==o.type){D.error(`Type Mismatch`,{description:`Cannot connect ${a.type} to ${o.type}. Relationships must have matching data types.`,duration:4e3});return}}let c=me(t.sourceHandle),l=me(t.targetHandle),u=r&&c?n.columnsByNodeAndId.get(ze(r.id,c)):void 0,d=s&&l?n.columnsByNodeAndId.get(ze(s.id,l)):void 0,f=u?.is_pk&&!d?.is_pk?s:r,p=u?.is_pk&&!d?.is_pk?d:u,m=f&&p?o(f.data.name,p.name):void 0,_={...t,animated:!1,type:`smoothstep`,label:`1:N`,data:m?{constraint_name:m}:void 0},v=he(_);if(v&&r&&s){let e=me(_.sourceHandle),t=me(_.targetHandle),i=n.columnsByNodeAndId.get(ze(r.id,e||``))?.name?.toLowerCase(),a=n.columnsByNodeAndId.get(ze(s.id,t||``))?.name?.toLowerCase(),o=i?`${_.source}:${i}`:null,c=a?`${_.target}:${a}`:null,l=!!v&&n.edgesByRelationKey.has(v),u=o&&c?n.edgesByRelationName.has([o,c].sort().join(`::`)):!1;if(l||u){D.info(`Relation already exists`);return}if(i){let e=n.edgesBySourceColumnName.get(Be(r.data.name,i))?.[0];if(e){let t=n.nodesById.get(e.target);D.error(`FK already related`,{description:`This column is already related to ${t?.data.name||`another table`}. One FK column can only point to one PK.`,duration:4e3});return}}}F(a,h);let y=ge(E(_,h));g(y),i?.broadcastEdgesUpdate?.(y)},[g,e,a,F,h,i?.broadcastEdgesUpdate,ge,he,me]),ve=(e,t)=>{let n=e,r=1;for(;t.some(e=>e.data.name.toLowerCase()===n.toLowerCase());)n=`${e}_${r}`,r++;return n},ye=()=>{let e=Math.random().toString(36).substring(2,11),t=ve(`NewTable`,a),{x:n,y:r,zoom:o}=k.current,c=-n/o+(window.innerWidth-260)/(2*o),l=-r/o+window.innerHeight/(2*o),u={id:e,name:t,x:c-100,y:l-50,color:`#6b7280`,columns:[{id:Math.random().toString(36).substring(2,11),name:`id`,type:`INT`,is_pk:!0,is_nullable:!1,sort_order:0}]},d={id:e,type:`entity`,position:{x:u.x,y:u.y},data:u};F(a,h),s(e=>{let t=e.concat(d);return i?.broadcastNodeUpdate?.(d.id,d.data),t})},be=(0,R.useCallback)(e=>{if(a.some(t=>t.id!==e.id&&t.data.name.toLowerCase()===e.name.toLowerCase())){D.error(`Duplicate Table Name`,{description:`A table with the name "${e.name}" already exists.`});return}F(a,h),s(t=>{let n=t.map(t=>t.id===e.id?(i?.broadcastNodeUpdate?.(t.id,e),{...t,data:e}):t);return g(t=>{let r=[];if(t.forEach(t=>{if(t.source===e.id||t.target===e.id){let e=n.find(e=>e.id===t.source),i=n.find(e=>e.id===t.target);if(e&&i&&t.sourceHandle&&t.targetHandle){let n=t.sourceHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),a=t.targetHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),o=e.data.columns.find(e=>e.id===n),s=i.data.columns.find(e=>e.id===a);o&&s&&o.type!==s.type&&r.push(t.id)}}}),r.length>0){setTimeout(()=>{D.warning(`Relations Removed`,{description:`Some relations were automatically deleted because the column types no longer matched.`,duration:5e3})},0);let e=t.filter(e=>!r.includes(e.id));return i?.broadcastEdgesUpdate?.(e),e}return[...t]}),n})},[s,g,F,a,h,i?.broadcastNodeUpdate,i?.broadcastEdgesUpdate]),xe=(0,R.useCallback)(e=>{F(a,h),s(t=>t.filter(t=>t.id!==e));let t=h.filter(t=>t.source!==e&&t.target!==e);g(t),i?.broadcastEdgesUpdate?.(t),w(null),i?.onDeleteEntity?.(e)},[s,g,F,a,h,i?.broadcastEdgesUpdate,i?.onDeleteEntity]),Se=(0,R.useCallback)(e=>{let t=a.find(t=>t.id===e);if(!t)return;let n=Math.random().toString(36).substring(2,11),r=ve(t.data.name,a),o=t.data.columns.map(e=>({id:Math.random().toString(36).substring(2,11),name:e.name,type:e.type,is_pk:e.is_pk,is_nullable:e.is_nullable,enum_name:e.enum_name,enum_values:e.enum_values,sort_order:e.sort_order,_is_fk:!1})),c={x:t.position.x+36,y:t.position.y+36},l={id:n,type:`entity`,position:c,data:{id:n,name:r,x:c.x,y:c.y,color:t.data.color,columns:o}};F(a,h),s(e=>{let t=e.concat(l);return i?.broadcastNodeUpdate?.(l.id,l.data),t}),w(n),D.success(`Duplicated as "${r}"`,{description:`${o.length} column${o.length===1?``:`s`} copied. Relationships were not duplicated.`})},[a,F,s,w,i?.broadcastNodeUpdate]),Ce=(e,t)=>{F(a,h);let n=typeof t==`string`?{label:t}:t,r=h.map(t=>t.id===e?{...t,...n,data:{...t.data||{},...n.data||{}}}:t);g(r),i?.broadcastEdgesUpdate?.(r)},we=(0,R.useCallback)(e=>e&&(e.endsWith(`-source`)?e.replace(/-source$/,`-source-l`):e.endsWith(`-source-l`)?e.replace(/-source-l$/,`-source`):e.endsWith(`-target`)?e.replace(/-target$/,`-target-r`):e.endsWith(`-target-r`)?e.replace(/-target-r$/,`-target`):e),[]),Te=(0,R.useCallback)(e=>{if(!h.find(t=>t.id===e))return;let t=h.map(t=>t.id===e?{...t,sourceHandle:we(t.sourceHandle),targetHandle:we(t.targetHandle)}:t);F(a,h),g(t),i?.broadcastEdgesUpdate?.(t)},[h,a,g,F,i?.broadcastEdgesUpdate,we]),Ee=e=>{F(a,h);let t=h.filter(t=>t.id!==e);g(t),i?.broadcastEdgesUpdate?.(t),O(null)},De=(0,R.useCallback)((e,t,n)=>{let r=e.sourceHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),i=e.targetHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);if(!r||!i)return e;let a=t.data.columns.find(e=>e.id===r),o=n.data.columns.find(e=>e.id===i);if(a&&o&&a.is_pk&&!o.is_pk){let a=n,o=t,s=i,c=r,l=a.position.x||0,u=o.position.x||0;return{...e,source:e.target,target:e.source,sourceHandle:l<u?`col-${s}-source`:`col-${s}-source-l`,targetHandle:l<u?`col-${c}-target`:`col-${c}-target-r`}}let s=e.sourceHandle?e.sourceHandle.endsWith(`-target`)||e.sourceHandle.endsWith(`-target-r`):!1,c=e.targetHandle?e.targetHandle.endsWith(`-source`)||e.targetHandle.endsWith(`-source-l`):!1;if(e.sourceHandle&&e.targetHandle&&!s&&!c)return e;let l=t.position.x||0,u=n.position.x||0,d=l<u?`-source`:`-source-l`,f=l<u?`-target`:`-target-r`;return{...e,sourceHandle:e.sourceHandle?e.sourceHandle.replace(/-(source|target)(-(l|r))?$/,d):`col-${r}${d}`,targetHandle:e.targetHandle?e.targetHandle.replace(/-(source|target)(-(l|r))?$/,f):`col-${i}${f}`}},[]);(0,R.useEffect)(()=>{let e=JSON.stringify(h.map(e=>({s:e.source,sh:e.sourceHandle,t:e.target,th:e.targetHandle}))),t=new Map(a.map(e=>[e.id,e]));g(e=>{let n=!1,r=e.map(e=>{let r=t.get(e.source),i=t.get(e.target);if(!r||!i)return e;let a=De(e,r,i);return a.source!==e.source||a.target!==e.target||a.sourceHandle!==e.sourceHandle||a.targetHandle!==e.targetHandle?(n=!0,a):e}),i=ge(n?r:e);return i===e?e:i}),e!==m.current&&(m.current=e,s(e=>{let t={};h.forEach(e=>{t[e.source]||(t[e.source]=new Set);let n=e.sourceHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);n&&t[e.source].add(n)});let n=!1,r=e.map(e=>{let r=t[e.id]||new Set,i=!1,a=e.data.columns.map(e=>{let t=!e.is_pk&&r.has(e.id);return e._is_fk!==t&&(i=!0),{...e,_is_fk:t}});return i?(n=!0,{...e,data:{...e.data,columns:a}}):e});return n?r:e}))},[h,De,s,g,ge]);let Oe=(0,R.useCallback)(()=>{let e=M(),t=ee(),n=new Map(e.map(e=>[e.id,e]));g(e=>{let t=!1,r=e.map(e=>{let r=n.get(e.source),i=n.get(e.target);if(!r||!i)return e;let a=De(e,r,i);return a.source!==e.source||a.target!==e.target||a.sourceHandle!==e.sourceHandle||a.targetHandle!==e.targetHandle?(t=!0,a):e}),i=ge(t?r:e);return i===e?e:i}),F(e,t)},[g,F,M,ee,De,ge]),ke=(0,R.useCallback)((t,n)=>{if(!e&&!I.current){let e=k.current;(Math.abs((e.x||0)-n.x)>.5||Math.abs((e.y||0)-n.y)>.5||Math.abs((e.zoom||1)-n.zoom)>.001)&&(k.current=n)}},[e]);return(0,R.useEffect)(()=>{let e=e=>{let t=e.target;if(t?.matches(`input, textarea, [contenteditable="true"]`)||t?.closest(`.cm-editor`))return;let n=e.key.toLowerCase();(e.ctrlKey||e.metaKey)&&n===`z`?(e.preventDefault(),e.shiftKey?oe&&le():ae&&ce()):(e.ctrlKey||e.metaKey)&&n===`y`&&(e.preventDefault(),oe&&le())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[ce,le,ae,oe]),(0,R.useEffect)(()=>{let e=e=>{let t=e.detail;xe(t)};return window.addEventListener(`deleteEntity`,e),()=>{window.removeEventListener(`deleteEntity`,e)}},[xe]),{nodes:a,setNodes:s,onNodesChange:P,edges:h,setEdges:g,onEdgesChange:te,selectedNodeId:y,setSelectedNodeId:w,selectedEdgeId:T,setSelectedEdgeId:O,onConnect:_e,addEntity:ye,duplicateEntity:Se,updateEntity:be,deleteEntity:xe,handleEdgeUpdate:Ce,handleEdgeFlip:Te,deleteEdge:Ee,handleDiagramSelect:pe,viewportRef:k,undo:ce,redo:le,canUndo:ae,canRedo:oe,takeSnapshot:F,isItemLoading:l,saveCounter:f,onNodeDragStop:Oe,onMoveEnd:ke,extractColumnIdFromHandle:me,getRelationKey:he,dedupeEdgesByRelation:ge}}function qe(e,t){let n=t===`mysql`?"`":`"`;return`${n}${e.replace(new RegExp(n,`g`),`${n}${n}`)}${n}`}function B(e,t){return t.map(t=>e.columns.find(e=>e.id===t)?.name).filter(e=>!!e)}function Je(e,t){return(e||t).replace(/\s+/g,`_`)}function Ye(e,t){let n=qe(e.name.toLowerCase(),t),r=[],i=new Set(e.columns.filter(e=>e.is_unique).map(e=>e.name)),a=new Set(e.columns.filter(e=>e.is_pk).map(e=>e.name));for(let o of e.constraints||[]){let s=B(e,o.column_ids||[]);if(s.length===0)continue;let c=s.map(e=>qe(e,t)).join(`, `),l=qe(Je(o.name,`${e.name}_${o.kind}_${s.join(`_`)}`),t);if(o.kind===`primary_key`){if(s.length===1&&a.has(s[0]))continue;r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} PRIMARY KEY (${c});`)}else if(o.kind===`unique`){if(s.length===1&&i.has(s[0]))continue;r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} UNIQUE (${c});`)}else o.kind===`check`&&o.expression&&r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} CHECK (${o.expression});`)}for(let a of e.indexes||[]){let o=B(e,a.column_ids||[]);if(o.length===0||o.length===1&&a.is_unique&&i.has(o[0]))continue;let s=qe(Je(a.name,`${e.name}_${a.is_unique?`unique`:`idx`}_${o.join(`_`)}`),t),c=a.is_unique?`UNIQUE `:``,l=a.algorithm?String(a.algorithm).toUpperCase():``,u=l&&t===`mysql`?` USING ${l}`:``,d=l&&t===`postgresql`?` USING ${l.toLowerCase()}`:``;r.push(`CREATE ${c}INDEX ${s}${u} ON ${n}${d} (${o.map(e=>qe(e,t)).join(`, `)});`)}return r.join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-js-C7JaR3Vq.js","assets/core-DNaw6KYU.js","assets/app-Dwb58oCT.js","assets/image-DXXwzuA0.js","assets/index-C3r2kpyC.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/react-dom-CGnP4YFq.js","assets/preload-helper-Czpn1I53.js","assets/note-importer-B6ql7t2r.js","assets/dist--spER_Rx.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/utils-TcK2FSyg.js","assets/api-B4Lp0KNi.js","assets/image-compression-COYPhRs3.js","assets/downloadSVG-sVCad7p8.js","assets/WorkspaceContext-M-vT9OAZ.js","assets/vanilla--C5Lp_AM.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/AIActionContext-sBtUZeB9.js","assets/useCompositeItem-ZIV61RjL.js","assets/floating-ui.utils-DrtUanoU.js","assets/createLucideIcon-CyJfQrak.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/input-BDCM7QEk.js","assets/link-2-DBo-eQZM.js","assets/wand-sparkles-C9YiTYBh.js","assets/popover-B51mz7qL.js","assets/scroll-area-CQ2HKq3N.js","assets/card-Dy6p8t6g.js","assets/textarea-Bvirh6bi.js","assets/extends-CvVTau-c.js","assets/table-DCsJJ7Zs.js","assets/label-Co-it7VP.js","assets/index-DuOqxUTN.css","assets/window-Cybt16bF.js","assets/event-DtFyPu7u.js"])))=>i.map(i=>d[i]);
2
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{A as i,C as a,D as o,E as s,I as c,L as l,O as u,a as d,b as f,i as p,k as m,r as h,t as g,x as _,y as v,z as y}from"./note-importer-B6ql7t2r.js";import{f as b,m as x,n as S,p as C,t as w}from"./downloadSVG-sVCad7p8.js";import{G as T,_ as E,n as D,s as O}from"./dist--spER_Rx.js";import{n as k,t as A}from"./WorkspaceContext-M-vT9OAZ.js";import{c as j,r as M,s as ee,t as N}from"./api-B4Lp0KNi.js";import{t as P}from"./dist-js-DXG5pDMi.js";var te=`hermes:note-titles`,ne=864e5,re=`hermes:note-content`,ie=864e5;function ae(){try{let e=localStorage.getItem(te);return e?JSON.parse(e):{}}catch{return{}}}function oe(e){try{localStorage.setItem(te,JSON.stringify(e))}catch{}}function se(e,t,n){let r=ae();r[e]={title:t,projectName:n,updatedAt:Date.now()},oe(r)}function F(e){let t=ae(),n=t[e];return n?Date.now()-n.updatedAt>ne?(delete t[e],oe(t),null):n:null}function ce(){try{let e=localStorage.getItem(re);return e?JSON.parse(e):{}}catch{return{}}}function le(e){try{localStorage.setItem(re,JSON.stringify(e))}catch{}}function I(e,t,n){let r=ce();r[e]={title:t,content:n,updatedAt:Date.now()},le(r)}function ue(e){let t=ce(),n=t[e];return n?Date.now()-n.updatedAt>ie?(delete t[e],le(t),null):n:null}var L=function(e){return e.ERD=`erd`,e.NOTES=`notes`,e.FLOWCHART=`flowchart`,e.DRAWINGS=`drawings`,e}({}),R=e(t(),1),de=()=>{if(typeof window>`u`)return null;let e=window.location.pathname.match(/^\/(view|share)\/(diagram|note|drawing|flowchart|erd|notes|drawings)\/([^/]+)/);return e?{type:{diagram:`erd`,erd:`erd`,note:`notes`,notes:`notes`,drawing:`drawings`,drawings:`drawings`,flowchart:`flowchart`}[e[2]]||e[2],uid:e[3]}:null},fe=R.memo(function(e){let{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,isAuthenticated:a,notesSaveTimeout:o,view:s,setView:d,setSidebarView:f}=e;l();let p=c(),m=(0,R.useRef)(null);return(0,R.useEffect)(()=>{let e=()=>{window.dispatchEvent(new CustomEvent(`notes:open-export-modal`))},t=()=>{window.dispatchEvent(new CustomEvent(`notes:open-import-modal`))};return window.addEventListener(`notes:open-export`,e),window.addEventListener(`notes:open-import`,t),()=>{window.removeEventListener(`notes:open-export`,e),window.removeEventListener(`notes:open-import`,t)}},[]),(0,R.useEffect)(()=>{if(a!==null||de())return;let e=p.pathname.match(/^\/notes\/([^/]+)/);if(e){let r=e[1],a=F(r),o=ue(r);a||o?t.some(e=>e.uid===r)||(d(`notes`),f(`notes`),i(r),n(e=>e.some(e=>e.uid===r)?e:[...e,{uid:r,title:o?.title||a?.title||`Untitled`,projects:a?.projectName?{name:a.projectName}:void 0,content:o?.content}])):u.getDraft(L.NOTES,r).then(e=>{if(!(!e||!e.data))try{let a=JSON.parse(e.data),o=a.content||``;o&&!t.some(e=>e.uid===r&&e.content)&&(d(`notes`),f(`notes`),i(r),n(e=>e.some(e=>e.uid===r&&e.content)?e:[...e,{uid:r,title:a.title||`Untitled`,content:o}]))}catch{}}).catch(()=>{})}},[p.pathname]),(0,R.useEffect)(()=>{let e=e=>{s!==`notes`||!r||((e.ctrlKey||e.metaKey)&&e.shiftKey&&e.key.toLowerCase()===`e`?(e.preventDefault(),window.dispatchEvent(new CustomEvent(`notes:open-export-modal`))):(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.key.toLowerCase()===`i`&&(e.preventDefault(),window.dispatchEvent(new CustomEvent(`notes:open-import-modal`))))};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[s,r]),(0,R.useEffect)(()=>()=>{o.current&&clearTimeout(o.current),m.current&&clearTimeout(m.current)},[o]),null}),pe=R.memo(function(){let{setBreadcrumbLabel:e}=k(),t=c().pathname===`/`;return R.useEffect(()=>(t&&e(`Dashboard`),()=>{t&&e(null)}),[t,e]),null}),me=R.memo(function(){return null}),he=n(),ge=(0,R.createContext)(null);function _e({children:e}){let[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!1),s=(0,R.useRef)(0),c=(0,R.useCallback)(async()=>{if(sessionStorage.getItem(`auth_mode`)===`guest`){n(!0),o(!0),i({id:`guest`,email:`guest@local`,name:`Guest User`});return}try{let e=await N(`/api/me`);if(e.ok){let t=await e.json();if(t.authenticated){t.token&&j(t.token),n(!0),o(!1),i(t.user),s.current=0;return}n(!1),o(!1),i(null),M()}else if(e.status===503){let t=await e.json().catch(()=>({}));if(t.db_error){console.error(`[checkAuth] Permanent database error:`,t.message),n(!1),o(!1),i(null),M();return}if(ee()&&s.current<30){s.current++;let e=Math.min(1500*1.3**(s.current-1),5e3);setTimeout(()=>c(),e);return}n(!1),o(!1),i(null),M()}else n(!1),o(!1),i(null),M();s.current=0}catch{let e=ee(),t=e?1/0:3;if(s.current<t){s.current++;let t=e?Math.min(1500*1.5**(s.current-1),1e4):1500*s.current;setTimeout(()=>c(),t)}}},[]);(0,R.useEffect)(()=>{c()},[c]),(0,R.useEffect)(()=>{let e=()=>{n(!1),o(!1),i(null)};return window.addEventListener(`auth:unauthorized`,e),()=>{window.removeEventListener(`auth:unauthorized`,e)}},[]);let l=(0,R.useCallback)(e=>{n(!0),o(!1),sessionStorage.removeItem(`auth_mode`),e&&i(e)},[]),u=(0,R.useCallback)(()=>{n(!0),o(!0),i({id:`guest`,email:`guest@local`,name:`Guest User`}),sessionStorage.setItem(`auth_mode`,`guest`)},[]),d=(0,R.useCallback)(async()=>{if(M(),a){n(!1),o(!1),i(null),sessionStorage.removeItem(`auth_mode`);return}try{(await N(`/api/logout`,{method:`POST`})).ok&&(M(),n(!1),o(!1),i(null))}catch(e){console.error(`Logout error:`,e)}},[a]);return(0,he.jsx)(ge.Provider,{value:{isAuthenticated:t,user:r,isGuest:a,setUser:i,setIsAuthenticated:n,checkAuth:c,handleLogin:l,handleGuestLogin:u,handleLogout:d},children:e})}function ve(){let e=(0,R.useContext)(ge);if(!e)throw Error(`useAuth must be used within an AuthProvider`);return e}var ye=`diagram_versions`;async function be(e){try{let t=localStorage.getItem(ye);return t?JSON.parse(t).find(t=>String(t.diagramId)===String(e))?.version??null:null}catch(e){return console.warn(`Failed to get cached version:`,e),null}}async function xe(e,t){try{let n=[],r=localStorage.getItem(ye);r&&(n=JSON.parse(r)),n=n.filter(t=>String(t.diagramId)!==String(e)),n.push({diagramId:e,version:t,timestamp:Date.now()}),n.length>100&&(n=n.slice(-100)),localStorage.setItem(ye,JSON.stringify(n))}catch(e){console.warn(`Failed to update cached version:`,e)}}async function Se(e){try{let t=localStorage.getItem(ye);if(!t)return;let n=JSON.parse(t);n=n.filter(t=>String(t.diagramId)!==String(e)),localStorage.setItem(ye,JSON.stringify(n))}catch(e){console.warn(`Failed to clear cached version:`,e)}}function Ce(e){return e&&{...e,project_id:e.project_id??e.projectId??null,source_type:e.source_type??e.sourceType,source_connection_id:e.source_connection_id??e.sourceConnectionId,dbml_source:e.dbml_source??e.dbmlSource??``,_version:e._version??e.version,created_at:e.created_at??e.createdAt,updated_at:e.updated_at??e.updatedAt}}function we(e,t){let n=new Map(e.map(e=>[e.id,e])),r=(e,t)=>{let r=n.get(e),i=t?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);return r?.data.columns.find(e=>e.id===i)?.name??``};return JSON.stringify({nodes:e.map(e=>({name:e.data.name,columns:(e.data.columns||[]).map(e=>({name:e.name,type:e.type,is_pk:e.is_pk,is_nullable:e.is_nullable,default_value:e.default_value,is_unique:e.is_unique,comment:e.comment,enum_name:e.enum_name,enum_values:e.enum_values})).sort((e,t)=>e.name.localeCompare(t.name)),comment:e.data.comment||``,constraints:(e.data.constraints||[]).map(t=>({kind:t.kind,name:t.name||``,columns:(t.column_ids||[]).map(t=>e.data.columns.find(e=>e.id===t)?.name||t).sort(),expression:t.expression||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t))),indexes:(e.data.indexes||[]).map(t=>({name:t.name,is_unique:!!t.is_unique,algorithm:t.algorithm||``,columns:(t.column_ids||[]).map(t=>e.data.columns.find(e=>e.id===t)?.name||t).sort()})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t)))})).sort((e,t)=>e.name.localeCompare(t.name)),edges:t.map(e=>({source:n.get(e.source)?.data.name,target:n.get(e.target)?.data.name,sourceColumn:r(e.source,e.sourceHandle),targetColumn:r(e.target,e.targetHandle),on_delete:e.data?.on_delete,on_update:e.data?.on_update,constraint_name:e.data?.constraint_name})).sort((e,t)=>`${e.source}.${e.sourceColumn}>${e.target}.${e.targetColumn}`.localeCompare(`${t.source}.${t.sourceColumn}>${t.target}.${t.targetColumn}`))})}function Te(e){try{return(typeof e==`string`?JSON.parse(e):e)?.schema_fingerprint??null}catch{return null}}function Ee(e,t,n){if(!e?.trim())return!0;try{let r=p(e);return we(r.nodes,r.edges)===we(t,n)}catch{return!0}}function De(e,t,n=!1){let[r,i]=(0,R.useState)([]),[a,o]=(0,R.useState)(null),[c,l]=(0,R.useState)(!0);(0,R.useRef)(null);let[f,p]=(0,R.useState)(0),[m,g]=(0,R.useState)(!1),_=(0,R.useRef)(r),v=(0,R.useRef)(a),y=(0,R.useRef)({}),b=(0,R.useRef)(n);(0,R.useEffect)(()=>{b.current=n},[n]);let x=()=>b.current||sessionStorage.getItem(`auth_mode`)===`guest`;return _.current=r,v.current=a,{diagrams:r,setDiagrams:i,activeDiagramId:a,setActiveDiagramId:o,fetchDiagrams:(0,R.useCallback)(async(e=!1,t=`all`,n=``,r=null,a=10,o,s)=>{if(x()){let[e,r]=await Promise.all([u.getAllResources(`erd`),u.getAllResources(`project`)]),c=new Map(r.filter(e=>!e.is_deleted).map(e=>[String(e.id),{uid:e.uid||String(e.id),name:e.name}])),d=e.filter(e=>!e.is_deleted);s?.sourceType&&(d=d.filter(e=>(e.source_type??e.sourceType??`blank`)===s.sourceType)),t!==`all`&&(d=d.filter(e=>String(e.project_id)===String(t))),n&&(d=d.filter(e=>e.name.toLowerCase().includes(n.toLowerCase())));let f=d.map(e=>({...e,projects:e.projects||c.get(String(e.project_id))||null}));f.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let m=a,h=((o===void 0?1:o)-1)*m,_=f.slice(h,h+m);i(_),p(f.length),g(!1),l(!1);return}s?.silent||l(!0);try{let c=o===void 0?e?_.current.length:0:(o-1)*a,l=t===null||t===`null`||t===`none`?`null`:t,u=n?`&q=${encodeURIComponent(n)}`:``,d=r===null?``:`&is_public=${r}`,f=s?.sourceType?`&source_type=${s.sourceType}`:``,m=await N(`/api/diagrams?limit=${a}&offset=${c}&project_id=${l}${u}${d}${f}`);if(m.ok){let t;try{t=await m.json()}catch(e){console.error(`Failed to parse JSON response in fetchDiagrams`,e);return}let n=t.data===void 0?Array.isArray(t)?t:[]:t.data,r=t.total===void 0?Array.isArray(n)?n.length:0:t.total,a=(Array.isArray(n)?n:[]).map(Ce);i(e?e=>[...e,...a]:e=>{let t=v.current;if(t!=null&&!a.some(e=>String(e.id)===String(t)||e.uid&&String(e.uid)===String(t))){let n=e.find(e=>String(e.id)===String(t)||e.uid&&String(e.uid)===String(t));if(n)return[...a,n]}return a}),p(r),g(a.length+c<r)}else{let e=await m.text();console.error(`Failed to fetch diagrams: ${m.status} ${m.statusText}`,e)}}catch(e){console.error(`Error in fetchDiagrams:`,e)}finally{l(!1)}},[]),createDiagram:async(e,t)=>{let n=t===`none`||t===`uncategorized`?null:t;if(x()){let t={id:Math.random().toString(36).substring(2,11),uid:crypto.randomUUID(),name:e,project_id:n||null,dbml_source:``,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),entities:[],relationships:[],type:`erd`};return await u.saveResource(t),i(e=>[t,...e]),D.success(`Diagram created locally`),t}try{let t=crypto.randomUUID(),r=await N(`/api/diagrams`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e,project_id:n,uid:t})});if(r.ok){let e=Ce(await r.json());return e.uid||=t,i(t=>[e,...t]),D.success(`Diagram created successfully`),e}D.error(`Failed to create diagram`)}catch(e){console.error(`Error creating diagram:`,e),D.error(`Error creating diagram`)}return null},updateDiagram:async(e,t,n)=>{if(x()){let r=await u.getResource(e);r&&(r.name=t,r.updated_at=new Date().toISOString(),await u.saveResource(r),i(n=>n.map(n=>n.id===e?{...n,name:t}:n)),n?.silent||D.success(`Diagram renamed locally`));return}try{let r=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${r}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})})).ok?(i(n=>n.map(n=>n.id===e?{...n,name:t}:n)),n?.silent||D.success(`Diagram renamed successfully`)):D.error(`Failed to rename diagram`)}catch(e){console.error(`Error updating diagram:`,e),D.error(`Error renaming diagram`)}},deleteDiagram:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null,t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),p(e=>Math.max(0,e-1)),(a===e||String(a)===String(e))&&o(null),D.success(`Diagram moved to local trash`));return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}`,{method:`DELETE`})).ok?(i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),p(e=>Math.max(0,e-1)),String(a)===String(e)&&o(null),D.success(`Diagram moved to trash`)):D.error(`Failed to delete diagram`)}catch(e){console.error(`Error deleting diagram:`,e),D.error(`Error deleting diagram`)}},restoreDiagram:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null,t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Diagram restored locally`));return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}/restore`,{method:`POST`})).ok?(i(t=>t.map(t=>String(t.id)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Diagram restored successfully`)):D.error(`Failed to restore diagram`)}catch{D.error(`Error restoring diagram`)}},deleteDiagramPermanent:async e=>{if(x()){let t=await u.getResource(e);t||=(await u.getAllResources(`erd`)).find(t=>String(t.uid)===String(e)||String(t.id)===String(e))||null;let n=t?t.id:e;await u.deleteResource(n),await u.clearDraft(L.ERD,n),i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Diagram permanently deleted from local storage`);return}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/diagrams/${t}/permanent`,{method:`DELETE`})).ok?(i(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Diagram permanently deleted`)):D.error(`Failed to permanently delete diagram`)}catch{D.error(`Error permanently deleting diagram`)}},moveDiagramToProject:async(e,t,n)=>{let r=t===`none`||t===`uncategorized`?null:t;if(x()){let t=await u.getResource(e);return t?(t.project_id=r,await u.saveResource(t),i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,project_id:r}:t)),n?.silent||D.success(`Diagram moved to project locally`),!0):!1}try{let t=_.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;if((await N(`/api/diagrams/${t}/project`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:r})})).ok)return i(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,project_id:r}:t)),n?.silent||D.success(`Diagram moved to project`),!0;D.error(`Failed to move diagram`)}catch(e){console.error(`Error moving diagram:`,e),D.error(`Error moving diagram`)}},saveDiagram:(0,R.useCallback)(async(e,n,r,o)=>{if(!a||t!==`erd`&&t!==`diagram`)return;let{expectedVersion:c,dbmlSource:l}=o||{};try{let t=_.current.find(e=>String(e.id)===String(a)||String(e.uid)===String(a)),o=t,f=o?.source_connection_id??o?.sourceConnectionId??(o?.source_type??o?.sourceType)===`production_db`,p=[a,t?.uid,t?.id].filter(e=>e!=null).map(String),m=p.map(e=>y.current[e]).find(e=>e!==void 0),g=we(e,n),v=Te(t?.data),b=m??t?.dbml_source??t?.dbmlSource??``,S=l===void 0&&!!b&&(v===null?!Ee(b,e,n):v!==g),C=l??(S?d(e,n):b);p.forEach(e=>{y.current[e]=C});let w=!f&&C.trim()&&(l!==void 0||S||e.some(e=>!Array.isArray(e.data.constraints)||!Array.isArray(e.data.indexes)))?h(e,C):e,T=we(w,n),E;if(f){let t={};e.forEach(e=>{t[e.id]={x:e.position.x,y:e.position.y,color:e.data?.color,collapsed:e.data?.collapsed,hidden_columns:e.data?.hidden_columns,note:e.data?.note}}),E=JSON.stringify({nodes:t,viewport:r,_type:`production_db_positions`,dbml_source:C,schema_fingerprint:g})}else E=JSON.stringify({nodes:w,edges:n,viewport:r,dbml_source:C,schema_fingerprint:T});let D=!x();if(x()){let e=await u.getResource(a);if(e||=(await u.getAllResources(`erd`)).find(e=>e.uid===a)||null,e){let t=w.map(e=>({...e.data,x:e.position.x,y:e.position.y})),i=n.map(s);e.entities=t,e.relationships=i,e.viewport_x=r.x,e.viewport_y=r.y,e.viewport_zoom=r.zoom,e.dbml_source=C,e.updated_at=new Date().toISOString(),await u.saveResource(e)}else{let e=w.map(e=>({...e.data,x:e.position.x,y:e.position.y})),t=n.map(s),i={id:a,uid:a,name:`ERD`,project_id:null,is_deleted:!1,type:`erd`,entities:e,relationships:t,viewport_x:r.x,viewport_y:r.y,viewport_zoom:r.zoom,dbml_source:C,created_at:new Date().toISOString(),updated_at:new Date().toISOString()};await u.saveResource(i)}}i(e=>e.map(e=>String(e.id)===String(a)||String(e.uid)===String(a)?e.dbml_source===C&&e.dbmlSource===C?e:{...e,dbml_source:C,dbmlSource:C}:e));let O=c===void 0?await be(a):c;if(await u.saveDraft(L.ERD,a,E,D),!x()&&O!==null)try{let e=`draft_version_${a}`;sessionStorage.setItem(e,String(O))}catch{}}catch(e){console.error(`Error in local saveDiagram:`,e)}},[a,t]),hasMoreDiagrams:m,diagramsTotal:f,isLoading:c}}function Oe(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r),g=(0,R.useRef)(0),_=(0,R.useRef)(null),v=(0,R.useRef)(e);(0,R.useEffect)(()=>{v.current=e},[e]);let y=()=>v.current||sessionStorage.getItem(`auth_mode`)===`guest`,b=(0,R.useCallback)(()=>(g.current++,g.current),[]),x=(0,R.useCallback)(()=>g.current,[]);m.current=t,h.current=r;let S=(0,R.useCallback)(async(e=!1,t=`all`,r=``,i=null,a=10,s,c)=>{if(y()){let[e,i]=await Promise.all([u.getAllResources(`notes`),u.getAllResources(`project`)]),c=new Map(i.filter(e=>!e.is_deleted).map(e=>[String(e.id),{uid:e.uid||String(e.id),name:e.name}])),l=e.filter(e=>!e.is_deleted);t!==`all`&&(l=l.filter(e=>String(e.project_id)===String(t))),r&&(l=l.filter(e=>e.title.toLowerCase().includes(r.toLowerCase())));let f=l.map(e=>({...e,projects:e.projects||c.get(String(e.project_id))||null}));f.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let h=a,g=((s===void 0?1:s)-1)*h,_=f.slice(g,g+h).map(e=>{let t=m.current.find(t=>String(t.uid??t.id)===String(e.uid??e.id));return t&&t.content!=null?{...e,content:t.content}:e});n(_),d(f.length),p(!1),o(!1);return}c?.silent||o(!0);try{let o=s===void 0?e?m.current.length:0:(s-1)*a,c=t===null||t===`null`||t===`none`?`null`:t,l=r?`&q=${encodeURIComponent(r)}`:``,u=i===null?``:`&is_public=${i}`,f=await N(`/api/notes?limit=${a}&offset=${o}&project_id=${c}${l}${u}`);if(f.ok){let t=await f.json(),r=t.data===void 0?Array.isArray(t)?t:[]:t.data,i=t.total===void 0?Array.isArray(r)?r.length:0:t.total,a=Array.isArray(r)?r:[];n(e?e=>[...e,...a]:e=>{let t=h.current,n=a.map(t=>{let n=e.find(e=>String(e.uid??e.id)===String(t.uid??t.id));return n&&n.content!=null?{...t,content:n.content}:t});if(t&&!n.some(e=>e.uid===t)){let r=e.find(e=>e.uid===t);if(r)return[...n,r]}return n}),d(i),p(a.length+o<i)}else{let e=await f.text();console.error(`Failed to fetch notes: ${f.status} ${f.statusText}`,e)}}catch(e){console.error(`Error in fetchNotes:`,e)}finally{o(!1)}},[]),C=async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(y()){let t=crypto.randomUUID(),a={id:t,uid:t,title:e,content:r||``,project_id:i||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`notes`};return await u.saveResource(a),n(e=>[a,...e]),D.success(`Note created locally`),a}try{let t=crypto.randomUUID(),a=await N(`/api/notes`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:e,project_id:i,content:r||``,uid:t})});if(a.ok){let e=await a.json();return e.uid||=t,n(t=>[e,...t]),D.success(`Note created successfully`),e}}catch(e){console.error(`Error creating note:`,e)}return null};return{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,bumpContentVersion:b,getContentVersion:x,fetchNotes:S,createNote:C,updateNote:async(e,t,r)=>{if(y()){let i=m.current.find(t=>t.uid===e);i&&(i.title=t,i.updated_at=new Date().toISOString(),await u.saveResource(i),n(n=>n.map(n=>n.uid===e?{...n,title:t}:n)),r?.silent||D.success(`Note renamed locally`));return}try{(await N(`/api/notes/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})})).ok&&(n(n=>n.map(n=>n.uid===e?{...n,title:t}:n)),r?.silent||D.success(`Note renamed successfully`))}catch{}},deleteNote:async e=>{if(y()){let t=m.current.find(t=>t.uid===e);t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),n(t=>t.filter(t=>t.uid!==e)),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Note moved to local trash`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Note moved to trash`))}catch{}},moveNoteToProject:async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(y()){let t=m.current.find(t=>t.uid===e);return t&&(t.project_id=i,await u.saveResource(t),n(t=>t.map(t=>t.uid===e?{...t,project_id:i}:t)),r?.silent||D.success(`Note moved to project locally`)),!0}try{if((await N(`/api/notes/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:i})})).ok)return n(t=>t.map(t=>t.uid===e?{...t,project_id:i}:t)),r?.silent||D.success(`Note moved to project`),!0}catch{}return!1},saveNote:(0,R.useCallback)(async e=>{if(!e.id&&!e.uid)return!1;try{let t=!y(),r=JSON.stringify({content:e.content,title:e.title,project_id:e.project_id});if(y()){let t=await u.getResource(e.id||e.uid);t&&(t.content=e.content,t.updated_at=new Date().toISOString(),await u.saveResource(t))}return await u.saveDraft(L.NOTES,e.uid||e.id,r,t),n(t=>t.map(t=>String(t.uid??t.id)===String(e.uid??e.id)?{...t,content:e.content}:t)),!0}catch(e){return console.error(`Error in local saveNote:`,e),!1}},[]),restoreNote:async e=>{if(y()){let t=await u.getResource(e);t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),n(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Note restored locally`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}/restore`,{method:`POST`})).ok&&(n(t=>t.map(t=>String(t.id)===String(e)||String(t.uid)===String(e)?{...t,is_deleted:!1}:t)),D.success(`Note restored successfully`))}catch{}},deleteNotePermanent:async e=>{if(y()){let t=m.current.find(t=>t.uid===e);t&&(await u.deleteResource(t.id),await u.clearDraft(L.NOTES,e),n(t=>t.filter(t=>t.uid!==e)),D.success(`Note permanently deleted from local`));return}try{let t=m.current.find(t=>String(t.id)===String(e)||String(t.uid)===String(e))?.uid||e;(await N(`/api/notes/${t}/permanent`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>String(t.id)!==String(e)&&String(t.uid)!==String(e))),D.success(`Note permanently deleted`))}catch{}},hasMoreNotes:f,notesTotal:l,isLoading:a,isItemLoading:s,selectNote:async(e,t)=>{let r=m.current.find(t=>t.uid===e)||t?.fallbackNote;if(!r?.is_deleted&&_.current!==e){_.current=e,t?.silent||c(!0);try{let a=y()?Promise.resolve(null):(async()=>{try{let t=await N(`/api/notes/${e}`);if(!t.ok)return null;let n=await t.json();try{se(e,n.title||`Untitled`,n.projects?.name)}catch{}try{I(e,n.title||`Untitled`,n.content||``)}catch{}return n}catch(e){return console.error(`Failed to load note content:`,e),null}})(),o=m.current.find(t=>t.uid===e)||t?.fallbackNote,s=o?.content!==void 0&&o.content!==null&&o.content!==``,l=()=>t?.contentVersionAtStart===void 0||g.current===t?.contentVersionAtStart;if(s){t?.fallbackNote&&!m.current.some(t=>t.uid===e)&&(m.current=[...m.current,t.fallbackNote],n(m.current));let i=await a;i&&!i.is_deleted&&l()&&n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,...i}:t):[...t,i]);let o=await u.getDraft(L.NOTES,e);if(o&&o.sync_pending&&l())try{let a=JSON.parse(o.data);if(a.content||!i?.content){n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,content:a.content}:t):t),t?.silent||D.info(`Loaded unsynced local note draft`);try{I(e,r?.title||`Untitled`,a.content||``)}catch{}}}catch{}}else{let i=await a;i&&!i.is_deleted&&l()&&n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,...i}:t):[...t,i]),c(!1);let o=await u.getDraft(L.NOTES,e);if(o&&o.sync_pending&&l())try{let a=JSON.parse(o.data);if(a.content||!i?.content){n(t=>t.some(t=>t.uid===e)?t.map(t=>t.uid===e?{...t,content:a.content}:t):t),t?.silent||D.info(`Loaded unsynced local note draft`);try{I(e,r?.title||`Untitled`,a.content||``)}catch{}}}catch{}}i(e)}finally{c(!1),_.current=null}}},duplicateNote:async(e,t)=>{let n=m.current.find(t=>t.uid===e);if(!n)return D.error(`Source note not found`),null;let r=n.content,i=await u.getDraft(L.NOTES,e);if(i)try{let e=JSON.parse(i.data);e.content&&(r=e.content)}catch{}return await C(t,n.project_id,r)}}}function ke(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(0),[l,d]=(0,R.useState)(!1),f=(0,R.useRef)(t),p=(0,R.useRef)(e);(0,R.useEffect)(()=>{p.current=e},[e]);let m=()=>p.current||sessionStorage.getItem(`auth_mode`)===`guest`;f.current=t;let[h,g]=(0,R.useState)({diagrams:[],notes:[],drawings:[],flowcharts:[]}),_=(0,R.useCallback)(async(e=!1,t=``)=>{if(m()){let[e,r,i,a,s]=await Promise.all([u.getAllResources(`project`),u.getAllResources(`erd`),u.getAllResources(`notes`),u.getAllResources(`drawings`),u.getAllResources(`flowchart`)]),l=e.filter(e=>!e.is_deleted).map(e=>({...e,uid:e.uid||String(e.id)}));t&&(l=l.filter(e=>e.name.toLowerCase().includes(t.toLowerCase())));let f=l.map(e=>({...e,diagrams:r.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),notes:i.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),drawings:a.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id)),flowcharts:s.filter(t=>!t.is_deleted&&String(t.project_id)===String(e.id))}));n(f),g({diagrams:r.filter(e=>!e.is_deleted&&!e.project_id),notes:i.filter(e=>!e.is_deleted&&!e.project_id),drawings:a.filter(e=>!e.is_deleted&&!e.project_id),flowcharts:s.filter(e=>!e.is_deleted&&!e.project_id)}),c(l.length),d(!1),o(!1);return}o(!0);try{let r=e?f.current.length:0,i=t?`&q=${encodeURIComponent(t)}`:``,a=await N(`/api/projects?limit=100&offset=${r}${i}`);if(a.ok){let t=await a.json(),i=Array.isArray(t.data)?t.data:[],o=t.total===void 0?i.length:t.total;return n(e?e=>[...e,...i]:i),t.uncategorized&&g(t.uncategorized),c(o),d(i.length+r<o),t}{let e=await a.text();console.error(`Failed to fetch projects: ${a.status} ${a.statusText}`,e)}}catch(e){console.error(`Error in fetchProjects:`,e)}finally{o(!1)}return null},[]);return{projects:t,setProjects:n,uncategorized:h,setUncategorized:g,activeProjectId:r,setActiveProjectId:i,fetchProjects:_,createProject:async e=>{if(m()){let t={id:Math.random().toString(36).substring(2,11),uid:crypto.randomUUID(),name:e,is_deleted:!1,created_at:new Date().toISOString(),type:`project`};return await u.saveResource(t),n(e=>[t,...e]),D.success(`Project created locally`),t}try{let t=await N(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e})});if(t.ok){let e=await t.json();return n(t=>[e,...t]),D.success(`Project created successfully`),e}}catch{}return null},updateProject:async(e,t)=>{if(m()){let r=await u.getResource(e);r&&(r.name=t,await u.saveResource(r),n(n=>n.map(n=>n.id===e?{...n,name:t}:n)),D.success(`Project renamed locally`));return}try{(await N(`/api/projects/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})})).ok&&(n(n=>n.map(n=>n.id===e?{...n,name:t}:n)),D.success(`Project renamed successfully`))}catch{}},deleteProject:async e=>{if(m()){let t=await u.getResource(e);if(t){let a=new Date().toISOString();t.is_deleted=!0,t.deleted_at=a,await u.saveResource(t);for(let t of[`erd`,`notes`,`drawings`,`flowchart`]){let n=(await u.getAllResources(t)).filter(t=>String(t.project_id)===String(e));for(let e of n)e.is_deleted=!0,e.deleted_at=a,await u.saveResource(e)}n(t=>t.filter(t=>t.id!==e)),r===e&&i(null),D.success(`Project and its items moved to local trash`)}return!0}try{if((await N(`/api/projects/${e}`,{method:`DELETE`})).ok)return n(t=>t.filter(t=>t.id!==e)),r===e&&i(null),D.success(`Project moved to trash`),!0}catch{}return!1},restoreProject:async e=>{if(m()){let t=await u.getResource(e);if(t){t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t);for(let t of[`erd`,`notes`,`drawings`,`flowchart`]){let n=(await u.getAllResources(t)).filter(t=>String(t.project_id)===String(e));for(let e of n)e.is_deleted=!1,e.deleted_at=void 0,await u.saveResource(e)}_(),D.success(`Project and its items restored locally`)}return}await N(`/api/projects/${e}/restore`,{method:`POST`}),_()},deleteProjectPermanent:async e=>{if(m()){await u.deleteResource(e),n(t=>t.filter(t=>t.id!==e)),D.success(`Project permanently deleted from local`);return}await N(`/api/projects/${e}/permanent`,{method:`DELETE`}),n(t=>t.filter(t=>t.id!==e))},hasMoreProjects:l,projectsTotal:s,isLoading:a}}var z=(e,t)=>String(e.id)===String(t)||String(e.uid)===String(t),Ae=(e,t)=>e?{...e,...t,data:t.data===void 0?e.data:t.data}:t;function je(e,t){let n=t.uid??t.id;return e.some(e=>z(e,n))?e.map(e=>z(e,n)?Ae(e,t):e):[t,...e]}function Me(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r),g=(0,R.useRef)(e);(0,R.useEffect)(()=>{g.current=e},[e]);let _=()=>g.current||sessionStorage.getItem(`auth_mode`)===`guest`;m.current=t,h.current=r;let v=e=>{if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return``}},y=(0,R.useCallback)(async(e=!1,t=`all`,r=``,i=null,a=10,s,c)=>{if(_()){let e=(await u.getAllResources(`drawings`)).filter(e=>!e.is_deleted);t!==`all`&&(e=e.filter(e=>e.project_id===t)),r&&(e=e.filter(e=>e.title.toLowerCase().includes(r.toLowerCase())));let i=a,c=((s===void 0?1:s)-1)*i,l=e.slice(c,c+i);n(l),d(e.length),p(!1),o(!1);return}c?.silent||o(!0);try{let o=s===void 0?e?m.current.length:0:(s-1)*a,c=t===null||t===`null`||t===`none`?`null`:t,l=r?`&q=${encodeURIComponent(r)}`:``,u=i===null?``:`&is_public=${i}`,f=await N(`/api/drawings?limit=${a}&offset=${o}&project_id=${c}${l}${u}`);if(f.ok){let t=await f.json(),r=t.data===void 0?t:t.data,i=t.total===void 0?Array.isArray(r)?r.length:0:t.total,a=Array.isArray(r)?r:[];n(t=>{let n=a.map(e=>Ae(t.find(t=>z(t,e.uid??e.id)),e));if(e){let e=new Set(n.map(e=>String(e.uid??e.id)));return[...t.filter(t=>!e.has(String(t.uid??t.id))),...n]}let r=h.current;if(r&&!n.some(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r))){let e=t.find(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r));if(e)return[...n,e]}return n}),d(i),p(a.length+o<i)}}catch(e){console.error(`Error fetching drawings:`,e)}finally{o(!1)}},[]),b=async(e,t,r)=>{let i=t===`none`||t===`uncategorized`?null:t;if(_()){let t={id:Math.random().toString(36).substring(2,9),title:e,data:r||``,project_id:i||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`drawings`};return await u.saveResource(t),n(e=>[t,...e]),D.success(`Drawing created locally`),t}try{let t=crypto.randomUUID(),a=await N(`/api/drawings`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:e,project_id:i,data:r||``,uid:t})});if(a.ok){let e=await a.json();return e.uid||=t,n(t=>[e,...t]),D.success(`Drawing created successfully`),e}}catch{}return null};return{drawings:t,setDrawings:n,activeDrawingUid:r,setActiveDrawingUid:i,fetchDrawings:y,createDrawing:b,updateDrawing:async(e,t,r)=>{if(_()){let i=await u.getResource(e);i&&(i.title=t,i.updated_at=new Date().toISOString(),await u.saveResource(i),n(n=>n.map(n=>z(n,e)?{...n,title:t}:n)),r?.silent||D.success(`Drawing renamed locally`));return}try{(await N(`/api/drawings/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})})).ok&&(n(n=>n.map(n=>z(n,e)?{...n,title:t}:n)),r?.silent||D.success(`Drawing renamed successfully`))}catch{}},deleteDrawing:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,t&&(t.is_deleted=!0,t.deleted_at=new Date().toISOString(),await u.saveResource(t),n(t=>t.filter(t=>!z(t,e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Drawing moved to local trash`));return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>!z(t,e))),d(e=>Math.max(0,e-1)),r===e&&i(null),D.success(`Drawing moved to trash`))}catch{}},moveDrawingToProject:async(e,t,r)=>{if(_()){let i=await u.getResource(e);return i||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,i&&(i.project_id=t,await u.saveResource(i),n(n=>n.map(n=>z(n,e)?{...n,project_id:t,projects:void 0}:n)),r?.silent||D.success(`Drawing moved to project locally`)),!0}try{if((await N(`/api/drawings/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:t})})).ok)return n(n=>n.map(n=>z(n,e)?{...n,project_id:t,projects:void 0}:n)),r?.silent||D.success(`Drawing moved to project`),!0}catch{}return!1},saveDrawing:(0,R.useCallback)(async e=>{let t=String(e.uid??e.id);if(!t)return!1;try{let r=!_(),i={title:e.title,data:e.data||``,project_id:e.project_id||null},a=JSON.stringify(i);if(n(t=>je(t,e)),_()){let n=await u.getResource(t);n&&(n.data=e.data,n.updated_at=new Date().toISOString(),await u.saveResource(n))}return await u.saveDraft(L.DRAWINGS,t,a,r),!0}catch(e){return console.error(`Error in local saveDrawing:`,e),!1}},[]),restoreDrawing:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null,t&&(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),n(t=>t.map(t=>z(t,e)?{...t,is_deleted:!1}:t)),D.success(`Drawing restored locally`));return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}/restore`,{method:`POST`})).ok&&(n(t=>t.map(t=>z(t,e)?{...t,is_deleted:!1}:t)),D.success(`Drawing restored successfully`))}catch{}},deleteDrawingPermanent:async e=>{if(_()){let t=await u.getResource(e);t||=(await u.getAllResources(`drawings`)).find(t=>z(t,e))||null;let r=t?t.id:e;await u.deleteResource(r),await u.clearDraft(L.DRAWINGS,r),n(t=>t.filter(t=>!z(t,e))),D.success(`Drawing permanently deleted from local`);return}try{let t=m.current.find(t=>z(t,e))?.uid||e;(await N(`/api/drawings/${t}/permanent`,{method:`DELETE`})).ok&&(n(t=>t.filter(t=>!z(t,e))),D.success(`Drawing permanently deleted`))}catch{}},hasMoreDrawings:f,drawingsTotal:l,duplicateDrawing:async(e,t)=>{let n=m.current.find(t=>z(t,e));if(!n)return D.error(`Source drawing not found`),null;let r=n.data,i=await u.getDraft(L.DRAWINGS,e);if(i)try{let e=JSON.parse(i.data);e.data&&(r=e.data)}catch{}return await b(t,n.project_id,r)},selectDrawing:async(e,t)=>{t?.silent||c(!0);try{if(_()){let t=await u.getResource(e);if(!t||t.is_deleted)return;n(n=>{let r=n.some(t=>z(t,e)),i={...t,data:v(t.data)};return r?n.map(t=>z(t,e)?{...t,...i}:t):[...n,i]}),i(t.uid??e)}else{let t=await u.getDraft(L.DRAWINGS,e),r=t?.data?(()=>{try{let e=JSON.parse(t.data);return e&&typeof e==`object`?e:null}catch{return null}})():null,a=v(r?.data),o=!!t?.sync_pending&&!!a,s=null,c=null;try{let t=await N(`/api/drawings/${e}`);if(t.ok){let e=await t.json();e.is_deleted||(c=e,s=v(e.data),o&&(s=a))}}catch{s=a}o&&!s&&(s=a),s===null&&(s=``),s!==null&&(n(t=>{let n=t.some(t=>z(t,e)),i=o&&r?{...c||{uid:e,id:e},...r,uid:c?.uid??e,id:c?.id??e,data:s}:{...c||{uid:e,id:e},data:s};return n?t.map(t=>z(t,e)?{...t,...i}:t):[{...i},...t]}),i(String(c?.uid??e)))}}finally{c(!1)}},isLoading:a,isItemLoading:s}}function Ne(e=!1){let[t,n]=(0,R.useState)([]),[r,i]=(0,R.useState)(null),[a,o]=(0,R.useState)(!0),[s,c]=(0,R.useState)(!1),[l,d]=(0,R.useState)(0),[f,p]=(0,R.useState)(!1),m=(0,R.useRef)(t),h=(0,R.useRef)(r);m.current=t,h.current=r;let g=(e,t)=>String(e.id)===String(t)||String(e.uid)===String(t),_=(e,t)=>e?{...e,...t,data:t.data===void 0?e.data:t.data}:t,v=e=>{if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`?t:null}catch{return null}};return{flowcharts:t,setFlowcharts:n,activeFlowchartId:r,setActiveFlowchartId:i,fetchFlowcharts:(0,R.useCallback)(async(t=!1,r=`all`,i=``,a=null,s=10,c)=>{if(e){let e=(await u.getAllResources(`flowchart`)).filter(e=>!e.is_deleted);r!==`all`&&(e=e.filter(e=>e.project_id===r)),i&&(e=e.filter(e=>e.title.toLowerCase().includes(i.toLowerCase()))),e.sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n});let t=((c?.page??1)-1)*s,a=e.slice(t,t+s);n(a),d(e.length),p(!1),o(!1);return}c?.silent||o(!0);try{let e=c?.page===void 0?t?m.current.length:0:(c.page-1)*s,o=r===null||r===`null`||r===`none`?`null`:r,l=i?`&q=${encodeURIComponent(i)}`:``,u=a===null?``:`&is_public=${a}`,f=await N(`/api/flowcharts?limit=${s}&offset=${e}&project_id=${o}${l}${u}`);if(f.ok){let r=await f.json(),i=r.data===void 0?r:r.data,a=r.total===void 0?Array.isArray(i)?i.length:0:r.total,o=Array.isArray(i)?i:[];n(e=>{let n=o.map(t=>{let n=e.find(e=>g(e,t.uid??t.id));return _(n,t)});if(t){let t=new Set(n.map(e=>String(e.uid??e.id)));return[...e.filter(e=>!t.has(String(e.uid??e.id))),...n]}let r=h.current;if(r!=null&&!n.some(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r))){let t=e.find(e=>String(e.id)===String(r)||e.uid&&String(e.uid)===String(r));if(t)return[...n,t]}return n}),d(a),p(o.length+e<a)}}catch(e){console.error(`Error fetching flowcharts:`,e)}finally{o(!1)}},[e]),createFlowchart:async(t,r,i)=>{let a=r===`none`||r===`uncategorized`?null:r;if(e){let e={id:Math.random().toString(36).substring(2,9),uid:crypto.randomUUID(),title:t,data:i||``,project_id:a||null,is_deleted:!1,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),type:`flowchart`};return await u.saveResource(e),n(t=>[e,...t]),D.success(`Flowchart created locally`),e}try{let e=crypto.randomUUID(),r=await N(`/api/flowcharts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,project_id:a,data:i||``,uid:e})});if(r.ok){let t=await r.json();return t.uid||=e,n(e=>[t,...e]),D.success(`Flowchart created successfully`),t}}catch{}return null},updateFlowchart:async(t,r,i)=>{if(e){let e=await u.getResource(t);e&&(e.title=r,e.updated_at=new Date().toISOString(),await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,title:r}:e)),i?.silent||D.success(`Flowchart renamed locally`));return}try{(await N(`/api/flowcharts/${t}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:r})})).ok&&(n(e=>e.map(e=>g(e,t)?{...e,title:r}:e)),i?.silent||D.success(`Flowchart renamed successfully`))}catch{}},deleteFlowchart:async t=>{if(e){let e=await u.getResource(t);if(e||=m.current.find(e=>g(e,t))||null,e){if(e.is_deleted=!0,e.deleted_at=new Date().toISOString(),await u.saveResource(e),n(e=>e.filter(e=>g(e,t))),d(e=>Math.max(0,e-1)),r!==null){let e=m.current.find(e=>g(e,t));e&&String(r)===String(e.id)&&i(null)}D.success(`Flowchart moved to local trash`)}return}try{let e=m.current.find(e=>g(e,t))?.uid||t;if((await N(`/api/flowcharts/${e}`,{method:`DELETE`})).ok){if(n(e=>e.filter(e=>g(e,t))),d(e=>Math.max(0,e-1)),r!==null){let e=m.current.find(e=>g(e,t));e&&String(r)===String(e.id)&&i(null)}D.success(`Flowchart moved to trash`)}}catch{}},moveFlowchartToProject:async(t,r,i)=>{if(e){let e=await u.getResource(t);return e&&(e.project_id=r,await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,project_id:r}:e)),i?.silent||D.success(`Flowchart moved to project locally`)),!0}try{if((await N(`/api/flowcharts/${t}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({project_id:r})})).ok)return n(e=>e.map(e=>g(e,t)?{...e,project_id:r}:e)),i?.silent||D.success(`Flowchart moved to project`),!0}catch{}return!1},saveFlowchart:(0,R.useCallback)(async t=>{if(!t.id&&!t.uid)return!1;try{let r=!e,i={title:t.title,data:t.data||``,project_id:t.project_id||null},a=JSON.stringify(i);if(e){let e=await u.getResource(t.id);e&&(e.data=t.data,e.updated_at=new Date().toISOString(),await u.saveResource(e)),n(e=>e.map(e=>g(e,t.uid??t.id)?{...e,data:t.data||``}:e))}let o=t.uid||t.id;return await u.saveDraft(L.FLOWCHART,o,a,r),!0}catch(e){return console.error(`Error in local saveFlowchart:`,e),!1}},[e]),restoreFlowchart:async t=>{if(e){let e=await u.getResource(t);e||=m.current.find(e=>g(e,t))||null,e&&(e.is_deleted=!1,e.deleted_at=void 0,await u.saveResource(e),n(e=>e.map(e=>g(e,t)?{...e,is_deleted:!1}:e)),D.success(`Flowchart restored locally`));return}try{let e=m.current.find(e=>g(e,t))?.uid||t;(await N(`/api/flowcharts/${e}/restore`,{method:`POST`})).ok&&(n(e=>e.map(e=>g(e,t)?{...e,is_deleted:!1}:e)),D.success(`Flowchart restored successfully`))}catch{}},deleteFlowchartPermanent:async t=>{if(e){let e=await u.getResource(t);e||=m.current.find(e=>g(e,t))||null;let r=e?.id||t,i=e?.uid||t;await u.deleteResource(r),await u.clearDraft(L.FLOWCHART,i),n(e=>e.filter(e=>g(e,t))),D.success(`Flowchart permanently deleted from local`);return}try{let e=m.current.find(e=>g(e,t))?.uid||t;(await N(`/api/flowcharts/${e}/permanent`,{method:`DELETE`})).ok&&(n(e=>e.filter(e=>g(e,t))),D.success(`Flowchart permanently deleted`))}catch{}},hasMoreFlowcharts:f,flowchartsTotal:l,isLoading:a,isItemLoading:s,selectFlowchart:async(t,r)=>{r?.silent||c(!0);try{let a=await u.getDraft(L.FLOWCHART,t),o=a?v(a.data):null,s=!!a?.sync_pending,c=o?.data,l=o?.title,d=o?.project_id;if(e){let e=await u.getResource(t);if(e||=m.current.find(e=>g(e,t))||null,!e||e.is_deleted)return;n(n=>{let r=n.some(e=>g(e,t)),i={...e,...o,data:c??e.data??``};return r?n.map(e=>g(e,t)?{...e,...i}:e):[...n,i]}),i(e.uid??t)}else{let e=await N(`/api/flowcharts/${t}`);if(e.ok){let a=await e.json();if(!a.is_deleted){let e=s?{...a,title:l??a.title,data:c??a.data,project_id:d??a.project_id}:a;n(t=>t.some(t=>t.uid&&String(t.uid)===String(e.uid)||String(t.id)===String(e.id))?t.map(t=>t.uid&&String(t.uid)===String(e.uid)||String(t.id)===String(e.id)?{...t,...e}:t):[...t,e]),i(e.uid??t)}else if(s&&o){let e=r?.fallbackFlowchart||{},a={...e,...o,uid:e.uid??t,id:e.id??t,data:c??e.data??``};n(e=>e.some(e=>g(e,t))?e.map(e=>g(e,t)?{...e,...a}:e):[...e,a]),i(String(a.uid??t))}}else if(s&&o){let e=r?.fallbackFlowchart||{},a={...e,...o,uid:e.uid??t,id:e.id??t,data:c??e.data??``};n(e=>e.some(e=>g(e,t))?e.map(e=>g(e,t)?{...e,...a}:e):[...e,a]),i(String(a.uid??t))}}}finally{c(!1)}}}}function Pe(e=!1){let[t,n]=(0,R.useState)({diagrams:[],dbClients:[],notes:[],drawings:[],flowcharts:[],projects:[]}),[r,i]=(0,R.useState)(!0),a=(0,R.useRef)(e);(0,R.useEffect)(()=>{a.current=e},[e]);let o=()=>a.current||sessionStorage.getItem(`auth_mode`)===`guest`,s=(0,R.useCallback)(async()=>{if(o()){try{let[e,t,r,i,a]=await Promise.all([u.getAllResources(`erd`),u.getAllResources(`notes`),u.getAllResources(`drawings`),u.getAllResources(`flowchart`),u.getAllResources(`project`)]),o=e=>e.filter(e=>e.is_deleted);n({diagrams:o(e),dbClients:[],notes:o(t),drawings:o(r),flowcharts:o(i),projects:o(a)})}catch(e){console.error(`Error fetching guest trash:`,e)}i(!1);return}i(!0);try{let e=await N(`/api/trash`);if(e.ok){let t=await e.json(),r={diagrams:Array.isArray(t.diagrams)?t.diagrams.sort((e,t)=>t.id-e.id):[],dbClients:Array.isArray(t.db_clients)?t.db_clients.sort((e,t)=>t.id-e.id):[],notes:Array.isArray(t.notes)?t.notes.sort((e,t)=>t.id-e.id):[],drawings:Array.isArray(t.drawings)?t.drawings.sort((e,t)=>t.id-e.id):[],flowcharts:Array.isArray(t.flowcharts)?t.flowcharts.sort((e,t)=>t.id-e.id):[],projects:Array.isArray(t.projects)?t.projects.sort((e,t)=>t.id-e.id):[]};n(r)}}catch(e){console.error(`Error fetching trash:`,e)}finally{i(!1)}},[]),c=async e=>{if(o()){let t=await u.getResource(e);return t?(t.is_deleted=!1,t.deleted_at=void 0,await u.saveResource(t),s(),D.success(`Restored successfully locally`),!0):!1}return!1};return{trashData:t,setTrashData:n,fetchTrash:s,restoreNote:async e=>{if(o())return c(e);try{(await N(`/api/notes/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Note restored successfully`)):D.error(`Failed to restore note`)}catch{D.error(`Error restoring note`)}},restoreDrawing:async e=>{if(o())return c(e);try{(await N(`/api/drawings/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Drawing restored successfully`)):D.error(`Failed to restore drawing`)}catch{D.error(`Error restoring drawing`)}},restoreFlowchart:async e=>{if(o())return c(e);try{(await N(`/api/flowcharts/${e}/restore`,{method:`POST`})).ok?(s(),D.success(`Flowchart restored successfully`)):D.error(`Failed to restore flowchart`)}catch{D.error(`Error restoring flowchart`)}},restoreDbClient:async e=>{if(!(await N(`/api/db-clients/${e}/restore`,{method:`POST`})).ok){D.error(`Failed to restore DB Client`);return}await s(),D.success(`DB Client restored successfully`)},deleteDbClientPermanent:async e=>{if(!(await N(`/api/db-clients/${e}/permanent`,{method:`DELETE`})).ok){D.error(`Failed to permanently delete DB Client`);return}D.success(`DB Client permanently deleted`)},isLoading:r}}function Fe(){let[e,t]=(0,R.useState)(navigator.onLine);return(0,R.useEffect)(()=>{let e=()=>t(!0),n=()=>t(!1);return window.addEventListener(`online`,e),window.addEventListener(`offline`,n),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,n)}},[]),e}function Ie(e,t=!1){let[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(!1),[a,o]=(0,R.useState)(!1),c=(0,R.useRef)(null),l=(0,R.useCallback)((e,t)=>{if(!e)return e;try{if(t===L.DRAWINGS){let t;try{t=JSON.parse(e)}catch{return e}if(t&&typeof t==`object`&&`data`in t&&typeof t.data==`string`)try{let e=JSON.parse(t.data);if(e.files){let n=!1,r={...e.files};if(Object.keys(r).forEach(e=>{let t=r[e];if(t&&typeof t.dataURL==`string`){let i=t.dataURL.replace(/\\n/g,``).replace(/\\r/g,``).trim(),a=i.startsWith(`data:`),o=i.startsWith(`http://`)||i.startsWith(`https://`);o&&i!==t.dataURL?(r[e]={...t,dataURL:i},n=!0):!a&&!o&&(delete r[e],n=!0)}}),n)return console.warn(`Healing corrupted files map in Drawing draft`),t.data=JSON.stringify({...e,files:r}),JSON.stringify(t)}}catch{}}}catch(e){console.error(`Error during draft healing:`,e)}return e},[]),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(t);(0,R.useEffect)(()=>{p.current=t},[t]);let m=()=>p.current||sessionStorage.getItem(`auth_mode`)===`guest`,h=(0,R.useRef)(!1),g=(0,R.useCallback)(async()=>{try{let e=await u.getAllPendingSyncs();f(e.length>0)}catch(e){console.warn(`Failed to check pending sync status:`,e)}},[]),_=(0,R.useCallback)(async()=>{if(!(!e||!navigator.onLine||m())){if(i.current){h.current=!0;return}i.current=!0,r(!0),o(!1);try{let e=!0;for(;e;){h.current=!1;let t=await u.getAllPendingSyncs();if(t.length>0)for(let n of t)try{let t=``,r={},i={},a=l(n.data,n.type);try{i=JSON.parse(a)}catch{if(n.type!==L.DRAWINGS&&n.type!==L.FLOWCHART)throw Error(`Critical JSON parse error`)}if(n.type===L.NOTES)t=`/api/notes/${n.id}`,r={title:i.title,content:i.content,project_id:i.project_id};else if(n.type===L.ERD){if(t=`/api/diagrams/save/${n.id}`,i._type===`production_db_positions`){let e=await be(n.id);r={data:{nodes:i.nodes,viewport:i.viewport,_type:i._type},viewport:i.viewport,dbml_source:i.dbml_source??``,expectedVersion:e===null?void 0:e}}else{let e=(i.nodes||[]).map(e=>({...e.data,x:e.position?.x||0,y:e.position?.y||0})),t=(i.edges||[]).map(s),a=await be(n.id);r={entities:e,relationships:t,viewport:i.viewport,dbml_source:i.dbml_source??``,expectedVersion:a===null?void 0:a}}}else n.type===L.FLOWCHART?(t=`/api/flowcharts/${n.id}`,r={title:i.title,data:i.data||n.data,project_id:i.project_id}):n.type===L.DRAWINGS&&(t=`/api/drawings/${n.id}`,r={title:i.title,data:i.data||n.data,project_id:i.project_id});if(t){let i=n.updated_at,a=await N(t,{method:n.type===L.ERD?`POST`:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)});if(a.status===429){e=!1;break}if(a.status===409){try{let e=await a.json();await Se(n.id),n.type===L.ERD&&e.currentVersion!==void 0&&await xe(n.id,e.currentVersion)}catch{}continue}if(a.status===404){console.warn(`[SyncService] Draft ${n.type}#${n.id} returned 404 — marking as synced (data preserved in IndexedDB)`),await u.markSynced(n.type,n.id,i);continue}if(a.ok){let e=await a.json();n.type===L.ERD&&e.version!==void 0&&await xe(n.id,e.version),await u.markSynced(n.type,n.id,i)}}}catch{o(!0)}e=h.current}}catch{o(!0)}finally{r(!1),i.current=!1,g()}}},[e,t,l,g]),v=(0,R.useCallback)(()=>{m()||(f(!0),c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{_()},800))},[_]);(0,R.useEffect)(()=>{g(),setTimeout(()=>{navigator.onLine&&e&&!t&&_()},2e3);let n=()=>{_()};return window.addEventListener(`online`,n),()=>{window.removeEventListener(`online`,n),c.current&&clearTimeout(c.current)}},[_,e,t]);let y=(0,R.useCallback)(async(n,r)=>{if(!(!e||t))try{let e=(await u.getAllPendingSyncs()).filter(e=>e.type===n);for(let t of e){let e=r.find(e=>String(e.id)===String(t.id));e&&new Date(e.updated_at).getTime()>t.updated_at&&await u.deleteDraft(n,t.id)}}catch(e){console.error(`Error in checkAndClearStaleDrafts:`,e)}},[e,t]);return(0,R.useEffect)(()=>{(async()=>{if(!(!e||t)&&localStorage.getItem(`erd-builder-migration-diagram-to-erd`)!==`done`)try{let e=(await u.getAllPendingSyncs()).filter(e=>e.type===`diagram`);if(e.length>0)for(let t of e)await u.deleteDraft(`diagram`,t.id);localStorage.setItem(`erd-builder-migration-diagram-to-erd`,`done`)}catch(e){console.error(`Migration failed:`,e)}})()},[e,t]),{syncDrafts:_,triggerDebouncedSync:v,isSyncing:n,syncError:a,healDraftData:l,checkAndClearStaleDrafts:y,hasPendingSyncs:d,refreshPendingStatus:g}}function Le(){let[e,t]=(0,R.useState)(null),[n,r]=(0,R.useState)(!1);return(0,R.useEffect)(()=>{let e=e=>{e.preventDefault(),t(e),r(!0)},n=()=>{t(null),r(!1)};return window.addEventListener(`beforeinstallprompt`,e),window.addEventListener(`appinstalled`,n),()=>{window.removeEventListener(`beforeinstallprompt`,e),window.removeEventListener(`appinstalled`,n)}},[]),{isInstallable:n,installApp:(0,R.useCallback)(async()=>{if(!e)return;e.prompt();let{outcome:n}=await e.userChoice;t(null),r(!1)},[e])}}var Re=(e,t,n)=>({broadcastNodeMove:(0,R.useCallback)((e,t,n)=>{},[]),broadcastNodeUpdate:(0,R.useCallback)((e,t)=>{},[]),broadcastEdgesUpdate:(0,R.useCallback)(e=>{},[])}),ze=(e,t)=>`${e}\u0000${t}`,Be=(e,t)=>`${e.toLowerCase()}\u0000${t.toLowerCase()}`;function Ve(e,t,n){if(!t)return;let r=e.get(t);r?r.push(n):e.set(t,[n])}function He(e){return e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``)||null}function Ue(e){let t=He(e.sourceHandle),n=He(e.targetHandle);return!t||!n?null:[`${e.source}:${t}`,`${e.target}:${n}`].sort().join(`::`)}function We(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map;for(let t of e)for(let e of t.data.columns){let n=[String(e.id)],i=e.uid;i&&i!==e.id&&n.push(String(i));for(let i of n)r.set(ze(t.id,i),e)}let i=new Map,a=new Map,o=new Map;for(let e of t){Ve(i,Ue(e),e);let t=He(e.sourceHandle),s=He(e.targetHandle),c=n.get(e.source),l=n.get(e.target),u=t&&c?r.get(ze(c.id,t)):void 0,d=s&&l?r.get(ze(l.id,s)):void 0;if(!c||!l||!u||!d)continue;let f=u.name.toLowerCase(),p=d.name.toLowerCase();Ve(a,[`${c.id}:${f}`,`${l.id}:${p}`].sort().join(`::`),e),Ve(o,Be(c.data.name,f),e)}return{nodesById:n,columnsByNodeAndId:r,edgesByRelationKey:i,edgesByRelationName:a,edgesBySourceColumnName:o}}function Ge(e){return e&&e.replace(/^col-col-/,`col-`)}function Ke(e,t,n,r,i){let[a,s,c]=C([]),[l,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(0),m=(0,R.useRef)(``),[h,g,_]=b([]),[y,w]=(0,R.useState)(null),[T,O]=(0,R.useState)(null),k=(0,R.useRef)({x:0,y:0,zoom:1}),{setViewport:A,fitView:j,getNodes:M,getEdges:ee}=x(),P=(0,R.useCallback)(e=>{c(e),e.forEach(e=>{e.type===`position`&&e.position&&i?.broadcastNodeMove?.(e.id,e.position.x,e.position.y)})},[c,i?.broadcastNodeMove]),te=(0,R.useCallback)(e=>{_(e),setTimeout(()=>{i?.broadcastEdgesUpdate?.(h)},0)},[_,i?.broadcastEdgesUpdate,h]),{takeSnapshot:ne,undo:re,redo:ie,canUndo:ae,canRedo:oe,clearHistory:se}=S(),F=(0,R.useCallback)((e,t)=>{ne(e,t),p(e=>e+1)},[ne]),ce=(0,R.useCallback)(()=>{let e=re(a,h);e&&(s(e.nodes),g(e.edges))},[re,a,h,s,g]),le=(0,R.useCallback)(()=>{let e=ie(a,h);e&&(s(e.nodes),g(e.edges))},[ie,a,h,s,g]),I=(0,R.useRef)(!1),ue=(0,R.useRef)(t);(0,R.useEffect)(()=>{ue.current=t},[t]);let de=()=>ue.current||sessionStorage.getItem(`auth_mode`)===`guest`,fe=(0,R.useRef)(null),pe=(0,R.useCallback)(async(e,t,n)=>{if(fe.current===e)return null;fe.current=e,n?.silent||(d(!0),I.current=!0,t(e),s([]),g([]));try{await u.getDraft(L.ERD,e);let i;if(de()){let t=await u.getResource(e);if(t||=(await u.getAllResources(`erd`)).find(t=>t.uid===e)||null,!t)return d(!1),fe.current=null,null;i=t}else{let t=await N(`/api/diagrams/${e}`);if(!t.ok){let n=await t.text();return console.error(`Failed to fetch diagram ${e}:`,t.status,n),D.error(`Failed to load diagram details`),d(!1),fe.current=null,null}i=await t.json()}if(!i||i.is_deleted)return d(!1),null;if(n?.probe)return i;i.entities||(i.entities=[]),i.relationships||(i.relationships=[]),r(`erd`),se();let a=i,o=i.data;if(o&&o._type===`production_db_positions`&&o.source)try{let e=o.source,t=await N(`/api/diagrams/fetch-schema`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:e.type,host:e.host,port:e.port,user:e.user,password_encrypted:e.password_encrypted,database:e.database})});if(t.ok){let e=await t.json(),n=o.nodes||{},r=(e.schema||[]).map(e=>{let t=n[e.table_name]||{};return{id:e.table_name,name:e.table_name,x:t.x??0,y:t.y??0,color:t.color??`#6b7280`,columns:(e.columns||[]).map(t=>({...v(t,`${e.table_name}.${t.name}`),_is_fk:(e.foreign_keys||[]).some(e=>e.column===t.name)})),collapsed:t.collapsed??!1,hidden_columns:t.hidden_columns??[],note:t.note??``}}),s=[];(e.schema||[]).forEach(e=>{(e.foreign_keys||[]).forEach(t=>{s.push({id:crypto.randomUUID(),source_entity_id:e.table_name,target_entity_id:t.ref_table,source_column_id:`${e.table_name}.${t.column}`,target_column_id:`${t.ref_table}.${t.ref_column}`,source_handle:`col-${e.table_name}.${t.column}-source`,target_handle:`col-${t.ref_table}.${t.ref_column}-target`,label:``,type:`one-to-many`,data:{on_delete:t.on_delete,on_update:t.on_update,constraint_name:t.constraint_name}})})}),a={...i,entities:r,relationships:s,viewport_x:o.viewport?.x??i.viewport_x,viewport_y:o.viewport?.y??i.viewport_y,viewport_zoom:o.viewport?.zoom??i.viewport_zoom}}}catch(e){console.error(`Failed to fetch live schema:`,e),D.error(`Failed to load production DB schema`)}a.entities||(a.entities=[]),a.relationships||(a.relationships=[]);let c=a.entities.map(e=>({id:e.id,type:`entity`,position:{x:e.x,y:e.y},data:e})),l=a.relationships.map(e=>{let t=a.entities.find(t=>t.id===e.source_entity_id),n=a.entities.find(t=>t.id===e.target_entity_id),r=Ge(e.source_handle),i=Ge(e.target_handle);if(t&&n){let a=Number(t.x)||0,o=Number(n.x)||0,s=(e.source_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),c=(e.target_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);r=s?a<o?`col-${s}-source`:`col-${s}-source-l`:r,i=c?a<o?`col-${c}-target`:`col-${c}-target-r`:i}let o=(e.source_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),s=(e.target_column_id||``).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);return{id:e.id,source:e.source_entity_id,target:e.target_entity_id,sourceHandle:r||(o?`col-${o}-source`:void 0),targetHandle:i||(s?`col-${s}-target`:void 0),label:e.label,data:{on_delete:e.on_delete??e.onDelete,on_update:e.on_update??e.onUpdate,constraint_name:e.constraint_name??e.constraintName},type:`smoothstep`,animated:!1}});if(n?.isStale&&n.isStale())return;a.uid&&String(a.uid)!==String(e)&&t(a.uid),s(e=>n?.force||e.length===0?c:e),g(e=>n?.force||e.length===0?l:e),w(null);let f=a.viewport_x,p=a.viewport_y,m=a.viewport_zoom,h=f!==void 0&&p!==void 0&&m&&(f!==0||p!==0);return h&&(A({x:f,y:p,zoom:m},{duration:0}),k.current={x:f,y:p,zoom:m}),d(!1),!h&&c.length>0&&setTimeout(()=>j({padding:.2,duration:0}),100),!a.viewport_x&&c.length===0&&setTimeout(()=>A({x:0,y:0,zoom:1},{duration:0}),100),setTimeout(()=>{I.current=!1},2e3),a}catch{d(!1)}finally{fe.current=null}},[se,s,g,w,A]),me=(0,R.useCallback)(e=>e?e.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``):null,[]),he=(0,R.useCallback)(e=>{let t=me(e.sourceHandle),n=me(e.targetHandle);return!t||!n?null:[`${e.source}:${t}`,`${e.target}:${n}`].sort().join(`::`)},[me]),ge=(0,R.useCallback)(e=>{let t=new Set,n=[],r=!1;for(let i of e){let e=he(i);if(!e){n.push(i);continue}if(t.has(e)){r=!0;continue}t.add(e),n.push(i)}return r?n:e},[he]),_e=(0,R.useCallback)(t=>{if(e)return;let n=We(a,h),r=n.nodesById.get(t.source),s=n.nodesById.get(t.target);if(r&&s&&t.sourceHandle&&t.targetHandle){let e=t.sourceHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),i=t.targetHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),a=n.columnsByNodeAndId.get(ze(r.id,e)),o=n.columnsByNodeAndId.get(ze(s.id,i));if(a&&o&&a.type!==o.type){D.error(`Type Mismatch`,{description:`Cannot connect ${a.type} to ${o.type}. Relationships must have matching data types.`,duration:4e3});return}}let c=me(t.sourceHandle),l=me(t.targetHandle),u=r&&c?n.columnsByNodeAndId.get(ze(r.id,c)):void 0,d=s&&l?n.columnsByNodeAndId.get(ze(s.id,l)):void 0,f=u?.is_pk&&!d?.is_pk?s:r,p=u?.is_pk&&!d?.is_pk?d:u,m=f&&p?o(f.data.name,p.name):void 0,_={...t,animated:!1,type:`smoothstep`,label:`1:N`,data:m?{constraint_name:m}:void 0},v=he(_);if(v&&r&&s){let e=me(_.sourceHandle),t=me(_.targetHandle),i=n.columnsByNodeAndId.get(ze(r.id,e||``))?.name?.toLowerCase(),a=n.columnsByNodeAndId.get(ze(s.id,t||``))?.name?.toLowerCase(),o=i?`${_.source}:${i}`:null,c=a?`${_.target}:${a}`:null,l=!!v&&n.edgesByRelationKey.has(v),u=o&&c?n.edgesByRelationName.has([o,c].sort().join(`::`)):!1;if(l||u){D.info(`Relation already exists`);return}if(i){let e=n.edgesBySourceColumnName.get(Be(r.data.name,i))?.[0];if(e){let t=n.nodesById.get(e.target);D.error(`FK already related`,{description:`This column is already related to ${t?.data.name||`another table`}. One FK column can only point to one PK.`,duration:4e3});return}}}F(a,h);let y=ge(E(_,h));g(y),i?.broadcastEdgesUpdate?.(y)},[g,e,a,F,h,i?.broadcastEdgesUpdate,ge,he,me]),ve=(e,t)=>{let n=e,r=1;for(;t.some(e=>e.data.name.toLowerCase()===n.toLowerCase());)n=`${e}_${r}`,r++;return n},ye=()=>{let e=Math.random().toString(36).substring(2,11),t=ve(`NewTable`,a),{x:n,y:r,zoom:o}=k.current,c=-n/o+(window.innerWidth-260)/(2*o),l=-r/o+window.innerHeight/(2*o),u={id:e,name:t,x:c-100,y:l-50,color:`#6b7280`,columns:[{id:Math.random().toString(36).substring(2,11),name:`id`,type:`INT`,is_pk:!0,is_nullable:!1,sort_order:0}]},d={id:e,type:`entity`,position:{x:u.x,y:u.y},data:u};F(a,h),s(e=>{let t=e.concat(d);return i?.broadcastNodeUpdate?.(d.id,d.data),t})},be=(0,R.useCallback)(e=>{if(a.some(t=>t.id!==e.id&&t.data.name.toLowerCase()===e.name.toLowerCase())){D.error(`Duplicate Table Name`,{description:`A table with the name "${e.name}" already exists.`});return}F(a,h),s(t=>{let n=t.map(t=>t.id===e.id?(i?.broadcastNodeUpdate?.(t.id,e),{...t,data:e}):t);return g(t=>{let r=[];if(t.forEach(t=>{if(t.source===e.id||t.target===e.id){let e=n.find(e=>e.id===t.source),i=n.find(e=>e.id===t.target);if(e&&i&&t.sourceHandle&&t.targetHandle){let n=t.sourceHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),a=t.targetHandle.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),o=e.data.columns.find(e=>e.id===n),s=i.data.columns.find(e=>e.id===a);o&&s&&o.type!==s.type&&r.push(t.id)}}}),r.length>0){setTimeout(()=>{D.warning(`Relations Removed`,{description:`Some relations were automatically deleted because the column types no longer matched.`,duration:5e3})},0);let e=t.filter(e=>!r.includes(e.id));return i?.broadcastEdgesUpdate?.(e),e}return[...t]}),n})},[s,g,F,a,h,i?.broadcastNodeUpdate,i?.broadcastEdgesUpdate]),xe=(0,R.useCallback)(e=>{F(a,h),s(t=>t.filter(t=>t.id!==e));let t=h.filter(t=>t.source!==e&&t.target!==e);g(t),i?.broadcastEdgesUpdate?.(t),w(null),i?.onDeleteEntity?.(e)},[s,g,F,a,h,i?.broadcastEdgesUpdate,i?.onDeleteEntity]),Se=(0,R.useCallback)(e=>{let t=a.find(t=>t.id===e);if(!t)return;let n=Math.random().toString(36).substring(2,11),r=ve(t.data.name,a),o=t.data.columns.map(e=>({id:Math.random().toString(36).substring(2,11),name:e.name,type:e.type,is_pk:e.is_pk,is_nullable:e.is_nullable,enum_name:e.enum_name,enum_values:e.enum_values,sort_order:e.sort_order,_is_fk:!1})),c={x:t.position.x+36,y:t.position.y+36},l={id:n,type:`entity`,position:c,data:{id:n,name:r,x:c.x,y:c.y,color:t.data.color,columns:o}};F(a,h),s(e=>{let t=e.concat(l);return i?.broadcastNodeUpdate?.(l.id,l.data),t}),w(n),D.success(`Duplicated as "${r}"`,{description:`${o.length} column${o.length===1?``:`s`} copied. Relationships were not duplicated.`})},[a,F,s,w,i?.broadcastNodeUpdate]),Ce=(e,t)=>{F(a,h);let n=typeof t==`string`?{label:t}:t,r=h.map(t=>t.id===e?{...t,...n,data:{...t.data||{},...n.data||{}}}:t);g(r),i?.broadcastEdgesUpdate?.(r)},we=(0,R.useCallback)(e=>e&&(e.endsWith(`-source`)?e.replace(/-source$/,`-source-l`):e.endsWith(`-source-l`)?e.replace(/-source-l$/,`-source`):e.endsWith(`-target`)?e.replace(/-target$/,`-target-r`):e.endsWith(`-target-r`)?e.replace(/-target-r$/,`-target`):e),[]),Te=(0,R.useCallback)(e=>{if(!h.find(t=>t.id===e))return;let t=h.map(t=>t.id===e?{...t,sourceHandle:we(t.sourceHandle),targetHandle:we(t.targetHandle)}:t);F(a,h),g(t),i?.broadcastEdgesUpdate?.(t)},[h,a,g,F,i?.broadcastEdgesUpdate,we]),Ee=e=>{F(a,h);let t=h.filter(t=>t.id!==e);g(t),i?.broadcastEdgesUpdate?.(t),O(null)},De=(0,R.useCallback)((e,t,n)=>{let r=e.sourceHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),i=e.targetHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);if(!r||!i)return e;let a=t.data.columns.find(e=>e.id===r),o=n.data.columns.find(e=>e.id===i);if(a&&o&&a.is_pk&&!o.is_pk){let a=n,o=t,s=i,c=r,l=a.position.x||0,u=o.position.x||0;return{...e,source:e.target,target:e.source,sourceHandle:l<u?`col-${s}-source`:`col-${s}-source-l`,targetHandle:l<u?`col-${c}-target`:`col-${c}-target-r`}}let s=e.sourceHandle?e.sourceHandle.endsWith(`-target`)||e.sourceHandle.endsWith(`-target-r`):!1,c=e.targetHandle?e.targetHandle.endsWith(`-source`)||e.targetHandle.endsWith(`-source-l`):!1;if(e.sourceHandle&&e.targetHandle&&!s&&!c)return e;let l=t.position.x||0,u=n.position.x||0,d=l<u?`-source`:`-source-l`,f=l<u?`-target`:`-target-r`;return{...e,sourceHandle:e.sourceHandle?e.sourceHandle.replace(/-(source|target)(-(l|r))?$/,d):`col-${r}${d}`,targetHandle:e.targetHandle?e.targetHandle.replace(/-(source|target)(-(l|r))?$/,f):`col-${i}${f}`}},[]);(0,R.useEffect)(()=>{let e=JSON.stringify(h.map(e=>({s:e.source,sh:e.sourceHandle,t:e.target,th:e.targetHandle}))),t=new Map(a.map(e=>[e.id,e]));g(e=>{let n=!1,r=e.map(e=>{let r=t.get(e.source),i=t.get(e.target);if(!r||!i)return e;let a=De(e,r,i);return a.source!==e.source||a.target!==e.target||a.sourceHandle!==e.sourceHandle||a.targetHandle!==e.targetHandle?(n=!0,a):e}),i=ge(n?r:e);return i===e?e:i}),e!==m.current&&(m.current=e,s(e=>{let t={};h.forEach(e=>{t[e.source]||(t[e.source]=new Set);let n=e.sourceHandle?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);n&&t[e.source].add(n)});let n=!1,r=e.map(e=>{let r=t[e.id]||new Set,i=!1,a=e.data.columns.map(e=>{let t=!e.is_pk&&r.has(e.id);return e._is_fk!==t&&(i=!0),{...e,_is_fk:t}});return i?(n=!0,{...e,data:{...e.data,columns:a}}):e});return n?r:e}))},[h,De,s,g,ge]);let Oe=(0,R.useCallback)(()=>{let e=M(),t=ee(),n=new Map(e.map(e=>[e.id,e]));g(e=>{let t=!1,r=e.map(e=>{let r=n.get(e.source),i=n.get(e.target);if(!r||!i)return e;let a=De(e,r,i);return a.source!==e.source||a.target!==e.target||a.sourceHandle!==e.sourceHandle||a.targetHandle!==e.targetHandle?(t=!0,a):e}),i=ge(t?r:e);return i===e?e:i}),F(e,t)},[g,F,M,ee,De,ge]),ke=(0,R.useCallback)((t,n)=>{if(!e&&!I.current){let e=k.current;(Math.abs((e.x||0)-n.x)>.5||Math.abs((e.y||0)-n.y)>.5||Math.abs((e.zoom||1)-n.zoom)>.001)&&(k.current=n)}},[e]);return(0,R.useEffect)(()=>{let e=e=>{let t=e.target;if(t?.matches(`input, textarea, [contenteditable="true"]`)||t?.closest(`.cm-editor`))return;let n=e.key.toLowerCase();(e.ctrlKey||e.metaKey)&&n===`z`?(e.preventDefault(),e.shiftKey?oe&&le():ae&&ce()):(e.ctrlKey||e.metaKey)&&n===`y`&&(e.preventDefault(),oe&&le())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[ce,le,ae,oe]),(0,R.useEffect)(()=>{let e=e=>{let t=e.detail;xe(t)};return window.addEventListener(`deleteEntity`,e),()=>{window.removeEventListener(`deleteEntity`,e)}},[xe]),{nodes:a,setNodes:s,onNodesChange:P,edges:h,setEdges:g,onEdgesChange:te,selectedNodeId:y,setSelectedNodeId:w,selectedEdgeId:T,setSelectedEdgeId:O,onConnect:_e,addEntity:ye,duplicateEntity:Se,updateEntity:be,deleteEntity:xe,handleEdgeUpdate:Ce,handleEdgeFlip:Te,deleteEdge:Ee,handleDiagramSelect:pe,viewportRef:k,undo:ce,redo:le,canUndo:ae,canRedo:oe,takeSnapshot:F,isItemLoading:l,saveCounter:f,onNodeDragStop:Oe,onMoveEnd:ke,extractColumnIdFromHandle:me,getRelationKey:he,dedupeEdgesByRelation:ge}}function qe(e,t){let n=t===`mysql`?"`":`"`;return`${n}${e.replace(new RegExp(n,`g`),`${n}${n}`)}${n}`}function B(e,t){return t.map(t=>e.columns.find(e=>e.id===t)?.name).filter(e=>!!e)}function Je(e,t){return(e||t).replace(/\s+/g,`_`)}function Ye(e,t){let n=qe(e.name.toLowerCase(),t),r=[],i=new Set(e.columns.filter(e=>e.is_unique).map(e=>e.name)),a=new Set(e.columns.filter(e=>e.is_pk).map(e=>e.name));for(let o of e.constraints||[]){let s=B(e,o.column_ids||[]);if(s.length===0)continue;let c=s.map(e=>qe(e,t)).join(`, `),l=qe(Je(o.name,`${e.name}_${o.kind}_${s.join(`_`)}`),t);if(o.kind===`primary_key`){if(s.length===1&&a.has(s[0]))continue;r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} PRIMARY KEY (${c});`)}else if(o.kind===`unique`){if(s.length===1&&i.has(s[0]))continue;r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} UNIQUE (${c});`)}else o.kind===`check`&&o.expression&&r.push(`ALTER TABLE ${n} ADD CONSTRAINT ${l} CHECK (${o.expression});`)}for(let a of e.indexes||[]){let o=B(e,a.column_ids||[]);if(o.length===0||o.length===1&&a.is_unique&&i.has(o[0]))continue;let s=qe(Je(a.name,`${e.name}_${a.is_unique?`unique`:`idx`}_${o.join(`_`)}`),t),c=a.is_unique?`UNIQUE `:``,l=a.algorithm?String(a.algorithm).toUpperCase():``,u=l&&t===`mysql`?` USING ${l}`:``,d=l&&t===`postgresql`?` USING ${l.toLowerCase()}`:``;r.push(`CREATE ${c}INDEX ${s}${u} ON ${n}${d} (${o.map(e=>qe(e,t)).join(`, `)});`)}return r.join(`
3
3
  `)}function Xe(e){let t=[],n=new Set(e.columns.filter(e=>e.is_unique).map(e=>e.name)),r=new Set(e.columns.filter(e=>e.is_pk).map(e=>e.name)),i=t=>B(e,t).map(e=>`'${e.replace(/'/g,`\\'`)}'`).join(`, `),a=e=>e?`, '${e.replace(/'/g,`\\'`)}'`:``;for(let o of e.constraints||[]){let s=B(e,o.column_ids||[]);s.length!==0&&(o.kind===`primary_key`&&!(s.length===1&&r.has(s[0]))?t.push(` $table->primary([${i(o.column_ids||[])}]${a(o.name)});`):o.kind===`unique`&&!(s.length===1&&n.has(s[0]))&&t.push(` $table->unique([${i(o.column_ids||[])}]${a(o.name)});`))}for(let r of e.indexes||[]){let o=B(e,r.column_ids||[]);if(o.length===0||o.length===1&&r.is_unique&&n.has(o[0]))continue;let s=r.is_unique?`unique`:`index`;t.push(` $table->${s}([${i(r.column_ids||[])}]${a(r.name)});`)}return t.join(`
4
4
  `)}function Ze(e){let t=[],n=new Set(e.columns.filter(e=>e.is_unique).map(e=>e.name)),r=new Set(e.columns.filter(e=>e.is_pk).map(e=>e.name)),i=t=>B(e,t).join(`, `),a=e=>e?`, map: "${e.replace(/"/g,`\\"`)}"`:``;for(let o of e.constraints||[]){let s=B(e,o.column_ids||[]);s.length!==0&&(o.kind===`primary_key`&&!(s.length===1&&r.has(s[0]))?t.push(` @@id([${i(o.column_ids||[])}]${a(o.name)})`):o.kind===`unique`&&!(s.length===1&&n.has(s[0]))&&t.push(` @@unique([${i(o.column_ids||[])}]${a(o.name)})`))}for(let r of e.indexes||[]){let o=B(e,r.column_ids||[]);o.length===0||o.length===1&&r.is_unique&&n.has(o[0])||t.push(` @@${r.is_unique?`unique`:`index`}([${i(r.column_ids||[])}]${a(r.name)})`)}return t}function Qe(e){let t=[],n=new Set(e.columns.filter(e=>e.is_unique).map(e=>e.name)),r=new Set(e.columns.filter(e=>e.is_pk).map(e=>e.name)),i=e=>e.map(e=>`"${e.replace(/"/g,`\\"`)}"`).join(`, `);for(let n of e.columns)n.is_unique&&!n.is_pk&&t.push(` table.Unique("${n.name.replace(/"/g,`\\"`)}")`);for(let a of e.constraints||[]){let o=B(e,a.column_ids||[]);o.length!==0&&(a.kind===`primary_key`&&!(o.length===1&&o[0]===`id`&&r.has(o[0]))?t.push(` table.Primary(${i(o)})`):a.kind===`unique`&&!(o.length===1&&n.has(o[0]))&&t.push(` table.Unique(${i(o)})`))}for(let r of e.indexes||[]){let a=B(e,r.column_ids||[]);a.length===0||a.length===1&&r.is_unique&&n.has(a[0])||t.push(` table.${r.is_unique?`Unique`:`Index`}(${i(a)})`)}return t}function $e(e,t,n,r,i){let a=e.toLowerCase(),o=r?`DECIMAL(${r}${i==null?``:`,${i}`})`:`DECIMAL(10,2)`;if(t===`mysql`)switch(a){case`varchar`:return`VARCHAR(${n||255})`;case`integer`:case`int`:return`INT`;case`bigint`:return`BIGINT`;case`text`:return`TEXT`;case`longtext`:return`LONGTEXT`;case`boolean`:case`bool`:return`TINYINT(1)`;case`timestamp`:return`TIMESTAMP`;case`datetime`:return`DATETIME`;case`date`:return`DATE`;case`decimal`:case`numeric`:return o;case`float`:return`FLOAT`;case`uuid`:return`VARCHAR(36)`;case`ulid`:return`CHAR(26)`;case`json`:return`JSON`;default:return a.toUpperCase()}if(t===`postgresql`)switch(a){case`varchar`:return`VARCHAR(${n||255})`;case`integer`:case`int`:return`INTEGER`;case`bigint`:return`BIGINT`;case`text`:return`TEXT`;case`longtext`:return`TEXT`;case`boolean`:case`bool`:return`BOOLEAN`;case`timestamp`:return`TIMESTAMP`;case`datetime`:return`TIMESTAMP`;case`date`:return`DATE`;case`decimal`:case`numeric`:return o;case`float`:return`REAL`;case`uuid`:return`UUID`;case`ulid`:return`CHAR(26)`;case`json`:return`JSONB`;default:return a.toUpperCase()}return a}function et(e){return e.endsWith(`ies`)?e.slice(0,-3)+`y`:e.endsWith(`ses`)?e.slice(0,-2):e.endsWith(`s`)&&!e.endsWith(`ss`)?e.slice(0,-1):e}function V(e,t=!1){let n=e.split(`_`);return t&&n.length>0&&(n[n.length-1]=et(n[n.length-1])),n.map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function tt(e){return[`CREATE TABLE \`${e.name.toLowerCase()}\` (\n${e.columns.map(e=>{let t=$e(e.type,`mysql`,e.max_length,e.numeric_precision,e.numeric_scale),n=e.is_nullable?`NULL`:`NOT NULL`,r=e.is_pk?` AUTO_INCREMENT PRIMARY KEY`:``,i=e.type.toLowerCase()===`enum`&&e.enum_values?`ENUM(${e.enum_values.split(`,`).map(e=>`'${e.trim()}'`).join(`, `)})`:t,a=_(e.default_value,!!e.is_nullable),o=a?` DEFAULT ${a}`:``,s=e.is_unique?` UNIQUE`:``,c=e.comment?` COMMENT '${e.comment.replace(/'/g,`''`)}'`:``;return` \`${e.name}\` ${i}${o} ${n}${s}${r}${c}`}).join(`,
5
5
  `)}\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci${e.comment?` COMMENT='${e.comment.replace(/'/g,`''`)}'`:``};`,Ye(e,`mysql`)].filter(Boolean).join(`
@@ -68,4 +68,4 @@ func (m *${r}) Down() error {
68
68
 
69
69
  `);a.push({filename:`schema.prisma`,content:[`// ERD Export: ${r}`,`// Prisma Schema`,``,`generator client {`,` provider = "prisma-client-js"`,`}`,``,`datasource db {`,` provider = "postgresql"`,` url = env("DATABASE_URL")`,`}`,``,e].join(`
70
70
  `)});break}case`zod`:i.forEach(e=>{let t=V(e.name,!0);a.push({filename:`${t}Schema.ts`,content:lt(e)})});break;case`goravel`:i.forEach(e=>{let t=V(e.name,!0);a.push({filename:`models/${t}.go`,content:st(e)})});break;case`goravel_migration`:{let e=ft(i,n);i.forEach(t=>{let n=e.get(t.id);a.push({filename:`migrations/create_${t.name.toLowerCase()}_table.go`,content:ct(t,n)})});break}}return a}function mt(e,t,n){let r=new Map(e.map(e=>[e.id,e])),i=[],a=new Set;return t.forEach(e=>{let t=r.get(e.source),s=r.get(e.target);if(!t||!s)return;let c=e.sourceHandle?.replace(`col-`,``).replace(`-source-l`,``).replace(`-source`,``),l=e.targetHandle?.replace(`col-`,``).replace(`-target-r`,``).replace(`-target`,``),u=t.columns.find(e=>e.id===c),d=s.columns.find(e=>e.id===l);if(!u||!d)return;let f=`${t.name}.${u.name}->${s.name}.${d.name}`;if(a.has(f))return;a.add(f);let p=e.data||{},m=p.constraint_name?String(p.constraint_name):o(t.name,u.name),h=n===`mysql`?"`":`"`,g=(e,t)=>{let n=typeof e==`string`?e.trim().toUpperCase():``;return n&&n!==`NO ACTION`?` ON ${t} ${n}`:``};i.push(`ALTER TABLE ${h}${t.name}${h} ADD CONSTRAINT ${h}${m}${h} FOREIGN KEY (${h}${u.name}${h}) REFERENCES ${h}${s.name}${h}(${h}${d.name}${h})${g(p.on_delete,`DELETE`)}${g(p.on_update,`UPDATE`)};`)}),i.join(`
71
- `)}function ht(e){return{mysql:`sql`,postgresql:`sql`,laravel_migration:`php`,laravel_model:`php`,typescript:`ts`,prisma:`prisma`,zod:`ts`,goravel:`go`,goravel_migration:`go`}[e]||`txt`}function gt(){return{handleExportSQL:(e,t,n,r)=>{let i=dt(e,n,r,t.name),a=new Blob([i],{type:`text/plain`}),o=URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=`${t.name.toLowerCase().replace(/\s+/g,`_`)}_schema.sql`,s.click(),URL.revokeObjectURL(o)}}}var _t=`erd-update-dismissed-version`,vt=`erd-update-notified-version`;function yt(){return!!window.__TAURI__||!!window.__TAURI_INTERNALS__}async function H(e,t,n){if(yt())try{await fetch(`http://localhost:3099/api/log/update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({level:e,message:t,extra:n,timestamp:new Date().toISOString()})})}catch{}}function bt(e,t,n){let[i,a]=(0,R.useState)(!1),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(!1),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(null),m=(0,R.useRef)(e);m.current=e;let h=(0,R.useRef)(!1),g=(0,R.useRef)(null),_=(0,R.useRef)(!1),v=(0,R.useCallback)(e=>{localStorage.setItem(_t,e)},[]),y=(0,R.useCallback)(e=>typeof window>`u`?!1:localStorage.getItem(_t)===e,[]),b=(0,R.useCallback)(async e=>{if(H(`debug`,`handleDownloadUpdate called`,`downloadingRef=${_.current} version=${e.version}`),_.current){H(`debug`,`BLOCKED: download already in progress`);return}_.current=!0,d(!0),H(`info`,`download STARTED`);let t=D.loading(`Downloading update...`,{description:`Please wait, downloading the latest version.`});H(`info`,`download_started`,e.version);try{let n=0,i=0;await e.downloadAndInstall(e=>{switch(e.event){case`Started`:i=e.data.contentLength||0,H(`info`,`download_progress`,`0% of ${U(i)}`),D.loading(`Downloading update...`,{id:t,description:`0% - ${U(i)}`});break;case`Progress`:n+=e.data.chunkLength;let r=Math.round(n/i*100);D.loading(`Downloading update... ${r}%`,{id:t,description:`${U(n)} / ${U(i)}`});break;case`Finished`:H(`info`,`download_finished`,`ready to install`)}}),H(`info`,`downloadAndInstall resolved — install complete`),D.success(`Update installed successfully!`,{id:t,description:`The application will now restart to apply the update.`,duration:8e3}),setTimeout(async()=>{try{let{relaunch:e}=await r(async()=>{let{relaunch:e}=await import(`./dist-js-C7JaR3Vq.js`);return{relaunch:e}},__vite__mapDeps([0,1]));await e()}catch{window.location.reload()}},1e3),d(!1),_.current=!1}catch(e){let n=typeof e==`string`?e:e?.message||e?.toString?.()||JSON.stringify(e);H(`error`,`download_failed`,n),D.error(`Update failed`,{id:t,description:n||`An error occurred while downloading the update.`,duration:12e3,action:{label:`Copy Error`,onClick:()=>navigator.clipboard.writeText(n).catch(()=>{})}}),d(!1),_.current=!1}},[]),x=(0,R.useCallback)(async(e=!1)=>{if(H(`debug`,`performCheck called`,`isManual=${e} checkingRef=${h.current}`),!(window.__TAURI__||window.__TAURI_INTERNALS__))return H(`debug`,`SKIP: not Tauri`),!1;if(h.current)return H(`debug`,`SKIP: already checking`),!1;h.current=!0,l(!0);let t=``;try{let{getVersion:e}=await r(async()=>{let{getVersion:e}=await import(`./app-Dwb58oCT.js`);return{getVersion:e}},__vite__mapDeps([2,1,3]));t=await e()}catch{t=`0.0.0`}let n;e&&(n=D.loading(`Checking for updates...`,{description:`ERD Builder Pro v${t}`})),H(`info`,`check_started`,`current=${t} manual=${e}`);try{let r=await P();if(r)return a(!0),s(r.version),p(r),n&&D.dismiss(n),!e&&(g.current===r.version||y(r.version))?(H(`debug`,`SKIP toast: already shown/dismissed`,r.version),l(!1),h.current=!1,!0):(g.current=r.version,H(`info`,`update_available`,`v${r.version}`),e&&localStorage.getItem(vt)===r.version?(H(`debug`,`SKIP toast: already notified by auto-check`,r.version),a(!0),s(r.version),p(r),m.current?.(),l(!1),h.current=!1,!0):(H(`debug`,`SHOWING toast: Update Available`,`v${r.version} manual=${e}`),D.info(`Update Available`,{description:`New version (v${r.version}) is ready.`,duration:1/0,action:{label:`Update Now`,onClick:()=>b(r)},cancel:{label:`Later`,onClick:()=>v(r.version)}}),e||localStorage.setItem(vt,r.version),m.current?.(),l(!1),h.current=!1,!0));n&&D.dismiss(n),e&&D.success(`You're up to date`,{description:`ERD Builder Pro v${t} is the latest version.`}),H(`info`,`no_update`,`current=${t}`),a(!1),s(null),p(null)}catch(t){H(`error`,`check_failed`,t?.message||String(t)),n&&D.dismiss(n),e&&D.error(`Check failed`,{description:`Could not check for updates. Check your internet connection.`})}return l(!1),h.current=!1,!1},[y,b]),S=(0,R.useCallback)(()=>{H(`debug`,`handleDownload called`,`update=${f?.version} downloadingRef=${_.current}`),f&&b(f)},[f,b]),C=(0,R.useRef)(x);C.current=x;let w=(0,R.useCallback)(()=>{H(`debug`,`checkNow (manual trigger)`),C.current(!0)},[]);return(0,R.useEffect)(()=>{if(t)return;H(`debug`,`scheduling auto-check in 5s`);let e=setTimeout(()=>{H(`debug`,`auto-check timer fired`),C.current(!1)},5e3);return()=>clearTimeout(e)},[t]),(0,R.useEffect)(()=>{if(n)return;let e=()=>C.current(!0);return window.addEventListener(`menu-check-update`,e),()=>window.removeEventListener(`menu-check-update`,e)},[n]),{hasUpdate:i,latestVersion:o,isChecking:c,isDownloading:u,checkNow:w,handleDownload:S}}function U(e){if(e===0)return`0 B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=Math.floor(Math.log(e)/Math.log(t));return Math.round(e/t**r*100)/100+` `+n[r]}var xt=`erd-version-check`,St=`erd-version-current`,Ct=36e5;function wt(){try{return`3.4.4`}catch{return`0.0.0`}}async function Tt(){try{let e=await fetch(`/api/version/current`);if(e.ok){let t=(await e.json())?.current;if(t&&t!==`0.0.0`)return localStorage.setItem(St,t),t}}catch{}return localStorage.getItem(St)||wt()}function Et(){try{let e=localStorage.getItem(xt);if(!e)return null;let t=JSON.parse(e);return Date.now()-t.fetchedAt>Ct?null:t}catch{return null}}function Dt(e,t){try{localStorage.setItem(xt,JSON.stringify({latest:e,current:t,fetchedAt:Date.now()}))}catch{}}function Ot(){let[e,t]=(0,R.useState)(!1),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(wt()),o=(0,R.useRef)(!1),s=(0,R.useCallback)(async()=>{if(o.current)return;o.current=!0;let e=await Tt();a(e);let n=Et();if(n&&n.current===e){n.latest!==e&&n.latest&&(t(!0),r(n.latest));return}try{let n=await fetch(`/api/version/latest`);if(!n.ok)return;let i=(await n.json())?.latest;if(!i)return;Dt(i,e),i!==e&&(t(!0),r(i))}catch{let n=Et();n&&n.latest!==e&&n.latest&&(t(!0),r(n.latest))}},[]);return(0,R.useEffect)(()=>{s()},[s]),{isOutdated:e,latestVersion:n,currentVersion:i,checkNow:s}}var kt=48,At=220,jt=42,Mt=40;function Nt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function W(e){return/^#[0-9a-f]{3,8}$/i.test(e||``)?e:`#6b7280`}function Pt(e){return f(e.type,e.max_length,e.numeric_precision,e.numeric_scale).toLowerCase()}function Ft(e){return e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``)}function It(e,t){return t?e?.endsWith(`-source-l`)?O.Left:O.Right:e?.endsWith(`-target-r`)?O.Right:O.Left}function G(e,t,n){let r=[...e.node.data.columns].sort((e,t)=>(e.sort_order||0)-(t.sort_order||0)),i=r.findIndex(e=>e.id===Ft(t)),a=r.length?(e.height-jt)/r.length:Mt,o=e.node.position.y+(i<0?e.height/2:jt+(i+.5)*a),s=It(t,n);return{x:e.node.position.x+(s===O.Left?0:e.width),y:o,position:s}}function Lt(e,t,n){if(!e.length)return``;let r=n===`dark`?{background:`#09090b`,card:`#18181b`,text:`#f4f4f5`,muted:`#a1a1aa`,row:`#27272a`,edge:`#e4e4e7`}:{background:`#ffffff`,card:`#ffffff`,text:`#18181b`,muted:`#71717a`,row:`#e4e4e7`,edge:`#52525b`},i=new Map(e.map(e=>{let t=e.measured?.width||At,n=e.measured?.height||jt+Math.max(e.data.columns.length,1)*Mt;return[e.id,{node:e,width:t,height:n}]})),a=[...i.values()],o=Math.min(...a.map(({node:e})=>e.position.x))-kt,s=Math.min(...a.map(({node:e})=>e.position.y))-kt,c=Math.max(...a.map(({node:e,width:t})=>e.position.x+t))+kt,l=Math.max(...a.map(({node:e,height:t})=>e.position.y+t))+kt,u=t.map(e=>{let t=i.get(e.source),n=i.get(e.target);if(!t||!n)return``;let a=G(t,e.sourceHandle,!0),o=G(n,e.targetHandle,!1),[s]=T({sourceX:a.x,sourceY:a.y,sourcePosition:a.position,targetX:o.x,targetY:o.y,targetPosition:o.position});return`<path d="${s}" fill="none" stroke="${r.edge}" stroke-width="2" marker-end="url(#arrow)"/>`}).join(``),d=a.map(({node:e,width:t,height:n})=>{let i=W(e.data.color),a=[...e.data.columns].sort((e,t)=>(e.sort_order||0)-(t.sort_order||0)),o=a.length?(n-jt)/a.length:Mt,s=a.map((e,n)=>{let a=jt+n*o,s=`${e.is_pk?`PK`:``}${e._is_fk?`${e.is_pk?` · `:``}FK`:``}`,c=e.type.toUpperCase()===`ENUM`&&e.enum_values?` (${e.enum_values})`:``;return`<g><line x1="0" y1="${a}" x2="${t}" y2="${a}" stroke="${r.row}"/><text x="12" y="${a+o/2+5}" fill="${r.text}" font-size="14" font-weight="${e.is_pk?`600`:`500`}">${Nt(e.name)}</text><text x="${t-12}" y="${a+o/2+5}" fill="${i}" font-family="monospace" font-size="11" font-weight="600" text-anchor="end">${Nt(`${Pt(e)}${c}`)}</text>${s?`<text x="${t-12}" y="${a+o/2+18}" fill="${r.muted}" font-size="9" font-weight="700" text-anchor="end">${s}</text>`:``}</g>`}).join(``);return`<g transform="translate(${e.position.x} ${e.position.y})"><rect width="${t}" height="${n}" rx="8" fill="${r.card}" stroke="${i}" stroke-width="2"/><path d="M8 0H${t-8}Q${t} 0 ${t} 8V${jt}H0V8Q0 0 8 0" fill="${i}" fill-opacity="0.13"/><line x1="0" y1="${jt}" x2="${t}" y2="${jt}" stroke="${i}" stroke-width="2"/><text x="12" y="27" fill="${r.text}" font-size="14" font-weight="700">${Nt(e.data.name)}</text>${s}</g>`}).join(``);return`<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="${o} ${s} ${c-o} ${l-s}" width="${c-o}" height="${l-s}" font-family="Inter, Helvetica, Arial, sans-serif"><defs><marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0L10 5L0 10Z" fill="${r.edge}"/></marker></defs><rect x="${o}" y="${s}" width="${c-o}" height="${l-s}" fill="${r.background}"/>${u}${d}</svg>`}function Rt(){let{getNodes:e,getEdges:t}=x();return{handleExportImage:(0,R.useCallback)((n=`diagram`)=>{let r=e();if(r.length===0){D.error(`Canvas is empty`);return}try{let e=Lt(r,t(),document.documentElement.classList.contains(`dark`)?`dark`:`light`);w(e,`${n.replace(/\s+/g,`_`).toLowerCase()}.svg`),D.success(`SVG exported successfully`)}catch(e){console.error(`SVG export failed:`,e),D.error(`SVG export failed.`)}},[t,e])}}var zt=function(e){return e.DRAFT_UPDATED=`DRAFT_UPDATED`,e.SYNC_COMPLETED=`SYNC_COMPLETED`,e.VIEW_REFRESH_REQUESTED=`VIEW_REFRESH_REQUESTED`,e}({}),K=Math.random().toString(36).substring(2,11),Bt=`erd_builder_sync_channel`,Vt=e=>{let t=(0,R.useRef)(null);return(0,R.useEffect)(()=>{let n=new BroadcastChannel(Bt);t.current=n;let r=t=>{t.data.payload.senderId!==K&&e&&e(t.data)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}},[e]),{broadcastMessage:(0,R.useCallback)((e,n,r)=>{if(t.current){let i={type:e,payload:{type:n,id:r,timestamp:Date.now(),senderId:K}};t.current.postMessage(i)}},[]),tabId:K}};function Ht(e){let{createDiagram:t,updateDiagram:n,deleteDiagram:r,createNote:i,updateNote:a,deleteNote:o,createDrawing:s,updateDrawing:c,deleteDrawing:l,createFlowchart:u,updateFlowchart:d,deleteFlowchart:f,createProject:p,updateProject:m,deleteProject:h,moveDiagramToProject:g,moveNoteToProject:_,moveDrawingToProject:v,moveFlowchartToProject:y,fetchProjects:b,fetchDiagrams:x,fetchNotes:S,fetchDrawings:C,fetchFlowcharts:w,fetchTrash:T,handleDiagramSelect:E,handleNoteSelect:D,handleDrawingSelect:O,handleFlowchartSelect:k,searchQuery:A,activeProjectId:j,notesRef:M,copyMarkdownToClipboard:ee,setIsImportNoteModalOpen:N,setIsExportNoteModalOpen:P}=e;return{handleSidebarDiagramCreate:(0,R.useCallback)(async(e,n,r)=>{let i=await t(e,n);return i&&(await b(),r?.silent||await E(i.uid||i.id)),i},[t,b,E]),handleSidebarNoteCreate:(0,R.useCallback)(async(e,t)=>{let n=await i(e,t);return n&&(await b(),await D(n.uid)),n},[i,b,D]),handleSidebarDrawingCreate:(0,R.useCallback)(async(e,t,n)=>{let r=await s(e,t);return r&&(await b(),n?.silent||await O(r.uid??r.id)),r},[s,b,O]),handleSidebarFlowchartCreate:(0,R.useCallback)(async(e,t,n)=>{let r=await u(e,t);return r&&(await b(),n?.silent||await k(r.uid)),r},[u,b,k]),handleSidebarProjectCreate:(0,R.useCallback)(async e=>{await p(e),await b()},[p,b]),handleSidebarProjectUpdate:(0,R.useCallback)(async(e,t)=>{await m(e,t),await b()},[m,b]),handleSidebarProjectDelete:(0,R.useCallback)(async e=>{await h(e),await T(),await b(),await Promise.all([x(),S(),C(),w()])},[h,T,b,x,S,C,w]),handleSidebarDiagramUpdate:(0,R.useCallback)(async(e,t,r)=>{await n(e,t,r),await b()},[n,b]),handleSidebarNoteUpdate:(0,R.useCallback)(async(e,t,n)=>{await a(String(e),t,n),await b()},[a,b]),handleSidebarDrawingUpdate:(0,R.useCallback)(async(e,t,n)=>{await c(e,t,n),await b()},[c,b]),handleSidebarFlowchartUpdate:(0,R.useCallback)(async(e,t,n)=>{await d(e,t,n),await b()},[d,b]),handleSidebarDiagramDelete:(0,R.useCallback)(async e=>{await r(e),await T(),await b()},[r,T,b]),handleSidebarNoteDelete:(0,R.useCallback)(async e=>{await o(String(e)),await T(),await b()},[o,T,b]),handleSidebarDrawingDelete:(0,R.useCallback)(async e=>{await l(e),await T(),await b()},[l,T,b]),handleSidebarFlowchartDelete:(0,R.useCallback)(async e=>{await f(e),await T(),await b()},[f,T,b]),handleSidebarMoveDiagramToProject:(0,R.useCallback)(async(e,t,n)=>{await g(e,t,n),await b()},[g,b]),handleSidebarMoveNoteToProject:(0,R.useCallback)(async(e,t,n)=>{await _(String(e),t,n),await b()},[_,b]),handleSidebarMoveDrawingToProject:(0,R.useCallback)(async(e,t,n)=>{await v(e,t,n),await b()},[v,b]),handleSidebarMoveFlowchartToProject:(0,R.useCallback)(async(e,t,n)=>{await y(e,t,n),await b()},[y,b]),handleSidebarLoadMoreProjects:(0,R.useCallback)(()=>b(!0,A),[b,A]),handleSidebarLoadMoreDiagrams:(0,R.useCallback)(()=>x(!0,j===null?`all`:j,A),[x,j,A]),handleSidebarLoadMoreNotes:(0,R.useCallback)(()=>S(!0,j===null?`all`:j,A),[S,j,A]),handleSidebarLoadMoreDrawings:(0,R.useCallback)(()=>C(!0,j===null?`all`:j,A),[C,j,A]),handleSidebarLoadMoreFlowcharts:(0,R.useCallback)(()=>w(!0,j===null?`all`:j,A),[w,j,A]),handleSidebarNoteCopyMarkdown:(0,R.useCallback)(async e=>{let t=M.current.find(t=>String(t.uid)===String(e));t&&await ee(t.content||``)},[M,ee]),handleSidebarNoteImportMarkdown:(0,R.useCallback)(e=>{D(e),setTimeout(()=>N(!0),100)},[D,N]),handleSidebarNoteExportMarkdown:(0,R.useCallback)(e=>{D(e),setTimeout(()=>P(!0),100)},[D,P])}}function Ut(e,t){if(!e?.project_id||!t?.length)return!1;let n=t.find(t=>String(t.id)===String(e.project_id)||String(t.uid)===String(e.project_id));if(n){let t=n.name||`Unknown`,r=e.name||e.title||``;return D.warning(`"${r}" belongs to "${t}" which is also in the trash. Restore "${t}" first, then restore this file.`,{duration:6e3}),!0}return!1}function Wt(e){let{restoreProject:t,restoreDiagram:n,restoreNote:r,restoreDrawing:i,restoreFlowchart:a,restoreDbClient:o,fetchTrash:s,fetchProjects:c,fetchDiagrams:l,fetchNotes:u,fetchDrawings:d,fetchFlowcharts:f,debouncedSearchQuery:p,setItemToDelete:m,setIsPermanentDeleteConfirmOpen:h,trashData:g}=e,_=g?.projects||[];return{handleTrashRestoreProject:(0,R.useCallback)(async e=>{await t(e),await s(),await c()},[t,s,c]),handleTrashRestoreDiagram:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await n(t),await s(),await c(),await l(!1,`all`,p,null,50,void 0,{silent:!0}))},[n,s,c,l,p,_]),handleTrashRestoreNote:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await r(t),await s(),await c(),await u(!1,`all`,p,null,50,void 0,{silent:!0}))},[r,s,c,u,p,_]),handleTrashRestoreDrawing:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await i(t),await s(),await c(),await d(!1,`all`,p,null,50,void 0,{silent:!0}))},[i,s,c,d,p,_]),handleTrashRestoreFlowchart:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await a(t),await s(),await c(),await f(!1,`all`,p,null,50,void 0,{silent:!0}))},[a,s,c,f,p,_]),handleTrashRestoreDbClient:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await o(t),await s(),await c())},[o,s,c,_]),handleTrashProjectPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e;m({id:t,type:`project`}),h(!0)},[m,h]),handleTrashDiagramPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`erd`}),h(!0)},[m,h]),handleTrashNotePermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`notes`}),h(!0)},[m,h]),handleTrashDrawingPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`drawings`}),h(!0)},[m,h]),handleTrashFlowchartPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`flowchart`}),h(!0)},[m,h]),handleTrashDbClientPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`db-client`}),h(!0)},[m,h])}}function Gt(e){let{isPublicView:t,setSelectedNodeId:n,setSelectedEdgeId:r,setIsImportModalOpen:i,viewportRef:a,publicData:o,diagrams:s,activeDiagramId:c,handleExportSQL:l,handleExportImage:u,nodes:d,edges:f,view:p,isDiagramsLoading:m,isERDItemLoading:h,isNotesLoading:g,isNoteItemLoading:_,isDrawingsLoading:v,isDrawingItemLoading:y,isFlowchartsLoading:b,isFlowchartItemLoading:x,selectedNodeId:S}=e,C=(0,R.useMemo)(()=>{if(!S)return null;let e=d.find(e=>e.id===S);return e?e.data:null},[d,S]);return{handleNodeClick:(0,R.useCallback)((e,r)=>{!t&&!e.target.closest(`.nodrag`)&&n(r.id)},[t,n]),handleNodeDoubleClick:(0,R.useCallback)((e,r)=>{!t&&!e.target.closest(`.nodrag`)&&n(r.id)},[t,n]),handleEdgeClick:(0,R.useCallback)((e,n)=>{t||r(n.id)},[t,r]),handlePaneClick:(0,R.useCallback)(()=>{n(null),r(null)},[n,r]),handleMove:(0,R.useCallback)((e,t)=>{a.current=t},[a]),handleOpenImportModal:(0,R.useCallback)(()=>{i(!0)},[i]),handleWorkspaceExportSQL:(0,R.useCallback)(e=>{let n=t?o:s.find(e=>e.id===c);n&&l(e,n,d,f)},[t,o,s,c,l,d,f]),handleWorkspaceExportImage:(0,R.useCallback)(()=>{let e=t?o?.name||`Shared`:s.find(e=>e.id===c)?.name||`Diagram`;u(e)},[t,o,s,c,u]),workspaceIsLoading:(0,R.useMemo)(()=>p===`erd`?h:p===`notes`?_:p===`drawings`?y:p===`flowchart`&&x,[p,h,_,y,x]),selectedEntity:C}}function Kt(e){let{saveCounter:t,isLocalSavingRef:n,isIncomingSyncRef:r,lastLoadedDiagramIdRef:i,lastSaveCallRef:a,lastDiagramLoadTimestampRef:o,isAuthenticated:s,isGuest:c,view:l,isPublicView:u,activeDiagramId:d,nodes:f,edges:p,viewportRef:m,saveDiagram:h,setIsLocalSaving:g,triggerDebouncedSync:_,broadcastMessage:v,isRefreshing:y,isERDItemLoading:b,isDiagramsLoading:x,activeNoteUid:S,notes:C,saveNote:w,activeDrawingId:T,drawings:E,saveDrawing:D,activeFlowchartId:O,flowcharts:k,saveFlowchart:A,notesSaveTimeoutRef:j,drawingsSaveTimeoutRef:M,flowchartsSaveTimeoutRef:ee,syncDrafts:N}=e,P=(0,R.useRef)(null),te=(0,R.useRef)(0);(0,R.useEffect)(()=>{let e=()=>{if(document.visibilityState===`hidden`&&n.current){if(l===`erd`&&d)h(f,p,m.current).then(()=>{g(!1),_()});else if(l===`notes`&&S){let e=C.find(e=>String(e.uid)===String(S));e&&w(e).then(()=>{g(!1),_()})}else if(l===`drawings`&&T){let e=E.find(e=>String(e.id)===String(T));e&&D(e).then(()=>{g(!1),_()})}else if(l===`flowchart`&&O){let e=k.find(e=>String(e.id)===String(O)||e.uid&&String(e.uid)===String(O));e&&A(e).then(()=>{g(!1),_()})}}};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[l,d,S,T,O,f,p,h,w,D,A,_,C,E,k,n,g,m]);let ne=(0,R.useRef)(f),re=(0,R.useRef)(p);(0,R.useEffect)(()=>{ne.current=f},[f]),(0,R.useEffect)(()=>{re.current=p},[p]),(0,R.useEffect)(()=>{if(P.current&&clearTimeout(P.current),t!==te.current){if(Date.now()-a.current<100){te.current=t;return}if(Date.now()-o.current<2e3){te.current=t;return}if(te.current=t,d&&(s||c)&&l===`erd`&&!u){if(r.current)return;g(!0),P.current=setTimeout(async()=>{if(Date.now()-o.current<2e3){g(!1);return}if(Date.now()-a.current<500){g(!1);return}if(i.current!==d){g(!1);return}if(y||b||x){g(!1);return}if(ne.current.length===0){g(!1);return}await h(ne.current,re.current,m.current),a.current=Date.now(),g(!1),_(),v(zt.DRAFT_UPDATED,L.ERD,d)},800)}return()=>{P.current&&=(clearTimeout(P.current),null),g(!1)}}},[t,d,s,c,l,h,u,_,v,o]);async function ie(){if(n.current){P.current&&clearTimeout(P.current),j.current&&clearTimeout(j.current),M.current&&clearTimeout(M.current),ee.current&&clearTimeout(ee.current);try{if(l===`erd`&&d)await h(f,p,m.current);else if(l===`notes`&&S){let e=C.find(e=>String(e.uid)===String(S));e&&await w(e)}else if(l===`drawings`&&T){let e=E.find(e=>String(e.id)===String(T));e&&await D(e)}else if(l===`flowchart`&&O){let e=k.find(e=>String(e.id)===String(O)||e.uid&&String(e.uid)===String(O));e&&await A(e)}}catch(e){console.warn(`[AutoSave] Flush save failed:`,e)}a.current=Date.now(),g(!1),await N()}}return{saveTimeoutRef:P,flushPendingSaves:ie}}function qt(){if(typeof window>`u`)return null;let e=window.location.pathname.match(/^\/(view|share)\/(diagram|note|drawing|flowchart|erd|notes|drawings)\/([^/]+)/);return e?{type:{diagram:`erd`,erd:`erd`,note:`notes`,notes:`notes`,drawing:`drawings`,drawings:`drawings`,flowchart:`flowchart`}[e[2]]||e[2],uid:e[3]}:null}async function Jt(e){if(typeof window<`u`&&(window.__TAURI__||window.__TAURI_INTERNALS__))try{let{openUrl:t}=await r(async()=>{let{openUrl:e}=await import(`./index-CIb9-CLP.js`).then(e=>e.et);return{openUrl:e}},__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,1,35,36]));await t(e)}catch{window.open(e,`_blank`,`noopener,noreferrer`)}else window.open(e,`_blank`,`noopener,noreferrer`)}function Yt(e){let{diagrams:t,setDiagrams:n,activeDiagramId:r,setActiveDiagramId:i,view:a,setView:o,setSidebarView:s,setNodes:u,setEdges:d,selectDiagram:f,flushPendingSaves:p,isAuthenticated:m,isERDItemLoading:h,lastLoadedDiagramIdRef:g,lastDiagramLoadTimestampRef:_}=e,v=l(),y=c(),b=(0,R.useRef)(y.pathname);b.current=y.pathname;let x=(0,R.useRef)(t);x.current=t;let S=(0,R.useRef)(r);S.current=r;let C=(0,R.useRef)(a);C.current=a;let w=(0,R.useRef)(``),T=(0,R.useRef)(null),E=(0,R.useRef)(!1),D=(0,R.useCallback)(async e=>{if(E.current)return;E.current=!0,T.current=e;let t=x.current,r=S.current,a=C.current,s=y.pathname;try{let c=t.find(t=>String(t.id)===String(e)||t.uid===e)?.uid||e,l=`/diagrams/`+c,m=b.current===l;if(r===e&&a===`erd`){s.startsWith(`/diagrams/`)||v(`/diagrams/`+c),E.current=!1;return}if(await p(),m&&b.current!==l)return;w.current=l,!qt()&&b.current!==l&&v(l),i(c),o(`erd`),u([]),d([]);let h=await f(c,e=>{i(e),g.current=e},{isStale:()=>T.current!==e});h&&n(e=>e.some(e=>String(e.id)===String(h.id)||e.uid&&e.uid===h.uid)?e:[h,...e])}finally{E.current=!1}},[v,y.pathname,i,o,u,d,f,p]);return(0,R.useEffect)(()=>{if(!m||qt()||w.current===y.pathname)return;let e=y.pathname.match(/^\/diagrams\/([^/]+)/);if(e){let t=e[1];w.current=y.pathname,String(r)!==String(t)&&(o(`erd`),s(`erd`),D(t))}},[m,y.pathname,r,D,o,s]),(0,R.useEffect)(()=>{r&&!h&&(g.current=r,_.current=Date.now())},[r,h]),{handleDiagramSelect:D}}function Xt(e){let{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,view:a,setView:o,setSidebarView:s,selectNote:u,flushPendingSaves:d,isAuthenticated:f,getContentVersion:p,projects:m,lastLoadedNoteIdRef:h}=e,g=l(),_=c(),v=(0,R.useRef)(_.pathname);v.current=_.pathname;let y=(0,R.useRef)(t);y.current=t;let b=(0,R.useRef)(m);b.current=m;let x=(0,R.useRef)(r);x.current=r;let S=(0,R.useRef)(a);S.current=a;let C=(0,R.useRef)(u);C.current=u;let w=(0,R.useRef)(d);w.current=d;let T=(0,R.useCallback)((e,t)=>C.current(e,t),[]),E=(0,R.useCallback)(()=>w.current(),[]),D=(0,R.useRef)(``),O=(0,R.useRef)(null),k=(0,R.useCallback)(async e=>{let t=`/notes/`+e,r=v.current===t,a=Date.now();if(O.current?.uid===e&&a-O.current.time<1500)return;O.current={uid:e,time:a};let c=p();if(await E(),r&&v.current!==t)return;o(`notes`),s(`notes`),i(e),n(t=>t.map(t=>t.uid===e?{...t,content:t.content===void 0?void 0:t.content}:t)),D.current=t,!qt()&&v.current!==t&&g(t);let l=b.current?.flatMap(e=>e.notes||[]).find(t=>t.uid===e);await T(e,{contentVersionAtStart:c,fallbackNote:l}),h.current=e},[g,_.pathname,i,o,s,n,p]);return(0,R.useEffect)(()=>{if(!f||qt()||D.current===_.pathname)return;let e=_.pathname.match(/^\/notes\/([^/]+)/);e&&(D.current=_.pathname,k(e[1]))},[f,_.pathname,k]),(0,R.useEffect)(()=>{r&&(h.current=r)},[r,h]),{handleNoteSelect:k}}function Zt(e){let{flowcharts:t,setFlowcharts:n,activeFlowchartId:r,setActiveFlowchartId:i,view:a,setView:o,setSidebarView:s,selectFlowchart:u,flushPendingSaves:d,isAuthenticated:f,projects:p,lastLoadedFlowchartIdRef:m}=e,h=l(),g=c(),_=(0,R.useRef)(g.pathname);_.current=g.pathname;let v=(0,R.useRef)(t);v.current=t;let y=(0,R.useRef)(p);y.current=p;let b=(0,R.useRef)(r);b.current=r;let x=(0,R.useRef)(a);x.current=a;let S=(0,R.useRef)(u);S.current=u;let C=(0,R.useRef)(d);C.current=d;let w=(0,R.useCallback)((e,t)=>S.current(e,t),[]),T=(0,R.useCallback)(()=>C.current(),[]),E=(0,R.useRef)(``),D=(0,R.useRef)(0),O=(0,R.useRef)(null),k=(0,R.useCallback)(async e=>{let t=`/flowcharts/`+e,r=_.current===t,a=Date.now();if(O.current?.uid===e&&a-O.current.time<1500||(O.current={uid:e,time:a},String(b.current)===e&&x.current===`flowchart`)||(await T(),r&&_.current!==t))return;o(`flowchart`),s(`flowchart`),i(e),n(t=>t.map(t=>t.uid===e?{...t,data:void 0}:t)),E.current=t,D.current=Date.now(),!qt()&&_.current!==t&&h(t);let c=y.current?.flatMap(e=>e.flowcharts||[]).find(t=>t.uid===e);await w(e,{fallbackFlowchart:c}),m.current=e},[h,g.pathname,i,o,s,n]);return(0,R.useEffect)(()=>{if(!f||qt()||E.current===g.pathname)return;let e=g.pathname.match(/^\/flowcharts\/([^/]+)/);e&&(E.current=g.pathname,k(e[1]))},[f,g.pathname,k]),(0,R.useEffect)(()=>{r&&(m.current=r)},[r,m]),{handleFlowchartSelect:k}}function Qt(e){let{activeNoteUid:t,isIncomingSyncRef:n,notesRef:r,lastLoadedNoteIdRef:i,lastSaveCallRef:a,bumpContentVersion:o,saveNote:s,setNotes:c,broadcastMessage:l,syncDrafts:u,isRefreshing:d,isNoteItemLoading:f}=e,p=(0,R.useRef)(null),m=(0,R.useRef)(null),h=(0,R.useRef)(u);return h.current=u,{handleNoteChange:(0,R.useCallback)(e=>{if(!t||n.current)return;let u=t;o(),p.current&&clearTimeout(p.current),m.current&&clearTimeout(m.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f)return;let t=r.current.find(e=>String(e.uid)===String(u));t&&(await s({...t,content:e}),I(t.uid,t.title||`Untitled`,e),c(t=>t.map(t=>t.uid===u?{...t,content:e}:t))),a.current=Date.now(),l(zt.DRAFT_UPDATED,L.NOTES,u)},400),m.current=setTimeout(async()=>{await h.current()},1e3))},[t,n,o,r,i,s,c,l,d,f]),notesSaveTimeout:p,noteCloudSyncTimeoutRef:m}}function $t(e){let{activeDrawingId:t,isIncomingSyncRef:n,drawingsRef:r,lastLoadedDrawingIdRef:i,lastSaveCallRef:a,setIsLocalSaving:o,saveDrawing:s,setDrawings:c,broadcastMessage:l,triggerDebouncedSync:u,isRefreshing:d,isDrawingItemLoading:f}=e,p=(0,R.useRef)(null),m=(0,R.useRef)(!1),h=(0,R.useRef)(null),g=(0,R.useRef)(0),_=(0,R.useRef)(!1);return{handleDrawingChange:(0,R.useCallback)(e=>{if(!t||n.current)return;let v=t;if(e!==h.current){if(h.current=e,c(t=>t.map(t=>String(t.id)===String(v)||t.uid&&String(t.uid)===String(v)?{...t,data:e}:t)),Date.now()-g.current>3e3&&!_.current){_.current=!0,o(!0),p.current=setTimeout(async()=>{if(_.current=!1,i.current!==t){o(!1);return}if(d||f){o(!1);return}if(m.current){o(!1);return}let n=r.current.find(e=>String(e.id)===String(v)||e.uid&&String(e.uid)===String(v));if(!n){o(!1);return}m.current=!0;try{await s({...n,data:e}),g.current=Date.now(),a.current=Date.now(),u(),l(zt.DRAFT_UPDATED,L.DRAWINGS,v)}finally{m.current=!1,o(!1)}},300);return}o(!0),p.current&&clearTimeout(p.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f||m.current)return;let t=r.current.find(e=>String(e.id)===String(v)||e.uid&&String(e.uid)===String(v));if(t){m.current=!0;try{await s({...t,data:e}),g.current=Date.now(),a.current=Date.now(),u(),l(zt.DRAFT_UPDATED,L.DRAWINGS,v)}finally{m.current=!1,o(!1)}}},1500))}},[t,s,c,u,d,f,l,n,r,i,a,o]),drawingsSaveTimeoutRef:p}}function en(e){let{activeFlowchartId:t,isIncomingSyncRef:n,flowchartsRef:r,lastLoadedFlowchartIdRef:i,lastSaveCallRef:a,setIsLocalSaving:o,saveFlowchart:s,setFlowcharts:c,broadcastMessage:l,triggerDebouncedSync:u,isRefreshing:d,isFlowchartItemLoading:f}=e,p=(0,R.useRef)(null);return{handleFlowchartChange:(0,R.useCallback)((e,m)=>{if(!t||n.current)return;let h=t,g=JSON.stringify({nodes:e,edges:m});c(e=>{let t=e.find(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h));return t&&t.data===g?e:e.map(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h)?{...e,data:g}:e)}),o(!0),p.current&&clearTimeout(p.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f)return;let e=r.current.find(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h));e&&(await s({...e,data:g}),a.current=Date.now(),o(!1),u(),l(zt.DRAFT_UPDATED,L.FLOWCHART,h))},1500))},[t,s,c,u,d,f,l,n,r,i,a,o]),flowchartsSaveTimeoutRef:p}}var tn=6e4,nn=12e4;function rn(e){let t=Number(e?._version??e?.version);return Number.isFinite(t)?t:null}function an(e){let t=e?.updated_at??e?.updatedAt;if(typeof t==`number`)return t;let n=new Date(t||0).getTime();return Number.isFinite(n)?n:0}function on(e){return{version:rn(e),updatedAt:an(e)}}function sn(e,t){return e.version!==null&&t.version!==null?e.version>t.version:e.updatedAt>t.updatedAt}function cn(){return!!document.activeElement?.closest(`input, textarea, [contenteditable="true"], .cm-editor`)}function ln(e){let{isOnline:t,isAuthenticated:n,isPublicView:r,isRefreshing:i,isSyncing:a,isLocalSaving:o,view:s,activeDiagramId:c,activeNoteUid:l,activeDrawingId:d,activeFlowchartId:f,selectDiagram:p,selectNote:m,selectDrawing:h,selectFlowchart:g,setActiveDiagramId:_,diagrams:v,notes:y,drawings:b,flowcharts:x,setIsRefreshing:S,getContentVersion:C,lastSaveCallRef:w}=e,T=(0,R.useRef)(0),E=(0,R.useRef)(Date.now()),D=(0,R.useRef)(!1),O=(0,R.useRef)({});(0,R.useEffect)(()=>{let e=()=>{E.current=Date.now()},k=async()=>{let e=Date.now();if(document.visibilityState===`hidden`||e-E.current<tn||!t||!n||r||i||a||o||D.current||e-T.current<nn||e-w.current<1e4||cn())return;T.current=e,E.current=e,D.current=!0;let k=!1,A=()=>{k=!0,S(!0)};try{if(s===`erd`&&c){if(await u.hasPendingSync(L.ERD,c))return;let e=await p(c,_,{silent:!0,probe:!0});if(!e)return;let t=String(c),n=v.find(e=>String(e.id)===t||String(e.uid)===t),r=await be(c),i=O.current[t]||{version:r??rn(n),updatedAt:an(n)},a=on(e);sn(a,i)?(A(),await p(c,_,{silent:!0})&&(O.current[t]=a)):O.current[t]=a}else if(s===`notes`&&l){let e=await u.getDraft(L.NOTES,l),t=y.find(e=>String(e.uid)===String(l));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.NOTES,l),await m(l,{silent:!0,contentVersionAtStart:C()}))}else if(s===`drawings`&&d){let e=await u.getDraft(L.DRAWINGS,d),t=b.find(e=>String(e.id)===String(d)||e.uid&&String(e.uid)===String(d));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.DRAWINGS,d),await h(d,{silent:!0}))}else if(s===`flowchart`&&f){let e=await u.getDraft(L.FLOWCHART,f),t=x.find(e=>String(e.id)===String(f)||e.uid&&String(e.uid)===String(f));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.FLOWCHART,f),await g(String(f),{silent:!0}))}}catch(e){console.warn(`Background refresh on focus failed:`,e)}finally{k&&S(!1),D.current=!1}};return window.addEventListener(`blur`,e),window.addEventListener(`focus`,k),document.addEventListener(`visibilitychange`,k),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`focus`,k),document.removeEventListener(`visibilitychange`,k)}},[t,n,r,i,a,o,s,c,l,d,f,p,m,h,g,_,v,y,b,x,S,C,w])}function un(e){let{view:t,pathname:n,hasActiveItem:r,isAuthenticated:i,isPublicView:a,selectedWorkspaceUid:o,tableSearchParams:s,projects:c,fileSearchQuery:l=``,fetchNotes:u,fetchDiagrams:d,fetchFlowcharts:f,fetchDrawings:p,tableRefreshKey:m,tableLoadingState:h,setTableLoadingState:g}=e,_=n.startsWith(`/table/`),v=n===`/table/db-client`;function y(e){if(!e)return`all`;let t=c?.find(t=>t.uid===e||String(t.id)===e);return t?t.id:`all`}let b={notes:u,erd:d,flowchart:f,drawings:p};function x(e,t){return e?t===void 0?{silent:!0}:{silent:!0,page:t}:t===void 0?{}:{page:t}}function S(e,t,n,r){let i=h===`loading`,a=x(!i,r.page),o=e(!1,t,l,null,10,n,a);i&&o?.then&&o.then(()=>g(`idle`)).catch(()=>g(`idle`))}(0,R.useEffect)(()=>{let e=b.notes;!(t===`notes`&&!r&&_)||!i||a||S(e,y(o),parseInt(s.get(`page`)||`1`,10),{})},[t,n,r,o,s,c,u,i,a,l,m]),(0,R.useEffect)(()=>{if(!(t===`erd`&&!r&&_&&!v)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10),c=h===`loading`,u=d(!1,e,l,null,10,n,c?{page:n,sourceType:`blank`}:{silent:!0,page:n,sourceType:`blank`});c&&u?.then&&u.then(()=>g(`idle`)).catch(()=>g(`idle`))},[t,n,r,o,s,c,d,i,a,l,m,v,h]),(0,R.useEffect)(()=>{if(!(t===`flowchart`&&!r&&_)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10),c=h===`loading`,u=f(!1,e,l,null,10,c?{page:n}:{silent:!0,page:n});c&&u?.then&&u.then(()=>g(`idle`)).catch(()=>g(`idle`))},[t,n,r,o,s,c,f,i,a,l,m]),(0,R.useEffect)(()=>{if(!(t===`drawings`&&!r&&_)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10);S(p,e,n,{})},[t,n,r,o,s,c,p,i,a,l,m])}function dn(e){let{view:t,notes:n,diagrams:r,drawings:i,flowcharts:a,projects:o,selectedWorkspaceUid:s,setEditDialogNote:c,setNewName:l,setRenameProjectId:u,setIsRenameDialogOpen:d,setCreateDialogOpen:f,setCreateDialogView:p}=e;return{handleOpenEditDocument:(0,R.useCallback)(e=>{let s=null;if(t===`notes`?s=n?.find(t=>t.uid===e||String(t.id)===e):t===`erd`?s=r?.find(t=>t.uid===e||String(t.id)===e):t===`drawings`?s=i?.find(t=>t.uid===e||String(t.id)===e):t===`flowchart`&&(s=a?.find(t=>t.uid===e||String(t.id)===e)),!s)return;c(s),l(s.title||s.name||``);let f=o?.find(e=>String(e.id)===String(s.project_id)||String(e.uid)===String(s.project_id)||String(e.uid)===String(s.projects?.uid));u(f?String(f.id):`none`),d(!0)},[t,n,r,i,a,o,c,l,u,d]),handleOpenCreateDocument:(0,R.useCallback)(e=>{if(l(``),s){let e=o?.find(e=>e.uid===s);u(e?String(e.id):`none`)}else u(`none`);p(e),f(!0),c(null)},[s,o,l,u,p,f,c])}}var fn=({view:e,isPublicView:t,publicData:n,activeDiagramId:r,activeNoteUid:i,activeDrawingId:a,activeFlowchartId:o,diagrams:s,notes:c,drawings:l,flowcharts:u,projects:d})=>{let f=(0,R.useMemo)(()=>{if(!t)return{erd:r,notes:i,drawings:a,flowchart:o}[e]||null},[e,t,r,i,a,o]),p=(0,R.useMemo)(()=>t?n:(e===`erd`?s:e===`notes`?c:e===`drawings`?l:u).find(e=>String(e.id)===String(f)||e.uid&&String(e.uid)===String(f)),[e,f,s,c,l,u,t,n]),m=(0,R.useMemo)(()=>{if(t)return n?{is_public:!!n.is_public,share_token:n.share_token,expiry_date:n.expiry_date}:void 0;let r=e===`erd`?s:e===`notes`?c:e===`drawings`?l:u,i=f,a=r.find(e=>String(e.id)===String(i)||e.uid&&String(e.uid)===String(i));if(a)return{is_public:!!a.is_public,share_token:a.share_token,expiry_date:a.expiry_date}},[e,t,n,s,c,l,u,f]),h=t?n:c.find(e=>e.uid===i),g=t?n:l.find(e=>String(e.id)===String(a)||e.uid&&String(e.uid)===String(a)),_=t?n:u.find(e=>e.uid&&String(e.uid)===String(o)||String(e.id)===String(o)),v=t?n:s.find(e=>String(e.id)===String(r)||e.uid&&e.uid===r);return{currentActiveId:f,activeDocument:p,initialShareSettings:m,activeNote:h,activeDrawing:g,activeFlowchart:_,activeDiagram:v,featureLabel:t?`Public Shared ${e}`:e===`erd`?`ERD Builder`:e===`notes`?`Notes`:e===`drawings`?`Drawings`:e===`flowchart`?`Flowcharts`:e===`changelog`?`Changelog`:e===`backups`?`Backups`:e===`ai-settings`?`AI Management`:`Trash Bin`,activeFileName:t?n?.name||n?.title||`Shared Document`:e===`erd`?v?.name:e===`notes`?h?.title:e===`drawings`?g?.title:e===`flowchart`?_?.title:null,activeProjectName:t?n?.projects?.name:(()=>{let t=e===`erd`?v:e===`notes`?h:e===`drawings`?g:e===`flowchart`?_:null;if(!t)return null;if(t.projects?.name)return t.projects.name;if(t.project_id){let e=d.find(e=>String(e.id)===String(t.project_id));if(e)return e.name}return null})(),activeFileUid:t?n?.uid:e===`erd`?v?.uid:e===`notes`?h?.uid:e===`drawings`?g?.uid:e===`flowchart`?_?.uid:void 0,hasActiveItem:!!p}},pn=({activeNote:e,activeNoteUid:t,activeProjectId:n,createNote:r,saveNote:a,setActiveNoteUid:o,handleNoteChange:s,setIsExportNoteModalOpen:c,setIsImportNoteModalOpen:l})=>({handleExportMarkdown:(0,R.useCallback)(()=>{c(!0)},[c]),handleImportMarkdown:(0,R.useCallback)(()=>{l(!0)},[l]),handleCopyMarkdown:(0,R.useCallback)(async()=>{e&&await m(e.content)},[e]),executeExportMarkdown:(0,R.useCallback)(()=>{if(!e)return;let t=i(e.content),n=`${(e.title||`Note`).replace(/\s+/g,`_`).toLowerCase()}.md`,r=new Blob([t],{type:`text/markdown`}),a=URL.createObjectURL(r),o=document.createElement(`a`);o.href=a,o.download=n,o.click(),URL.revokeObjectURL(a),D.success(`Note exported to Markdown`)},[e]),executeImportMarkdown:(0,R.useCallback)(async i=>{let c=D.loading(`Importing ${i.name}...`);try{let l=``;if(l=i.name.split(`.`).pop()?.toLowerCase()===`docx`?await g.convertDocxToHtml(i):await g.convertMarkdownToHtml(i),t){let t=e?.content||``;s(t+(t?`<p></p>`:``)+l),D.success(`${i.name} imported successfully`,{id:c})}else{let e=await r(i.name.replace(/\.[^/.]+$/,``),n===`all`?null:n);e&&(await a({...e,content:l}),o(e.uid),D.success(`Created new note from ${i.name}`,{id:c}))}}catch(e){D.error(e.message||`Failed to import file`,{id:c})}},[t,e,n,r,a,o,s])}),mn=({view:e,activeDiagramId:t,activeNoteUid:n,activeDrawingId:r,activeFlowchartId:i,diagrams:a,notes:o,drawings:s,flowcharts:c,projects:l,isPublicView:u,setActiveDiagramId:d,setActiveNoteUid:f,setActiveDrawingId:p,setActiveFlowchartId:m,setActiveProjectId:h})=>{(0,R.useEffect)(()=>{u||(()=>{let u=null;if(e===`erd`&&t?u=a.find(e=>String(e.id)===String(t)):e===`notes`&&n?u=o.find(e=>String(e.uid)===String(n)):e===`drawings`&&r?u=s.find(e=>String(e.id)===String(r)):e===`flowchart`&&i&&(u=c.find(e=>String(e.id)===String(i))),u&&u.is_deleted){e===`erd`?d(null):e===`notes`?f(null):e===`drawings`?p(null):e===`flowchart`&&m(null),D.info(`Document closed because it was moved to trash.`);return}if(u&&u.project_id){let e=l.find(e=>String(e.id)===String(u.project_id));e&&e.is_deleted&&(h(null),d(null),f(null),p(null),m(null),D.warning(`Project was deleted. Closing current document.`))}})()},[e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h])};function hn(e){if(e===`/trash`)return`trash`;if(e===`/ai-settings`)return`ai-settings`;if(e===`/backups`)return`backups`;if(e===`/changelog`)return`changelog`;if(e.startsWith(`/table/`)){let t=e.match(/^\/table\/([^/]+)$/);if(t){if(t[1]===`db-client`)return`erd`;if([`erd`,`notes`,`drawings`,`flowchart`].includes(t[1]))return t[1]}}return e.startsWith(`/notes/`)?`notes`:e.startsWith(`/diagrams/`)?`erd`:e.startsWith(`/drawings/`)?`drawings`:e.startsWith(`/flowcharts/`)?`flowchart`:localStorage.getItem(`erd-builder-last-view`)||`notes`}function gn({children:e,isPublicView:t,publicData:n,isPublicLoading:i,forbiddenDoc:a,fetchPublicDocument:o,setIsPublicView:s,handleLogout:u}){let d=l(),f=c(),p=(0,R.useRef)(f.pathname);p.current=f.pathname;let[h,g]=y(),_=(0,R.useMemo)(()=>hn(f.pathname),[f.pathname]),[v,b]=(0,R.useState)(()=>localStorage.getItem(`erd-builder-last-sidebar-view`)||`notes`),x=(0,R.useMemo)(()=>[`erd`,`notes`,`drawings`,`flowchart`].includes(_)?(localStorage.setItem(`erd-builder-last-sidebar-view`,_),_):v,[_,v]);(0,R.useEffect)(()=>{qt()||localStorage.setItem(`erd-builder-last-view`,_)},[_]);let[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)(!1),[E,O]=(0,R.useState)(!1),[k,j]=(0,R.useState)(null),[M,ee]=(0,R.useState)(!1),[N,P]=(0,R.useState)(``),[te,ne]=(0,R.useState)(`none`),[re,ie]=(0,R.useState)(!1),[ae,oe]=(0,R.useState)(!1),[se,F]=(0,R.useState)(!1),[ce,le]=(0,R.useState)(!1),[I,ue]=(0,R.useState)(``),[de,ge]=(0,R.useState)(null),[_e,ye]=(0,R.useState)(null),[be,xe]=(0,R.useState)(!1),[Se,Ce]=(0,R.useState)(`notes`),[we,Te]=(0,R.useState)(!1),[Ee,z]=(0,R.useState)(`account`),[Ae,je]=(0,R.useState)(()=>localStorage.getItem(`erd-builder-theme`)||`system`),ze=(0,R.useCallback)(e=>e===`system`?window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e,[])(localStorage.getItem(`erd-builder-theme`)||`system`),[Be,Ve]=(0,R.useState)(ze),He=(0,R.useCallback)(e=>{localStorage.setItem(`erd-builder-theme`,e),je(e)},[]),Ue=(0,R.useRef)(!1),[We,Ge]=(0,R.useState)(!1),qe=(0,R.useCallback)(e=>{Ue.current=e,Ge(e)},[]),B=(0,R.useRef)(null),Je=(0,R.useRef)(null),Ye=(0,R.useRef)(null),Xe=(0,R.useRef)(null),Ze=(0,R.useRef)(``),[Qe,$e]=(0,R.useState)(!1),et=(0,R.useRef)(!1),V=(0,R.useRef)(0),tt=(0,R.useRef)(0),nt=(0,R.useRef)(!1),rt=(0,R.useRef)([]),it=(0,R.useRef)([]),at=(0,R.useRef)([]),ot=(0,R.useRef)([]),st=(0,R.useRef)([]),[ct,lt]=(0,R.useState)(``),[ut,dt]=(0,R.useState)(``),ft=(0,R.useRef)(null),[pt,mt]=(0,R.useState)(``),[ht,_t]=(0,R.useState)(``),vt=(0,R.useCallback)(e=>{},[]),yt=(0,R.useCallback)(e=>{b(e)},[]),{isAuthenticated:H,isGuest:U,user:xt}=ve(),St=Fe(),{triggerDebouncedSync:Ct,isSyncing:wt,syncError:Tt,syncDrafts:Et,checkAndClearStaleDrafts:Dt,hasPendingSyncs:kt}=Ie(H,U),{isInstallable:At,installApp:jt}=Le(),{handleExportSQL:Mt}=gt(),{handleExportImage:Nt}=Rt(),W=t,Pt=n,Ft=o,It=s,{diagrams:G,setDiagrams:Lt,activeDiagramId:K,setActiveDiagramId:Bt,fetchDiagrams:Ut,createDiagram:Jt,updateDiagram:tn,deleteDiagram:nn,restoreDiagram:rn,deleteDiagramPermanent:an,moveDiagramToProject:on,saveDiagram:sn,diagramsTotal:cn,isLoading:gn}=De(H,_,U),_n=(0,R.useRef)({move:()=>{},update:()=>{},edges:()=>{},delete:()=>{}}),{nodes:vn,setNodes:yn,onNodesChange:bn,edges:xn,setEdges:Sn,onEdgesChange:Cn,selectedNodeId:wn,setSelectedNodeId:Tn,selectedEdgeId:En,setSelectedEdgeId:Dn,onConnect:On,addEntity:kn,duplicateEntity:An,updateEntity:jn,deleteEntity:Mn,handleEdgeUpdate:Nn,handleEdgeFlip:Pn,deleteEdge:Fn,handleDiagramSelect:In,viewportRef:Ln,undo:Rn,redo:zn,canUndo:Bn,canRedo:Vn,takeSnapshot:Hn,isItemLoading:Un,saveCounter:Wn,onNodeDragStop:Gn,onMoveEnd:Kn,extractColumnIdFromHandle:qn,getRelationKey:Jn,dedupeEdgesByRelation:Yn}=Ke(W,U,H,()=>{},(0,R.useMemo)(()=>({broadcastNodeMove:(e,t,n)=>_n.current.move(e,t,n),broadcastNodeUpdate:(e,t)=>_n.current.update(e,t),broadcastEdgesUpdate:e=>_n.current.edges(e),onDeleteEntity:e=>_n.current.delete(e)}),[])),{broadcastNodeMove:Xn,broadcastNodeUpdate:Zn,broadcastEdgesUpdate:Qn}=Re(W?Pt?.id:K,yn,Sn),$n=(0,R.useCallback)(async e=>{let t=ot.current.filter(t=>t.id!==e),n=st.current.filter(t=>t.source!==e&&t.target!==e);await sn(t,n,Ln.current),V.current=Date.now(),Et()},[sn,Ln,Et]);(0,R.useEffect)(()=>{_n.current={move:Xn,update:Zn,edges:Qn,delete:$n}},[Xn,Zn,Qn,$n]);let{notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,bumpContentVersion:nr,getContentVersion:rr,fetchNotes:ir,createNote:ar,updateNote:or,deleteNote:sr,moveNoteToProject:cr,saveNote:lr,restoreNote:ur,deleteNotePermanent:dr,notesTotal:fr,isLoading:pr,isItemLoading:mr,selectNote:hr,duplicateNote:gr}=Oe(U),{projects:_r,activeProjectId:vr,setActiveProjectId:yr,fetchProjects:Y,createProject:br,updateProject:xr,deleteProject:Sr,restoreProject:Cr,deleteProjectPermanent:wr,isLoading:Tr}=ke(U),{drawings:Er,setDrawings:Dr,activeDrawingUid:X,setActiveDrawingUid:Or,fetchDrawings:kr,createDrawing:Ar,updateDrawing:jr,deleteDrawing:Mr,moveDrawingToProject:Nr,saveDrawing:Pr,restoreDrawing:Fr,deleteDrawingPermanent:Ir,drawingsTotal:Lr,isLoading:Rr,isItemLoading:zr,selectDrawing:Br,duplicateDrawing:Vr}=Me(U),{flowcharts:Z,setFlowcharts:Hr,activeFlowchartId:Q,setActiveFlowchartId:Ur,fetchFlowcharts:Wr,createFlowchart:Gr,updateFlowchart:Kr,deleteFlowchart:qr,moveFlowchartToProject:Jr,saveFlowchart:Yr,restoreFlowchart:Xr,deleteFlowchartPermanent:Zr,flowchartsTotal:Qr,isLoading:$r,isItemLoading:ei,selectFlowchart:ti}=Ne(U),{trashData:ni,fetchTrash:ri,restoreDbClient:ii,deleteDbClientPermanent:ai,isLoading:oi}=Pe(U),{broadcastMessage:si}=Vt((0,R.useCallback)(async e=>{if(e.type!==zt.DRAFT_UPDATED)return;let{type:t,id:n}=e.payload;_===`erd`&&t===L.ERD&&String(n)===String(K)?(et.current=!0,window.currentSyncIsSilent=!0,await In(String(n),Bt),setTimeout(()=>{et.current=!1},1e3)):_===`notes`&&t===L.NOTES&&String(n)===String(J)?await hr(String(n),{silent:!0}):_===`drawings`&&t===L.DRAWINGS&&String(n)===String(X)?await Br(String(n),{silent:!0}):_===`flowchart`&&t===L.FLOWCHART&&String(n)===String(Q)&&await ti(String(n),{silent:!0})},[_,K,J,X,Q,In,hr,Br,ti,Bt]));(0,R.useEffect)(()=>{rt.current=q,it.current=Er,at.current=Z,ot.current=vn,st.current=xn},[q,Er,Z,vn,xn]);let{currentActiveId:ci,activeDocument:$,initialShareSettings:li,activeNote:ui,activeDrawing:di,activeFlowchart:fi,featureLabel:pi,activeFileName:mi,activeProjectName:hi,activeFileUid:gi,hasActiveItem:_i,activeDiagram:vi}=fn({view:_,isPublicView:W,publicData:Pt,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r});(0,R.useEffect)(()=>{X&&!zr&&(Ye.current=X),Q&&!ei&&(Xe.current=Q)},[X,zr,Q,ei]),mn({view:_,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r,isPublicView:W,setActiveDiagramId:Bt,setActiveNoteUid:tr,setActiveDrawingId:Or,setActiveFlowchartId:Ur,setActiveProjectId:yr});let yi=(0,R.useCallback)(async(e,t)=>{if(jn(e),t?.immediate){Ei.current&&(clearTimeout(Ei.current),qe(!1));let t=ot.current.map(t=>t.id===e.id?{...t,data:e}:t);await sn(t,st.current,Ln.current),V.current=Date.now(),Et(),Zn(e.id,e)}},[jn,sn,Ln,Et,Zn]),{handleNoteChange:bi,notesSaveTimeout:xi}=Qt({activeNoteUid:J,isIncomingSyncRef:et,notesRef:rt,lastLoadedNoteIdRef:Je,lastSaveCallRef:V,bumpContentVersion:nr,saveNote:lr,setNotes:er,broadcastMessage:si,syncDrafts:Et,isRefreshing:Qe,isNoteItemLoading:mr}),{handleDrawingChange:Si,drawingsSaveTimeoutRef:Ci}=$t({activeDrawingId:X,isIncomingSyncRef:et,drawingsRef:it,lastLoadedDrawingIdRef:Ye,lastSaveCallRef:V,setIsLocalSaving:qe,saveDrawing:Pr,setDrawings:Dr,broadcastMessage:si,triggerDebouncedSync:Ct,isRefreshing:Qe,isDrawingItemLoading:zr}),{handleFlowchartChange:wi,flowchartsSaveTimeoutRef:Ti}=en({activeFlowchartId:Q,isIncomingSyncRef:et,flowchartsRef:at,lastLoadedFlowchartIdRef:Xe,lastSaveCallRef:V,setIsLocalSaving:qe,saveFlowchart:Yr,setFlowcharts:Hr,broadcastMessage:si,triggerDebouncedSync:Ct,isRefreshing:Qe,isFlowchartItemLoading:ei}),{saveTimeoutRef:Ei,flushPendingSaves:Di}=Kt({saveCounter:Wn,isLocalSavingRef:Ue,isIncomingSyncRef:et,lastLoadedDiagramIdRef:B,lastSaveCallRef:V,lastDiagramLoadTimestampRef:tt,isAuthenticated:H,isGuest:U,view:_,isPublicView:W,activeDiagramId:K,nodes:vn,edges:xn,viewportRef:Ln,saveDiagram:sn,setIsLocalSaving:qe,triggerDebouncedSync:Ct,broadcastMessage:si,isRefreshing:Qe,isERDItemLoading:Un,isDiagramsLoading:gn,activeNoteUid:J,notes:q,saveNote:lr,activeDrawingId:X,drawings:Er,saveDrawing:Pr,activeFlowchartId:Q,flowcharts:Z,saveFlowchart:Yr,notesSaveTimeoutRef:xi,drawingsSaveTimeoutRef:Ci,flowchartsSaveTimeoutRef:Ti,syncDrafts:Et}),{handleDiagramSelect:Oi}=Yt({diagrams:G,setDiagrams:Lt,activeDiagramId:K,setActiveDiagramId:Bt,view:_,setView:vt,setSidebarView:yt,setNodes:yn,setEdges:Sn,selectDiagram:In,flushPendingSaves:Di,isAuthenticated:H,isERDItemLoading:Un,lastLoadedDiagramIdRef:B,lastDiagramLoadTimestampRef:tt}),{handleNoteSelect:ki}=Xt({notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,view:_,setView:vt,setSidebarView:yt,selectNote:hr,flushPendingSaves:Di,isAuthenticated:H,getContentVersion:rr,projects:_r,lastLoadedNoteIdRef:Je}),{handleFlowchartSelect:Ai}=Zt({flowcharts:Z,setFlowcharts:Hr,activeFlowchartId:Q,setActiveFlowchartId:Ur,view:_,setView:vt,setSidebarView:yt,selectFlowchart:ti,flushPendingSaves:Di,isAuthenticated:H,projects:_r,lastLoadedFlowchartIdRef:Xe});async function ji(e){let t=`/drawings/`+e,n=p.current===t;(X!==e||_!==`drawings`)&&(await Di(),!(n&&p.current!==t)&&(b(`drawings`),Dr(t=>t.map(t=>String(t.uid??t.id)===e?{...t,data:void 0}:t)),Ze.current=t,p.current!==t&&d(t,{replace:!0}),await Br(e),Ye.current=e))}let Mi=(0,R.useCallback)(async()=>{$e(!0);try{if(_===`erd`&&K){let e=await In(K,Bt,{silent:!0,force:!0});e&&Lt(t=>t.map(t=>String(t.id)===String(e.id)||String(t.uid)===String(e.uid)?{...t,...e}:t))}else _===`notes`&&J?await hr(J,{silent:!0,contentVersionAtStart:rr()}):_===`drawings`&&X?await Br(X,{silent:!0}):_===`flowchart`&&Q&&await ti(String(Q),{silent:!0})}catch(e){console.error(`Failed to refresh restored document:`,e),D.error(`Version restored, but the current view could not be refreshed.`)}finally{$e(!1)}},[_,K,J,X,Q,In,hr,Br,ti,Bt,Lt,rr]);(0,R.useEffect)(()=>{if(!H||qt()||Ze.current===f.pathname)return;let e=f.pathname.match(/^\/drawings\/([^/]+)/);e&&(Ze.current=f.pathname,ji(e[1]))},[H,f.pathname,ji]);let{handleExportMarkdown:Ni,handleImportMarkdown:Pi,handleCopyMarkdown:Fi,executeImportMarkdown:Ii}=pn({activeNote:ui,activeNoteUid:J,activeProjectId:vr,createNote:ar,saveNote:lr,setActiveNoteUid:tr,handleNoteChange:bi,setIsExportNoteModalOpen:F,setIsImportNoteModalOpen:oe}),{handleSidebarDiagramCreate:Li,handleSidebarNoteCreate:Ri,handleSidebarDrawingCreate:zi,handleSidebarFlowchartCreate:Bi,handleSidebarProjectCreate:Vi,handleSidebarProjectUpdate:Hi,handleSidebarProjectDelete:Ui}=Ht({createDiagram:Jt,updateDiagram:tn,deleteDiagram:nn,createNote:ar,updateNote:or,deleteNote:sr,createDrawing:Ar,updateDrawing:jr,deleteDrawing:Mr,createFlowchart:Gr,updateFlowchart:Kr,deleteFlowchart:qr,createProject:br,updateProject:xr,deleteProject:Sr,moveDiagramToProject:on,moveNoteToProject:cr,moveDrawingToProject:Nr,moveFlowchartToProject:Jr,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,fetchTrash:ri,handleDiagramSelect:Oi,handleNoteSelect:ki,handleDrawingSelect:ji,handleFlowchartSelect:Ai,searchQuery:ct,activeProjectId:vr,notesRef:rt,copyMarkdownToClipboard:m,setIsImportNoteModalOpen:oe,setIsExportNoteModalOpen:F}),Wi=(0,R.useCallback)(()=>{Y(!1,ut)},[ut,Y]),Gi=(0,R.useCallback)(()=>{ci&&ie(!0)},[ci]),Ki=(0,R.useCallback)(()=>{if(!$)return;P($.title||$.name||``);let e=_r?.find(e=>String(e.id)===String($.project_id)||String(e.uid)===String($.project_id)||String(e.uid)===String($.projects?.uid));ne(e?String(e.id):`none`),ee(!0)},[$,_r]),{handleOpenEditDocument:qi,handleOpenCreateDocument:Ji}=dn({view:_,notes:q,diagrams:G,drawings:Er,flowcharts:Z,projects:_r,selectedWorkspaceUid:h.get(`workspace`),setEditDialogNote:ge,setNewName:P,setRenameProjectId:ne,setIsRenameDialogOpen:ee,setCreateDialogOpen:xe,setCreateDialogView:Ce}),Yi=(0,R.useCallback)(e=>{$&&Mt(e,{name:mi||`Untitled`},ot.current,st.current)},[$,mi,Mt]),Xi=(0,R.useCallback)(()=>{$&&Nt(mi||`Untitled`)},[$,mi,Nt]),{hasUpdate:Zi,latestVersion:Qi,isChecking:$i,isDownloading:ea,checkNow:ta,handleDownload:na}=bt(void 0,!1,!1),{isOutdated:ra,latestVersion:ia,currentVersion:aa}=Ot(),oa=Zi||ra;(0,R.useEffect)(()=>{let e=qt();if(e){It(!0);let t=sessionStorage.getItem(`share_token_${e.uid}`);Ft(e.type,e.uid,yn,Sn,t||void 0)}At&&(sessionStorage.getItem(`pwa-install-toast-shown`)||(D(`✨ Enhance your experience`,{description:`Install ERD Builder Pro as a desktop app for offline access and better performance.`,action:{label:`Install`,onClick:()=>jt()},duration:1e4}),sessionStorage.setItem(`pwa-install-toast-shown`,`true`)))},[At,jt]),(0,R.useEffect)(()=>{if(!St&&!W){if(_===`erd`&&K)sn(vn,xn,Ln.current);else if(_===`notes`&&J){let e=q.find(e=>String(e.uid)===String(J));e&&lr(e)}else if(_===`drawings`&&X){let e=Er.find(e=>String(e.uid??e.id)===String(X));e&&Pr(e)}else if(_===`flowchart`&&Q){let e=Z.find(e=>String(e.uid??e.id)===String(Q));e&&Yr(e)}}},[St,_,K,J,X,Q,vn,xn]),(0,R.useEffect)(()=>{let e=setTimeout(()=>dt(ct),300);return()=>clearTimeout(e)},[ct]),(0,R.useEffect)(()=>{let e=setTimeout(()=>_t(pt),300);return()=>clearTimeout(e)},[pt]),(0,R.useEffect)(()=>{H&&!W&&Y(!1,ut)},[ut,Y,H,W]);let sa=(0,R.useRef)(Ae);sa.current=Ae,(0,R.useEffect)(()=>{let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=e=>{Ve(e);let t=document.documentElement,n=document.body;e===`dark`?(t.classList.add(`dark`),n.classList.add(`dark`)):(t.classList.remove(`dark`),n.classList.remove(`dark`))},n=sa.current;t(n===`system`?e.matches?`dark`:`light`:n);let r=()=>{sa.current===`system`&&t(e.matches?`dark`:`light`)};return e.addEventListener(`change`,r),()=>e.removeEventListener(`change`,r)},[Ae]),(0,R.useEffect)(()=>{if(!(typeof window<`u`&&(window.__TAURI__||window.__TAURI_INTERNALS__)))return;let e;return(async()=>{try{let{getCurrentWindow:t}=await r(async()=>{let{getCurrentWindow:e}=await import(`./window-Cybt16bF.js`);return{getCurrentWindow:e}},__vite__mapDeps([37,1,3,38])),n=t(),i=await n.theme();if(i&&sa.current===`system`){let e=i,t=document.documentElement,n=document.body;e===`dark`?(t.classList.add(`dark`),n.classList.add(`dark`)):(t.classList.remove(`dark`),n.classList.remove(`dark`)),Ve(e)}e=await n.onThemeChanged(({payload:e})=>{if(sa.current===`system`&&e){let t=e,n=document.documentElement,r=document.body;t===`dark`?(n.classList.add(`dark`),r.classList.add(`dark`)):(n.classList.remove(`dark`),r.classList.remove(`dark`)),Ve(t)}})}catch(e){console.warn(`[Theme] Tauri theme API unavailable:`,e)}})(),()=>{e&&e()}},[]),(0,R.useEffect)(()=>{nt.current||!H||W||(nt.current=!0,Y(!1,``))},[H,W,Y]),(0,R.useEffect)(()=>{_===`trash`&&H&&!W&&ri()},[_,H,W,ri]),(0,R.useEffect)(()=>{H&&!U&&(G.length>0&&Dt(L.ERD,G),q.length>0&&Dt(L.NOTES,q),Er.length>0&&Dt(L.DRAWINGS,Er),Z.length>0&&Dt(L.FLOWCHART,Z))},[G,q,Er,Z,H,U,Dt]),(0,R.useEffect)(()=>{let e=e=>{if(Ue.current)return e.preventDefault(),e.returnValue=``,``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[]),ln({isOnline:St,isAuthenticated:H,isPublicView:W,isRefreshing:Qe,isSyncing:wt,isLocalSaving:We,view:_,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,selectDiagram:In,selectNote:hr,selectDrawing:Br,selectFlowchart:ti,setActiveDiagramId:Bt,diagrams:G,notes:q,drawings:Er,flowcharts:Z,setIsRefreshing:$e,getContentVersion:rr,lastSaveCallRef:V});let[ca,la]=(0,R.useState)(0),ua=(0,R.useCallback)(()=>la(e=>e+1),[]),[da,fa]=(0,R.useState)(0),pa=(0,R.useCallback)(()=>fa(e=>e+1),[]),[ma,ha]=(0,R.useState)(`idle`);un({view:_,pathname:f.pathname,hasActiveItem:_i,isAuthenticated:H,isPublicView:W,selectedWorkspaceUid:h.get(`workspace`),tableSearchParams:h,projects:_r,fileSearchQuery:ht,fetchNotes:ir,fetchDiagrams:Ut,fetchFlowcharts:Wr,fetchDrawings:kr,tableRefreshKey:ca,tableLoadingState:ma,setTableLoadingState:ha}),(0,R.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),kt&&!wt&&St&&Et())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[kt,wt,St,Et]),(0,R.useEffect)(()=>{let e=()=>F(!0),t=()=>oe(!0);return window.addEventListener(`notes:open-export-modal`,e),window.addEventListener(`notes:open-import-modal`,t),()=>{window.removeEventListener(`notes:open-export-modal`,e),window.removeEventListener(`notes:open-import-modal`,t)}},[]);let ga=(0,R.useCallback)(async(e,t,n)=>{if(!St&&!W){D.error(`Offline Mode: Navigation is disabled.`,{duration:5e3});return}if(e!==_&&await Di(),e!==`trash`&&e!==`changelog`&&e!==`backups`&&e!==`ai-settings`&&b(e),t){ha(`loading`),tr(null),Or(null),Bt(null),Ur(null);let t=`/table/`+e;n&&(t+=`?workspace=`+encodeURIComponent(n)),t!==f.pathname+f.search&&d(t,{replace:!0});return}if(!qt()){let t=null;e===`notes`&&J?t=`/notes/`+J:e===`flowchart`&&fi?t=`/flowcharts/`+(fi.uid||Q):e===`erd`&&K?t=`/diagrams/`+K:e===`drawings`&&X?t=`/drawings/`+X:e===`trash`?t=`/trash`:e===`ai-settings`?(z(`account`),Te(!0)):e===`backups`?(z(`backups`),Te(!0)):e===`changelog`?(z(`changelog`),Te(!0)):(tr(null),Or(null),Bt(null),Ur(null),t=`/`),t&&t!==f.pathname+f.search&&d(t,{replace:!0})}},[_,St,W,Di,f.pathname,f.search,d,J,fi,Q,K,X]),_a=(0,R.useCallback)(async()=>{if(k){let{id:e,type:t,uid:n}=k;t===`project`?await wr(e):t===`erd`?await an(n||String(e)):t===`notes`?await dr(n||String(e)):t===`drawings`?await Ir(n||String(e)):t===`flowchart`?await Zr(n||String(e)):t===`db-client`&&await ai(n||String(e)),T(!1),j(null),await ri()}},[k,wr,an,dr,Ir,Zr,ai,ri]),va=(0,R.useCallback)(()=>{$&&(ue(`${$.title||$.name} (Copy)`),le(!0))},[$]),ya=(0,R.useCallback)(async()=>{if(!(!$||!I.trim())){$e(!0);try{if(_===`notes`){let e=await gr($.uid,I);e&&(await ki(e.uid),Y(!1,ut),D.success(`Note duplicated successfully`))}else if(_===`drawings`){let e=await Vr($.uid,I);e&&(await ji(e.uid),Y(!1,ut),D.success(`Drawing duplicated successfully`))}else D.info(`Duplication for this document type is disabled.`)}catch(e){console.error(`Duplicate error:`,e),D.error(`Failed to duplicate document.`)}finally{$e(!1),le(!1)}}},[$,I,_,gr,Vr,ki,ji,Y,ut]),{handleNodeClick:ba,handleNodeDoubleClick:xa,handleEdgeClick:Sa,handlePaneClick:Ca,handleMove:wa,handleOpenImportModal:Ta,handleWorkspaceExportSQL:Ea,handleWorkspaceExportImage:Da,selectedEntity:Oa}=Gt({isPublicView:W,setSelectedNodeId:Tn,setSelectedEdgeId:Dn,setIsImportModalOpen:O,viewportRef:Ln,publicData:Pt,diagrams:G,activeDiagramId:K,handleExportSQL:Mt,handleExportImage:Nt,nodes:vn,edges:xn,view:_,isDiagramsLoading:gn,isERDItemLoading:Un,isNotesLoading:pr,isNoteItemLoading:mr,isDrawingsLoading:Rr,isDrawingItemLoading:zr,isFlowchartsLoading:$r,isFlowchartItemLoading:ei,selectedNodeId:wn}),{handleTrashRestoreProject:ka,handleTrashRestoreDiagram:Aa,handleTrashRestoreNote:ja,handleTrashRestoreDrawing:Ma,handleTrashRestoreFlowchart:Na,handleTrashRestoreDbClient:Pa,handleTrashProjectPermanentDelete:Fa,handleTrashDiagramPermanentDelete:Ia,handleTrashNotePermanentDelete:La,handleTrashDrawingPermanentDelete:Ra,handleTrashFlowchartPermanentDelete:za,handleTrashDbClientPermanentDelete:Ba}=Wt({restoreProject:Cr,restoreDiagram:rn,restoreNote:ur,restoreDrawing:Fr,restoreFlowchart:Xr,restoreDbClient:ii,fetchTrash:ri,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,debouncedSearchQuery:ut,setItemToDelete:j,setIsPermanentDeleteConfirmOpen:T,trashData:ni}),Va=(0,R.useCallback)(e=>{g(t=>{let n=new URLSearchParams(t);return e?(n.set(`view`,`table`),n.set(`workspace`,e)):n.delete(`workspace`),n.delete(`page`),n},{replace:!0})},[g]),Ha=parseInt(h.get(`page`)||`1`,10),[Ua,Wa]=R.useState(null),[Ga,Ka]=R.useState(null),qa=(0,R.useMemo)(()=>({user:xt,isGuest:U,handleLogout:u,view:_,sidebarView:x,isPublicView:W,setIsPublicView:It,publicData:Pt,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r,trashData:ni,nodes:vn,edges:xn,setNodes:yn,setEdges:Sn,activeDiagramId:K,setActiveDiagramId:Bt,activeNoteUid:J,setActiveNoteUid:tr,activeDrawingId:X,setActiveDrawingId:Or,activeFlowchartId:Q,setActiveFlowchartId:Ur,activeProjectId:vr,setActiveProjectId:yr,isDiagramsLoading:gn,isNotesLoading:pr,isDrawingsLoading:Rr,isFlowchartsLoading:$r,isNoteItemLoading:mr,isDrawingItemLoading:zr,isFlowchartItemLoading:ei,isERDItemLoading:Un,isLoading:Tr,isProjectsLoading:Tr,isLocalSaving:We,isRefreshing:Qe,isSyncing:wt,isOnline:St,searchQuery:ct,setSearchQuery:lt,fileSearchQuery:pt,setFileSearchQuery:mt,fileSearchRef:ft,selectedWorkspaceUid:h.get(`workspace`),handleWorkspaceFilter:Va,activeDocument:$,activeNote:ui,activeDiagram:vi,activeDrawing:di,activeFlowchart:fi,hasActiveItem:_i,activeFileName:mi,activeFileUid:gi,activeProjectName:hi,featureLabel:pi,initialShareSettings:li,currentActiveId:ci,handleViewChange:ga,handleNoteSelect:ki,handleDiagramSelect:Oi,handleDrawingSelect:ji,handleFlowchartSelect:Ai,refreshActiveDocument:Mi,handleNoteChange:bi,handleDrawingChange:Si,handleFlowchartChange:wi,handleEntityUpdate:yi,handleSidebarDiagramCreate:Li,handleSidebarNoteCreate:Ri,handleSidebarDrawingCreate:zi,handleSidebarFlowchartCreate:Bi,handleSidebarProjectCreate:Vi,handleSidebarProjectUpdate:Hi,handleSidebarProjectDelete:Ui,isMoveToTrashAlertOpen:re,setIsMoveToTrashAlertOpen:ie,isDeleteAlertOpen:S,setIsDeleteAlertOpen:C,isRenameDialogOpen:M,setIsRenameDialogOpen:ee,isDuplicateDialogOpen:ce,setIsDuplicateDialogOpen:le,isImportModalOpen:E,setIsImportModalOpen:O,isPermanentDeleteConfirmOpen:w,setIsPermanentDeleteConfirmOpen:T,isImportNoteModalOpen:ae,setIsImportNoteModalOpen:oe,isExportNoteModalOpen:se,setIsExportNoteModalOpen:F,newName:N,setNewName:P,renameProjectId:te,setRenameProjectId:ne,duplicateName:I,setDuplicateName:ue,itemToDelete:k,setItemToDelete:j,createDialogOpen:be,setCreateDialogOpen:xe,createDialogView:Se,setCreateDialogView:Ce,editDialogNote:de,setEditDialogNote:ge,tableDeleteDoc:_e,setTableDeleteDoc:ye,isSettingsOpen:we,setIsSettingsOpen:Te,settingsTab:Ee,setSettingsTab:z,theme:Ae,setTheme:He,resolvedTheme:Be,handleHeaderDelete:Gi,handleHeaderRename:Ki,handleHeaderSettingsSaved:Wi,handleHeaderExportSQL:Yi,handleHeaderExportImage:Xi,handleExportMarkdown:Ni,handleCopyMarkdown:Fi,handleImportMarkdown:Pi,executeImportMarkdown:Ii,handleDuplicate:va,executeDuplicate:ya,handleOpenEditDocument:qi,handleOpenCreateDocument:Ji,onNodesChange:bn,onEdgesChange:Cn,onConnect:On,selectedNodeId:wn,setSelectedNodeId:Tn,selectedEdgeId:En,setSelectedEdgeId:Dn,selectedEntity:Oa,canUndo:Bn,canRedo:Vn,undo:Rn,redo:zn,addEntity:kn,duplicateEntity:An,deleteEntity:Mn,deleteEdge:Fn,handleEdgeUpdate:Nn,handleEdgeFlip:Pn,handleNodeClick:ba,handleNodeDoubleClick:xa,handleEdgeClick:Sa,handlePaneClick:Ca,handleMove:wa,handleOpenImportModal:Ta,handleWorkspaceExportSQL:Ea,handleWorkspaceExportImage:Da,takeSnapshot:Hn,onNodeDragStop:Gn,onMoveEnd:Kn,extractColumnIdFromHandle:qn,getRelationKey:Jn,dedupeEdgesByRelation:Yn,viewportRef:Ln,lastLoadedDiagramIdRef:B,syncDrafts:Et,triggerDebouncedSync:Ct,broadcastMessage:si,setIsLocalSaving:qe,hasPendingSyncs:kt,syncError:Tt,isInstallable:At,installApp:jt,handleTrashRestoreProject:ka,handleTrashRestoreDiagram:Aa,handleTrashRestoreNote:ja,handleTrashRestoreDrawing:Ma,handleTrashRestoreFlowchart:Na,handleTrashRestoreDbClient:Pa,handleTrashProjectPermanentDelete:Fa,handleTrashDiagramPermanentDelete:Ia,handleTrashNotePermanentDelete:La,handleTrashDrawingPermanentDelete:Ra,handleTrashFlowchartPermanentDelete:za,handleTrashDbClientPermanentDelete:Ba,fetchTrash:ri,isTrashLoading:oi,confirmPermanentDelete:_a,saveDiagram:sn,saveNote:lr,saveDrawing:Pr,saveFlowchart:Yr,updateDiagram:tn,updateNote:or,updateDrawing:jr,updateFlowchart:Kr,deleteDiagram:nn,deleteNote:sr,deleteDrawing:Mr,deleteFlowchart:qr,moveDiagramToProject:on,moveNoteToProject:cr,moveDrawingToProject:Nr,moveFlowchartToProject:Jr,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,notesTotal:fr,diagramsTotal:cn,drawingsTotal:Lr,flowchartsTotal:Qr,tableSearchParams:h,setTableSearchParams:g,tablePage:Ha,triggerTableRefresh:ua,tableLoadingState:ma,setTableLoadingState:ha,pendingErdDiffTrigger:da,triggerPendingErdDiff:pa,breadcrumbLabel:Ua,setBreadcrumbLabel:Wa,flowchartExportHandler:Ga,setFlowchartExportHandler:Ka,hasUpdate:Zi,latestVersion:Qi,isCheckingUpdate:$i,isDownloadingUpdate:ea,checkForUpdates:ta,downloadUpdate:na,isWebOutdated:ra,showOutdatedBadge:oa}),[xt,U,u,_,x,W,It,Pt,G,q,Er,Z,_r,ni,vn,xn,yn,Sn,K,Bt,J,tr,X,Or,Q,Ur,vr,yr,gn,pr,Rr,$r,Tr,mr,zr,ei,Un,We,Qe,wt,St,ct,lt,pt,mt,ft,h,Va,$,ui,vi,di,fi,_i,mi,gi,hi,pi,li,ci,ga,ki,Oi,ji,Ai,Mi,bi,Si,wi,yi,Li,Ri,zi,Bi,Vi,Hi,Ui,re,ie,S,C,M,ee,ce,le,E,O,w,T,ae,oe,se,F,N,P,te,ne,I,ue,k,j,be,xe,Se,Ce,de,ge,_e,ye,Gi,Ki,Wi,Yi,Xi,Ni,Fi,Pi,Ii,va,ya,qi,Ji,bn,Cn,On,wn,Tn,En,Dn,Oa,Bn,Vn,Rn,zn,kn,An,Mn,Fn,Nn,Pn,ba,xa,Sa,Ca,wa,Ta,Ea,Da,Hn,Gn,Kn,qn,Jn,Yn,Ln,B,Et,Ct,si,qe,kt,Tt,At,jt,ka,Aa,ja,Ma,Na,Pa,Fa,Ia,La,Ra,za,Ba,ri,oi,_a,sn,lr,Pr,Yr,tn,or,jr,Kr,nn,sr,Mr,qr,on,cr,Nr,Jr,Y,Ut,ir,kr,Wr,fr,cn,Lr,Qr,Ha,Ua,Wa,Ga,Ka,Zi,Qi,$i,ea,ta,na,ra,oa,da,pa,Ae,He,Be]);return(0,he.jsxs)(A.Provider,{value:qa,children:[(0,he.jsx)(fe,{notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,isAuthenticated:H,notesSaveTimeout:xi,view:_,setView:vt,setSidebarView:yt}),(0,he.jsx)(pe,{}),(0,he.jsx)(me,{}),e]})}export{L as C,ve as S,lt as _,Rt as a,Be as b,ht as c,rt as d,ot as f,it as g,at as h,zt as i,ct as l,nt as m,qt as n,dt as o,tt as p,Jt as r,pt as s,gn as t,st as u,We as v,_e as x,ze as y};
71
+ `)}function ht(e){return{mysql:`sql`,postgresql:`sql`,laravel_migration:`php`,laravel_model:`php`,typescript:`ts`,prisma:`prisma`,zod:`ts`,goravel:`go`,goravel_migration:`go`}[e]||`txt`}function gt(){return{handleExportSQL:(e,t,n,r)=>{let i=dt(e,n,r,t.name),a=new Blob([i],{type:`text/plain`}),o=URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=`${t.name.toLowerCase().replace(/\s+/g,`_`)}_schema.sql`,s.click(),URL.revokeObjectURL(o)}}}var _t=`erd-update-dismissed-version`,vt=`erd-update-notified-version`;function yt(){return!!window.__TAURI__||!!window.__TAURI_INTERNALS__}async function H(e,t,n){if(yt())try{await fetch(`http://localhost:3099/api/log/update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({level:e,message:t,extra:n,timestamp:new Date().toISOString()})})}catch{}}function bt(e,t,n){let[i,a]=(0,R.useState)(!1),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(!1),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(null),m=(0,R.useRef)(e);m.current=e;let h=(0,R.useRef)(!1),g=(0,R.useRef)(null),_=(0,R.useRef)(!1),v=(0,R.useCallback)(e=>{localStorage.setItem(_t,e)},[]),y=(0,R.useCallback)(e=>typeof window>`u`?!1:localStorage.getItem(_t)===e,[]),b=(0,R.useCallback)(async e=>{if(H(`debug`,`handleDownloadUpdate called`,`downloadingRef=${_.current} version=${e.version}`),_.current){H(`debug`,`BLOCKED: download already in progress`);return}_.current=!0,d(!0),H(`info`,`download STARTED`);let t=D.loading(`Downloading update...`,{description:`Please wait, downloading the latest version.`});H(`info`,`download_started`,e.version);try{let n=0,i=0;await e.downloadAndInstall(e=>{switch(e.event){case`Started`:i=e.data.contentLength||0,H(`info`,`download_progress`,`0% of ${U(i)}`),D.loading(`Downloading update...`,{id:t,description:`0% - ${U(i)}`});break;case`Progress`:n+=e.data.chunkLength;let r=Math.round(n/i*100);D.loading(`Downloading update... ${r}%`,{id:t,description:`${U(n)} / ${U(i)}`});break;case`Finished`:H(`info`,`download_finished`,`ready to install`)}}),H(`info`,`downloadAndInstall resolved — install complete`),D.success(`Update installed successfully!`,{id:t,description:`The application will now restart to apply the update.`,duration:8e3}),setTimeout(async()=>{try{let{relaunch:e}=await r(async()=>{let{relaunch:e}=await import(`./dist-js-C7JaR3Vq.js`);return{relaunch:e}},__vite__mapDeps([0,1]));await e()}catch{window.location.reload()}},1e3),d(!1),_.current=!1}catch(e){let n=typeof e==`string`?e:e?.message||e?.toString?.()||JSON.stringify(e);H(`error`,`download_failed`,n),D.error(`Update failed`,{id:t,description:n||`An error occurred while downloading the update.`,duration:12e3,action:{label:`Copy Error`,onClick:()=>navigator.clipboard.writeText(n).catch(()=>{})}}),d(!1),_.current=!1}},[]),x=(0,R.useCallback)(async(e=!1)=>{if(H(`debug`,`performCheck called`,`isManual=${e} checkingRef=${h.current}`),!(window.__TAURI__||window.__TAURI_INTERNALS__))return H(`debug`,`SKIP: not Tauri`),!1;if(h.current)return H(`debug`,`SKIP: already checking`),!1;h.current=!0,l(!0);let t=``;try{let{getVersion:e}=await r(async()=>{let{getVersion:e}=await import(`./app-Dwb58oCT.js`);return{getVersion:e}},__vite__mapDeps([2,1,3]));t=await e()}catch{t=`0.0.0`}let n;e&&(n=D.loading(`Checking for updates...`,{description:`ERD Builder Pro v${t}`})),H(`info`,`check_started`,`current=${t} manual=${e}`);try{let r=await P();if(r)return a(!0),s(r.version),p(r),n&&D.dismiss(n),!e&&(g.current===r.version||y(r.version))?(H(`debug`,`SKIP toast: already shown/dismissed`,r.version),l(!1),h.current=!1,!0):(g.current=r.version,H(`info`,`update_available`,`v${r.version}`),e&&localStorage.getItem(vt)===r.version?(H(`debug`,`SKIP toast: already notified by auto-check`,r.version),a(!0),s(r.version),p(r),m.current?.(),l(!1),h.current=!1,!0):(H(`debug`,`SHOWING toast: Update Available`,`v${r.version} manual=${e}`),D.info(`Update Available`,{description:`New version (v${r.version}) is ready.`,duration:1/0,action:{label:`Update Now`,onClick:()=>b(r)},cancel:{label:`Later`,onClick:()=>v(r.version)}}),e||localStorage.setItem(vt,r.version),m.current?.(),l(!1),h.current=!1,!0));n&&D.dismiss(n),e&&D.success(`You're up to date`,{description:`ERD Builder Pro v${t} is the latest version.`}),H(`info`,`no_update`,`current=${t}`),a(!1),s(null),p(null)}catch(t){H(`error`,`check_failed`,t?.message||String(t)),n&&D.dismiss(n),e&&D.error(`Check failed`,{description:`Could not check for updates. Check your internet connection.`})}return l(!1),h.current=!1,!1},[y,b]),S=(0,R.useCallback)(()=>{H(`debug`,`handleDownload called`,`update=${f?.version} downloadingRef=${_.current}`),f&&b(f)},[f,b]),C=(0,R.useRef)(x);C.current=x;let w=(0,R.useCallback)(()=>{H(`debug`,`checkNow (manual trigger)`),C.current(!0)},[]);return(0,R.useEffect)(()=>{if(t)return;H(`debug`,`scheduling auto-check in 5s`);let e=setTimeout(()=>{H(`debug`,`auto-check timer fired`),C.current(!1)},5e3);return()=>clearTimeout(e)},[t]),(0,R.useEffect)(()=>{if(n)return;let e=()=>C.current(!0);return window.addEventListener(`menu-check-update`,e),()=>window.removeEventListener(`menu-check-update`,e)},[n]),{hasUpdate:i,latestVersion:o,isChecking:c,isDownloading:u,checkNow:w,handleDownload:S}}function U(e){if(e===0)return`0 B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=Math.floor(Math.log(e)/Math.log(t));return Math.round(e/t**r*100)/100+` `+n[r]}var xt=`erd-version-check`,St=`erd-version-current`,Ct=36e5;function wt(){try{return`3.4.5`}catch{return`0.0.0`}}async function Tt(){try{let e=await fetch(`/api/version/current`);if(e.ok){let t=(await e.json())?.current;if(t&&t!==`0.0.0`)return localStorage.setItem(St,t),t}}catch{}return localStorage.getItem(St)||wt()}function Et(){try{let e=localStorage.getItem(xt);if(!e)return null;let t=JSON.parse(e);return Date.now()-t.fetchedAt>Ct?null:t}catch{return null}}function Dt(e,t){try{localStorage.setItem(xt,JSON.stringify({latest:e,current:t,fetchedAt:Date.now()}))}catch{}}function Ot(){let[e,t]=(0,R.useState)(!1),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(wt()),o=(0,R.useRef)(!1),s=(0,R.useCallback)(async()=>{if(o.current)return;o.current=!0;let e=await Tt();a(e);let n=Et();if(n&&n.current===e){n.latest!==e&&n.latest&&(t(!0),r(n.latest));return}try{let n=await fetch(`/api/version/latest`);if(!n.ok)return;let i=(await n.json())?.latest;if(!i)return;Dt(i,e),i!==e&&(t(!0),r(i))}catch{let n=Et();n&&n.latest!==e&&n.latest&&(t(!0),r(n.latest))}},[]);return(0,R.useEffect)(()=>{s()},[s]),{isOutdated:e,latestVersion:n,currentVersion:i,checkNow:s}}var kt=48,At=220,jt=42,Mt=40;function Nt(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`)}function W(e){return/^#[0-9a-f]{3,8}$/i.test(e||``)?e:`#6b7280`}function Pt(e){return f(e.type,e.max_length,e.numeric_precision,e.numeric_scale).toLowerCase()}function Ft(e){return e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``)}function It(e,t){return t?e?.endsWith(`-source-l`)?O.Left:O.Right:e?.endsWith(`-target-r`)?O.Right:O.Left}function G(e,t,n){let r=[...e.node.data.columns].sort((e,t)=>(e.sort_order||0)-(t.sort_order||0)),i=r.findIndex(e=>e.id===Ft(t)),a=r.length?(e.height-jt)/r.length:Mt,o=e.node.position.y+(i<0?e.height/2:jt+(i+.5)*a),s=It(t,n);return{x:e.node.position.x+(s===O.Left?0:e.width),y:o,position:s}}function Lt(e,t,n){if(!e.length)return``;let r=n===`dark`?{background:`#09090b`,card:`#18181b`,text:`#f4f4f5`,muted:`#a1a1aa`,row:`#27272a`,edge:`#e4e4e7`}:{background:`#ffffff`,card:`#ffffff`,text:`#18181b`,muted:`#71717a`,row:`#e4e4e7`,edge:`#52525b`},i=new Map(e.map(e=>{let t=e.measured?.width||At,n=e.measured?.height||jt+Math.max(e.data.columns.length,1)*Mt;return[e.id,{node:e,width:t,height:n}]})),a=[...i.values()],o=Math.min(...a.map(({node:e})=>e.position.x))-kt,s=Math.min(...a.map(({node:e})=>e.position.y))-kt,c=Math.max(...a.map(({node:e,width:t})=>e.position.x+t))+kt,l=Math.max(...a.map(({node:e,height:t})=>e.position.y+t))+kt,u=t.map(e=>{let t=i.get(e.source),n=i.get(e.target);if(!t||!n)return``;let a=G(t,e.sourceHandle,!0),o=G(n,e.targetHandle,!1),[s]=T({sourceX:a.x,sourceY:a.y,sourcePosition:a.position,targetX:o.x,targetY:o.y,targetPosition:o.position});return`<path d="${s}" fill="none" stroke="${r.edge}" stroke-width="2" marker-end="url(#arrow)"/>`}).join(``),d=a.map(({node:e,width:t,height:n})=>{let i=W(e.data.color),a=[...e.data.columns].sort((e,t)=>(e.sort_order||0)-(t.sort_order||0)),o=a.length?(n-jt)/a.length:Mt,s=a.map((e,n)=>{let a=jt+n*o,s=`${e.is_pk?`PK`:``}${e._is_fk?`${e.is_pk?` · `:``}FK`:``}`,c=e.type.toUpperCase()===`ENUM`&&e.enum_values?` (${e.enum_values})`:``;return`<g><line x1="0" y1="${a}" x2="${t}" y2="${a}" stroke="${r.row}"/><text x="12" y="${a+o/2+5}" fill="${r.text}" font-size="14" font-weight="${e.is_pk?`600`:`500`}">${Nt(e.name)}</text><text x="${t-12}" y="${a+o/2+5}" fill="${i}" font-family="monospace" font-size="11" font-weight="600" text-anchor="end">${Nt(`${Pt(e)}${c}`)}</text>${s?`<text x="${t-12}" y="${a+o/2+18}" fill="${r.muted}" font-size="9" font-weight="700" text-anchor="end">${s}</text>`:``}</g>`}).join(``);return`<g transform="translate(${e.position.x} ${e.position.y})"><rect width="${t}" height="${n}" rx="8" fill="${r.card}" stroke="${i}" stroke-width="2"/><path d="M8 0H${t-8}Q${t} 0 ${t} 8V${jt}H0V8Q0 0 8 0" fill="${i}" fill-opacity="0.13"/><line x1="0" y1="${jt}" x2="${t}" y2="${jt}" stroke="${i}" stroke-width="2"/><text x="12" y="27" fill="${r.text}" font-size="14" font-weight="700">${Nt(e.data.name)}</text>${s}</g>`}).join(``);return`<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="${o} ${s} ${c-o} ${l-s}" width="${c-o}" height="${l-s}" font-family="Inter, Helvetica, Arial, sans-serif"><defs><marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0L10 5L0 10Z" fill="${r.edge}"/></marker></defs><rect x="${o}" y="${s}" width="${c-o}" height="${l-s}" fill="${r.background}"/>${u}${d}</svg>`}function Rt(){let{getNodes:e,getEdges:t}=x();return{handleExportImage:(0,R.useCallback)((n=`diagram`)=>{let r=e();if(r.length===0){D.error(`Canvas is empty`);return}try{let e=Lt(r,t(),document.documentElement.classList.contains(`dark`)?`dark`:`light`);w(e,`${n.replace(/\s+/g,`_`).toLowerCase()}.svg`),D.success(`SVG exported successfully`)}catch(e){console.error(`SVG export failed:`,e),D.error(`SVG export failed.`)}},[t,e])}}var zt=function(e){return e.DRAFT_UPDATED=`DRAFT_UPDATED`,e.SYNC_COMPLETED=`SYNC_COMPLETED`,e.VIEW_REFRESH_REQUESTED=`VIEW_REFRESH_REQUESTED`,e}({}),K=Math.random().toString(36).substring(2,11),Bt=`erd_builder_sync_channel`,Vt=e=>{let t=(0,R.useRef)(null);return(0,R.useEffect)(()=>{let n=new BroadcastChannel(Bt);t.current=n;let r=t=>{t.data.payload.senderId!==K&&e&&e(t.data)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}},[e]),{broadcastMessage:(0,R.useCallback)((e,n,r)=>{if(t.current){let i={type:e,payload:{type:n,id:r,timestamp:Date.now(),senderId:K}};t.current.postMessage(i)}},[]),tabId:K}};function Ht(e){let{createDiagram:t,updateDiagram:n,deleteDiagram:r,createNote:i,updateNote:a,deleteNote:o,createDrawing:s,updateDrawing:c,deleteDrawing:l,createFlowchart:u,updateFlowchart:d,deleteFlowchart:f,createProject:p,updateProject:m,deleteProject:h,moveDiagramToProject:g,moveNoteToProject:_,moveDrawingToProject:v,moveFlowchartToProject:y,fetchProjects:b,fetchDiagrams:x,fetchNotes:S,fetchDrawings:C,fetchFlowcharts:w,fetchTrash:T,handleDiagramSelect:E,handleNoteSelect:D,handleDrawingSelect:O,handleFlowchartSelect:k,searchQuery:A,activeProjectId:j,notesRef:M,copyMarkdownToClipboard:ee,setIsImportNoteModalOpen:N,setIsExportNoteModalOpen:P}=e;return{handleSidebarDiagramCreate:(0,R.useCallback)(async(e,n,r)=>{let i=await t(e,n);return i&&(await b(),r?.silent||await E(i.uid||i.id)),i},[t,b,E]),handleSidebarNoteCreate:(0,R.useCallback)(async(e,t)=>{let n=await i(e,t);return n&&(await b(),await D(n.uid)),n},[i,b,D]),handleSidebarDrawingCreate:(0,R.useCallback)(async(e,t,n)=>{let r=await s(e,t);return r&&(await b(),n?.silent||await O(r.uid??r.id)),r},[s,b,O]),handleSidebarFlowchartCreate:(0,R.useCallback)(async(e,t,n)=>{let r=await u(e,t);return r&&(await b(),n?.silent||await k(r.uid)),r},[u,b,k]),handleSidebarProjectCreate:(0,R.useCallback)(async e=>{await p(e),await b()},[p,b]),handleSidebarProjectUpdate:(0,R.useCallback)(async(e,t)=>{await m(e,t),await b()},[m,b]),handleSidebarProjectDelete:(0,R.useCallback)(async e=>{await h(e),await T(),await b(),await Promise.all([x(),S(),C(),w()])},[h,T,b,x,S,C,w]),handleSidebarDiagramUpdate:(0,R.useCallback)(async(e,t,r)=>{await n(e,t,r),await b()},[n,b]),handleSidebarNoteUpdate:(0,R.useCallback)(async(e,t,n)=>{await a(String(e),t,n),await b()},[a,b]),handleSidebarDrawingUpdate:(0,R.useCallback)(async(e,t,n)=>{await c(e,t,n),await b()},[c,b]),handleSidebarFlowchartUpdate:(0,R.useCallback)(async(e,t,n)=>{await d(e,t,n),await b()},[d,b]),handleSidebarDiagramDelete:(0,R.useCallback)(async e=>{await r(e),await T(),await b()},[r,T,b]),handleSidebarNoteDelete:(0,R.useCallback)(async e=>{await o(String(e)),await T(),await b()},[o,T,b]),handleSidebarDrawingDelete:(0,R.useCallback)(async e=>{await l(e),await T(),await b()},[l,T,b]),handleSidebarFlowchartDelete:(0,R.useCallback)(async e=>{await f(e),await T(),await b()},[f,T,b]),handleSidebarMoveDiagramToProject:(0,R.useCallback)(async(e,t,n)=>{await g(e,t,n),await b()},[g,b]),handleSidebarMoveNoteToProject:(0,R.useCallback)(async(e,t,n)=>{await _(String(e),t,n),await b()},[_,b]),handleSidebarMoveDrawingToProject:(0,R.useCallback)(async(e,t,n)=>{await v(e,t,n),await b()},[v,b]),handleSidebarMoveFlowchartToProject:(0,R.useCallback)(async(e,t,n)=>{await y(e,t,n),await b()},[y,b]),handleSidebarLoadMoreProjects:(0,R.useCallback)(()=>b(!0,A),[b,A]),handleSidebarLoadMoreDiagrams:(0,R.useCallback)(()=>x(!0,j===null?`all`:j,A),[x,j,A]),handleSidebarLoadMoreNotes:(0,R.useCallback)(()=>S(!0,j===null?`all`:j,A),[S,j,A]),handleSidebarLoadMoreDrawings:(0,R.useCallback)(()=>C(!0,j===null?`all`:j,A),[C,j,A]),handleSidebarLoadMoreFlowcharts:(0,R.useCallback)(()=>w(!0,j===null?`all`:j,A),[w,j,A]),handleSidebarNoteCopyMarkdown:(0,R.useCallback)(async e=>{let t=M.current.find(t=>String(t.uid)===String(e));t&&await ee(t.content||``)},[M,ee]),handleSidebarNoteImportMarkdown:(0,R.useCallback)(e=>{D(e),setTimeout(()=>N(!0),100)},[D,N]),handleSidebarNoteExportMarkdown:(0,R.useCallback)(e=>{D(e),setTimeout(()=>P(!0),100)},[D,P])}}function Ut(e,t){if(!e?.project_id||!t?.length)return!1;let n=t.find(t=>String(t.id)===String(e.project_id)||String(t.uid)===String(e.project_id));if(n){let t=n.name||`Unknown`,r=e.name||e.title||``;return D.warning(`"${r}" belongs to "${t}" which is also in the trash. Restore "${t}" first, then restore this file.`,{duration:6e3}),!0}return!1}function Wt(e){let{restoreProject:t,restoreDiagram:n,restoreNote:r,restoreDrawing:i,restoreFlowchart:a,restoreDbClient:o,fetchTrash:s,fetchProjects:c,fetchDiagrams:l,fetchNotes:u,fetchDrawings:d,fetchFlowcharts:f,debouncedSearchQuery:p,setItemToDelete:m,setIsPermanentDeleteConfirmOpen:h,trashData:g}=e,_=g?.projects||[];return{handleTrashRestoreProject:(0,R.useCallback)(async e=>{await t(e),await s(),await c()},[t,s,c]),handleTrashRestoreDiagram:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await n(t),await s(),await c(),await l(!1,`all`,p,null,50,void 0,{silent:!0}))},[n,s,c,l,p,_]),handleTrashRestoreNote:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await r(t),await s(),await c(),await u(!1,`all`,p,null,50,void 0,{silent:!0}))},[r,s,c,u,p,_]),handleTrashRestoreDrawing:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await i(t),await s(),await c(),await d(!1,`all`,p,null,50,void 0,{silent:!0}))},[i,s,c,d,p,_]),handleTrashRestoreFlowchart:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await a(t),await s(),await c(),await f(!1,`all`,p,null,50,void 0,{silent:!0}))},[a,s,c,f,p,_]),handleTrashRestoreDbClient:(0,R.useCallback)(async e=>{let t=typeof e==`object`?e.uid??e.id:e;Ut(e,_)||(await o(t),await s(),await c())},[o,s,c,_]),handleTrashProjectPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e;m({id:t,type:`project`}),h(!0)},[m,h]),handleTrashDiagramPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`erd`}),h(!0)},[m,h]),handleTrashNotePermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`notes`}),h(!0)},[m,h]),handleTrashDrawingPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`drawings`}),h(!0)},[m,h]),handleTrashFlowchartPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`flowchart`}),h(!0)},[m,h]),handleTrashDbClientPermanentDelete:(0,R.useCallback)(e=>{let t=typeof e==`object`?e.id:e,n=typeof e==`object`?e.uid:void 0;m({id:t,uid:n,type:`db-client`}),h(!0)},[m,h])}}function Gt(e){let{isPublicView:t,setSelectedNodeId:n,setSelectedEdgeId:r,setIsImportModalOpen:i,viewportRef:a,publicData:o,diagrams:s,activeDiagramId:c,handleExportSQL:l,handleExportImage:u,nodes:d,edges:f,view:p,isDiagramsLoading:m,isERDItemLoading:h,isNotesLoading:g,isNoteItemLoading:_,isDrawingsLoading:v,isDrawingItemLoading:y,isFlowchartsLoading:b,isFlowchartItemLoading:x,selectedNodeId:S}=e,C=(0,R.useMemo)(()=>{if(!S)return null;let e=d.find(e=>e.id===S);return e?e.data:null},[d,S]);return{handleNodeClick:(0,R.useCallback)((e,r)=>{!t&&!e.target.closest(`.nodrag`)&&n(r.id)},[t,n]),handleNodeDoubleClick:(0,R.useCallback)((e,r)=>{!t&&!e.target.closest(`.nodrag`)&&n(r.id)},[t,n]),handleEdgeClick:(0,R.useCallback)((e,n)=>{t||r(n.id)},[t,r]),handlePaneClick:(0,R.useCallback)(()=>{n(null),r(null)},[n,r]),handleMove:(0,R.useCallback)((e,t)=>{a.current=t},[a]),handleOpenImportModal:(0,R.useCallback)(()=>{i(!0)},[i]),handleWorkspaceExportSQL:(0,R.useCallback)(e=>{let n=t?o:s.find(e=>e.id===c);n&&l(e,n,d,f)},[t,o,s,c,l,d,f]),handleWorkspaceExportImage:(0,R.useCallback)(()=>{let e=t?o?.name||`Shared`:s.find(e=>e.id===c)?.name||`Diagram`;u(e)},[t,o,s,c,u]),workspaceIsLoading:(0,R.useMemo)(()=>p===`erd`?h:p===`notes`?_:p===`drawings`?y:p===`flowchart`&&x,[p,h,_,y,x]),selectedEntity:C}}function Kt(e){let{saveCounter:t,isLocalSavingRef:n,isIncomingSyncRef:r,lastLoadedDiagramIdRef:i,lastSaveCallRef:a,lastDiagramLoadTimestampRef:o,isAuthenticated:s,isGuest:c,view:l,isPublicView:u,activeDiagramId:d,nodes:f,edges:p,viewportRef:m,saveDiagram:h,setIsLocalSaving:g,triggerDebouncedSync:_,broadcastMessage:v,isRefreshing:y,isERDItemLoading:b,isDiagramsLoading:x,activeNoteUid:S,notes:C,saveNote:w,activeDrawingId:T,drawings:E,saveDrawing:D,activeFlowchartId:O,flowcharts:k,saveFlowchart:A,notesSaveTimeoutRef:j,drawingsSaveTimeoutRef:M,flowchartsSaveTimeoutRef:ee,syncDrafts:N}=e,P=(0,R.useRef)(null),te=(0,R.useRef)(0);(0,R.useEffect)(()=>{let e=()=>{if(document.visibilityState===`hidden`&&n.current){if(l===`erd`&&d)h(f,p,m.current).then(()=>{g(!1),_()});else if(l===`notes`&&S){let e=C.find(e=>String(e.uid)===String(S));e&&w(e).then(()=>{g(!1),_()})}else if(l===`drawings`&&T){let e=E.find(e=>String(e.id)===String(T));e&&D(e).then(()=>{g(!1),_()})}else if(l===`flowchart`&&O){let e=k.find(e=>String(e.id)===String(O)||e.uid&&String(e.uid)===String(O));e&&A(e).then(()=>{g(!1),_()})}}};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[l,d,S,T,O,f,p,h,w,D,A,_,C,E,k,n,g,m]);let ne=(0,R.useRef)(f),re=(0,R.useRef)(p);(0,R.useEffect)(()=>{ne.current=f},[f]),(0,R.useEffect)(()=>{re.current=p},[p]),(0,R.useEffect)(()=>{if(P.current&&clearTimeout(P.current),t!==te.current){if(Date.now()-a.current<100){te.current=t;return}if(Date.now()-o.current<2e3){te.current=t;return}if(te.current=t,d&&(s||c)&&l===`erd`&&!u){if(r.current)return;g(!0),P.current=setTimeout(async()=>{if(Date.now()-o.current<2e3){g(!1);return}if(Date.now()-a.current<500){g(!1);return}if(i.current!==d){g(!1);return}if(y||b||x){g(!1);return}if(ne.current.length===0){g(!1);return}await h(ne.current,re.current,m.current),a.current=Date.now(),g(!1),_(),v(zt.DRAFT_UPDATED,L.ERD,d)},800)}return()=>{P.current&&=(clearTimeout(P.current),null),g(!1)}}},[t,d,s,c,l,h,u,_,v,o]);async function ie(){if(n.current){P.current&&clearTimeout(P.current),j.current&&clearTimeout(j.current),M.current&&clearTimeout(M.current),ee.current&&clearTimeout(ee.current);try{if(l===`erd`&&d)await h(f,p,m.current);else if(l===`notes`&&S){let e=C.find(e=>String(e.uid)===String(S));e&&await w(e)}else if(l===`drawings`&&T){let e=E.find(e=>String(e.id)===String(T));e&&await D(e)}else if(l===`flowchart`&&O){let e=k.find(e=>String(e.id)===String(O)||e.uid&&String(e.uid)===String(O));e&&await A(e)}}catch(e){console.warn(`[AutoSave] Flush save failed:`,e)}a.current=Date.now(),g(!1),await N()}}return{saveTimeoutRef:P,flushPendingSaves:ie}}function qt(){if(typeof window>`u`)return null;let e=window.location.pathname.match(/^\/(view|share)\/(diagram|note|drawing|flowchart|erd|notes|drawings)\/([^/]+)/);return e?{type:{diagram:`erd`,erd:`erd`,note:`notes`,notes:`notes`,drawing:`drawings`,drawings:`drawings`,flowchart:`flowchart`}[e[2]]||e[2],uid:e[3]}:null}async function Jt(e){if(typeof window<`u`&&(window.__TAURI__||window.__TAURI_INTERNALS__))try{let{openUrl:t}=await r(async()=>{let{openUrl:e}=await import(`./index-C3r2kpyC.js`).then(e=>e.et);return{openUrl:e}},__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,1,35,36]));await t(e)}catch{window.open(e,`_blank`,`noopener,noreferrer`)}else window.open(e,`_blank`,`noopener,noreferrer`)}function Yt(e){let{diagrams:t,setDiagrams:n,activeDiagramId:r,setActiveDiagramId:i,view:a,setView:o,setSidebarView:s,setNodes:u,setEdges:d,selectDiagram:f,flushPendingSaves:p,isAuthenticated:m,isERDItemLoading:h,lastLoadedDiagramIdRef:g,lastDiagramLoadTimestampRef:_}=e,v=l(),y=c(),b=(0,R.useRef)(y.pathname);b.current=y.pathname;let x=(0,R.useRef)(t);x.current=t;let S=(0,R.useRef)(r);S.current=r;let C=(0,R.useRef)(a);C.current=a;let w=(0,R.useRef)(``),T=(0,R.useRef)(null),E=(0,R.useRef)(!1),D=(0,R.useCallback)(async e=>{if(E.current)return;E.current=!0,T.current=e;let t=x.current,r=S.current,a=C.current,s=y.pathname;try{let c=t.find(t=>String(t.id)===String(e)||t.uid===e)?.uid||e,l=`/diagrams/`+c,m=b.current===l;if(r===e&&a===`erd`){s.startsWith(`/diagrams/`)||v(`/diagrams/`+c),E.current=!1;return}if(await p(),m&&b.current!==l)return;w.current=l,!qt()&&b.current!==l&&v(l),i(c),o(`erd`),u([]),d([]);let h=await f(c,e=>{i(e),g.current=e},{isStale:()=>T.current!==e});h&&n(e=>e.some(e=>String(e.id)===String(h.id)||e.uid&&e.uid===h.uid)?e:[h,...e])}finally{E.current=!1}},[v,y.pathname,i,o,u,d,f,p]);return(0,R.useEffect)(()=>{if(!m||qt()||w.current===y.pathname)return;let e=y.pathname.match(/^\/diagrams\/([^/]+)/);if(e){let t=e[1];w.current=y.pathname,String(r)!==String(t)&&(o(`erd`),s(`erd`),D(t))}},[m,y.pathname,r,D,o,s]),(0,R.useEffect)(()=>{r&&!h&&(g.current=r,_.current=Date.now())},[r,h]),{handleDiagramSelect:D}}function Xt(e){let{notes:t,setNotes:n,activeNoteUid:r,setActiveNoteUid:i,view:a,setView:o,setSidebarView:s,selectNote:u,flushPendingSaves:d,isAuthenticated:f,getContentVersion:p,projects:m,lastLoadedNoteIdRef:h}=e,g=l(),_=c(),v=(0,R.useRef)(_.pathname);v.current=_.pathname;let y=(0,R.useRef)(t);y.current=t;let b=(0,R.useRef)(m);b.current=m;let x=(0,R.useRef)(r);x.current=r;let S=(0,R.useRef)(a);S.current=a;let C=(0,R.useRef)(u);C.current=u;let w=(0,R.useRef)(d);w.current=d;let T=(0,R.useCallback)((e,t)=>C.current(e,t),[]),E=(0,R.useCallback)(()=>w.current(),[]),D=(0,R.useRef)(``),O=(0,R.useRef)(null),k=(0,R.useCallback)(async e=>{let t=`/notes/`+e,r=v.current===t,a=Date.now();if(O.current?.uid===e&&a-O.current.time<1500)return;O.current={uid:e,time:a};let c=p();if(await E(),r&&v.current!==t)return;o(`notes`),s(`notes`),i(e),n(t=>t.map(t=>t.uid===e?{...t,content:t.content===void 0?void 0:t.content}:t)),D.current=t,!qt()&&v.current!==t&&g(t);let l=b.current?.flatMap(e=>e.notes||[]).find(t=>t.uid===e);await T(e,{contentVersionAtStart:c,fallbackNote:l}),h.current=e},[g,_.pathname,i,o,s,n,p]);return(0,R.useEffect)(()=>{if(!f||qt()||D.current===_.pathname)return;let e=_.pathname.match(/^\/notes\/([^/]+)/);e&&(D.current=_.pathname,k(e[1]))},[f,_.pathname,k]),(0,R.useEffect)(()=>{r&&(h.current=r)},[r,h]),{handleNoteSelect:k}}function Zt(e){let{flowcharts:t,setFlowcharts:n,activeFlowchartId:r,setActiveFlowchartId:i,view:a,setView:o,setSidebarView:s,selectFlowchart:u,flushPendingSaves:d,isAuthenticated:f,projects:p,lastLoadedFlowchartIdRef:m}=e,h=l(),g=c(),_=(0,R.useRef)(g.pathname);_.current=g.pathname;let v=(0,R.useRef)(t);v.current=t;let y=(0,R.useRef)(p);y.current=p;let b=(0,R.useRef)(r);b.current=r;let x=(0,R.useRef)(a);x.current=a;let S=(0,R.useRef)(u);S.current=u;let C=(0,R.useRef)(d);C.current=d;let w=(0,R.useCallback)((e,t)=>S.current(e,t),[]),T=(0,R.useCallback)(()=>C.current(),[]),E=(0,R.useRef)(``),D=(0,R.useRef)(0),O=(0,R.useRef)(null),k=(0,R.useCallback)(async e=>{let t=`/flowcharts/`+e,r=_.current===t,a=Date.now();if(O.current?.uid===e&&a-O.current.time<1500||(O.current={uid:e,time:a},String(b.current)===e&&x.current===`flowchart`)||(await T(),r&&_.current!==t))return;o(`flowchart`),s(`flowchart`),i(e),n(t=>t.map(t=>t.uid===e?{...t,data:void 0}:t)),E.current=t,D.current=Date.now(),!qt()&&_.current!==t&&h(t);let c=y.current?.flatMap(e=>e.flowcharts||[]).find(t=>t.uid===e);await w(e,{fallbackFlowchart:c}),m.current=e},[h,g.pathname,i,o,s,n]);return(0,R.useEffect)(()=>{if(!f||qt()||E.current===g.pathname)return;let e=g.pathname.match(/^\/flowcharts\/([^/]+)/);e&&(E.current=g.pathname,k(e[1]))},[f,g.pathname,k]),(0,R.useEffect)(()=>{r&&(m.current=r)},[r,m]),{handleFlowchartSelect:k}}function Qt(e){let{activeNoteUid:t,isIncomingSyncRef:n,notesRef:r,lastLoadedNoteIdRef:i,lastSaveCallRef:a,bumpContentVersion:o,saveNote:s,setNotes:c,broadcastMessage:l,syncDrafts:u,isRefreshing:d,isNoteItemLoading:f}=e,p=(0,R.useRef)(null),m=(0,R.useRef)(null),h=(0,R.useRef)(u);return h.current=u,{handleNoteChange:(0,R.useCallback)(e=>{if(!t||n.current)return;let u=t;o(),p.current&&clearTimeout(p.current),m.current&&clearTimeout(m.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f)return;let t=r.current.find(e=>String(e.uid)===String(u));t&&(await s({...t,content:e}),I(t.uid,t.title||`Untitled`,e),c(t=>t.map(t=>t.uid===u?{...t,content:e}:t))),a.current=Date.now(),l(zt.DRAFT_UPDATED,L.NOTES,u)},400),m.current=setTimeout(async()=>{await h.current()},1e3))},[t,n,o,r,i,s,c,l,d,f]),notesSaveTimeout:p,noteCloudSyncTimeoutRef:m}}function $t(e){let{activeDrawingId:t,isIncomingSyncRef:n,drawingsRef:r,lastLoadedDrawingIdRef:i,lastSaveCallRef:a,setIsLocalSaving:o,saveDrawing:s,setDrawings:c,broadcastMessage:l,triggerDebouncedSync:u,isRefreshing:d,isDrawingItemLoading:f}=e,p=(0,R.useRef)(null),m=(0,R.useRef)(!1),h=(0,R.useRef)(null),g=(0,R.useRef)(0),_=(0,R.useRef)(!1);return{handleDrawingChange:(0,R.useCallback)(e=>{if(!t||n.current)return;let v=t;if(e!==h.current){if(h.current=e,c(t=>t.map(t=>String(t.id)===String(v)||t.uid&&String(t.uid)===String(v)?{...t,data:e}:t)),Date.now()-g.current>3e3&&!_.current){_.current=!0,o(!0),p.current=setTimeout(async()=>{if(_.current=!1,i.current!==t){o(!1);return}if(d||f){o(!1);return}if(m.current){o(!1);return}let n=r.current.find(e=>String(e.id)===String(v)||e.uid&&String(e.uid)===String(v));if(!n){o(!1);return}m.current=!0;try{await s({...n,data:e}),g.current=Date.now(),a.current=Date.now(),u(),l(zt.DRAFT_UPDATED,L.DRAWINGS,v)}finally{m.current=!1,o(!1)}},300);return}o(!0),p.current&&clearTimeout(p.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f||m.current)return;let t=r.current.find(e=>String(e.id)===String(v)||e.uid&&String(e.uid)===String(v));if(t){m.current=!0;try{await s({...t,data:e}),g.current=Date.now(),a.current=Date.now(),u(),l(zt.DRAFT_UPDATED,L.DRAWINGS,v)}finally{m.current=!1,o(!1)}}},1500))}},[t,s,c,u,d,f,l,n,r,i,a,o]),drawingsSaveTimeoutRef:p}}function en(e){let{activeFlowchartId:t,isIncomingSyncRef:n,flowchartsRef:r,lastLoadedFlowchartIdRef:i,lastSaveCallRef:a,setIsLocalSaving:o,saveFlowchart:s,setFlowcharts:c,broadcastMessage:l,triggerDebouncedSync:u,isRefreshing:d,isFlowchartItemLoading:f}=e,p=(0,R.useRef)(null);return{handleFlowchartChange:(0,R.useCallback)((e,m)=>{if(!t||n.current)return;let h=t,g=JSON.stringify({nodes:e,edges:m});c(e=>{let t=e.find(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h));return t&&t.data===g?e:e.map(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h)?{...e,data:g}:e)}),o(!0),p.current&&clearTimeout(p.current),i.current===t&&(p.current=setTimeout(async()=>{if(d||f)return;let e=r.current.find(e=>String(e.id)===String(h)||e.uid&&String(e.uid)===String(h));e&&(await s({...e,data:g}),a.current=Date.now(),o(!1),u(),l(zt.DRAFT_UPDATED,L.FLOWCHART,h))},1500))},[t,s,c,u,d,f,l,n,r,i,a,o]),flowchartsSaveTimeoutRef:p}}var tn=6e4,nn=12e4;function rn(e){let t=Number(e?._version??e?.version);return Number.isFinite(t)?t:null}function an(e){let t=e?.updated_at??e?.updatedAt;if(typeof t==`number`)return t;let n=new Date(t||0).getTime();return Number.isFinite(n)?n:0}function on(e){return{version:rn(e),updatedAt:an(e)}}function sn(e,t){return e.version!==null&&t.version!==null?e.version>t.version:e.updatedAt>t.updatedAt}function cn(){return!!document.activeElement?.closest(`input, textarea, [contenteditable="true"], .cm-editor`)}function ln(e){let{isOnline:t,isAuthenticated:n,isPublicView:r,isRefreshing:i,isSyncing:a,isLocalSaving:o,view:s,activeDiagramId:c,activeNoteUid:l,activeDrawingId:d,activeFlowchartId:f,selectDiagram:p,selectNote:m,selectDrawing:h,selectFlowchart:g,setActiveDiagramId:_,diagrams:v,notes:y,drawings:b,flowcharts:x,setIsRefreshing:S,getContentVersion:C,lastSaveCallRef:w}=e,T=(0,R.useRef)(0),E=(0,R.useRef)(Date.now()),D=(0,R.useRef)(!1),O=(0,R.useRef)({});(0,R.useEffect)(()=>{let e=()=>{E.current=Date.now()},k=async()=>{let e=Date.now();if(document.visibilityState===`hidden`||e-E.current<tn||!t||!n||r||i||a||o||D.current||e-T.current<nn||e-w.current<1e4||cn())return;T.current=e,E.current=e,D.current=!0;let k=!1,A=()=>{k=!0,S(!0)};try{if(s===`erd`&&c){if(await u.hasPendingSync(L.ERD,c))return;let e=await p(c,_,{silent:!0,probe:!0});if(!e)return;let t=String(c),n=v.find(e=>String(e.id)===t||String(e.uid)===t),r=await be(c),i=O.current[t]||{version:r??rn(n),updatedAt:an(n)},a=on(e);sn(a,i)?(A(),await p(c,_,{silent:!0})&&(O.current[t]=a)):O.current[t]=a}else if(s===`notes`&&l){let e=await u.getDraft(L.NOTES,l),t=y.find(e=>String(e.uid)===String(l));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.NOTES,l),await m(l,{silent:!0,contentVersionAtStart:C()}))}else if(s===`drawings`&&d){let e=await u.getDraft(L.DRAWINGS,d),t=b.find(e=>String(e.id)===String(d)||e.uid&&String(e.uid)===String(d));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.DRAWINGS,d),await h(d,{silent:!0}))}else if(s===`flowchart`&&f){let e=await u.getDraft(L.FLOWCHART,f),t=x.find(e=>String(e.id)===String(f)||e.uid&&String(e.uid)===String(f));t&&e&&!e.sync_pending&&an(t)>e.updated_at&&(A(),await u.deleteDraft(L.FLOWCHART,f),await g(String(f),{silent:!0}))}}catch(e){console.warn(`Background refresh on focus failed:`,e)}finally{k&&S(!1),D.current=!1}};return window.addEventListener(`blur`,e),window.addEventListener(`focus`,k),document.addEventListener(`visibilitychange`,k),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`focus`,k),document.removeEventListener(`visibilitychange`,k)}},[t,n,r,i,a,o,s,c,l,d,f,p,m,h,g,_,v,y,b,x,S,C,w])}function un(e){let{view:t,pathname:n,hasActiveItem:r,isAuthenticated:i,isPublicView:a,selectedWorkspaceUid:o,tableSearchParams:s,projects:c,fileSearchQuery:l=``,fetchNotes:u,fetchDiagrams:d,fetchFlowcharts:f,fetchDrawings:p,tableRefreshKey:m,tableLoadingState:h,setTableLoadingState:g}=e,_=n.startsWith(`/table/`),v=n===`/table/db-client`;function y(e){if(!e)return`all`;let t=c?.find(t=>t.uid===e||String(t.id)===e);return t?t.id:`all`}let b={notes:u,erd:d,flowchart:f,drawings:p};function x(e,t){return e?t===void 0?{silent:!0}:{silent:!0,page:t}:t===void 0?{}:{page:t}}function S(e,t,n,r){let i=h===`loading`,a=x(!i,r.page),o=e(!1,t,l,null,10,n,a);i&&o?.then&&o.then(()=>g(`idle`)).catch(()=>g(`idle`))}(0,R.useEffect)(()=>{let e=b.notes;!(t===`notes`&&!r&&_)||!i||a||S(e,y(o),parseInt(s.get(`page`)||`1`,10),{})},[t,n,r,o,s,c,u,i,a,l,m]),(0,R.useEffect)(()=>{if(!(t===`erd`&&!r&&_&&!v)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10),c=h===`loading`,u=d(!1,e,l,null,10,n,c?{page:n,sourceType:`blank`}:{silent:!0,page:n,sourceType:`blank`});c&&u?.then&&u.then(()=>g(`idle`)).catch(()=>g(`idle`))},[t,n,r,o,s,c,d,i,a,l,m,v,h]),(0,R.useEffect)(()=>{if(!(t===`flowchart`&&!r&&_)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10),c=h===`loading`,u=f(!1,e,l,null,10,c?{page:n}:{silent:!0,page:n});c&&u?.then&&u.then(()=>g(`idle`)).catch(()=>g(`idle`))},[t,n,r,o,s,c,f,i,a,l,m]),(0,R.useEffect)(()=>{if(!(t===`drawings`&&!r&&_)||!i||a)return;let e=y(o),n=parseInt(s.get(`page`)||`1`,10);S(p,e,n,{})},[t,n,r,o,s,c,p,i,a,l,m])}function dn(e){let{view:t,notes:n,diagrams:r,drawings:i,flowcharts:a,projects:o,selectedWorkspaceUid:s,setEditDialogNote:c,setNewName:l,setRenameProjectId:u,setIsRenameDialogOpen:d,setCreateDialogOpen:f,setCreateDialogView:p}=e;return{handleOpenEditDocument:(0,R.useCallback)(e=>{let s=null;if(t===`notes`?s=n?.find(t=>t.uid===e||String(t.id)===e):t===`erd`?s=r?.find(t=>t.uid===e||String(t.id)===e):t===`drawings`?s=i?.find(t=>t.uid===e||String(t.id)===e):t===`flowchart`&&(s=a?.find(t=>t.uid===e||String(t.id)===e)),!s)return;c(s),l(s.title||s.name||``);let f=o?.find(e=>String(e.id)===String(s.project_id)||String(e.uid)===String(s.project_id)||String(e.uid)===String(s.projects?.uid));u(f?String(f.id):`none`),d(!0)},[t,n,r,i,a,o,c,l,u,d]),handleOpenCreateDocument:(0,R.useCallback)(e=>{if(l(``),s){let e=o?.find(e=>e.uid===s);u(e?String(e.id):`none`)}else u(`none`);p(e),f(!0),c(null)},[s,o,l,u,p,f,c])}}var fn=({view:e,isPublicView:t,publicData:n,activeDiagramId:r,activeNoteUid:i,activeDrawingId:a,activeFlowchartId:o,diagrams:s,notes:c,drawings:l,flowcharts:u,projects:d})=>{let f=(0,R.useMemo)(()=>{if(!t)return{erd:r,notes:i,drawings:a,flowchart:o}[e]||null},[e,t,r,i,a,o]),p=(0,R.useMemo)(()=>t?n:(e===`erd`?s:e===`notes`?c:e===`drawings`?l:u).find(e=>String(e.id)===String(f)||e.uid&&String(e.uid)===String(f)),[e,f,s,c,l,u,t,n]),m=(0,R.useMemo)(()=>{if(t)return n?{is_public:!!n.is_public,share_token:n.share_token,expiry_date:n.expiry_date}:void 0;let r=e===`erd`?s:e===`notes`?c:e===`drawings`?l:u,i=f,a=r.find(e=>String(e.id)===String(i)||e.uid&&String(e.uid)===String(i));if(a)return{is_public:!!a.is_public,share_token:a.share_token,expiry_date:a.expiry_date}},[e,t,n,s,c,l,u,f]),h=t?n:c.find(e=>e.uid===i),g=t?n:l.find(e=>String(e.id)===String(a)||e.uid&&String(e.uid)===String(a)),_=t?n:u.find(e=>e.uid&&String(e.uid)===String(o)||String(e.id)===String(o)),v=t?n:s.find(e=>String(e.id)===String(r)||e.uid&&e.uid===r);return{currentActiveId:f,activeDocument:p,initialShareSettings:m,activeNote:h,activeDrawing:g,activeFlowchart:_,activeDiagram:v,featureLabel:t?`Public Shared ${e}`:e===`erd`?`ERD Builder`:e===`notes`?`Notes`:e===`drawings`?`Drawings`:e===`flowchart`?`Flowcharts`:e===`changelog`?`Changelog`:e===`backups`?`Backups`:e===`ai-settings`?`AI Management`:`Trash Bin`,activeFileName:t?n?.name||n?.title||`Shared Document`:e===`erd`?v?.name:e===`notes`?h?.title:e===`drawings`?g?.title:e===`flowchart`?_?.title:null,activeProjectName:t?n?.projects?.name:(()=>{let t=e===`erd`?v:e===`notes`?h:e===`drawings`?g:e===`flowchart`?_:null;if(!t)return null;if(t.projects?.name)return t.projects.name;if(t.project_id){let e=d.find(e=>String(e.id)===String(t.project_id));if(e)return e.name}return null})(),activeFileUid:t?n?.uid:e===`erd`?v?.uid:e===`notes`?h?.uid:e===`drawings`?g?.uid:e===`flowchart`?_?.uid:void 0,hasActiveItem:!!p}},pn=({activeNote:e,activeNoteUid:t,activeProjectId:n,createNote:r,saveNote:a,setActiveNoteUid:o,handleNoteChange:s,setIsExportNoteModalOpen:c,setIsImportNoteModalOpen:l})=>({handleExportMarkdown:(0,R.useCallback)(()=>{c(!0)},[c]),handleImportMarkdown:(0,R.useCallback)(()=>{l(!0)},[l]),handleCopyMarkdown:(0,R.useCallback)(async()=>{e&&await m(e.content)},[e]),executeExportMarkdown:(0,R.useCallback)(()=>{if(!e)return;let t=i(e.content),n=`${(e.title||`Note`).replace(/\s+/g,`_`).toLowerCase()}.md`,r=new Blob([t],{type:`text/markdown`}),a=URL.createObjectURL(r),o=document.createElement(`a`);o.href=a,o.download=n,o.click(),URL.revokeObjectURL(a),D.success(`Note exported to Markdown`)},[e]),executeImportMarkdown:(0,R.useCallback)(async i=>{let c=D.loading(`Importing ${i.name}...`);try{let l=``;if(l=i.name.split(`.`).pop()?.toLowerCase()===`docx`?await g.convertDocxToHtml(i):await g.convertMarkdownToHtml(i),t){let t=e?.content||``;s(t+(t?`<p></p>`:``)+l),D.success(`${i.name} imported successfully`,{id:c})}else{let e=await r(i.name.replace(/\.[^/.]+$/,``),n===`all`?null:n);e&&(await a({...e,content:l}),o(e.uid),D.success(`Created new note from ${i.name}`,{id:c}))}}catch(e){D.error(e.message||`Failed to import file`,{id:c})}},[t,e,n,r,a,o,s])}),mn=({view:e,activeDiagramId:t,activeNoteUid:n,activeDrawingId:r,activeFlowchartId:i,diagrams:a,notes:o,drawings:s,flowcharts:c,projects:l,isPublicView:u,setActiveDiagramId:d,setActiveNoteUid:f,setActiveDrawingId:p,setActiveFlowchartId:m,setActiveProjectId:h})=>{(0,R.useEffect)(()=>{u||(()=>{let u=null;if(e===`erd`&&t?u=a.find(e=>String(e.id)===String(t)):e===`notes`&&n?u=o.find(e=>String(e.uid)===String(n)):e===`drawings`&&r?u=s.find(e=>String(e.id)===String(r)):e===`flowchart`&&i&&(u=c.find(e=>String(e.id)===String(i))),u&&u.is_deleted){e===`erd`?d(null):e===`notes`?f(null):e===`drawings`?p(null):e===`flowchart`&&m(null),D.info(`Document closed because it was moved to trash.`);return}if(u&&u.project_id){let e=l.find(e=>String(e.id)===String(u.project_id));e&&e.is_deleted&&(h(null),d(null),f(null),p(null),m(null),D.warning(`Project was deleted. Closing current document.`))}})()},[e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h])};function hn(e){if(e===`/trash`)return`trash`;if(e===`/ai-settings`)return`ai-settings`;if(e===`/backups`)return`backups`;if(e===`/changelog`)return`changelog`;if(e.startsWith(`/table/`)){let t=e.match(/^\/table\/([^/]+)$/);if(t){if(t[1]===`db-client`)return`erd`;if([`erd`,`notes`,`drawings`,`flowchart`].includes(t[1]))return t[1]}}return e.startsWith(`/notes/`)?`notes`:e.startsWith(`/diagrams/`)?`erd`:e.startsWith(`/drawings/`)?`drawings`:e.startsWith(`/flowcharts/`)?`flowchart`:localStorage.getItem(`erd-builder-last-view`)||`notes`}function gn({children:e,isPublicView:t,publicData:n,isPublicLoading:i,forbiddenDoc:a,fetchPublicDocument:o,setIsPublicView:s,handleLogout:u}){let d=l(),f=c(),p=(0,R.useRef)(f.pathname);p.current=f.pathname;let[h,g]=y(),_=(0,R.useMemo)(()=>hn(f.pathname),[f.pathname]),[v,b]=(0,R.useState)(()=>localStorage.getItem(`erd-builder-last-sidebar-view`)||`notes`),x=(0,R.useMemo)(()=>[`erd`,`notes`,`drawings`,`flowchart`].includes(_)?(localStorage.setItem(`erd-builder-last-sidebar-view`,_),_):v,[_,v]);(0,R.useEffect)(()=>{qt()||localStorage.setItem(`erd-builder-last-view`,_)},[_]);let[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)(!1),[E,O]=(0,R.useState)(!1),[k,j]=(0,R.useState)(null),[M,ee]=(0,R.useState)(!1),[N,P]=(0,R.useState)(``),[te,ne]=(0,R.useState)(`none`),[re,ie]=(0,R.useState)(!1),[ae,oe]=(0,R.useState)(!1),[se,F]=(0,R.useState)(!1),[ce,le]=(0,R.useState)(!1),[I,ue]=(0,R.useState)(``),[de,ge]=(0,R.useState)(null),[_e,ye]=(0,R.useState)(null),[be,xe]=(0,R.useState)(!1),[Se,Ce]=(0,R.useState)(`notes`),[we,Te]=(0,R.useState)(!1),[Ee,z]=(0,R.useState)(`account`),[Ae,je]=(0,R.useState)(()=>localStorage.getItem(`erd-builder-theme`)||`system`),ze=(0,R.useCallback)(e=>e===`system`?window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e,[])(localStorage.getItem(`erd-builder-theme`)||`system`),[Be,Ve]=(0,R.useState)(ze),He=(0,R.useCallback)(e=>{localStorage.setItem(`erd-builder-theme`,e),je(e)},[]),Ue=(0,R.useRef)(!1),[We,Ge]=(0,R.useState)(!1),qe=(0,R.useCallback)(e=>{Ue.current=e,Ge(e)},[]),B=(0,R.useRef)(null),Je=(0,R.useRef)(null),Ye=(0,R.useRef)(null),Xe=(0,R.useRef)(null),Ze=(0,R.useRef)(``),[Qe,$e]=(0,R.useState)(!1),et=(0,R.useRef)(!1),V=(0,R.useRef)(0),tt=(0,R.useRef)(0),nt=(0,R.useRef)(!1),rt=(0,R.useRef)([]),it=(0,R.useRef)([]),at=(0,R.useRef)([]),ot=(0,R.useRef)([]),st=(0,R.useRef)([]),[ct,lt]=(0,R.useState)(``),[ut,dt]=(0,R.useState)(``),ft=(0,R.useRef)(null),[pt,mt]=(0,R.useState)(``),[ht,_t]=(0,R.useState)(``),vt=(0,R.useCallback)(e=>{},[]),yt=(0,R.useCallback)(e=>{b(e)},[]),{isAuthenticated:H,isGuest:U,user:xt}=ve(),St=Fe(),{triggerDebouncedSync:Ct,isSyncing:wt,syncError:Tt,syncDrafts:Et,checkAndClearStaleDrafts:Dt,hasPendingSyncs:kt}=Ie(H,U),{isInstallable:At,installApp:jt}=Le(),{handleExportSQL:Mt}=gt(),{handleExportImage:Nt}=Rt(),W=t,Pt=n,Ft=o,It=s,{diagrams:G,setDiagrams:Lt,activeDiagramId:K,setActiveDiagramId:Bt,fetchDiagrams:Ut,createDiagram:Jt,updateDiagram:tn,deleteDiagram:nn,restoreDiagram:rn,deleteDiagramPermanent:an,moveDiagramToProject:on,saveDiagram:sn,diagramsTotal:cn,isLoading:gn}=De(H,_,U),_n=(0,R.useRef)({move:()=>{},update:()=>{},edges:()=>{},delete:()=>{}}),{nodes:vn,setNodes:yn,onNodesChange:bn,edges:xn,setEdges:Sn,onEdgesChange:Cn,selectedNodeId:wn,setSelectedNodeId:Tn,selectedEdgeId:En,setSelectedEdgeId:Dn,onConnect:On,addEntity:kn,duplicateEntity:An,updateEntity:jn,deleteEntity:Mn,handleEdgeUpdate:Nn,handleEdgeFlip:Pn,deleteEdge:Fn,handleDiagramSelect:In,viewportRef:Ln,undo:Rn,redo:zn,canUndo:Bn,canRedo:Vn,takeSnapshot:Hn,isItemLoading:Un,saveCounter:Wn,onNodeDragStop:Gn,onMoveEnd:Kn,extractColumnIdFromHandle:qn,getRelationKey:Jn,dedupeEdgesByRelation:Yn}=Ke(W,U,H,()=>{},(0,R.useMemo)(()=>({broadcastNodeMove:(e,t,n)=>_n.current.move(e,t,n),broadcastNodeUpdate:(e,t)=>_n.current.update(e,t),broadcastEdgesUpdate:e=>_n.current.edges(e),onDeleteEntity:e=>_n.current.delete(e)}),[])),{broadcastNodeMove:Xn,broadcastNodeUpdate:Zn,broadcastEdgesUpdate:Qn}=Re(W?Pt?.id:K,yn,Sn),$n=(0,R.useCallback)(async e=>{let t=ot.current.filter(t=>t.id!==e),n=st.current.filter(t=>t.source!==e&&t.target!==e);await sn(t,n,Ln.current),V.current=Date.now(),Et()},[sn,Ln,Et]);(0,R.useEffect)(()=>{_n.current={move:Xn,update:Zn,edges:Qn,delete:$n}},[Xn,Zn,Qn,$n]);let{notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,bumpContentVersion:nr,getContentVersion:rr,fetchNotes:ir,createNote:ar,updateNote:or,deleteNote:sr,moveNoteToProject:cr,saveNote:lr,restoreNote:ur,deleteNotePermanent:dr,notesTotal:fr,isLoading:pr,isItemLoading:mr,selectNote:hr,duplicateNote:gr}=Oe(U),{projects:_r,activeProjectId:vr,setActiveProjectId:yr,fetchProjects:Y,createProject:br,updateProject:xr,deleteProject:Sr,restoreProject:Cr,deleteProjectPermanent:wr,isLoading:Tr}=ke(U),{drawings:Er,setDrawings:Dr,activeDrawingUid:X,setActiveDrawingUid:Or,fetchDrawings:kr,createDrawing:Ar,updateDrawing:jr,deleteDrawing:Mr,moveDrawingToProject:Nr,saveDrawing:Pr,restoreDrawing:Fr,deleteDrawingPermanent:Ir,drawingsTotal:Lr,isLoading:Rr,isItemLoading:zr,selectDrawing:Br,duplicateDrawing:Vr}=Me(U),{flowcharts:Z,setFlowcharts:Hr,activeFlowchartId:Q,setActiveFlowchartId:Ur,fetchFlowcharts:Wr,createFlowchart:Gr,updateFlowchart:Kr,deleteFlowchart:qr,moveFlowchartToProject:Jr,saveFlowchart:Yr,restoreFlowchart:Xr,deleteFlowchartPermanent:Zr,flowchartsTotal:Qr,isLoading:$r,isItemLoading:ei,selectFlowchart:ti}=Ne(U),{trashData:ni,fetchTrash:ri,restoreDbClient:ii,deleteDbClientPermanent:ai,isLoading:oi}=Pe(U),{broadcastMessage:si}=Vt((0,R.useCallback)(async e=>{if(e.type!==zt.DRAFT_UPDATED)return;let{type:t,id:n}=e.payload;_===`erd`&&t===L.ERD&&String(n)===String(K)?(et.current=!0,window.currentSyncIsSilent=!0,await In(String(n),Bt),setTimeout(()=>{et.current=!1},1e3)):_===`notes`&&t===L.NOTES&&String(n)===String(J)?await hr(String(n),{silent:!0}):_===`drawings`&&t===L.DRAWINGS&&String(n)===String(X)?await Br(String(n),{silent:!0}):_===`flowchart`&&t===L.FLOWCHART&&String(n)===String(Q)&&await ti(String(n),{silent:!0})},[_,K,J,X,Q,In,hr,Br,ti,Bt]));(0,R.useEffect)(()=>{rt.current=q,it.current=Er,at.current=Z,ot.current=vn,st.current=xn},[q,Er,Z,vn,xn]);let{currentActiveId:ci,activeDocument:$,initialShareSettings:li,activeNote:ui,activeDrawing:di,activeFlowchart:fi,featureLabel:pi,activeFileName:mi,activeProjectName:hi,activeFileUid:gi,hasActiveItem:_i,activeDiagram:vi}=fn({view:_,isPublicView:W,publicData:Pt,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r});(0,R.useEffect)(()=>{X&&!zr&&(Ye.current=X),Q&&!ei&&(Xe.current=Q)},[X,zr,Q,ei]),mn({view:_,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r,isPublicView:W,setActiveDiagramId:Bt,setActiveNoteUid:tr,setActiveDrawingId:Or,setActiveFlowchartId:Ur,setActiveProjectId:yr});let yi=(0,R.useCallback)(async(e,t)=>{if(jn(e),t?.immediate){Ei.current&&(clearTimeout(Ei.current),qe(!1));let t=ot.current.map(t=>t.id===e.id?{...t,data:e}:t);await sn(t,st.current,Ln.current),V.current=Date.now(),Et(),Zn(e.id,e)}},[jn,sn,Ln,Et,Zn]),{handleNoteChange:bi,notesSaveTimeout:xi}=Qt({activeNoteUid:J,isIncomingSyncRef:et,notesRef:rt,lastLoadedNoteIdRef:Je,lastSaveCallRef:V,bumpContentVersion:nr,saveNote:lr,setNotes:er,broadcastMessage:si,syncDrafts:Et,isRefreshing:Qe,isNoteItemLoading:mr}),{handleDrawingChange:Si,drawingsSaveTimeoutRef:Ci}=$t({activeDrawingId:X,isIncomingSyncRef:et,drawingsRef:it,lastLoadedDrawingIdRef:Ye,lastSaveCallRef:V,setIsLocalSaving:qe,saveDrawing:Pr,setDrawings:Dr,broadcastMessage:si,triggerDebouncedSync:Ct,isRefreshing:Qe,isDrawingItemLoading:zr}),{handleFlowchartChange:wi,flowchartsSaveTimeoutRef:Ti}=en({activeFlowchartId:Q,isIncomingSyncRef:et,flowchartsRef:at,lastLoadedFlowchartIdRef:Xe,lastSaveCallRef:V,setIsLocalSaving:qe,saveFlowchart:Yr,setFlowcharts:Hr,broadcastMessage:si,triggerDebouncedSync:Ct,isRefreshing:Qe,isFlowchartItemLoading:ei}),{saveTimeoutRef:Ei,flushPendingSaves:Di}=Kt({saveCounter:Wn,isLocalSavingRef:Ue,isIncomingSyncRef:et,lastLoadedDiagramIdRef:B,lastSaveCallRef:V,lastDiagramLoadTimestampRef:tt,isAuthenticated:H,isGuest:U,view:_,isPublicView:W,activeDiagramId:K,nodes:vn,edges:xn,viewportRef:Ln,saveDiagram:sn,setIsLocalSaving:qe,triggerDebouncedSync:Ct,broadcastMessage:si,isRefreshing:Qe,isERDItemLoading:Un,isDiagramsLoading:gn,activeNoteUid:J,notes:q,saveNote:lr,activeDrawingId:X,drawings:Er,saveDrawing:Pr,activeFlowchartId:Q,flowcharts:Z,saveFlowchart:Yr,notesSaveTimeoutRef:xi,drawingsSaveTimeoutRef:Ci,flowchartsSaveTimeoutRef:Ti,syncDrafts:Et}),{handleDiagramSelect:Oi}=Yt({diagrams:G,setDiagrams:Lt,activeDiagramId:K,setActiveDiagramId:Bt,view:_,setView:vt,setSidebarView:yt,setNodes:yn,setEdges:Sn,selectDiagram:In,flushPendingSaves:Di,isAuthenticated:H,isERDItemLoading:Un,lastLoadedDiagramIdRef:B,lastDiagramLoadTimestampRef:tt}),{handleNoteSelect:ki}=Xt({notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,view:_,setView:vt,setSidebarView:yt,selectNote:hr,flushPendingSaves:Di,isAuthenticated:H,getContentVersion:rr,projects:_r,lastLoadedNoteIdRef:Je}),{handleFlowchartSelect:Ai}=Zt({flowcharts:Z,setFlowcharts:Hr,activeFlowchartId:Q,setActiveFlowchartId:Ur,view:_,setView:vt,setSidebarView:yt,selectFlowchart:ti,flushPendingSaves:Di,isAuthenticated:H,projects:_r,lastLoadedFlowchartIdRef:Xe});async function ji(e){let t=`/drawings/`+e,n=p.current===t;(X!==e||_!==`drawings`)&&(await Di(),!(n&&p.current!==t)&&(b(`drawings`),Dr(t=>t.map(t=>String(t.uid??t.id)===e?{...t,data:void 0}:t)),Ze.current=t,p.current!==t&&d(t,{replace:!0}),await Br(e),Ye.current=e))}let Mi=(0,R.useCallback)(async()=>{$e(!0);try{if(_===`erd`&&K){let e=await In(K,Bt,{silent:!0,force:!0});e&&Lt(t=>t.map(t=>String(t.id)===String(e.id)||String(t.uid)===String(e.uid)?{...t,...e}:t))}else _===`notes`&&J?await hr(J,{silent:!0,contentVersionAtStart:rr()}):_===`drawings`&&X?await Br(X,{silent:!0}):_===`flowchart`&&Q&&await ti(String(Q),{silent:!0})}catch(e){console.error(`Failed to refresh restored document:`,e),D.error(`Version restored, but the current view could not be refreshed.`)}finally{$e(!1)}},[_,K,J,X,Q,In,hr,Br,ti,Bt,Lt,rr]);(0,R.useEffect)(()=>{if(!H||qt()||Ze.current===f.pathname)return;let e=f.pathname.match(/^\/drawings\/([^/]+)/);e&&(Ze.current=f.pathname,ji(e[1]))},[H,f.pathname,ji]);let{handleExportMarkdown:Ni,handleImportMarkdown:Pi,handleCopyMarkdown:Fi,executeImportMarkdown:Ii}=pn({activeNote:ui,activeNoteUid:J,activeProjectId:vr,createNote:ar,saveNote:lr,setActiveNoteUid:tr,handleNoteChange:bi,setIsExportNoteModalOpen:F,setIsImportNoteModalOpen:oe}),{handleSidebarDiagramCreate:Li,handleSidebarNoteCreate:Ri,handleSidebarDrawingCreate:zi,handleSidebarFlowchartCreate:Bi,handleSidebarProjectCreate:Vi,handleSidebarProjectUpdate:Hi,handleSidebarProjectDelete:Ui}=Ht({createDiagram:Jt,updateDiagram:tn,deleteDiagram:nn,createNote:ar,updateNote:or,deleteNote:sr,createDrawing:Ar,updateDrawing:jr,deleteDrawing:Mr,createFlowchart:Gr,updateFlowchart:Kr,deleteFlowchart:qr,createProject:br,updateProject:xr,deleteProject:Sr,moveDiagramToProject:on,moveNoteToProject:cr,moveDrawingToProject:Nr,moveFlowchartToProject:Jr,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,fetchTrash:ri,handleDiagramSelect:Oi,handleNoteSelect:ki,handleDrawingSelect:ji,handleFlowchartSelect:Ai,searchQuery:ct,activeProjectId:vr,notesRef:rt,copyMarkdownToClipboard:m,setIsImportNoteModalOpen:oe,setIsExportNoteModalOpen:F}),Wi=(0,R.useCallback)(()=>{Y(!1,ut)},[ut,Y]),Gi=(0,R.useCallback)(()=>{ci&&ie(!0)},[ci]),Ki=(0,R.useCallback)(()=>{if(!$)return;P($.title||$.name||``);let e=_r?.find(e=>String(e.id)===String($.project_id)||String(e.uid)===String($.project_id)||String(e.uid)===String($.projects?.uid));ne(e?String(e.id):`none`),ee(!0)},[$,_r]),{handleOpenEditDocument:qi,handleOpenCreateDocument:Ji}=dn({view:_,notes:q,diagrams:G,drawings:Er,flowcharts:Z,projects:_r,selectedWorkspaceUid:h.get(`workspace`),setEditDialogNote:ge,setNewName:P,setRenameProjectId:ne,setIsRenameDialogOpen:ee,setCreateDialogOpen:xe,setCreateDialogView:Ce}),Yi=(0,R.useCallback)(e=>{$&&Mt(e,{name:mi||`Untitled`},ot.current,st.current)},[$,mi,Mt]),Xi=(0,R.useCallback)(()=>{$&&Nt(mi||`Untitled`)},[$,mi,Nt]),{hasUpdate:Zi,latestVersion:Qi,isChecking:$i,isDownloading:ea,checkNow:ta,handleDownload:na}=bt(void 0,!1,!1),{isOutdated:ra,latestVersion:ia,currentVersion:aa}=Ot(),oa=Zi||ra;(0,R.useEffect)(()=>{let e=qt();if(e){It(!0);let t=sessionStorage.getItem(`share_token_${e.uid}`);Ft(e.type,e.uid,yn,Sn,t||void 0)}At&&(sessionStorage.getItem(`pwa-install-toast-shown`)||(D(`✨ Enhance your experience`,{description:`Install ERD Builder Pro as a desktop app for offline access and better performance.`,action:{label:`Install`,onClick:()=>jt()},duration:1e4}),sessionStorage.setItem(`pwa-install-toast-shown`,`true`)))},[At,jt]),(0,R.useEffect)(()=>{if(!St&&!W){if(_===`erd`&&K)sn(vn,xn,Ln.current);else if(_===`notes`&&J){let e=q.find(e=>String(e.uid)===String(J));e&&lr(e)}else if(_===`drawings`&&X){let e=Er.find(e=>String(e.uid??e.id)===String(X));e&&Pr(e)}else if(_===`flowchart`&&Q){let e=Z.find(e=>String(e.uid??e.id)===String(Q));e&&Yr(e)}}},[St,_,K,J,X,Q,vn,xn]),(0,R.useEffect)(()=>{let e=setTimeout(()=>dt(ct),300);return()=>clearTimeout(e)},[ct]),(0,R.useEffect)(()=>{let e=setTimeout(()=>_t(pt),300);return()=>clearTimeout(e)},[pt]),(0,R.useEffect)(()=>{H&&!W&&Y(!1,ut)},[ut,Y,H,W]);let sa=(0,R.useRef)(Ae);sa.current=Ae,(0,R.useEffect)(()=>{let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=e=>{Ve(e);let t=document.documentElement,n=document.body;e===`dark`?(t.classList.add(`dark`),n.classList.add(`dark`)):(t.classList.remove(`dark`),n.classList.remove(`dark`))},n=sa.current;t(n===`system`?e.matches?`dark`:`light`:n);let r=()=>{sa.current===`system`&&t(e.matches?`dark`:`light`)};return e.addEventListener(`change`,r),()=>e.removeEventListener(`change`,r)},[Ae]),(0,R.useEffect)(()=>{if(!(typeof window<`u`&&(window.__TAURI__||window.__TAURI_INTERNALS__)))return;let e;return(async()=>{try{let{getCurrentWindow:t}=await r(async()=>{let{getCurrentWindow:e}=await import(`./window-Cybt16bF.js`);return{getCurrentWindow:e}},__vite__mapDeps([37,1,3,38])),n=t(),i=await n.theme();if(i&&sa.current===`system`){let e=i,t=document.documentElement,n=document.body;e===`dark`?(t.classList.add(`dark`),n.classList.add(`dark`)):(t.classList.remove(`dark`),n.classList.remove(`dark`)),Ve(e)}e=await n.onThemeChanged(({payload:e})=>{if(sa.current===`system`&&e){let t=e,n=document.documentElement,r=document.body;t===`dark`?(n.classList.add(`dark`),r.classList.add(`dark`)):(n.classList.remove(`dark`),r.classList.remove(`dark`)),Ve(t)}})}catch(e){console.warn(`[Theme] Tauri theme API unavailable:`,e)}})(),()=>{e&&e()}},[]),(0,R.useEffect)(()=>{nt.current||!H||W||(nt.current=!0,Y(!1,``))},[H,W,Y]),(0,R.useEffect)(()=>{_===`trash`&&H&&!W&&ri()},[_,H,W,ri]),(0,R.useEffect)(()=>{H&&!U&&(G.length>0&&Dt(L.ERD,G),q.length>0&&Dt(L.NOTES,q),Er.length>0&&Dt(L.DRAWINGS,Er),Z.length>0&&Dt(L.FLOWCHART,Z))},[G,q,Er,Z,H,U,Dt]),(0,R.useEffect)(()=>{let e=e=>{if(Ue.current)return e.preventDefault(),e.returnValue=``,``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[]),ln({isOnline:St,isAuthenticated:H,isPublicView:W,isRefreshing:Qe,isSyncing:wt,isLocalSaving:We,view:_,activeDiagramId:K,activeNoteUid:J,activeDrawingId:X,activeFlowchartId:Q,selectDiagram:In,selectNote:hr,selectDrawing:Br,selectFlowchart:ti,setActiveDiagramId:Bt,diagrams:G,notes:q,drawings:Er,flowcharts:Z,setIsRefreshing:$e,getContentVersion:rr,lastSaveCallRef:V});let[ca,la]=(0,R.useState)(0),ua=(0,R.useCallback)(()=>la(e=>e+1),[]),[da,fa]=(0,R.useState)(0),pa=(0,R.useCallback)(()=>fa(e=>e+1),[]),[ma,ha]=(0,R.useState)(`idle`);un({view:_,pathname:f.pathname,hasActiveItem:_i,isAuthenticated:H,isPublicView:W,selectedWorkspaceUid:h.get(`workspace`),tableSearchParams:h,projects:_r,fileSearchQuery:ht,fetchNotes:ir,fetchDiagrams:Ut,fetchFlowcharts:Wr,fetchDrawings:kr,tableRefreshKey:ca,tableLoadingState:ma,setTableLoadingState:ha}),(0,R.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`s`&&(e.preventDefault(),kt&&!wt&&St&&Et())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[kt,wt,St,Et]),(0,R.useEffect)(()=>{let e=()=>F(!0),t=()=>oe(!0);return window.addEventListener(`notes:open-export-modal`,e),window.addEventListener(`notes:open-import-modal`,t),()=>{window.removeEventListener(`notes:open-export-modal`,e),window.removeEventListener(`notes:open-import-modal`,t)}},[]);let ga=(0,R.useCallback)(async(e,t,n)=>{if(!St&&!W){D.error(`Offline Mode: Navigation is disabled.`,{duration:5e3});return}if(e!==_&&await Di(),e!==`trash`&&e!==`changelog`&&e!==`backups`&&e!==`ai-settings`&&b(e),t){ha(`loading`),tr(null),Or(null),Bt(null),Ur(null);let t=`/table/`+e;n&&(t+=`?workspace=`+encodeURIComponent(n)),t!==f.pathname+f.search&&d(t,{replace:!0});return}if(!qt()){let t=null;e===`notes`&&J?t=`/notes/`+J:e===`flowchart`&&fi?t=`/flowcharts/`+(fi.uid||Q):e===`erd`&&K?t=`/diagrams/`+K:e===`drawings`&&X?t=`/drawings/`+X:e===`trash`?t=`/trash`:e===`ai-settings`?(z(`account`),Te(!0)):e===`backups`?(z(`backups`),Te(!0)):e===`changelog`?(z(`changelog`),Te(!0)):(tr(null),Or(null),Bt(null),Ur(null),t=`/`),t&&t!==f.pathname+f.search&&d(t,{replace:!0})}},[_,St,W,Di,f.pathname,f.search,d,J,fi,Q,K,X]),_a=(0,R.useCallback)(async()=>{if(k){let{id:e,type:t,uid:n}=k;t===`project`?await wr(e):t===`erd`?await an(n||String(e)):t===`notes`?await dr(n||String(e)):t===`drawings`?await Ir(n||String(e)):t===`flowchart`?await Zr(n||String(e)):t===`db-client`&&await ai(n||String(e)),T(!1),j(null),await ri()}},[k,wr,an,dr,Ir,Zr,ai,ri]),va=(0,R.useCallback)(()=>{$&&(ue(`${$.title||$.name} (Copy)`),le(!0))},[$]),ya=(0,R.useCallback)(async()=>{if(!(!$||!I.trim())){$e(!0);try{if(_===`notes`){let e=await gr($.uid,I);e&&(await ki(e.uid),Y(!1,ut),D.success(`Note duplicated successfully`))}else if(_===`drawings`){let e=await Vr($.uid,I);e&&(await ji(e.uid),Y(!1,ut),D.success(`Drawing duplicated successfully`))}else D.info(`Duplication for this document type is disabled.`)}catch(e){console.error(`Duplicate error:`,e),D.error(`Failed to duplicate document.`)}finally{$e(!1),le(!1)}}},[$,I,_,gr,Vr,ki,ji,Y,ut]),{handleNodeClick:ba,handleNodeDoubleClick:xa,handleEdgeClick:Sa,handlePaneClick:Ca,handleMove:wa,handleOpenImportModal:Ta,handleWorkspaceExportSQL:Ea,handleWorkspaceExportImage:Da,selectedEntity:Oa}=Gt({isPublicView:W,setSelectedNodeId:Tn,setSelectedEdgeId:Dn,setIsImportModalOpen:O,viewportRef:Ln,publicData:Pt,diagrams:G,activeDiagramId:K,handleExportSQL:Mt,handleExportImage:Nt,nodes:vn,edges:xn,view:_,isDiagramsLoading:gn,isERDItemLoading:Un,isNotesLoading:pr,isNoteItemLoading:mr,isDrawingsLoading:Rr,isDrawingItemLoading:zr,isFlowchartsLoading:$r,isFlowchartItemLoading:ei,selectedNodeId:wn}),{handleTrashRestoreProject:ka,handleTrashRestoreDiagram:Aa,handleTrashRestoreNote:ja,handleTrashRestoreDrawing:Ma,handleTrashRestoreFlowchart:Na,handleTrashRestoreDbClient:Pa,handleTrashProjectPermanentDelete:Fa,handleTrashDiagramPermanentDelete:Ia,handleTrashNotePermanentDelete:La,handleTrashDrawingPermanentDelete:Ra,handleTrashFlowchartPermanentDelete:za,handleTrashDbClientPermanentDelete:Ba}=Wt({restoreProject:Cr,restoreDiagram:rn,restoreNote:ur,restoreDrawing:Fr,restoreFlowchart:Xr,restoreDbClient:ii,fetchTrash:ri,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,debouncedSearchQuery:ut,setItemToDelete:j,setIsPermanentDeleteConfirmOpen:T,trashData:ni}),Va=(0,R.useCallback)(e=>{g(t=>{let n=new URLSearchParams(t);return e?(n.set(`view`,`table`),n.set(`workspace`,e)):n.delete(`workspace`),n.delete(`page`),n},{replace:!0})},[g]),Ha=parseInt(h.get(`page`)||`1`,10),[Ua,Wa]=R.useState(null),[Ga,Ka]=R.useState(null),qa=(0,R.useMemo)(()=>({user:xt,isGuest:U,handleLogout:u,view:_,sidebarView:x,isPublicView:W,setIsPublicView:It,publicData:Pt,diagrams:G,notes:q,drawings:Er,flowcharts:Z,projects:_r,trashData:ni,nodes:vn,edges:xn,setNodes:yn,setEdges:Sn,activeDiagramId:K,setActiveDiagramId:Bt,activeNoteUid:J,setActiveNoteUid:tr,activeDrawingId:X,setActiveDrawingId:Or,activeFlowchartId:Q,setActiveFlowchartId:Ur,activeProjectId:vr,setActiveProjectId:yr,isDiagramsLoading:gn,isNotesLoading:pr,isDrawingsLoading:Rr,isFlowchartsLoading:$r,isNoteItemLoading:mr,isDrawingItemLoading:zr,isFlowchartItemLoading:ei,isERDItemLoading:Un,isLoading:Tr,isProjectsLoading:Tr,isLocalSaving:We,isRefreshing:Qe,isSyncing:wt,isOnline:St,searchQuery:ct,setSearchQuery:lt,fileSearchQuery:pt,setFileSearchQuery:mt,fileSearchRef:ft,selectedWorkspaceUid:h.get(`workspace`),handleWorkspaceFilter:Va,activeDocument:$,activeNote:ui,activeDiagram:vi,activeDrawing:di,activeFlowchart:fi,hasActiveItem:_i,activeFileName:mi,activeFileUid:gi,activeProjectName:hi,featureLabel:pi,initialShareSettings:li,currentActiveId:ci,handleViewChange:ga,handleNoteSelect:ki,handleDiagramSelect:Oi,handleDrawingSelect:ji,handleFlowchartSelect:Ai,refreshActiveDocument:Mi,handleNoteChange:bi,handleDrawingChange:Si,handleFlowchartChange:wi,handleEntityUpdate:yi,handleSidebarDiagramCreate:Li,handleSidebarNoteCreate:Ri,handleSidebarDrawingCreate:zi,handleSidebarFlowchartCreate:Bi,handleSidebarProjectCreate:Vi,handleSidebarProjectUpdate:Hi,handleSidebarProjectDelete:Ui,isMoveToTrashAlertOpen:re,setIsMoveToTrashAlertOpen:ie,isDeleteAlertOpen:S,setIsDeleteAlertOpen:C,isRenameDialogOpen:M,setIsRenameDialogOpen:ee,isDuplicateDialogOpen:ce,setIsDuplicateDialogOpen:le,isImportModalOpen:E,setIsImportModalOpen:O,isPermanentDeleteConfirmOpen:w,setIsPermanentDeleteConfirmOpen:T,isImportNoteModalOpen:ae,setIsImportNoteModalOpen:oe,isExportNoteModalOpen:se,setIsExportNoteModalOpen:F,newName:N,setNewName:P,renameProjectId:te,setRenameProjectId:ne,duplicateName:I,setDuplicateName:ue,itemToDelete:k,setItemToDelete:j,createDialogOpen:be,setCreateDialogOpen:xe,createDialogView:Se,setCreateDialogView:Ce,editDialogNote:de,setEditDialogNote:ge,tableDeleteDoc:_e,setTableDeleteDoc:ye,isSettingsOpen:we,setIsSettingsOpen:Te,settingsTab:Ee,setSettingsTab:z,theme:Ae,setTheme:He,resolvedTheme:Be,handleHeaderDelete:Gi,handleHeaderRename:Ki,handleHeaderSettingsSaved:Wi,handleHeaderExportSQL:Yi,handleHeaderExportImage:Xi,handleExportMarkdown:Ni,handleCopyMarkdown:Fi,handleImportMarkdown:Pi,executeImportMarkdown:Ii,handleDuplicate:va,executeDuplicate:ya,handleOpenEditDocument:qi,handleOpenCreateDocument:Ji,onNodesChange:bn,onEdgesChange:Cn,onConnect:On,selectedNodeId:wn,setSelectedNodeId:Tn,selectedEdgeId:En,setSelectedEdgeId:Dn,selectedEntity:Oa,canUndo:Bn,canRedo:Vn,undo:Rn,redo:zn,addEntity:kn,duplicateEntity:An,deleteEntity:Mn,deleteEdge:Fn,handleEdgeUpdate:Nn,handleEdgeFlip:Pn,handleNodeClick:ba,handleNodeDoubleClick:xa,handleEdgeClick:Sa,handlePaneClick:Ca,handleMove:wa,handleOpenImportModal:Ta,handleWorkspaceExportSQL:Ea,handleWorkspaceExportImage:Da,takeSnapshot:Hn,onNodeDragStop:Gn,onMoveEnd:Kn,extractColumnIdFromHandle:qn,getRelationKey:Jn,dedupeEdgesByRelation:Yn,viewportRef:Ln,lastLoadedDiagramIdRef:B,syncDrafts:Et,triggerDebouncedSync:Ct,broadcastMessage:si,setIsLocalSaving:qe,hasPendingSyncs:kt,syncError:Tt,isInstallable:At,installApp:jt,handleTrashRestoreProject:ka,handleTrashRestoreDiagram:Aa,handleTrashRestoreNote:ja,handleTrashRestoreDrawing:Ma,handleTrashRestoreFlowchart:Na,handleTrashRestoreDbClient:Pa,handleTrashProjectPermanentDelete:Fa,handleTrashDiagramPermanentDelete:Ia,handleTrashNotePermanentDelete:La,handleTrashDrawingPermanentDelete:Ra,handleTrashFlowchartPermanentDelete:za,handleTrashDbClientPermanentDelete:Ba,fetchTrash:ri,isTrashLoading:oi,confirmPermanentDelete:_a,saveDiagram:sn,saveNote:lr,saveDrawing:Pr,saveFlowchart:Yr,updateDiagram:tn,updateNote:or,updateDrawing:jr,updateFlowchart:Kr,deleteDiagram:nn,deleteNote:sr,deleteDrawing:Mr,deleteFlowchart:qr,moveDiagramToProject:on,moveNoteToProject:cr,moveDrawingToProject:Nr,moveFlowchartToProject:Jr,fetchProjects:Y,fetchDiagrams:Ut,fetchNotes:ir,fetchDrawings:kr,fetchFlowcharts:Wr,notesTotal:fr,diagramsTotal:cn,drawingsTotal:Lr,flowchartsTotal:Qr,tableSearchParams:h,setTableSearchParams:g,tablePage:Ha,triggerTableRefresh:ua,tableLoadingState:ma,setTableLoadingState:ha,pendingErdDiffTrigger:da,triggerPendingErdDiff:pa,breadcrumbLabel:Ua,setBreadcrumbLabel:Wa,flowchartExportHandler:Ga,setFlowchartExportHandler:Ka,hasUpdate:Zi,latestVersion:Qi,isCheckingUpdate:$i,isDownloadingUpdate:ea,checkForUpdates:ta,downloadUpdate:na,isWebOutdated:ra,showOutdatedBadge:oa}),[xt,U,u,_,x,W,It,Pt,G,q,Er,Z,_r,ni,vn,xn,yn,Sn,K,Bt,J,tr,X,Or,Q,Ur,vr,yr,gn,pr,Rr,$r,Tr,mr,zr,ei,Un,We,Qe,wt,St,ct,lt,pt,mt,ft,h,Va,$,ui,vi,di,fi,_i,mi,gi,hi,pi,li,ci,ga,ki,Oi,ji,Ai,Mi,bi,Si,wi,yi,Li,Ri,zi,Bi,Vi,Hi,Ui,re,ie,S,C,M,ee,ce,le,E,O,w,T,ae,oe,se,F,N,P,te,ne,I,ue,k,j,be,xe,Se,Ce,de,ge,_e,ye,Gi,Ki,Wi,Yi,Xi,Ni,Fi,Pi,Ii,va,ya,qi,Ji,bn,Cn,On,wn,Tn,En,Dn,Oa,Bn,Vn,Rn,zn,kn,An,Mn,Fn,Nn,Pn,ba,xa,Sa,Ca,wa,Ta,Ea,Da,Hn,Gn,Kn,qn,Jn,Yn,Ln,B,Et,Ct,si,qe,kt,Tt,At,jt,ka,Aa,ja,Ma,Na,Pa,Fa,Ia,La,Ra,za,Ba,ri,oi,_a,sn,lr,Pr,Yr,tn,or,jr,Kr,nn,sr,Mr,qr,on,cr,Nr,Jr,Y,Ut,ir,kr,Wr,fr,cn,Lr,Qr,Ha,Ua,Wa,Ga,Ka,Zi,Qi,$i,ea,ta,na,ra,oa,da,pa,Ae,He,Be]);return(0,he.jsxs)(A.Provider,{value:qa,children:[(0,he.jsx)(fe,{notes:q,setNotes:er,activeNoteUid:J,setActiveNoteUid:tr,isAuthenticated:H,notesSaveTimeout:xi,view:_,setView:vt,setSidebarView:yt}),(0,he.jsx)(pe,{}),(0,he.jsx)(me,{}),e]})}export{L as C,ve as S,lt as _,Rt as a,Be as b,ht as c,rt as d,ot as f,it as g,at as h,zt as i,ct as l,nt as m,qt as n,dt as o,tt as p,Jt as r,pt as s,gn as t,st as u,We as v,_e as x,ze as y};