erdbpro 3.4.4 → 3.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AdminRoute-DsqESu86.js → AdminRoute-DrYi0_XF.js} +2 -2
- package/dist/assets/{Combination-CBqK2WAU.js → Combination-DBeRPSUX.js} +1 -1
- package/dist/assets/{DataViewerModeToolbar-BU6kDj47.js → DataViewerModeToolbar-DnGcPEs4.js} +1 -1
- package/dist/assets/{DbClientEditorRoute-BPkxDlEV.js → DbClientEditorRoute-Bh_OaDEN.js} +1 -1
- package/dist/assets/{DiagramEditorRoute-b4Ig6As2.js → DiagramEditorRoute-Bw_onGfJ.js} +1 -1
- package/dist/assets/{DrawingEditorRoute-D5qz16fk.js → DrawingEditorRoute-C4BSj3Ah.js} +2 -2
- package/dist/assets/{DrawingsView-D6jqtkJo.js → DrawingsView-D0eNZF8l.js} +1 -1
- package/dist/assets/{EntityNode-Cki4Jhtp.js → EntityNode-BubcTPns.js} +1 -1
- package/dist/assets/{ExcalidrawEditor-TMvfpKwf.js → ExcalidrawEditor-eQe4pyA3.js} +8 -8
- package/dist/assets/{FlowchartEditorRoute-CwXZOk29.js → FlowchartEditorRoute-EVt67UAs.js} +1 -1
- package/dist/assets/{FlowchartView-BFDLbzoI.js → FlowchartView-BDDl2HRQ.js} +1 -1
- package/dist/assets/{NoteEditorRoute-1iyXm69g.js → NoteEditorRoute-KduExmWL.js} +2 -2
- package/dist/assets/{NotesCompanionPane-ZAIDpKhe.js → NotesCompanionPane-Dgymv75J.js} +2 -2
- package/dist/assets/{NotesView-UWK1NzH3.js → NotesView-DZLeeonI.js} +3 -3
- package/dist/assets/{ProjectFileTabs-CnNVuuxZ.js → ProjectFileTabs-DNmVwnNp.js} +1 -1
- package/dist/assets/{TrashView-DKVlHc8k.js → TrashView-DodCb2d-.js} +1 -1
- package/dist/assets/{WorkspaceProvider-BFt1fLnH.js → WorkspaceProvider-BKu0LKCS.js} +3 -3
- package/dist/assets/{abnfDiagram-N423BO3Z-CRhYhlyn.js → abnfDiagram-N423BO3Z-BIaHzJSW.js} +1 -1
- package/dist/assets/{ar-SA-G6X2FPQ2-CiROUGDv.js → ar-SA-G6X2FPQ2-CG4gXaCk.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-Bszvbsiy.js → architectureDiagram-T3A2C74G-CiqSC_06.js} +1 -1
- package/dist/assets/{az-AZ-76LH7QW2-BoY22mYB.js → az-AZ-76LH7QW2--jJJqvOX.js} +1 -1
- package/dist/assets/{bg-BG-XCXSNQG7-BfSTkttr.js → bg-BG-XCXSNQG7-5KB8b4-1.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-DY0FcgGi.js → blockDiagram-VBNYF7ZC-DVnzKjMe.js} +1 -1
- package/dist/assets/{bn-BD-2XOGV67Q-BtArxgmC.js → bn-BD-2XOGV67Q-CSVJMRsA.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-BeXLC2Fp.js → c4Diagram-5PPSVZJV-DgFibHYM.js} +1 -1
- package/dist/assets/{ca-ES-6MX7JW3Y-CEOeq30Y.js → ca-ES-6MX7JW3Y-C6W3PhTR.js} +1 -1
- package/dist/assets/channel-DRYJfrrf.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-BrABFCRg.js → chunk-2GRJ4B5K-BfJo-pSq.js} +1 -1
- package/dist/assets/{chunk-4I5QYGJK-rnMKF4Yp.js → chunk-4I5QYGJK-Bk5sydqb.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-DfCjXD_8.js → chunk-5RXB4S5H-DO-MIcW8.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-XrL0WVCh.js → chunk-6Q2QTUOP-CJO9T2Bg.js} +1 -1
- package/dist/assets/{chunk-7Z6QIM7H-C76Kvofr.js → chunk-7Z6QIM7H-wPvC3972.js} +1 -1
- package/dist/assets/{chunk-EIO257PC-DLzT_bHO.js → chunk-EIO257PC-BcR-Rmn-.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-DB-q8Pjx.js → chunk-GF5L2VYU-Ck5ix3h2.js} +1 -1
- package/dist/assets/{chunk-I66GZJ75-BElJmWk6.js → chunk-I66GZJ75-BAPujJrX.js} +1 -1
- package/dist/assets/{chunk-JQJVKLGR-CcLom7yx.js → chunk-JQJVKLGR-B-Y010j-.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-CijZRlin.js → chunk-KBJHAD2P-DwvdQHWQ.js} +1 -1
- package/dist/assets/{chunk-NSK5VX7P-BgGi-QUV.js → chunk-NSK5VX7P-BQcxfnS7.js} +1 -1
- package/dist/assets/{chunk-QR6OTTB3-PPOImnQe.js → chunk-QR6OTTB3-Bu6w4SAv.js} +1 -1
- package/dist/assets/{chunk-UBXNYLIW-DCkgIwAO.js → chunk-UBXNYLIW-Bg0ANHdr.js} +1 -1
- package/dist/assets/{chunk-W5SLKNZC-DsQvkmTJ.js → chunk-W5SLKNZC-WKiLOi7m.js} +1 -1
- package/dist/assets/{chunk-WRU74C26-CIYOFIRf.js → chunk-WRU74C26-DPaj0R57.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-BIX50rl-.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-BIX50rl-.js +1 -0
- package/dist/assets/{cs-CZ-2BRQDIVT-DXGAPl52.js → cs-CZ-2BRQDIVT-D5UyiAfP.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-CMoNLYRc.js → cynefinDiagram-MW4NZA55-BmAPgFC3.js} +1 -1
- package/dist/assets/{da-DK-5WZEPLOC-BYm2m-qs.js → da-DK-5WZEPLOC-DzEZP48n.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-CzwDhr_E.js → dagre-VZM6K2ZE-CxYfeVya.js} +1 -1
- package/dist/assets/{de-DE-XR44H4JA-Cj6FS0f3.js → de-DE-XR44H4JA-DjuR_7Bi.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-DWOyz22F.js → diagram-7IWD3JNH-B5s4gGUD.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-CB8eQU5c.js → diagram-B4RE2ZJO-CxwFiZ8o.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-SyCyf0e1.js → diagram-LBJQPF4R-pOUu0uVk.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-D4RAD4ph.js → diagram-Q27KOJAE-DabrQjsP.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-QHDbFwLp.js → diagram-UB23O5K3-BSE4nJMe.js} +1 -1
- package/dist/assets/{dist-Bbp_4vOv.js → dist-BG5dNAT3.js} +4 -4
- package/dist/assets/{ebnfDiagram-BXEA7PRR-CxP4nARN.js → ebnfDiagram-BXEA7PRR-CP7jO6yI.js} +1 -1
- package/dist/assets/{el-GR-BZB4AONW-D6sm4SVh.js → el-GR-BZB4AONW-D-Db6qae.js} +1 -1
- package/dist/assets/{en-B4ZKOASM-h2uiUwq8.js → en-B4ZKOASM-BbFTnkBC.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-CrHty4vG.js → erDiagram-JOGREHBK-EqmxZSIG.js} +1 -1
- package/dist/assets/{erdActions-Dc1G4NT5.js → erdActions-VP-88Vry.js} +1 -1
- package/dist/assets/{es-ES-U4NZUMDT-DaHIB9Nh.js → es-ES-U4NZUMDT-RLVF3TwQ.js} +1 -1
- package/dist/assets/{eu-ES-A7QVB2H4-JL-tKIG_.js → eu-ES-A7QVB2H4-B3yllD6c.js} +1 -1
- package/dist/assets/{fa-IR-HGAKTJCU-mQfxi4rI.js → fa-IR-HGAKTJCU-6dh_ViSv.js} +1 -1
- package/dist/assets/{fi-FI-Z5N7JZ37-DVlwx9X6.js → fi-FI-Z5N7JZ37-Bn4at9_s.js} +1 -1
- package/dist/assets/flowDiagram-UKHOOZJN-Cmscwpyz.js +1 -0
- package/dist/assets/{fr-FR-RHASNOE6-CiH6Au8c.js → fr-FR-RHASNOE6-gr6d7jAa.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-C8kCjgG9.js → ganttDiagram-PKOTCBZU-DJuDa00y.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DyDeob-5.js → gitGraphDiagram-DS77QQ5N-CXoCI54z.js} +1 -1
- package/dist/assets/{gl-ES-HMX3MZ6V-BBB-d8Mx.js → gl-ES-HMX3MZ6V-Bgv0CTGP.js} +1 -1
- package/dist/assets/{he-IL-6SHJWFNN-Z91w13F5.js → he-IL-6SHJWFNN-C-1FWvRf.js} +1 -1
- package/dist/assets/{hi-IN-IWLTKZ5I-CbheEEe8.js → hi-IN-IWLTKZ5I-D1hlRs_K.js} +1 -1
- package/dist/assets/{hu-HU-A5ZG7DT2-DiL7hHNi.js → hu-HU-A5ZG7DT2-BWKvbmHV.js} +1 -1
- package/dist/assets/{id-ID-SAP4L64H-B3UbeWNg.js → id-ID-SAP4L64H-BeLPjdZ_.js} +1 -1
- package/dist/assets/image-GAAHSSAO-BDqkWo5z.js +1 -0
- package/dist/assets/index-C3r2kpyC.js +884 -0
- package/dist/assets/{infoDiagram-6WML65LV-D5MCgtmM.js → infoDiagram-6WML65LV-D1lynf9u.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-Ddxh-RLg.js → ishikawaDiagram-WSZJBQD7-DpVH03gN.js} +1 -1
- package/dist/assets/{it-IT-JPQ66NNP-Bw487Jbj.js → it-IT-JPQ66NNP-BE7vmYAT.js} +1 -1
- package/dist/assets/{ja-JP-DBVTYXUO-CezLzeOo.js → ja-JP-DBVTYXUO-qXtpKb5u.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-BImXIfyg.js → journeyDiagram-NVQOT4AX-BsF2KEus.js} +1 -1
- package/dist/assets/{kaa-6HZHGXH3-BF8Spb5E.js → kaa-6HZHGXH3-aDi8T9ap.js} +1 -1
- package/dist/assets/{kab-KAB-ZGHBKWFO-C4ZUtiKB.js → kab-KAB-ZGHBKWFO-CR2CfRi_.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-9VGXUuIj.js → kanban-definition-27J2QSJJ-Cl4N_QQU.js} +1 -1
- package/dist/assets/{kk-KZ-P5N5QNE5-g_vnUUcj.js → kk-KZ-P5N5QNE5-DjUmH-P5.js} +1 -1
- package/dist/assets/{km-KH-HSX4SM5Z-BOwEXyZ7.js → km-KH-HSX4SM5Z-CyNPtzM3.js} +1 -1
- package/dist/assets/{ko-KR-MTYHY66A-DC1WnzBL.js → ko-KR-MTYHY66A-CgFlnosj.js} +1 -1
- package/dist/assets/{ku-TR-6OUDTVRD-DD9gJRrR.js → ku-TR-6OUDTVRD-D77qM3OE.js} +1 -1
- package/dist/assets/{line-6jHkzcbb.js → line-Bz4J9juH.js} +1 -1
- package/dist/assets/{lt-LT-XHIRWOB4-DrLrIYgA.js → lt-LT-XHIRWOB4-Cz0nGCpZ.js} +1 -1
- package/dist/assets/{lv-LV-5QDEKY6T-DXh-jV4R.js → lv-LV-5QDEKY6T-B0AN-h0Y.js} +1 -1
- package/dist/assets/{mindmap-definition-FAOFIHXS-NkDV2mqL.js → mindmap-definition-FAOFIHXS-CTk2KZzX.js} +1 -1
- package/dist/assets/{mr-IN-CRQNXWMA-D9QV3zBZ.js → mr-IN-CRQNXWMA-SQAI4q2W.js} +1 -1
- package/dist/assets/{my-MM-5M5IBNSE-BvY1X3Ab.js → my-MM-5M5IBNSE-RUb9G-l1.js} +1 -1
- package/dist/assets/{nb-NO-T6EIAALU-DVu4lTBi.js → nb-NO-T6EIAALU-CHt-iHDP.js} +1 -1
- package/dist/assets/{nl-NL-IS3SIHDZ-DckMtk8V.js → nl-NL-IS3SIHDZ-CcRbegnc.js} +1 -1
- package/dist/assets/{nn-NO-6E72VCQL-CUfF3pYd.js → nn-NO-6E72VCQL-DtnGt-Um.js} +1 -1
- package/dist/assets/{note-importer-Bi-otidG.js → note-importer-B6ql7t2r.js} +2 -2
- package/dist/assets/{oc-FR-POXYY2M6-CXethMle.js → oc-FR-POXYY2M6-Chi6gHvw.js} +1 -1
- package/dist/assets/{pa-IN-N4M65BXN-BHBqiuU1.js → pa-IN-N4M65BXN-b20NieWg.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-CuIxpAd8.js → pegDiagram-VL7TDLO6-DTlHveRH.js} +1 -1
- package/dist/assets/percentages-BXMCSKIN-NYJord4U.js +1 -0
- package/dist/assets/{pieDiagram-7S7Q4E2Y-D29C_sXK.js → pieDiagram-7S7Q4E2Y-BTnTvVK5.js} +1 -1
- package/dist/assets/{pl-PL-T2D74RX3-ydfSMrfV.js → pl-PL-T2D74RX3-B2Ing3px.js} +1 -1
- package/dist/assets/{pt-BR-5N22H2LF-Ck4s57Xw.js → pt-BR-5N22H2LF-CSpjm1Sp.js} +1 -1
- package/dist/assets/{pt-PT-UZXXM6DQ-Bw7y2bi5.js → pt-PT-UZXXM6DQ-BJ3Ndc7i.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-xWx3bSs-.js → quadrantDiagram-CIZ2JOQS-DNIiCyYf.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-Bt7IOjkc.js → railroadDiagram-AXF67PYL-BS6Q9VmO.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-BlrB1SY-.js → requirementDiagram-LRYGKXZP-CrLBS59l.js} +1 -1
- package/dist/assets/{ro-RO-JPDTUUEW-BaPy9LfR.js → ro-RO-JPDTUUEW-VjQCLUXP.js} +1 -1
- package/dist/assets/{ru-RU-B4JR7IUQ-au5VLX71.js → ru-RU-B4JR7IUQ-CRdjuuv9.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-CegIEtnL.js → sankeyDiagram-W5VNT64P-gsIoAwUA.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DPy1px1Q.js → sequenceDiagram-SI44F4Z6-XZTPXpTp.js} +1 -1
- package/dist/assets/{si-LK-N5RQ5JYF-CPhvhvOK.js → si-LK-N5RQ5JYF-B_feK85p.js} +1 -1
- package/dist/assets/{sk-SK-C5VTKIMK-DCt1WKzH.js → sk-SK-C5VTKIMK-fcWDOZ4q.js} +1 -1
- package/dist/assets/{sl-SI-NN7IZMDC-DQeMrjgb.js → sl-SI-NN7IZMDC-DZaUphkt.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-DxMvdMib.js → stateDiagram-OKZ733FA-WPy8HF60.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-APHd0SA2.js +1 -0
- package/dist/assets/subset-shared.chunk-DyXAjJN9.js +1 -0
- package/dist/assets/{subset-worker.chunk-DNRuahaE.js → subset-worker.chunk-Clzwhyvs.js} +1 -1
- package/dist/assets/{sv-SE-XGPEYMSR-CDpaSmYY.js → sv-SE-XGPEYMSR-DrbbsUyQ.js} +1 -1
- package/dist/assets/{swimlanes-SLNWSIFB-uAM7GWDR.js → swimlanes-SLNWSIFB-D4z9qwfX.js} +1 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-uLXOIwEf.js +8 -0
- package/dist/assets/{ta-IN-2NMHFXQM-DaoR00gR.js → ta-IN-2NMHFXQM-Y5VJiFwc.js} +1 -1
- package/dist/assets/{th-TH-HPSO5L25-iuBe47r_.js → th-TH-HPSO5L25-BKS6bxz1.js} +1 -1
- package/dist/assets/{timeline-definition-Z64GVDOM-C66YbgeV.js → timeline-definition-Z64GVDOM-CAoZtDwA.js} +1 -1
- package/dist/assets/{tr-TR-DEFEU3FU-B_uUqanw.js → tr-TR-DEFEU3FU-CEHSX0uR.js} +1 -1
- package/dist/assets/{uk-UA-QMV73CPH-BTSn5Aae.js → uk-UA-QMV73CPH-DLxBVU34.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-BTAfAMLF.js → vennDiagram-T6HMQDX7-BRdzUVJj.js} +1 -1
- package/dist/assets/{vi-VN-M7AON7JQ-J57Rg3Ii.js → vi-VN-M7AON7JQ-D1GV_new.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-CNM2hyzo.js → wardleyDiagram-T6FBY63Y-JVbV7JBk.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-_wSNKxRP.js → xychartDiagram-ELKLHX3M-ATEjNUSw.js} +1 -1
- package/dist/assets/{zh-CN-LNUGB5OW-CGCzix0k.js → zh-CN-LNUGB5OW-gSK0Mg4q.js} +1 -1
- package/dist/assets/{zh-HK-E62DVLB3-D74oZGZU.js → zh-HK-E62DVLB3-CKO-0Ly6.js} +1 -1
- package/dist/assets/{zh-TW-RAJ6MFWO-BfKVvrg0.js → zh-TW-RAJ6MFWO-BYW5DTNY.js} +1 -1
- package/dist/index.html +3 -3
- package/dist-server/index.js +5 -1
- package/package.json +1 -1
- package/dist/assets/channel-DguCx1QT.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-CCpv7-JF.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-CCpv7-JF.js +0 -1
- package/dist/assets/flowDiagram-UKHOOZJN-DZLVvIRA.js +0 -1
- package/dist/assets/image-GAAHSSAO-ebSOoDu1.js +0 -1
- package/dist/assets/index-CIb9-CLP.js +0 -845
- package/dist/assets/percentages-BXMCSKIN-BoJ2Ielj.js +0 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-PDrqfO_v.js +0 -1
- package/dist/assets/subset-shared.chunk-DeBxeTa4.js +0 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CmHZJc0X.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{I as i}from"./note-importer-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TrashView-DodCb2d-.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/useCompositeItem-ZIV61RjL.js","assets/react-dom-CGnP4YFq.js","assets/floating-ui.utils-DrtUanoU.js","assets/utils-TcK2FSyg.js","assets/createLucideIcon-CyJfQrak.js","assets/refresh-ccw-DFj0g7WT.js","assets/table-DCsJJ7Zs.js","assets/index-C3r2kpyC.js","assets/preload-helper-Czpn1I53.js","assets/note-importer-B6ql7t2r.js","assets/dist--spER_Rx.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/api-B4Lp0KNi.js","assets/image-compression-COYPhRs3.js","assets/downloadSVG-sVCad7p8.js","assets/WorkspaceContext-M-vT9OAZ.js","assets/vanilla--C5Lp_AM.js","assets/AIActionContext-sBtUZeB9.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/input-BDCM7QEk.js","assets/link-2-DBo-eQZM.js","assets/wand-sparkles-C9YiTYBh.js","assets/popover-B51mz7qL.js","assets/scroll-area-CQ2HKq3N.js","assets/card-Dy6p8t6g.js","assets/textarea-Bvirh6bi.js","assets/extends-CvVTau-c.js","assets/WorkspaceProvider-BKu0LKCS.js","assets/dist-js-DXG5pDMi.js","assets/core-DNaw6KYU.js","assets/label-Co-it7VP.js","assets/index-DuOqxUTN.css"])))=>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{I as i}from"./note-importer-B6ql7t2r.js";import{n as a}from"./WorkspaceContext-M-vT9OAZ.js";import"./WorkspaceProvider-BKu0LKCS.js";var o=e(t(),1),s=n(),c=o.lazy(()=>r(()=>import(`./TrashView-DodCb2d-.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])));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,N 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,N as r,P as i}from"./index-C3r2kpyC.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=r({async:!0,ssr:!1},e),t}var E=function(e){var t=e.sideCar,n=i(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,r({},n))};E.isSideCarExport=!0;function te(e,t){return e.useMedium(t),E}var D=T(),O=function(){},k=m.forwardRef(function(e,t){var n=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=i(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),w=h,T=ee([n,t]),E=r(r({},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:n,gapMode:S}),c?m.cloneElement(m.Children.only(l),r(r({},E),{ref:T})):m.createElement(x,r({},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{O as r,a as i,y as a}from"./note-importer-Bi-otidG.js";import{a as o,d as s,i as c,m as l,r as u}from"./downloadSVG-sVCad7p8.js";import{a as d,n as f,r as p,ut as m}from"./dist--spER_Rx.js";import{n as h}from"./WorkspaceContext-M-vT9OAZ.js";import{C as g,H as _,K as ee,S as v,T as y,V as b,W as x,Y as S,_ as C,_t as w,a as T,ft as te,gt as E,h as ne,i as D,l as O,mt as k,n as A,pt as j,q as re,r as ie,s as M,u as N,w as ae,x as P,y as F}from"./AIActionContext-sBtUZeB9.js";import{D as I,x as L}from"./useCompositeItem-ZIV61RjL.js";import{r as R}from"./utils-TcK2FSyg.js";import{_ as oe,a as se,b as z,f as ce,g as le,h as ue,i as de,l as B,m as fe,n as pe,p as me,r as he,t as ge,u as _e,v as V,y as ve}from"./erdActions-Dc1G4NT5.js";import{c as ye,t as H}from"./input-BDCM7QEk.js";import{f as be,l as xe,m as Se,n as Ce,p as we,r as Te,s as Ee,t as U,u as De}from"./popover-B51mz7qL.js";import{n as Oe,r as ke,t as W}from"./undo-2-DSs-RD2B.js";import{s as Ae,t as je}from"./api-B4Lp0KNi.js";import{B as Me,F as G,H as Ne,K as Pe,L as Fe,R as K,U as Ie,V as Le,W as q,Y as Re,c as ze,l as Be,n as Ve,q as He,r as J,t as Ue}from"./textarea-Bvirh6bi.js";import{a as We,i as Ge,n as Ke,o as Y,r as X,t as qe}from"./table-DCsJJ7Zs.js";import{b as Je,v as Ye,y as Xe}from"./WorkspaceProvider-BFt1fLnH.js";import{t as Z}from"./label-Co-it7VP.js";import{Ln as Ze,Mt as Qe,Ot as $e,Qn as et,R as tt,Sn as nt,Tn as rt,Un as it,Vn as at,a as ot,c as st,ct,dn as lt,dt as ut,i as dt,l as ft,n as pt,o as mt,ot as ht,p as gt,pn as _t,rt as vt,st as yt,t as bt,tt as xt,u as St,vt as Ct,yt as wt}from"./index-CIb9-CLP.js";/* empty css */import{t as Tt}from"./EntityNode-Cki4Jhtp.js";import{t as Et}from"./JumpToNode-NAVBzr-5.js";var Dt=50,Ot=50,kt=6,At=220,jt=24,Mt=32,Nt=44,Pt=36;function Ft(e){return At+(e.data.columns?.length||0)*kt}function It(e){return Nt+(e.data.columns?.length||0)*Pt+4}function Lt(e,t){if(e.length===0)return e;let n=new Map;for(let t of e)n.set(t.id,new Set);for(let e of t){let t=e.source;n.has(t)&&n.get(t).add(e.target)}let r=new Map,i=new Set(e.map(e=>e.id)),a=0;for(;i.size>0;){let e=[];for(let t of i)[...n.get(t)||new Set].every(e=>!i.has(e))&&e.push(t);if(e.length===0)for(let t of i)e.push(t);for(let t of e)r.set(t,a),i.delete(t);a++}let o=new Map;for(let[e,t]of r)o.has(t)||o.set(t,[]),o.get(t).push(e);let s=e.map(e=>({...e,position:{...e.position},data:{...e.data}})),c=new Map(s.map(e=>[e.id,e])),l=new Map;for(let[e,t]of o){let n=t.reduce((e,t)=>e+Ft(c.get(t)),0)+Math.max(0,t.length-1)*jt,r=Math.max(...t.map(e=>It(c.get(e))),0);l.set(e,{width:n,height:r})}let u=Math.max(...[...l.values()].map(e=>e.width),0),d=Ot;for(let[e,t]of o){t.sort((e,t)=>{let n=c.get(e)?.data.name||``,r=c.get(t)?.data.name||``;return n.localeCompare(r)});let{width:n,height:r}=l.get(e),i=Dt+(u-n)/2,a=d,o=i;for(let e of t){let t=c.get(e);t&&(t.position={x:o,y:a},o+=Ft(t)+jt)}d+=r+Mt}return s}var Q=e(t(),1),Rt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);function zt(e,t){return e.source===t.source&&e.target===t.target&&Rt(e.sourceHandle)===Rt(t.sourceHandle)&&Rt(e.targetHandle)===Rt(t.targetHandle)}function Bt(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=>({...a(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}}}),o=[];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]||{};o.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:o}}function Vt(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 Ht=e=>e.trim().toLowerCase(),Ut=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),Wt=(e,t)=>e.data.columns.find(e=>String(e.id)===Ut(t));function Gt(e,t){let n=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);if(!n||!r)return null;let i=Wt(n,e.sourceHandle),a=Wt(r,e.targetHandle);return!i||!a?null:`${Ht(n.data.name)}.${Ht(i.name)}>${Ht(r.data.name)}.${Ht(a.name)}`}function Kt(e,t){return e.type.toLowerCase()!==t.type.toLowerCase()||!!e.is_pk!=!!t.is_pk||!!e.is_nullable!=!!t.is_nullable||!!e.is_unique!=!!t.is_unique||(e.default_value??null)!==(t.default_value??null)||(e.comment||``)!==(t.comment||``)||(e.max_length??null)!==(t.max_length??null)||(e.numeric_precision??null)!==(t.numeric_precision??null)||(e.numeric_scale??null)!==(t.numeric_scale??null)||(e.enum_name||``)!==(t.enum_name||``)||(e.enum_values||``)!==(t.enum_values||``)}function qt(e){let t=t=>Ht(e.data.columns.find(e=>String(e.id)===String(t))?.name||t);return JSON.stringify({comment:e.data.comment||``,constraints:(e.data.constraints||[]).map(e=>({kind:e.kind,name:e.name||``,columns:(e.column_ids||[]).map(t),expression:e.expression||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t))),indexes:(e.data.indexes||[]).map(e=>({name:e.name||``,columns:e.column_ids.map(t),unique:!!e.is_unique,algorithm:e.algorithm||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t)))})}function Jt(e,t){let n=(e,t)=>String(e.data?.[t]||``).toLowerCase();return(e.label||``)!==(t.label||``)||n(e,`on_delete`)!==n(t,`on_delete`)||n(e,`on_update`)!==n(t,`on_update`)||n(e,`constraint_name`)!==n(t,`constraint_name`)}function Yt(e,t,n,r){let i=[],a=new Map(e.map(e=>[Ht(e.data.name),e])),o=new Map(n.map(e=>[Ht(e.data.name),e])),s=new Set([...a.keys(),...o.keys()]),c=[];for(let e of s){let t=a.get(e),n=o.get(e),r=`table:${e}`;if(!t&&n){i.push({id:r,kind:`table`,state:`new`,label:n.data.name,proposed:n}),c.push({...n,data:{...n.data,diffState:`new`}});continue}if(t&&!n){i.push({id:r,kind:`table`,state:`deleted`,label:t.data.name,current:t}),c.push({...t,data:{...t.data,columns:t.data.columns.map(e=>({...e,diffState:`deleted`})),diffState:`deleted`}});continue}if(!t||!n)continue;let s=new Map(t.data.columns.map(e=>[Ht(e.name),e])),l=new Map(n.data.columns.map(e=>[Ht(e.name),e])),u=new Set([...s.keys(),...l.keys()]),d=qt(t)!==qt(n);d&&i.push({id:r,kind:`table`,state:`modified`,label:t.data.name,current:t,proposed:n});let f=[];for(let n of u){let r=s.get(n),a=l.get(n),o=`column:${e}.${n}`,c=`${t.data.name}.${r?.name||a?.name||n}`;!r&&a?(d=!0,i.push({id:o,kind:`column`,state:`new`,label:c,proposed:a}),f.push({...a,diffState:`new`})):r&&!a?(d=!0,i.push({id:o,kind:`column`,state:`deleted`,label:c,current:r}),f.push({...r,diffState:`deleted`})):r&&a&&Kt(r,a)?(d=!0,i.push({id:o,kind:`column`,state:`modified`,label:c,current:r,proposed:a}),f.push({...a,diffState:`new`})):r&&f.push(r)}c.push({...t,data:{...t.data,columns:f,diffState:d?`modified`:void 0}})}let l=new Map(t.flatMap(t=>{let n=Gt(t,e);return n?[[n,t]]:[]})),u=new Map(r.flatMap(e=>{let t=Gt(e,n);return t?[[t,e]]:[]})),d=new Set([...l.keys(),...u.keys()]);for(let e of d){let t=l.get(e),n=u.get(e),r=`relation:${e}`;!t&&n?i.push({id:r,kind:`relation`,state:`new`,label:e,proposed:n}):t&&!n?i.push({id:r,kind:`relation`,state:`deleted`,label:e,current:t}):t&&n&&Jt(t,n)&&i.push({id:r,kind:`relation`,state:`modified`,label:e,current:t,proposed:n})}return{nodes:c,edges:r,changes:i,newCount:i.filter(e=>e.state===`new`).length,modifiedCount:i.filter(e=>e.state===`modified`).length,deletedCount:i.filter(e=>e.state===`deleted`).length}}var Xt=e=>e.trim().toLowerCase(),Zt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),Qt=(e,t,n)=>`col-${t}${e?.match(/-(source|target)(-(l|r))?$/)?.[0]||`-${n}`}`;function $t(e,t,n){let r=t.find(t=>t.id===e.source),i=t.find(t=>t.id===e.target),a=r?.data.columns.find(t=>t.id===Zt(e.sourceHandle)),o=i?.data.columns.find(t=>t.id===Zt(e.targetHandle)),s=r&&n.find(e=>Xt(e.data.name)===Xt(r.data.name)),c=i&&n.find(e=>Xt(e.data.name)===Xt(i.data.name)),l=s&&a&&s.data.columns.find(e=>Xt(e.name)===Xt(a.name)),u=c&&o&&c.data.columns.find(e=>Xt(e.name)===Xt(o.name));return!s||!c||!l||!u?null:{...e,source:s.id,target:c.id,sourceHandle:Qt(e.sourceHandle,l.id,`source`),targetHandle:Qt(e.targetHandle,u.id,`target`)}}function en(e,t,n,r,i,a){let o=new Set(a),s=new Map(i.changes.map(e=>[e.id,e])),c=new Map(n.map(e=>[Xt(e.data.name),e])),l=new Map(e.map(e=>[Xt(e.data.name),e])),u=[];for(let[e,t]of l){let n=c.get(e),r=s.get(`table:${e}`);if(!n){(!r||!o.has(r.id))&&u.push(t);continue}let i=!!r&&o.has(r.id),a=t.data.columns.flatMap(t=>{let r=Xt(t.name),i=n.data.columns.find(e=>Xt(e.name)===r),a=s.get(`column:${e}.${r}`);return i?[a&&o.has(a.id)?i:t]:a&&o.has(a.id)?[]:[t]});for(let r of n.data.columns){let n=Xt(r.name);if(t.data.columns.some(e=>Xt(e.name)===n))continue;let i=s.get(`column:${e}.${n}`);i&&o.has(i.id)&&a.push(r)}let l=new Set(a.map(e=>String(e.id))),d=(e=[])=>e.every(e=>l.has(String(e)));u.push({...t,data:{...t.data,...i?{comment:n.data.comment,constraints:(n.data.constraints||[]).filter(e=>d(e.column_ids)),indexes:(n.data.indexes||[]).filter(e=>d(e.column_ids))}:{},columns:a}})}for(let[e,t]of c){if(l.has(e))continue;let n=s.get(`table:${e}`);n&&o.has(n.id)&&u.push(t)}let d=t.filter(t=>$t(t,e,u)),f=new Map(t.flatMap(t=>{let n=Gt(t,e);return n?[[n,t]]:[]}));for(let t of i.changes.filter(e=>e.kind===`relation`&&o.has(e.id))){let r=t.id.replace(/^relation:/,``);if(f.get(r)){let t=d.findIndex(t=>Gt(t,e)===r);t>=0&&d.splice(t,1)}if(t.state!==`deleted`&&t.proposed&&`source`in t.proposed){let e=$t(t.proposed,n,u);e&&d.push(e)}}return{nodes:u,edges:d}}var $=n(),tn={entity:Tt},nn=({nodes:e,edges:t,setNodes:n,setEdges:r,onNodesChange:g,onEdgesChange:_,onConnect:ee,onNodeClick:v,onNodeDoubleClick:y,onEdgeClick:b,onPaneClick:x,onMove:S,addEntity:C,onImportSQL:w,onAutoLayout:T,handleExportImage:te,isReadOnly:E=!1,isDbClient:ne=!1,sourceConnectionId:D,undo:O,redo:j,canUndo:re,canRedo:ie,takeSnapshot:M,selectedNodeId:N,onNodeDragStop:ae,onMoveEnd:P,isLoading:F,saveDiagram:I,triggerDebouncedSync:oe,pendingErdDiffTrigger:se,extractColumnIdFromHandle:z,getRelationKey:ce,dedupeEdgesByRelation:le,onEdgeReconnect:ue})=>{let{registerContentHandler:de,setSelectionText:B,setActionContextData:fe,setRightPanelMode:pe}=A(),{getViewport:me}=l(),{resolvedTheme:he}=h(),_e=he===`dark`?`#222`:`#ccc`,V=ne,[ve,H]=(0,Q.useState)(!1),[be,xe]=(0,Q.useState)(!1),Se=Q.useRef(null),Ce=Q.useRef(!1),we=(0,Q.useCallback)((e,t)=>{let n=t.zoom<.35;n!==Ce.current&&(Ce.current=n,Se.current?.classList.toggle(`erd-canvas-low-detail`,n)),S(e,t)},[S]),[Te,Ee]=(0,Q.useState)([]),[U,De]=(0,Q.useState)(null),[Me,G]=(0,Q.useState)([]),[Ne,Pe]=(0,Q.useState)(!1),Fe=U?.diffResult.changes??[],Ie=Fe.map(e=>e.id),Le=U?.diffResult.newCount??0,q=U?.diffResult.modifiedCount??0,Re=U?.diffResult.deletedCount??0,ze=Q.useMemo(()=>[`table`,`column`,`relation`].map(e=>{let t=Fe.filter(t=>t.kind===e).length;return t?`${t} ${e}${t===1?``:`s`}`:null}).filter(Boolean).join(` · `),[Fe]),Be=Q.useMemo(()=>{let e=new Map;for(let t of Fe){let n=rn(t);e.set(n,[...e.get(n)||[],t])}return[...e]},[Fe]),Ve=(0,Q.useCallback)((e,t)=>{if(e.ctrlKey||e.metaKey){e.stopPropagation(),Ee(e=>e.includes(t.id)?e.filter(e=>e!==t.id):[...e,t.id]);return}Ee([]),v(e,t)},[v]),He=(0,Q.useCallback)(()=>{Ee([]),x()},[x]),J=Q.useMemo(()=>Te.length>0?Te:N?[N]:[],[Te,N]),Ue=Q.useMemo(()=>e.map(e=>{let t=J.includes(e.id);return!!e.selected===t?e:{...e,selected:t}}),[e,J]),We=Q.useMemo(()=>U?U.diffNodes.map(e=>({...e,data:{...e.data,isDiffMode:!0}})):[],[U]),Ge=Q.useMemo(()=>{let e=J.length>0;return t.map(t=>{let n=e&&J.some(e=>t.source===e||t.target===e),r=n||t.selected?`var(--edge-selected)`:`var(--edge-color)`,i={...t,type:`smoothstep`,style:{...t.style,stroke:r,strokeWidth:2},markerEnd:{type:d.Arrow,color:r,width:10,height:10}},a=[];t.className&&a.push(t.className),n?a.push(`edge-animated-active`):e&&a.push(`edge-dimmed`);let o=a.join(` `);return i.className===o?i:{...i,className:o}})},[t,J]),Ke=(0,Q.useCallback)(e=>{let t=e.filter(e=>e.type!==`select`);t.length!==0&&g(t)},[g]),Y=Q.useRef(e),X=Q.useRef(t),qe=Q.useRef(N),Z=Q.useRef(J);Y.current=e,X.current=t,qe.current=N,Z.current=J,Q.useEffect(()=>{if(J.length>0){let e=J.map(e=>Y.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(`; `);B(`Tables: ${t}`)}else B(null)},[J,B]),Q.useEffect(()=>{let e=N?Y.current.find(e=>e.id===N)??null:null,t=J.map(e=>Y.current.find(t=>t.id===e)).filter(e=>!!e);fe({nodes:Y.current,edges:X.current,selectedNode:e,multiSelectedNodes:t})},[N,J,fe]);let Ze=Q.useRef(M);Ze.current=M;let $e=(0,Q.useCallback)((e,t,n,r,i={})=>{let a=Yt(e,t,n,r),o=i.source||`proposal`;if(a.changes.length===0){De(null),f.success(o.startsWith(`repository`)?`Repository schema matches the comparison source`:`No schema changes found`);return}G(a.changes.map(e=>e.id)),De({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}),Pe(o!==`proposal`)},[]);Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){De(e=>e?.source===`history`?null:e);return}$e(Y.current,X.current,t.nodes,t.edges,{source:`history`,version:t.version})};return window.addEventListener(gt,e),()=>window.removeEventListener(gt,e)},[$e]),Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){De(e=>e?.source.startsWith(`repository`)?null:e);return}$e(t.originalNodes||Y.current,t.originalEdges||X.current,t.proposedNodes,t.proposedEdges,{source:t.canApply?`repository`:`repository-compare`,sourceLabel:t.sourceLabel,commit:t.commit,dbmlSource:t.dbmlSource})};return window.addEventListener(St,e),()=>window.removeEventListener(St,e)},[$e]);let et=(0,Q.useCallback)(async()=>{if(D){H(!0);try{let e=await je(`/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=>a(e,crypto.randomUUID()))}}}),i=new Map;r.forEach(e=>{e.data.columns.forEach(t=>{i.set(`${e.data.name}.${t.name}`,t.id)})});let o=[];t.forEach(e=>{let t=n.get(e.table_name);t&&(e.foreign_keys||[]).forEach(r=>{let a=n.get(r.ref_table);if(!a)return;let s=i.get(`${e.table_name}.${r.column}`),c=i.get(`${r.ref_table}.${r.ref_column}`);!s||!c||o.some(e=>e.source===t&&e.target===a&&e.sourceHandle===`col-${s}-source`&&e.targetHandle===`col-${c}-target`)||o.push({id:crypto.randomUUID(),source:t,target:a,sourceHandle:`col-${s}-source`,targetHandle:`col-${c}-target`,type:`smoothstep`})})}),$e(Y.current,X.current,r,o),f.success(`Fetched ${t.length} tables from production DB`)}catch(e){f.error(e.message||`Failed to sync schema`)}finally{H(!1)}}},[D,$e]),tt=(0,Q.useCallback)(()=>{De(null),U?.source===`history`?(pe(`closed`),f.info(`Version preview closed`)):U?.source.startsWith(`repository`)?f.info(`Repository preview closed`):f.info(`AI schema update rejected`)},[U?.source,pe]),it=(0,Q.useCallback)(()=>{if(!U)return;let{originalNodes:e,originalEdges:t,proposedNodes:a,proposedEdges:o,diffResult:s}=U,{nodes:c,edges:l}=en(e,t,a,o,s,Me);if(Ze.current?.(Y.current,X.current),n(c),r(l),De(null),f.success(U.source===`repository`?`Repository schema merged successfully`:`AI changes merged successfully!`),I){let e=U.source===`repository`?Me.length===s.changes.length&&U.dbmlSource?U.dbmlSource:i(c,l):void 0,t=e?{dbmlSource:e}:void 0;I(c,l,me(),t).then(()=>{oe?.(),U.source===`repository`&&window.dispatchEvent(new CustomEvent(ft,{detail:{dbmlSource:e,commit:U.commit}}))}).catch(e=>console.error(`Error saving after merge:`,e))}},[U,Me,n,r,I,oe,me]),at=Q.useMemo(()=>({type:`smoothstep`,animated:!1,reconnectable:!E||V,style:{stroke:`var(--edge-color)`,strokeWidth:2},markerEnd:{type:d.Arrow,color:`var(--edge-color)`,width:10,height:10}}),[V,E]);return Q.useEffect(()=>de((e,t,n)=>{if(!e)return;let r=null,i={selectedNodeId:qe.current,selectedNodeIds:Z.current};try{n?r=ge(Y.current,X.current,n,e,i):(r=ge(Y.current,X.current,`erd-generate-sql`,e,i),r||=ge(Y.current,X.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?$e(Y.current,X.current,r.nodes,r.edges):f.error(`No valid changes found in response`)},[`append`]),[de,$e]),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=ge(Y.current,X.current,`erd-generate-sql`,e);t&&(Y.current.length===0?(Ze.current?.([],[]),n(t.nodes),r(t.edges),I&&I(t.nodes,t.edges,{x:0,y:0,zoom:1}).then(()=>{oe?.()}).catch(e=>{console.error(`Error saving generated diagram:`,e)}),f.success(`Applied generated schema to new diagram`)):$e(Y.current,X.current,t.nodes,t.edges))}},[n,r,$e,I,oe]),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=ge(Y.current,X.current,`erd-generate-sql`,t);n?($e(Y.current,X.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,$e,se]),(0,$.jsxs)(`div`,{className:`flex-1 relative flex flex-col overflow-hidden border rounded-xl bg-muted/20`,style:{contain:`paint layout`},children:[E&&V&&(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)(nt,{className:`h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:`Read-only — imported from production database. Switch to desktop app to modify.`})]})}),!U&&(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)(Et,{nodes:e,label:`Table`}),!E&&(0,$.jsx)(`div`,{className:`w-px h-6 bg-border mx-0.5`}),!E&&(0,$.jsxs)(L,{onClick:C,size:`sm`,className:`h-9 px-3 sm:px-4 font-bold shadow-lg shadow-primary/20 cursor-pointer`,children:[(0,$.jsx)(ye,{className:`w-4 h-4 sm:mr-2`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Add Table`})]}),!E&&(0,$.jsxs)(L,{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`,children:[(0,$.jsx)(ut,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Import SQL`})]}),!V&&(0,$.jsxs)(L,{onClick:()=>pe(`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)(rt,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`DBML`})]}),!E&&!V&&Ae()&&(0,$.jsxs)(L,{onClick:()=>pe(`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)(L,{onClick:T,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)(ke,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Auto Layout`})]}),V&&(0,$.jsxs)(L,{onClick:et,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)(Qe,{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`})]}),V&&(0,$.jsxs)(L,{onClick:te,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)(k,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Export SVG`})]}),!E&&(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5 ml-auto`,children:[(0,$.jsx)(L,{variant:`ghost`,size:`icon`,onClick:O,disabled:!re,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Undo (Ctrl+Z)`,children:(0,$.jsx)(W,{className:`w-4 h-4`})}),(0,$.jsx)(L,{variant:`ghost`,size:`icon`,onClick:j,disabled:!ie,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Redo (Ctrl+Y)`,children:(0,$.jsx)(Oe,{className:`w-4 h-4`})})]})]})}),F&&(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:Se,className:`flex-1`,children:(0,$.jsxs)(s,{nodes:U?We:Ue,edges:U?U.diffEdges:Ge,onNodesChange:Ke,onEdgesChange:_,onConnect:ee,onReconnectStart:()=>{V&&xe(!0)},onReconnectEnd:()=>xe(!1),onReconnect:(n,i)=>{if(U||!i.sourceHandle||!i.targetHandle)return;if(V){if(!zt(n,i)){f.info(`Only the connector position can be changed`);return}let e=m(n,i,t);r(e),ue?.(e);return}if(E)return;let a=Ye(e,t),o=a.nodesById.get(i.source),s=a.nodesById.get(i.target);if(o&&s){let e=String(i.sourceHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),t=String(i.targetHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),r=a.columnsByNodeAndId.get(Xe(o.id,e)),c=a.columnsByNodeAndId.get(Xe(s.id,t));if(r&&c&&r.type!==c.type){f.error(`Type Mismatch`,{description:`Cannot reconnect ${r.type} to ${c.type}`});return}if(z&&ce){let e=z(i.sourceHandle),t=z(i.targetHandle);if(e&&t){let o=r?.name?.toLowerCase(),s=c?.name?.toLowerCase(),l=o?`${i.source}:${o}`:null,u=s?`${i.target}:${s}`:null,d=`${[i.source,i.target].sort().join(`:`)}:${[e,t].sort().join(`:`)}`,p=a.edgesByRelationKey.get(d)?.some(e=>e.id!==n.id)??!1,m=l&&u?[l,u].sort().join(`::`):null,h=m?a.edgesByRelationName.get(m)?.some(e=>e.id!==n.id)??!1:!1;if(p||h){f.info(`Relation already exists`);return}}}if(z&&r?.name){let e=a.edgesBySourceColumnName.get(Je(o.data.name,r.name))?.find(e=>e.id!==n.id);if(e){let t=a.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 c=m(n,i,t);r(le?le(c):c)},nodeTypes:tn,onNodeClick:Ve,onNodeDoubleClick:y,onEdgeClick:b,onPaneClick:He,onMove:we,colorMode:he,onlyRenderVisibleElements:!0,nodesDraggable:!U&&(!E||V),nodesConnectable:!U&&(!E||V&&be),elementsSelectable:!U&&(!E||V),edgesReconnectable:!U&&(!E||V),onNodeDragStop:ae,onMoveEnd:P,minZoom:.1,maxZoom:2.5,defaultEdgeOptions:at,connectionLineType:p.SmoothStep,connectionLineStyle:at.style,deleteKeyCode:null,children:[(0,$.jsx)(u,{variant:c.Lines,gap:50,size:1,color:_e}),(0,$.jsx)(o,{position:`bottom-left`,showInteractive:!1})]})}),U&&(0,$.jsxs)(`div`,{className:`absolute bottom-6 inset-x-0 z-50 flex flex-col items-center justify-center gap-2.5 pointer-events-none`,children:[Ne&&(0,$.jsxs)(`div`,{className:`w-[min(560px,calc(100vw-2rem))] bg-popover/95 backdrop-blur-md border border-border rounded-2xl shadow-2xl pointer-events-auto p-4 space-y-3 animate-in fade-in slide-in-from-bottom-2 duration-200`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-wider text-muted-foreground`,children:U.source===`history`?`Changes in this version:`:`Select changes to merge:`}),U.source!==`history`&&(0,$.jsx)(`button`,{onClick:()=>{G(Me.length===Ie.length?[]:[...Ie])},className:`text-[10px] text-muted-foreground/70 hover:text-muted-foreground underline font-medium`,children:Me.length===Ie.length?`Unselect All`:`Select All`})]}),(0,$.jsx)(`div`,{className:`max-h-75 overflow-y-auto space-y-3 pr-1 custom-scrollbar`,children:Be.map(([e,t])=>(0,$.jsxs)(`section`,{className:`overflow-hidden rounded-lg border border-border`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border bg-muted/50 px-3 py-2`,children:[(0,$.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:e}),(0,$.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[t.length,` change`,t.length===1?``:`s`]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_minmax(72px,auto)_auto] gap-3 border-b border-border px-3 py-1.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:[(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{children:`Column`}),(0,$.jsx)(`span`,{children:`Type`}),(0,$.jsx)(`span`,{children:`Change`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-border`,children:t.map(e=>{let t=Me.includes(e.id);return(0,$.jsxs)(`label`,{className:R(`grid grid-cols-[auto_minmax(0,1fr)_minmax(72px,auto)_auto] items-center gap-3 px-3 py-2.5 cursor-pointer transition-colors`,t?`bg-background text-foreground hover:bg-muted/50`:`bg-muted/20 text-muted-foreground hover:bg-muted/40`),children:[U.source===`history`||U.source===`repository-compare`?(0,$.jsx)(`span`,{className:`size-2 rounded-full bg-muted-foreground/50`}):(0,$.jsx)(K,{checked:t,onCheckedChange:()=>G(t=>t.includes(e.id)?t.filter(t=>t!==e.id):[...t,e.id]),className:`border-border bg-transparent data-checked:border-emerald-500 data-checked:bg-emerald-500`}),(0,$.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium`,children:an(e)}),(0,$.jsx)(`code`,{className:`truncate font-mono text-xs text-muted-foreground`,children:on(e)}),(0,$.jsx)(`span`,{className:R(`rounded border px-1.5 py-0.5 text-[10px] font-semibold uppercase`,e.state===`new`&&`border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400`,e.state===`deleted`&&`border-destructive/30 bg-destructive/10 text-destructive`,e.state===`modified`&&`border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400`),children:e.state})]},e.id)})})]},e))})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-4 p-2.5 bg-popover/95 backdrop-blur-md border border-border rounded-2xl shadow-2xl pointer-events-auto max-w-[95vw]`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 text-foreground`,children:[(0,$.jsxs)(`span`,{className:`flex h-2 w-2 relative`,children:[(0,$.jsx)(`span`,{className:`animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75`}),(0,$.jsx)(`span`,{className:`relative inline-flex rounded-full h-2 w-2 bg-emerald-500`})]}),(0,$.jsx)(`span`,{className:`max-w-52 truncate text-[10px] font-bold uppercase tracking-widest text-muted-foreground`,children:U.source===`history`?`Version ${U.version} Preview`:U.source===`repository-compare`?`Git Comparison · ${U.sourceLabel}`:U.source===`repository`?`Repository Schema · ${U.sourceLabel}`:`AI Schema Proposal`}),(0,$.jsx)(`div`,{className:`h-4 w-px bg-border mx-2`}),(0,$.jsxs)(`div`,{className:`flex gap-2 text-[11px] font-bold`,children:[Le>0&&(0,$.jsxs)(`span`,{className:`text-emerald-400`,children:[Le,` New`]}),q>0&&(0,$.jsxs)(`span`,{className:`text-amber-400`,children:[q,` Mod`]}),Re>0&&(0,$.jsxs)(`span`,{className:`text-red-400`,children:[Re,` Del`]})]}),ze&&(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:ze})]}),(0,$.jsx)(`div`,{className:`h-6 w-px bg-border`}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(L,{variant:`outline`,onClick:()=>Pe(!Ne),children:`Review Changes`}),(0,$.jsx)(L,{variant:`destructive`,onClick:tt,children:U.source===`proposal`?`Reject All`:`Close Preview`}),U.source!==`history`&&U.source!==`repository-compare`&&(0,$.jsx)(L,{onClick:it,children:`Merge Selected`})]})]})]})]})};function rn(e){if(e.kind===`column`){let t=e.id.replace(/^column:/,``);return t.slice(0,t.lastIndexOf(`.`))}return e.kind===`relation`?e.label.split(`.`)[0]:e.label}function an(e){return e.kind===`column`?e.label.slice(e.label.lastIndexOf(`.`)+1):e.kind===`table`?`Table definition`:e.label}function on(e){if(e.kind===`table`)return`TABLE`;if(e.kind===`relation`)return`FK`;let t=e.proposed??e.current;return t&&`is_pk`in t?t.type:`—`}function sn(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 cn(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 ln=Q.memo(nn,(e,t)=>{let n=e.isLoading!==t.isLoading,r=t.nodes.length>0,i=e.nodes.length===0,a=n&&r&&!i;return sn(e.nodes,t.nodes)&&cn(e.edges,t.edges)&&(a||e.isLoading===t.isLoading)&&e.isReadOnly===t.isReadOnly&&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 un(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),[ee,v]=(0,Q.useState)({environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),[y,b]=(0,Q.useState)(1),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(!1),[T,te]=(0,Q.useState)(null),E=`__new_table__`,ne=(0,Q.useRef)(null),D=e?dt(e):null,O=(0,Q.useRef)([]),k=(0,Q.useRef)(null),A=(0,Q.useRef)([]),j=(0,Q.useRef)({}),re=(0,Q.useRef)({}),ie=(0,Q.useRef)(null),M=(0,Q.useRef)(!1),N=t?`${bt}${t}`:null,ae=(t,n,r,i)=>JSON.stringify([e,t,n,r,i]),P=(0,Q.useCallback)(()=>{D?.clear()},[D]),F=(0,Q.useCallback)(async(t=!1)=>{if(!e)return;let n=!t&&ot(e);if(n){r(n.schema||[]),_(n.dbType||null),v(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),S(!1),te(null);return}S(!0),te(null);try{let t=await je(`/api/catalogs/${e}/schema`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error||`Failed to fetch tables`);st(e,n),r(n.schema||[]),_(n.dbType||null),v(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4})}catch(e){te(e.message)}finally{S(!1)}},[e]);(0,Q.useEffect)(()=>{A.current=c},[c]),(0,Q.useEffect)(()=>()=>ne.current?.abort(),[]);let I=(0,Q.useCallback)(async(t,n=1,r=O.current,i=k.current)=>{if(!e)return;let a=ae(t,n,r,i),o=D?.get(a);if(O.current=r,d(r),k.current=i,p(i),h(o||null),b(n),ne.current?.abort(),o){j.current[t]=n,w(!1),te(null);return}let s=new AbortController;ne.current=s,w(!0),te(null);try{let o=await je(`/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(ne.current!==s)return;j.current[t]=n,D?.set(a,c),D&&D.size>20&&D.delete(D.keys().next().value),h(c),b(n)}catch(e){if(e.name===`AbortError`)return;te(e.message)}finally{ne.current===s&&w(!1)}},[e,D]),L=(0,Q.useCallback)(e=>{e&&(re.current[e]={filters:A.current,appliedFilters:O.current,sort:k.current})},[]),R=(0,Q.useCallback)(e=>{let t=re.current[e]||{filters:[],appliedFilters:[],sort:null};return l(t.filters),O.current=t.appliedFilters,d(t.appliedFilters),k.current=t.sort,p(t.sort),t},[]);(0,Q.useEffect)(()=>{if(!N)return;let e=[],t=null,n={},r={};try{let i=JSON.parse(sessionStorage.getItem(N)||`{}`);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{}ne.current?.abort(),ne.current=null,M.current=!0,ie.current=N,s(e),a(t),j.current=n,re.current=r;let i=t?r[t]:null;l(i?.filters||[]),d(i?.appliedFilters||[]),O.current=i?.appliedFilters||[],k.current=i?.sort||null,p(i?.sort||null),h(null),b(1);let o=t&&n[t]||1,c=null;return t&&t!==E&&(b(o),c=setTimeout(()=>I(t,o,i?.appliedFilters||[],i?.sort||null))),()=>{c&&clearTimeout(c)}},[N,I]),(0,Q.useEffect)(()=>{if(!(!N||ie.current!==N)){if(M.current){M.current=!1;return}try{i&&(re.current[i]={filters:c,appliedFilters:u,sort:f}),sessionStorage.setItem(N,JSON.stringify({openTabs:o,activeTable:i,pageByTable:j.current,tableState:re.current}))}catch{}}},[N,o,i,y,c,u,f]);let oe=(0,Q.useCallback)(()=>{L(i),s(e=>e.some(e=>e.name===E)?e:[...e,{name:E,pinned:!0,label:`New table`}]),a(E)},[i,L]),se=(0,Q.useCallback)(e=>{if(e===E)return oe();L(i);let t=o.some(t=>t.name===e)?j.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=R(e);b(t),I(e,t,n.appliedFilters,n.sort)},[i,I,oe,o,R,L]),z=(0,Q.useCallback)(e=>{s(t=>t.map(t=>t.name===e?{...t,pinned:!0}:t))},[]),ce=(0,Q.useCallback)(e=>{let t=o.filter(t=>t.name!==e);if(delete j.current[e],delete re.current[e],s(t),i!==e)return;let n=t[t.length-1]?.name??null,r=n?j.current[n]??1:1;a(n);let c=n?R(n):{appliedFilters:[],sort:null};n||(l([]),d([]),O.current=[],k.current=null,p(null)),b(r),n&&n!==E&&I(n,r,c.appliedFilters,c.sort)},[i,o,I,R]),le=(0,Q.useCallback)(()=>{if(!i||!m)return;let e=y+1;I(i,e)},[i,m,y,I]),ue=(0,Q.useCallback)(()=>{if(!i||y<=1)return;let e=y-1;I(i,e)},[i,y,I]),de=m?Math.ceil(m.total/(m.pageSize||50)):0,B=(0,Q.useCallback)((e=``)=>{l(t=>{let n=[...t,mt(e)];return A.current=n,n})},[]),fe=(0,Q.useCallback)(e=>{l(t=>{let n=t.filter(t=>t.id!==e);return A.current=n,n})},[]),pe=(0,Q.useCallback)((e,t)=>{l(n=>{let r=n.map(n=>n.id===e?{...n,...t}:n);return A.current=r,r})},[]),me=(0,Q.useCallback)((e=A.current)=>{i&&(z(i),I(i,1,e))},[i,I,z]),he=(0,Q.useCallback)(e=>{i&&(z(i),I(i,1,[{...e,enabled:!0}]))},[i,I,z]),ge=(0,Q.useCallback)((e,t,n)=>{let r=[mt(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}]),L(i),a(e),l(r),O.current=r,d(r),k.current=null,p(null),b(1),I(e,1,r)},[i,I,L]),_e=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await je(`/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 P(),i===t&&I(t,j.current[t]??y),o},[i,P,e,I,y]),V=(0,Q.useCallback)(async(t,n)=>{if(!(!e||n.length===0)){for(let r of n){let n=await je(`/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`)}P(),i===t&&I(t,j.current[t]??y)}},[i,P,e,I,y]),ve=(0,Q.useCallback)(async(t,n)=>{if(!e)return;let r=await je(`/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 P(),i===t&&I(t,j.current[t]??y),a},[i,P,e,I,y]),ye=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await je(`/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 P(),i===t&&I(t,j.current[t]??y),o},[i,P,e,I,y]),H=(0,Q.useCallback)(async t=>{if(!e)return;let n=await je(`/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 P(),pt(e),await F(),i&&t.truncateTables?.includes(i)&&I(i,1),r},[i,P,e,I,F]);return{tables:n,activeTable:i,openTabs:o,filters:c,appliedFilters:u,sort:f,records:m,dbType:g,connectionSecurity:ee,page:y,totalPages:de,isLoadingTables:x,isLoadingRecords:C,error:T,fetchTables:F,selectTable:se,openNewTableTab:oe,pinTable:z,closeTable:ce,addFilter:B,removeFilter:fe,updateFilter:pe,applyFilter:he,applyFilters:me,openRelatedRecord:ge,createRecord:ve,deleteRecord:ye,deleteTables:(0,Q.useCallback)(async(t,n)=>{if(!e||t.length===0)return;let r=await H({deleteTables:t,...n});P();let c=new Set(t);if(s(e=>e.filter(e=>!c.has(e.name))),t.forEach(e=>{delete j.current[e],delete re.current[e]}),i&&c.has(i)){let e=o.find(e=>!c.has(e.name))?.name??null;a(e),h(null),l([]),d([]),O.current=[],k.current=null,p(null),e&&I(e,j.current[e]??1)}return r},[i,P,e,I,H,o]),mutateTables:H,updateRecord:_e,updateRecords:V,updateStructure:(0,Q.useCallback)(async t=>{let n=i||(t.createTable?`__new__`:null);if(!e||!n)return;let r=await je(`/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`);P(),pt(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}]),j.current[c]=i?j.current[i]??y:1,i&&c!==i&&delete j.current[i],await F(),I(c,j.current[c]??y),o},[i,P,e,I,F,y]),refreshAll:(0,Q.useCallback)(async()=>{P(),e&&pt(e),await F(),i&&i!==E&&I(i,j.current[i]??y)},[i,P,e,I,F,y]),clearFilters:(0,Q.useCallback)(()=>{A.current=[],l([]),O.current=[],d([]),i&&I(i,1,[])},[i,I]),toggleSort:(0,Q.useCallback)(e=>{if(!i)return;let t=k.current,n=t?.column===e?t.direction===`asc`?{column:e,direction:`desc`}:null:{column:e,direction:`asc`};I(i,1,O.current,n)},[i,I]),nextPage:le,prevPage:ue}}var dn=[`=`,`!=`,`<>`,`>`,`>=`,`<`,`<=`,`LIKE`,`NOT LIKE`,`CONTAINS`,`NOT CONTAINS`,`IN`,`NOT IN`,`BETWEEN`,`NOT BETWEEN`,`IS`,`IS NOT`];function fn(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 pn(e){return e===null?`NULL`:e===void 0?``:typeof e==`object`?JSON.stringify(e):String(e)}function mn(e){return e==null?``:typeof e==`object`?JSON.stringify(e):String(e)}function hn(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 gn(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=>hn(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 _n(e){return String(e||``).split(/[T ]/)[0]||``}function vn(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 yn(e){let t=_n(e);return t?`${t} ${vn(e)}`:``}function bn(e,t,n){return t===null?`NULL`:n.isDateTimeColumn(e)?yn(t):n.isDateColumn(e)?_n(t):pn(t)}function xn(e,t,n){return n.isBooleanColumn(e)?t==null||t===``?``:t===!0||t===1||t===`1`?`1`:`0`:n.isDateTimeColumn(e)?yn(t):n.isDateColumn(e)?_n(t):mn(t)}function Sn(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 _n(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 Cn(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 wn(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:Sn(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 En({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,p]=(0,Q.useState)({}),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(!1),[ee,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)(()=>g?x.some(e=>d[e]!==``):!l||!a?!1:a.columns.some(e=>(d[e]??``)!==xn(e,l[e],t)),[t,d,x,g,a,l]),T=(0,Q.useMemo)(()=>!l||!a?{}:Object.fromEntries(a.columns.filter(e=>(d[e]??``)!==xn(e,l[e],t)).map(e=>[e,Sn(e,d[e]??``,t)])),[t,d,a,l]),te=(0,Q.useCallback)(e=>{_(!1),u(e)},[]),E=(0,Q.useCallback)(()=>{if(!l||!a){p({});return}p(Object.fromEntries(a.columns.map(e=>[e,xn(e,l[e],t)])))},[t,a,l]),ne=(0,Q.useCallback)(()=>{a&&(u(null),_(!0),p(Object.fromEntries(x.map(e=>[e,``]))),c(!0))},[x,a]),D=(0,Q.useCallback)(()=>{_(!1),p({}),c(!1)},[]),O=(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),p({}),c(!1)}catch(e){f.error(e.message||`Failed to update record`)}finally{v(!1)}}},[e,T,i,a,l,o]),k=(0,Q.useCallback)(async()=>{if(!e||!a)return;let r=Object.fromEntries(x.filter(e=>d[e]!==``).map(e=>[e,Sn(e,d[e],t)]));v(!0);try{await n(e,r),f.success(`Record created`),D()}catch(e){f.error(e.message||`Failed to create record`)}finally{v(!1)}},[e,D,t,n,d,x,a]),A=(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]),j=(0,Q.useCallback)((e,t)=>{b(n=>t?[...n.filter(t=>S(t)!==S(e)),e]:n.filter(t=>S(t)!==S(e)))},[S]),re=(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]),ie=(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]),M=(0,Q.useCallback)(()=>b([]),[]),N=(0,Q.useCallback)(e=>{b(e)},[]),ae=(0,Q.useCallback)(()=>{u(null),_(!1),b([])},[]);return{datePickerOpenColumn:m,detailsOpen:s,draftRow:d,isCreatingRecord:g,isRecordDirty:w,isSavingRecord:ee,selectedRow:l,selectedRowKeys:C,selectedRows:y,selectedRecordCount:y.length,addRecord:ne,cancelCreateRecord:D,clearSelectedRows:M,removeRecord:A,removeSelectedRecords:ie,resetRecordEditor:ae,selectRow:te,selectRows:N,setDatePickerOpenColumn:h,setDetailsOpen:c,setDraftRow:p,submitCreateRecord:k,submitRecord:O,syncSelectedRowDraft:E,toggleSelectedRow:j,toggleSelectedRows:re}}var Dn=`__none__`,On=`__custom__`;function kn(e){return/^(char|varchar|character|character varying|text|tinytext|mediumtext|longtext)$/i.test(e.replace(/\(.*/,``).trim())}function An(e){let t=e.trim().match(/^'((?:''|[^'])*)'(?:\s*::\s*(?:text|character(?: varying)?|varchar(?:\(\d+\))?))?$/i);return t?t[1].replace(/''/g,`'`):e}function jn(e,t){return!t||t.toUpperCase()===`NULL`||!kn(e)?t:`'${t.replace(/'/g,`''`)}'`}function Mn(e,t,n=``){let r=e.toLowerCase().replace(/\(.*/,``).replace(/\b(unsigned|zerofill)\b/g,``).replace(/\s+/g,` `).trim(),i=[{value:Dn,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`}),kn(e)&&i.push({value:On,label:`Custom value…`});let a=n.trim();return a&&!kn(e)&&!i.some(e=>e.value.toUpperCase()===a.toUpperCase())&&i.push({value:n,label:`${n} (current)`}),i}var Nn=`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(`.`),Pn=`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`},In={integer:`INT`,bool:`BOOLEAN`,dec:`DECIMAL`,fixed:`DECIMAL`,"double precision":`DOUBLE`};function Ln(e,t){let n=t.trim(),r=n.replace(/\([^)]*\)/,``).replace(/\s+/g,` `).trim();if(e===`postgresql`){let e=r.toLowerCase();return Fn[e]||Nn.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=In[t]||Pn.find(e=>e.toLowerCase()===t);return i?[i,...e].join(` `):n}return r.toUpperCase()}var Rn=e=>/^(var)?char$|^character varying$|^(var)?binary$/i.test(Ln(null,e)),zn=e=>/^(decimal|numeric)$/i.test(Ln(null,e)),Bn=(e,t)=>{let n=Ln(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=Ln(e,t);return Rn(a)?`${a}(${n||255})`:zn(a)&&r?`${a}(${i?`${r},${i}`:r})`:Bn(e,a)&&r?`${a}(${r})`:a}var Hn=e=>String(e?.full_type===`USER-DEFINED`?e?.type:e?.full_type||e?.type||``),Un=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,`'`)):[]},Wn=e=>e.match(/\((\d+)\)/)?.[1]||``,Gn=e=>{let[,t=``,n=``]=e.match(/\((\d+)(?:\s*,\s*(\d+))?\)/)||[];return{precision:t,scale:n}},Kn=(e,t)=>Ln(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(),qn=(e,t,n)=>Kn(e,t)===Kn(e,n);function Jn(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=Gn(Hn(t));s({tableName:e.table_name||``,tableComment:e.comment??``,columnName:t?.name||``,columnType:Hn(t),characterLength:String(t?.max_length||Wn(Hn(t))||``),numericPrecision:String(t?.numeric_precision||o.precision||``),numericScale:String(t?.numeric_scale||o.scale||``),isNullable:!!t?.is_nullable,columnDefault:An(t?.column_default??``),columnExtra:t?.extra??``,columnComment:t?.comment??``,enumValues:Un(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,Hn(u),String(u.max_length||Wn(Hn(u))||``),String(u.numeric_precision||Gn(Hn(u)).precision||``),String(u.numeric_scale||Gn(Hn(u)).scale||``))||o.isNullable!==!!u.is_nullable||o.columnDefault!==An(u.column_default??``)||o.columnExtra!==(u.extra??``)||o.columnComment!==(u.comment??``)||o.enumValues.join(`\0`)!==Un(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=>qn(r,o?.columnType||``,Hn(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:jn(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:jn(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 Yn({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)(H,{value:t,onChange:e=>n(e.target.value),autoComplete:`off`})]})}function Xn({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)(Me,{open:!0,onOpenChange:e=>!e&&t(),children:(0,$.jsxs)(q,{size:`sm`,children:[(0,$.jsx)(He,{children:(0,$.jsx)(Re,{children:`Delete Records`})}),(0,$.jsxs)(Ne,{className:`space-y-3`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Selected records will be permanently deleted.`}),(0,$.jsx)(Yn,{expected:i,value:a,onChange:o})]}),(0,$.jsxs)(Pe,{children:[(0,$.jsx)(Ie,{onClick:t,children:`Cancel`}),(0,$.jsx)(Le,{className:`bg-destructive hover:bg-destructive/90`,disabled:a!==i,onClick:()=>n(a),children:`Delete`})]})]})}):(0,$.jsx)(Ve,{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 Zn({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:ee}=t;if(ee(e,s))return(0,$.jsx)(H,{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)(D,{value:n,onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(O,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(N,{children:n})}),(0,$.jsx)(T,{alignItemWithTrigger:!1,className:`max-h-64`,children:t.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]})}let v=a.get(e);if(v){let n=i[e]||[],a=r[e]??``,o=new Set(n.map(e=>String(e[v.ref_column]))),s=a!==``&&!o.has(String(a))?[{[v.ref_column]:a},...n]:n;return(0,$.jsxs)(D,{value:String(a),onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(O,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(N,{children:String(a)})}),(0,$.jsx)(T,{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[v.ref_column]),r=Object.keys(e).find(t=>t!==v.ref_column&&e[t]!==null&&e[t]!==void 0),i=r?`${n} - ${bn(r,e[r],t)}`:n;return(0,$.jsx)(M,{value:n,className:`text-xs`,children:i},n)})})]})}if(f(e))return(0,$.jsx)(H,{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)(Ue,{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=Cn(t);return(0,$.jsxs)(yt,{className:`mt-1 gap-2 ${m(e)?`grid-cols-[minmax(0,1fr)_minmax(0,6.5rem)]`:``}`,children:[(0,$.jsx)(ht,{className:`min-w-0`,children:(0,$.jsxs)(U,{open:n===e,onOpenChange:t=>c(t?e:null),children:[(0,$.jsx)(Te,{render:(0,$.jsxs)(L,{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)(it,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),i?tt(i,`PPP`):`Select date`]}),(0,$.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`})]})}),(0,$.jsx)(Ce,{align:`start`,className:`w-auto overflow-hidden p-0`,children:(0,$.jsx)(_e,{mode:`single`,selected:i,captionLayout:`dropdown`,defaultMonth:i,onSelect:t=>{if(!t)return;let n=wn(t);l(t=>({...t,[e]:m(e)?`${n} ${vn(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)(ht,{className:`min-w-0`,children:[(0,$.jsx)(ct,{htmlFor:`${u}-time`,className:`sr-only`,children:`Time`}),(0,$.jsx)(H,{id:`${u}-time`,type:`time`,step:`1`,value:vn(t),onChange:t=>{let n=t.target.value.length===5?`${t.target.value}:00`:t.target.value;l(t=>({...t,[e]:`${_n(t[e])||wn(new Date)} ${n}`}))},className:`h-8 min-w-0 bg-background px-2 font-mono text-xs`})]})]})}return(0,$.jsx)(H,{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 Qn({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:f,setDetailsOpen:p,setDraftRow:m,onCancelCreateRecord:h,onSubmitCreateRecord:g,onSubmitRecord:_,warnUnsaved:ee}){let v=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)(L,{variant:`ghost`,size:`icon-xs`,onClick:()=>ee()&&p(!1),title:`Close details`,children:(0,$.jsx)(te,{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)(Zn,{column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:v,allowPrimaryKey:s,setDatePickerOpenColumn:f,setDraftRow:m})]},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)(L,{variant:`outline`,onClick:()=>s?h():m(Object.fromEntries(u.columns.map(e=>[e,xn(e,d?.[e],t)]))),disabled:!s&&!o||c,children:`Cancel`}),(0,$.jsx)(L,{onClick:s?g:_,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`,fn(u?.tableInfo?.dataSize)],[`Index size`,fn(u?.tableInfo?.indexSize)],[`Total size`,fn(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 $n({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)(D,{value:i.column,onValueChange:e=>e&&c(i.id,{column:e}),children:[(0,$.jsx)(O,{className:`h-8 min-w-32 max-w-48 text-xs`,children:(0,$.jsx)(N,{children:i.column||`Column`})}),(0,$.jsx)(T,{children:e.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsxs)(D,{value:i.operator,onValueChange:e=>e&&c(i.id,{operator:e}),children:[(0,$.jsx)(O,{className:`h-8 w-36 text-xs`,children:(0,$.jsx)(N,{children:i.operator})}),(0,$.jsx)(T,{children:dn.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsx)(H,{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)(H,{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)(L,{variant:`secondary`,size:`sm`,className:`h-8`,onClick:()=>l()&&r(i),children:`Apply`}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,disabled:t.length<=1,onClick:()=>o(i.id),title:`Remove filter`,children:(0,$.jsx)(De,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,onClick:()=>n(i.column||e[0]||``),title:`Add filter`,children:(0,$.jsx)(ye,{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)(L,{variant:`ghost`,size:`sm`,className:`h-8`,onClick:()=>{l()&&(a(),s(!1))},children:`Clear`}),(0,$.jsx)(L,{size:`sm`,className:`h-8`,onClick:()=>l()&&i(t),children:`Apply All`})]})]})})}function er({activeView:e,page:t,records:n,tableColumnCount:r,totalPages:i,warnUnsaved:a,onAddColumn:o,onAddIndex:s,onAddCheck:c,onInfo:l,onNextPage:u,onPrevPage:d,onViewChange:f}){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)(L,{variant:e===t?`secondary`:`ghost`,size:`sm`,className:`h-7 px-3 capitalize`,onClick:()=>f(t),children:t},t)),e===`structure`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:o,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Column`]}),(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:s,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Index`]}),(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:c,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Check`]}),(0,$.jsx)(L,{variant:`ghost`,size:`icon-xs`,onClick:l,title:`Show table SQL`,children:(0,$.jsx)(be,{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)(L,{variant:`outline`,size:`icon-xs`,disabled:t<=1,onClick:()=>a()&&d(),children:(0,$.jsx)(at,{className:`h-4 w-4`})}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,disabled:t>=i,onClick:()=>a()&&u(),children:(0,$.jsx)(E,{className:`h-4 w-4`})})]})]})}function tr({className:e,...t}){return(0,$.jsx)(`div`,{"data-slot":`button-group`,className:R(`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 nr=e=>e===`mysql`,rr=e=>e===`postgresql`,ir=(e,t)=>nr(e)?`\`${t.replace(/`/g,"``")}\``:`"${t.replace(/"/g,`""`)}"`,ar=e=>e.replace(/[^A-Za-z0-9_.-]+/g,`_`),or=e=>e===`tab`?`Tab`:e===`;`?`Semicolon (;)`:`Comma (,)`,sr=e=>e===`,`?`Comma decimal (,)`:`Dot decimal (.)`;function cr(e,t){return e==null?``:t===`,`&&typeof e==`number`&&!Number.isInteger(e)?String(e).replace(`.`,`,`):String(e)}function lr(e,t,n){let r=cr(e,n);return/["\n\r]/.test(r)||r.includes(t)?`"${r.replace(/"/g,`""`)}"`:r}function ur(e){return e==null?`NULL`:typeof e==`number`?String(e):typeof e==`boolean`?e?`TRUE`:`FALSE`:`'${String(e).replace(/'/g,`''`)}'`}async function dr(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 fr(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function pr({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:p}){let m=n.table_name,h=(0,Q.useMemo)(()=>(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),[n]),[g,v]=(0,Q.useState)(null),[w,te]=(0,Q.useState)(`csv`),[E,A]=(0,Q.useState)(h),[j,ie]=(0,Q.useState)(`,`),[ae,R]=(0,Q.useState)(`.`),[oe,se]=(0,Q.useState)(!0),[z,ce]=(0,Q.useState)(!0),[le,ue]=(0,Q.useState)(!1),[B,pe]=(0,Q.useState)(`${m}_copy`),[me,he]=(0,Q.useState)(!1),[ge,_e]=(0,Q.useState)(!1),[V,ve]=(0,Q.useState)(!1),[ye,be]=(0,Q.useState)(!1),[xe,Ce]=(0,Q.useState)(``),[Te,Ee]=(0,Q.useState)(null),U=i?.length?i:[n],De=U.length===1,Oe=nr(t)||rr(t),ke=async t=>{let n=1,r=[],i=[];for(;;){let a=await je(`/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}},W=async n=>{let r=n.table_name,i=De?E:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),a=Te?{rows:Te,columns:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean)}:z||w!==`sql`?await ke(r):{rows:[],columns:i},o=i.length?i:a.columns;if(w===`json`)return JSON.stringify(a.rows.map(e=>Object.fromEntries(o.map(t=>[t,e[t]]))),null,2);let s=j===`tab`?` `:j;if(w===`csv`)return[o.join(s),...a.rows.map(e=>o.map(t=>lr(e[t],s,ae)).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{O as r,a as i,y as a}from"./note-importer-B6ql7t2r.js";import{a as o,d as s,i as c,m as l,r as u}from"./downloadSVG-sVCad7p8.js";import{a as d,n as f,r as p,ut as m}from"./dist--spER_Rx.js";import{n as h}from"./WorkspaceContext-M-vT9OAZ.js";import{C as g,H as _,K as ee,S as v,T as y,V as b,W as x,Y as S,_ as C,_t as w,a as T,ft as te,gt as E,h as ne,i as D,l as O,mt as k,n as A,pt as j,q as re,r as ie,s as M,u as N,w as ae,x as P,y as F}from"./AIActionContext-sBtUZeB9.js";import{D as I,x as L}from"./useCompositeItem-ZIV61RjL.js";import{r as R}from"./utils-TcK2FSyg.js";import{_ as oe,a as se,b as z,f as ce,g as le,h as ue,i as de,l as B,m as fe,n as pe,p as me,r as he,t as ge,u as _e,v as V,y as ve}from"./erdActions-VP-88Vry.js";import{c as ye,t as H}from"./input-BDCM7QEk.js";import{f as be,l as xe,m as Se,n as Ce,p as we,r as Te,s as Ee,t as U,u as De}from"./popover-B51mz7qL.js";import{n as Oe,r as ke,t as W}from"./undo-2-DSs-RD2B.js";import{s as Ae,t as je}from"./api-B4Lp0KNi.js";import{B as Me,F as G,H as Ne,K as Pe,L as Fe,R as K,U as Ie,V as Le,W as q,Y as Re,c as ze,l as Be,n as Ve,q as He,r as J,t as Ue}from"./textarea-Bvirh6bi.js";import{a as We,i as Ge,n as Ke,o as Y,r as X,t as qe}from"./table-DCsJJ7Zs.js";import{b as Je,v as Ye,y as Xe}from"./WorkspaceProvider-BKu0LKCS.js";import{t as Z}from"./label-Co-it7VP.js";import{Ln as Ze,Mt as Qe,Ot as $e,Qn as et,R as tt,Sn as nt,Tn as rt,Un as it,Vn as at,a as ot,c as st,ct,dn as lt,dt as ut,i as dt,l as ft,n as pt,o as mt,ot as ht,p as gt,pn as _t,rt as vt,st as yt,t as bt,tt as xt,u as St,vt as Ct,yt as wt}from"./index-C3r2kpyC.js";/* empty css */import{t as Tt}from"./EntityNode-BubcTPns.js";import{t as Et}from"./JumpToNode-NAVBzr-5.js";var Dt=50,Ot=50,kt=6,At=220,jt=24,Mt=32,Nt=44,Pt=36;function Ft(e){return At+(e.data.columns?.length||0)*kt}function It(e){return Nt+(e.data.columns?.length||0)*Pt+4}function Lt(e,t){if(e.length===0)return e;let n=new Map;for(let t of e)n.set(t.id,new Set);for(let e of t){let t=e.source;n.has(t)&&n.get(t).add(e.target)}let r=new Map,i=new Set(e.map(e=>e.id)),a=0;for(;i.size>0;){let e=[];for(let t of i)[...n.get(t)||new Set].every(e=>!i.has(e))&&e.push(t);if(e.length===0)for(let t of i)e.push(t);for(let t of e)r.set(t,a),i.delete(t);a++}let o=new Map;for(let[e,t]of r)o.has(t)||o.set(t,[]),o.get(t).push(e);let s=e.map(e=>({...e,position:{...e.position},data:{...e.data}})),c=new Map(s.map(e=>[e.id,e])),l=new Map;for(let[e,t]of o){let n=t.reduce((e,t)=>e+Ft(c.get(t)),0)+Math.max(0,t.length-1)*jt,r=Math.max(...t.map(e=>It(c.get(e))),0);l.set(e,{width:n,height:r})}let u=Math.max(...[...l.values()].map(e=>e.width),0),d=Ot;for(let[e,t]of o){t.sort((e,t)=>{let n=c.get(e)?.data.name||``,r=c.get(t)?.data.name||``;return n.localeCompare(r)});let{width:n,height:r}=l.get(e),i=Dt+(u-n)/2,a=d,o=i;for(let e of t){let t=c.get(e);t&&(t.position={x:o,y:a},o+=Ft(t)+jt)}d+=r+Mt}return s}var Q=e(t(),1),Rt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``);function zt(e,t){return e.source===t.source&&e.target===t.target&&Rt(e.sourceHandle)===Rt(t.sourceHandle)&&Rt(e.targetHandle)===Rt(t.targetHandle)}function Bt(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=>({...a(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}}}),o=[];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]||{};o.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:o}}function Vt(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 Ht=e=>e.trim().toLowerCase(),Ut=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),Wt=(e,t)=>e.data.columns.find(e=>String(e.id)===Ut(t));function Gt(e,t){let n=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);if(!n||!r)return null;let i=Wt(n,e.sourceHandle),a=Wt(r,e.targetHandle);return!i||!a?null:`${Ht(n.data.name)}.${Ht(i.name)}>${Ht(r.data.name)}.${Ht(a.name)}`}function Kt(e,t){return e.type.toLowerCase()!==t.type.toLowerCase()||!!e.is_pk!=!!t.is_pk||!!e.is_nullable!=!!t.is_nullable||!!e.is_unique!=!!t.is_unique||(e.default_value??null)!==(t.default_value??null)||(e.comment||``)!==(t.comment||``)||(e.max_length??null)!==(t.max_length??null)||(e.numeric_precision??null)!==(t.numeric_precision??null)||(e.numeric_scale??null)!==(t.numeric_scale??null)||(e.enum_name||``)!==(t.enum_name||``)||(e.enum_values||``)!==(t.enum_values||``)}function qt(e){let t=t=>Ht(e.data.columns.find(e=>String(e.id)===String(t))?.name||t);return JSON.stringify({comment:e.data.comment||``,constraints:(e.data.constraints||[]).map(e=>({kind:e.kind,name:e.name||``,columns:(e.column_ids||[]).map(t),expression:e.expression||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t))),indexes:(e.data.indexes||[]).map(e=>({name:e.name||``,columns:e.column_ids.map(t),unique:!!e.is_unique,algorithm:e.algorithm||``})).sort((e,t)=>JSON.stringify(e).localeCompare(JSON.stringify(t)))})}function Jt(e,t){let n=(e,t)=>String(e.data?.[t]||``).toLowerCase();return(e.label||``)!==(t.label||``)||n(e,`on_delete`)!==n(t,`on_delete`)||n(e,`on_update`)!==n(t,`on_update`)||n(e,`constraint_name`)!==n(t,`constraint_name`)}function Yt(e,t,n,r){let i=[],a=new Map(e.map(e=>[Ht(e.data.name),e])),o=new Map(n.map(e=>[Ht(e.data.name),e])),s=new Set([...a.keys(),...o.keys()]),c=[];for(let e of s){let t=a.get(e),n=o.get(e),r=`table:${e}`;if(!t&&n){i.push({id:r,kind:`table`,state:`new`,label:n.data.name,proposed:n}),c.push({...n,data:{...n.data,diffState:`new`}});continue}if(t&&!n){i.push({id:r,kind:`table`,state:`deleted`,label:t.data.name,current:t}),c.push({...t,data:{...t.data,columns:t.data.columns.map(e=>({...e,diffState:`deleted`})),diffState:`deleted`}});continue}if(!t||!n)continue;let s=new Map(t.data.columns.map(e=>[Ht(e.name),e])),l=new Map(n.data.columns.map(e=>[Ht(e.name),e])),u=new Set([...s.keys(),...l.keys()]),d=qt(t)!==qt(n);d&&i.push({id:r,kind:`table`,state:`modified`,label:t.data.name,current:t,proposed:n});let f=[];for(let n of u){let r=s.get(n),a=l.get(n),o=`column:${e}.${n}`,c=`${t.data.name}.${r?.name||a?.name||n}`;!r&&a?(d=!0,i.push({id:o,kind:`column`,state:`new`,label:c,proposed:a}),f.push({...a,diffState:`new`})):r&&!a?(d=!0,i.push({id:o,kind:`column`,state:`deleted`,label:c,current:r}),f.push({...r,diffState:`deleted`})):r&&a&&Kt(r,a)?(d=!0,i.push({id:o,kind:`column`,state:`modified`,label:c,current:r,proposed:a}),f.push({...a,diffState:`new`})):r&&f.push(r)}c.push({...t,data:{...t.data,columns:f,diffState:d?`modified`:void 0}})}let l=new Map(t.flatMap(t=>{let n=Gt(t,e);return n?[[n,t]]:[]})),u=new Map(r.flatMap(e=>{let t=Gt(e,n);return t?[[t,e]]:[]})),d=new Set([...l.keys(),...u.keys()]);for(let e of d){let t=l.get(e),n=u.get(e),r=`relation:${e}`;!t&&n?i.push({id:r,kind:`relation`,state:`new`,label:e,proposed:n}):t&&!n?i.push({id:r,kind:`relation`,state:`deleted`,label:e,current:t}):t&&n&&Jt(t,n)&&i.push({id:r,kind:`relation`,state:`modified`,label:e,current:t,proposed:n})}return{nodes:c,edges:r,changes:i,newCount:i.filter(e=>e.state===`new`).length,modifiedCount:i.filter(e=>e.state===`modified`).length,deletedCount:i.filter(e=>e.state===`deleted`).length}}var Xt=e=>e.trim().toLowerCase(),Zt=e=>e?.replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),Qt=(e,t,n)=>`col-${t}${e?.match(/-(source|target)(-(l|r))?$/)?.[0]||`-${n}`}`;function $t(e,t,n){let r=t.find(t=>t.id===e.source),i=t.find(t=>t.id===e.target),a=r?.data.columns.find(t=>t.id===Zt(e.sourceHandle)),o=i?.data.columns.find(t=>t.id===Zt(e.targetHandle)),s=r&&n.find(e=>Xt(e.data.name)===Xt(r.data.name)),c=i&&n.find(e=>Xt(e.data.name)===Xt(i.data.name)),l=s&&a&&s.data.columns.find(e=>Xt(e.name)===Xt(a.name)),u=c&&o&&c.data.columns.find(e=>Xt(e.name)===Xt(o.name));return!s||!c||!l||!u?null:{...e,source:s.id,target:c.id,sourceHandle:Qt(e.sourceHandle,l.id,`source`),targetHandle:Qt(e.targetHandle,u.id,`target`)}}function en(e,t,n,r,i,a){let o=new Set(a),s=new Map(i.changes.map(e=>[e.id,e])),c=new Map(n.map(e=>[Xt(e.data.name),e])),l=new Map(e.map(e=>[Xt(e.data.name),e])),u=[];for(let[e,t]of l){let n=c.get(e),r=s.get(`table:${e}`);if(!n){(!r||!o.has(r.id))&&u.push(t);continue}let i=!!r&&o.has(r.id),a=t.data.columns.flatMap(t=>{let r=Xt(t.name),i=n.data.columns.find(e=>Xt(e.name)===r),a=s.get(`column:${e}.${r}`);return i?[a&&o.has(a.id)?i:t]:a&&o.has(a.id)?[]:[t]});for(let r of n.data.columns){let n=Xt(r.name);if(t.data.columns.some(e=>Xt(e.name)===n))continue;let i=s.get(`column:${e}.${n}`);i&&o.has(i.id)&&a.push(r)}let l=new Set(a.map(e=>String(e.id))),d=(e=[])=>e.every(e=>l.has(String(e)));u.push({...t,data:{...t.data,...i?{comment:n.data.comment,constraints:(n.data.constraints||[]).filter(e=>d(e.column_ids)),indexes:(n.data.indexes||[]).filter(e=>d(e.column_ids))}:{},columns:a}})}for(let[e,t]of c){if(l.has(e))continue;let n=s.get(`table:${e}`);n&&o.has(n.id)&&u.push(t)}let d=t.filter(t=>$t(t,e,u)),f=new Map(t.flatMap(t=>{let n=Gt(t,e);return n?[[n,t]]:[]}));for(let t of i.changes.filter(e=>e.kind===`relation`&&o.has(e.id))){let r=t.id.replace(/^relation:/,``);if(f.get(r)){let t=d.findIndex(t=>Gt(t,e)===r);t>=0&&d.splice(t,1)}if(t.state!==`deleted`&&t.proposed&&`source`in t.proposed){let e=$t(t.proposed,n,u);e&&d.push(e)}}return{nodes:u,edges:d}}var $=n(),tn={entity:Tt},nn=({nodes:e,edges:t,setNodes:n,setEdges:r,onNodesChange:g,onEdgesChange:_,onConnect:ee,onNodeClick:v,onNodeDoubleClick:y,onEdgeClick:b,onPaneClick:x,onMove:S,addEntity:C,onImportSQL:w,onAutoLayout:T,handleExportImage:te,isReadOnly:E=!1,isDbClient:ne=!1,sourceConnectionId:D,undo:O,redo:j,canUndo:re,canRedo:ie,takeSnapshot:M,selectedNodeId:N,onNodeDragStop:ae,onMoveEnd:P,isLoading:F,saveDiagram:I,triggerDebouncedSync:oe,pendingErdDiffTrigger:se,extractColumnIdFromHandle:z,getRelationKey:ce,dedupeEdgesByRelation:le,onEdgeReconnect:ue})=>{let{registerContentHandler:de,setSelectionText:B,setActionContextData:fe,setRightPanelMode:pe}=A(),{getViewport:me}=l(),{resolvedTheme:he}=h(),_e=he===`dark`?`#222`:`#ccc`,V=ne,[ve,H]=(0,Q.useState)(!1),[be,xe]=(0,Q.useState)(!1),Se=Q.useRef(null),Ce=Q.useRef(!1),we=(0,Q.useCallback)((e,t)=>{let n=t.zoom<.35;n!==Ce.current&&(Ce.current=n,Se.current?.classList.toggle(`erd-canvas-low-detail`,n)),S(e,t)},[S]),[Te,Ee]=(0,Q.useState)([]),[U,De]=(0,Q.useState)(null),[Me,G]=(0,Q.useState)([]),[Ne,Pe]=(0,Q.useState)(!1),Fe=U?.diffResult.changes??[],Ie=Fe.map(e=>e.id),Le=U?.diffResult.newCount??0,q=U?.diffResult.modifiedCount??0,Re=U?.diffResult.deletedCount??0,ze=Q.useMemo(()=>[`table`,`column`,`relation`].map(e=>{let t=Fe.filter(t=>t.kind===e).length;return t?`${t} ${e}${t===1?``:`s`}`:null}).filter(Boolean).join(` · `),[Fe]),Be=Q.useMemo(()=>{let e=new Map;for(let t of Fe){let n=rn(t);e.set(n,[...e.get(n)||[],t])}return[...e]},[Fe]),Ve=(0,Q.useCallback)((e,t)=>{if(e.ctrlKey||e.metaKey){e.stopPropagation(),Ee(e=>e.includes(t.id)?e.filter(e=>e!==t.id):[...e,t.id]);return}Ee([]),v(e,t)},[v]),He=(0,Q.useCallback)(()=>{Ee([]),x()},[x]),J=Q.useMemo(()=>Te.length>0?Te:N?[N]:[],[Te,N]),Ue=Q.useMemo(()=>e.map(e=>{let t=J.includes(e.id);return!!e.selected===t?e:{...e,selected:t}}),[e,J]),We=Q.useMemo(()=>U?U.diffNodes.map(e=>({...e,data:{...e.data,isDiffMode:!0}})):[],[U]),Ge=Q.useMemo(()=>{let e=J.length>0;return t.map(t=>{let n=e&&J.some(e=>t.source===e||t.target===e),r=n||t.selected?`var(--edge-selected)`:`var(--edge-color)`,i={...t,type:`smoothstep`,style:{...t.style,stroke:r,strokeWidth:2},markerEnd:{type:d.Arrow,color:r,width:10,height:10}},a=[];t.className&&a.push(t.className),n?a.push(`edge-animated-active`):e&&a.push(`edge-dimmed`);let o=a.join(` `);return i.className===o?i:{...i,className:o}})},[t,J]),Ke=(0,Q.useCallback)(e=>{let t=e.filter(e=>e.type!==`select`);t.length!==0&&g(t)},[g]),Y=Q.useRef(e),X=Q.useRef(t),qe=Q.useRef(N),Z=Q.useRef(J);Y.current=e,X.current=t,qe.current=N,Z.current=J,Q.useEffect(()=>{if(J.length>0){let e=J.map(e=>Y.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(`; `);B(`Tables: ${t}`)}else B(null)},[J,B]),Q.useEffect(()=>{let e=N?Y.current.find(e=>e.id===N)??null:null,t=J.map(e=>Y.current.find(t=>t.id===e)).filter(e=>!!e);fe({nodes:Y.current,edges:X.current,selectedNode:e,multiSelectedNodes:t})},[N,J,fe]);let Ze=Q.useRef(M);Ze.current=M;let $e=(0,Q.useCallback)((e,t,n,r,i={})=>{let a=Yt(e,t,n,r),o=i.source||`proposal`;if(a.changes.length===0){De(null),f.success(o.startsWith(`repository`)?`Repository schema matches the comparison source`:`No schema changes found`);return}G(a.changes.map(e=>e.id)),De({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}),Pe(o!==`proposal`)},[]);Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){De(e=>e?.source===`history`?null:e);return}$e(Y.current,X.current,t.nodes,t.edges,{source:`history`,version:t.version})};return window.addEventListener(gt,e),()=>window.removeEventListener(gt,e)},[$e]),Q.useEffect(()=>{let e=e=>{let t=e.detail;if(!t){De(e=>e?.source.startsWith(`repository`)?null:e);return}$e(t.originalNodes||Y.current,t.originalEdges||X.current,t.proposedNodes,t.proposedEdges,{source:t.canApply?`repository`:`repository-compare`,sourceLabel:t.sourceLabel,commit:t.commit,dbmlSource:t.dbmlSource})};return window.addEventListener(St,e),()=>window.removeEventListener(St,e)},[$e]);let et=(0,Q.useCallback)(async()=>{if(D){H(!0);try{let e=await je(`/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=>a(e,crypto.randomUUID()))}}}),i=new Map;r.forEach(e=>{e.data.columns.forEach(t=>{i.set(`${e.data.name}.${t.name}`,t.id)})});let o=[];t.forEach(e=>{let t=n.get(e.table_name);t&&(e.foreign_keys||[]).forEach(r=>{let a=n.get(r.ref_table);if(!a)return;let s=i.get(`${e.table_name}.${r.column}`),c=i.get(`${r.ref_table}.${r.ref_column}`);!s||!c||o.some(e=>e.source===t&&e.target===a&&e.sourceHandle===`col-${s}-source`&&e.targetHandle===`col-${c}-target`)||o.push({id:crypto.randomUUID(),source:t,target:a,sourceHandle:`col-${s}-source`,targetHandle:`col-${c}-target`,type:`smoothstep`})})}),$e(Y.current,X.current,r,o),f.success(`Fetched ${t.length} tables from production DB`)}catch(e){f.error(e.message||`Failed to sync schema`)}finally{H(!1)}}},[D,$e]),tt=(0,Q.useCallback)(()=>{De(null),U?.source===`history`?(pe(`closed`),f.info(`Version preview closed`)):U?.source.startsWith(`repository`)?f.info(`Repository preview closed`):f.info(`AI schema update rejected`)},[U?.source,pe]),it=(0,Q.useCallback)(()=>{if(!U)return;let{originalNodes:e,originalEdges:t,proposedNodes:a,proposedEdges:o,diffResult:s}=U,{nodes:c,edges:l}=en(e,t,a,o,s,Me);if(Ze.current?.(Y.current,X.current),n(c),r(l),De(null),f.success(U.source===`repository`?`Repository schema merged successfully`:`AI changes merged successfully!`),I){let e=U.source===`repository`?Me.length===s.changes.length&&U.dbmlSource?U.dbmlSource:i(c,l):void 0,t=e?{dbmlSource:e}:void 0;I(c,l,me(),t).then(()=>{oe?.(),U.source===`repository`&&window.dispatchEvent(new CustomEvent(ft,{detail:{dbmlSource:e,commit:U.commit}}))}).catch(e=>console.error(`Error saving after merge:`,e))}},[U,Me,n,r,I,oe,me]),at=Q.useMemo(()=>({type:`smoothstep`,animated:!1,reconnectable:!E||V,style:{stroke:`var(--edge-color)`,strokeWidth:2},markerEnd:{type:d.Arrow,color:`var(--edge-color)`,width:10,height:10}}),[V,E]);return Q.useEffect(()=>de((e,t,n)=>{if(!e)return;let r=null,i={selectedNodeId:qe.current,selectedNodeIds:Z.current};try{n?r=ge(Y.current,X.current,n,e,i):(r=ge(Y.current,X.current,`erd-generate-sql`,e,i),r||=ge(Y.current,X.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?$e(Y.current,X.current,r.nodes,r.edges):f.error(`No valid changes found in response`)},[`append`]),[de,$e]),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=ge(Y.current,X.current,`erd-generate-sql`,e);t&&(Y.current.length===0?(Ze.current?.([],[]),n(t.nodes),r(t.edges),I&&I(t.nodes,t.edges,{x:0,y:0,zoom:1}).then(()=>{oe?.()}).catch(e=>{console.error(`Error saving generated diagram:`,e)}),f.success(`Applied generated schema to new diagram`)):$e(Y.current,X.current,t.nodes,t.edges))}},[n,r,$e,I,oe]),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=ge(Y.current,X.current,`erd-generate-sql`,t);n?($e(Y.current,X.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,$e,se]),(0,$.jsxs)(`div`,{className:`flex-1 relative flex flex-col overflow-hidden border rounded-xl bg-muted/20`,style:{contain:`paint layout`},children:[E&&V&&(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)(nt,{className:`h-4 w-4 shrink-0`}),(0,$.jsx)(`span`,{children:`Read-only — imported from production database. Switch to desktop app to modify.`})]})}),!U&&(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)(Et,{nodes:e,label:`Table`}),!E&&(0,$.jsx)(`div`,{className:`w-px h-6 bg-border mx-0.5`}),!E&&(0,$.jsxs)(L,{onClick:C,size:`sm`,className:`h-9 px-3 sm:px-4 font-bold shadow-lg shadow-primary/20 cursor-pointer`,children:[(0,$.jsx)(ye,{className:`w-4 h-4 sm:mr-2`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Add Table`})]}),!E&&(0,$.jsxs)(L,{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`,children:[(0,$.jsx)(ut,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Import SQL`})]}),!V&&(0,$.jsxs)(L,{onClick:()=>pe(`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)(rt,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`DBML`})]}),!E&&!V&&Ae()&&(0,$.jsxs)(L,{onClick:()=>pe(`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)(L,{onClick:T,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)(ke,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Auto Layout`})]}),V&&(0,$.jsxs)(L,{onClick:et,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)(Qe,{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`})]}),V&&(0,$.jsxs)(L,{onClick:te,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)(k,{className:`w-3.5 h-3.5 sm:mr-1.5`}),(0,$.jsx)(`span`,{className:`hidden sm:inline`,children:`Export SVG`})]}),!E&&(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5 ml-auto`,children:[(0,$.jsx)(L,{variant:`ghost`,size:`icon`,onClick:O,disabled:!re,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Undo (Ctrl+Z)`,children:(0,$.jsx)(W,{className:`w-4 h-4`})}),(0,$.jsx)(L,{variant:`ghost`,size:`icon`,onClick:j,disabled:!ie,className:`h-8 w-8 text-muted-foreground hover:text-foreground disabled:opacity-30`,title:`Redo (Ctrl+Y)`,children:(0,$.jsx)(Oe,{className:`w-4 h-4`})})]})]})}),F&&(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:Se,className:`flex-1`,children:(0,$.jsxs)(s,{nodes:U?We:Ue,edges:U?U.diffEdges:Ge,onNodesChange:Ke,onEdgesChange:_,onConnect:ee,onReconnectStart:()=>{V&&xe(!0)},onReconnectEnd:()=>xe(!1),onReconnect:(n,i)=>{if(U||!i.sourceHandle||!i.targetHandle)return;if(V){if(!zt(n,i)){f.info(`Only the connector position can be changed`);return}let e=m(n,i,t);r(e),ue?.(e);return}if(E)return;let a=Ye(e,t),o=a.nodesById.get(i.source),s=a.nodesById.get(i.target);if(o&&s){let e=String(i.sourceHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),t=String(i.targetHandle).replace(/^col-/,``).replace(/-(source|target)(-(l|r))?$/,``),r=a.columnsByNodeAndId.get(Xe(o.id,e)),c=a.columnsByNodeAndId.get(Xe(s.id,t));if(r&&c&&r.type!==c.type){f.error(`Type Mismatch`,{description:`Cannot reconnect ${r.type} to ${c.type}`});return}if(z&&ce){let e=z(i.sourceHandle),t=z(i.targetHandle);if(e&&t){let o=r?.name?.toLowerCase(),s=c?.name?.toLowerCase(),l=o?`${i.source}:${o}`:null,u=s?`${i.target}:${s}`:null,d=`${[i.source,i.target].sort().join(`:`)}:${[e,t].sort().join(`:`)}`,p=a.edgesByRelationKey.get(d)?.some(e=>e.id!==n.id)??!1,m=l&&u?[l,u].sort().join(`::`):null,h=m?a.edgesByRelationName.get(m)?.some(e=>e.id!==n.id)??!1:!1;if(p||h){f.info(`Relation already exists`);return}}}if(z&&r?.name){let e=a.edgesBySourceColumnName.get(Je(o.data.name,r.name))?.find(e=>e.id!==n.id);if(e){let t=a.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 c=m(n,i,t);r(le?le(c):c)},nodeTypes:tn,onNodeClick:Ve,onNodeDoubleClick:y,onEdgeClick:b,onPaneClick:He,onMove:we,colorMode:he,onlyRenderVisibleElements:!0,nodesDraggable:!U&&(!E||V),nodesConnectable:!U&&(!E||V&&be),elementsSelectable:!U&&(!E||V),edgesReconnectable:!U&&(!E||V),onNodeDragStop:ae,onMoveEnd:P,minZoom:.1,maxZoom:2.5,defaultEdgeOptions:at,connectionLineType:p.SmoothStep,connectionLineStyle:at.style,deleteKeyCode:null,children:[(0,$.jsx)(u,{variant:c.Lines,gap:50,size:1,color:_e}),(0,$.jsx)(o,{position:`bottom-left`,showInteractive:!1})]})}),U&&(0,$.jsxs)(`div`,{className:`absolute bottom-6 inset-x-0 z-50 flex flex-col items-center justify-center gap-2.5 pointer-events-none`,children:[Ne&&(0,$.jsxs)(`div`,{className:`w-[min(560px,calc(100vw-2rem))] bg-popover/95 backdrop-blur-md border border-border rounded-2xl shadow-2xl pointer-events-auto p-4 space-y-3 animate-in fade-in slide-in-from-bottom-2 duration-200`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`span`,{className:`text-[10px] font-bold uppercase tracking-wider text-muted-foreground`,children:U.source===`history`?`Changes in this version:`:`Select changes to merge:`}),U.source!==`history`&&(0,$.jsx)(`button`,{onClick:()=>{G(Me.length===Ie.length?[]:[...Ie])},className:`text-[10px] text-muted-foreground/70 hover:text-muted-foreground underline font-medium`,children:Me.length===Ie.length?`Unselect All`:`Select All`})]}),(0,$.jsx)(`div`,{className:`max-h-75 overflow-y-auto space-y-3 pr-1 custom-scrollbar`,children:Be.map(([e,t])=>(0,$.jsxs)(`section`,{className:`overflow-hidden rounded-lg border border-border`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border bg-muted/50 px-3 py-2`,children:[(0,$.jsx)(`span`,{className:`text-xs font-semibold text-foreground`,children:e}),(0,$.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[t.length,` change`,t.length===1?``:`s`]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)_minmax(72px,auto)_auto] gap-3 border-b border-border px-3 py-1.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:[(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{children:`Column`}),(0,$.jsx)(`span`,{children:`Type`}),(0,$.jsx)(`span`,{children:`Change`})]}),(0,$.jsx)(`div`,{className:`divide-y divide-border`,children:t.map(e=>{let t=Me.includes(e.id);return(0,$.jsxs)(`label`,{className:R(`grid grid-cols-[auto_minmax(0,1fr)_minmax(72px,auto)_auto] items-center gap-3 px-3 py-2.5 cursor-pointer transition-colors`,t?`bg-background text-foreground hover:bg-muted/50`:`bg-muted/20 text-muted-foreground hover:bg-muted/40`),children:[U.source===`history`||U.source===`repository-compare`?(0,$.jsx)(`span`,{className:`size-2 rounded-full bg-muted-foreground/50`}):(0,$.jsx)(K,{checked:t,onCheckedChange:()=>G(t=>t.includes(e.id)?t.filter(t=>t!==e.id):[...t,e.id]),className:`border-border bg-transparent data-checked:border-emerald-500 data-checked:bg-emerald-500`}),(0,$.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium`,children:an(e)}),(0,$.jsx)(`code`,{className:`truncate font-mono text-xs text-muted-foreground`,children:on(e)}),(0,$.jsx)(`span`,{className:R(`rounded border px-1.5 py-0.5 text-[10px] font-semibold uppercase`,e.state===`new`&&`border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400`,e.state===`deleted`&&`border-destructive/30 bg-destructive/10 text-destructive`,e.state===`modified`&&`border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400`),children:e.state})]},e.id)})})]},e))})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-4 p-2.5 bg-popover/95 backdrop-blur-md border border-border rounded-2xl shadow-2xl pointer-events-auto max-w-[95vw]`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 text-foreground`,children:[(0,$.jsxs)(`span`,{className:`flex h-2 w-2 relative`,children:[(0,$.jsx)(`span`,{className:`animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75`}),(0,$.jsx)(`span`,{className:`relative inline-flex rounded-full h-2 w-2 bg-emerald-500`})]}),(0,$.jsx)(`span`,{className:`max-w-52 truncate text-[10px] font-bold uppercase tracking-widest text-muted-foreground`,children:U.source===`history`?`Version ${U.version} Preview`:U.source===`repository-compare`?`Git Comparison · ${U.sourceLabel}`:U.source===`repository`?`Repository Schema · ${U.sourceLabel}`:`AI Schema Proposal`}),(0,$.jsx)(`div`,{className:`h-4 w-px bg-border mx-2`}),(0,$.jsxs)(`div`,{className:`flex gap-2 text-[11px] font-bold`,children:[Le>0&&(0,$.jsxs)(`span`,{className:`text-emerald-400`,children:[Le,` New`]}),q>0&&(0,$.jsxs)(`span`,{className:`text-amber-400`,children:[q,` Mod`]}),Re>0&&(0,$.jsxs)(`span`,{className:`text-red-400`,children:[Re,` Del`]})]}),ze&&(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:ze})]}),(0,$.jsx)(`div`,{className:`h-6 w-px bg-border`}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(L,{variant:`outline`,onClick:()=>Pe(!Ne),children:`Review Changes`}),(0,$.jsx)(L,{variant:`destructive`,onClick:tt,children:U.source===`proposal`?`Reject All`:`Close Preview`}),U.source!==`history`&&U.source!==`repository-compare`&&(0,$.jsx)(L,{onClick:it,children:`Merge Selected`})]})]})]})]})};function rn(e){if(e.kind===`column`){let t=e.id.replace(/^column:/,``);return t.slice(0,t.lastIndexOf(`.`))}return e.kind===`relation`?e.label.split(`.`)[0]:e.label}function an(e){return e.kind===`column`?e.label.slice(e.label.lastIndexOf(`.`)+1):e.kind===`table`?`Table definition`:e.label}function on(e){if(e.kind===`table`)return`TABLE`;if(e.kind===`relation`)return`FK`;let t=e.proposed??e.current;return t&&`is_pk`in t?t.type:`—`}function sn(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 cn(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 ln=Q.memo(nn,(e,t)=>{let n=e.isLoading!==t.isLoading,r=t.nodes.length>0,i=e.nodes.length===0,a=n&&r&&!i;return sn(e.nodes,t.nodes)&&cn(e.edges,t.edges)&&(a||e.isLoading===t.isLoading)&&e.isReadOnly===t.isReadOnly&&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 un(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),[ee,v]=(0,Q.useState)({environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),[y,b]=(0,Q.useState)(1),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(!1),[T,te]=(0,Q.useState)(null),E=`__new_table__`,ne=(0,Q.useRef)(null),D=e?dt(e):null,O=(0,Q.useRef)([]),k=(0,Q.useRef)(null),A=(0,Q.useRef)([]),j=(0,Q.useRef)({}),re=(0,Q.useRef)({}),ie=(0,Q.useRef)(null),M=(0,Q.useRef)(!1),N=t?`${bt}${t}`:null,ae=(t,n,r,i)=>JSON.stringify([e,t,n,r,i]),P=(0,Q.useCallback)(()=>{D?.clear()},[D]),F=(0,Q.useCallback)(async(t=!1)=>{if(!e)return;let n=!t&&ot(e);if(n){r(n.schema||[]),_(n.dbType||null),v(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4}),S(!1),te(null);return}S(!0),te(null);try{let t=await je(`/api/catalogs/${e}/schema`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error||`Failed to fetch tables`);st(e,n),r(n.schema||[]),_(n.dbType||null),v(n.connectionSecurity||{environment:`development`,safeMode:`protected`,sslMode:`disable`,queryTimeoutMs:3e4})}catch(e){te(e.message)}finally{S(!1)}},[e]);(0,Q.useEffect)(()=>{A.current=c},[c]),(0,Q.useEffect)(()=>()=>ne.current?.abort(),[]);let I=(0,Q.useCallback)(async(t,n=1,r=O.current,i=k.current)=>{if(!e)return;let a=ae(t,n,r,i),o=D?.get(a);if(O.current=r,d(r),k.current=i,p(i),h(o||null),b(n),ne.current?.abort(),o){j.current[t]=n,w(!1),te(null);return}let s=new AbortController;ne.current=s,w(!0),te(null);try{let o=await je(`/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(ne.current!==s)return;j.current[t]=n,D?.set(a,c),D&&D.size>20&&D.delete(D.keys().next().value),h(c),b(n)}catch(e){if(e.name===`AbortError`)return;te(e.message)}finally{ne.current===s&&w(!1)}},[e,D]),L=(0,Q.useCallback)(e=>{e&&(re.current[e]={filters:A.current,appliedFilters:O.current,sort:k.current})},[]),R=(0,Q.useCallback)(e=>{let t=re.current[e]||{filters:[],appliedFilters:[],sort:null};return l(t.filters),O.current=t.appliedFilters,d(t.appliedFilters),k.current=t.sort,p(t.sort),t},[]);(0,Q.useEffect)(()=>{if(!N)return;let e=[],t=null,n={},r={};try{let i=JSON.parse(sessionStorage.getItem(N)||`{}`);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{}ne.current?.abort(),ne.current=null,M.current=!0,ie.current=N,s(e),a(t),j.current=n,re.current=r;let i=t?r[t]:null;l(i?.filters||[]),d(i?.appliedFilters||[]),O.current=i?.appliedFilters||[],k.current=i?.sort||null,p(i?.sort||null),h(null),b(1);let o=t&&n[t]||1,c=null;return t&&t!==E&&(b(o),c=setTimeout(()=>I(t,o,i?.appliedFilters||[],i?.sort||null))),()=>{c&&clearTimeout(c)}},[N,I]),(0,Q.useEffect)(()=>{if(!(!N||ie.current!==N)){if(M.current){M.current=!1;return}try{i&&(re.current[i]={filters:c,appliedFilters:u,sort:f}),sessionStorage.setItem(N,JSON.stringify({openTabs:o,activeTable:i,pageByTable:j.current,tableState:re.current}))}catch{}}},[N,o,i,y,c,u,f]);let oe=(0,Q.useCallback)(()=>{L(i),s(e=>e.some(e=>e.name===E)?e:[...e,{name:E,pinned:!0,label:`New table`}]),a(E)},[i,L]),se=(0,Q.useCallback)(e=>{if(e===E)return oe();L(i);let t=o.some(t=>t.name===e)?j.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=R(e);b(t),I(e,t,n.appliedFilters,n.sort)},[i,I,oe,o,R,L]),z=(0,Q.useCallback)(e=>{s(t=>t.map(t=>t.name===e?{...t,pinned:!0}:t))},[]),ce=(0,Q.useCallback)(e=>{let t=o.filter(t=>t.name!==e);if(delete j.current[e],delete re.current[e],s(t),i!==e)return;let n=t[t.length-1]?.name??null,r=n?j.current[n]??1:1;a(n);let c=n?R(n):{appliedFilters:[],sort:null};n||(l([]),d([]),O.current=[],k.current=null,p(null)),b(r),n&&n!==E&&I(n,r,c.appliedFilters,c.sort)},[i,o,I,R]),le=(0,Q.useCallback)(()=>{if(!i||!m)return;let e=y+1;I(i,e)},[i,m,y,I]),ue=(0,Q.useCallback)(()=>{if(!i||y<=1)return;let e=y-1;I(i,e)},[i,y,I]),de=m?Math.ceil(m.total/(m.pageSize||50)):0,B=(0,Q.useCallback)((e=``)=>{l(t=>{let n=[...t,mt(e)];return A.current=n,n})},[]),fe=(0,Q.useCallback)(e=>{l(t=>{let n=t.filter(t=>t.id!==e);return A.current=n,n})},[]),pe=(0,Q.useCallback)((e,t)=>{l(n=>{let r=n.map(n=>n.id===e?{...n,...t}:n);return A.current=r,r})},[]),me=(0,Q.useCallback)((e=A.current)=>{i&&(z(i),I(i,1,e))},[i,I,z]),he=(0,Q.useCallback)(e=>{i&&(z(i),I(i,1,[{...e,enabled:!0}]))},[i,I,z]),ge=(0,Q.useCallback)((e,t,n)=>{let r=[mt(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}]),L(i),a(e),l(r),O.current=r,d(r),k.current=null,p(null),b(1),I(e,1,r)},[i,I,L]),_e=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await je(`/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 P(),i===t&&I(t,j.current[t]??y),o},[i,P,e,I,y]),V=(0,Q.useCallback)(async(t,n)=>{if(!(!e||n.length===0)){for(let r of n){let n=await je(`/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`)}P(),i===t&&I(t,j.current[t]??y)}},[i,P,e,I,y]),ve=(0,Q.useCallback)(async(t,n)=>{if(!e)return;let r=await je(`/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 P(),i===t&&I(t,j.current[t]??y),a},[i,P,e,I,y]),ye=(0,Q.useCallback)(async(t,n,r)=>{if(!e)return;let a=await je(`/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 P(),i===t&&I(t,j.current[t]??y),o},[i,P,e,I,y]),H=(0,Q.useCallback)(async t=>{if(!e)return;let n=await je(`/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 P(),pt(e),await F(),i&&t.truncateTables?.includes(i)&&I(i,1),r},[i,P,e,I,F]);return{tables:n,activeTable:i,openTabs:o,filters:c,appliedFilters:u,sort:f,records:m,dbType:g,connectionSecurity:ee,page:y,totalPages:de,isLoadingTables:x,isLoadingRecords:C,error:T,fetchTables:F,selectTable:se,openNewTableTab:oe,pinTable:z,closeTable:ce,addFilter:B,removeFilter:fe,updateFilter:pe,applyFilter:he,applyFilters:me,openRelatedRecord:ge,createRecord:ve,deleteRecord:ye,deleteTables:(0,Q.useCallback)(async(t,n)=>{if(!e||t.length===0)return;let r=await H({deleteTables:t,...n});P();let c=new Set(t);if(s(e=>e.filter(e=>!c.has(e.name))),t.forEach(e=>{delete j.current[e],delete re.current[e]}),i&&c.has(i)){let e=o.find(e=>!c.has(e.name))?.name??null;a(e),h(null),l([]),d([]),O.current=[],k.current=null,p(null),e&&I(e,j.current[e]??1)}return r},[i,P,e,I,H,o]),mutateTables:H,updateRecord:_e,updateRecords:V,updateStructure:(0,Q.useCallback)(async t=>{let n=i||(t.createTable?`__new__`:null);if(!e||!n)return;let r=await je(`/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`);P(),pt(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}]),j.current[c]=i?j.current[i]??y:1,i&&c!==i&&delete j.current[i],await F(),I(c,j.current[c]??y),o},[i,P,e,I,F,y]),refreshAll:(0,Q.useCallback)(async()=>{P(),e&&pt(e),await F(),i&&i!==E&&I(i,j.current[i]??y)},[i,P,e,I,F,y]),clearFilters:(0,Q.useCallback)(()=>{A.current=[],l([]),O.current=[],d([]),i&&I(i,1,[])},[i,I]),toggleSort:(0,Q.useCallback)(e=>{if(!i)return;let t=k.current,n=t?.column===e?t.direction===`asc`?{column:e,direction:`desc`}:null:{column:e,direction:`asc`};I(i,1,O.current,n)},[i,I]),nextPage:le,prevPage:ue}}var dn=[`=`,`!=`,`<>`,`>`,`>=`,`<`,`<=`,`LIKE`,`NOT LIKE`,`CONTAINS`,`NOT CONTAINS`,`IN`,`NOT IN`,`BETWEEN`,`NOT BETWEEN`,`IS`,`IS NOT`];function fn(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 pn(e){return e===null?`NULL`:e===void 0?``:typeof e==`object`?JSON.stringify(e):String(e)}function mn(e){return e==null?``:typeof e==`object`?JSON.stringify(e):String(e)}function hn(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 gn(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=>hn(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 _n(e){return String(e||``).split(/[T ]/)[0]||``}function vn(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 yn(e){let t=_n(e);return t?`${t} ${vn(e)}`:``}function bn(e,t,n){return t===null?`NULL`:n.isDateTimeColumn(e)?yn(t):n.isDateColumn(e)?_n(t):pn(t)}function xn(e,t,n){return n.isBooleanColumn(e)?t==null||t===``?``:t===!0||t===1||t===`1`?`1`:`0`:n.isDateTimeColumn(e)?yn(t):n.isDateColumn(e)?_n(t):mn(t)}function Sn(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 _n(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 Cn(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 wn(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:Sn(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 En({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,p]=(0,Q.useState)({}),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(!1),[ee,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)(()=>g?x.some(e=>d[e]!==``):!l||!a?!1:a.columns.some(e=>(d[e]??``)!==xn(e,l[e],t)),[t,d,x,g,a,l]),T=(0,Q.useMemo)(()=>!l||!a?{}:Object.fromEntries(a.columns.filter(e=>(d[e]??``)!==xn(e,l[e],t)).map(e=>[e,Sn(e,d[e]??``,t)])),[t,d,a,l]),te=(0,Q.useCallback)(e=>{_(!1),u(e)},[]),E=(0,Q.useCallback)(()=>{if(!l||!a){p({});return}p(Object.fromEntries(a.columns.map(e=>[e,xn(e,l[e],t)])))},[t,a,l]),ne=(0,Q.useCallback)(()=>{a&&(u(null),_(!0),p(Object.fromEntries(x.map(e=>[e,``]))),c(!0))},[x,a]),D=(0,Q.useCallback)(()=>{_(!1),p({}),c(!1)},[]),O=(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),p({}),c(!1)}catch(e){f.error(e.message||`Failed to update record`)}finally{v(!1)}}},[e,T,i,a,l,o]),k=(0,Q.useCallback)(async()=>{if(!e||!a)return;let r=Object.fromEntries(x.filter(e=>d[e]!==``).map(e=>[e,Sn(e,d[e],t)]));v(!0);try{await n(e,r),f.success(`Record created`),D()}catch(e){f.error(e.message||`Failed to create record`)}finally{v(!1)}},[e,D,t,n,d,x,a]),A=(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]),j=(0,Q.useCallback)((e,t)=>{b(n=>t?[...n.filter(t=>S(t)!==S(e)),e]:n.filter(t=>S(t)!==S(e)))},[S]),re=(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]),ie=(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]),M=(0,Q.useCallback)(()=>b([]),[]),N=(0,Q.useCallback)(e=>{b(e)},[]),ae=(0,Q.useCallback)(()=>{u(null),_(!1),b([])},[]);return{datePickerOpenColumn:m,detailsOpen:s,draftRow:d,isCreatingRecord:g,isRecordDirty:w,isSavingRecord:ee,selectedRow:l,selectedRowKeys:C,selectedRows:y,selectedRecordCount:y.length,addRecord:ne,cancelCreateRecord:D,clearSelectedRows:M,removeRecord:A,removeSelectedRecords:ie,resetRecordEditor:ae,selectRow:te,selectRows:N,setDatePickerOpenColumn:h,setDetailsOpen:c,setDraftRow:p,submitCreateRecord:k,submitRecord:O,syncSelectedRowDraft:E,toggleSelectedRow:j,toggleSelectedRows:re}}var Dn=`__none__`,On=`__custom__`;function kn(e){return/^(char|varchar|character|character varying|text|tinytext|mediumtext|longtext)$/i.test(e.replace(/\(.*/,``).trim())}function An(e){let t=e.trim().match(/^'((?:''|[^'])*)'(?:\s*::\s*(?:text|character(?: varying)?|varchar(?:\(\d+\))?))?$/i);return t?t[1].replace(/''/g,`'`):e}function jn(e,t){return!t||t.toUpperCase()===`NULL`||!kn(e)?t:`'${t.replace(/'/g,`''`)}'`}function Mn(e,t,n=``){let r=e.toLowerCase().replace(/\(.*/,``).replace(/\b(unsigned|zerofill)\b/g,``).replace(/\s+/g,` `).trim(),i=[{value:Dn,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`}),kn(e)&&i.push({value:On,label:`Custom value…`});let a=n.trim();return a&&!kn(e)&&!i.some(e=>e.value.toUpperCase()===a.toUpperCase())&&i.push({value:n,label:`${n} (current)`}),i}var Nn=`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(`.`),Pn=`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`},In={integer:`INT`,bool:`BOOLEAN`,dec:`DECIMAL`,fixed:`DECIMAL`,"double precision":`DOUBLE`};function Ln(e,t){let n=t.trim(),r=n.replace(/\([^)]*\)/,``).replace(/\s+/g,` `).trim();if(e===`postgresql`){let e=r.toLowerCase();return Fn[e]||Nn.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=In[t]||Pn.find(e=>e.toLowerCase()===t);return i?[i,...e].join(` `):n}return r.toUpperCase()}var Rn=e=>/^(var)?char$|^character varying$|^(var)?binary$/i.test(Ln(null,e)),zn=e=>/^(decimal|numeric)$/i.test(Ln(null,e)),Bn=(e,t)=>{let n=Ln(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=Ln(e,t);return Rn(a)?`${a}(${n||255})`:zn(a)&&r?`${a}(${i?`${r},${i}`:r})`:Bn(e,a)&&r?`${a}(${r})`:a}var Hn=e=>String(e?.full_type===`USER-DEFINED`?e?.type:e?.full_type||e?.type||``),Un=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,`'`)):[]},Wn=e=>e.match(/\((\d+)\)/)?.[1]||``,Gn=e=>{let[,t=``,n=``]=e.match(/\((\d+)(?:\s*,\s*(\d+))?\)/)||[];return{precision:t,scale:n}},Kn=(e,t)=>Ln(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(),qn=(e,t,n)=>Kn(e,t)===Kn(e,n);function Jn(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=Gn(Hn(t));s({tableName:e.table_name||``,tableComment:e.comment??``,columnName:t?.name||``,columnType:Hn(t),characterLength:String(t?.max_length||Wn(Hn(t))||``),numericPrecision:String(t?.numeric_precision||o.precision||``),numericScale:String(t?.numeric_scale||o.scale||``),isNullable:!!t?.is_nullable,columnDefault:An(t?.column_default??``),columnExtra:t?.extra??``,columnComment:t?.comment??``,enumValues:Un(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,Hn(u),String(u.max_length||Wn(Hn(u))||``),String(u.numeric_precision||Gn(Hn(u)).precision||``),String(u.numeric_scale||Gn(Hn(u)).scale||``))||o.isNullable!==!!u.is_nullable||o.columnDefault!==An(u.column_default??``)||o.columnExtra!==(u.extra??``)||o.columnComment!==(u.comment??``)||o.enumValues.join(`\0`)!==Un(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=>qn(r,o?.columnType||``,Hn(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:jn(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:jn(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 Yn({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)(H,{value:t,onChange:e=>n(e.target.value),autoComplete:`off`})]})}function Xn({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)(Me,{open:!0,onOpenChange:e=>!e&&t(),children:(0,$.jsxs)(q,{size:`sm`,children:[(0,$.jsx)(He,{children:(0,$.jsx)(Re,{children:`Delete Records`})}),(0,$.jsxs)(Ne,{className:`space-y-3`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Selected records will be permanently deleted.`}),(0,$.jsx)(Yn,{expected:i,value:a,onChange:o})]}),(0,$.jsxs)(Pe,{children:[(0,$.jsx)(Ie,{onClick:t,children:`Cancel`}),(0,$.jsx)(Le,{className:`bg-destructive hover:bg-destructive/90`,disabled:a!==i,onClick:()=>n(a),children:`Delete`})]})]})}):(0,$.jsx)(Ve,{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 Zn({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:ee}=t;if(ee(e,s))return(0,$.jsx)(H,{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)(D,{value:n,onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(O,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(N,{children:n})}),(0,$.jsx)(T,{alignItemWithTrigger:!1,className:`max-h-64`,children:t.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]})}let v=a.get(e);if(v){let n=i[e]||[],a=r[e]??``,o=new Set(n.map(e=>String(e[v.ref_column]))),s=a!==``&&!o.has(String(a))?[{[v.ref_column]:a},...n]:n;return(0,$.jsxs)(D,{value:String(a),onValueChange:t=>l(n=>({...n,[e]:t})),children:[(0,$.jsx)(O,{id:u,className:`mt-1 h-8 font-mono text-xs`,children:(0,$.jsx)(N,{children:String(a)})}),(0,$.jsx)(T,{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[v.ref_column]),r=Object.keys(e).find(t=>t!==v.ref_column&&e[t]!==null&&e[t]!==void 0),i=r?`${n} - ${bn(r,e[r],t)}`:n;return(0,$.jsx)(M,{value:n,className:`text-xs`,children:i},n)})})]})}if(f(e))return(0,$.jsx)(H,{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)(Ue,{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=Cn(t);return(0,$.jsxs)(yt,{className:`mt-1 gap-2 ${m(e)?`grid-cols-[minmax(0,1fr)_minmax(0,6.5rem)]`:``}`,children:[(0,$.jsx)(ht,{className:`min-w-0`,children:(0,$.jsxs)(U,{open:n===e,onOpenChange:t=>c(t?e:null),children:[(0,$.jsx)(Te,{render:(0,$.jsxs)(L,{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)(it,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),i?tt(i,`PPP`):`Select date`]}),(0,$.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`})]})}),(0,$.jsx)(Ce,{align:`start`,className:`w-auto overflow-hidden p-0`,children:(0,$.jsx)(_e,{mode:`single`,selected:i,captionLayout:`dropdown`,defaultMonth:i,onSelect:t=>{if(!t)return;let n=wn(t);l(t=>({...t,[e]:m(e)?`${n} ${vn(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)(ht,{className:`min-w-0`,children:[(0,$.jsx)(ct,{htmlFor:`${u}-time`,className:`sr-only`,children:`Time`}),(0,$.jsx)(H,{id:`${u}-time`,type:`time`,step:`1`,value:vn(t),onChange:t=>{let n=t.target.value.length===5?`${t.target.value}:00`:t.target.value;l(t=>({...t,[e]:`${_n(t[e])||wn(new Date)} ${n}`}))},className:`h-8 min-w-0 bg-background px-2 font-mono text-xs`})]})]})}return(0,$.jsx)(H,{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 Qn({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:f,setDetailsOpen:p,setDraftRow:m,onCancelCreateRecord:h,onSubmitCreateRecord:g,onSubmitRecord:_,warnUnsaved:ee}){let v=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)(L,{variant:`ghost`,size:`icon-xs`,onClick:()=>ee()&&p(!1),title:`Close details`,children:(0,$.jsx)(te,{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)(Zn,{column:e,columnHelpers:t,datePickerOpenColumn:n,draftRow:r,fkOptionsByColumn:i,foreignKeyByColumn:a,selectedRow:v,allowPrimaryKey:s,setDatePickerOpenColumn:f,setDraftRow:m})]},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)(L,{variant:`outline`,onClick:()=>s?h():m(Object.fromEntries(u.columns.map(e=>[e,xn(e,d?.[e],t)]))),disabled:!s&&!o||c,children:`Cancel`}),(0,$.jsx)(L,{onClick:s?g:_,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`,fn(u?.tableInfo?.dataSize)],[`Index size`,fn(u?.tableInfo?.indexSize)],[`Total size`,fn(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 $n({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)(D,{value:i.column,onValueChange:e=>e&&c(i.id,{column:e}),children:[(0,$.jsx)(O,{className:`h-8 min-w-32 max-w-48 text-xs`,children:(0,$.jsx)(N,{children:i.column||`Column`})}),(0,$.jsx)(T,{children:e.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsxs)(D,{value:i.operator,onValueChange:e=>e&&c(i.id,{operator:e}),children:[(0,$.jsx)(O,{className:`h-8 w-36 text-xs`,children:(0,$.jsx)(N,{children:i.operator})}),(0,$.jsx)(T,{children:dn.map(e=>(0,$.jsx)(M,{value:e,className:`text-xs`,children:e},e))})]}),(0,$.jsx)(H,{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)(H,{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)(L,{variant:`secondary`,size:`sm`,className:`h-8`,onClick:()=>l()&&r(i),children:`Apply`}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,disabled:t.length<=1,onClick:()=>o(i.id),title:`Remove filter`,children:(0,$.jsx)(De,{className:`h-3.5 w-3.5`})}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,onClick:()=>n(i.column||e[0]||``),title:`Add filter`,children:(0,$.jsx)(ye,{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)(L,{variant:`ghost`,size:`sm`,className:`h-8`,onClick:()=>{l()&&(a(),s(!1))},children:`Clear`}),(0,$.jsx)(L,{size:`sm`,className:`h-8`,onClick:()=>l()&&i(t),children:`Apply All`})]})]})})}function er({activeView:e,page:t,records:n,tableColumnCount:r,totalPages:i,warnUnsaved:a,onAddColumn:o,onAddIndex:s,onAddCheck:c,onInfo:l,onNextPage:u,onPrevPage:d,onViewChange:f}){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)(L,{variant:e===t?`secondary`:`ghost`,size:`sm`,className:`h-7 px-3 capitalize`,onClick:()=>f(t),children:t},t)),e===`structure`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:o,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Column`]}),(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:s,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Index`]}),(0,$.jsxs)(L,{variant:`outline`,size:`sm`,className:`h-7 px-2`,onClick:c,children:[(0,$.jsx)(ye,{className:`mr-1 h-3.5 w-3.5`}),`Check`]}),(0,$.jsx)(L,{variant:`ghost`,size:`icon-xs`,onClick:l,title:`Show table SQL`,children:(0,$.jsx)(be,{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)(L,{variant:`outline`,size:`icon-xs`,disabled:t<=1,onClick:()=>a()&&d(),children:(0,$.jsx)(at,{className:`h-4 w-4`})}),(0,$.jsx)(L,{variant:`outline`,size:`icon-xs`,disabled:t>=i,onClick:()=>a()&&u(),children:(0,$.jsx)(E,{className:`h-4 w-4`})})]})]})}function tr({className:e,...t}){return(0,$.jsx)(`div`,{"data-slot":`button-group`,className:R(`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 nr=e=>e===`mysql`,rr=e=>e===`postgresql`,ir=(e,t)=>nr(e)?`\`${t.replace(/`/g,"``")}\``:`"${t.replace(/"/g,`""`)}"`,ar=e=>e.replace(/[^A-Za-z0-9_.-]+/g,`_`),or=e=>e===`tab`?`Tab`:e===`;`?`Semicolon (;)`:`Comma (,)`,sr=e=>e===`,`?`Comma decimal (,)`:`Dot decimal (.)`;function cr(e,t){return e==null?``:t===`,`&&typeof e==`number`&&!Number.isInteger(e)?String(e).replace(`.`,`,`):String(e)}function lr(e,t,n){let r=cr(e,n);return/["\n\r]/.test(r)||r.includes(t)?`"${r.replace(/"/g,`""`)}"`:r}function ur(e){return e==null?`NULL`:typeof e==`number`?String(e):typeof e==`boolean`?e?`TRUE`:`FALSE`:`'${String(e).replace(/'/g,`''`)}'`}async function dr(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 fr(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),URL.revokeObjectURL(n)}function pr({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:p}){let m=n.table_name,h=(0,Q.useMemo)(()=>(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),[n]),[g,v]=(0,Q.useState)(null),[w,te]=(0,Q.useState)(`csv`),[E,A]=(0,Q.useState)(h),[j,ie]=(0,Q.useState)(`,`),[ae,R]=(0,Q.useState)(`.`),[oe,se]=(0,Q.useState)(!0),[z,ce]=(0,Q.useState)(!0),[le,ue]=(0,Q.useState)(!1),[B,pe]=(0,Q.useState)(`${m}_copy`),[me,he]=(0,Q.useState)(!1),[ge,_e]=(0,Q.useState)(!1),[V,ve]=(0,Q.useState)(!1),[ye,be]=(0,Q.useState)(!1),[xe,Ce]=(0,Q.useState)(``),[Te,Ee]=(0,Q.useState)(null),U=i?.length?i:[n],De=U.length===1,Oe=nr(t)||rr(t),ke=async t=>{let n=1,r=[],i=[];for(;;){let a=await je(`/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}},W=async n=>{let r=n.table_name,i=De?E:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean),a=Te?{rows:Te,columns:(n.columns||[]).map(e=>String(e.name||``)).filter(Boolean)}:z||w!==`sql`?await ke(r):{rows:[],columns:i},o=i.length?i:a.columns;if(w===`json`)return JSON.stringify(a.rows.map(e=>Object.fromEntries(o.map(t=>[t,e[t]]))),null,2);let s=j===`tab`?` `:j;if(w===`csv`)return[o.join(s),...a.rows.map(e=>o.map(t=>lr(e[t],s,ae)).join(s))].join(`
|
|
2
2
|
`);let c=[];if(oe){let t=await je(`/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(z)for(let e of a.rows)c.push(`INSERT INTO ${ir(t,r)} (${o.map(e=>ir(t,e)).join(`, `)}) VALUES (${o.map(t=>ur(e[t])).join(`, `)});`);return c.join(`
|
|
3
3
|
`)},Ae=e=>{Ee(e??a??null),A(h),v(`export`)},G=async()=>{try{if(be(!0),w===`json`&&!De){let e=await Promise.all(U.map(async e=>{let t=await ke(e.table_name);return[e.table_name,t.rows]})),t=`selected_tables.json`;fr(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}`),v(null);return}let e=await Promise.all(U.map(W)),t=w===`sql`?`sql`:w,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{R as r,z as i}from"./note-importer-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{R as r,z as i}from"./note-importer-B6ql7t2r.js";import{f as a,m as ee,p as o}from"./downloadSVG-sVCad7p8.js";import{n as s}from"./WorkspaceContext-M-vT9OAZ.js";import{t as c}from"./api-B4Lp0KNi.js";import{a as l}from"./WorkspaceProvider-BKu0LKCS.js";import{I as u,Tn as d,a as f,c as te,r as ne,s as p}from"./index-C3r2kpyC.js";import{a as m,i as re,n as h,o as g,r as _,s as v,t as y}from"./DataViewerModeToolbar-DnGcPEs4.js";import{t as b}from"./ProjectFileTabs-DNmVwnNp.js";var x=e(t(),1),S=n();function C(){let{id:e}=r(),[t,n]=i(),[C,w]=(0,x.useState)(null),[T,E]=(0,x.useState)(!0),[D,O]=(0,x.useState)(null),[k,A]=(0,x.useState)(null),[ie,j]=(0,x.useState)(0),[M,N,P]=o([]),[F,I,L]=a([]),[R,z]=(0,x.useState)(null),B=(0,x.useRef)({x:0,y:0,zoom:1}),V=(0,x.useRef)(null),H=(0,x.useRef)(null),{setViewport:U,getNodes:W}=ee(),{handleExportImage:G}=l(),{setBreadcrumbLabel:K}=s(),q=t.get(`tab`)||`data`,J=(0,x.useRef)(new Set([`data`]));J.current.add(q);let Y=Number(C?.catalog_id);V.current=C;let X=(0,x.useCallback)(e=>{n(t=>{let n=new URLSearchParams(t);return n.set(`tab`,e),n},{replace:!0})},[n]),Z=(0,x.useCallback)(async()=>{if(e){E(!0);try{let t=ne(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)}w(t),K(t.name);let n=Number(t.catalog_id);if(!n){N([]),I([]);return}let r=f(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=g(r.schema||[],t.data);N(i.nodes),I(i.edges),O(r.dbType||null);let a=t.data?.viewport;a&&(B.current=a,requestAnimationFrame(()=>U(a,{duration:0})))}finally{E(!1)}}},[e,K,I,N,U]);(0,x.useEffect)(()=>{let e=setTimeout(()=>{Z().catch(()=>w(null))});return()=>{clearTimeout(e),K(null)}},[Z,K]),(0,x.useEffect)(()=>{let e=e=>{A(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,x.useCallback)(async(e=B.current,t=W(),n=F)=>{let r=V.current;if(!r)return;let i=m(t,e,r.data,n);w(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,x.useCallback)(()=>{H.current&&clearTimeout(H.current),H.current=setTimeout(()=>{H.current=null,Q()},300)},[Q]),ae=(0,x.useCallback)((e,t)=>{B.current=t},[]),oe=(0,x.useCallback)((e,t)=>{B.current=t,$()},[$]);(0,x.useEffect)(()=>()=>{H.current&&(clearTimeout(H.current),H.current=null,Q())},[e,Q]);let se=(0,x.useCallback)(()=>{let e=v(M,F);N(e),Q(B.current,e)},[F,M,Q,N]),ce=(0,x.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 T?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Loading DB Client…`}):C?(0,S.jsxs)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:[(0,S.jsx)(b,{currentView:`db-client`,currentFile:C}),(0,S.jsx)(y,{activeMode:q,dbType:D,onModeChange:X}),Y?(0,S.jsx)(`div`,{className:q===`data`?`contents`:`hidden`,children:(0,S.jsx)(_,{connectionId:Y,stateKey:`${C.uid}:${Y}`,onDbTypeChange:O})}):null,J.current.has(`query`)&&Y?(0,S.jsx)(`div`,{className:q===`query`?`contents`:`hidden`,children:(0,S.jsx)(h,{connectionId:Y,dbClientId:Number(C.id),initialTable:k,openNonce:ie})}):null,J.current.has(`erd`)?(0,S.jsxs)(`div`,{className:q===`erd`?`contents`:`hidden`,children:[(0,S.jsx)(re,{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(C.name),onAutoLayout:se,isReadOnly:!0,isDbClient:!0,sourceConnectionId:Y,onEdgeReconnect:e=>{Q(B.current,W(),e)},onNodeDragStop:$,onMoveEnd:oe,isLoading:T}),(0,S.jsx)(u,{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,S.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center text-muted-foreground`,children:[(0,S.jsx)(d,{className:`mb-3 size-10 opacity-40`}),`DB Client not found`]})}export{C 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{L as r,R as i,z as a}from"./note-importer-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{L as r,R as i,z as a}from"./note-importer-B6ql7t2r.js";import{n as o}from"./WorkspaceContext-M-vT9OAZ.js";import"./WorkspaceProvider-BKu0LKCS.js";import{Tn as s}from"./index-C3r2kpyC.js";import{i as ee,n as te,r as ne,s as re,t as c}from"./DataViewerModeToolbar-DnGcPEs4.js";import{t as l}from"./ProjectFileTabs-DNmVwnNp.js";var u=e(t(),1),d=n();function f(){let e=o(),{id:t}=i(),n=r(),{nodes:f,edges:p,setNodes:m,isPublicView:h,publicData:g,activeDiagramId:_,activeDiagram:v,onNodesChange:ie,onEdgesChange:ae,onConnect:y,selectedNodeId:b,addEntity:x,undo:S,redo:C,canUndo:w,canRedo:T,takeSnapshot:E,onNodeDragStop:D,onMoveEnd:O,handleNodeClick:k,handleNodeDoubleClick:A,handleEdgeClick:j,handlePaneClick:M,handleMove:N,handleWorkspaceExportSQL:P,handleWorkspaceExportImage:F,handleOpenImportModal:I,viewportRef:oe,saveDiagram:L,triggerDebouncedSync:se,isERDItemLoading:R,handleDiagramSelect:z,pendingErdDiffTrigger:B,extractColumnIdFromHandle:V,getRelationKey:H,dedupeEdgesByRelation:U}=e,W=(0,u.useRef)(!1),[G,K]=a(),[q,ce]=(0,u.useState)(null),[le,ue]=(0,u.useState)(0),[de,fe]=(0,u.useState)(null),J=(0,u.useMemo)(()=>!h&&(h?g:v)?.source_type===`production_db`,[h,g,v]);(0,u.useEffect)(()=>{!J||!v||n(`/db-client/${v.uid||v.id}`,{replace:!0})},[v,J,n]);let Y=G.get(`tab`)||(J?`data`:`erd`),X=(0,u.useCallback)(e=>{K(t=>{let n=new URLSearchParams(t);return n.set(`tab`,e),n},{replace:!0})},[K]);(0,u.useEffect)(()=>{J&&!G.get(`tab`)&&K(e=>{let t=new URLSearchParams(e);return t.set(`tab`,`data`),t},{replace:!0})},[J,K]),(0,u.useEffect)(()=>{let e=e=>{ce(e.detail?.table||null),ue(e=>e+1),X(`query`)};return window.addEventListener(`db-connect-open-query`,e),()=>window.removeEventListener(`db-connect-open-query`,e)},[X]);let pe=(0,u.useCallback)(()=>{if(!f||f.length===0)return;let e=re(f,p);E?.(f,p),m(e)},[f,p,m,E]);(0,u.useEffect)(()=>{if(!(h||!t)&&!W.current){if(String(_)===t){W.current=!0;return}_||(W.current=!0,z(t))}},[t,_,h,z]);let Z=(0,u.useMemo)(()=>{let e=(h?g:v)?.source_connection_id;return e==null?void 0:Number(e)},[h,g,v]);if(!h&&!_)return t&&!W.current?(0,d.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,d.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,d.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading diagram...`})]}):(0,d.jsx)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:(0,d.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Select a diagram to view`})});let Q=h?g:v,me=h||J,$=`${Q?.uid||Q?.id||``}:${Z||``}`;return!Q&&!h&&!R?(0,d.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,d.jsx)(s,{className:`w-12 h-12 text-muted-foreground/40 mb-4`}),(0,d.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:`Diagram not found`}),(0,d.jsx)(`p`,{className:`text-xs text-muted-foreground/60 mt-1`,children:`This diagram may have been deleted or is no longer available.`})]}):!Q&&!h?(0,d.jsxs)(`div`,{className:`flex-1 flex flex-col items-center justify-center border rounded-xl bg-muted/10`,children:[(0,d.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,d.jsx)(`p`,{className:`mt-4 text-sm font-medium text-muted-foreground animate-pulse`,children:`Loading diagram...`})]}):J?(0,d.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-muted-foreground`,children:`Opening DB Client…`}):(0,d.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,d.jsx)(l,{currentView:J?`db-client`:`erd`}),J&&!h&&(0,d.jsx)(c,{activeMode:Y,dbType:de,onModeChange:X}),Y===`data`&&J&&!h&&Z?(0,d.jsx)(ne,{connectionId:Z,stateKey:$,onDbTypeChange:fe},$):Y===`query`&&J&&!h&&Z&&Q?.id?(0,d.jsx)(te,{connectionId:Z,dbClientId:Number(Q.id),initialTable:q,openNonce:le}):(0,d.jsx)(ee,{isLoading:R,nodes:f,edges:p,setNodes:e.setNodes,setEdges:e.setEdges,onNodesChange:ie,onEdgesChange:ae,onConnect:y,onNodeClick:k,onNodeDoubleClick:A,onEdgeClick:j,onPaneClick:M,onMove:N,addEntity:x,onImportSQL:I,onAutoLayout:pe,handleExportSQL:P,handleExportImage:F,isReadOnly:me,isDbClient:J,sourceConnectionId:Z,undo:S,redo:C,canUndo:w,canRedo:T,takeSnapshot:E,selectedNodeId:b,onNodeDragStop:D,onMoveEnd:O,saveDiagram:L,triggerDebouncedSync:se,pendingErdDiffTrigger:B,extractColumnIdFromHandle:V,getRelationKey:H,dedupeEdgesByRelation:U},h?g?.id:_)]})}export{f 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{R as i}from"./note-importer-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DrawingsView-D0eNZF8l.js","assets/rolldown-runtime-C0FnF6B9.js","assets/jsx-runtime-DSr1VPkp.js","assets/index-C3r2kpyC.js","assets/react-dom-CGnP4YFq.js","assets/preload-helper-Czpn1I53.js","assets/note-importer-B6ql7t2r.js","assets/dist--spER_Rx.js","assets/src-B-DeWB10.js","assets/value-Cwm0ChEK.js","assets/utils-TcK2FSyg.js","assets/api-B4Lp0KNi.js","assets/image-compression-COYPhRs3.js","assets/downloadSVG-sVCad7p8.js","assets/WorkspaceContext-M-vT9OAZ.js","assets/vanilla--C5Lp_AM.js","assets/useControlled-DHoxCuAI.js","assets/floating-ui.utils.dom-B_-bZDGP.js","assets/AIActionContext-sBtUZeB9.js","assets/useCompositeItem-ZIV61RjL.js","assets/floating-ui.utils-DrtUanoU.js","assets/createLucideIcon-CyJfQrak.js","assets/floating-ui.react-dom-C3qLYNxV.js","assets/input-BDCM7QEk.js","assets/link-2-DBo-eQZM.js","assets/wand-sparkles-C9YiTYBh.js","assets/popover-B51mz7qL.js","assets/scroll-area-CQ2HKq3N.js","assets/card-Dy6p8t6g.js","assets/textarea-Bvirh6bi.js","assets/extends-CvVTau-c.js","assets/table-DCsJJ7Zs.js","assets/WorkspaceProvider-BKu0LKCS.js","assets/dist-js-DXG5pDMi.js","assets/core-DNaw6KYU.js","assets/label-Co-it7VP.js","assets/index-DuOqxUTN.css","assets/ExcalidrawEditor-eQe4pyA3.js","assets/Combination-DBeRPSUX.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{R as i}from"./note-importer-B6ql7t2r.js";import{n as a}from"./WorkspaceContext-M-vT9OAZ.js";import{t as o}from"./image-vqz7pCPE.js";import"./WorkspaceProvider-BKu0LKCS.js";import{t as s}from"./ProjectFileTabs-DNmVwnNp.js";var c=e(t(),1),l=n(),u=c.lazy(()=>r(()=>import(`./DrawingsView-D0eNZF8l.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])));function d(){let e=a(),{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)(o,{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{Kt 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{Kt as r}from"./index-C3r2kpyC.js";import i from"./ExcalidrawEditor-eQe4pyA3.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};
|
|
@@ -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{b as r}from"./note-importer-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t,t as n}from"./jsx-runtime-DSr1VPkp.js";import{b as r}from"./note-importer-B6ql7t2r.js";import{h as i,o as a}from"./downloadSVG-sVCad7p8.js";import{s as o}from"./dist--spER_Rx.js";import{n as s}from"./WorkspaceContext-M-vT9OAZ.js";import{T as c,_ as l,h as u,n as d,x as f,y as p}from"./AIActionContext-sBtUZeB9.js";import{D as m}from"./useCompositeItem-ZIV61RjL.js";import{r as h}from"./utils-TcK2FSyg.js";import{c as g,d as _,l as v,m as y,p as b}from"./popover-B51mz7qL.js";import{B as x,G as S,H as C,J as w,K as T,U as E,V as D,W as O,Y as k,q as A}from"./textarea-Bvirh6bi.js";import"./WorkspaceProvider-BKu0LKCS.js";import{Tn as j}from"./index-C3r2kpyC.js";var M=e(t(),1),N=n(),P=`erdbpro:notes-companion-edit-entity`,F=`!w-2 !h-2 !border-none cursor-crosshair opacity-0 transition-opacity duration-150 group-hover:!opacity-100 group-focus-within:!opacity-100`,I=(0,M.memo)(({col:e,borderColor:t,typeColor:n,hideHandles:i,onDoubleClick:s})=>{let c=e._is_fk,l=e.diffState,u=(0,M.useMemo)(()=>({top:`50%`,left:`-4px`,transform:`translate(-50%, -50%)`,backgroundColor:t,zIndex:50}),[t]),d=(0,M.useMemo)(()=>({top:`50%`,right:`-4px`,transform:`translate(50%, -50%)`,backgroundColor:t,zIndex:50}),[t]),f=(0,M.useMemo)(()=>l===`new`?`bg-emerald-500/10 hover:bg-emerald-500/15 border-b border-emerald-500/20`:l===`deleted`?`bg-red-500/10 hover:bg-red-500/15 line-through opacity-50 border-b border-red-500/20`:`border-border/50 hover:bg-muted`,[l]);return(0,N.jsxs)(`div`,{className:h(`erd-column-row group relative px-3 py-2 flex items-center justify-between transition-colors border-b last:border-b-0`,f),title:e.comment||void 0,onDoubleClick:s,children:[i?(0,N.jsxs)(N.Fragment,{children:[e._is_ref&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(a,{type:`target`,position:o.Left,id:`col-${e.id}-target`,className:F,style:u}),(0,N.jsx)(a,{type:`target`,position:o.Right,id:`col-${e.id}-target-r`,className:F,style:d})]}),e._is_fk&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(a,{type:`source`,position:o.Left,id:`col-${e.id}-source-l`,className:F,style:u}),(0,N.jsx)(a,{type:`source`,position:o.Right,id:`col-${e.id}-source`,className:F,style:d})]})]}):(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(a,{type:`target`,position:o.Left,id:`col-${e.id}-target`,className:F,style:u}),(0,N.jsx)(a,{type:`source`,position:o.Left,id:`col-${e.id}-source-l`,className:F,style:u}),(0,N.jsx)(a,{type:`source`,position:o.Right,id:`col-${e.id}-source`,className:F,style:d}),(0,N.jsx)(a,{type:`target`,position:o.Right,id:`col-${e.id}-target-r`,className:F,style:d})]}),(0,N.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,N.jsx)(`span`,{className:h(`text-sm font-medium`,e.is_pk?`text-foreground`:`text-foreground/80`,l===`new`&&`text-emerald-400 font-semibold`,l===`deleted`&&`text-red-400/80 line-through`),children:l===`new`?`+ ${e.name}`:l===`deleted`?`- ${e.name}`:e.name})}),(0,N.jsxs)(`div`,{className:`flex flex-col items-end gap-0.5 max-w-35`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,N.jsx)(`span`,{className:`text-[11px] font-mono font-semibold`,style:{color:l===`new`?`#10b981`:l===`deleted`?`#ef4444`:n},children:r(e.type,e.max_length,e.numeric_precision,e.numeric_scale).toLowerCase()}),e.comment&&(0,N.jsx)(_,{className:`w-3 h-3 text-muted-foreground`}),(e.is_pk||c)&&(0,N.jsxs)(`div`,{className:`flex items-center gap-1`,children:[e.is_pk&&(0,N.jsx)(`span`,{className:`text-[10px] font-bold text-foreground/40 uppercase tracking-tighter`,children:`pk`}),c&&(0,N.jsx)(`span`,{className:`text-[10px] font-bold text-foreground/40 uppercase tracking-tighter`,children:`fk`})]})]}),e.type.toUpperCase()===`ENUM`&&e.enum_values&&(0,N.jsxs)(`span`,{className:`font-mono italic text-right leading-tight wrap-break-word max-w-full text-[8.5px] text-muted-foreground`,children:[`(`,e.enum_values,`)`]})]})]})}),L=(0,M.memo)(({data:e,id:t,selected:n})=>{let{isPublicView:r,duplicateEntity:a,activeDocument:o,setSelectedNodeId:_}=s(),{setRightPanelMode:F}=d(),L=!!e._notesCompanion,R=!L&&(o?.source_type===`production_db`||!!e.isReadOnly),z=r||!!e.isDiffMode||R,[B,V]=(0,M.useState)(!1),H=i(),U=(0,M.useMemo)(()=>e.columns.map(e=>`${e.id}-${e.name}-${e.sort_order}`).join(`,`),[e.columns]);(0,M.useEffect)(()=>{H(t)},[t,U,H]);let W=e=>{if(e.preventDefault(),e.stopPropagation(),!z){if(L){window.dispatchEvent(new CustomEvent(P,{detail:{id:t}}));return}_(t),F(`properties`)}},G=e=>{e.preventDefault(),e.stopPropagation(),!z&&V(!0)},K=e=>{e.preventDefault(),e.stopPropagation(),!z&&a(t)},q=()=>{window.dispatchEvent(new CustomEvent(`deleteEntity`,{detail:t})),V(!1)},J=e.diffState,{borderColor:Y,headerBg:X,typeColor:Z}=(0,M.useMemo)(()=>J===`new`?{borderColor:`#10b981`,headerBg:`rgba(16, 185, 129, 0.15)`,typeColor:`#10b981`}:J===`deleted`?{borderColor:`#ef4444`,headerBg:`rgba(239, 68, 68, 0.15)`,typeColor:`#ef4444`}:J===`modified`?{borderColor:`#f59e0b`,headerBg:`rgba(245, 158, 11, 0.15)`,typeColor:`#f59e0b`}:{borderColor:e.color,headerBg:`${e.color}20`,typeColor:e.color},[e.color,J]),Q=(0,M.useMemo)(()=>h(`bg-card text-foreground rounded-lg border-2 min-w-[220px] erd-node-container`,n&&`ring-2 ring-primary/50`,J===`new`&&`shadow-[0_0_20px_rgba(16,185,129,0.35)] border-emerald-500/50`,J===`deleted`&&`opacity-40 shadow-[0_0_15px_rgba(239,68,68,0.25)] border-red-500/50`,J===`modified`&&`shadow-[0_0_20px_rgba(245,158,11,0.3)] border-amber-500/50`),[n,J]),$=(0,M.useMemo)(()=>[...e.columns].sort((e,t)=>(e.sort_order||0)-(t.sort_order||0)),[e.columns]);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:Q,style:{borderColor:Y,overflow:`visible`},children:[(0,N.jsxs)(`div`,{className:`px-3 py-2 flex items-center justify-between border-b-2 cursor-pointer group/header`,style:{backgroundColor:X,borderColor:Y},onDoubleClick:z?void 0:W,title:z?void 0:`Double-click to edit table`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(j,{className:`w-4 h-4 transition-transform group-hover/header:rotate-12`,style:{color:Y}}),(0,N.jsx)(`span`,{className:h(`font-bold text-sm tracking-wide uppercase`,J===`deleted`&&`line-through text-red-400`),children:e.name}),J===`new`&&(0,N.jsx)(`span`,{className:`px-1 py-0.5 text-[8px] font-bold bg-emerald-500/20 text-emerald-400 border border-emerald-500/30 rounded uppercase tracking-wider`,children:`NEW`}),J===`deleted`&&(0,N.jsx)(`span`,{className:`px-1 py-0.5 text-[8px] font-bold bg-red-500/20 text-red-400 border border-red-500/30 rounded uppercase tracking-wider`,children:`DEL`}),J===`modified`&&(0,N.jsx)(`span`,{className:`px-1 py-0.5 text-[8px] font-bold bg-amber-500/20 text-amber-400 border border-amber-500/30 rounded uppercase tracking-wider`,children:`MOD`})]}),!z&&!L&&(0,N.jsxs)(u,{children:[(0,N.jsx)(c,{className:`nodrag nopan p-1 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors focus:outline-none`,onPointerDown:e=>e.stopPropagation(),onPointerUp:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:(0,N.jsx)(b,{className:`w-4 h-4`})}),(0,N.jsxs)(l,{align:`end`,className:`w-44 bg-popover border-border text-popover-foreground z-1000`,onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[(0,N.jsxs)(p,{onClick:W,className:`cursor-pointer hover:bg-muted focus:bg-muted`,children:[(0,N.jsx)(v,{className:`w-4 h-4 mr-2`}),`Edit`]}),(0,N.jsxs)(p,{onClick:K,className:`cursor-pointer hover:bg-muted focus:bg-muted`,children:[(0,N.jsx)(y,{className:`w-4 h-4 mr-2`}),`Duplicate`]}),(0,N.jsx)(f,{className:`bg-border`}),(0,N.jsxs)(p,{onClick:G,className:`cursor-pointer text-destructive focus:text-destructive hover:bg-destructive/10 focus:bg-destructive/10`,children:[(0,N.jsx)(m,{className:`w-4 h-4 mr-2`}),`Delete Table`]})]})]})]}),(0,N.jsx)(`div`,{className:h(`flex flex-col`,!z&&`cursor-pointer`),onDoubleClick:z?void 0:W,title:z?void 0:`Double-click to edit table`,children:$.map(e=>(0,N.jsx)(I,{col:e,borderColor:Y,typeColor:Z,hideHandles:R,onDoubleClick:z?void 0:W},e.id))})]}),(0,N.jsx)(x,{open:B,onOpenChange:V,children:(0,N.jsxs)(O,{size:`sm`,className:`max-w-100`,children:[(0,N.jsxs)(A,{children:[(0,N.jsx)(w,{className:`bg-destructive/10`,children:(0,N.jsx)(g,{className:`w-5 h-5 text-destructive`})}),(0,N.jsx)(k,{children:`Delete Table`})]}),(0,N.jsx)(C,{children:(0,N.jsxs)(S,{children:[`Are you sure you want to delete the table `,(0,N.jsx)(`strong`,{children:e.name}),`? This action cannot be undone.`]})}),(0,N.jsxs)(T,{children:[(0,N.jsx)(E,{onClick:e=>{e.stopPropagation(),V(!1)},children:`Cancel`}),(0,N.jsx)(D,{onClick:e=>{e.stopPropagation(),q()},className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,children:`Delete`})]})]})})]})});export{P as n,L as t};
|