mongoku 2.2.4 → 2.4.0
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/build/client/_app/immutable/assets/0.C-Y-CVnr.css +1 -0
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.BrydhPds.css +1 -0
- package/build/client/_app/immutable/assets/10.BrydhPds.css.br +0 -0
- package/build/client/_app/immutable/assets/10.BrydhPds.css.gz +0 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css +1 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.br +0 -0
- package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.gz +0 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css +1 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.br +0 -0
- package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js +1 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js.br +0 -0
- package/build/client/_app/immutable/chunks/0oUK0vJa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js +16 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js.br +0 -0
- package/build/client/_app/immutable/chunks/3xIOsPOb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js +24 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/B83FMsIQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js +1 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js.br +0 -0
- package/build/client/_app/immutable/chunks/BGXqurs_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js +1 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPbCnJEo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js +1 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js.br +0 -0
- package/build/client/_app/immutable/chunks/BXUq66wC.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js +14 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZY48V2X.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js +1 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bq7qZpXP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js +1 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxoAxRg6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js +2 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByCRZ7zS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D4iRRB8h.js → C1g0HmEj.js} +1 -1
- package/build/client/_app/immutable/chunks/C1g0HmEj.js.br +0 -0
- package/build/client/_app/immutable/chunks/C1g0HmEj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js +1 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js.br +0 -0
- package/build/client/_app/immutable/chunks/DGtnJf56.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DR9xdhsg.js → DIw4Wyr4.js} +1 -1
- package/build/client/_app/immutable/chunks/DIw4Wyr4.js.br +0 -0
- package/build/client/_app/immutable/chunks/DIw4Wyr4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js +1 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dn0_-jEe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js +1 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js.br +0 -0
- package/build/client/_app/immutable/chunks/UJuWD2W4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Dx56OlI-.js → _Sxqiax7.js} +1 -1
- package/build/client/_app/immutable/chunks/_Sxqiax7.js.br +0 -0
- package/build/client/_app/immutable/chunks/_Sxqiax7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js +1 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js.br +0 -0
- package/build/client/_app/immutable/chunks/_kKBJjiB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js +4 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js.br +0 -0
- package/build/client/_app/immutable/chunks/pj4OZpZf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js +1 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/reNJcONQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js +2 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DV8my7lq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js +1 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CHeMkIYN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js +1 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js +1 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js +1 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js +1 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js +1 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.BneOFPb1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js +66 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DwwrLLW4.js → 2.DqvBb3C7.js} +1 -1
- package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.t20GootO.js → 3.27swwcG4.js} +1 -1
- package/build/client/_app/immutable/nodes/3.27swwcG4.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.27swwcG4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.CXHjkPtf.js → 4.CcholrFe.js} +1 -1
- package/build/client/_app/immutable/nodes/4.CcholrFe.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CcholrFe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.C9tcr5B0.js → 5.CzudN9q-.js} +1 -1
- package/build/client/_app/immutable/nodes/5.CzudN9q-.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CzudN9q-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js +1 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js +1 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.js +2 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-BHG1s0_H.js +22 -0
- package/build/server/chunks/0-BHG1s0_H.js.map +1 -0
- package/build/server/chunks/1-Xz1zN5FT.js +9 -0
- package/build/server/chunks/1-Xz1zN5FT.js.map +1 -0
- package/build/server/chunks/{10-DGUQMXHt.js → 10-CaYvpZVK.js} +6 -5
- package/build/server/chunks/10-CaYvpZVK.js.map +1 -0
- package/build/server/chunks/{11-CxBnyyqR.js → 11-uJK96PLt.js} +6 -5
- package/build/server/chunks/11-uJK96PLt.js.map +1 -0
- package/build/server/chunks/{12-K_JVUnsk.js → 12-CvEEILKx.js} +14 -13
- package/build/server/chunks/12-CvEEILKx.js.map +1 -0
- package/build/server/chunks/{13-Cay35aHK.js → 13-Cvk7ClFs.js} +6 -5
- package/build/server/chunks/{13-Cay35aHK.js.map → 13-Cvk7ClFs.js.map} +1 -1
- package/build/server/chunks/{2-ClkERMhY.js → 2-BheEgghx.js} +2 -2
- package/build/server/chunks/{2-ClkERMhY.js.map → 2-BheEgghx.js.map} +1 -1
- package/build/server/chunks/{3-CTpqmxdo.js → 3-BwrTscBH.js} +2 -2
- package/build/server/chunks/{3-CTpqmxdo.js.map → 3-BwrTscBH.js.map} +1 -1
- package/build/server/chunks/{4-CUH4fZn8.js → 4-D28kbpdN.js} +2 -2
- package/build/server/chunks/{4-CUH4fZn8.js.map → 4-D28kbpdN.js.map} +1 -1
- package/build/server/chunks/{5-BSEdxfut.js → 5--wY8V1OC.js} +2 -2
- package/build/server/chunks/{5-BSEdxfut.js.map → 5--wY8V1OC.js.map} +1 -1
- package/build/server/chunks/{7-DvU-_ADW.js → 7-DTmi6ASF.js} +6 -5
- package/build/server/chunks/7-DTmi6ASF.js.map +1 -0
- package/build/server/chunks/{8-CA3-CJtS.js → 8-CHIpUo4j.js} +6 -5
- package/build/server/chunks/8-CHIpUo4j.js.map +1 -0
- package/build/server/chunks/{9-jMOS3lPS.js → 9-C3nw_taL.js} +6 -5
- package/build/server/chunks/9-C3nw_taL.js.map +1 -0
- package/build/server/chunks/{JsonValue-WMdIUvRM.js → JsonValue-DiECF6Zd.js} +11 -4
- package/build/server/chunks/JsonValue-DiECF6Zd.js.map +1 -0
- package/build/server/chunks/{Modal-zVnoAfFx.js → Modal-BzZ9u6V6.js} +3 -3
- package/build/server/chunks/Modal-BzZ9u6V6.js.map +1 -0
- package/build/server/chunks/Panel-DEP08QXV.js +48 -0
- package/build/server/chunks/Panel-DEP08QXV.js.map +1 -0
- package/build/server/chunks/{PrettyJson-D3CylSVd.js → PrettyJson-ElzPxPF4.js} +55 -40
- package/build/server/chunks/PrettyJson-ElzPxPF4.js.map +1 -0
- package/build/server/chunks/Tooltip-DK6Aok7l.js +35 -0
- package/build/server/chunks/Tooltip-DK6Aok7l.js.map +1 -0
- package/build/server/chunks/{TooltipTable-DCu3GLqO.js → TooltipTable-DUYKVtrh.js} +3 -3
- package/build/server/chunks/{TooltipTable-DCu3GLqO.js.map → TooltipTable-DUYKVtrh.js.map} +1 -1
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js +159 -0
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C-13GpOe.js → _page.svelte-B4BL5PJR.js} +18 -16
- package/build/server/chunks/_page.svelte-B4BL5PJR.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BRxX_vQR.js → _page.svelte-BUheieJ5.js} +26 -15
- package/build/server/chunks/_page.svelte-BUheieJ5.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BBHqwhWF.js → _page.svelte-Bj297hp1.js} +16 -15
- package/build/server/chunks/_page.svelte-Bj297hp1.js.map +1 -0
- package/build/server/chunks/{_page.svelte-2w3fCax2.js → _page.svelte-BvjNfjgw.js} +14 -14
- package/build/server/chunks/{_page.svelte-2w3fCax2.js.map → _page.svelte-BvjNfjgw.js.map} +1 -1
- package/build/server/chunks/_page.svelte-DDe4hyAB.js +387 -0
- package/build/server/chunks/_page.svelte-DDe4hyAB.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Ca9u_35e.js → _page.svelte-DEe2Kbbw.js} +72 -12
- package/build/server/chunks/_page.svelte-DEe2Kbbw.js.map +1 -0
- package/build/server/chunks/_page.svelte-DJFPwyij.js +323 -0
- package/build/server/chunks/_page.svelte-DJFPwyij.js.map +1 -0
- package/build/server/chunks/client-Cp5ag8tA.js +7 -0
- package/build/server/chunks/{client-BFlyU7ZU.js.map → client-Cp5ag8tA.js.map} +1 -1
- package/build/server/chunks/{client2-DYaMKWrc.js → client2-Dos6p_Xm.js} +3 -4
- package/build/server/chunks/{client2-DYaMKWrc.js.map → client2-Dos6p_Xm.js.map} +1 -1
- package/build/server/chunks/{error.svelte-BENdaVOT.js → error.svelte-BBEhCLUJ.js} +6 -7
- package/build/server/chunks/{error.svelte-BENdaVOT.js.map → error.svelte-BBEhCLUJ.js.map} +1 -1
- package/build/server/chunks/{index2-DBFlGzWV.js → index2-DzKnqQNM.js} +2 -2
- package/build/server/chunks/{index2-DBFlGzWV.js.map → index2-DzKnqQNM.js.map} +1 -1
- package/build/server/chunks/{index3-CoOO2o9t.js → index3-DANRthiW.js} +2 -2
- package/build/server/chunks/{index3-CoOO2o9t.js.map → index3-DANRthiW.js.map} +1 -1
- package/build/server/chunks/{mongo-Db8Vgimy.js → mongo-BHk5yAj9.js} +90 -19
- package/build/server/chunks/mongo-BHk5yAj9.js.map +1 -0
- package/build/server/chunks/{remote-xxtqbu-AjxdDZZ_.js → remote-xxtqbu-DBe3CqEJ.js} +6 -6
- package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +1 -0
- package/build/server/chunks/{server2-_mGVuBoG.js → server2-YmCaJGWy.js} +2 -2
- package/build/server/chunks/{server2-_mGVuBoG.js.map → server2-YmCaJGWy.js.map} +1 -1
- package/build/server/chunks/{servers.remote-DrkuAWHP.js → servers.remote-HDmNH7n4.js} +245 -15
- package/build/server/chunks/servers.remote-HDmNH7n4.js.map +1 -0
- package/build/server/chunks/{shared-Buki-xt5.js → shared-CQd3A1I4.js} +2 -2
- package/build/server/chunks/{shared-Buki-xt5.js.map → shared-CQd3A1I4.js.map} +1 -1
- package/build/server/chunks/{state.svelte-C8IWmp_n.js → state.svelte-Dm0prnTp.js} +2 -2
- package/build/server/chunks/{state.svelte-C8IWmp_n.js.map → state.svelte-Dm0prnTp.js.map} +1 -1
- package/build/server/chunks/{event-DVH-6ISX.js → utils-D1ahxout.js} +39 -2
- package/build/server/chunks/utils-D1ahxout.js.map +1 -0
- package/build/server/index.js +5 -6
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +15 -15
- package/build/server/manifest.js.map +1 -1
- package/package.json +3 -2
- package/src/api/servers.remote.ts +275 -11
- package/src/app.css +178 -135
- package/src/app.html +23 -10
- package/src/lib/actions/portal.ts +42 -0
- package/src/lib/components/Breadcrumbs.svelte +20 -60
- package/src/lib/components/JsonValue.svelte +30 -1
- package/src/lib/components/Modal.svelte +5 -5
- package/src/lib/components/Notifications.svelte +42 -21
- package/src/lib/components/PageSwitcher.svelte +16 -10
- package/src/lib/components/Panel.svelte +19 -15
- package/src/lib/components/PrettyJson.svelte +102 -90
- package/src/lib/components/ReplicaSetSelector.svelte +144 -0
- package/src/lib/components/SearchBox.svelte +117 -96
- package/src/lib/components/ThemeSwitcher.svelte +191 -36
- package/src/lib/components/Tooltip.svelte +23 -14
- package/src/lib/server/mongo.ts +129 -26
- package/src/lib/utils/formatSignificantDigits.ts +30 -0
- package/src/lib/utils/formatTimeAgo.ts +20 -0
- package/src/lib/utils/hostnames.ts +86 -0
- package/src/lib/utils/jsonParser.ts +50 -0
- package/src/lib/utils/longestCommonSuffix.ts +47 -0
- package/src/lib/utils/sum.ts +10 -0
- package/src/routes/+layout.svelte +36 -17
- package/src/routes/servers/+page.svelte +6 -7
- package/src/routes/servers/[server]/databases/+page.svelte +71 -2
- package/src/routes/servers/[server]/databases/[database]/collections/+page.svelte +13 -3
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +292 -57
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.server.ts +8 -8
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.svelte +628 -105
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/mappings/+page.svelte +26 -12
- package/build/client/_app/immutable/assets/0.COnAcXN4.css +0 -1
- package/build/client/_app/immutable/assets/0.COnAcXN4.css.br +0 -0
- package/build/client/_app/immutable/assets/0.COnAcXN4.css.gz +0 -0
- package/build/client/_app/immutable/assets/10.59aTjJn9.css +0 -1
- package/build/client/_app/immutable/assets/10.59aTjJn9.css.br +0 -0
- package/build/client/_app/immutable/assets/10.59aTjJn9.css.gz +0 -0
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css +0 -1
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css.br +0 -0
- package/build/client/_app/immutable/assets/12.BdCOhvz0.css.gz +0 -0
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css +0 -1
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.br +0 -0
- package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.gz +0 -0
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css +0 -1
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css.br +0 -0
- package/build/client/_app/immutable/assets/Panel.B3aWupye.css.gz +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.Cnibl3-L.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.RKIjpA76.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.CT5q4ZVh.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.iCCFJ4Gn.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-400-normal.Cbwtr8a4.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-400-normal.CjFvNwMJ.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BWTJtpjo.woff2 +0 -0
- package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BZXayy47.woff +0 -0
- package/build/client/_app/immutable/assets/cuprum-vietnamese-400-normal.uXRi1gw5.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.BdIzgbsr.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.CTuj2HZW.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.C6_q4usG.woff +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.CurJOxDW.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.DACPYgMx.woff2 +0 -0
- package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.Der7ynDE.woff +0 -0
- package/build/client/_app/immutable/chunks/3iRu_dUj.js +0 -2
- package/build/client/_app/immutable/chunks/3iRu_dUj.js.br +0 -0
- package/build/client/_app/immutable/chunks/3iRu_dUj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/5nAxkTTP.js +0 -1
- package/build/client/_app/immutable/chunks/5nAxkTTP.js.br +0 -5
- package/build/client/_app/immutable/chunks/5nAxkTTP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BBg-V8FE.js +0 -1
- package/build/client/_app/immutable/chunks/BBg-V8FE.js.br +0 -0
- package/build/client/_app/immutable/chunks/BBg-V8FE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BE8UzJuY.js +0 -1
- package/build/client/_app/immutable/chunks/BE8UzJuY.js.br +0 -0
- package/build/client/_app/immutable/chunks/BE8UzJuY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js +0 -1
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQEBQyfZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BUNgwIS0.js +0 -1
- package/build/client/_app/immutable/chunks/BUNgwIS0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BUNgwIS0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BvKY81hz.js +0 -1
- package/build/client/_app/immutable/chunks/BvKY81hz.js.br +0 -0
- package/build/client/_app/immutable/chunks/BvKY81hz.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0PCwpqt.js +0 -23
- package/build/client/_app/immutable/chunks/C0PCwpqt.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0PCwpqt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0rm4mmq.js +0 -1
- package/build/client/_app/immutable/chunks/C0rm4mmq.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0rm4mmq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C2sjtvBO.js +0 -1
- package/build/client/_app/immutable/chunks/C2sjtvBO.js.br +0 -0
- package/build/client/_app/immutable/chunks/C2sjtvBO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js +0 -1
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/C82Rp5eQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CGSOl_q_.js +0 -4
- package/build/client/_app/immutable/chunks/CGSOl_q_.js.br +0 -0
- package/build/client/_app/immutable/chunks/CGSOl_q_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CjNnAkTB.js +0 -1
- package/build/client/_app/immutable/chunks/CjNnAkTB.js.br +0 -0
- package/build/client/_app/immutable/chunks/CjNnAkTB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js +0 -1
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cx2cA4gg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D4iRRB8h.js.br +0 -0
- package/build/client/_app/immutable/chunks/D4iRRB8h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5ccpaXt.js +0 -1
- package/build/client/_app/immutable/chunks/D5ccpaXt.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5ccpaXt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D7E46CWw.js +0 -1
- package/build/client/_app/immutable/chunks/D7E46CWw.js.br +0 -0
- package/build/client/_app/immutable/chunks/D7E46CWw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DR9xdhsg.js.br +0 -0
- package/build/client/_app/immutable/chunks/DR9xdhsg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVRQRZnh.js +0 -1
- package/build/client/_app/immutable/chunks/DVRQRZnh.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVRQRZnh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js +0 -29
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js.br +0 -0
- package/build/client/_app/immutable/chunks/DcPEQ0_V.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dx56OlI-.js.br +0 -2
- package/build/client/_app/immutable/chunks/Dx56OlI-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PXh00dfp.js +0 -2
- package/build/client/_app/immutable/chunks/PXh00dfp.js.br +0 -0
- package/build/client/_app/immutable/chunks/PXh00dfp.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js +0 -2
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DrdSPfGo.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js +0 -1
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js.br +0 -2
- package/build/client/_app/immutable/entry/start.DGG3CpnK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js +0 -5
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.kCLtccjl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js +0 -1
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.br +0 -3
- package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js +0 -2
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js +0 -1
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js +0 -1
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js +0 -66
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.br +0 -1
- package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.t20GootO.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.t20GootO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.D14iWySv.js +0 -1
- package/build/client/_app/immutable/nodes/7.D14iWySv.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.D14iWySv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js +0 -1
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js +0 -2
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.gz +0 -0
- package/build/server/chunks/0-BozXjQlk.js +0 -22
- package/build/server/chunks/0-BozXjQlk.js.map +0 -1
- package/build/server/chunks/1-C_LPMO7A.js +0 -9
- package/build/server/chunks/1-C_LPMO7A.js.map +0 -1
- package/build/server/chunks/10-DGUQMXHt.js.map +0 -1
- package/build/server/chunks/11-CxBnyyqR.js.map +0 -1
- package/build/server/chunks/12-K_JVUnsk.js.map +0 -1
- package/build/server/chunks/7-DvU-_ADW.js.map +0 -1
- package/build/server/chunks/8-CA3-CJtS.js.map +0 -1
- package/build/server/chunks/9-jMOS3lPS.js.map +0 -1
- package/build/server/chunks/JsonValue-WMdIUvRM.js.map +0 -1
- package/build/server/chunks/Modal-zVnoAfFx.js.map +0 -1
- package/build/server/chunks/Panel-yg5YKL4d.js +0 -38
- package/build/server/chunks/Panel-yg5YKL4d.js.map +0 -1
- package/build/server/chunks/PrettyJson-D3CylSVd.js.map +0 -1
- package/build/server/chunks/Tooltip-ys6l541_.js +0 -28
- package/build/server/chunks/Tooltip-ys6l541_.js.map +0 -1
- package/build/server/chunks/_layout.svelte-DMm1Ill8.js +0 -168
- package/build/server/chunks/_layout.svelte-DMm1Ill8.js.map +0 -1
- package/build/server/chunks/_page.svelte-BBHqwhWF.js.map +0 -1
- package/build/server/chunks/_page.svelte-BRxX_vQR.js.map +0 -1
- package/build/server/chunks/_page.svelte-C-13GpOe.js.map +0 -1
- package/build/server/chunks/_page.svelte-Ca9u_35e.js.map +0 -1
- package/build/server/chunks/_page.svelte-Cm_vgRRR.js +0 -206
- package/build/server/chunks/_page.svelte-Cm_vgRRR.js.map +0 -1
- package/build/server/chunks/_page.svelte-DoOBFRSo.js +0 -299
- package/build/server/chunks/_page.svelte-DoOBFRSo.js.map +0 -1
- package/build/server/chunks/client-BFlyU7ZU.js +0 -7
- package/build/server/chunks/event-DVH-6ISX.js.map +0 -1
- package/build/server/chunks/mongo-Db8Vgimy.js.map +0 -1
- package/build/server/chunks/remote-xxtqbu-AjxdDZZ_.js.map +0 -1
- package/build/server/chunks/servers.remote-DrkuAWHP.js.map +0 -1
- package/build/server/chunks/utils-kjxf7BZO.js +0 -39
- package/build/server/chunks/utils-kjxf7BZO.js.map +0 -1
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
<div class="modal" onclick={(e) => e.stopPropagation()}>
|
|
32
32
|
{#if title}
|
|
33
33
|
<div class="modal-header">
|
|
34
|
-
<h3>{title}</h3>
|
|
34
|
+
<h3 style="color: var(--text);">{title}</h3>
|
|
35
35
|
</div>
|
|
36
36
|
{/if}
|
|
37
|
-
<div class="modal-body">
|
|
37
|
+
<div class="modal-body" style="color: var(--text);">
|
|
38
38
|
{@render children?.()}
|
|
39
39
|
</div>
|
|
40
40
|
{#if footer}
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
|
|
49
49
|
<style lang="postcss">
|
|
50
50
|
.modal-header {
|
|
51
|
-
padding:
|
|
51
|
+
padding: 24px 24px 0;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
.modal-header h3 {
|
|
55
55
|
margin: 0;
|
|
56
|
-
font-size: 1.
|
|
57
|
-
font-weight:
|
|
56
|
+
font-size: 1.375rem;
|
|
57
|
+
font-weight: 600;
|
|
58
58
|
}
|
|
59
59
|
</style>
|
|
@@ -6,7 +6,22 @@
|
|
|
6
6
|
{#each notificationStore.items as notification (notification.id)}
|
|
7
7
|
<div class="notification notification-{notification.type}">
|
|
8
8
|
<span>{notification.message}</span>
|
|
9
|
-
<button onclick={() => notificationStore.remove(notification.id)}
|
|
9
|
+
<button onclick={() => notificationStore.remove(notification.id)} aria-label="Dismiss notification">
|
|
10
|
+
<svg
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
width="18"
|
|
13
|
+
height="18"
|
|
14
|
+
viewBox="0 0 24 24"
|
|
15
|
+
fill="none"
|
|
16
|
+
stroke="currentColor"
|
|
17
|
+
stroke-width="2"
|
|
18
|
+
stroke-linecap="round"
|
|
19
|
+
stroke-linejoin="round"
|
|
20
|
+
>
|
|
21
|
+
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
22
|
+
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
23
|
+
</svg>
|
|
24
|
+
</button>
|
|
10
25
|
</div>
|
|
11
26
|
{/each}
|
|
12
27
|
</div>
|
|
@@ -14,63 +29,69 @@
|
|
|
14
29
|
<style lang="postcss">
|
|
15
30
|
.notifications {
|
|
16
31
|
position: fixed;
|
|
17
|
-
top:
|
|
32
|
+
top: 90px;
|
|
18
33
|
right: 20px;
|
|
19
|
-
|
|
34
|
+
/* Show above modal overlay */
|
|
35
|
+
z-index: 1001;
|
|
20
36
|
display: flex;
|
|
21
37
|
flex-direction: column;
|
|
22
|
-
gap:
|
|
38
|
+
gap: 12px;
|
|
23
39
|
}
|
|
24
40
|
|
|
25
41
|
.notification {
|
|
26
|
-
padding:
|
|
27
|
-
border-radius:
|
|
28
|
-
box-shadow: 0
|
|
42
|
+
padding: 14px 18px;
|
|
43
|
+
border-radius: 1rem;
|
|
44
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
45
|
+
backdrop-filter: blur(10px);
|
|
29
46
|
display: flex;
|
|
30
47
|
align-items: center;
|
|
31
|
-
gap:
|
|
32
|
-
min-width:
|
|
33
|
-
max-width:
|
|
34
|
-
animation: slideIn 0.
|
|
48
|
+
gap: 12px;
|
|
49
|
+
min-width: 320px;
|
|
50
|
+
max-width: 480px;
|
|
51
|
+
animation: slideIn 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
|
52
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
53
|
+
font-size: 14px;
|
|
35
54
|
|
|
36
55
|
button {
|
|
37
|
-
background:
|
|
56
|
+
background: rgba(255, 255, 255, 0.2);
|
|
38
57
|
border: none;
|
|
39
|
-
|
|
58
|
+
border-radius: 8px;
|
|
40
59
|
cursor: pointer;
|
|
41
|
-
opacity: 0.
|
|
60
|
+
opacity: 0.8;
|
|
42
61
|
margin-left: auto;
|
|
43
|
-
padding:
|
|
44
|
-
width:
|
|
45
|
-
height:
|
|
62
|
+
padding: 4px;
|
|
63
|
+
width: 28px;
|
|
64
|
+
height: 28px;
|
|
46
65
|
display: flex;
|
|
47
66
|
align-items: center;
|
|
48
67
|
justify-content: center;
|
|
68
|
+
transition: all 0.2s;
|
|
49
69
|
|
|
50
70
|
&:hover {
|
|
51
71
|
opacity: 1;
|
|
72
|
+
background: rgba(255, 255, 255, 0.3);
|
|
52
73
|
}
|
|
53
74
|
}
|
|
54
75
|
}
|
|
55
76
|
|
|
56
77
|
.notification-error {
|
|
57
|
-
background-color: #
|
|
78
|
+
background-color: #ff453a;
|
|
58
79
|
color: white;
|
|
59
80
|
}
|
|
60
81
|
|
|
61
82
|
.notification-success {
|
|
62
|
-
background-color: #
|
|
83
|
+
background-color: #32d74b;
|
|
63
84
|
color: white;
|
|
64
85
|
}
|
|
65
86
|
|
|
66
87
|
.notification-info {
|
|
67
|
-
background-color: #
|
|
88
|
+
background-color: #0a84ff;
|
|
68
89
|
color: white;
|
|
69
90
|
}
|
|
70
91
|
|
|
71
92
|
@keyframes slideIn {
|
|
72
93
|
from {
|
|
73
|
-
transform: translateX(
|
|
94
|
+
transform: translateX(450px);
|
|
74
95
|
opacity: 0;
|
|
75
96
|
}
|
|
76
97
|
to {
|
|
@@ -14,21 +14,27 @@
|
|
|
14
14
|
</script>
|
|
15
15
|
|
|
16
16
|
{#if categories.length}
|
|
17
|
-
<div
|
|
18
|
-
|
|
17
|
+
<div
|
|
18
|
+
class="hidden sm:flex rounded-lg border border-[var(--border-color)] overflow-hidden bg-[var(--light-background)] shadow-sm {className}"
|
|
19
|
+
>
|
|
20
|
+
{#each categories as category (category.key)}
|
|
19
21
|
{@const isActive = currentPath === category.key}
|
|
20
|
-
{@const sharedClasses = `btn btn-default btn-sm uppercase
|
|
21
|
-
${index === 0 ? "" : "rounded-l-none"}
|
|
22
|
-
${index === categories.length - 1 ? "" : "rounded-r-none"}
|
|
23
|
-
${index > 0 ? "-ml-px" : ""}
|
|
24
|
-
${isActive ? "opacity-100 cursor-default !bg-[var(--color-3)]" : ""}`}
|
|
25
22
|
{#if isActive}
|
|
26
|
-
<span
|
|
23
|
+
<span
|
|
24
|
+
class="px-3 py-1.5 text-[13px] font-medium bg-[var(--color-1)] shadow-[inset_0_-1px_0_rgba(0,0,0,0.06)] cursor-default"
|
|
25
|
+
style="color: var(--text);"
|
|
26
|
+
>
|
|
27
27
|
{category.label}
|
|
28
28
|
</span>
|
|
29
29
|
{:else}
|
|
30
|
-
<!-- eslint-disable
|
|
31
|
-
|
|
30
|
+
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
31
|
+
<!-- data-sveltekit-reload because sometimes, when on documents pages and switching to indexes page, I get an error -->
|
|
32
|
+
<a
|
|
33
|
+
data-sveltekit-reload
|
|
34
|
+
href={resolve(category.href as any)}
|
|
35
|
+
class="px-3 py-1.5 text-[13px] hover:bg-[var(--color-3)] transition no-underline"
|
|
36
|
+
style="color: var(--text-secondary);"
|
|
37
|
+
>
|
|
32
38
|
{category.label}
|
|
33
39
|
</a>
|
|
34
40
|
{/if}
|
|
@@ -4,21 +4,32 @@
|
|
|
4
4
|
interface Props {
|
|
5
5
|
children?: Snippet;
|
|
6
6
|
title?: string | Snippet;
|
|
7
|
+
titleClass?: string;
|
|
7
8
|
actions?: Snippet;
|
|
8
9
|
class?: string;
|
|
10
|
+
ref?: HTMLDivElement;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
|
-
let { children, title, actions, class: className }: Props = $props();
|
|
13
|
+
let { children, title, titleClass, actions, class: className, ref = $bindable() }: Props = $props();
|
|
12
14
|
</script>
|
|
13
15
|
|
|
14
|
-
<div
|
|
16
|
+
<div
|
|
17
|
+
bind:this={ref}
|
|
18
|
+
class="rounded-2xl border border-[var(--border-color)] bg-[var(--light-background)]/70 shadow-sm {className}"
|
|
19
|
+
>
|
|
15
20
|
{#if title}
|
|
16
|
-
<div
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{
|
|
21
|
+
<div
|
|
22
|
+
class="px-3 sm:px-4 py-2 flex justify-between items-center {children
|
|
23
|
+
? 'border-b border-[var(--border-color)]'
|
|
24
|
+
: ''}"
|
|
25
|
+
>
|
|
26
|
+
<div class="text-sm font-medium {titleClass}" style="color: var(--text);">
|
|
27
|
+
{#if typeof title === "string"}
|
|
28
|
+
<span>{title}</span>
|
|
29
|
+
{:else}
|
|
30
|
+
{@render title()}
|
|
31
|
+
{/if}
|
|
32
|
+
</div>
|
|
22
33
|
{#if actions}
|
|
23
34
|
<div class="flex gap-2 items-center">
|
|
24
35
|
{@render actions()}
|
|
@@ -28,10 +39,3 @@
|
|
|
28
39
|
{/if}
|
|
29
40
|
{@render children?.()}
|
|
30
41
|
</div>
|
|
31
|
-
|
|
32
|
-
<style lang="postcss">
|
|
33
|
-
.panel {
|
|
34
|
-
background-color: var(--light-background);
|
|
35
|
-
border: var(--border);
|
|
36
|
-
}
|
|
37
|
-
</style>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { jsonTextarea } from "$lib/actions/jsonTextarea";
|
|
5
5
|
import { notificationStore } from "$lib/stores/notifications.svelte";
|
|
6
6
|
import type { Mappings, MongoDocument } from "$lib/types";
|
|
7
|
-
import { parseJSON } from "$lib/utils/jsonParser";
|
|
7
|
+
import { parseJSON, serializeForEditing } from "$lib/utils/jsonParser";
|
|
8
8
|
import JsonValue from "./JsonValue.svelte";
|
|
9
9
|
import Panel from "./Panel.svelte";
|
|
10
10
|
|
|
@@ -90,7 +90,9 @@
|
|
|
90
90
|
let editJson = $state("");
|
|
91
91
|
let removing = $state(false);
|
|
92
92
|
let contentContainerRef = $state<HTMLDivElement>();
|
|
93
|
-
let
|
|
93
|
+
let textareaRef = $state<HTMLTextAreaElement>();
|
|
94
|
+
let panelRef = $state<HTMLDivElement>();
|
|
95
|
+
let lastSetHeight = $state<number>(0);
|
|
94
96
|
|
|
95
97
|
// Extract timestamp from ObjectId
|
|
96
98
|
function getTimestampFromObjectId(objectId: string): Date | null {
|
|
@@ -103,61 +105,8 @@
|
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
|
|
106
|
-
// Custom serializer that converts ObjectId objects back to new ObjectId() format
|
|
107
|
-
function serializeForEditing(obj: any, depth = 0): string {
|
|
108
|
-
const indent = "\t".repeat(depth);
|
|
109
|
-
const nextIndent = "\t".repeat(depth + 1);
|
|
110
|
-
|
|
111
|
-
if (obj === null) return "null";
|
|
112
|
-
if (obj === undefined) return "undefined";
|
|
113
|
-
if (typeof obj === "string") return JSON.stringify(obj);
|
|
114
|
-
if (typeof obj === "number") return obj.toString();
|
|
115
|
-
if (typeof obj === "boolean") return obj.toString();
|
|
116
|
-
|
|
117
|
-
if (Array.isArray(obj)) {
|
|
118
|
-
if (obj.length === 0) return "[]";
|
|
119
|
-
const items = obj.map((item) => `${nextIndent}${serializeForEditing(item, depth + 1)}`).join(",\n");
|
|
120
|
-
return `[\n${items}\n${indent}]`;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (typeof obj === "object") {
|
|
124
|
-
// Handle special MongoDB types
|
|
125
|
-
if (obj.$type === "ObjectId") {
|
|
126
|
-
return `new ObjectId("${obj.$value}")`;
|
|
127
|
-
}
|
|
128
|
-
if (obj.$type === "Date") {
|
|
129
|
-
return `new Date("${obj.$value}")`;
|
|
130
|
-
}
|
|
131
|
-
if (obj.$type === "RegExp") {
|
|
132
|
-
return `new RegExp("${obj.$value.$pattern}", "${obj.$value.$flags}")`;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Handle regular objects
|
|
136
|
-
const keys = Object.keys(obj);
|
|
137
|
-
if (keys.length === 0) return "{}";
|
|
138
|
-
|
|
139
|
-
const pairs = keys
|
|
140
|
-
.map((key) => {
|
|
141
|
-
const value = serializeForEditing(obj[key], depth + 1);
|
|
142
|
-
return `${nextIndent}${JSON.stringify(key)}: ${value}`;
|
|
143
|
-
})
|
|
144
|
-
.join(",\n");
|
|
145
|
-
|
|
146
|
-
return `{\n${pairs}\n${indent}}`;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return JSON.stringify(obj);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
108
|
function enableEditor() {
|
|
153
109
|
editJson = serializeForEditing(json);
|
|
154
|
-
|
|
155
|
-
// Set editor height to match the full content container (including padding)
|
|
156
|
-
if (contentContainerRef) {
|
|
157
|
-
const height = contentContainerRef.offsetHeight;
|
|
158
|
-
editorHeight = `${Math.max(height, 300)}px`;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
110
|
editorVisible = true;
|
|
162
111
|
}
|
|
163
112
|
|
|
@@ -168,9 +117,39 @@
|
|
|
168
117
|
}
|
|
169
118
|
});
|
|
170
119
|
|
|
120
|
+
// Watch for textarea resize and update panel height
|
|
121
|
+
$effect(() => {
|
|
122
|
+
if (!textareaRef || !panelRef || !editorVisible) return;
|
|
123
|
+
|
|
124
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
125
|
+
for (const entry of entries) {
|
|
126
|
+
const newHeight = entry.borderBoxSize[0].blockSize;
|
|
127
|
+
// Only update if height changed and is different from what we last set
|
|
128
|
+
if (newHeight > 0 && Math.abs(newHeight - lastSetHeight) > 1) {
|
|
129
|
+
const totalHeight = newHeight; // Add padding for buttons
|
|
130
|
+
lastSetHeight = newHeight;
|
|
131
|
+
if (panelRef) {
|
|
132
|
+
panelRef.style.minHeight = `${totalHeight}px`;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
resizeObserver.observe(textareaRef);
|
|
139
|
+
|
|
140
|
+
return () => {
|
|
141
|
+
resizeObserver.disconnect();
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
|
|
171
145
|
function disableEditor() {
|
|
172
146
|
editorVisible = false;
|
|
173
147
|
editJson = "";
|
|
148
|
+
lastSetHeight = 0;
|
|
149
|
+
// Reset panel min-height when editor closes
|
|
150
|
+
if (panelRef) {
|
|
151
|
+
panelRef.style.minHeight = "";
|
|
152
|
+
}
|
|
174
153
|
}
|
|
175
154
|
|
|
176
155
|
function save() {
|
|
@@ -209,20 +188,24 @@
|
|
|
209
188
|
{#snippet title()}
|
|
210
189
|
{#if json._id}
|
|
211
190
|
{@const idValue = json._id.$value ?? json._id}
|
|
212
|
-
<div class="">
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
191
|
+
<div class="flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 min-w-0 flex-1">
|
|
192
|
+
<h2 class="truncate">
|
|
193
|
+
<a
|
|
194
|
+
class="text-[15px] sm:text-base font-semibold hover:underline no-underline"
|
|
195
|
+
style="color: var(--text); text-decoration-color: var(--link);"
|
|
196
|
+
href={resolve(
|
|
197
|
+
`/servers/${encodeURIComponent(server)}/databases/${encodeURIComponent(database)}/collections/${encodeURIComponent(collection)}/documents/${idValue}`,
|
|
198
|
+
)}
|
|
199
|
+
>
|
|
200
|
+
{idValue}
|
|
201
|
+
</a>
|
|
202
|
+
</h2>
|
|
222
203
|
{#if json._id.$value}
|
|
223
204
|
{@const timestamp = getTimestampFromObjectId(json._id.$value)}
|
|
224
205
|
{#if timestamp}
|
|
225
|
-
<
|
|
206
|
+
<p class="text-xs" style="color: var(--text-secondary);">
|
|
207
|
+
Created on {timestamp.toLocaleDateString()} · {timestamp.toLocaleTimeString()}
|
|
208
|
+
</p>
|
|
226
209
|
{/if}
|
|
227
210
|
{/if}
|
|
228
211
|
</div>
|
|
@@ -230,44 +213,73 @@
|
|
|
230
213
|
{/snippet}
|
|
231
214
|
|
|
232
215
|
{#snippet actions()}
|
|
233
|
-
<div class="hidden group-hover:
|
|
234
|
-
<button
|
|
216
|
+
<div class="hidden group-hover:flex items-center gap-2 -my-2">
|
|
217
|
+
<button
|
|
218
|
+
class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition cursor-pointer"
|
|
219
|
+
style="color: var(--text);"
|
|
220
|
+
onclick={copyToClipboard}
|
|
221
|
+
>
|
|
222
|
+
Copy
|
|
223
|
+
</button>
|
|
235
224
|
{#if onedit}
|
|
236
|
-
<button
|
|
225
|
+
<button
|
|
226
|
+
class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition cursor-pointer"
|
|
227
|
+
style="color: var(--text);"
|
|
228
|
+
onclick={enableEditor}
|
|
229
|
+
>
|
|
230
|
+
Edit
|
|
231
|
+
</button>
|
|
237
232
|
{/if}
|
|
238
233
|
{#if onremove}
|
|
239
|
-
<button
|
|
234
|
+
<button
|
|
235
|
+
class="px-3 py-1 rounded-lg border border-red-200 hover:bg-red-50 text-[13px] transition cursor-pointer"
|
|
236
|
+
style="color: var(--button-danger);"
|
|
237
|
+
onclick={showRemove}
|
|
238
|
+
>
|
|
239
|
+
Delete
|
|
240
|
+
</button>
|
|
240
241
|
{/if}
|
|
241
242
|
</div>
|
|
242
243
|
{/snippet}
|
|
243
244
|
|
|
244
|
-
<Panel class="group" title={json._id ? title : undefined} {actions}>
|
|
245
|
-
<div bind:this={contentContainerRef} class="
|
|
246
|
-
<div class="font-mono text-sm leading-
|
|
245
|
+
<Panel class="group relative" title={json._id ? title : undefined} {actions} bind:ref={panelRef}>
|
|
246
|
+
<div bind:this={contentContainerRef} class="relative p-4 sm:p-6">
|
|
247
|
+
<div class="font-mono text-[13px] sm:text-[14px] leading-relaxed whitespace-pre-wrap break-words overflow-x-auto">
|
|
247
248
|
<JsonValue value={json} {autoCollapse} collapsed={false} {isKeyMapped} {fetchMappedDocument} />
|
|
248
249
|
</div>
|
|
249
250
|
|
|
250
|
-
|
|
251
|
-
<div
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
{#if removing}
|
|
252
|
+
<div
|
|
253
|
+
class="absolute z-10 top-0 left-0 w-full h-full rounded-2xl backdrop-blur-sm flex items-center justify-center"
|
|
254
|
+
style="background-color: rgba(0, 0, 0, 0.4);"
|
|
255
|
+
>
|
|
256
|
+
<div
|
|
257
|
+
class="bg-[var(--light-background)] rounded-2xl p-6 shadow-xl border border-[var(--border-color)] max-w-sm mx-4"
|
|
258
|
+
>
|
|
259
|
+
<p class="text-lg font-semibold mb-4" style="color: var(--text);">Delete this document?</p>
|
|
260
|
+
<p class="text-sm mb-6" style="color: var(--text-secondary);">This action cannot be undone.</p>
|
|
261
|
+
<div class="flex gap-3">
|
|
262
|
+
<button class="btn btn-danger flex-1" onclick={confirmRemove}>Delete</button>
|
|
263
|
+
<button class="btn btn-default flex-1" onclick={cancelRemove}>Cancel</button>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
254
266
|
</div>
|
|
267
|
+
{/if}
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
{#if editorVisible}
|
|
271
|
+
<div class="absolute inset-0 z-[100] bg-[var(--light-background)]">
|
|
255
272
|
<textarea
|
|
273
|
+
bind:this={textareaRef}
|
|
256
274
|
bind:value={editJson}
|
|
257
|
-
style="height: {editorHeight};"
|
|
258
275
|
use:jsonTextarea={{ onsubmit: save, onescape: disableEditor }}
|
|
259
|
-
class="w-full font-mono text-sm leading-relaxed p-
|
|
276
|
+
class="w-full h-full font-mono text-[13px] sm:text-[14px] leading-relaxed p-4 border-0 bg-[var(--color-3)] focus:outline-none focus:ring-0"
|
|
277
|
+
style="color: var(--text);"
|
|
260
278
|
></textarea>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
<div class="absolute z-10 top-0 left-0 w-full h-full rounded bg-[var(--text-inverse)] opacity-70">
|
|
265
|
-
<p class="text-[var(--text)] text-center mt-5 text-2xl">Are you sure?</p>
|
|
266
|
-
<div class="absolute w-full h-full top-0 flex justify-center items-center">
|
|
267
|
-
<button class="btn btn-danger m-5" onclick={confirmRemove}>Yes - Remove</button>
|
|
268
|
-
<button class="btn btn-success m-5" onclick={cancelRemove}>No - Cancel</button>
|
|
269
|
-
</div>
|
|
279
|
+
<div class="absolute top-3 right-3 flex items-center gap-2">
|
|
280
|
+
<button class="btn btn-success" onclick={save}>Save</button>
|
|
281
|
+
<button class="btn btn-default" onclick={disableEditor}>Cancel</button>
|
|
270
282
|
</div>
|
|
271
|
-
|
|
272
|
-
|
|
283
|
+
</div>
|
|
284
|
+
{/if}
|
|
273
285
|
</Panel>
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { findBestSuffixMatch } from "$lib/utils/longestCommonSuffix";
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
availableNodes?: string[];
|
|
6
|
+
selectedNodes?: string[];
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
primaryNode?: string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
availableNodes = $bindable([]),
|
|
13
|
+
selectedNodes = $bindable([]),
|
|
14
|
+
loading = false,
|
|
15
|
+
primaryNode = null,
|
|
16
|
+
}: Props = $props();
|
|
17
|
+
|
|
18
|
+
// Track which nodes are checked - sync with selectedNodes prop
|
|
19
|
+
let nodeCheckedState = $derived.by(() =>
|
|
20
|
+
Object.fromEntries(availableNodes.map((node) => [node, selectedNodes.includes(node)])),
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
// Find the actual primary node by matching the longest common suffix
|
|
24
|
+
const matchedPrimaryNode = $derived.by(() => {
|
|
25
|
+
if (!primaryNode || availableNodes.length === 0) return null;
|
|
26
|
+
return findBestSuffixMatch(primaryNode, availableNodes);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
function refreshSelectedNodes() {
|
|
30
|
+
selectedNodes = Object.keys(nodeCheckedState).filter((node) => nodeCheckedState[node]);
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<div class="replica-set-selector">
|
|
35
|
+
<div class="selector-header">
|
|
36
|
+
<span class="selector-title">Replica Set Nodes</span>
|
|
37
|
+
<span class="selector-subtitle">Select specific nodes to fetch index stats from</span>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
{#if loading}
|
|
41
|
+
<div class="loading-message">Loading nodes...</div>
|
|
42
|
+
{:else if availableNodes.length === 0}
|
|
43
|
+
<div class="no-nodes-message">No nodes found. Click "Fetch Usage" to load nodes.</div>
|
|
44
|
+
{:else}
|
|
45
|
+
<div class="selector-options">
|
|
46
|
+
{#each availableNodes as node (node)}
|
|
47
|
+
<label class="checkbox-label">
|
|
48
|
+
<input type="checkbox" bind:checked={nodeCheckedState[node]} onchange={refreshSelectedNodes} />
|
|
49
|
+
<span class="node-name" title={node}>
|
|
50
|
+
{node}
|
|
51
|
+
{#if node === matchedPrimaryNode}
|
|
52
|
+
<span class="primary-badge">PRIMARY</span>
|
|
53
|
+
{/if}
|
|
54
|
+
</span>
|
|
55
|
+
</label>
|
|
56
|
+
{/each}
|
|
57
|
+
</div>
|
|
58
|
+
{/if}
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<style lang="postcss">
|
|
62
|
+
.replica-set-selector {
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
gap: 12px;
|
|
66
|
+
padding: 16px;
|
|
67
|
+
border-radius: 8px;
|
|
68
|
+
background-color: var(--color-2);
|
|
69
|
+
border: 1px solid var(--border-color);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.selector-header {
|
|
73
|
+
display: flex;
|
|
74
|
+
flex-direction: column;
|
|
75
|
+
gap: 4px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.selector-title {
|
|
79
|
+
font-size: 14px;
|
|
80
|
+
font-weight: 600;
|
|
81
|
+
color: var(--text);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.selector-subtitle {
|
|
85
|
+
font-size: 12px;
|
|
86
|
+
color: var(--text-darker);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.selector-options {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex-direction: column;
|
|
92
|
+
gap: 8px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.checkbox-label {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
cursor: pointer;
|
|
100
|
+
font-size: 14px;
|
|
101
|
+
color: var(--text);
|
|
102
|
+
user-select: none;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.checkbox-label input[type="checkbox"] {
|
|
106
|
+
width: 16px;
|
|
107
|
+
height: 16px;
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
accent-color: var(--button-primary);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.loading-message,
|
|
113
|
+
.no-nodes-message {
|
|
114
|
+
padding: 12px;
|
|
115
|
+
font-size: 13px;
|
|
116
|
+
color: var(--text-darker);
|
|
117
|
+
text-align: center;
|
|
118
|
+
background-color: var(--color-3);
|
|
119
|
+
border-radius: 4px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.node-name {
|
|
123
|
+
font-family: monospace;
|
|
124
|
+
font-size: 13px;
|
|
125
|
+
overflow: hidden;
|
|
126
|
+
text-overflow: ellipsis;
|
|
127
|
+
white-space: nowrap;
|
|
128
|
+
display: flex;
|
|
129
|
+
align-items: center;
|
|
130
|
+
gap: 8px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.primary-badge {
|
|
134
|
+
display: inline-block;
|
|
135
|
+
padding: 2px 6px;
|
|
136
|
+
background-color: hsl(210, 100%, 50%);
|
|
137
|
+
color: white;
|
|
138
|
+
border-radius: 3px;
|
|
139
|
+
font-size: 10px;
|
|
140
|
+
font-weight: 700;
|
|
141
|
+
letter-spacing: 0.5px;
|
|
142
|
+
flex-shrink: 0;
|
|
143
|
+
}
|
|
144
|
+
</style>
|