erdbpro 3.4.7-rc.1 → 3.4.7-rc.2
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.
- package/dist/assets/{AdminRoute-DKg5du1b.js → AdminRoute-CJkSZiw6.js} +2 -2
- package/dist/assets/{Combination-BjYJgM_H.js → Combination-Eg-EHG2n.js} +1 -1
- package/dist/assets/{DataViewerModeToolbar-Dz0ZjgFr.js → DataViewerModeToolbar-hw8y9ucY.js} +1 -1
- package/dist/assets/{DbClientEditorRoute-BQ5iar5J.js → DbClientEditorRoute-DvuoS8I6.js} +1 -1
- package/dist/assets/{DiagramEditorRoute-DLG5Yn-q.js → DiagramEditorRoute-CkHj8rZ9.js} +1 -1
- package/dist/assets/{DrawingEditorRoute-D7qIQFx3.js → DrawingEditorRoute-CUbVOdhs.js} +2 -2
- package/dist/assets/{DrawingsView-CyK_2vK3.js → DrawingsView-5KEYsR53.js} +1 -1
- package/dist/assets/{ExcalidrawEditor-CSc88O1K.js → ExcalidrawEditor-DlyNls5E.js} +8 -8
- package/dist/assets/{FlowchartEditorRoute-Cz_15H-j.js → FlowchartEditorRoute-d5frrIb4.js} +1 -1
- package/dist/assets/{FlowchartView-Baya8oZO.js → FlowchartView-DhWV5o7v.js} +1 -1
- package/dist/assets/{JumpToNode-DEM4sMdJ.js → JumpToNode-C59YhkT9.js} +1 -1
- package/dist/assets/{NoteEditorRoute-Cyx11rHY.js → NoteEditorRoute-5VnZQwA8.js} +2 -2
- package/dist/assets/{NotesCompanionPane-DyP-GlLX.js → NotesCompanionPane-xXOO2m4z.js} +2 -2
- package/dist/assets/{NotesView-C6eqv0co.js → NotesView-D_BA3-Ke.js} +3 -3
- package/dist/assets/{ProjectFileTabs-DdP2JIw0.js → ProjectFileTabs-DMXL4Osh.js} +1 -1
- package/dist/assets/{TeamManagementRoute-Bh3WfxwX.js → TeamManagementRoute-BzJ2JRcr.js} +1 -1
- package/dist/assets/{TrashView-B-adK3Gm.js → TrashView-I6yTaFrF.js} +1 -1
- package/dist/assets/{UserManagementRoute-8E-QuSac.js → UserManagementRoute-BHMAtPkL.js} +1 -1
- package/dist/assets/{WorkspaceProvider-BNb-7bMb.js → WorkspaceProvider-rlRR_L6Q.js} +3 -3
- package/dist/assets/{abnfDiagram-N423BO3Z-CEkJO2-t.js → abnfDiagram-N423BO3Z-BzPn52fw.js} +1 -1
- package/dist/assets/{ar-SA-G6X2FPQ2-D90uO20O.js → ar-SA-G6X2FPQ2-BGGSS2My.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-JLv5H2DD.js → architectureDiagram-T3A2C74G-CyfG8wUo.js} +1 -1
- package/dist/assets/{az-AZ-76LH7QW2-C6GKqISA.js → az-AZ-76LH7QW2-BSE8-GGt.js} +1 -1
- package/dist/assets/{bg-BG-XCXSNQG7-n8qsW_oz.js → bg-BG-XCXSNQG7-BmGQgbRx.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-h7BEiSsr.js → blockDiagram-VBNYF7ZC-jiehAhSk.js} +1 -1
- package/dist/assets/{bn-BD-2XOGV67Q-CfGeQjVD.js → bn-BD-2XOGV67Q-Dm-3OS4_.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-eLJfKSVi.js → c4Diagram-5PPSVZJV-DK6P_nyE.js} +1 -1
- package/dist/assets/{ca-ES-6MX7JW3Y-Cy2suRny.js → ca-ES-6MX7JW3Y-CBQHelC4.js} +1 -1
- package/dist/assets/channel-CuRWDkOO.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-Cuo_hVSf.js → chunk-2GRJ4B5K-CTk-Y8CL.js} +1 -1
- package/dist/assets/{chunk-4I5QYGJK-s_vyZX1q.js → chunk-4I5QYGJK-5d4ZKctC.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H--wWIwMPr.js → chunk-5RXB4S5H-CntyfNUT.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-c1RPRxGa.js → chunk-6Q2QTUOP-D_GMW1Nd.js} +1 -1
- package/dist/assets/{chunk-7Z6QIM7H-BRn2rP9j.js → chunk-7Z6QIM7H-CubFUk1p.js} +1 -1
- package/dist/assets/{chunk-EIO257PC-GyWDMdpy.js → chunk-EIO257PC-DUKvenFe.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-Cy2HAWkG.js → chunk-GF5L2VYU-gwPQFue5.js} +1 -1
- package/dist/assets/{chunk-I66GZJ75-BtUaWKSx.js → chunk-I66GZJ75-bAAkeRO9.js} +1 -1
- package/dist/assets/{chunk-JQJVKLGR-Be-S_IyE.js → chunk-JQJVKLGR-d1Mn_ajd.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-BHwUlCtD.js → chunk-KBJHAD2P-CGVf9FHY.js} +1 -1
- package/dist/assets/{chunk-NSK5VX7P-BdBZ67Yr.js → chunk-NSK5VX7P-Dj8Gs3CB.js} +1 -1
- package/dist/assets/{chunk-QR6OTTB3-By6uhzNX.js → chunk-QR6OTTB3-BssJsr1y.js} +1 -1
- package/dist/assets/{chunk-UBXNYLIW-DXpAhsc4.js → chunk-UBXNYLIW-BKSx5qm3.js} +1 -1
- package/dist/assets/{chunk-W5SLKNZC-DQ-fo8uz.js → chunk-W5SLKNZC-ByCLk0Eu.js} +1 -1
- package/dist/assets/{chunk-WRU74C26-Bx_NZKpm.js → chunk-WRU74C26-CFW4_tXs.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-Dt1ay8jJ.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-Dt1ay8jJ.js +1 -0
- package/dist/assets/{context-menu-B-69Pc20.js → context-menu-CRWOjWbD.js} +1 -1
- package/dist/assets/{cs-CZ-2BRQDIVT-ClmRFKLy.js → cs-CZ-2BRQDIVT-zK8T3jHX.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-tWY506bQ.js → cynefinDiagram-MW4NZA55-CRK8s7c0.js} +1 -1
- package/dist/assets/{da-DK-5WZEPLOC-nTP3rOT9.js → da-DK-5WZEPLOC-qrj_rGGC.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-CLKq8-dp.js → dagre-VZM6K2ZE-BAIlj9be.js} +1 -1
- package/dist/assets/{de-DE-XR44H4JA-_1MI8Z0G.js → de-DE-XR44H4JA-D9BpIVns.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-Bf47PiFw.js → diagram-7IWD3JNH-W0wMwLKw.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-Dw7nvNz-.js → diagram-B4RE2ZJO-DRlXjXOt.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-6e8MgkN3.js → diagram-LBJQPF4R-DYLisH4F.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-CCXSZ0ay.js → diagram-Q27KOJAE-DWPaM571.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-DEkRh6-Y.js → diagram-UB23O5K3-BAz9rJDa.js} +1 -1
- package/dist/assets/{dist-RDh1a085.js → dist-WwmKWgO-.js} +4 -4
- package/dist/assets/{ebnfDiagram-BXEA7PRR-Dp713gSw.js → ebnfDiagram-BXEA7PRR-CrPI8pT9.js} +1 -1
- package/dist/assets/{el-GR-BZB4AONW-CUaM087N.js → el-GR-BZB4AONW-Hy1DcZbF.js} +1 -1
- package/dist/assets/{en-B4ZKOASM-ie9bx3Cy.js → en-B4ZKOASM-D4uW7fW6.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-ClPSMmwa.js → erDiagram-JOGREHBK-CdKxtb4i.js} +1 -1
- package/dist/assets/{erd-edge-style-_uszq66Z.js → erd-edge-style-DPquCU09.js} +1 -1
- package/dist/assets/{es-ES-U4NZUMDT-EFsIcrrw.js → es-ES-U4NZUMDT-DetrC4Fd.js} +1 -1
- package/dist/assets/{eu-ES-A7QVB2H4-B4dt5y0u.js → eu-ES-A7QVB2H4-Cu8s50HM.js} +1 -1
- package/dist/assets/{fa-IR-HGAKTJCU-Va3lV4wd.js → fa-IR-HGAKTJCU-7lqcY53X.js} +1 -1
- package/dist/assets/{fi-FI-Z5N7JZ37-C04cIYbR.js → fi-FI-Z5N7JZ37-B1S9PH67.js} +1 -1
- package/dist/assets/flowDiagram-UKHOOZJN-CwHZtdMb.js +1 -0
- package/dist/assets/{fr-FR-RHASNOE6-BIuacXN5.js → fr-FR-RHASNOE6-DDcof0vx.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-ByvWT8Pc.js → ganttDiagram-PKOTCBZU-BP0WB6V9.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-wYswkzo-.js → gitGraphDiagram-DS77QQ5N-CMp9SU7b.js} +1 -1
- package/dist/assets/{gl-ES-HMX3MZ6V-BBKBHiX9.js → gl-ES-HMX3MZ6V-BbmVFhig.js} +1 -1
- package/dist/assets/{he-IL-6SHJWFNN-V0Hr4iqd.js → he-IL-6SHJWFNN-DmoOFn0c.js} +1 -1
- package/dist/assets/{hi-IN-IWLTKZ5I-DNuLRXFF.js → hi-IN-IWLTKZ5I-CnAcrLoC.js} +1 -1
- package/dist/assets/{hu-HU-A5ZG7DT2-uYMtlm2-.js → hu-HU-A5ZG7DT2-DYbFe6m0.js} +1 -1
- package/dist/assets/{id-ID-SAP4L64H-D2SeBq4t.js → id-ID-SAP4L64H-B-VADmaj.js} +1 -1
- package/dist/assets/image-GAAHSSAO-DPT-kQul.js +1 -0
- package/dist/assets/{index-CNB7igbU.js → index-DXkZu2zv.js} +4 -4
- package/dist/assets/{infoDiagram-6WML65LV-COhoa2ub.js → infoDiagram-6WML65LV-BHtvfAkG.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-CDZrorzB.js → ishikawaDiagram-WSZJBQD7-dNBXMcqG.js} +1 -1
- package/dist/assets/{it-IT-JPQ66NNP-Cm-4_0Ni.js → it-IT-JPQ66NNP-BNs478co.js} +1 -1
- package/dist/assets/{ja-JP-DBVTYXUO-jfq0a-wZ.js → ja-JP-DBVTYXUO-DCb6XUqW.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-DF3NZdwz.js → journeyDiagram-NVQOT4AX-Q6mDR40B.js} +1 -1
- package/dist/assets/{kaa-6HZHGXH3-BMd02-ql.js → kaa-6HZHGXH3-Dl-b3xPA.js} +1 -1
- package/dist/assets/{kab-KAB-ZGHBKWFO-ClQSBiHN.js → kab-KAB-ZGHBKWFO-UYFYAen-.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-CRkOZTIO.js → kanban-definition-27J2QSJJ-7f15kCg2.js} +1 -1
- package/dist/assets/{kk-KZ-P5N5QNE5-BGkNl5JX.js → kk-KZ-P5N5QNE5-MSok32gR.js} +1 -1
- package/dist/assets/{km-KH-HSX4SM5Z-9rb2ecQk.js → km-KH-HSX4SM5Z-L7wbhqlk.js} +1 -1
- package/dist/assets/{ko-KR-MTYHY66A-DIsEe3Pe.js → ko-KR-MTYHY66A-B07xliMA.js} +1 -1
- package/dist/assets/{ku-TR-6OUDTVRD-Ds2LFIaY.js → ku-TR-6OUDTVRD-NHEYrVYW.js} +1 -1
- package/dist/assets/{line-Dbg0bucN.js → line-BnSLidP8.js} +1 -1
- package/dist/assets/{lt-LT-XHIRWOB4-DauQLrcw.js → lt-LT-XHIRWOB4-DI7Q8775.js} +1 -1
- package/dist/assets/{lv-LV-5QDEKY6T-CNADsNA9.js → lv-LV-5QDEKY6T-DjnqNeJp.js} +1 -1
- package/dist/assets/{mindmap-definition-FAOFIHXS-C-MzqmCR.js → mindmap-definition-FAOFIHXS-1di_ggq-.js} +1 -1
- package/dist/assets/{mr-IN-CRQNXWMA-CD2j-NXg.js → mr-IN-CRQNXWMA-BMVK-1mg.js} +1 -1
- package/dist/assets/{my-MM-5M5IBNSE-DWaFU9Vb.js → my-MM-5M5IBNSE-ukoeg0GV.js} +1 -1
- package/dist/assets/{nb-NO-T6EIAALU-CmgT0GHq.js → nb-NO-T6EIAALU-Bb3HL2YB.js} +1 -1
- package/dist/assets/{nl-NL-IS3SIHDZ-BamrP8iT.js → nl-NL-IS3SIHDZ-DQwW1w5x.js} +1 -1
- package/dist/assets/{nn-NO-6E72VCQL-845X1uWV.js → nn-NO-6E72VCQL-2opqAalK.js} +1 -1
- package/dist/assets/{note-importer-BRThI3ZS.js → note-importer-Bp6Qn9bq.js} +2 -2
- package/dist/assets/{oc-FR-POXYY2M6-D3swsLxL.js → oc-FR-POXYY2M6-DKWkBnbO.js} +1 -1
- package/dist/assets/{pa-IN-N4M65BXN-D-78P5Vf.js → pa-IN-N4M65BXN-BDep8j_a.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-SE2c-0Tp.js → pegDiagram-VL7TDLO6-BGjR71ha.js} +1 -1
- package/dist/assets/percentages-BXMCSKIN-BI6Vu8MT.js +1 -0
- package/dist/assets/{pieDiagram-7S7Q4E2Y-Di9Vmj3H.js → pieDiagram-7S7Q4E2Y-C-9Trc8r.js} +1 -1
- package/dist/assets/{pl-PL-T2D74RX3-EcSuyvIK.js → pl-PL-T2D74RX3-C9s1UzsB.js} +1 -1
- package/dist/assets/{pt-BR-5N22H2LF-DVSecL7J.js → pt-BR-5N22H2LF-G2tEhY1b.js} +1 -1
- package/dist/assets/{pt-PT-UZXXM6DQ-Dp-KggCG.js → pt-PT-UZXXM6DQ-CpPvSD2D.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-BzFDgOn9.js → quadrantDiagram-CIZ2JOQS-DSFXzH6K.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-Nw3Mr4QN.js → railroadDiagram-AXF67PYL-qmM8BT33.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-C63Q13F5.js → requirementDiagram-LRYGKXZP-BnbCLThr.js} +1 -1
- package/dist/assets/{ro-RO-JPDTUUEW-B1agKXz6.js → ro-RO-JPDTUUEW-Bc6egJGC.js} +1 -1
- package/dist/assets/{ru-RU-B4JR7IUQ-B0VUUrrq.js → ru-RU-B4JR7IUQ-BZrh_FBJ.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-BEfXAYXF.js → sankeyDiagram-W5VNT64P-CvNzOBoQ.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DREyBElZ.js → sequenceDiagram-SI44F4Z6-CYbDpNS1.js} +1 -1
- package/dist/assets/{si-LK-N5RQ5JYF-Coy0PC3A.js → si-LK-N5RQ5JYF-YpOmVPCo.js} +1 -1
- package/dist/assets/{sk-SK-C5VTKIMK-DjDHbJ_n.js → sk-SK-C5VTKIMK-Dlo3ixMd.js} +1 -1
- package/dist/assets/{sl-SI-NN7IZMDC-m1WkxLZ2.js → sl-SI-NN7IZMDC-BbHEnwJq.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-BGGoNW1y.js → stateDiagram-OKZ733FA-6WZ1WkCk.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-DbNmTUig.js +1 -0
- package/dist/assets/subset-shared.chunk-BPOISBmA.js +1 -0
- package/dist/assets/{subset-worker.chunk-BRKKI2c_.js → subset-worker.chunk-DDzRT732.js} +1 -1
- package/dist/assets/{sv-SE-XGPEYMSR-DS_nUKqF.js → sv-SE-XGPEYMSR-fXUTLRqy.js} +1 -1
- package/dist/assets/{swimlanes-SLNWSIFB-DEOT8_un.js → swimlanes-SLNWSIFB-CQ9ZkULM.js} +1 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CWN5KWoh.js +8 -0
- package/dist/assets/{ta-IN-2NMHFXQM-DWVLpl2P.js → ta-IN-2NMHFXQM-DknxgcFG.js} +1 -1
- package/dist/assets/{tabs-eW-l1MYt.js → tabs-C6kify7i.js} +1 -1
- package/dist/assets/{th-TH-HPSO5L25-DxnegKyK.js → th-TH-HPSO5L25-Ca_THyKj.js} +1 -1
- package/dist/assets/{timeline-definition-Z64GVDOM-eEaDYfNt.js → timeline-definition-Z64GVDOM-BWbu0ruT.js} +1 -1
- package/dist/assets/{tr-TR-DEFEU3FU-w9ANaJAi.js → tr-TR-DEFEU3FU-CqUN5QAk.js} +1 -1
- package/dist/assets/{uk-UA-QMV73CPH-iXsF0x2-.js → uk-UA-QMV73CPH-B6ltFeBg.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-COheGLz_.js → vennDiagram-T6HMQDX7-Bb06Ab1l.js} +1 -1
- package/dist/assets/{vi-VN-M7AON7JQ-B2fgTHBy.js → vi-VN-M7AON7JQ-CyGfz5zW.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-D1F0degn.js → wardleyDiagram-T6FBY63Y-uwcOguSl.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-B8HFQO9u.js → xychartDiagram-ELKLHX3M-D7iYRmHs.js} +1 -1
- package/dist/assets/{zh-CN-LNUGB5OW-iff7CJwp.js → zh-CN-LNUGB5OW-BpMunaZM.js} +1 -1
- package/dist/assets/{zh-HK-E62DVLB3-DEXPbtSO.js → zh-HK-E62DVLB3-BdPokKSI.js} +1 -1
- package/dist/assets/{zh-TW-RAJ6MFWO-C_9Tg0LT.js → zh-TW-RAJ6MFWO-C4bHwK0F.js} +1 -1
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/dist/assets/channel-D_FlloNw.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-DPbJQ5Io.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-DPbJQ5Io.js +0 -1
- package/dist/assets/flowDiagram-UKHOOZJN-BHhYrZfp.js +0 -1
- package/dist/assets/image-GAAHSSAO-C12_sjQ7.js +0 -1
- package/dist/assets/percentages-BXMCSKIN-CPZpfYHC.js +0 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-C-Dx8Sr4.js +0 -1
- package/dist/assets/subset-shared.chunk-CUIwWUTH.js +0 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-yQ7dLJDD.js +0 -8
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TrashView-
|
|
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{s as i}from"./chunk-BV7QT456-CCzugQp2.js";import"./WorkspaceProvider-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TrashView-I6yTaFrF.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/useCompositeItem-dSQJByV3.js","assets/react-dom-CGnP4YFq.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/floating-ui.utils-DrtUanoU.js","assets/utils-TcK2FSyg.js","assets/refresh-ccw-DFj0g7WT.js","assets/createLucideIcon-CyJfQrak.js","assets/trash-2-eV2xsHmQ.js","assets/table-DCsJJ7Zs.js","assets/useAuth-B8-lFzUV.js","assets/api-D87lw-98.js","assets/index-DXkZu2zv.js","assets/preload-helper-Czpn1I53.js","assets/chunk-BV7QT456-CCzugQp2.js","assets/downloadSVG-CM8RNd8w.js","assets/esm-B1WURL1q.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/with-selector-v0oZM3OS.js","assets/vanilla--C5Lp_AM.js","assets/dialog-BDJ53r24.js","assets/select-Bbn-kjXq.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/check-DcrFpa6g.js","assets/input-Cr-mF_hd.js","assets/dist-DDYEjsV2.js","assets/link-2-DBo-eQZM.js","assets/arrow-left-sRwyfx9m.js","assets/triangle-alert-Hn6Bso_Y.js","assets/wand-sparkles-QRKwIO4L.js","assets/copy-BasccFFL.js","assets/chatUtils-l06n4Zcf.js","assets/minus-DU5tWN1g.js","assets/popover-DrHvAr7i.js","assets/search-hNBtHxSg.js","assets/plus-CSlTmvRo.js","assets/card-Dy6p8t6g.js","assets/checkbox-Tsi3FADL.js","assets/note-importer-Bp6Qn9bq.js","assets/image-compression-COYPhRs3.js","assets/WorkspaceProvider-rlRR_L6Q.js","assets/dist-js-DXG5pDMi.js","assets/core-DNaw6KYU.js","assets/WorkspaceContext-O7njKDwj.js","assets/ConfirmModal-B_5qT1GL.js","assets/label-Co-it7VP.js","assets/textarea-DbECrx_E.js","assets/extends-CvVTau-c.js","assets/index-CGy_9s9_.css","assets/tabs-C6kify7i.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{s as i}from"./chunk-BV7QT456-CCzugQp2.js";import"./WorkspaceProvider-rlRR_L6Q.js";import{n as a}from"./WorkspaceContext-O7njKDwj.js";var o=e(t(),1),s=n(),c=o.lazy(()=>r(()=>import(`./TrashView-I6yTaFrF.js`).then(e=>({default:e.TrashView})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53])));function l(){let{pathname:e}=i();return e===`/trash`?(0,s.jsx)(u,{}):null}function u(){let{trashData:e,isTrashLoading:t,handleTrashRestoreProject:n,handleTrashRestoreDiagram:r,handleTrashRestoreNote:i,handleTrashRestoreDrawing:l,handleTrashRestoreFlowchart:u,handleTrashRestoreDbClient:d,handleTrashProjectPermanentDelete:f,handleTrashDiagramPermanentDelete:p,handleTrashNotePermanentDelete:m,handleTrashDrawingPermanentDelete:h,handleTrashFlowchartPermanentDelete:g,fetchTrash:_,handleTrashDbClientPermanentDelete:v}=a();return(0,s.jsx)(o.Suspense,{fallback:(0,s.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,s.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,s.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground/60 animate-pulse`,children:`Loading trash...`})]})}),children:(0,s.jsx)(c,{trashData:e,restoreProject:n,restoreDiagram:r,restoreNote:i,restoreDrawing:l,restoreFlowchart:u,restoreDbClient:d,fetchTrash:_,handleProjectPermanentDelete:f,handleDiagramPermanentDelete:p,handleNotePermanentDelete:m,handleDrawingPermanentDelete:h,handleFlowchartPermanentDelete:g,handleDbClientPermanentDelete:v,isLoading:t})})}export{l as AdminRoute};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./jsx-runtime-DSr1VPkp.js";import{F as n,I as r,P as i}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./jsx-runtime-DSr1VPkp.js";import{F as n,I as r,P as i}from"./index-DXkZu2zv.js";var a=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},o=new WeakMap,s=new WeakMap,c={},l=0,u=function(e){return e&&(e.host||u(e.parentNode))},d=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=u(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},f=function(e,t,n,r){var i=d(t,Array.isArray(e)?e:[e]);c[n]||(c[n]=new WeakMap);var a=c[n],u=[],f=new Set,p=new Set(i),m=function(e){!e||f.has(e)||(f.add(e),m(e.parentNode))};i.forEach(m);var h=function(e){!e||p.has(e)||Array.prototype.forEach.call(e.children,function(e){if(f.has(e))h(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(o.get(e)||0)+1,l=(a.get(e)||0)+1;o.set(e,c),a.set(e,l),u.push(e),c===1&&i&&s.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return h(t),f.clear(),l++,function(){u.forEach(function(e){var t=o.get(e)-1,i=a.get(e)-1;o.set(e,t),a.set(e,i),t||(s.has(e)||e.removeAttribute(r),s.delete(e)),i||e.removeAttribute(n)}),l--,l||(o=new WeakMap,o=new WeakMap,s=new WeakMap,c={})}},p=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||a(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),f(r,i,n,`aria-hidden`)):function(){return null}},m=e(t()),h=`right-scroll-bar-position`,g=`width-before-scroll-bar`,_=`with-scroll-bars-hidden`,v=`--removed-body-scroll-bar-size`;function y(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function b(e,t){var n=(0,m.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var x=typeof window<`u`?m.useLayoutEffect:m.useEffect,S=new WeakMap;function ee(e,t){var n=b(t||null,function(t){return e.forEach(function(e){return y(e,t)})});return x(function(){var t=S.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||y(e,null)}),i.forEach(function(e){r.has(e)||y(e,a)})}S.set(n,e)},[e]),n}function C(e){return e}function w(e,t){t===void 0&&(t=C);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function T(e){e===void 0&&(e={});var t=w(null);return t.options=i({async:!0,ssr:!1},e),t}var E=function(e){var t=e.sideCar,r=n(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var a=t.read();if(!a)throw Error(`Sidecar medium not found`);return m.createElement(a,i({},r))};E.isSideCarExport=!0;function te(e,t){return e.useMedium(t),E}var D=T(),O=function(){},k=m.forwardRef(function(e,t){var r=m.useRef(null),a=m.useState({onScrollCapture:O,onWheelCapture:O,onTouchMoveCapture:O}),o=a[0],s=a[1],c=e.forwardProps,l=e.children,u=e.className,d=e.removeScrollBar,f=e.enabled,p=e.shards,h=e.sideCar,g=e.noRelative,_=e.noIsolation,v=e.inert,y=e.allowPinchZoom,b=e.as,x=b===void 0?`div`:b,S=e.gapMode,C=n(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),w=h,T=ee([r,t]),E=i(i({},C),o);return m.createElement(m.Fragment,null,f&&m.createElement(w,{sideCar:D,removeScrollBar:d,shards:p,noRelative:g,noIsolation:_,inert:v,setCallbacks:s,allowPinchZoom:!!y,lockRef:r,gapMode:S}),c?m.cloneElement(m.Children.only(l),i(i({},E),{ref:T})):m.createElement(x,i({},E,{className:u,ref:T}),l))});k.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},k.classNames={fullWidth:g,zeroRight:h};var ne=function(){if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function re(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=ne();return t&&e.setAttribute(`nonce`,t),e}function A(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function j(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var M=function(){var e=0,t=null;return{add:function(n){e==0&&(t=re())&&(A(t,n),j(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},N=function(){var e=M();return function(t,n){m.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},P=function(){var e=N();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},ie={left:0,top:0,right:0,gap:0},F=function(e){return parseInt(e||``,10)||0},ae=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[F(n),F(r),F(i)]},oe=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return ie;var t=ae(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},se=P(),I=`data-scroll-locked`,ce=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
2
|
.${_} {
|
|
3
3
|
overflow: hidden ${r};
|
|
4
4
|
padding-right: ${s}px ${r};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{a as r,d as i,i as a,m as o,r as s}from"./downloadSVG-CM8RNd8w.js";import{ct as c,r as l,t as u}from"./esm-B1WURL1q.js";import{D as d,E as f,i as p,l as m,n as h,o as g,s as _,t as v}from"./dialog-BDJ53r24.js";import{x as y}from"./useCompositeItem-dSQJByV3.js";import{S as b,b as x,f as S,g as C,i as w,m as T,n as E,o as D,s as O,t as k,v as A,x as j,y as M,z as N}from"./select-Bbn-kjXq.js";import{r as P}from"./utils-TcK2FSyg.js";import{n as F}from"./dist-DDYEjsV2.js";import{_ as ee,b as I,c as L,f as R,g as z,h as B,i as V,l as te,m as ne,n as re,p as H,r as ie,t as ae,u as U,v as oe,y as se}from"./context-menu-B-69Pc20.js";import{n as ce}from"./triangle-alert-Hn6Bso_Y.js";import{t as le}from"./copy-BasccFFL.js";import{d as ue,f as de,u as fe}from"./chatUtils-l06n4Zcf.js";import{n as pe,t as me}from"./minus-DU5tWN1g.js";import{n as he,r as ge,t as _e}from"./undo-2-DSs-RD2B.js";import{l as W,n as ve,r as ye,s as be,t as xe}from"./popover-DrHvAr7i.js";import{t as Se}from"./plus-CSlTmvRo.js";import{t as Ce}from"./search-hNBtHxSg.js";import{t as we}from"./trash-2-eV2xsHmQ.js";import{n as Te,s as Ee}from"./api-D87lw-98.js";import{t as G}from"./input-Cr-mF_hd.js";import{t as K}from"./checkbox-Tsi3FADL.js";import{a as De,i as q,n as Oe,o as J,r as Y,t as ke}from"./table-DCsJJ7Zs.js";import{O as Ae,a as je,y as Me}from"./note-importer-BRThI3ZS.js";import{b as Ne,x as Pe,y as X}from"./WorkspaceProvider-BNb-7bMb.js";import{n as Fe}from"./WorkspaceContext-O7njKDwj.js";import{a as Ie,c as Le,d as Re,i as ze,l as Be,n as Ve,o as He,r as Ue,t as We}from"./ConfirmModal-B_5qT1GL.js";import{t as Z}from"./label-Co-it7VP.js";import{F as Ge,N as Ke,c as qe,n as Je,s as Ye,t as Xe}from"./textarea-DbECrx_E.js";import{B as Ze,Kn as Qe,Pn as $e,Pt as et,Qn as tt,Rt as nt,Sn as rt,Tt as it,Xn as at,_t as ot,a as st,at as ct,bn as lt,ct as ut,d as dt,dt as ft,jn as pt,l as mt,m as ht,n as gt,o as _t,r as vt,rt as yt,s as bt,sr as xt,u as St,ut as Ct,wt}from"./index-CNB7igbU.js";/* empty css */import{i as Tt,n as Et,o as Dt,r as Ot,t as kt}from"./erd-edge-style-_uszq66Z.js";import{t as At}from"./JumpToNode-DEM4sMdJ.js";var Q=e(t(),1),jt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);function Mt(e,t){return e.source===t.source&&e.target===t.target&&jt(e.sourceHandle)===jt(t.sourceHandle)&&jt(e.targetHandle)===jt(t.targetHandle)}function Nt(e,t){let n=t?.nodes||{},r=new Set(e.flatMap(e=>(e.foreign_keys||[]).map(e=>`${e.ref_table}.${e.ref_column}`))),i=e.map((e,t)=>{let i=n[e.table_name]||{};return{id:e.table_name,type:`entity`,position:{x:i.x??t%4*280+50,y:i.y??Math.floor(t/4)*220+50},data:{id:e.table_name,name:e.table_name,x:i.x??0,y:i.y??0,color:i.color??`#6b7280`,columns:(e.columns||[]).map(t=>({...Me(t,`${e.table_name}.${t.name}`),_is_fk:(e.foreign_keys||[]).some(e=>e.column===t.name),_is_ref:r.has(`${e.table_name}.${t.name}`)})),collapsed:i.collapsed??!1,hidden_columns:i.hidden_columns??[],note:i.note??``,isReadOnly:!0}}}),a=[];for(let n of e)for(let e of n.foreign_keys||[]){let r=`${n.table_name}.${e.column}->${e.ref_table}.${e.ref_column}`,i=t?.edgeHandles?.[r]||{};a.push({id:r,source:n.table_name,target:e.ref_table,sourceHandle:i.sourceHandle||`col-${n.table_name}.${e.column}-source`,targetHandle:i.targetHandle||`col-${e.ref_table}.${e.ref_column}-target`,type:`smoothstep`,data:{constraint_name:e.constraint_name}})}return{nodes:i,edges:a}}function Pt(e,t,n,r){let i=Object.fromEntries(e.map(e=>[e.id,{x:e.position.x,y:e.position.y,color:e.data.color,collapsed:e.data.collapsed??!1,hidden_columns:e.data.hidden_columns??[],note:e.data.note??``}])),a=r&&Object.fromEntries(r.map(e=>[e.id,{sourceHandle:e.sourceHandle,targetHandle:e.targetHandle}]));return{...n,nodes:i,viewport:t,...a?{edgeHandles:a}:{},_type:`production_db_positions`}}var $=n(),Ft={entity:Dt},It=({nodes:e,edges:t,setNodes:n,setEdges:d,onNodesChange:f,onEdgesChange:p,onConnect:m,onNodeClick:h,onNodeDoubleClick:g,onEdgeClick:_,onPaneClick:v,onMove:b,addEntity:x,onImportSQL:S,onAutoLayout:C,handleExportImage:w,isReadOnly:T=!1,isDbClient:E=!1,sourceConnectionId:D,undo:O,redo:k,canUndo:A,canRedo:j,takeSnapshot:M,selectedNodeId:N,onNodeDragStop:P,onMoveEnd:ee,initialViewport:I,isLoading:L,saveDiagram:R,triggerDebouncedSync:z,pendingErdDiffTrigger:B,extractColumnIdFromHandle:V,getRelationKey:te,dedupeEdgesByRelation:ne,onEdgeReconnect:re})=>{let{registerContentHandler:H,setSelectionText:ie,setActionContextData:ae,setRightPanelMode:oe}=fe(),{getViewport:se,getNodes:ce,getEdges:le,setViewport:ue}=o(),{resolvedTheme:pe}=Fe(),me=pe===`dark`?`#222`:`#ccc`,W=E,[ve,ye]=(0,Q.useState)(!1),[be,xe]=(0,Q.useState)(!1),Ce=Q.useRef(null),we=Q.useRef(!1),G=(0,Q.useCallback)((e,t)=>{let n=t.zoom<.35;n!==we.current&&(we.current=n,Ce.current?.classList.toggle(`erd-canvas-low-detail`,n)),b(e,t)},[b]),K=(0,Q.useCallback)(()=>{if(!R)return;let e=ce();e.length!==0&&R(e,le(),se()).then(()=>z?.()).catch(e=>console.error(`Error saving ERD after node drag:`,e))},[le,ce,se,R,z]),De=(0,Q.useCallback)(()=>{P?.(),R&&requestAnimationFrame(K)},[P,K,R]);Q.useEffect(()=>{if(L||!I)return;let e=requestAnimationFrame(()=>{ue(I,{duration:0})});return()=>cancelAnimationFrame(e)},[I,L,ue]);let[q,Oe]=(0,Q.useState)([]),[J,Y]=(0,Q.useState)(null),[ke,Ae]=(0,Q.useState)([]),[Ie,Le]=(0,Q.useState)(!1),Re=(0,Q.useCallback)((e,t)=>{if(e.ctrlKey||e.metaKey){e.stopPropagation(),Oe(e=>e.includes(t.id)?e.filter(e=>e!==t.id):[...e,t.id]);return}Oe([]),h(e,t)},[h]),ze=(0,Q.useCallback)(()=>{Oe([]),v()},[v]),Be=Q.useMemo(()=>q.length>0?q:N?[N]:[],[q,N]),Ve=Q.useMemo(()=>e.map(e=>{let t=Be.includes(e.id);return!!e.selected===t?e:{...e,selected:t}}),[e,Be]),He=Q.useMemo(()=>J?J.diffNodes.map(e=>({...e,data:{...e.data,isDiffMode:!0}})):[],[J]),Ue=Q.useMemo(()=>kt(t,Be),[t,Be]),We=Q.useMemo(()=>J?kt(J.diffEdges):[],[J]),Z=(0,Q.useCallback)(e=>{let t=e.filter(e=>e.type!==`select`);t.length!==0&&f(t)},[f]),Ge=Q.useRef(e),Ke=Q.useRef(t),qe=Q.useRef(N),Je=Q.useRef(Be);Ge.current=e,Ke.current=t,qe.current=N,Je.current=Be,Q.useEffect(()=>{if(Be.length>0){let e=Be.map(e=>Ge.current.find(t=>t.id===e)).filter(e=>!!e);if(e.length===0)return;let t=e.map(e=>`${e.data.name||e.data.label||e.id} (${(e.data.columns||[]).map(e=>`${e.name}: ${e.type}${e.max_length?`(${e.max_length})`:``}${e.numeric_precision?`(${e.numeric_precision}${e.numeric_scale!==null&&e.numeric_scale!==void 0?`,${e.numeric_scale}`:``})`:``}${e.is_pk?` PK`:``}${e.is_nullable?` NULL`:``}${e.comment?` -- ${e.comment}`:``}`).join(`, `)})`).join(`; `);ie(`Tables: ${t}`)}else ie(null)},[Be,ie]),Q.useEffect(()=>{let e=N?Ge.current.find(e=>e.id===N)??null:null,t=Be.map(e=>Ge.current.find(t=>t.id===e)).filter(e=>!!e);ae({nodes:Ge.current,edges:Ke.current,selectedNode:e,multiSelectedNodes:t})},[N,Be,ae]);let Ye=Q.useRef(M);Ye.current=M;let Xe=(0,Q.useCallback)((e,t,n,r,i={})=>{let a=Tt(e,t,n,r),o=i.source||`proposal`;if(a.changes.length===0){Y(null),F.success(o.startsWith(`repository`)?`Repository schema matches the comparison source`:`No schema changes found`);return}Ae(a.changes.map(e=>e.id)),Y({originalNodes:e,originalEdges:t,proposedNodes:n,proposedEdges:r,diffNodes:a.nodes,diffEdges:a.edges,diffResult:a,source:o,version:i.version,sourceLabel:i.sourceLabel,commit:i.commit,dbmlSource:i.dbmlSource}),Le(o!==`proposal`)},[]);Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){Y(e=>e?.source===`history`?null:e);return}Xe(Ge.current,Ke.current,t.nodes,t.edges,{source:`history`,version:t.version})};return window.addEventListener(ht,e),()=>window.removeEventListener(ht,e)},[Xe]),Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){Y(e=>e?.source.startsWith(`repository`)?null:e);return}Xe(t.originalNodes||Ge.current,t.originalEdges||Ke.current,t.proposedNodes,t.proposedEdges,{source:t.canApply?`repository`:`repository-compare`,sourceLabel:t.sourceLabel,commit:t.commit,dbmlSource:t.dbmlSource})};return window.addEventListener(dt,e),()=>window.removeEventListener(dt,e)},[Xe]);let Ze=(0,Q.useCallback)(async()=>{if(D){ye(!0);try{let e=await Te(`/api/catalogs/${D}/schema`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({error:`Failed to sync schema`}));F.error(t.error||`Failed to sync schema`);return}let t=(await e.json()).schema||[],n=new Map,r=t.map((e,t)=>{let r=crypto.randomUUID();return n.set(e.table_name,r),{id:r,type:`entity`,position:{x:t%4*280+50,y:Math.floor(t/4)*200+50},data:{id:r,name:e.table_name,x:t%4*280+50,y:Math.floor(t/4)*200+50,color:`#6b7280`,columns:(e.columns||[]).map(e=>Me(e,crypto.randomUUID()))}}}),i=new Map;r.forEach(e=>{e.data.columns.forEach(t=>{i.set(`${e.data.name}.${t.name}`,t.id)})});let a=[];t.forEach(e=>{let t=n.get(e.table_name);t&&(e.foreign_keys||[]).forEach(r=>{let o=n.get(r.ref_table);if(!o)return;let s=i.get(`${e.table_name}.${r.column}`),c=i.get(`${r.ref_table}.${r.ref_column}`);!s||!c||a.some(e=>e.source===t&&e.target===o&&e.sourceHandle===`col-${s}-source`&&e.targetHandle===`col-${c}-target`)||a.push({id:crypto.randomUUID(),source:t,target:o,sourceHandle:`col-${s}-source`,targetHandle:`col-${c}-target`,type:`smoothstep`})})}),Xe(Ge.current,Ke.current,r,a),F.success(`Fetched ${t.length} tables from production DB`)}catch(e){F.error(e.message||`Failed to sync schema`)}finally{ye(!1)}}},[D,Xe]),Qe=(0,Q.useCallback)(()=>{Y(null),J?.source===`history`?(oe(`closed`),F.info(`Version preview closed`)):J?.source.startsWith(`repository`)?F.info(`Repository preview closed`):F.info(`AI schema update rejected`)},[J?.source,oe]),et=(0,Q.useCallback)(()=>{if(!J)return;let{originalNodes:e,originalEdges:t,proposedNodes:r,proposedEdges:i,diffResult:a}=J,{nodes:o,edges:s}=Ot(e,t,r,i,a,ke);if(Ye.current?.(Ge.current,Ke.current),n(o),d(s),Y(null),F.success(J.source===`repository`?`Repository schema merged successfully`:`AI changes merged successfully!`),R){let e=J.source===`repository`?ke.length===a.changes.length&&J.dbmlSource?J.dbmlSource:je(o,s):void 0,t=e?{dbmlSource:e}:void 0;R(o,s,se(),t).then(()=>{z?.(),J.source===`repository`&&window.dispatchEvent(new CustomEvent(St,{detail:{dbmlSource:e,commit:J.commit}}))}).catch(e=>console.error(`Error saving after merge:`,e))}},[J,ke,n,d,R,z,se]),tt=Q.useMemo(()=>({type:`smoothstep`,animated:!1,reconnectable:!T||W,style:{stroke:`var(--edge-color)`,strokeWidth:2},markerEnd:{type:l.Arrow,color:`var(--edge-color)`,width:10,height:10}}),[W,T]);return Q.useEffect(()=>H((e,t,n)=>{if(!e)return;let r=null,i={selectedNodeId:qe.current,selectedNodeIds:Je.current};try{n?r=U(Ge.current,Ke.current,n,e,i):(r=U(Ge.current,Ke.current,`erd-generate-sql`,e,i),r||=U(Ge.current,Ke.current,`erd-edit-column`,e,i))}catch(e){F.error(`Invalid ERD schema in AI response`,{description:e?.message||`Fix the DBML/SQL block and try Append again.`});return}r?Xe(Ge.current,Ke.current,r.nodes,r.edges):F.error(`No valid changes found in response`)},[`append`]),[H,Xe]),Q.useEffect(()=>{let e=localStorage.getItem(`pending_create_erd_schema`)||localStorage.getItem(`pending_create_erd_ddl`);if(e){localStorage.removeItem(`pending_create_erd_schema`),localStorage.removeItem(`pending_create_erd_ddl`);let t=U(Ge.current,Ke.current,`erd-generate-sql`,e);t&&(Ge.current.length===0?(Ye.current?.([],[]),n(t.nodes),d(t.edges),R&&R(t.nodes,t.edges,{x:0,y:0,zoom:1}).then(()=>{z?.()}).catch(e=>{console.error(`Error saving generated diagram:`,e)}),F.success(`Applied generated schema to new diagram`)):Xe(Ge.current,Ke.current,t.nodes,t.edges))}},[n,d,Xe,R,z]),Q.useEffect(()=>{let t=localStorage.getItem(`pending_update_erd_schema`)||localStorage.getItem(`pending_update_erd_ddl`);if(!t||e.length===0)return;localStorage.removeItem(`pending_update_erd_schema`),localStorage.removeItem(`pending_update_erd_ddl`);let n=U(Ge.current,Ke.current,`erd-generate-sql`,t);n?(Xe(Ge.current,Ke.current,n.nodes,n.edges),F.info(`Review the schema changes and merge when ready`)):F.error(`Could not parse the schema for diff`)},[e,Xe,B]),(0,$.jsxs)(`div`,{className:`flex-1 relative flex flex-col overflow-hidden border rounded-xl bg-muted/20`,style:{contain:`paint layout`},children:[T&&W&&(0,$.jsx)(`div`,{className:`absolute bottom-4 inset-x-0 z-20 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2 px-4 py-2 bg-amber-500/10 border border-amber-500/30 rounded-lg pointer-events-auto text-sm text-amber-700 dark:text-amber-400 shadow-lg`,children:[(0,$.jsx)(pt,{className:`h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:`Read-only — imported from production database. Switch to desktop app to modify.`})]})}),!J&&(0,$.jsx)(`div`,{className:`absolute top-6 inset-x-0 z-10 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 p-1.5 bg-background/95 backdrop-blur-md border border-border/50 rounded-2xl shadow-2xl pointer-events-auto max-w-[95vw] overflow-x-auto no-scrollbar`,children:[(0,$.jsx)(At,{nodes:e,label:`Table`}),!T&&(0,$.jsx)(`div`,{className:`w-px h-6 bg-border mx-0.5`}),!T&&(0,$.jsxs)(y,{onClick:x,size:`sm`,className:`h-9 px-3 sm:px-4 font-bold shadow-lg shadow-primary/20 cursor-pointer`,children:[(0,$.jsx)(Se,{className:`w-4 h-4 sm:mr-2`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Add Table`})]}),!T&&(0,$.jsxs)(y,{onClick:S,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(ot,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Import SQL`})]}),!W&&(0,$.jsxs)(y,{onClick:()=>oe(`dbml`),variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)($e,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`DBML`})]}),!T&&!W&&Ee()&&(0,$.jsxs)(y,{onClick:()=>oe(`repository`),variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(lt,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Repository`})]}),(0,$.jsxs)(y,{onClick:C,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(ge,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Auto Layout`})]}),W&&(0,$.jsxs)(y,{onClick:Ze,variant:`outline`,size:`sm`,className:`h-9 px-3 border-amber-500/50 hover:bg-amber-500/10 bg-amber-500/5 text-amber-600 dark:text-amber-400 text-xs font-semibold cursor-pointer`,disabled:ve,children:[(0,$.jsx)(nt,{className:`w-3.5 h-3.5 sm:mr-1.5 ${ve?`animate-spin`:``}`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:ve?`Syncing...`:`Sync`})]}),W&&(0,$.jsxs)(y,{onClick:w,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,title:`Export SVG`,children:[(0,$.jsx)(de,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Export SVG`})]}),!T&&(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5 ml-auto`,children:[(0,$.jsx)(y,{variant:`ghost`,size:`icon`,onClick:O,disabled:!A,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Undo (Ctrl+Z)`,children:(0,$.jsx)(_e,{className:`w-4 h-4`})}),(0,$.jsx)(y,{variant:`ghost`,size:`icon`,onClick:k,disabled:!j,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Redo (Ctrl+Y)`,children:(0,$.jsx)(he,{className:`w-4 h-4`})})]})]})}),L&&(0,$.jsx)(`div`,{className:`absolute inset-0 z-20 flex items-center justify-center bg-background/60 backdrop-blur-[1px] transition-opacity duration-150`,children:(0,$.jsx)(`div`,{className:`w-5 h-5 border-2 border-primary/30 border-t-primary rounded-full animate-spin`})}),(0,$.jsx)(`div`,{ref:Ce,className:`flex-1`,children:(0,$.jsxs)(i,{nodes:J?He:Ve,edges:J?We:Ue,onNodesChange:Z,onEdgesChange:p,onConnect:m,onReconnectStart:()=>{W&&xe(!0)},onReconnectEnd:()=>xe(!1),onReconnect:(n,r)=>{if(J||!r.sourceHandle||!r.targetHandle)return;if(W){if(!Mt(n,r)){F.info(`Only the connector position can be changed`);return}let e=c(n,r,t);d(e),re?.(e);return}if(T)return;let i=X(e,t),a=i.nodesById.get(r.source),o=i.nodesById.get(r.target);if(a&&o){let e=String(r.sourceHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),t=String(r.targetHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),s=i.columnsByNodeAndId.get(Ne(a.id,e)),c=i.columnsByNodeAndId.get(Ne(o.id,t));if(s&&c&&s.type!==c.type){F.error(`Type Mismatch`,{description:`Cannot reconnect ${s.type} to ${c.type}`});return}if(V&&te){let e=V(r.sourceHandle),t=V(r.targetHandle);if(e&&t){let a=s?.name?.toLowerCase(),o=c?.name?.toLowerCase(),l=a?`${r.source}:${a}`:null,u=o?`${r.target}:${o}`:null,d=`${[r.source,r.target].sort().join(`:`)}:${[e,t].sort().join(`:`)}`,f=i.edgesByRelationKey.get(d)?.some(e=>e.id!==n.id)??!1,p=l&&u?[l,u].sort().join(`::`):null,m=p?i.edgesByRelationName.get(p)?.some(e=>e.id!==n.id)??!1:!1;if(f||m){F.info(`Relation already exists`);return}}}if(V&&s?.name){let e=i.edgesBySourceColumnName.get(Pe(a.data.name,s.name))?.find(e=>e.id!==n.id);if(e){let t=i.nodesById.get(e.target);F.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}}}M?.(e,t);let s=c(n,r,t);d(ne?ne(s):s)},nodeTypes:Ft,onNodeClick:Re,onNodeDoubleClick:g,onEdgeClick:_,onPaneClick:ze,onMove:G,colorMode:pe,onlyRenderVisibleElements:!0,nodesDraggable:!J&&(!T||W),nodesConnectable:!J&&(!T||W&&be),elementsSelectable:!J&&(!T||W),edgesReconnectable:!J&&(!T||W),onNodeDragStop:De,onMoveEnd:ee,minZoom:.1,maxZoom:2.5,defaultEdgeOptions:tt,defaultViewport:I,connectionLineType:u.SmoothStep,connectionLineStyle:tt.style,deleteKeyCode:null,children:[(0,$.jsx)(s,{variant:a.Lines,gap:50,size:1,color:me}),(0,$.jsx)(r,{position:`bottom-left`,showInteractive:!1})]})}),J&&(0,$.jsx)(Et,{diff:J.diffResult,approvedIds:ke,showChecklist:Ie,label:J.source===`history`?`Version ${J.version} Preview`:J.source===`repository-compare`?`Git Comparison · ${J.sourceLabel}`:J.source===`repository`?`Repository Schema · ${J.sourceLabel}`:void 0,rejectLabel:J.source===`proposal`?`Reject All`:`Close Preview`,canMerge:J.source!==`history`&&J.source!==`repository-compare`,selectable:J.source!==`history`&&J.source!==`repository-compare`,checklistTitle:J.source===`history`?`Changes in this version:`:`Select changes to merge:`,onApprovedIdsChange:Ae,onShowChecklistChange:Le,onReject:Qe,onMerge:et})]})};function Lt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.position?.x!==i.position?.x||r.position?.y!==i.position?.y||r.selected!==i.selected||r.data?.name!==i.data?.name||r.data?.color!==i.data?.color)return!1;let a=r.data?.columns,o=i.data?.columns;if(!a!=!o||a&&o&&a.length!==o.length)return!1;if(a&&o)for(let e=0;e<a.length;e++){let t=a[e],n=o[e];if(t.id!==n.id||t.name!==n.name||t.type!==n.type||t.sort_order!==n.sort_order||t.is_pk!==n.is_pk||t.is_nullable!==n.is_nullable||t.comment!==n.comment||t.max_length!==n.max_length||t.numeric_precision!==n.numeric_precision||t.numeric_scale!==n.numeric_scale)return!1}}return!0}function Rt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.source!==i.source||r.target!==i.target||r.sourceHandle!==i.sourceHandle||r.targetHandle!==i.targetHandle||r.label!==i.label||r.selected!==i.selected)return!1}return!0}var zt=Q.memo(It,(e,t)=>{let n=e.isLoading!==t.isLoading,r=t.nodes.length>0,i=e.nodes.length===0,a=n&&r&&!i,o=e.initialViewport?.x===t.initialViewport?.x&&e.initialViewport?.y===t.initialViewport?.y&&e.initialViewport?.zoom===t.initialViewport?.zoom;return Lt(e.nodes,t.nodes)&&Rt(e.edges,t.edges)&&(a||e.isLoading===t.isLoading)&&e.isReadOnly===t.isReadOnly&&o&&e.selectedNodeId===t.selectedNodeId&&e.canUndo===t.canUndo&&e.canRedo===t.canRedo&&e.onMoveEnd===t.onMoveEnd&&e.pendingErdDiffTrigger===t.pendingErdDiffTrigger&&e.extractColumnIdFromHandle===t.extractColumnIdFromHandle&&e.getRelationKey===t.getRelationKey&&e.dedupeEdgesByRelation===t.dedupeEdgesByRelation});function Bt(e,t){let[n,r]=(0,Q.useState)([]),[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)([]),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(null),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)({environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),[b,x]=(0,Q.useState)(1),[S,C]=(0,Q.useState)(!1),[w,T]=(0,Q.useState)(!1),[E,D]=(0,Q.useState)(null),O=`__new_table__`,k=(0,Q.useRef)(null),A=e?st(e):null,j=(0,Q.useRef)([]),M=(0,Q.useRef)(null),N=(0,Q.useRef)([]),P=(0,Q.useRef)({}),F=(0,Q.useRef)({}),ee=(0,Q.useRef)(null),I=(0,Q.useRef)(!1),L=t?`${gt}${t}`:null,R=(t,n,r,i)=>JSON.stringify([e,t,n,r,i]),z=(0,Q.useCallback)(()=>{A?.clear()},[A]),B=(0,Q.useCallback)(async(t=!1)=>{if(!e)return;let n=!t&&_t(e);if(n){r(n.schema||[]),_(n.dbType||null),y(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),C(!1),D(null);return}C(!0),D(null);try{let t=await Te(`/api/catalogs/${e}/schema`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error||`Failed to fetch tables`);mt(e,n),r(n.schema||[]),_(n.dbType||null),y(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4})}catch(e){D(e.message)}finally{C(!1)}},[e]);(0,Q.useEffect)(()=>{N.current=c},[c]),(0,Q.useEffect)(()=>()=>k.current?.abort(),[]);let V=(0,Q.useCallback)(async(t,n=1,r=j.current,i=M.current)=>{if(!e)return;let a=R(t,n,r,i),o=A?.get(a);if(j.current=r,d(r),M.current=i,p(i),h(o||null),x(n),k.current?.abort(),o){P.current[t]=n,T(!1),D(null);return}let s=new AbortController;k.current=s,T(!0),D(null);try{let o=await Te(`/api/catalogs/${e}/records`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,page:n,pageSize:50,filters:r,sort:i}),signal:s.signal}),c=await o.json();if(!o.ok)throw Error(c.error||`Failed to fetch records`);if(k.current!==s)return;P.current[t]=n,A?.set(a,c),A&&A.size>20&&A.delete(A.keys().next().value),h(c),x(n)}catch(e){if(e.name===`AbortError`)return;D(e.message)}finally{k.current===s&&T(!1)}},[e,A]),te=(0,Q.useCallback)(e=>{e&&(F.current[e]={filters:N.current,appliedFilters:j.current,sort:M.current})},[]),ne=(0,Q.useCallback)(e=>{let t=F.current[e]||{filters:[],appliedFilters:[],sort:null};return l(t.filters),j.current=t.appliedFilters,d(t.appliedFilters),M.current=t.sort,p(t.sort),t},[]);(0,Q.useEffect)(()=>{if(!L)return;let e=[],t=null,n={},r={};try{let i=JSON.parse(sessionStorage.getItem(L)||`{}`);e=Array.isArray(i.openTabs)?i.openTabs.filter(e=>e?.name):[],t=typeof i.activeTable==`string`?i.activeTable:null,i.pageByTable&&typeof i.pageByTable==`object`&&(n=Object.fromEntries(Object.entries(i.pageByTable).filter(([,e])=>Number.isInteger(e)&&Number(e)>0).map(([e,t])=>[e,Number(t)]))),i.tableState&&typeof i.tableState==`object`&&(r=Object.fromEntries(Object.entries(i.tableState).filter(([,e])=>Array.isArray(e?.filters)&&Array.isArray(e?.appliedFilters)).map(([e,t])=>[e,{filters:t.filters,appliedFilters:t.appliedFilters,sort:t.sort||null}])))}catch{}k.current?.abort(),k.current=null,I.current=!0,ee.current=L,s(e),a(t),P.current=n,F.current=r;let i=t?r[t]:null;l(i?.filters||[]),d(i?.appliedFilters||[]),j.current=i?.appliedFilters||[],M.current=i?.sort||null,p(i?.sort||null),h(null),x(1);let o=t&&n[t]||1,c=null;return t&&t!==O&&(x(o),c=setTimeout(()=>V(t,o,i?.appliedFilters||[],i?.sort||null))),()=>{c&&clearTimeout(c)}},[L,V]),(0,Q.useEffect)(()=>{if(!(!L||ee.current!==L)){if(I.current){I.current=!1;return}try{i&&(F.current[i]={filters:c,appliedFilters:u,sort:f}),sessionStorage.setItem(L,JSON.stringify({openTabs:o,activeTable:i,pageByTable:P.current,tableState:F.current}))}catch{}}},[L,o,i,b,c,u,f]);let re=(0,Q.useCallback)(()=>{te(i),s(e=>e.some(e=>e.name===O)?e:[...e,{name:O,pinned:!0,label:`New table`}]),a(O)},[i,te]),H=(0,Q.useCallback)(e=>{if(e===O)return re();te(i);let t=o.some(t=>t.name===e)?P.current[e]??1:1;s(t=>{if(t.some(t=>t.name===e))return t;let n=t.findIndex(e=>!e.pinned);if(n===-1)return[...t,{name:e,pinned:!1}];let r=[...t];return r[n]={name:e,pinned:!1},r}),a(e);let n=ne(e);x(t),V(e,t,n.appliedFilters,n.sort)},[i,V,re,o,ne,te]),ie=(0,Q.useCallback)(e=>{s(t=>t.map(t=>t.name===e?{...t,pinned:!0}:t))},[]),ae=(0,Q.useCallback)(e=>{let t=o.filter(t=>t.name!==e);if(delete P.current[e],delete F.current[e],s(t),i!==e)return;let n=t[t.length-1]?.name??null,r=n?P.current[n]??1:1;a(n);let c=n?ne(n):{appliedFilters:[],sort:null};n||(l([]),d([]),j.current=[],M.current=null,p(null)),x(r),n&&n!==O&&V(n,r,c.appliedFilters,c.sort)},[i,o,V,ne]),U=(0,Q.useCallback)(()=>{if(!i||!m)return;let e=b+1;V(i,e)},[i,m,b,V]),oe=(0,Q.useCallback)(()=>{if(!i||b<=1)return;let e=b-1;V(i,e)},[i,b,V]),se=m?Math.ceil(m.total/(m.pageSize||50)):0,ce=(0,Q.useCallback)((e=``)=>{l(t=>{let n=[...t,bt(e)];return N.current=n,n})},[]),le=(0,Q.useCallback)(e=>{l(t=>{let n=t.filter(t=>t.id!==e);return N.current=n,n})},[]),ue=(0,Q.useCallback)((e,t)=>{l(n=>{let r=n.map(n=>n.id===e?{...n,...t}:n);return N.current=r,r})},[]),de=(0,Q.useCallback)((e=N.current)=>{i&&(ie(i),V(i,1,e))},[i,V,ie]),fe=(0,Q.useCallback)(e=>{i&&(ie(i),V(i,1,[{...e,enabled:!0}]))},[i,V,ie]),pe=(0,Q.useCallback)((e,t,n)=>{let r=[bt(t)];r[0].operator=`=`,r[0].value=String(n),s(t=>t.some(t=>t.name===e)?t.map(t=>t.name===e?{...t,pinned:!0}:t):[...t,{name:e,pinned:!0}]),te(i),a(e),l(r),j.current=r,d(r),M.current=null,p(null),x(1),V(e,1,r)},[i,V,te]),me=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await Te(`/api/catalogs/${e}/records`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,key:n,values:r})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to update record`);return z(),i===t&&V(t,P.current[t]??b),o},[i,z,e,V,b]),he=(0,Q.useCallback)(async(t,n)=>{if(!(!e||n.length===0)){for(let r of n){let n=await Te(`/api/catalogs/${e}/records`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,key:r.key,values:r.values})}),i=await n.json();if(!n.ok)throw Error(i.error||`Failed to update record`)}z(),i===t&&V(t,P.current[t]??b)}},[i,z,e,V,b]),ge=(0,Q.useCallback)(async(t,n)=>{if(!e)return;let r=await Te(`/api/catalogs/${e}/records/create`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,values:n})}),a=await r.json();if(!r.ok)throw Error(a.error||`Failed to create record`);return z(),i===t&&V(t,P.current[t]??b),a},[i,z,e,V,b]),_e=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await Te(`/api/catalogs/${e}/records`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(Array.isArray(n)?{table:t,keys:n,confirmation:r}:{table:t,key:n,confirmation:r})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to delete record`);return z(),i===t&&V(t,P.current[t]??b),o},[i,z,e,V,b]),W=(0,Q.useCallback)(async t=>{if(!e)return;let n=await Te(`/api/catalogs/${e}/structure`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t.deleteTables?.[0]||t.truncateTables?.[0]||t.cloneTable?.source||`__table_action__`,...t})}),r=await n.json();if(!n.ok)throw Error(r.error||`Failed to update tables`);return z(),vt(e),await B(),i&&t.truncateTables?.includes(i)&&V(i,1),r},[i,z,e,V,B]);return{tables:n,activeTable:i,openTabs:o,filters:c,appliedFilters:u,sort:f,records:m,dbType:g,connectionSecurity:v,page:b,totalPages:se,isLoadingTables:S,isLoadingRecords:w,error:E,fetchTables:B,selectTable:H,openNewTableTab:re,pinTable:ie,closeTable:ae,addFilter:ce,removeFilter:le,updateFilter:ue,applyFilter:fe,applyFilters:de,openRelatedRecord:pe,createRecord:ge,deleteRecord:_e,deleteTables:(0,Q.useCallback)(async(t,n)=>{if(!e||t.length===0)return;let r=await W({deleteTables:t,...n});z();let c=new Set(t);if(s(e=>e.filter(e=>!c.has(e.name))),t.forEach(e=>{delete P.current[e],delete F.current[e]}),i&&c.has(i)){let e=o.find(e=>!c.has(e.name))?.name??null;a(e),h(null),l([]),d([]),j.current=[],M.current=null,p(null),e&&V(e,P.current[e]??1)}return r},[i,z,e,V,W,o]),mutateTables:W,updateRecord:me,updateRecords:he,updateStructure:(0,Q.useCallback)(async t=>{let n=i||(t.createTable?`__new__`:null);if(!e||!n)return;let r=await Te(`/api/catalogs/${e}/structure`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:n,...t})}),o=await r.json();if(!r.ok)throw Error(o.error||`Failed to update structure`);z(),vt(e);let c=t.createTable?.name||t.tableName||i;return a(c),s(e=>e.some(e=>e.name===c)?e.map(e=>e.name===i?{...e,name:c,pinned:!0}:e):[...e,{name:c,pinned:!0}]),P.current[c]=i?P.current[i]??b:1,i&&c!==i&&delete P.current[i],await B(),V(c,P.current[c]??b),o},[i,z,e,V,B,b]),refreshAll:(0,Q.useCallback)(async()=>{z(),e&&vt(e),await B(),i&&i!==O&&V(i,P.current[i]??b)},[i,z,e,V,B,b]),clearFilters:(0,Q.useCallback)(()=>{N.current=[],l([]),j.current=[],d([]),i&&V(i,1,[])},[i,V]),toggleSort:(0,Q.useCallback)(e=>{if(!i)return;let t=M.current,n=t?.column===e?t.direction===`asc`?{column:e,direction:`desc`}:null:{column:e,direction:`asc`};V(i,1,j.current,n)},[i,V]),nextPage:U,prevPage:oe}}var Vt=[`=`,`!=`,`<>`,`>`,`>=`,`<`,`<=`,`LIKE`,`NOT LIKE`,`CONTAINS`,`NOT CONTAINS`,`IN`,`NOT IN`,`BETWEEN`,`NOT BETWEEN`,`IS`,`IS NOT`];function Ht(e){if(e==null)return`Unavailable`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10?1:2)} ${t[r]}`}function Ut(e){return e===null?`NULL`:e===void 0?``:typeof e==`object`?JSON.stringify(e):String(e)}function Wt(e){return e==null?``:typeof e==`object`?JSON.stringify(e):String(e)}function Gt(e){if(Array.isArray(e))return e.map(String);let t=String(e||``).match(/^(?:enum|set)\((.*)\)$/i);return t?[...t[1].matchAll(/'((?:''|[^'])*)'/g)].map(e=>e[1].replace(/''/g,`'`)):[]}function Kt(e){let t=t=>e.get(t),n=e=>String(t(e)?.type||``).toLowerCase(),r=e=>String(t(e)?.full_type||t(e)?.enum_values||``).toLowerCase(),i=e=>/bool/.test(n(e))||/^tinyint\(1\)/.test(r(e)),a=e=>!i(e)&&/int|decimal|numeric|float|double|real|serial|money/.test(n(e)),o=e=>/date/.test(n(e))&&!/time/.test(n(e)),s=e=>/timestamp|datetime/.test(n(e)),c=e=>/text|json|xml/.test(n(e)),l=e=>Gt(t(e)?.enum_values);return{columnType:n,isBooleanColumn:i,isNumericColumn:a,isDateColumn:o,isDateTimeColumn:s,isLongColumn:c,enumValues:l,isEnumColumn:e=>l(e).length>0,isInsertableColumn:e=>{let n=t(e),r=String(n?.extra||``).toLowerCase(),i=String(n?.column_default||``).toLowerCase();return!n?.is_generated&&!(n?.is_pk&&(r.includes(`auto_increment`)||i.includes(`nextval`)||i.includes(`autoincrement`)))},isReadOnlyColumn:(e,n=!1)=>{let r=t(e);return!!(r?.is_pk&&!n||r?.is_generated)}}}function qt(e){return String(e||``).split(/[T ]/)[0]||``}function Jt(e){let t=String(e||``).match(/[T ](\d{2}:\d{2}(?::\d{2})?)/);return t?.[1].length===5?`${t[1]}:00`:t?.[1]||`00:00:00`}function Yt(e){let t=qt(e);return t?`${t} ${Jt(e)}`:``}function Xt(e,t,n){return t===null?`NULL`:n.isDateTimeColumn(e)?Yt(t):n.isDateColumn(e)?qt(t):Ut(t)}function Zt(e,t,n){return n.isBooleanColumn(e)?t==null||t===``?``:t===!0||t===1||t===`1`?`1`:`0`:n.isDateTimeColumn(e)?Yt(t):n.isDateColumn(e)?qt(t):Wt(t)}function Qt(e,t,n){if(n.isBooleanColumn(e))return t===``?null:Number(t);if(n.isDateTimeColumn(e))return String(t||``).replace(`T`,` `);if(n.isDateColumn(e))return qt(t);if(n.isNumericColumn(e)&&t!==``)return Number(t);if(/json/.test(n.columnType(e))&&t!==``)try{return JSON.parse(t)}catch{}return t}function $t(e){let[t]=String(e||``).split(/[T ]/),[n,r,i]=t.split(`-`).map(Number);if(!(!n||!r||!i))return new Date(n,r-1,i)}function en(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function tn({activeTable:e,columnHelpers:t,primaryKeyColumns:n,updateRecords:r}){let[i,a]=(0,Q.useState)({}),o=Object.keys(i).length,s=(0,Q.useCallback)((e,r,i)=>{if(n.length===0||t.isReadOnlyColumn(r))return;let o=JSON.stringify(n.map(t=>e[t])),s=Object.fromEntries(n.map(t=>[t,e[t]]));a(e=>({...e,[`${o}:${r}`]:{rowKey:o,column:r,key:s,value:i}}))},[t,n]),c=(0,Q.useCallback)(async()=>{if(!e||o===0)return;let n=new Map;Object.values(i).forEach(e=>{let r=n.get(e.rowKey)||{key:e.key,values:{}};r.values[e.column]=e.value===null?null:Qt(e.column,e.value,t),n.set(e.rowKey,r)});try{await r(e,[...n.values()]),a({}),F.success(`${o} cell${o===1?``:`s`} updated`)}catch(e){F.error(e.message||`Failed to update records`)}},[e,t,o,i,r]);return{clear:(0,Q.useCallback)(()=>a({}),[]),count:o,draftCell:s,drafts:i,save:c}}function nn({activeTable:e,columnHelpers:t,createRecord:n,deleteRecord:r,primaryKeyColumns:i,records:a,updateRecord:o}){let[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)({}),[p,m]=(0,Q.useState)(null),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)(!1),[y,b]=(0,Q.useState)([]),x=(0,Q.useMemo)(()=>a?.columns?.filter(e=>t.isInsertableColumn(e))||[],[t,a]),S=(0,Q.useCallback)(e=>JSON.stringify(i.map(t=>e[t])),[i]),C=(0,Q.useMemo)(()=>new Set(y.map(S)),[S,y]),w=(0,Q.useMemo)(()=>h?x.some(e=>d[e]!==``):!l||!a?!1:a.columns.some(e=>(d[e]??``)!==Zt(e,l[e],t)),[t,d,x,h,a,l]),T=(0,Q.useMemo)(()=>!l||!a?{}:Object.fromEntries(a.columns.filter(e=>(d[e]??``)!==Zt(e,l[e],t)).map(e=>[e,Qt(e,d[e]??``,t)])),[t,d,a,l]),E=(0,Q.useCallback)(e=>{g(!1),u(e)},[]),D=(0,Q.useCallback)(()=>{if(!l||!a){f({});return}f(Object.fromEntries(a.columns.map(e=>[e,Zt(e,l[e],t)])))},[t,a,l]),O=(0,Q.useCallback)(()=>{a&&(u(null),g(!0),f(Object.fromEntries(x.map(e=>[e,``]))),c(!0))},[x,a]),k=(0,Q.useCallback)(()=>{g(!1),f({}),c(!1)},[]),A=(0,Q.useCallback)(async()=>{if(!e||!l||!a)return;let t=Object.fromEntries(i.map(e=>[e,l[e]]));if(i.length!==0&&Object.keys(T).length!==0){v(!0);try{await o(e,t,T),F.success(`Record updated`),u(null),f({}),c(!1)}catch(e){F.error(e.message||`Failed to update record`)}finally{v(!1)}}},[e,T,i,a,l,o]),j=(0,Q.useCallback)(async()=>{if(!e||!a)return;let r=Object.fromEntries(x.filter(e=>d[e]!==``).map(e=>[e,Qt(e,d[e],t)]));v(!0);try{await n(e,r),F.success(`Record created`),k()}catch(e){F.error(e.message||`Failed to create record`)}finally{v(!1)}},[e,k,t,n,d,x,a]),M=(0,Q.useCallback)(async t=>{if(!e||!l)return;let n=Object.fromEntries(i.map(e=>[e,l[e]]));v(!0);try{await r(e,n,t),F.success(`Record deleted`),u(null),c(!1)}catch(e){F.error(e.message||`Failed to delete record`)}finally{v(!1)}},[e,r,i,l]),N=(0,Q.useCallback)((e,t)=>{b(n=>t?[...n.filter(t=>S(t)!==S(e)),e]:n.filter(t=>S(t)!==S(e)))},[S]),P=(0,Q.useCallback)((e,t)=>{b(n=>{let r=new Set(e.map(S));return t?[...n.filter(e=>!r.has(S(e))),...e]:n.filter(e=>!r.has(S(e)))})},[S]),ee=(0,Q.useCallback)(async t=>{if(!e||y.length===0)return;let n=y.map(e=>Object.fromEntries(i.map(t=>[t,e[t]])));v(!0);try{await r(e,n,t),F.success(`${y.length} record${y.length===1?``:`s`} deleted`),b([]),u(null),c(!1)}catch(e){F.error(e.message||`Failed to delete records`)}finally{v(!1)}},[e,r,i,y]),I=(0,Q.useCallback)(()=>b([]),[]),L=(0,Q.useCallback)(e=>{b(e)},[]),R=(0,Q.useCallback)(()=>{u(null),g(!1),b([])},[]);return{datePickerOpenColumn:p,detailsOpen:s,draftRow:d,isCreatingRecord:h,isRecordDirty:w,isSavingRecord:_,selectedRow:l,selectedRowKeys:C,selectedRows:y,selectedRecordCount:y.length,addRecord:O,cancelCreateRecord:k,clearSelectedRows:I,removeRecord:M,removeSelectedRecords:ee,resetRecordEditor:R,selectRow:E,selectRows:L,setDatePickerOpenColumn:m,setDetailsOpen:c,setDraftRow:f,submitCreateRecord:j,submitRecord:A,syncSelectedRowDraft:D,toggleSelectedRow:N,toggleSelectedRows:P}}var rn=`__none__`,an=`__custom__`;function on(e){return/^(char|varchar|character|character varying|text|tinytext|mediumtext|longtext)$/i.test(e.replace(/\(.*/,``).trim())}function sn(e){let t=e.trim().match(/^'((?:''|[^'])*)'(?:\s*::\s*(?:text|character(?: varying)?|varchar(?:\(\d+\))?))?$/i);return t?t[1].replace(/''/g,`'`):e}function cn(e,t){return!t||t.toUpperCase()===`NULL`||!on(e)?t:`'${t.replace(/'/g,`''`)}'`}function ln(e,t,n=``){let r=e.toLowerCase().replace(/\(.*/,``).replace(/\b(unsigned|zerofill)\b/g,``).replace(/\s+/g,` `).trim(),i=[{value:rn,label:`No default`}];t&&i.push({value:`NULL`,label:`NULL`}),/^(tinyint|smallint|mediumint|int|integer|bigint|int2|int4|int8|smallserial|serial|bigserial|decimal|numeric|real|float|double|double precision|money)$/.test(r)&&i.push({value:`0`,label:`0`},{value:`1`,label:`1`}),/^(bool|boolean)$/.test(r)&&i.push({value:`TRUE`,label:`TRUE`},{value:`FALSE`,label:`FALSE`}),r===`date`&&i.push({value:`CURRENT_DATE`,label:`CURRENT_DATE`}),/^(time\b|timetz$)/.test(r)&&i.push({value:`CURRENT_TIME`,label:`CURRENT_TIME`}),/^(timestamp\b|timestamptz$|datetime$)/.test(r)&&i.push({value:`CURRENT_TIMESTAMP`,label:`CURRENT_TIMESTAMP`}),on(e)&&i.push({value:an,label:`Custom value…`});let a=n.trim();return a&&!on(e)&&!i.some(e=>e.value.toUpperCase()===a.toUpperCase())&&i.push({value:n,label:`${n} (current)`}),i}var un=`SMALLINT.INTEGER.BIGINT.SMALLSERIAL.SERIAL.BIGSERIAL.DECIMAL.NUMERIC.REAL.DOUBLE PRECISION.MONEY.BOOLEAN.CHAR.VARCHAR.TEXT.BYTEA.DATE.TIME.TIMETZ.TIMESTAMP.TIMESTAMPTZ.INTERVAL.UUID.JSON.JSONB.XML.BIT.BIT VARYING.CIDR.INET.MACADDR.MACADDR8.TSVECTOR.TSQUERY`.split(`.`),dn=`TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT.DECIMAL.NUMERIC.FLOAT.DOUBLE.REAL.BIT.BOOLEAN.CHAR.VARCHAR.BINARY.VARBINARY.TINYTEXT.TEXT.MEDIUMTEXT.LONGTEXT.TINYBLOB.BLOB.MEDIUMBLOB.LONGBLOB.ENUM.SET.DATE.TIME.DATETIME.TIMESTAMP.YEAR.JSON.GEOMETRY.POINT.LINESTRING.POLYGON.MULTIPOINT.MULTILINESTRING.MULTIPOLYGON.GEOMETRYCOLLECTION`.split(`.`),fn={int:`INTEGER`,int2:`SMALLINT`,int4:`INTEGER`,int8:`BIGINT`,serial2:`SMALLSERIAL`,serial4:`SERIAL`,serial8:`BIGSERIAL`,bool:`BOOLEAN`,char:`CHAR`,"character varying":`VARCHAR`,character:`CHAR`,float4:`REAL`,float8:`DOUBLE PRECISION`,"time without time zone":`TIME`,"time with time zone":`TIMETZ`,"timestamp without time zone":`TIMESTAMP`,"timestamp with time zone":`TIMESTAMPTZ`},pn={integer:`INT`,bool:`BOOLEAN`,dec:`DECIMAL`,fixed:`DECIMAL`,"double precision":`DOUBLE`};function mn(e,t){let n=t.trim(),r=n.replace(/\([^)]*\)/,``).replace(/\s+/g,` `).trim();if(e===`postgresql`){let e=r.toLowerCase();return fn[e]||un.find(t=>t.toLowerCase()===e)||n}if(e===`mysql`){let e=r.match(/\b(?:unsigned|zerofill)\b/gi)?.map(e=>e.toUpperCase())||[],t=r.replace(/\b(?:unsigned|zerofill)\b/gi,``).replace(/\s+/g,` `).trim().toLowerCase(),i=pn[t]||dn.find(e=>e.toLowerCase()===t);return i?[i,...e].join(` `):n}return r.toUpperCase()}var hn=e=>/^(var)?char$|^character varying$|^(var)?binary$/i.test(mn(null,e)),gn=e=>/^(decimal|numeric)$/i.test(mn(null,e)),_n=(e,t)=>{let n=mn(e,t);return e===`postgresql`?/^(TIME|TIMETZ|TIMESTAMP|TIMESTAMPTZ)$/.test(n):e===`mysql`&&/^(TIME|DATETIME|TIMESTAMP)$/.test(n)};function vn(e,t,n,r,i){let a=mn(e,t);return hn(a)?`${a}(${n||255})`:gn(a)&&r?`${a}(${i?`${r},${i}`:r})`:_n(e,a)&&r?`${a}(${r})`:a}var yn=e=>String(e?.full_type===`USER-DEFINED`?e?.type:e?.full_type||e?.type||``),bn=e=>{if(Array.isArray(e))return e.map(String);let t=String(e||``).match(/^(?:enum|set)\((.*)\)$/i);return t?[...t[1].matchAll(/'((?:''|[^'])*)'/g)].map(e=>e[1].replace(/''/g,`'`)):[]},xn=e=>e.match(/\((\d+)\)/)?.[1]||``,Sn=e=>{let[,t=``,n=``]=e.match(/\((\d+)(?:\s*,\s*(\d+))?\)/)||[];return{precision:t,scale:n}},Cn=(e,t)=>mn(e,t).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[`"]/g,``).replace(/\s+/g,` `).replace(/^int4$/,`integer`).replace(/^int8$/,`bigint`).replace(/^int2$/,`smallint`).replace(/^serial$/,`integer`).replace(/^bigserial$/,`bigint`).replace(/^smallserial$/,`smallint`).replace(/^character varying/,`varchar`).trim(),wn=(e,t,n)=>Cn(e,t)===Cn(e,n);function Tn(e,t,n,r){let[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)(!1),u=(0,Q.useMemo)(()=>i?.kind===`column`&&e?.columns?.find(e=>e.name===i.columnName)||null,[e,i]),d=(0,Q.useMemo)(()=>u&&e?.foreign_keys?.find(e=>e.column===u.name)||null,[e,u]),f=(0,Q.useMemo)(()=>i?.kind===`index`&&e?.indexes?.find(e=>e.name===i.indexName)||null,[e,i]),p=(0,Q.useMemo)(()=>i?.kind===`check`&&e?.checks?.find(e=>e.name===i.checkName)||null,[e,i]);(0,Q.useEffect)(()=>{if(i?.kind===`addTable`){s({tableName:``,tableComment:``,columnName:`id`,columnType:`BIGINT`,characterLength:``,numericPrecision:``,numericScale:``,isNullable:!1,columnDefault:``,columnExtra:``,columnComment:``,enumValues:[],fkEnabled:!1,refTable:``,refColumn:``,fkConstraintName:``,fkOnDelete:`NO ACTION`,fkOnUpdate:`NO ACTION`,indexName:``,indexColumns:[],indexUnique:!1,indexAlgorithm:``,checkName:``,checkExpression:``});return}if(!e||!i){s(null);return}let t=i.kind===`column`?e.columns?.find(e=>e.name===i.columnName):null,n=t?e.foreign_keys?.find(e=>e.column===t.name):null,r=i.kind===`index`?e.indexes?.find(e=>e.name===i.indexName):null,a=i.kind===`check`?e.checks?.find(e=>e.name===i.checkName):null,o=Sn(yn(t));s({tableName:e.table_name||``,tableComment:e.comment??``,columnName:t?.name||``,columnType:yn(t),characterLength:String(t?.max_length||xn(yn(t))||``),numericPrecision:String(t?.numeric_precision||o.precision||``),numericScale:String(t?.numeric_scale||o.scale||``),isNullable:!!t?.is_nullable,columnDefault:sn(t?.column_default??``),columnExtra:t?.extra??``,columnComment:t?.comment??``,enumValues:bn(t?.enum_values),fkEnabled:!!n,refTable:n?.ref_table||``,refColumn:n?.ref_column||``,fkConstraintName:n?.constraint_name||``,fkOnDelete:n?.on_delete||`NO ACTION`,fkOnUpdate:n?.on_update||`NO ACTION`,indexName:r?.name||``,indexColumns:String(r?.column_name||``).split(`,`).map(e=>e.trim()).filter(Boolean),indexUnique:!!r?.is_unique,indexAlgorithm:String(r?.algorithm||``).toLowerCase(),checkName:a?.name||``,checkExpression:a?.expression||``})},[e,i]);let m=(0,Q.useMemo)(()=>!i||!o?!1:i.kind===`addTable`?!!(o.tableName.trim()&&o.columnName.trim()&&o.columnType.trim()):e?o.tableName!==e.table_name||o.tableComment!==(e.comment??``)?!0:i.kind===`addColumn`?!!(o.columnName.trim()&&o.columnType.trim()):i.kind===`addIndex`?!!(o.indexName.trim()&&o.indexColumns.length>0):i.kind===`addCheck`?!!o.checkExpression.trim():i.kind===`index`&&f?o.indexName!==f.name||o.indexUnique!==!!f.is_unique||o.indexAlgorithm!==String(f.algorithm||``).toLowerCase()||o.indexColumns.join(`,`)!==String(f.column_name||``):i.kind===`check`&&p?o.checkName!==p.name||o.checkExpression!==p.expression:i.kind!==`column`||!u?!1:o.columnName!==u.name||vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale)!==vn(r,yn(u),String(u.max_length||xn(yn(u))||``),String(u.numeric_precision||Sn(yn(u)).precision||``),String(u.numeric_scale||Sn(yn(u)).scale||``))||o.isNullable!==!!u.is_nullable||o.columnDefault!==sn(u.column_default??``)||o.columnExtra!==(u.extra??``)||o.columnComment!==(u.comment??``)||o.enumValues.join(`\0`)!==bn(u.enum_values).join(`\0`)||o.fkEnabled!==!!d||o.refTable!==(d?.ref_table||``)||o.refColumn!==(d?.ref_column||``)||o.fkConstraintName!==(d?.constraint_name||``)||o.fkOnDelete!==(d?.on_delete||`NO ACTION`)||o.fkOnUpdate!==(d?.on_update||`NO ACTION`):!1,[e,d,r,o,p,u,f,i]);return{target:i,draft:o,isDirty:m,isSaving:c,selectedColumn:u,selectedIndex:f,selectedCheck:p,referenceColumns:(0,Q.useMemo)(()=>(t.find(e=>e.table_name===o?.refTable)?.columns||[]).filter(e=>wn(r,o?.columnType||``,yn(e))),[r,o?.columnType,o?.refTable,t]),setDraft:s,editTable:()=>a({kind:`table`}),editColumn:e=>a({kind:`column`,columnName:e}),addColumn:()=>a({kind:`addColumn`}),addTable:()=>a({kind:`addTable`}),editIndex:e=>a({kind:`index`,indexName:e}),addIndex:()=>a({kind:`addIndex`}),editCheck:e=>a({kind:`check`,checkName:e}),addCheck:()=>a({kind:`addCheck`}),close:()=>a(null),save:(0,Q.useCallback)(async()=>{if(!(!i||!o||!m)){l(!0);try{await n({createTable:i.kind===`addTable`?{name:o.tableName,comment:o.tableComment,column:{name:o.columnName,type:vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale),is_nullable:o.isNullable,column_default:cn(o.columnType,o.columnDefault),extra:o.columnExtra,comment:o.columnComment,enum_values:o.enumValues}}:void 0,tableName:o.tableName,tableComment:o.tableComment,columnName:i.kind===`column`?i.columnName:i.kind===`addColumn`?`__new__`:void 0,column:i.kind===`column`||i.kind===`addColumn`?{name:o.columnName,type:vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale),is_nullable:o.isNullable,column_default:cn(o.columnType,o.columnDefault),extra:o.columnExtra,comment:o.columnComment,enum_values:o.enumValues}:void 0,foreignKey:i.kind===`column`||i.kind===`addColumn`?{enabled:o.fkEnabled,ref_table:o.refTable,ref_column:o.refColumn,constraint_name:o.fkConstraintName,on_delete:o.fkOnDelete,on_update:o.fkOnUpdate}:void 0,indexName:i.kind===`index`?i.indexName:i.kind===`addIndex`?`__new__`:void 0,index:i.kind===`index`||i.kind===`addIndex`?{name:o.indexName,columns:o.indexColumns,is_unique:o.indexUnique,algorithm:o.indexAlgorithm}:void 0,checkName:i.kind===`check`?i.checkName:i.kind===`addCheck`?`__new__`:void 0,check:i.kind===`check`||i.kind===`addCheck`?{name:o.checkName,expression:o.checkExpression}:void 0}),i.kind===`addTable`&&a(null),(i.kind===`addColumn`||i.kind===`column`)&&a({kind:`column`,columnName:o.columnName}),(i.kind===`addIndex`||i.kind===`index`)&&a({kind:`index`,indexName:o.indexName}),(i.kind===`addCheck`||i.kind===`check`)&&a({kind:`check`,checkName:o.checkName})}finally{l(!1)}}},[r,o,m,i,n])}}function En({expected:e,value:t,onChange:n}){return(0,$.jsxs)(`label`,{className:`block space-y-1.5 text-sm`,children:[(0,$.jsxs)(`span`,{children:[`Type `,(0,$.jsx)(`strong`,{className:`font-mono`,children:e}),` to confirm`]}),(0,$.jsx)(G,{value:t,onChange:e=>n(e.target.value),autoComplete:`off`})]})}function Dn({action:e,onCancel:t,onDeleteRecords:n,onDeleteStructure:r,confirmationTarget:i}){let[a,o]=(0,Q.useState)(``);return(0,Q.useEffect)(()=>o(``),[e]),e===`records`&&i?(0,$.jsx)(Ve,{open:!0,onOpenChange:e=>!e&&t(),children:(0,$.jsxs)(He,{size:`sm`,children:[(0,$.jsx)(Be,{children:(0,$.jsx)(Re,{children:`Delete Records`})}),(0,$.jsxs)(ze,{className:`space-y-3`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Selected records will be permanently deleted.`}),(0,$.jsx)(En,{expected:i,value:a,onChange:o})]}),(0,$.jsxs)(Le,{children:[(0,$.jsx)(Ie,{onClick:t,children:`Cancel`}),(0,$.jsx)(Ue,{className:`bg-destructive hover:bg-destructive/90`,disabled:a!==i,onClick:()=>n(a),children:`Delete`})]})]})}):(0,$.jsx)(We,{isOpen:e!==null,title:e===`records`?`Delete Records`:e===`column`?`Delete Column`:e===`check`?`Delete Check`:`Delete Index`,message:e===`records`?`Selected records will be permanently deleted.`:e===`column`?`This column and its data will be permanently deleted.`:e===`check`?`This check constraint will be permanently deleted.`:`This index will be permanently deleted.`,confirmText:`Delete`,onCancel:t,onConfirm:e===`records`?n:r})}function On({column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:o,allowPrimaryKey:s=!1,setDatePickerOpenColumn:c,setDraftRow:l}){let u=`record-field-${e}`,{enumValues:d,isBooleanColumn:f,isDateColumn:p,isDateTimeColumn:m,isEnumColumn:h,isLongColumn:g,isNumericColumn:_,isReadOnlyColumn:v}=t;if(v(e,s))return(0,$.jsx)(G,{id:u,value:String(r[e]??``),disabled:!0,className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``});if(h(e)){let t=d(e),n=String(r[e]??``);return(0,$.jsxs)(k,{value:n,onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(D,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(O,{children:n})}),(0,$.jsx)(E,{alignItemWithTrigger:!1,className:`max-h-64`,children:t.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]})}let b=a.get(e);if(b){let n=i[e]||[],a=r[e]??``,o=new Set(n.map(e=>String(e[b.ref_column]))),s=a!==``&&!o.has(String(a))?[{[b.ref_column]:a},...n]:n;return(0,$.jsxs)(k,{value:String(a),onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(D,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(O,{children:String(a)})}),(0,$.jsx)(E,{alignItemWithTrigger:!1,className:`max-h-64`,children:s.length===0?(0,$.jsx)(`div`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No parent records`}):s.map(e=>{let n=String(e[b.ref_column]),r=Object.keys(e).find(t=>t!==b.ref_column&&e[t]!==null&&e[t]!==void 0),i=r?`${n} - ${Xt(r,e[r],t)}`:n;return(0,$.jsx)(w,{value:n,className:`text-xs`,children:i},n)})})]})}if(f(e))return(0,$.jsx)(G,{id:u,type:`number`,min:0,max:1,step:1,value:r[e]??``,onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:`0 or 1`});if(g(e))return(0,$.jsx)(Xe,{id:u,value:r[e]??``,onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 min-h-16 resize-y font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``});if(p(e)||m(e)){let t=String(r[e]??``),i=$t(t);return(0,$.jsxs)(Ct,{className:`mt-1 gap-2 ${m(e)?`grid-cols-[minmax(0,1fr)_minmax(0,6.5rem)]`:``}`,children:[(0,$.jsx)(ut,{className:`min-w-0`,children:(0,$.jsxs)(xe,{open:n===e,onOpenChange:t=>c(t?e:null),children:[(0,$.jsx)(ye,{render:(0,$.jsxs)(y,{id:u,type:`button`,variant:`outline`,className:`h-8 w-full min-w-0 justify-between font-mono text-xs font-normal`,children:[(0,$.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 truncate`,children:[(0,$.jsx)(tt,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),i?Ze(i,`PPP`):`Select date`]}),(0,$.jsx)(N,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`})]})}),(0,$.jsx)(ve,{align:`start`,className:`w-auto overflow-hidden p-0`,children:(0,$.jsx)(te,{mode:`single`,selected:i,captionLayout:`dropdown`,defaultMonth:i,onSelect:t=>{if(!t)return;let n=en(t);l(t=>({...t,[e]:m(e)?`${n} ${Jt(t[e])}`:n})),c(null)},classNames:{month_caption:`flex justify-center px-2 pt-2`,caption_label:`pointer-events-none relative z-[1] inline-flex whitespace-nowrap text-sm font-medium leading-none`,dropdowns:`flex items-center gap-2`,dropdown_root:`relative flex h-8 min-w-24 flex-row items-center justify-center gap-2 rounded-md border bg-background px-3 text-sm font-medium shadow-sm [&>svg]:h-3.5 [&>svg]:w-3.5 [&>svg]:shrink-0 [&>svg]:text-muted-foreground`,dropdown:`absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0`}})})]})}),m(e)&&(0,$.jsxs)(ut,{className:`min-w-0`,children:[(0,$.jsx)(ft,{htmlFor:`${u}-time`,className:`sr-only`,children:`Time`}),(0,$.jsx)(G,{id:`${u}-time`,type:`time`,step:`1`,value:Jt(t),onChange:t=>{let n=t.target.value.length===5?`${t.target.value}:00`:t.target.value;l(t=>({...t,[e]:`${qt(t[e])||en(new Date)} ${n}`}))},className:`h-8 min-w-0 bg-background px-2 font-mono text-xs`})]})]})}return(0,$.jsx)(G,{id:u,type:_(e)?`number`:`text`,value:String(r[e]??``),onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``})}function kn({activeTable:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,isRecordDirty:o,isCreatingRecord:s,isSavingRecord:c,primaryKeyColumns:l,records:u,selectedRow:d,setDatePickerOpenColumn:p,setDetailsOpen:m,setDraftRow:h,onCancelCreateRecord:g,onSubmitCreateRecord:_,onSubmitRecord:v,warnUnsaved:b}){let x=s?{}:d;return(0,$.jsx)(`aside`,{className:`w-80 shrink-0 border-l bg-background`,children:(0,$.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b p-4`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`h3`,{className:`truncate text-sm font-medium`,children:s?`New Record`:d?`Record Details`:`Table Information`}),(0,$.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:e||`No table selected`})]}),(0,$.jsx)(y,{variant:`ghost`,size:`icon-xs`,onClick:()=>b()&&m(!1),title:`Close details`,children:(0,$.jsx)(f,{className:`h-3.5 w-3.5`})})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(d||s)&&u?(0,$.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-2 overflow-y-auto p-3`,children:[u.columns.filter(e=>!s||t.isInsertableColumn(e)).map(e=>(0,$.jsxs)(`div`,{className:`rounded-md border px-3 py-2`,children:[(0,$.jsx)(`label`,{className:`truncate font-mono text-xs text-muted-foreground`,htmlFor:`record-field-${e}`,children:e}),(0,$.jsx)(On,{column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:x,allowPrimaryKey:s,setDatePickerOpenColumn:p,setDraftRow:h})]},e)),l.length===0&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This table has no primary key, so record editing is disabled.`})]}),(0,$.jsxs)(`div`,{className:`sticky bottom-0 grid grid-cols-2 gap-2 border-t bg-background p-3`,children:[(0,$.jsx)(y,{variant:`outline`,onClick:()=>s?g():h(Object.fromEntries(u.columns.map(e=>[e,Zt(e,d?.[e],t)]))),disabled:!s&&!o||c,children:`Cancel`}),(0,$.jsx)(y,{onClick:s?_:v,disabled:c||!o||!s&&l.length===0,children:`Submit`})]})]}):(0,$.jsx)(`div`,{className:`p-3`,children:(0,$.jsx)(`div`,{className:`divide-y rounded-md border`,children:[[`Data size`,Ht(u?.tableInfo?.dataSize)],[`Index size`,Ht(u?.tableInfo?.indexSize)],[`Total size`,Ht(u?.tableInfo?.totalSize)]].map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-3 py-2 text-sm`,children:[(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,$.jsx)(`span`,{className:`font-mono text-xs`,children:t})]},e))})})})]})})}function An({columnOptions:e,filters:t,addFilter:n,applyFilter:r,applyFilters:i,clearFilters:a,removeFilter:o,setShowFilters:s,updateFilter:c,warnUnsaved:l}){return(0,$.jsx)(`div`,{className:`shrink-0 border-b bg-muted/10 px-3 py-2`,children:(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[t.map(i=>{let a=i.operator===`IS`||i.operator===`IS NOT`,s=i.operator===`BETWEEN`||i.operator===`NOT BETWEEN`;return(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,$.jsx)(K,{checked:i.enabled,onCheckedChange:e=>c(i.id,{enabled:e}),"aria-label":`Enable filter`}),(0,$.jsxs)(k,{value:i.column,onValueChange:e=>e&&c(i.id,{column:e}),children:[(0,$.jsx)(D,{className:`h-8 min-w-32 max-w-48 text-xs`,children:(0,$.jsx)(O,{children:i.column||`Column`})}),(0,$.jsx)(E,{children:e.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsxs)(k,{value:i.operator,onValueChange:e=>e&&c(i.id,{operator:e}),children:[(0,$.jsx)(D,{className:`h-8 w-36 text-xs`,children:(0,$.jsx)(O,{children:i.operator})}),(0,$.jsx)(E,{children:Vt.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsx)(G,{value:a?`NULL`:i.value,disabled:a,onChange:e=>c(i.id,{value:e.target.value}),placeholder:i.operator.includes(`IN`)?`a, b, c`:`Value`,className:`h-8 min-w-28 flex-1 text-xs`}),s&&(0,$.jsx)(G,{value:i.value2||``,onChange:e=>c(i.id,{value2:e.target.value}),placeholder:`And`,className:`h-8 min-w-28 flex-1 text-xs`}),(0,$.jsx)(y,{variant:`secondary`,size:`sm`,className:`h-8`,onClick:()=>l()&&r(i),children:`Apply`}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t.length<=1,onClick:()=>o(i.id),title:`Remove filter`,children:(0,$.jsx)(me,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,onClick:()=>n(i.column||e[0]||``),title:`Add filter`,children:(0,$.jsx)(Se,{className:`h-3.5 w-3.5`})})]},i.id)}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[(0,$.jsx)(y,{variant:`ghost`,size:`sm`,className:`h-8`,onClick:()=>{l()&&(a(),s(!1))},children:`Clear`}),(0,$.jsx)(y,{size:`sm`,className:`h-8`,onClick:()=>l()&&i(t),children:`Apply All`})]})]})})}function jn({activeView:e,page:t,records:n,tableColumnCount:r,totalPages:i,warnUnsaved:a,onAddColumn:o,onAddIndex:s,onAddCheck:c,onInfo:l,onNextPage:u,onPrevPage:f,onViewChange:p}){return(0,$.jsxs)(`div`,{className:`grid grid-cols-[1fr_auto_1fr] items-center gap-2 px-4 py-2 border-t bg-muted/10 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1 justify-self-start`,children:[[`data`,`structure`].map(t=>(0,$.jsx)(y,{variant:e===t?`secondary`:`ghost`,size:`sm`,className:`h-7 px-3 capitalize`,onClick:()=>p(t),children:t},t)),e===`structure`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:o,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Column`]}),(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:s,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Index`]}),(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:c,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Check`]}),(0,$.jsx)(y,{variant:`ghost`,size:`icon-xs`,onClick:l,title:`Show table SQL`,children:(0,$.jsx)(ce,{className:`h-4 w-4`})})]})]}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground justify-self-center`,children:e===`structure`?`${r} columns`:n&&n.total>0?`${((t||1)-1)*(n.pageSize||50)+1}-${Math.min((t||1)*(n.pageSize||50),Number(n.total))} of ${n.total} rows`:`0 rows`}),e===`data`&&n&&(0,$.jsxs)(`div`,{className:`flex items-center gap-1 justify-self-end`,children:[(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t<=1,onClick:()=>a()&&f(),children:(0,$.jsx)(at,{className:`h-4 w-4`})}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t>=i,onClick:()=>a()&&u(),children:(0,$.jsx)(d,{className:`h-4 w-4`})})]})]})}function Mn({className:e,...t}){return(0,$.jsx)(`div`,{"data-slot":`button-group`,className:P(`inline-flex items-center rounded-lg shadow-xs [&>[data-slot=button]:not(:first-child)]:rounded-l-none [&>[data-slot=button]:not(:first-child)]:border-l-0 [&>[data-slot=button]:not(:last-child)]:rounded-r-none`,e),...t})}var Nn=e=>e===`mysql`,Pn=e=>e===`postgresql`,Fn=(e,t)=>Nn(e)?`\`${t.replace(/`/g,"``")}\``:`"${t.replace(/"/g,`""`)}"`,In=e=>e.replace(/[^A-Za-z0-9_.-]+/g,`_`),Ln=e=>e===`tab`?`Tab`:e===`;`?`Semicolon (;)`:`Comma (,)`,Rn=e=>e===`,`?`Comma decimal (,)`:`Dot decimal (.)`;function zn(e,t){return e==null?``:t===`,`&&typeof e==`number`&&!Number.isInteger(e)?String(e).replace(`.`,`,`):String(e)}function Bn(e,t,n){let r=zn(e,n);return/["\n\r]/.test(r)||r.includes(t)?`"${r.replace(/"/g,`""`)}"`:r}function Vn(e){return e==null?`NULL`:typeof e==`number`?String(e):typeof e==`boolean`?e?`TRUE`:`FALSE`:`'${String(e).replace(/'/g,`''`)}'`}async function Hn(e){let t=window.CompressionStream;if(!t)throw Error(`Gzip is not supported in this browser`);let n=e.stream().pipeThrough(new t(`gzip`));return new Response(n).blob()}function Un(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function Wn({connectionId:e,dbType:t,table:n,tables:r,exportTables:i,exportRows:a,exportSelectedRows:o,label:s=`Export`,mode:c=`menu`,buttonClassName:l=`h-8 px-2`,disabled:u=!1,onDeleteTables:d,onMutateTables:f}){let x=n.table_name,j=(0,Q.useMemo)(()=>(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),[n]),[M,N]=(0,Q.useState)(null),[P,ee]=(0,Q.useState)(`csv`),[I,L]=(0,Q.useState)(j),[R,z]=(0,Q.useState)(`,`),[B,V]=(0,Q.useState)(`.`),[te,re]=(0,Q.useState)(!0),[H,ae]=(0,Q.useState)(!0),[U,oe]=(0,Q.useState)(!1),[se,ce]=(0,Q.useState)(`${x}_copy`),[ue,fe]=(0,Q.useState)(!1),[me,he]=(0,Q.useState)(!1),[ge,_e]=(0,Q.useState)(!1),[W,ve]=(0,Q.useState)(!1),[ye,be]=(0,Q.useState)(``),[xe,Se]=(0,Q.useState)(null),Ce=i?.length?i:[n],Ee=Ce.length===1,De=Nn(t)||Pn(t),q=async t=>{let n=1,r=[],i=[];for(;;){let a=await Te(`/api/catalogs/${e}/records`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,page:n,pageSize:200})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to fetch records`);if(i=(o.columns||i).map(String),r.push(...o.rows||[]),r.length>=Number(o.total||r.length))return{columns:i,rows:r};n+=1}},Oe=async n=>{let r=n.table_name,i=Ee?I:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),a=xe?{rows:xe,columns:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean)}:H||P!==`sql`?await q(r):{rows:[],columns:i},o=i.length?i:a.columns;if(P===`json`)return JSON.stringify(a.rows.map(e=>Object.fromEntries(o.map(t=>[t,e[t]]))),null,2);let s=R===`tab`?` `:R;if(P===`csv`)return[o.join(s),...a.rows.map(e=>o.map(t=>Bn(e[t],s,B)).join(s))].join(`
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{a as r,d as i,i as a,m as o,r as s}from"./downloadSVG-CM8RNd8w.js";import{ct as c,r as l,t as u}from"./esm-B1WURL1q.js";import{D as d,E as f,i as p,l as m,n as h,o as g,s as _,t as v}from"./dialog-BDJ53r24.js";import{x as y}from"./useCompositeItem-dSQJByV3.js";import{S as b,b as x,f as S,g as C,i as w,m as T,n as E,o as D,s as O,t as k,v as A,x as j,y as M,z as N}from"./select-Bbn-kjXq.js";import{r as P}from"./utils-TcK2FSyg.js";import{n as F}from"./dist-DDYEjsV2.js";import{_ as ee,b as I,c as L,f as R,g as z,h as B,i as V,l as te,m as ne,n as re,p as H,r as ie,t as ae,u as U,v as oe,y as se}from"./context-menu-CRWOjWbD.js";import{n as ce}from"./triangle-alert-Hn6Bso_Y.js";import{t as le}from"./copy-BasccFFL.js";import{d as ue,f as de,u as fe}from"./chatUtils-l06n4Zcf.js";import{n as pe,t as me}from"./minus-DU5tWN1g.js";import{n as he,r as ge,t as _e}from"./undo-2-DSs-RD2B.js";import{l as W,n as ve,r as ye,s as be,t as xe}from"./popover-DrHvAr7i.js";import{t as Se}from"./plus-CSlTmvRo.js";import{t as Ce}from"./search-hNBtHxSg.js";import{t as we}from"./trash-2-eV2xsHmQ.js";import{n as Te,s as Ee}from"./api-D87lw-98.js";import{t as G}from"./input-Cr-mF_hd.js";import{t as K}from"./checkbox-Tsi3FADL.js";import{a as De,i as q,n as Oe,o as J,r as Y,t as ke}from"./table-DCsJJ7Zs.js";import{O as Ae,a as je,y as Me}from"./note-importer-Bp6Qn9bq.js";import{b as Ne,x as Pe,y as X}from"./WorkspaceProvider-rlRR_L6Q.js";import{n as Fe}from"./WorkspaceContext-O7njKDwj.js";import{a as Ie,c as Le,d as Re,i as ze,l as Be,n as Ve,o as He,r as Ue,t as We}from"./ConfirmModal-B_5qT1GL.js";import{t as Z}from"./label-Co-it7VP.js";import{F as Ge,N as Ke,c as qe,n as Je,s as Ye,t as Xe}from"./textarea-DbECrx_E.js";import{B as Ze,Kn as Qe,Pn as $e,Pt as et,Qn as tt,Rt as nt,Sn as rt,Tt as it,Xn as at,_t as ot,a as st,at as ct,bn as lt,ct as ut,d as dt,dt as ft,jn as pt,l as mt,m as ht,n as gt,o as _t,r as vt,rt as yt,s as bt,sr as xt,u as St,ut as Ct,wt}from"./index-DXkZu2zv.js";/* empty css */import{i as Tt,n as Et,o as Dt,r as Ot,t as kt}from"./erd-edge-style-DPquCU09.js";import{t as At}from"./JumpToNode-C59YhkT9.js";var Q=e(t(),1),jt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);function Mt(e,t){return e.source===t.source&&e.target===t.target&&jt(e.sourceHandle)===jt(t.sourceHandle)&&jt(e.targetHandle)===jt(t.targetHandle)}function Nt(e,t){let n=t?.nodes||{},r=new Set(e.flatMap(e=>(e.foreign_keys||[]).map(e=>`${e.ref_table}.${e.ref_column}`))),i=e.map((e,t)=>{let i=n[e.table_name]||{};return{id:e.table_name,type:`entity`,position:{x:i.x??t%4*280+50,y:i.y??Math.floor(t/4)*220+50},data:{id:e.table_name,name:e.table_name,x:i.x??0,y:i.y??0,color:i.color??`#6b7280`,columns:(e.columns||[]).map(t=>({...Me(t,`${e.table_name}.${t.name}`),_is_fk:(e.foreign_keys||[]).some(e=>e.column===t.name),_is_ref:r.has(`${e.table_name}.${t.name}`)})),collapsed:i.collapsed??!1,hidden_columns:i.hidden_columns??[],note:i.note??``,isReadOnly:!0}}}),a=[];for(let n of e)for(let e of n.foreign_keys||[]){let r=`${n.table_name}.${e.column}->${e.ref_table}.${e.ref_column}`,i=t?.edgeHandles?.[r]||{};a.push({id:r,source:n.table_name,target:e.ref_table,sourceHandle:i.sourceHandle||`col-${n.table_name}.${e.column}-source`,targetHandle:i.targetHandle||`col-${e.ref_table}.${e.ref_column}-target`,type:`smoothstep`,data:{constraint_name:e.constraint_name}})}return{nodes:i,edges:a}}function Pt(e,t,n,r){let i=Object.fromEntries(e.map(e=>[e.id,{x:e.position.x,y:e.position.y,color:e.data.color,collapsed:e.data.collapsed??!1,hidden_columns:e.data.hidden_columns??[],note:e.data.note??``}])),a=r&&Object.fromEntries(r.map(e=>[e.id,{sourceHandle:e.sourceHandle,targetHandle:e.targetHandle}]));return{...n,nodes:i,viewport:t,...a?{edgeHandles:a}:{},_type:`production_db_positions`}}var $=n(),Ft={entity:Dt},It=({nodes:e,edges:t,setNodes:n,setEdges:d,onNodesChange:f,onEdgesChange:p,onConnect:m,onNodeClick:h,onNodeDoubleClick:g,onEdgeClick:_,onPaneClick:v,onMove:b,addEntity:x,onImportSQL:S,onAutoLayout:C,handleExportImage:w,isReadOnly:T=!1,isDbClient:E=!1,sourceConnectionId:D,undo:O,redo:k,canUndo:A,canRedo:j,takeSnapshot:M,selectedNodeId:N,onNodeDragStop:P,onMoveEnd:ee,initialViewport:I,isLoading:L,saveDiagram:R,triggerDebouncedSync:z,pendingErdDiffTrigger:B,extractColumnIdFromHandle:V,getRelationKey:te,dedupeEdgesByRelation:ne,onEdgeReconnect:re})=>{let{registerContentHandler:H,setSelectionText:ie,setActionContextData:ae,setRightPanelMode:oe}=fe(),{getViewport:se,getNodes:ce,getEdges:le,setViewport:ue}=o(),{resolvedTheme:pe}=Fe(),me=pe===`dark`?`#222`:`#ccc`,W=E,[ve,ye]=(0,Q.useState)(!1),[be,xe]=(0,Q.useState)(!1),Ce=Q.useRef(null),we=Q.useRef(!1),G=(0,Q.useCallback)((e,t)=>{let n=t.zoom<.35;n!==we.current&&(we.current=n,Ce.current?.classList.toggle(`erd-canvas-low-detail`,n)),b(e,t)},[b]),K=(0,Q.useCallback)(()=>{if(!R)return;let e=ce();e.length!==0&&R(e,le(),se()).then(()=>z?.()).catch(e=>console.error(`Error saving ERD after node drag:`,e))},[le,ce,se,R,z]),De=(0,Q.useCallback)(()=>{P?.(),R&&requestAnimationFrame(K)},[P,K,R]);Q.useEffect(()=>{if(L||!I)return;let e=requestAnimationFrame(()=>{ue(I,{duration:0})});return()=>cancelAnimationFrame(e)},[I,L,ue]);let[q,Oe]=(0,Q.useState)([]),[J,Y]=(0,Q.useState)(null),[ke,Ae]=(0,Q.useState)([]),[Ie,Le]=(0,Q.useState)(!1),Re=(0,Q.useCallback)((e,t)=>{if(e.ctrlKey||e.metaKey){e.stopPropagation(),Oe(e=>e.includes(t.id)?e.filter(e=>e!==t.id):[...e,t.id]);return}Oe([]),h(e,t)},[h]),ze=(0,Q.useCallback)(()=>{Oe([]),v()},[v]),Be=Q.useMemo(()=>q.length>0?q:N?[N]:[],[q,N]),Ve=Q.useMemo(()=>e.map(e=>{let t=Be.includes(e.id);return!!e.selected===t?e:{...e,selected:t}}),[e,Be]),He=Q.useMemo(()=>J?J.diffNodes.map(e=>({...e,data:{...e.data,isDiffMode:!0}})):[],[J]),Ue=Q.useMemo(()=>kt(t,Be),[t,Be]),We=Q.useMemo(()=>J?kt(J.diffEdges):[],[J]),Z=(0,Q.useCallback)(e=>{let t=e.filter(e=>e.type!==`select`);t.length!==0&&f(t)},[f]),Ge=Q.useRef(e),Ke=Q.useRef(t),qe=Q.useRef(N),Je=Q.useRef(Be);Ge.current=e,Ke.current=t,qe.current=N,Je.current=Be,Q.useEffect(()=>{if(Be.length>0){let e=Be.map(e=>Ge.current.find(t=>t.id===e)).filter(e=>!!e);if(e.length===0)return;let t=e.map(e=>`${e.data.name||e.data.label||e.id} (${(e.data.columns||[]).map(e=>`${e.name}: ${e.type}${e.max_length?`(${e.max_length})`:``}${e.numeric_precision?`(${e.numeric_precision}${e.numeric_scale!==null&&e.numeric_scale!==void 0?`,${e.numeric_scale}`:``})`:``}${e.is_pk?` PK`:``}${e.is_nullable?` NULL`:``}${e.comment?` -- ${e.comment}`:``}`).join(`, `)})`).join(`; `);ie(`Tables: ${t}`)}else ie(null)},[Be,ie]),Q.useEffect(()=>{let e=N?Ge.current.find(e=>e.id===N)??null:null,t=Be.map(e=>Ge.current.find(t=>t.id===e)).filter(e=>!!e);ae({nodes:Ge.current,edges:Ke.current,selectedNode:e,multiSelectedNodes:t})},[N,Be,ae]);let Ye=Q.useRef(M);Ye.current=M;let Xe=(0,Q.useCallback)((e,t,n,r,i={})=>{let a=Tt(e,t,n,r),o=i.source||`proposal`;if(a.changes.length===0){Y(null),F.success(o.startsWith(`repository`)?`Repository schema matches the comparison source`:`No schema changes found`);return}Ae(a.changes.map(e=>e.id)),Y({originalNodes:e,originalEdges:t,proposedNodes:n,proposedEdges:r,diffNodes:a.nodes,diffEdges:a.edges,diffResult:a,source:o,version:i.version,sourceLabel:i.sourceLabel,commit:i.commit,dbmlSource:i.dbmlSource}),Le(o!==`proposal`)},[]);Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){Y(e=>e?.source===`history`?null:e);return}Xe(Ge.current,Ke.current,t.nodes,t.edges,{source:`history`,version:t.version})};return window.addEventListener(ht,e),()=>window.removeEventListener(ht,e)},[Xe]),Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){Y(e=>e?.source.startsWith(`repository`)?null:e);return}Xe(t.originalNodes||Ge.current,t.originalEdges||Ke.current,t.proposedNodes,t.proposedEdges,{source:t.canApply?`repository`:`repository-compare`,sourceLabel:t.sourceLabel,commit:t.commit,dbmlSource:t.dbmlSource})};return window.addEventListener(dt,e),()=>window.removeEventListener(dt,e)},[Xe]);let Ze=(0,Q.useCallback)(async()=>{if(D){ye(!0);try{let e=await Te(`/api/catalogs/${D}/schema`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({error:`Failed to sync schema`}));F.error(t.error||`Failed to sync schema`);return}let t=(await e.json()).schema||[],n=new Map,r=t.map((e,t)=>{let r=crypto.randomUUID();return n.set(e.table_name,r),{id:r,type:`entity`,position:{x:t%4*280+50,y:Math.floor(t/4)*200+50},data:{id:r,name:e.table_name,x:t%4*280+50,y:Math.floor(t/4)*200+50,color:`#6b7280`,columns:(e.columns||[]).map(e=>Me(e,crypto.randomUUID()))}}}),i=new Map;r.forEach(e=>{e.data.columns.forEach(t=>{i.set(`${e.data.name}.${t.name}`,t.id)})});let a=[];t.forEach(e=>{let t=n.get(e.table_name);t&&(e.foreign_keys||[]).forEach(r=>{let o=n.get(r.ref_table);if(!o)return;let s=i.get(`${e.table_name}.${r.column}`),c=i.get(`${r.ref_table}.${r.ref_column}`);!s||!c||a.some(e=>e.source===t&&e.target===o&&e.sourceHandle===`col-${s}-source`&&e.targetHandle===`col-${c}-target`)||a.push({id:crypto.randomUUID(),source:t,target:o,sourceHandle:`col-${s}-source`,targetHandle:`col-${c}-target`,type:`smoothstep`})})}),Xe(Ge.current,Ke.current,r,a),F.success(`Fetched ${t.length} tables from production DB`)}catch(e){F.error(e.message||`Failed to sync schema`)}finally{ye(!1)}}},[D,Xe]),Qe=(0,Q.useCallback)(()=>{Y(null),J?.source===`history`?(oe(`closed`),F.info(`Version preview closed`)):J?.source.startsWith(`repository`)?F.info(`Repository preview closed`):F.info(`AI schema update rejected`)},[J?.source,oe]),et=(0,Q.useCallback)(()=>{if(!J)return;let{originalNodes:e,originalEdges:t,proposedNodes:r,proposedEdges:i,diffResult:a}=J,{nodes:o,edges:s}=Ot(e,t,r,i,a,ke);if(Ye.current?.(Ge.current,Ke.current),n(o),d(s),Y(null),F.success(J.source===`repository`?`Repository schema merged successfully`:`AI changes merged successfully!`),R){let e=J.source===`repository`?ke.length===a.changes.length&&J.dbmlSource?J.dbmlSource:je(o,s):void 0,t=e?{dbmlSource:e}:void 0;R(o,s,se(),t).then(()=>{z?.(),J.source===`repository`&&window.dispatchEvent(new CustomEvent(St,{detail:{dbmlSource:e,commit:J.commit}}))}).catch(e=>console.error(`Error saving after merge:`,e))}},[J,ke,n,d,R,z,se]),tt=Q.useMemo(()=>({type:`smoothstep`,animated:!1,reconnectable:!T||W,style:{stroke:`var(--edge-color)`,strokeWidth:2},markerEnd:{type:l.Arrow,color:`var(--edge-color)`,width:10,height:10}}),[W,T]);return Q.useEffect(()=>H((e,t,n)=>{if(!e)return;let r=null,i={selectedNodeId:qe.current,selectedNodeIds:Je.current};try{n?r=U(Ge.current,Ke.current,n,e,i):(r=U(Ge.current,Ke.current,`erd-generate-sql`,e,i),r||=U(Ge.current,Ke.current,`erd-edit-column`,e,i))}catch(e){F.error(`Invalid ERD schema in AI response`,{description:e?.message||`Fix the DBML/SQL block and try Append again.`});return}r?Xe(Ge.current,Ke.current,r.nodes,r.edges):F.error(`No valid changes found in response`)},[`append`]),[H,Xe]),Q.useEffect(()=>{let e=localStorage.getItem(`pending_create_erd_schema`)||localStorage.getItem(`pending_create_erd_ddl`);if(e){localStorage.removeItem(`pending_create_erd_schema`),localStorage.removeItem(`pending_create_erd_ddl`);let t=U(Ge.current,Ke.current,`erd-generate-sql`,e);t&&(Ge.current.length===0?(Ye.current?.([],[]),n(t.nodes),d(t.edges),R&&R(t.nodes,t.edges,{x:0,y:0,zoom:1}).then(()=>{z?.()}).catch(e=>{console.error(`Error saving generated diagram:`,e)}),F.success(`Applied generated schema to new diagram`)):Xe(Ge.current,Ke.current,t.nodes,t.edges))}},[n,d,Xe,R,z]),Q.useEffect(()=>{let t=localStorage.getItem(`pending_update_erd_schema`)||localStorage.getItem(`pending_update_erd_ddl`);if(!t||e.length===0)return;localStorage.removeItem(`pending_update_erd_schema`),localStorage.removeItem(`pending_update_erd_ddl`);let n=U(Ge.current,Ke.current,`erd-generate-sql`,t);n?(Xe(Ge.current,Ke.current,n.nodes,n.edges),F.info(`Review the schema changes and merge when ready`)):F.error(`Could not parse the schema for diff`)},[e,Xe,B]),(0,$.jsxs)(`div`,{className:`flex-1 relative flex flex-col overflow-hidden border rounded-xl bg-muted/20`,style:{contain:`paint layout`},children:[T&&W&&(0,$.jsx)(`div`,{className:`absolute bottom-4 inset-x-0 z-20 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2 px-4 py-2 bg-amber-500/10 border border-amber-500/30 rounded-lg pointer-events-auto text-sm text-amber-700 dark:text-amber-400 shadow-lg`,children:[(0,$.jsx)(pt,{className:`h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:`Read-only — imported from production database. Switch to desktop app to modify.`})]})}),!J&&(0,$.jsx)(`div`,{className:`absolute top-6 inset-x-0 z-10 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 p-1.5 bg-background/95 backdrop-blur-md border border-border/50 rounded-2xl shadow-2xl pointer-events-auto max-w-[95vw] overflow-x-auto no-scrollbar`,children:[(0,$.jsx)(At,{nodes:e,label:`Table`}),!T&&(0,$.jsx)(`div`,{className:`w-px h-6 bg-border mx-0.5`}),!T&&(0,$.jsxs)(y,{onClick:x,size:`sm`,className:`h-9 px-3 sm:px-4 font-bold shadow-lg shadow-primary/20 cursor-pointer`,children:[(0,$.jsx)(Se,{className:`w-4 h-4 sm:mr-2`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Add Table`})]}),!T&&(0,$.jsxs)(y,{onClick:S,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(ot,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Import SQL`})]}),!W&&(0,$.jsxs)(y,{onClick:()=>oe(`dbml`),variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)($e,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`DBML`})]}),!T&&!W&&Ee()&&(0,$.jsxs)(y,{onClick:()=>oe(`repository`),variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(lt,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Repository`})]}),(0,$.jsxs)(y,{onClick:C,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,children:[(0,$.jsx)(ge,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Auto Layout`})]}),W&&(0,$.jsxs)(y,{onClick:Ze,variant:`outline`,size:`sm`,className:`h-9 px-3 border-amber-500/50 hover:bg-amber-500/10 bg-amber-500/5 text-amber-600 dark:text-amber-400 text-xs font-semibold cursor-pointer`,disabled:ve,children:[(0,$.jsx)(nt,{className:`w-3.5 h-3.5 sm:mr-1.5 ${ve?`animate-spin`:``}`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:ve?`Syncing...`:`Sync`})]}),W&&(0,$.jsxs)(y,{onClick:w,variant:`outline`,size:`sm`,className:`h-9 px-3 border-border hover:bg-muted bg-muted/50 text-xs font-semibold cursor-pointer`,title:`Export SVG`,children:[(0,$.jsx)(de,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Export SVG`})]}),!T&&(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5 ml-auto`,children:[(0,$.jsx)(y,{variant:`ghost`,size:`icon`,onClick:O,disabled:!A,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Undo (Ctrl+Z)`,children:(0,$.jsx)(_e,{className:`w-4 h-4`})}),(0,$.jsx)(y,{variant:`ghost`,size:`icon`,onClick:k,disabled:!j,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Redo (Ctrl+Y)`,children:(0,$.jsx)(he,{className:`w-4 h-4`})})]})]})}),L&&(0,$.jsx)(`div`,{className:`absolute inset-0 z-20 flex items-center justify-center bg-background/60 backdrop-blur-[1px] transition-opacity duration-150`,children:(0,$.jsx)(`div`,{className:`w-5 h-5 border-2 border-primary/30 border-t-primary rounded-full animate-spin`})}),(0,$.jsx)(`div`,{ref:Ce,className:`flex-1`,children:(0,$.jsxs)(i,{nodes:J?He:Ve,edges:J?We:Ue,onNodesChange:Z,onEdgesChange:p,onConnect:m,onReconnectStart:()=>{W&&xe(!0)},onReconnectEnd:()=>xe(!1),onReconnect:(n,r)=>{if(J||!r.sourceHandle||!r.targetHandle)return;if(W){if(!Mt(n,r)){F.info(`Only the connector position can be changed`);return}let e=c(n,r,t);d(e),re?.(e);return}if(T)return;let i=X(e,t),a=i.nodesById.get(r.source),o=i.nodesById.get(r.target);if(a&&o){let e=String(r.sourceHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),t=String(r.targetHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),s=i.columnsByNodeAndId.get(Ne(a.id,e)),c=i.columnsByNodeAndId.get(Ne(o.id,t));if(s&&c&&s.type!==c.type){F.error(`Type Mismatch`,{description:`Cannot reconnect ${s.type} to ${c.type}`});return}if(V&&te){let e=V(r.sourceHandle),t=V(r.targetHandle);if(e&&t){let a=s?.name?.toLowerCase(),o=c?.name?.toLowerCase(),l=a?`${r.source}:${a}`:null,u=o?`${r.target}:${o}`:null,d=`${[r.source,r.target].sort().join(`:`)}:${[e,t].sort().join(`:`)}`,f=i.edgesByRelationKey.get(d)?.some(e=>e.id!==n.id)??!1,p=l&&u?[l,u].sort().join(`::`):null,m=p?i.edgesByRelationName.get(p)?.some(e=>e.id!==n.id)??!1:!1;if(f||m){F.info(`Relation already exists`);return}}}if(V&&s?.name){let e=i.edgesBySourceColumnName.get(Pe(a.data.name,s.name))?.find(e=>e.id!==n.id);if(e){let t=i.nodesById.get(e.target);F.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}}}M?.(e,t);let s=c(n,r,t);d(ne?ne(s):s)},nodeTypes:Ft,onNodeClick:Re,onNodeDoubleClick:g,onEdgeClick:_,onPaneClick:ze,onMove:G,colorMode:pe,onlyRenderVisibleElements:!0,nodesDraggable:!J&&(!T||W),nodesConnectable:!J&&(!T||W&&be),elementsSelectable:!J&&(!T||W),edgesReconnectable:!J&&(!T||W),onNodeDragStop:De,onMoveEnd:ee,minZoom:.1,maxZoom:2.5,defaultEdgeOptions:tt,defaultViewport:I,connectionLineType:u.SmoothStep,connectionLineStyle:tt.style,deleteKeyCode:null,children:[(0,$.jsx)(s,{variant:a.Lines,gap:50,size:1,color:me}),(0,$.jsx)(r,{position:`bottom-left`,showInteractive:!1})]})}),J&&(0,$.jsx)(Et,{diff:J.diffResult,approvedIds:ke,showChecklist:Ie,label:J.source===`history`?`Version ${J.version} Preview`:J.source===`repository-compare`?`Git Comparison · ${J.sourceLabel}`:J.source===`repository`?`Repository Schema · ${J.sourceLabel}`:void 0,rejectLabel:J.source===`proposal`?`Reject All`:`Close Preview`,canMerge:J.source!==`history`&&J.source!==`repository-compare`,selectable:J.source!==`history`&&J.source!==`repository-compare`,checklistTitle:J.source===`history`?`Changes in this version:`:`Select changes to merge:`,onApprovedIdsChange:Ae,onShowChecklistChange:Le,onReject:Qe,onMerge:et})]})};function Lt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.position?.x!==i.position?.x||r.position?.y!==i.position?.y||r.selected!==i.selected||r.data?.name!==i.data?.name||r.data?.color!==i.data?.color)return!1;let a=r.data?.columns,o=i.data?.columns;if(!a!=!o||a&&o&&a.length!==o.length)return!1;if(a&&o)for(let e=0;e<a.length;e++){let t=a[e],n=o[e];if(t.id!==n.id||t.name!==n.name||t.type!==n.type||t.sort_order!==n.sort_order||t.is_pk!==n.is_pk||t.is_nullable!==n.is_nullable||t.comment!==n.comment||t.max_length!==n.max_length||t.numeric_precision!==n.numeric_precision||t.numeric_scale!==n.numeric_scale)return!1}}return!0}function Rt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(r.id!==i.id||r.source!==i.source||r.target!==i.target||r.sourceHandle!==i.sourceHandle||r.targetHandle!==i.targetHandle||r.label!==i.label||r.selected!==i.selected)return!1}return!0}var zt=Q.memo(It,(e,t)=>{let n=e.isLoading!==t.isLoading,r=t.nodes.length>0,i=e.nodes.length===0,a=n&&r&&!i,o=e.initialViewport?.x===t.initialViewport?.x&&e.initialViewport?.y===t.initialViewport?.y&&e.initialViewport?.zoom===t.initialViewport?.zoom;return Lt(e.nodes,t.nodes)&&Rt(e.edges,t.edges)&&(a||e.isLoading===t.isLoading)&&e.isReadOnly===t.isReadOnly&&o&&e.selectedNodeId===t.selectedNodeId&&e.canUndo===t.canUndo&&e.canRedo===t.canRedo&&e.onMoveEnd===t.onMoveEnd&&e.pendingErdDiffTrigger===t.pendingErdDiffTrigger&&e.extractColumnIdFromHandle===t.extractColumnIdFromHandle&&e.getRelationKey===t.getRelationKey&&e.dedupeEdgesByRelation===t.dedupeEdgesByRelation});function Bt(e,t){let[n,r]=(0,Q.useState)([]),[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)([]),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(null),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(null),[v,y]=(0,Q.useState)({environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),[b,x]=(0,Q.useState)(1),[S,C]=(0,Q.useState)(!1),[w,T]=(0,Q.useState)(!1),[E,D]=(0,Q.useState)(null),O=`__new_table__`,k=(0,Q.useRef)(null),A=e?st(e):null,j=(0,Q.useRef)([]),M=(0,Q.useRef)(null),N=(0,Q.useRef)([]),P=(0,Q.useRef)({}),F=(0,Q.useRef)({}),ee=(0,Q.useRef)(null),I=(0,Q.useRef)(!1),L=t?`${gt}${t}`:null,R=(t,n,r,i)=>JSON.stringify([e,t,n,r,i]),z=(0,Q.useCallback)(()=>{A?.clear()},[A]),B=(0,Q.useCallback)(async(t=!1)=>{if(!e)return;let n=!t&&_t(e);if(n){r(n.schema||[]),_(n.dbType||null),y(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),C(!1),D(null);return}C(!0),D(null);try{let t=await Te(`/api/catalogs/${e}/schema`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error||`Failed to fetch tables`);mt(e,n),r(n.schema||[]),_(n.dbType||null),y(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4})}catch(e){D(e.message)}finally{C(!1)}},[e]);(0,Q.useEffect)(()=>{N.current=c},[c]),(0,Q.useEffect)(()=>()=>k.current?.abort(),[]);let V=(0,Q.useCallback)(async(t,n=1,r=j.current,i=M.current)=>{if(!e)return;let a=R(t,n,r,i),o=A?.get(a);if(j.current=r,d(r),M.current=i,p(i),h(o||null),x(n),k.current?.abort(),o){P.current[t]=n,T(!1),D(null);return}let s=new AbortController;k.current=s,T(!0),D(null);try{let o=await Te(`/api/catalogs/${e}/records`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,page:n,pageSize:50,filters:r,sort:i}),signal:s.signal}),c=await o.json();if(!o.ok)throw Error(c.error||`Failed to fetch records`);if(k.current!==s)return;P.current[t]=n,A?.set(a,c),A&&A.size>20&&A.delete(A.keys().next().value),h(c),x(n)}catch(e){if(e.name===`AbortError`)return;D(e.message)}finally{k.current===s&&T(!1)}},[e,A]),te=(0,Q.useCallback)(e=>{e&&(F.current[e]={filters:N.current,appliedFilters:j.current,sort:M.current})},[]),ne=(0,Q.useCallback)(e=>{let t=F.current[e]||{filters:[],appliedFilters:[],sort:null};return l(t.filters),j.current=t.appliedFilters,d(t.appliedFilters),M.current=t.sort,p(t.sort),t},[]);(0,Q.useEffect)(()=>{if(!L)return;let e=[],t=null,n={},r={};try{let i=JSON.parse(sessionStorage.getItem(L)||`{}`);e=Array.isArray(i.openTabs)?i.openTabs.filter(e=>e?.name):[],t=typeof i.activeTable==`string`?i.activeTable:null,i.pageByTable&&typeof i.pageByTable==`object`&&(n=Object.fromEntries(Object.entries(i.pageByTable).filter(([,e])=>Number.isInteger(e)&&Number(e)>0).map(([e,t])=>[e,Number(t)]))),i.tableState&&typeof i.tableState==`object`&&(r=Object.fromEntries(Object.entries(i.tableState).filter(([,e])=>Array.isArray(e?.filters)&&Array.isArray(e?.appliedFilters)).map(([e,t])=>[e,{filters:t.filters,appliedFilters:t.appliedFilters,sort:t.sort||null}])))}catch{}k.current?.abort(),k.current=null,I.current=!0,ee.current=L,s(e),a(t),P.current=n,F.current=r;let i=t?r[t]:null;l(i?.filters||[]),d(i?.appliedFilters||[]),j.current=i?.appliedFilters||[],M.current=i?.sort||null,p(i?.sort||null),h(null),x(1);let o=t&&n[t]||1,c=null;return t&&t!==O&&(x(o),c=setTimeout(()=>V(t,o,i?.appliedFilters||[],i?.sort||null))),()=>{c&&clearTimeout(c)}},[L,V]),(0,Q.useEffect)(()=>{if(!(!L||ee.current!==L)){if(I.current){I.current=!1;return}try{i&&(F.current[i]={filters:c,appliedFilters:u,sort:f}),sessionStorage.setItem(L,JSON.stringify({openTabs:o,activeTable:i,pageByTable:P.current,tableState:F.current}))}catch{}}},[L,o,i,b,c,u,f]);let re=(0,Q.useCallback)(()=>{te(i),s(e=>e.some(e=>e.name===O)?e:[...e,{name:O,pinned:!0,label:`New table`}]),a(O)},[i,te]),H=(0,Q.useCallback)(e=>{if(e===O)return re();te(i);let t=o.some(t=>t.name===e)?P.current[e]??1:1;s(t=>{if(t.some(t=>t.name===e))return t;let n=t.findIndex(e=>!e.pinned);if(n===-1)return[...t,{name:e,pinned:!1}];let r=[...t];return r[n]={name:e,pinned:!1},r}),a(e);let n=ne(e);x(t),V(e,t,n.appliedFilters,n.sort)},[i,V,re,o,ne,te]),ie=(0,Q.useCallback)(e=>{s(t=>t.map(t=>t.name===e?{...t,pinned:!0}:t))},[]),ae=(0,Q.useCallback)(e=>{let t=o.filter(t=>t.name!==e);if(delete P.current[e],delete F.current[e],s(t),i!==e)return;let n=t[t.length-1]?.name??null,r=n?P.current[n]??1:1;a(n);let c=n?ne(n):{appliedFilters:[],sort:null};n||(l([]),d([]),j.current=[],M.current=null,p(null)),x(r),n&&n!==O&&V(n,r,c.appliedFilters,c.sort)},[i,o,V,ne]),U=(0,Q.useCallback)(()=>{if(!i||!m)return;let e=b+1;V(i,e)},[i,m,b,V]),oe=(0,Q.useCallback)(()=>{if(!i||b<=1)return;let e=b-1;V(i,e)},[i,b,V]),se=m?Math.ceil(m.total/(m.pageSize||50)):0,ce=(0,Q.useCallback)((e=``)=>{l(t=>{let n=[...t,bt(e)];return N.current=n,n})},[]),le=(0,Q.useCallback)(e=>{l(t=>{let n=t.filter(t=>t.id!==e);return N.current=n,n})},[]),ue=(0,Q.useCallback)((e,t)=>{l(n=>{let r=n.map(n=>n.id===e?{...n,...t}:n);return N.current=r,r})},[]),de=(0,Q.useCallback)((e=N.current)=>{i&&(ie(i),V(i,1,e))},[i,V,ie]),fe=(0,Q.useCallback)(e=>{i&&(ie(i),V(i,1,[{...e,enabled:!0}]))},[i,V,ie]),pe=(0,Q.useCallback)((e,t,n)=>{let r=[bt(t)];r[0].operator=`=`,r[0].value=String(n),s(t=>t.some(t=>t.name===e)?t.map(t=>t.name===e?{...t,pinned:!0}:t):[...t,{name:e,pinned:!0}]),te(i),a(e),l(r),j.current=r,d(r),M.current=null,p(null),x(1),V(e,1,r)},[i,V,te]),me=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await Te(`/api/catalogs/${e}/records`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,key:n,values:r})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to update record`);return z(),i===t&&V(t,P.current[t]??b),o},[i,z,e,V,b]),he=(0,Q.useCallback)(async(t,n)=>{if(!(!e||n.length===0)){for(let r of n){let n=await Te(`/api/catalogs/${e}/records`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,key:r.key,values:r.values})}),i=await n.json();if(!n.ok)throw Error(i.error||`Failed to update record`)}z(),i===t&&V(t,P.current[t]??b)}},[i,z,e,V,b]),ge=(0,Q.useCallback)(async(t,n)=>{if(!e)return;let r=await Te(`/api/catalogs/${e}/records/create`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,values:n})}),a=await r.json();if(!r.ok)throw Error(a.error||`Failed to create record`);return z(),i===t&&V(t,P.current[t]??b),a},[i,z,e,V,b]),_e=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await Te(`/api/catalogs/${e}/records`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(Array.isArray(n)?{table:t,keys:n,confirmation:r}:{table:t,key:n,confirmation:r})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to delete record`);return z(),i===t&&V(t,P.current[t]??b),o},[i,z,e,V,b]),W=(0,Q.useCallback)(async t=>{if(!e)return;let n=await Te(`/api/catalogs/${e}/structure`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t.deleteTables?.[0]||t.truncateTables?.[0]||t.cloneTable?.source||`__table_action__`,...t})}),r=await n.json();if(!n.ok)throw Error(r.error||`Failed to update tables`);return z(),vt(e),await B(),i&&t.truncateTables?.includes(i)&&V(i,1),r},[i,z,e,V,B]);return{tables:n,activeTable:i,openTabs:o,filters:c,appliedFilters:u,sort:f,records:m,dbType:g,connectionSecurity:v,page:b,totalPages:se,isLoadingTables:S,isLoadingRecords:w,error:E,fetchTables:B,selectTable:H,openNewTableTab:re,pinTable:ie,closeTable:ae,addFilter:ce,removeFilter:le,updateFilter:ue,applyFilter:fe,applyFilters:de,openRelatedRecord:pe,createRecord:ge,deleteRecord:_e,deleteTables:(0,Q.useCallback)(async(t,n)=>{if(!e||t.length===0)return;let r=await W({deleteTables:t,...n});z();let c=new Set(t);if(s(e=>e.filter(e=>!c.has(e.name))),t.forEach(e=>{delete P.current[e],delete F.current[e]}),i&&c.has(i)){let e=o.find(e=>!c.has(e.name))?.name??null;a(e),h(null),l([]),d([]),j.current=[],M.current=null,p(null),e&&V(e,P.current[e]??1)}return r},[i,z,e,V,W,o]),mutateTables:W,updateRecord:me,updateRecords:he,updateStructure:(0,Q.useCallback)(async t=>{let n=i||(t.createTable?`__new__`:null);if(!e||!n)return;let r=await Te(`/api/catalogs/${e}/structure`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:n,...t})}),o=await r.json();if(!r.ok)throw Error(o.error||`Failed to update structure`);z(),vt(e);let c=t.createTable?.name||t.tableName||i;return a(c),s(e=>e.some(e=>e.name===c)?e.map(e=>e.name===i?{...e,name:c,pinned:!0}:e):[...e,{name:c,pinned:!0}]),P.current[c]=i?P.current[i]??b:1,i&&c!==i&&delete P.current[i],await B(),V(c,P.current[c]??b),o},[i,z,e,V,B,b]),refreshAll:(0,Q.useCallback)(async()=>{z(),e&&vt(e),await B(),i&&i!==O&&V(i,P.current[i]??b)},[i,z,e,V,B,b]),clearFilters:(0,Q.useCallback)(()=>{N.current=[],l([]),j.current=[],d([]),i&&V(i,1,[])},[i,V]),toggleSort:(0,Q.useCallback)(e=>{if(!i)return;let t=M.current,n=t?.column===e?t.direction===`asc`?{column:e,direction:`desc`}:null:{column:e,direction:`asc`};V(i,1,j.current,n)},[i,V]),nextPage:U,prevPage:oe}}var Vt=[`=`,`!=`,`<>`,`>`,`>=`,`<`,`<=`,`LIKE`,`NOT LIKE`,`CONTAINS`,`NOT CONTAINS`,`IN`,`NOT IN`,`BETWEEN`,`NOT BETWEEN`,`IS`,`IS NOT`];function Ht(e){if(e==null)return`Unavailable`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10?1:2)} ${t[r]}`}function Ut(e){return e===null?`NULL`:e===void 0?``:typeof e==`object`?JSON.stringify(e):String(e)}function Wt(e){return e==null?``:typeof e==`object`?JSON.stringify(e):String(e)}function Gt(e){if(Array.isArray(e))return e.map(String);let t=String(e||``).match(/^(?:enum|set)\((.*)\)$/i);return t?[...t[1].matchAll(/'((?:''|[^'])*)'/g)].map(e=>e[1].replace(/''/g,`'`)):[]}function Kt(e){let t=t=>e.get(t),n=e=>String(t(e)?.type||``).toLowerCase(),r=e=>String(t(e)?.full_type||t(e)?.enum_values||``).toLowerCase(),i=e=>/bool/.test(n(e))||/^tinyint\(1\)/.test(r(e)),a=e=>!i(e)&&/int|decimal|numeric|float|double|real|serial|money/.test(n(e)),o=e=>/date/.test(n(e))&&!/time/.test(n(e)),s=e=>/timestamp|datetime/.test(n(e)),c=e=>/text|json|xml/.test(n(e)),l=e=>Gt(t(e)?.enum_values);return{columnType:n,isBooleanColumn:i,isNumericColumn:a,isDateColumn:o,isDateTimeColumn:s,isLongColumn:c,enumValues:l,isEnumColumn:e=>l(e).length>0,isInsertableColumn:e=>{let n=t(e),r=String(n?.extra||``).toLowerCase(),i=String(n?.column_default||``).toLowerCase();return!n?.is_generated&&!(n?.is_pk&&(r.includes(`auto_increment`)||i.includes(`nextval`)||i.includes(`autoincrement`)))},isReadOnlyColumn:(e,n=!1)=>{let r=t(e);return!!(r?.is_pk&&!n||r?.is_generated)}}}function qt(e){return String(e||``).split(/[T ]/)[0]||``}function Jt(e){let t=String(e||``).match(/[T ](\d{2}:\d{2}(?::\d{2})?)/);return t?.[1].length===5?`${t[1]}:00`:t?.[1]||`00:00:00`}function Yt(e){let t=qt(e);return t?`${t} ${Jt(e)}`:``}function Xt(e,t,n){return t===null?`NULL`:n.isDateTimeColumn(e)?Yt(t):n.isDateColumn(e)?qt(t):Ut(t)}function Zt(e,t,n){return n.isBooleanColumn(e)?t==null||t===``?``:t===!0||t===1||t===`1`?`1`:`0`:n.isDateTimeColumn(e)?Yt(t):n.isDateColumn(e)?qt(t):Wt(t)}function Qt(e,t,n){if(n.isBooleanColumn(e))return t===``?null:Number(t);if(n.isDateTimeColumn(e))return String(t||``).replace(`T`,` `);if(n.isDateColumn(e))return qt(t);if(n.isNumericColumn(e)&&t!==``)return Number(t);if(/json/.test(n.columnType(e))&&t!==``)try{return JSON.parse(t)}catch{}return t}function $t(e){let[t]=String(e||``).split(/[T ]/),[n,r,i]=t.split(`-`).map(Number);if(!(!n||!r||!i))return new Date(n,r-1,i)}function en(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function tn({activeTable:e,columnHelpers:t,primaryKeyColumns:n,updateRecords:r}){let[i,a]=(0,Q.useState)({}),o=Object.keys(i).length,s=(0,Q.useCallback)((e,r,i)=>{if(n.length===0||t.isReadOnlyColumn(r))return;let o=JSON.stringify(n.map(t=>e[t])),s=Object.fromEntries(n.map(t=>[t,e[t]]));a(e=>({...e,[`${o}:${r}`]:{rowKey:o,column:r,key:s,value:i}}))},[t,n]),c=(0,Q.useCallback)(async()=>{if(!e||o===0)return;let n=new Map;Object.values(i).forEach(e=>{let r=n.get(e.rowKey)||{key:e.key,values:{}};r.values[e.column]=e.value===null?null:Qt(e.column,e.value,t),n.set(e.rowKey,r)});try{await r(e,[...n.values()]),a({}),F.success(`${o} cell${o===1?``:`s`} updated`)}catch(e){F.error(e.message||`Failed to update records`)}},[e,t,o,i,r]);return{clear:(0,Q.useCallback)(()=>a({}),[]),count:o,draftCell:s,drafts:i,save:c}}function nn({activeTable:e,columnHelpers:t,createRecord:n,deleteRecord:r,primaryKeyColumns:i,records:a,updateRecord:o}){let[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)({}),[p,m]=(0,Q.useState)(null),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)(!1),[y,b]=(0,Q.useState)([]),x=(0,Q.useMemo)(()=>a?.columns?.filter(e=>t.isInsertableColumn(e))||[],[t,a]),S=(0,Q.useCallback)(e=>JSON.stringify(i.map(t=>e[t])),[i]),C=(0,Q.useMemo)(()=>new Set(y.map(S)),[S,y]),w=(0,Q.useMemo)(()=>h?x.some(e=>d[e]!==``):!l||!a?!1:a.columns.some(e=>(d[e]??``)!==Zt(e,l[e],t)),[t,d,x,h,a,l]),T=(0,Q.useMemo)(()=>!l||!a?{}:Object.fromEntries(a.columns.filter(e=>(d[e]??``)!==Zt(e,l[e],t)).map(e=>[e,Qt(e,d[e]??``,t)])),[t,d,a,l]),E=(0,Q.useCallback)(e=>{g(!1),u(e)},[]),D=(0,Q.useCallback)(()=>{if(!l||!a){f({});return}f(Object.fromEntries(a.columns.map(e=>[e,Zt(e,l[e],t)])))},[t,a,l]),O=(0,Q.useCallback)(()=>{a&&(u(null),g(!0),f(Object.fromEntries(x.map(e=>[e,``]))),c(!0))},[x,a]),k=(0,Q.useCallback)(()=>{g(!1),f({}),c(!1)},[]),A=(0,Q.useCallback)(async()=>{if(!e||!l||!a)return;let t=Object.fromEntries(i.map(e=>[e,l[e]]));if(i.length!==0&&Object.keys(T).length!==0){v(!0);try{await o(e,t,T),F.success(`Record updated`),u(null),f({}),c(!1)}catch(e){F.error(e.message||`Failed to update record`)}finally{v(!1)}}},[e,T,i,a,l,o]),j=(0,Q.useCallback)(async()=>{if(!e||!a)return;let r=Object.fromEntries(x.filter(e=>d[e]!==``).map(e=>[e,Qt(e,d[e],t)]));v(!0);try{await n(e,r),F.success(`Record created`),k()}catch(e){F.error(e.message||`Failed to create record`)}finally{v(!1)}},[e,k,t,n,d,x,a]),M=(0,Q.useCallback)(async t=>{if(!e||!l)return;let n=Object.fromEntries(i.map(e=>[e,l[e]]));v(!0);try{await r(e,n,t),F.success(`Record deleted`),u(null),c(!1)}catch(e){F.error(e.message||`Failed to delete record`)}finally{v(!1)}},[e,r,i,l]),N=(0,Q.useCallback)((e,t)=>{b(n=>t?[...n.filter(t=>S(t)!==S(e)),e]:n.filter(t=>S(t)!==S(e)))},[S]),P=(0,Q.useCallback)((e,t)=>{b(n=>{let r=new Set(e.map(S));return t?[...n.filter(e=>!r.has(S(e))),...e]:n.filter(e=>!r.has(S(e)))})},[S]),ee=(0,Q.useCallback)(async t=>{if(!e||y.length===0)return;let n=y.map(e=>Object.fromEntries(i.map(t=>[t,e[t]])));v(!0);try{await r(e,n,t),F.success(`${y.length} record${y.length===1?``:`s`} deleted`),b([]),u(null),c(!1)}catch(e){F.error(e.message||`Failed to delete records`)}finally{v(!1)}},[e,r,i,y]),I=(0,Q.useCallback)(()=>b([]),[]),L=(0,Q.useCallback)(e=>{b(e)},[]),R=(0,Q.useCallback)(()=>{u(null),g(!1),b([])},[]);return{datePickerOpenColumn:p,detailsOpen:s,draftRow:d,isCreatingRecord:h,isRecordDirty:w,isSavingRecord:_,selectedRow:l,selectedRowKeys:C,selectedRows:y,selectedRecordCount:y.length,addRecord:O,cancelCreateRecord:k,clearSelectedRows:I,removeRecord:M,removeSelectedRecords:ee,resetRecordEditor:R,selectRow:E,selectRows:L,setDatePickerOpenColumn:m,setDetailsOpen:c,setDraftRow:f,submitCreateRecord:j,submitRecord:A,syncSelectedRowDraft:D,toggleSelectedRow:N,toggleSelectedRows:P}}var rn=`__none__`,an=`__custom__`;function on(e){return/^(char|varchar|character|character varying|text|tinytext|mediumtext|longtext)$/i.test(e.replace(/\(.*/,``).trim())}function sn(e){let t=e.trim().match(/^'((?:''|[^'])*)'(?:\s*::\s*(?:text|character(?: varying)?|varchar(?:\(\d+\))?))?$/i);return t?t[1].replace(/''/g,`'`):e}function cn(e,t){return!t||t.toUpperCase()===`NULL`||!on(e)?t:`'${t.replace(/'/g,`''`)}'`}function ln(e,t,n=``){let r=e.toLowerCase().replace(/\(.*/,``).replace(/\b(unsigned|zerofill)\b/g,``).replace(/\s+/g,` `).trim(),i=[{value:rn,label:`No default`}];t&&i.push({value:`NULL`,label:`NULL`}),/^(tinyint|smallint|mediumint|int|integer|bigint|int2|int4|int8|smallserial|serial|bigserial|decimal|numeric|real|float|double|double precision|money)$/.test(r)&&i.push({value:`0`,label:`0`},{value:`1`,label:`1`}),/^(bool|boolean)$/.test(r)&&i.push({value:`TRUE`,label:`TRUE`},{value:`FALSE`,label:`FALSE`}),r===`date`&&i.push({value:`CURRENT_DATE`,label:`CURRENT_DATE`}),/^(time\b|timetz$)/.test(r)&&i.push({value:`CURRENT_TIME`,label:`CURRENT_TIME`}),/^(timestamp\b|timestamptz$|datetime$)/.test(r)&&i.push({value:`CURRENT_TIMESTAMP`,label:`CURRENT_TIMESTAMP`}),on(e)&&i.push({value:an,label:`Custom value…`});let a=n.trim();return a&&!on(e)&&!i.some(e=>e.value.toUpperCase()===a.toUpperCase())&&i.push({value:n,label:`${n} (current)`}),i}var un=`SMALLINT.INTEGER.BIGINT.SMALLSERIAL.SERIAL.BIGSERIAL.DECIMAL.NUMERIC.REAL.DOUBLE PRECISION.MONEY.BOOLEAN.CHAR.VARCHAR.TEXT.BYTEA.DATE.TIME.TIMETZ.TIMESTAMP.TIMESTAMPTZ.INTERVAL.UUID.JSON.JSONB.XML.BIT.BIT VARYING.CIDR.INET.MACADDR.MACADDR8.TSVECTOR.TSQUERY`.split(`.`),dn=`TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT.DECIMAL.NUMERIC.FLOAT.DOUBLE.REAL.BIT.BOOLEAN.CHAR.VARCHAR.BINARY.VARBINARY.TINYTEXT.TEXT.MEDIUMTEXT.LONGTEXT.TINYBLOB.BLOB.MEDIUMBLOB.LONGBLOB.ENUM.SET.DATE.TIME.DATETIME.TIMESTAMP.YEAR.JSON.GEOMETRY.POINT.LINESTRING.POLYGON.MULTIPOINT.MULTILINESTRING.MULTIPOLYGON.GEOMETRYCOLLECTION`.split(`.`),fn={int:`INTEGER`,int2:`SMALLINT`,int4:`INTEGER`,int8:`BIGINT`,serial2:`SMALLSERIAL`,serial4:`SERIAL`,serial8:`BIGSERIAL`,bool:`BOOLEAN`,char:`CHAR`,"character varying":`VARCHAR`,character:`CHAR`,float4:`REAL`,float8:`DOUBLE PRECISION`,"time without time zone":`TIME`,"time with time zone":`TIMETZ`,"timestamp without time zone":`TIMESTAMP`,"timestamp with time zone":`TIMESTAMPTZ`},pn={integer:`INT`,bool:`BOOLEAN`,dec:`DECIMAL`,fixed:`DECIMAL`,"double precision":`DOUBLE`};function mn(e,t){let n=t.trim(),r=n.replace(/\([^)]*\)/,``).replace(/\s+/g,` `).trim();if(e===`postgresql`){let e=r.toLowerCase();return fn[e]||un.find(t=>t.toLowerCase()===e)||n}if(e===`mysql`){let e=r.match(/\b(?:unsigned|zerofill)\b/gi)?.map(e=>e.toUpperCase())||[],t=r.replace(/\b(?:unsigned|zerofill)\b/gi,``).replace(/\s+/g,` `).trim().toLowerCase(),i=pn[t]||dn.find(e=>e.toLowerCase()===t);return i?[i,...e].join(` `):n}return r.toUpperCase()}var hn=e=>/^(var)?char$|^character varying$|^(var)?binary$/i.test(mn(null,e)),gn=e=>/^(decimal|numeric)$/i.test(mn(null,e)),_n=(e,t)=>{let n=mn(e,t);return e===`postgresql`?/^(TIME|TIMETZ|TIMESTAMP|TIMESTAMPTZ)$/.test(n):e===`mysql`&&/^(TIME|DATETIME|TIMESTAMP)$/.test(n)};function vn(e,t,n,r,i){let a=mn(e,t);return hn(a)?`${a}(${n||255})`:gn(a)&&r?`${a}(${i?`${r},${i}`:r})`:_n(e,a)&&r?`${a}(${r})`:a}var yn=e=>String(e?.full_type===`USER-DEFINED`?e?.type:e?.full_type||e?.type||``),bn=e=>{if(Array.isArray(e))return e.map(String);let t=String(e||``).match(/^(?:enum|set)\((.*)\)$/i);return t?[...t[1].matchAll(/'((?:''|[^'])*)'/g)].map(e=>e[1].replace(/''/g,`'`)):[]},xn=e=>e.match(/\((\d+)\)/)?.[1]||``,Sn=e=>{let[,t=``,n=``]=e.match(/\((\d+)(?:\s*,\s*(\d+))?\)/)||[];return{precision:t,scale:n}},Cn=(e,t)=>mn(e,t).toLowerCase().replace(/\([^)]*\)/g,``).replace(/[`"]/g,``).replace(/\s+/g,` `).replace(/^int4$/,`integer`).replace(/^int8$/,`bigint`).replace(/^int2$/,`smallint`).replace(/^serial$/,`integer`).replace(/^bigserial$/,`bigint`).replace(/^smallserial$/,`smallint`).replace(/^character varying/,`varchar`).trim(),wn=(e,t,n)=>Cn(e,t)===Cn(e,n);function Tn(e,t,n,r){let[i,a]=(0,Q.useState)(null),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)(!1),u=(0,Q.useMemo)(()=>i?.kind===`column`&&e?.columns?.find(e=>e.name===i.columnName)||null,[e,i]),d=(0,Q.useMemo)(()=>u&&e?.foreign_keys?.find(e=>e.column===u.name)||null,[e,u]),f=(0,Q.useMemo)(()=>i?.kind===`index`&&e?.indexes?.find(e=>e.name===i.indexName)||null,[e,i]),p=(0,Q.useMemo)(()=>i?.kind===`check`&&e?.checks?.find(e=>e.name===i.checkName)||null,[e,i]);(0,Q.useEffect)(()=>{if(i?.kind===`addTable`){s({tableName:``,tableComment:``,columnName:`id`,columnType:`BIGINT`,characterLength:``,numericPrecision:``,numericScale:``,isNullable:!1,columnDefault:``,columnExtra:``,columnComment:``,enumValues:[],fkEnabled:!1,refTable:``,refColumn:``,fkConstraintName:``,fkOnDelete:`NO ACTION`,fkOnUpdate:`NO ACTION`,indexName:``,indexColumns:[],indexUnique:!1,indexAlgorithm:``,checkName:``,checkExpression:``});return}if(!e||!i){s(null);return}let t=i.kind===`column`?e.columns?.find(e=>e.name===i.columnName):null,n=t?e.foreign_keys?.find(e=>e.column===t.name):null,r=i.kind===`index`?e.indexes?.find(e=>e.name===i.indexName):null,a=i.kind===`check`?e.checks?.find(e=>e.name===i.checkName):null,o=Sn(yn(t));s({tableName:e.table_name||``,tableComment:e.comment??``,columnName:t?.name||``,columnType:yn(t),characterLength:String(t?.max_length||xn(yn(t))||``),numericPrecision:String(t?.numeric_precision||o.precision||``),numericScale:String(t?.numeric_scale||o.scale||``),isNullable:!!t?.is_nullable,columnDefault:sn(t?.column_default??``),columnExtra:t?.extra??``,columnComment:t?.comment??``,enumValues:bn(t?.enum_values),fkEnabled:!!n,refTable:n?.ref_table||``,refColumn:n?.ref_column||``,fkConstraintName:n?.constraint_name||``,fkOnDelete:n?.on_delete||`NO ACTION`,fkOnUpdate:n?.on_update||`NO ACTION`,indexName:r?.name||``,indexColumns:String(r?.column_name||``).split(`,`).map(e=>e.trim()).filter(Boolean),indexUnique:!!r?.is_unique,indexAlgorithm:String(r?.algorithm||``).toLowerCase(),checkName:a?.name||``,checkExpression:a?.expression||``})},[e,i]);let m=(0,Q.useMemo)(()=>!i||!o?!1:i.kind===`addTable`?!!(o.tableName.trim()&&o.columnName.trim()&&o.columnType.trim()):e?o.tableName!==e.table_name||o.tableComment!==(e.comment??``)?!0:i.kind===`addColumn`?!!(o.columnName.trim()&&o.columnType.trim()):i.kind===`addIndex`?!!(o.indexName.trim()&&o.indexColumns.length>0):i.kind===`addCheck`?!!o.checkExpression.trim():i.kind===`index`&&f?o.indexName!==f.name||o.indexUnique!==!!f.is_unique||o.indexAlgorithm!==String(f.algorithm||``).toLowerCase()||o.indexColumns.join(`,`)!==String(f.column_name||``):i.kind===`check`&&p?o.checkName!==p.name||o.checkExpression!==p.expression:i.kind!==`column`||!u?!1:o.columnName!==u.name||vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale)!==vn(r,yn(u),String(u.max_length||xn(yn(u))||``),String(u.numeric_precision||Sn(yn(u)).precision||``),String(u.numeric_scale||Sn(yn(u)).scale||``))||o.isNullable!==!!u.is_nullable||o.columnDefault!==sn(u.column_default??``)||o.columnExtra!==(u.extra??``)||o.columnComment!==(u.comment??``)||o.enumValues.join(`\0`)!==bn(u.enum_values).join(`\0`)||o.fkEnabled!==!!d||o.refTable!==(d?.ref_table||``)||o.refColumn!==(d?.ref_column||``)||o.fkConstraintName!==(d?.constraint_name||``)||o.fkOnDelete!==(d?.on_delete||`NO ACTION`)||o.fkOnUpdate!==(d?.on_update||`NO ACTION`):!1,[e,d,r,o,p,u,f,i]);return{target:i,draft:o,isDirty:m,isSaving:c,selectedColumn:u,selectedIndex:f,selectedCheck:p,referenceColumns:(0,Q.useMemo)(()=>(t.find(e=>e.table_name===o?.refTable)?.columns||[]).filter(e=>wn(r,o?.columnType||``,yn(e))),[r,o?.columnType,o?.refTable,t]),setDraft:s,editTable:()=>a({kind:`table`}),editColumn:e=>a({kind:`column`,columnName:e}),addColumn:()=>a({kind:`addColumn`}),addTable:()=>a({kind:`addTable`}),editIndex:e=>a({kind:`index`,indexName:e}),addIndex:()=>a({kind:`addIndex`}),editCheck:e=>a({kind:`check`,checkName:e}),addCheck:()=>a({kind:`addCheck`}),close:()=>a(null),save:(0,Q.useCallback)(async()=>{if(!(!i||!o||!m)){l(!0);try{await n({createTable:i.kind===`addTable`?{name:o.tableName,comment:o.tableComment,column:{name:o.columnName,type:vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale),is_nullable:o.isNullable,column_default:cn(o.columnType,o.columnDefault),extra:o.columnExtra,comment:o.columnComment,enum_values:o.enumValues}}:void 0,tableName:o.tableName,tableComment:o.tableComment,columnName:i.kind===`column`?i.columnName:i.kind===`addColumn`?`__new__`:void 0,column:i.kind===`column`||i.kind===`addColumn`?{name:o.columnName,type:vn(r,o.columnType,o.characterLength,o.numericPrecision,o.numericScale),is_nullable:o.isNullable,column_default:cn(o.columnType,o.columnDefault),extra:o.columnExtra,comment:o.columnComment,enum_values:o.enumValues}:void 0,foreignKey:i.kind===`column`||i.kind===`addColumn`?{enabled:o.fkEnabled,ref_table:o.refTable,ref_column:o.refColumn,constraint_name:o.fkConstraintName,on_delete:o.fkOnDelete,on_update:o.fkOnUpdate}:void 0,indexName:i.kind===`index`?i.indexName:i.kind===`addIndex`?`__new__`:void 0,index:i.kind===`index`||i.kind===`addIndex`?{name:o.indexName,columns:o.indexColumns,is_unique:o.indexUnique,algorithm:o.indexAlgorithm}:void 0,checkName:i.kind===`check`?i.checkName:i.kind===`addCheck`?`__new__`:void 0,check:i.kind===`check`||i.kind===`addCheck`?{name:o.checkName,expression:o.checkExpression}:void 0}),i.kind===`addTable`&&a(null),(i.kind===`addColumn`||i.kind===`column`)&&a({kind:`column`,columnName:o.columnName}),(i.kind===`addIndex`||i.kind===`index`)&&a({kind:`index`,indexName:o.indexName}),(i.kind===`addCheck`||i.kind===`check`)&&a({kind:`check`,checkName:o.checkName})}finally{l(!1)}}},[r,o,m,i,n])}}function En({expected:e,value:t,onChange:n}){return(0,$.jsxs)(`label`,{className:`block space-y-1.5 text-sm`,children:[(0,$.jsxs)(`span`,{children:[`Type `,(0,$.jsx)(`strong`,{className:`font-mono`,children:e}),` to confirm`]}),(0,$.jsx)(G,{value:t,onChange:e=>n(e.target.value),autoComplete:`off`})]})}function Dn({action:e,onCancel:t,onDeleteRecords:n,onDeleteStructure:r,confirmationTarget:i}){let[a,o]=(0,Q.useState)(``);return(0,Q.useEffect)(()=>o(``),[e]),e===`records`&&i?(0,$.jsx)(Ve,{open:!0,onOpenChange:e=>!e&&t(),children:(0,$.jsxs)(He,{size:`sm`,children:[(0,$.jsx)(Be,{children:(0,$.jsx)(Re,{children:`Delete Records`})}),(0,$.jsxs)(ze,{className:`space-y-3`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Selected records will be permanently deleted.`}),(0,$.jsx)(En,{expected:i,value:a,onChange:o})]}),(0,$.jsxs)(Le,{children:[(0,$.jsx)(Ie,{onClick:t,children:`Cancel`}),(0,$.jsx)(Ue,{className:`bg-destructive hover:bg-destructive/90`,disabled:a!==i,onClick:()=>n(a),children:`Delete`})]})]})}):(0,$.jsx)(We,{isOpen:e!==null,title:e===`records`?`Delete Records`:e===`column`?`Delete Column`:e===`check`?`Delete Check`:`Delete Index`,message:e===`records`?`Selected records will be permanently deleted.`:e===`column`?`This column and its data will be permanently deleted.`:e===`check`?`This check constraint will be permanently deleted.`:`This index will be permanently deleted.`,confirmText:`Delete`,onCancel:t,onConfirm:e===`records`?n:r})}function On({column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:o,allowPrimaryKey:s=!1,setDatePickerOpenColumn:c,setDraftRow:l}){let u=`record-field-${e}`,{enumValues:d,isBooleanColumn:f,isDateColumn:p,isDateTimeColumn:m,isEnumColumn:h,isLongColumn:g,isNumericColumn:_,isReadOnlyColumn:v}=t;if(v(e,s))return(0,$.jsx)(G,{id:u,value:String(r[e]??``),disabled:!0,className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``});if(h(e)){let t=d(e),n=String(r[e]??``);return(0,$.jsxs)(k,{value:n,onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(D,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(O,{children:n})}),(0,$.jsx)(E,{alignItemWithTrigger:!1,className:`max-h-64`,children:t.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]})}let b=a.get(e);if(b){let n=i[e]||[],a=r[e]??``,o=new Set(n.map(e=>String(e[b.ref_column]))),s=a!==``&&!o.has(String(a))?[{[b.ref_column]:a},...n]:n;return(0,$.jsxs)(k,{value:String(a),onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(D,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(O,{children:String(a)})}),(0,$.jsx)(E,{alignItemWithTrigger:!1,className:`max-h-64`,children:s.length===0?(0,$.jsx)(`div`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:`No parent records`}):s.map(e=>{let n=String(e[b.ref_column]),r=Object.keys(e).find(t=>t!==b.ref_column&&e[t]!==null&&e[t]!==void 0),i=r?`${n} - ${Xt(r,e[r],t)}`:n;return(0,$.jsx)(w,{value:n,className:`text-xs`,children:i},n)})})]})}if(f(e))return(0,$.jsx)(G,{id:u,type:`number`,min:0,max:1,step:1,value:r[e]??``,onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:`0 or 1`});if(g(e))return(0,$.jsx)(Xe,{id:u,value:r[e]??``,onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 min-h-16 resize-y font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``});if(p(e)||m(e)){let t=String(r[e]??``),i=$t(t);return(0,$.jsxs)(Ct,{className:`mt-1 gap-2 ${m(e)?`grid-cols-[minmax(0,1fr)_minmax(0,6.5rem)]`:``}`,children:[(0,$.jsx)(ut,{className:`min-w-0`,children:(0,$.jsxs)(xe,{open:n===e,onOpenChange:t=>c(t?e:null),children:[(0,$.jsx)(ye,{render:(0,$.jsxs)(y,{id:u,type:`button`,variant:`outline`,className:`h-8 w-full min-w-0 justify-between font-mono text-xs font-normal`,children:[(0,$.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 truncate`,children:[(0,$.jsx)(tt,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),i?Ze(i,`PPP`):`Select date`]}),(0,$.jsx)(N,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`})]})}),(0,$.jsx)(ve,{align:`start`,className:`w-auto overflow-hidden p-0`,children:(0,$.jsx)(te,{mode:`single`,selected:i,captionLayout:`dropdown`,defaultMonth:i,onSelect:t=>{if(!t)return;let n=en(t);l(t=>({...t,[e]:m(e)?`${n} ${Jt(t[e])}`:n})),c(null)},classNames:{month_caption:`flex justify-center px-2 pt-2`,caption_label:`pointer-events-none relative z-[1] inline-flex whitespace-nowrap text-sm font-medium leading-none`,dropdowns:`flex items-center gap-2`,dropdown_root:`relative flex h-8 min-w-24 flex-row items-center justify-center gap-2 rounded-md border bg-background px-3 text-sm font-medium shadow-sm [&>svg]:h-3.5 [&>svg]:w-3.5 [&>svg]:shrink-0 [&>svg]:text-muted-foreground`,dropdown:`absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0`}})})]})}),m(e)&&(0,$.jsxs)(ut,{className:`min-w-0`,children:[(0,$.jsx)(ft,{htmlFor:`${u}-time`,className:`sr-only`,children:`Time`}),(0,$.jsx)(G,{id:`${u}-time`,type:`time`,step:`1`,value:Jt(t),onChange:t=>{let n=t.target.value.length===5?`${t.target.value}:00`:t.target.value;l(t=>({...t,[e]:`${qt(t[e])||en(new Date)} ${n}`}))},className:`h-8 min-w-0 bg-background px-2 font-mono text-xs`})]})]})}return(0,$.jsx)(G,{id:u,type:_(e)?`number`:`text`,value:String(r[e]??``),onChange:t=>l(n=>({...n,[e]:t.target.value})),className:`mt-1 h-8 font-mono text-xs`,placeholder:o?.[e]===null?`NULL`:``})}function kn({activeTable:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,isRecordDirty:o,isCreatingRecord:s,isSavingRecord:c,primaryKeyColumns:l,records:u,selectedRow:d,setDatePickerOpenColumn:p,setDetailsOpen:m,setDraftRow:h,onCancelCreateRecord:g,onSubmitCreateRecord:_,onSubmitRecord:v,warnUnsaved:b}){let x=s?{}:d;return(0,$.jsx)(`aside`,{className:`w-80 shrink-0 border-l bg-background`,children:(0,$.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b p-4`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(`h3`,{className:`truncate text-sm font-medium`,children:s?`New Record`:d?`Record Details`:`Table Information`}),(0,$.jsx)(`p`,{className:`truncate text-xs text-muted-foreground`,children:e||`No table selected`})]}),(0,$.jsx)(y,{variant:`ghost`,size:`icon-xs`,onClick:()=>b()&&m(!1),title:`Close details`,children:(0,$.jsx)(f,{className:`h-3.5 w-3.5`})})]}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(d||s)&&u?(0,$.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-2 overflow-y-auto p-3`,children:[u.columns.filter(e=>!s||t.isInsertableColumn(e)).map(e=>(0,$.jsxs)(`div`,{className:`rounded-md border px-3 py-2`,children:[(0,$.jsx)(`label`,{className:`truncate font-mono text-xs text-muted-foreground`,htmlFor:`record-field-${e}`,children:e}),(0,$.jsx)(On,{column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:x,allowPrimaryKey:s,setDatePickerOpenColumn:p,setDraftRow:h})]},e)),l.length===0&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`This table has no primary key, so record editing is disabled.`})]}),(0,$.jsxs)(`div`,{className:`sticky bottom-0 grid grid-cols-2 gap-2 border-t bg-background p-3`,children:[(0,$.jsx)(y,{variant:`outline`,onClick:()=>s?g():h(Object.fromEntries(u.columns.map(e=>[e,Zt(e,d?.[e],t)]))),disabled:!s&&!o||c,children:`Cancel`}),(0,$.jsx)(y,{onClick:s?_:v,disabled:c||!o||!s&&l.length===0,children:`Submit`})]})]}):(0,$.jsx)(`div`,{className:`p-3`,children:(0,$.jsx)(`div`,{className:`divide-y rounded-md border`,children:[[`Data size`,Ht(u?.tableInfo?.dataSize)],[`Index size`,Ht(u?.tableInfo?.indexSize)],[`Total size`,Ht(u?.tableInfo?.totalSize)]].map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-3 px-3 py-2 text-sm`,children:[(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,$.jsx)(`span`,{className:`font-mono text-xs`,children:t})]},e))})})})]})})}function An({columnOptions:e,filters:t,addFilter:n,applyFilter:r,applyFilters:i,clearFilters:a,removeFilter:o,setShowFilters:s,updateFilter:c,warnUnsaved:l}){return(0,$.jsx)(`div`,{className:`shrink-0 border-b bg-muted/10 px-3 py-2`,children:(0,$.jsxs)(`div`,{className:`space-y-1.5`,children:[t.map(i=>{let a=i.operator===`IS`||i.operator===`IS NOT`,s=i.operator===`BETWEEN`||i.operator===`NOT BETWEEN`;return(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,$.jsx)(K,{checked:i.enabled,onCheckedChange:e=>c(i.id,{enabled:e}),"aria-label":`Enable filter`}),(0,$.jsxs)(k,{value:i.column,onValueChange:e=>e&&c(i.id,{column:e}),children:[(0,$.jsx)(D,{className:`h-8 min-w-32 max-w-48 text-xs`,children:(0,$.jsx)(O,{children:i.column||`Column`})}),(0,$.jsx)(E,{children:e.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsxs)(k,{value:i.operator,onValueChange:e=>e&&c(i.id,{operator:e}),children:[(0,$.jsx)(D,{className:`h-8 w-36 text-xs`,children:(0,$.jsx)(O,{children:i.operator})}),(0,$.jsx)(E,{children:Vt.map(e=>(0,$.jsx)(w,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsx)(G,{value:a?`NULL`:i.value,disabled:a,onChange:e=>c(i.id,{value:e.target.value}),placeholder:i.operator.includes(`IN`)?`a, b, c`:`Value`,className:`h-8 min-w-28 flex-1 text-xs`}),s&&(0,$.jsx)(G,{value:i.value2||``,onChange:e=>c(i.id,{value2:e.target.value}),placeholder:`And`,className:`h-8 min-w-28 flex-1 text-xs`}),(0,$.jsx)(y,{variant:`secondary`,size:`sm`,className:`h-8`,onClick:()=>l()&&r(i),children:`Apply`}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t.length<=1,onClick:()=>o(i.id),title:`Remove filter`,children:(0,$.jsx)(me,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,onClick:()=>n(i.column||e[0]||``),title:`Add filter`,children:(0,$.jsx)(Se,{className:`h-3.5 w-3.5`})})]},i.id)}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[(0,$.jsx)(y,{variant:`ghost`,size:`sm`,className:`h-8`,onClick:()=>{l()&&(a(),s(!1))},children:`Clear`}),(0,$.jsx)(y,{size:`sm`,className:`h-8`,onClick:()=>l()&&i(t),children:`Apply All`})]})]})})}function jn({activeView:e,page:t,records:n,tableColumnCount:r,totalPages:i,warnUnsaved:a,onAddColumn:o,onAddIndex:s,onAddCheck:c,onInfo:l,onNextPage:u,onPrevPage:f,onViewChange:p}){return(0,$.jsxs)(`div`,{className:`grid grid-cols-[1fr_auto_1fr] items-center gap-2 px-4 py-2 border-t bg-muted/10 shrink-0`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1 justify-self-start`,children:[[`data`,`structure`].map(t=>(0,$.jsx)(y,{variant:e===t?`secondary`:`ghost`,size:`sm`,className:`h-7 px-3 capitalize`,onClick:()=>p(t),children:t},t)),e===`structure`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:o,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Column`]}),(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:s,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Index`]}),(0,$.jsxs)(y,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:c,children:[(0,$.jsx)(Se,{className:`mr-1 h-3.5 w-3.5`}),`Check`]}),(0,$.jsx)(y,{variant:`ghost`,size:`icon-xs`,onClick:l,title:`Show table SQL`,children:(0,$.jsx)(ce,{className:`h-4 w-4`})})]})]}),(0,$.jsx)(`span`,{className:`text-xs text-muted-foreground justify-self-center`,children:e===`structure`?`${r} columns`:n&&n.total>0?`${((t||1)-1)*(n.pageSize||50)+1}-${Math.min((t||1)*(n.pageSize||50),Number(n.total))} of ${n.total} rows`:`0 rows`}),e===`data`&&n&&(0,$.jsxs)(`div`,{className:`flex items-center gap-1 justify-self-end`,children:[(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t<=1,onClick:()=>a()&&f(),children:(0,$.jsx)(at,{className:`h-4 w-4`})}),(0,$.jsx)(y,{variant:`outline`,size:`icon-xs`,disabled:t>=i,onClick:()=>a()&&u(),children:(0,$.jsx)(d,{className:`h-4 w-4`})})]})]})}function Mn({className:e,...t}){return(0,$.jsx)(`div`,{"data-slot":`button-group`,className:P(`inline-flex items-center rounded-lg shadow-xs [&>[data-slot=button]:not(:first-child)]:rounded-l-none [&>[data-slot=button]:not(:first-child)]:border-l-0 [&>[data-slot=button]:not(:last-child)]:rounded-r-none`,e),...t})}var Nn=e=>e===`mysql`,Pn=e=>e===`postgresql`,Fn=(e,t)=>Nn(e)?`\`${t.replace(/`/g,"``")}\``:`"${t.replace(/"/g,`""`)}"`,In=e=>e.replace(/[^A-Za-z0-9_.-]+/g,`_`),Ln=e=>e===`tab`?`Tab`:e===`;`?`Semicolon (;)`:`Comma (,)`,Rn=e=>e===`,`?`Comma decimal (,)`:`Dot decimal (.)`;function zn(e,t){return e==null?``:t===`,`&&typeof e==`number`&&!Number.isInteger(e)?String(e).replace(`.`,`,`):String(e)}function Bn(e,t,n){let r=zn(e,n);return/["\n\r]/.test(r)||r.includes(t)?`"${r.replace(/"/g,`""`)}"`:r}function Vn(e){return e==null?`NULL`:typeof e==`number`?String(e):typeof e==`boolean`?e?`TRUE`:`FALSE`:`'${String(e).replace(/'/g,`''`)}'`}async function Hn(e){let t=window.CompressionStream;if(!t)throw Error(`Gzip is not supported in this browser`);let n=e.stream().pipeThrough(new t(`gzip`));return new Response(n).blob()}function Un(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function Wn({connectionId:e,dbType:t,table:n,tables:r,exportTables:i,exportRows:a,exportSelectedRows:o,label:s=`Export`,mode:c=`menu`,buttonClassName:l=`h-8 px-2`,disabled:u=!1,onDeleteTables:d,onMutateTables:f}){let x=n.table_name,j=(0,Q.useMemo)(()=>(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),[n]),[M,N]=(0,Q.useState)(null),[P,ee]=(0,Q.useState)(`csv`),[I,L]=(0,Q.useState)(j),[R,z]=(0,Q.useState)(`,`),[B,V]=(0,Q.useState)(`.`),[te,re]=(0,Q.useState)(!0),[H,ae]=(0,Q.useState)(!0),[U,oe]=(0,Q.useState)(!1),[se,ce]=(0,Q.useState)(`${x}_copy`),[ue,fe]=(0,Q.useState)(!1),[me,he]=(0,Q.useState)(!1),[ge,_e]=(0,Q.useState)(!1),[W,ve]=(0,Q.useState)(!1),[ye,be]=(0,Q.useState)(``),[xe,Se]=(0,Q.useState)(null),Ce=i?.length?i:[n],Ee=Ce.length===1,De=Nn(t)||Pn(t),q=async t=>{let n=1,r=[],i=[];for(;;){let a=await Te(`/api/catalogs/${e}/records`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:t,page:n,pageSize:200})}),o=await a.json();if(!a.ok)throw Error(o.error||`Failed to fetch records`);if(i=(o.columns||i).map(String),r.push(...o.rows||[]),r.length>=Number(o.total||r.length))return{columns:i,rows:r};n+=1}},Oe=async n=>{let r=n.table_name,i=Ee?I:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),a=xe?{rows:xe,columns:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean)}:H||P!==`sql`?await q(r):{rows:[],columns:i},o=i.length?i:a.columns;if(P===`json`)return JSON.stringify(a.rows.map(e=>Object.fromEntries(o.map(t=>[t,e[t]]))),null,2);let s=R===`tab`?` `:R;if(P===`csv`)return[o.join(s),...a.rows.map(e=>o.map(t=>Bn(e[t],s,B)).join(s))].join(`
|
|
2
2
|
`);let c=[];if(te){let t=await Te(`/api/catalogs/${e}/structure/sql`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({table:r})}),n=await t.json();if(!t.ok)throw Error(n.error||`Failed to fetch table SQL`);c.push(n.sql)}if(H)for(let e of a.rows)c.push(`INSERT INTO ${Fn(t,r)} (${o.map(e=>Fn(t,e)).join(`, `)}) VALUES (${o.map(t=>Vn(e[t])).join(`, `)});`);return c.join(`
|
|
3
3
|
`)},J=e=>{Se(e??a??null),L(j),N(`export`)},Y=async()=>{try{if(ve(!0),P===`json`&&!Ee){let e=await Promise.all(Ce.map(async e=>{let t=await q(e.table_name);return[e.table_name,t.rows]})),t=`selected_tables.json`;Un(new Blob([JSON.stringify(Object.fromEntries(e),null,2)],{type:`application/json;charset=utf-8`}),t),F.success(`Export saved to your browser Downloads folder: ${t}`),N(null);return}let e=await Promise.all(Ce.map(Oe)),t=P===`sql`?`sql`:P,n=new Blob([e.join(`
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{d as r,u as i}from"./chunk-BV7QT456-CCzugQp2.js";import{f as a,m as o,p as s}from"./downloadSVG-CM8RNd8w.js";import{n as c}from"./api-D87lw-98.js";import{a as l}from"./WorkspaceProvider-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{d as r,u as i}from"./chunk-BV7QT456-CCzugQp2.js";import{f as a,m as o,p as s}from"./downloadSVG-CM8RNd8w.js";import{n as c}from"./api-D87lw-98.js";import{a as l}from"./WorkspaceProvider-rlRR_L6Q.js";import{n as u}from"./WorkspaceContext-O7njKDwj.js";import{L as d,Pn as f,c as p,i as ee,l as te,o as m}from"./index-DXkZu2zv.js";import{a as h}from"./erd-edge-style-DPquCU09.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./DataViewerModeToolbar-hw8y9ucY.js";import{t as S}from"./ProjectFileTabs-DMXL4Osh.js";var C=e(t(),1),w=n();function T(){let{id:e}=i(),[t,n]=r(),[T,E]=(0,C.useState)(null),[D,O]=(0,C.useState)(!0),[k,A]=(0,C.useState)(null),[ne,re]=(0,C.useState)(null),[ie,j]=(0,C.useState)(0),[M,N,P]=s([]),[F,I,L]=a([]),[R,z]=(0,C.useState)(null),B=(0,C.useRef)({x:0,y:0,zoom:1}),V=(0,C.useRef)(null),H=(0,C.useRef)(null),{setViewport:U,getNodes:W}=o(),{handleExportImage:G}=l(),{setBreadcrumbLabel:K}=u(),q=t.get(`tab`)||`data`,J=(0,C.useRef)(new Set([`data`]));J.current.add(q);let Y=Number(T?.catalog_id);V.current=T;let X=(0,C.useCallback)(e=>{n(t=>{let n=new URLSearchParams(t);return n.set(`tab`,e),n},{replace:!0})},[n]),Z=(0,C.useCallback)(async()=>{if(e){O(!0);try{let t=ee(e);if(!t){let n=await c(`/api/db-clients/${encodeURIComponent(e)}`);if(t=await n.json(),!n.ok)throw Error(t.error||`Failed to load DB Client`);p(t)}E(t),K(t.name);let n=Number(t.catalog_id);if(!n){N([]),I([]);return}let r=m(n);if(!r){let e=await c(`/api/catalogs/${n}/schema`,{method:`POST`});if(r=await e.json(),!e.ok)throw Error(r.error||`Failed to load database schema`);te(n,r)}let i=y(r.schema||[],t.data);N(i.nodes),I(i.edges),A(r.dbType||null);let a=t.data?.viewport;a&&(B.current=a,requestAnimationFrame(()=>U(a,{duration:0})))}finally{O(!1)}}},[e,K,I,N,U]);(0,C.useEffect)(()=>{let e=setTimeout(()=>{Z().catch(()=>E(null))});return()=>{clearTimeout(e),K(null)}},[Z,K]),(0,C.useEffect)(()=>{let e=e=>{re(e.detail?.table||null),j(e=>e+1),X(`query`)};return window.addEventListener(`db-connect-open-query`,e),()=>window.removeEventListener(`db-connect-open-query`,e)},[X]);let Q=(0,C.useCallback)(async(e=B.current,t=W(),n=F)=>{let r=V.current;if(!r)return;let i=g(t,e,r.data,n);E(e=>e&&{...e,data:i}),p({...r,data:i}),await c(`/api/db-clients/${encodeURIComponent(r.uid||r.id)}/layout`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({data:i})})},[F,W]),$=(0,C.useCallback)(()=>{H.current&&clearTimeout(H.current),H.current=setTimeout(()=>{H.current=null,Q()},300)},[Q]),ae=(0,C.useCallback)((e,t)=>{B.current=t},[]),oe=(0,C.useCallback)((e,t)=>{B.current=t,$()},[$]);(0,C.useEffect)(()=>()=>{H.current&&(clearTimeout(H.current),H.current=null,Q())},[e,Q]);let se=(0,C.useCallback)(()=>{let e=h(M,F);N(e),Q(B.current,e)},[F,M,Q,N]),ce=(0,C.useCallback)(e=>{let t=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),n=F.map(n=>n.id===e?{...n,sourceHandle:t(n.sourceHandle),targetHandle:t(n.targetHandle)}:n);I(n),Q(B.current,W(),n)},[F,W,Q,I]);return D?(0,w.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Loading DB Client…`}):T?(0,w.jsxs)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:[(0,w.jsx)(S,{currentView:`db-client`,currentFile:T}),(0,w.jsx)(x,{activeMode:q,dbType:k,onModeChange:X}),Y?(0,w.jsx)(`div`,{className:q===`data`?`contents`:`hidden`,children:(0,w.jsx)(b,{connectionId:Y,stateKey:`${T.uid}:${Y}`,onDbTypeChange:A})}):null,J.current.has(`query`)&&Y?(0,w.jsx)(`div`,{className:q===`query`?`contents`:`hidden`,children:(0,w.jsx)(v,{connectionId:Y,dbClientId:Number(T.id),initialTable:ne,openNonce:ie})}):null,J.current.has(`erd`)?(0,w.jsxs)(`div`,{className:q===`erd`?`contents`:`hidden`,children:[(0,w.jsx)(_,{nodes:M,edges:F,setNodes:N,setEdges:I,onNodesChange:P,onEdgesChange:L,onConnect:()=>{},onNodeClick:()=>{},onPaneClick:()=>{},onMove:ae,onEdgeClick:(e,t)=>z(t.id),addEntity:()=>{},handleExportSQL:()=>{},handleExportImage:()=>G(T.name),onAutoLayout:se,isReadOnly:!0,isDbClient:!0,sourceConnectionId:Y,onEdgeReconnect:e=>{Q(B.current,W(),e)},onNodeDragStop:$,onMoveEnd:oe,isLoading:D}),(0,w.jsx)(d,{isOpen:!!R,onOpenChange:e=>{e||z(null)},selectedEdge:F.find(e=>e.id===R)||null,nodes:M,handleEdgeUpdate:()=>{},handleEdgeFlip:ce,deleteEdge:()=>{},moveOnly:!0})]}):null]}):(0,w.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center text-muted-foreground`,children:[(0,w.jsx)(f,{className:`mb-3 size-10 opacity-40`}),`DB Client not found`]})}export{T as DbClientEditorRoute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{c as r,d as i,u as a}from"./chunk-BV7QT456-CCzugQp2.js";import"./WorkspaceProvider-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{c as r,d as i,u as a}from"./chunk-BV7QT456-CCzugQp2.js";import"./WorkspaceProvider-rlRR_L6Q.js";import{n as o}from"./WorkspaceContext-O7njKDwj.js";import{Pn as s}from"./index-DXkZu2zv.js";import{a as c}from"./erd-edge-style-DPquCU09.js";import{i as l,n as u,r as ee,t as d}from"./DataViewerModeToolbar-hw8y9ucY.js";import{t as f}from"./ProjectFileTabs-DMXL4Osh.js";var p=e(t(),1),m=n();function h(){let e=o(),{id:t}=a(),n=r(),{nodes:h,edges:g,setNodes:_,isPublicView:v,publicData:y,activeDiagramId:b,activeDiagram:x,onNodesChange:te,onEdgesChange:ne,onConnect:re,selectedNodeId:ie,addEntity:ae,undo:oe,redo:S,canUndo:C,canRedo:w,takeSnapshot:T,onNodeDragStop:E,onMoveEnd:D,handleNodeClick:O,handleNodeDoubleClick:k,handleEdgeClick:A,handlePaneClick:j,handleMove:M,handleWorkspaceExportSQL:N,handleWorkspaceExportImage:P,handleOpenImportModal:F,viewportRef:I,saveDiagram:L,triggerDebouncedSync:R,isERDItemLoading:z,handleDiagramSelect:B,isTeamScopeRefreshing:V,pendingErdDiffTrigger:se,extractColumnIdFromHandle:H,getRelationKey:U,dedupeEdgesByRelation:W}=e,G=(0,p.useRef)(!1),[K,q]=i(),[ce,le]=(0,p.useState)(null),[ue,de]=(0,p.useState)(0),[fe,pe]=(0,p.useState)(null),J=(0,p.useMemo)(()=>!v&&(v?y:x)?.source_type===`production_db`,[v,y,x]);(0,p.useEffect)(()=>{!J||!x||n(`/db-client/${x.uid||x.id}`,{replace:!0})},[x,J,n]);let Y=K.get(`tab`)||(J?`data`:`erd`),X=(0,p.useCallback)(e=>{q(t=>{let n=new URLSearchParams(t);return n.set(`tab`,e),n},{replace:!0})},[q]);(0,p.useEffect)(()=>{J&&!K.get(`tab`)&&q(e=>{let t=new URLSearchParams(e);return t.set(`tab`,`data`),t},{replace:!0})},[J,q]),(0,p.useEffect)(()=>{let e=e=>{le(e.detail?.table||null),de(e=>e+1),X(`query`)};return window.addEventListener(`db-connect-open-query`,e),()=>window.removeEventListener(`db-connect-open-query`,e)},[X]);let me=(0,p.useCallback)(()=>{if(!h||h.length===0)return;let e=c(h,g);T?.(h,g),_(e),L(e,g,I.current).then(()=>R()).catch(e=>console.error(`Error saving ERD auto-layout:`,e))},[h,g,_,T,L,R,I]);(0,p.useEffect)(()=>{if(!(v||V||!t)&&!G.current){if(String(b)===t){G.current=!0;return}b||(G.current=!0,B(t))}},[t,b,v,V,B]);let Z=(0,p.useMemo)(()=>{let e=(v?y:x)?.source_connection_id;return e==null?void 0:Number(e)},[v,y,x]);if(!v&&!b)return t&&!G.current?(0,m.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,m.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,m.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading diagram...`})]}):(0,m.jsx)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:(0,m.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Select a diagram to view`})});let Q=v?y:x,he=v||J,$=`${Q?.uid||Q?.id||``}:${Z||``}`;return!Q&&!v&&!z?(0,m.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,m.jsx)(s,{className:`w-12 h-12 text-muted-foreground/40 mb-4`}),(0,m.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Diagram not found`}),(0,m.jsx)(`p`,{className:`text-xs text-muted-foreground/60 mt-1`,children:`This diagram may have been deleted or is no longer available.`})]}):!Q&&!v?(0,m.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,m.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,m.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading diagram...`})]}):J?(0,m.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Opening DB Client…`}):(0,m.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,m.jsx)(f,{currentView:J?`db-client`:`erd`}),J&&!v&&(0,m.jsx)(d,{activeMode:Y,dbType:fe,onModeChange:X}),Y===`data`&&J&&!v&&Z?(0,m.jsx)(ee,{connectionId:Z,stateKey:$,onDbTypeChange:pe},$):Y===`query`&&J&&!v&&Z&&Q?.id?(0,m.jsx)(u,{connectionId:Z,dbClientId:Number(Q.id),initialTable:ce,openNonce:ue}):(0,m.jsx)(l,{isLoading:z,nodes:h,edges:g,setNodes:e.setNodes,setEdges:e.setEdges,onNodesChange:te,onEdgesChange:ne,onConnect:re,onNodeClick:O,onNodeDoubleClick:k,onEdgeClick:A,onPaneClick:j,onMove:M,addEntity:ae,onImportSQL:F,onAutoLayout:me,handleExportSQL:N,handleExportImage:P,isReadOnly:he,isDbClient:J,sourceConnectionId:Z,undo:oe,redo:S,canUndo:C,canRedo:w,takeSnapshot:T,selectedNodeId:ie,onNodeDragStop:E,onMoveEnd:D,initialViewport:I.current,saveDiagram:L,triggerDebouncedSync:R,pendingErdDiffTrigger:se,extractColumnIdFromHandle:H,getRelationKey:U,dedupeEdgesByRelation:W},v?y?.id:b)]})}export{h as DiagramEditorRoute};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DrawingsView-
|
|
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{u as i}from"./chunk-BV7QT456-CCzugQp2.js";import{t as a}from"./image-vqz7pCPE.js";import"./WorkspaceProvider-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DrawingsView-5KEYsR53.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/index-DXkZu2zv.js","assets/react-dom-CGnP4YFq.js","assets/preload-helper-Czpn1I53.js","assets/chunk-BV7QT456-CCzugQp2.js","assets/downloadSVG-CM8RNd8w.js","assets/esm-B1WURL1q.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/with-selector-v0oZM3OS.js","assets/vanilla--C5Lp_AM.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/dialog-BDJ53r24.js","assets/useCompositeItem-dSQJByV3.js","assets/floating-ui.utils-DrtUanoU.js","assets/utils-TcK2FSyg.js","assets/createLucideIcon-CyJfQrak.js","assets/select-Bbn-kjXq.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/check-DcrFpa6g.js","assets/input-Cr-mF_hd.js","assets/dist-DDYEjsV2.js","assets/link-2-DBo-eQZM.js","assets/arrow-left-sRwyfx9m.js","assets/triangle-alert-Hn6Bso_Y.js","assets/wand-sparkles-QRKwIO4L.js","assets/copy-BasccFFL.js","assets/chatUtils-l06n4Zcf.js","assets/minus-DU5tWN1g.js","assets/popover-DrHvAr7i.js","assets/search-hNBtHxSg.js","assets/plus-CSlTmvRo.js","assets/trash-2-eV2xsHmQ.js","assets/api-D87lw-98.js","assets/card-Dy6p8t6g.js","assets/checkbox-Tsi3FADL.js","assets/table-DCsJJ7Zs.js","assets/note-importer-Bp6Qn9bq.js","assets/image-compression-COYPhRs3.js","assets/WorkspaceProvider-rlRR_L6Q.js","assets/useAuth-B8-lFzUV.js","assets/dist-js-DXG5pDMi.js","assets/core-DNaw6KYU.js","assets/WorkspaceContext-O7njKDwj.js","assets/ConfirmModal-B_5qT1GL.js","assets/label-Co-it7VP.js","assets/textarea-DbECrx_E.js","assets/extends-CvVTau-c.js","assets/index-CGy_9s9_.css","assets/ExcalidrawEditor-DlyNls5E.js","assets/Combination-Eg-EHG2n.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{u as i}from"./chunk-BV7QT456-CCzugQp2.js";import{t as a}from"./image-vqz7pCPE.js";import"./WorkspaceProvider-rlRR_L6Q.js";import{n as o}from"./WorkspaceContext-O7njKDwj.js";import{t as s}from"./ProjectFileTabs-DMXL4Osh.js";var c=e(t(),1),l=n(),u=c.lazy(()=>r(()=>import(`./DrawingsView-5KEYsR53.js`).then(e=>({default:e.DrawingsView})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53])));function d(){let e=o(),{id:t}=i(),{activeDrawing:n,activeDrawingId:r,saveDrawing:d,handleDrawingChange:f,deleteDrawing:p,isPublicView:m,isLoading:h,isDrawingItemLoading:g,handleDrawingSelect:_}=e,v=(0,c.useRef)(!1);return(0,c.useEffect)(()=>{if(!(m||!t)&&!v.current){if(String(r)===t){v.current=!0;return}r||(v.current=!0,_(t))}},[t,r,m,_]),!m&&!r?t&&!v.current?(0,l.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,l.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,l.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading drawing...`})]}):(0,l.jsx)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:(0,l.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Select a drawing to view`})}):!n&&!g?(0,l.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,l.jsx)(a,{className:`w-12 h-12 text-muted-foreground/40 mb-4`}),(0,l.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Drawing not found`}),(0,l.jsx)(`p`,{className:`text-xs text-muted-foreground/60 mt-1`,children:`This drawing may have been deleted or is no longer available.`})]}):n?(0,l.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,l.jsx)(s,{currentView:`drawings`}),(0,l.jsx)(c.Suspense,{fallback:(0,l.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,l.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,l.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,l.jsx)(`span`,{className:`text-xs text-muted-foreground/60 animate-pulse`,children:`Loading drawing...`})]})}),children:(0,l.jsx)(u,{isLoading:g,activeDrawingId:m?null:r,activeDrawing:n,saveDrawing:d,handleDrawingChange:f,deleteDrawing:p,isReadOnly:m})})]}):(0,l.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,l.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,l.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading drawing...`})]})}export{d as DrawingEditorRoute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{en as r}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{en as r}from"./index-DXkZu2zv.js";import i from"./ExcalidrawEditor-DlyNls5E.js";var a=e(t(),1),o=n(),s=a.memo(({activeDrawingId:e,activeDrawing:t,saveDrawing:n,handleDrawingChange:a,deleteDrawing:s,isReadOnly:c=!1,isLoading:l=!1})=>l&&!t?(0,o.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,o.jsx)(r,{className:`w-6 h-6 text-primary animate-spin`}),(0,o.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Opening drawing...`})]}):t?(0,o.jsx)(`div`,{className:`flex-1 border rounded-xl overflow-hidden bg-background`,children:(0,o.jsx)(i,{drawing:t,onSave:n,onChange:a,onDelete:s,isReadOnly:c},e)}):null);export{s as DrawingsView};
|