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.
Files changed (398) hide show
  1. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css +1 -0
  2. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/10.BrydhPds.css +1 -0
  5. package/build/client/_app/immutable/assets/10.BrydhPds.css.br +0 -0
  6. package/build/client/_app/immutable/assets/10.BrydhPds.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css +1 -0
  8. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.br +0 -0
  9. package/build/client/_app/immutable/assets/12.I1sSDJ6i.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css +1 -0
  11. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.br +0 -0
  12. package/build/client/_app/immutable/assets/Modal.zD4dMMyk.css.gz +0 -0
  13. package/build/client/_app/immutable/chunks/0oUK0vJa.js +1 -0
  14. package/build/client/_app/immutable/chunks/0oUK0vJa.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/0oUK0vJa.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/3xIOsPOb.js +16 -0
  17. package/build/client/_app/immutable/chunks/3xIOsPOb.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/3xIOsPOb.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/B83FMsIQ.js +24 -0
  20. package/build/client/_app/immutable/chunks/B83FMsIQ.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/B83FMsIQ.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/BGXqurs_.js +1 -0
  23. package/build/client/_app/immutable/chunks/BGXqurs_.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/BGXqurs_.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/BPbCnJEo.js +1 -0
  26. package/build/client/_app/immutable/chunks/BPbCnJEo.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BPbCnJEo.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/BXUq66wC.js +1 -0
  29. package/build/client/_app/immutable/chunks/BXUq66wC.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/BXUq66wC.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/BZY48V2X.js +14 -0
  32. package/build/client/_app/immutable/chunks/BZY48V2X.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/BZY48V2X.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/Bq7qZpXP.js +1 -0
  35. package/build/client/_app/immutable/chunks/Bq7qZpXP.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/Bq7qZpXP.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/BxoAxRg6.js +1 -0
  38. package/build/client/_app/immutable/chunks/BxoAxRg6.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/BxoAxRg6.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/ByCRZ7zS.js +2 -0
  41. package/build/client/_app/immutable/chunks/ByCRZ7zS.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/ByCRZ7zS.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/{D4iRRB8h.js → C1g0HmEj.js} +1 -1
  44. package/build/client/_app/immutable/chunks/C1g0HmEj.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/C1g0HmEj.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/DGtnJf56.js +1 -0
  47. package/build/client/_app/immutable/chunks/DGtnJf56.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/DGtnJf56.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/{DR9xdhsg.js → DIw4Wyr4.js} +1 -1
  50. package/build/client/_app/immutable/chunks/DIw4Wyr4.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/DIw4Wyr4.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/Dn0_-jEe.js +1 -0
  53. package/build/client/_app/immutable/chunks/Dn0_-jEe.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/Dn0_-jEe.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/UJuWD2W4.js +1 -0
  56. package/build/client/_app/immutable/chunks/UJuWD2W4.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/UJuWD2W4.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/{Dx56OlI-.js → _Sxqiax7.js} +1 -1
  59. package/build/client/_app/immutable/chunks/_Sxqiax7.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/_Sxqiax7.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/_kKBJjiB.js +1 -0
  62. package/build/client/_app/immutable/chunks/_kKBJjiB.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/_kKBJjiB.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/pj4OZpZf.js +4 -0
  65. package/build/client/_app/immutable/chunks/pj4OZpZf.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/pj4OZpZf.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/reNJcONQ.js +1 -0
  68. package/build/client/_app/immutable/chunks/reNJcONQ.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/reNJcONQ.js.gz +0 -0
  70. package/build/client/_app/immutable/entry/app.DV8my7lq.js +2 -0
  71. package/build/client/_app/immutable/entry/app.DV8my7lq.js.br +0 -0
  72. package/build/client/_app/immutable/entry/app.DV8my7lq.js.gz +0 -0
  73. package/build/client/_app/immutable/entry/start.CHeMkIYN.js +1 -0
  74. package/build/client/_app/immutable/entry/start.CHeMkIYN.js.br +0 -0
  75. package/build/client/_app/immutable/entry/start.CHeMkIYN.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js +1 -0
  77. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/0.CNNOoOHl.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js +1 -0
  80. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/1.C-65KEEJ.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js +1 -0
  83. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/10.BQ-b15Yh.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js +1 -0
  86. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.br +0 -0
  87. package/build/client/_app/immutable/nodes/11.iU-GIxdi.js.gz +0 -0
  88. package/build/client/_app/immutable/nodes/12.BneOFPb1.js +1 -0
  89. package/build/client/_app/immutable/nodes/12.BneOFPb1.js.br +0 -0
  90. package/build/client/_app/immutable/nodes/12.BneOFPb1.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js +66 -0
  92. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.br +0 -0
  93. package/build/client/_app/immutable/nodes/13.BsUY4XVc.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/{2.DwwrLLW4.js → 2.DqvBb3C7.js} +1 -1
  95. package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/2.DqvBb3C7.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/{3.t20GootO.js → 3.27swwcG4.js} +1 -1
  98. package/build/client/_app/immutable/nodes/3.27swwcG4.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/3.27swwcG4.js.gz +0 -0
  100. package/build/client/_app/immutable/nodes/{4.CXHjkPtf.js → 4.CcholrFe.js} +1 -1
  101. package/build/client/_app/immutable/nodes/4.CcholrFe.js.br +0 -0
  102. package/build/client/_app/immutable/nodes/4.CcholrFe.js.gz +0 -0
  103. package/build/client/_app/immutable/nodes/{5.C9tcr5B0.js → 5.CzudN9q-.js} +1 -1
  104. package/build/client/_app/immutable/nodes/5.CzudN9q-.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/5.CzudN9q-.js.gz +0 -0
  106. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js +1 -0
  107. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.br +0 -0
  108. package/build/client/_app/immutable/nodes/7.S2O-z1Ox.js.gz +0 -0
  109. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js +1 -0
  110. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.br +0 -0
  111. package/build/client/_app/immutable/nodes/8.aa4EbN0k.js.gz +0 -0
  112. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js +2 -0
  113. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/9.9dZgqvLb.js.gz +0 -0
  115. package/build/client/_app/version.json +1 -1
  116. package/build/client/_app/version.json.br +0 -0
  117. package/build/client/_app/version.json.gz +0 -0
  118. package/build/server/chunks/0-BHG1s0_H.js +22 -0
  119. package/build/server/chunks/0-BHG1s0_H.js.map +1 -0
  120. package/build/server/chunks/1-Xz1zN5FT.js +9 -0
  121. package/build/server/chunks/1-Xz1zN5FT.js.map +1 -0
  122. package/build/server/chunks/{10-DGUQMXHt.js → 10-CaYvpZVK.js} +6 -5
  123. package/build/server/chunks/10-CaYvpZVK.js.map +1 -0
  124. package/build/server/chunks/{11-CxBnyyqR.js → 11-uJK96PLt.js} +6 -5
  125. package/build/server/chunks/11-uJK96PLt.js.map +1 -0
  126. package/build/server/chunks/{12-K_JVUnsk.js → 12-CvEEILKx.js} +14 -13
  127. package/build/server/chunks/12-CvEEILKx.js.map +1 -0
  128. package/build/server/chunks/{13-Cay35aHK.js → 13-Cvk7ClFs.js} +6 -5
  129. package/build/server/chunks/{13-Cay35aHK.js.map → 13-Cvk7ClFs.js.map} +1 -1
  130. package/build/server/chunks/{2-ClkERMhY.js → 2-BheEgghx.js} +2 -2
  131. package/build/server/chunks/{2-ClkERMhY.js.map → 2-BheEgghx.js.map} +1 -1
  132. package/build/server/chunks/{3-CTpqmxdo.js → 3-BwrTscBH.js} +2 -2
  133. package/build/server/chunks/{3-CTpqmxdo.js.map → 3-BwrTscBH.js.map} +1 -1
  134. package/build/server/chunks/{4-CUH4fZn8.js → 4-D28kbpdN.js} +2 -2
  135. package/build/server/chunks/{4-CUH4fZn8.js.map → 4-D28kbpdN.js.map} +1 -1
  136. package/build/server/chunks/{5-BSEdxfut.js → 5--wY8V1OC.js} +2 -2
  137. package/build/server/chunks/{5-BSEdxfut.js.map → 5--wY8V1OC.js.map} +1 -1
  138. package/build/server/chunks/{7-DvU-_ADW.js → 7-DTmi6ASF.js} +6 -5
  139. package/build/server/chunks/7-DTmi6ASF.js.map +1 -0
  140. package/build/server/chunks/{8-CA3-CJtS.js → 8-CHIpUo4j.js} +6 -5
  141. package/build/server/chunks/8-CHIpUo4j.js.map +1 -0
  142. package/build/server/chunks/{9-jMOS3lPS.js → 9-C3nw_taL.js} +6 -5
  143. package/build/server/chunks/9-C3nw_taL.js.map +1 -0
  144. package/build/server/chunks/{JsonValue-WMdIUvRM.js → JsonValue-DiECF6Zd.js} +11 -4
  145. package/build/server/chunks/JsonValue-DiECF6Zd.js.map +1 -0
  146. package/build/server/chunks/{Modal-zVnoAfFx.js → Modal-BzZ9u6V6.js} +3 -3
  147. package/build/server/chunks/Modal-BzZ9u6V6.js.map +1 -0
  148. package/build/server/chunks/Panel-DEP08QXV.js +48 -0
  149. package/build/server/chunks/Panel-DEP08QXV.js.map +1 -0
  150. package/build/server/chunks/{PrettyJson-D3CylSVd.js → PrettyJson-ElzPxPF4.js} +55 -40
  151. package/build/server/chunks/PrettyJson-ElzPxPF4.js.map +1 -0
  152. package/build/server/chunks/Tooltip-DK6Aok7l.js +35 -0
  153. package/build/server/chunks/Tooltip-DK6Aok7l.js.map +1 -0
  154. package/build/server/chunks/{TooltipTable-DCu3GLqO.js → TooltipTable-DUYKVtrh.js} +3 -3
  155. package/build/server/chunks/{TooltipTable-DCu3GLqO.js.map → TooltipTable-DUYKVtrh.js.map} +1 -1
  156. package/build/server/chunks/_layout.svelte-CCi6mq1k.js +159 -0
  157. package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +1 -0
  158. package/build/server/chunks/{_page.svelte-C-13GpOe.js → _page.svelte-B4BL5PJR.js} +18 -16
  159. package/build/server/chunks/_page.svelte-B4BL5PJR.js.map +1 -0
  160. package/build/server/chunks/{_page.svelte-BRxX_vQR.js → _page.svelte-BUheieJ5.js} +26 -15
  161. package/build/server/chunks/_page.svelte-BUheieJ5.js.map +1 -0
  162. package/build/server/chunks/{_page.svelte-BBHqwhWF.js → _page.svelte-Bj297hp1.js} +16 -15
  163. package/build/server/chunks/_page.svelte-Bj297hp1.js.map +1 -0
  164. package/build/server/chunks/{_page.svelte-2w3fCax2.js → _page.svelte-BvjNfjgw.js} +14 -14
  165. package/build/server/chunks/{_page.svelte-2w3fCax2.js.map → _page.svelte-BvjNfjgw.js.map} +1 -1
  166. package/build/server/chunks/_page.svelte-DDe4hyAB.js +387 -0
  167. package/build/server/chunks/_page.svelte-DDe4hyAB.js.map +1 -0
  168. package/build/server/chunks/{_page.svelte-Ca9u_35e.js → _page.svelte-DEe2Kbbw.js} +72 -12
  169. package/build/server/chunks/_page.svelte-DEe2Kbbw.js.map +1 -0
  170. package/build/server/chunks/_page.svelte-DJFPwyij.js +323 -0
  171. package/build/server/chunks/_page.svelte-DJFPwyij.js.map +1 -0
  172. package/build/server/chunks/client-Cp5ag8tA.js +7 -0
  173. package/build/server/chunks/{client-BFlyU7ZU.js.map → client-Cp5ag8tA.js.map} +1 -1
  174. package/build/server/chunks/{client2-DYaMKWrc.js → client2-Dos6p_Xm.js} +3 -4
  175. package/build/server/chunks/{client2-DYaMKWrc.js.map → client2-Dos6p_Xm.js.map} +1 -1
  176. package/build/server/chunks/{error.svelte-BENdaVOT.js → error.svelte-BBEhCLUJ.js} +6 -7
  177. package/build/server/chunks/{error.svelte-BENdaVOT.js.map → error.svelte-BBEhCLUJ.js.map} +1 -1
  178. package/build/server/chunks/{index2-DBFlGzWV.js → index2-DzKnqQNM.js} +2 -2
  179. package/build/server/chunks/{index2-DBFlGzWV.js.map → index2-DzKnqQNM.js.map} +1 -1
  180. package/build/server/chunks/{index3-CoOO2o9t.js → index3-DANRthiW.js} +2 -2
  181. package/build/server/chunks/{index3-CoOO2o9t.js.map → index3-DANRthiW.js.map} +1 -1
  182. package/build/server/chunks/{mongo-Db8Vgimy.js → mongo-BHk5yAj9.js} +90 -19
  183. package/build/server/chunks/mongo-BHk5yAj9.js.map +1 -0
  184. package/build/server/chunks/{remote-xxtqbu-AjxdDZZ_.js → remote-xxtqbu-DBe3CqEJ.js} +6 -6
  185. package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +1 -0
  186. package/build/server/chunks/{server2-_mGVuBoG.js → server2-YmCaJGWy.js} +2 -2
  187. package/build/server/chunks/{server2-_mGVuBoG.js.map → server2-YmCaJGWy.js.map} +1 -1
  188. package/build/server/chunks/{servers.remote-DrkuAWHP.js → servers.remote-HDmNH7n4.js} +245 -15
  189. package/build/server/chunks/servers.remote-HDmNH7n4.js.map +1 -0
  190. package/build/server/chunks/{shared-Buki-xt5.js → shared-CQd3A1I4.js} +2 -2
  191. package/build/server/chunks/{shared-Buki-xt5.js.map → shared-CQd3A1I4.js.map} +1 -1
  192. package/build/server/chunks/{state.svelte-C8IWmp_n.js → state.svelte-Dm0prnTp.js} +2 -2
  193. package/build/server/chunks/{state.svelte-C8IWmp_n.js.map → state.svelte-Dm0prnTp.js.map} +1 -1
  194. package/build/server/chunks/{event-DVH-6ISX.js → utils-D1ahxout.js} +39 -2
  195. package/build/server/chunks/utils-D1ahxout.js.map +1 -0
  196. package/build/server/index.js +5 -6
  197. package/build/server/index.js.map +1 -1
  198. package/build/server/manifest.js +15 -15
  199. package/build/server/manifest.js.map +1 -1
  200. package/package.json +3 -2
  201. package/src/api/servers.remote.ts +275 -11
  202. package/src/app.css +178 -135
  203. package/src/app.html +23 -10
  204. package/src/lib/actions/portal.ts +42 -0
  205. package/src/lib/components/Breadcrumbs.svelte +20 -60
  206. package/src/lib/components/JsonValue.svelte +30 -1
  207. package/src/lib/components/Modal.svelte +5 -5
  208. package/src/lib/components/Notifications.svelte +42 -21
  209. package/src/lib/components/PageSwitcher.svelte +16 -10
  210. package/src/lib/components/Panel.svelte +19 -15
  211. package/src/lib/components/PrettyJson.svelte +102 -90
  212. package/src/lib/components/ReplicaSetSelector.svelte +144 -0
  213. package/src/lib/components/SearchBox.svelte +117 -96
  214. package/src/lib/components/ThemeSwitcher.svelte +191 -36
  215. package/src/lib/components/Tooltip.svelte +23 -14
  216. package/src/lib/server/mongo.ts +129 -26
  217. package/src/lib/utils/formatSignificantDigits.ts +30 -0
  218. package/src/lib/utils/formatTimeAgo.ts +20 -0
  219. package/src/lib/utils/hostnames.ts +86 -0
  220. package/src/lib/utils/jsonParser.ts +50 -0
  221. package/src/lib/utils/longestCommonSuffix.ts +47 -0
  222. package/src/lib/utils/sum.ts +10 -0
  223. package/src/routes/+layout.svelte +36 -17
  224. package/src/routes/servers/+page.svelte +6 -7
  225. package/src/routes/servers/[server]/databases/+page.svelte +71 -2
  226. package/src/routes/servers/[server]/databases/[database]/collections/+page.svelte +13 -3
  227. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +292 -57
  228. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.server.ts +8 -8
  229. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.svelte +628 -105
  230. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/mappings/+page.svelte +26 -12
  231. package/build/client/_app/immutable/assets/0.COnAcXN4.css +0 -1
  232. package/build/client/_app/immutable/assets/0.COnAcXN4.css.br +0 -0
  233. package/build/client/_app/immutable/assets/0.COnAcXN4.css.gz +0 -0
  234. package/build/client/_app/immutable/assets/10.59aTjJn9.css +0 -1
  235. package/build/client/_app/immutable/assets/10.59aTjJn9.css.br +0 -0
  236. package/build/client/_app/immutable/assets/10.59aTjJn9.css.gz +0 -0
  237. package/build/client/_app/immutable/assets/12.BdCOhvz0.css +0 -1
  238. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.br +0 -0
  239. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.gz +0 -0
  240. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css +0 -1
  241. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.br +0 -0
  242. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.gz +0 -0
  243. package/build/client/_app/immutable/assets/Panel.B3aWupye.css +0 -1
  244. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.br +0 -0
  245. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.gz +0 -0
  246. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.Cnibl3-L.woff2 +0 -0
  247. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.RKIjpA76.woff +0 -0
  248. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.CT5q4ZVh.woff2 +0 -0
  249. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.iCCFJ4Gn.woff +0 -0
  250. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.Cbwtr8a4.woff +0 -0
  251. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.CjFvNwMJ.woff2 +0 -0
  252. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BWTJtpjo.woff2 +0 -0
  253. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BZXayy47.woff +0 -0
  254. package/build/client/_app/immutable/assets/cuprum-vietnamese-400-normal.uXRi1gw5.woff +0 -0
  255. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.BdIzgbsr.woff +0 -0
  256. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.CTuj2HZW.woff2 +0 -0
  257. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.C6_q4usG.woff +0 -0
  258. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.CurJOxDW.woff2 +0 -0
  259. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.DACPYgMx.woff2 +0 -0
  260. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.Der7ynDE.woff +0 -0
  261. package/build/client/_app/immutable/chunks/3iRu_dUj.js +0 -2
  262. package/build/client/_app/immutable/chunks/3iRu_dUj.js.br +0 -0
  263. package/build/client/_app/immutable/chunks/3iRu_dUj.js.gz +0 -0
  264. package/build/client/_app/immutable/chunks/5nAxkTTP.js +0 -1
  265. package/build/client/_app/immutable/chunks/5nAxkTTP.js.br +0 -5
  266. package/build/client/_app/immutable/chunks/5nAxkTTP.js.gz +0 -0
  267. package/build/client/_app/immutable/chunks/BBg-V8FE.js +0 -1
  268. package/build/client/_app/immutable/chunks/BBg-V8FE.js.br +0 -0
  269. package/build/client/_app/immutable/chunks/BBg-V8FE.js.gz +0 -0
  270. package/build/client/_app/immutable/chunks/BE8UzJuY.js +0 -1
  271. package/build/client/_app/immutable/chunks/BE8UzJuY.js.br +0 -0
  272. package/build/client/_app/immutable/chunks/BE8UzJuY.js.gz +0 -0
  273. package/build/client/_app/immutable/chunks/BQEBQyfZ.js +0 -1
  274. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.br +0 -0
  275. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.gz +0 -0
  276. package/build/client/_app/immutable/chunks/BUNgwIS0.js +0 -1
  277. package/build/client/_app/immutable/chunks/BUNgwIS0.js.br +0 -0
  278. package/build/client/_app/immutable/chunks/BUNgwIS0.js.gz +0 -0
  279. package/build/client/_app/immutable/chunks/BvKY81hz.js +0 -1
  280. package/build/client/_app/immutable/chunks/BvKY81hz.js.br +0 -0
  281. package/build/client/_app/immutable/chunks/BvKY81hz.js.gz +0 -0
  282. package/build/client/_app/immutable/chunks/C0PCwpqt.js +0 -23
  283. package/build/client/_app/immutable/chunks/C0PCwpqt.js.br +0 -0
  284. package/build/client/_app/immutable/chunks/C0PCwpqt.js.gz +0 -0
  285. package/build/client/_app/immutable/chunks/C0rm4mmq.js +0 -1
  286. package/build/client/_app/immutable/chunks/C0rm4mmq.js.br +0 -0
  287. package/build/client/_app/immutable/chunks/C0rm4mmq.js.gz +0 -0
  288. package/build/client/_app/immutable/chunks/C2sjtvBO.js +0 -1
  289. package/build/client/_app/immutable/chunks/C2sjtvBO.js.br +0 -0
  290. package/build/client/_app/immutable/chunks/C2sjtvBO.js.gz +0 -0
  291. package/build/client/_app/immutable/chunks/C82Rp5eQ.js +0 -1
  292. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.br +0 -0
  293. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.gz +0 -0
  294. package/build/client/_app/immutable/chunks/CGSOl_q_.js +0 -4
  295. package/build/client/_app/immutable/chunks/CGSOl_q_.js.br +0 -0
  296. package/build/client/_app/immutable/chunks/CGSOl_q_.js.gz +0 -0
  297. package/build/client/_app/immutable/chunks/CjNnAkTB.js +0 -1
  298. package/build/client/_app/immutable/chunks/CjNnAkTB.js.br +0 -0
  299. package/build/client/_app/immutable/chunks/CjNnAkTB.js.gz +0 -0
  300. package/build/client/_app/immutable/chunks/Cx2cA4gg.js +0 -1
  301. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.br +0 -0
  302. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.gz +0 -0
  303. package/build/client/_app/immutable/chunks/D4iRRB8h.js.br +0 -0
  304. package/build/client/_app/immutable/chunks/D4iRRB8h.js.gz +0 -0
  305. package/build/client/_app/immutable/chunks/D5ccpaXt.js +0 -1
  306. package/build/client/_app/immutable/chunks/D5ccpaXt.js.br +0 -0
  307. package/build/client/_app/immutable/chunks/D5ccpaXt.js.gz +0 -0
  308. package/build/client/_app/immutable/chunks/D7E46CWw.js +0 -1
  309. package/build/client/_app/immutable/chunks/D7E46CWw.js.br +0 -0
  310. package/build/client/_app/immutable/chunks/D7E46CWw.js.gz +0 -0
  311. package/build/client/_app/immutable/chunks/DR9xdhsg.js.br +0 -0
  312. package/build/client/_app/immutable/chunks/DR9xdhsg.js.gz +0 -0
  313. package/build/client/_app/immutable/chunks/DVRQRZnh.js +0 -1
  314. package/build/client/_app/immutable/chunks/DVRQRZnh.js.br +0 -0
  315. package/build/client/_app/immutable/chunks/DVRQRZnh.js.gz +0 -0
  316. package/build/client/_app/immutable/chunks/DcPEQ0_V.js +0 -29
  317. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.br +0 -0
  318. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.gz +0 -0
  319. package/build/client/_app/immutable/chunks/Dx56OlI-.js.br +0 -2
  320. package/build/client/_app/immutable/chunks/Dx56OlI-.js.gz +0 -0
  321. package/build/client/_app/immutable/chunks/PXh00dfp.js +0 -2
  322. package/build/client/_app/immutable/chunks/PXh00dfp.js.br +0 -0
  323. package/build/client/_app/immutable/chunks/PXh00dfp.js.gz +0 -0
  324. package/build/client/_app/immutable/entry/app.DrdSPfGo.js +0 -2
  325. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.br +0 -0
  326. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.gz +0 -0
  327. package/build/client/_app/immutable/entry/start.DGG3CpnK.js +0 -1
  328. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.br +0 -2
  329. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/0.kCLtccjl.js +0 -5
  331. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.br +0 -0
  332. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.gz +0 -0
  333. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js +0 -1
  334. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.br +0 -3
  335. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.gz +0 -0
  336. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js +0 -2
  337. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.gz +0 -0
  339. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js +0 -1
  340. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.br +0 -0
  341. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.gz +0 -0
  342. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js +0 -1
  343. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.br +0 -0
  344. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.gz +0 -0
  345. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js +0 -66
  346. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.br +0 -0
  347. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.gz +0 -0
  348. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.br +0 -1
  349. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.gz +0 -0
  350. package/build/client/_app/immutable/nodes/3.t20GootO.js.br +0 -0
  351. package/build/client/_app/immutable/nodes/3.t20GootO.js.gz +0 -0
  352. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.br +0 -0
  353. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.gz +0 -0
  354. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.br +0 -0
  355. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/7.D14iWySv.js +0 -1
  357. package/build/client/_app/immutable/nodes/7.D14iWySv.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/7.D14iWySv.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js +0 -1
  360. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.br +0 -0
  361. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.gz +0 -0
  362. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js +0 -2
  363. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.br +0 -0
  364. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.gz +0 -0
  365. package/build/server/chunks/0-BozXjQlk.js +0 -22
  366. package/build/server/chunks/0-BozXjQlk.js.map +0 -1
  367. package/build/server/chunks/1-C_LPMO7A.js +0 -9
  368. package/build/server/chunks/1-C_LPMO7A.js.map +0 -1
  369. package/build/server/chunks/10-DGUQMXHt.js.map +0 -1
  370. package/build/server/chunks/11-CxBnyyqR.js.map +0 -1
  371. package/build/server/chunks/12-K_JVUnsk.js.map +0 -1
  372. package/build/server/chunks/7-DvU-_ADW.js.map +0 -1
  373. package/build/server/chunks/8-CA3-CJtS.js.map +0 -1
  374. package/build/server/chunks/9-jMOS3lPS.js.map +0 -1
  375. package/build/server/chunks/JsonValue-WMdIUvRM.js.map +0 -1
  376. package/build/server/chunks/Modal-zVnoAfFx.js.map +0 -1
  377. package/build/server/chunks/Panel-yg5YKL4d.js +0 -38
  378. package/build/server/chunks/Panel-yg5YKL4d.js.map +0 -1
  379. package/build/server/chunks/PrettyJson-D3CylSVd.js.map +0 -1
  380. package/build/server/chunks/Tooltip-ys6l541_.js +0 -28
  381. package/build/server/chunks/Tooltip-ys6l541_.js.map +0 -1
  382. package/build/server/chunks/_layout.svelte-DMm1Ill8.js +0 -168
  383. package/build/server/chunks/_layout.svelte-DMm1Ill8.js.map +0 -1
  384. package/build/server/chunks/_page.svelte-BBHqwhWF.js.map +0 -1
  385. package/build/server/chunks/_page.svelte-BRxX_vQR.js.map +0 -1
  386. package/build/server/chunks/_page.svelte-C-13GpOe.js.map +0 -1
  387. package/build/server/chunks/_page.svelte-Ca9u_35e.js.map +0 -1
  388. package/build/server/chunks/_page.svelte-Cm_vgRRR.js +0 -206
  389. package/build/server/chunks/_page.svelte-Cm_vgRRR.js.map +0 -1
  390. package/build/server/chunks/_page.svelte-DoOBFRSo.js +0 -299
  391. package/build/server/chunks/_page.svelte-DoOBFRSo.js.map +0 -1
  392. package/build/server/chunks/client-BFlyU7ZU.js +0 -7
  393. package/build/server/chunks/event-DVH-6ISX.js.map +0 -1
  394. package/build/server/chunks/mongo-Db8Vgimy.js.map +0 -1
  395. package/build/server/chunks/remote-xxtqbu-AjxdDZZ_.js.map +0 -1
  396. package/build/server/chunks/servers.remote-DrkuAWHP.js.map +0 -1
  397. package/build/server/chunks/utils-kjxf7BZO.js +0 -39
  398. 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: 20px 20px 0;
51
+ padding: 24px 24px 0;
52
52
  }
53
53
 
54
54
  .modal-header h3 {
55
55
  margin: 0;
56
- font-size: 1.25rem;
57
- font-weight: 500;
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)}>&times;</button>
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: 80px;
32
+ top: 90px;
18
33
  right: 20px;
19
- z-index: 1000;
34
+ /* Show above modal overlay */
35
+ z-index: 1001;
20
36
  display: flex;
21
37
  flex-direction: column;
22
- gap: 10px;
38
+ gap: 12px;
23
39
  }
24
40
 
25
41
  .notification {
26
- padding: 15px 20px;
27
- border-radius: 4px;
28
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
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: 15px;
32
- min-width: 300px;
33
- max-width: 500px;
34
- animation: slideIn 0.3s ease-out;
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: none;
56
+ background: rgba(255, 255, 255, 0.2);
38
57
  border: none;
39
- font-size: 24px;
58
+ border-radius: 8px;
40
59
  cursor: pointer;
41
- opacity: 0.7;
60
+ opacity: 0.8;
42
61
  margin-left: auto;
43
- padding: 0;
44
- width: 24px;
45
- height: 24px;
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: #dc3545;
78
+ background-color: #ff453a;
58
79
  color: white;
59
80
  }
60
81
 
61
82
  .notification-success {
62
- background-color: #28a745;
83
+ background-color: #32d74b;
63
84
  color: white;
64
85
  }
65
86
 
66
87
  .notification-info {
67
- background-color: #17a2b8;
88
+ background-color: #0a84ff;
68
89
  color: white;
69
90
  }
70
91
 
71
92
  @keyframes slideIn {
72
93
  from {
73
- transform: translateX(400px);
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 class="flex {className}">
18
- {#each categories as category, index (category.key)}
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 class={sharedClasses}>
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-next-line @typescript-eslint/no-explicit-any -->
31
- <a href={resolve(category.href as any)} class={sharedClasses}>
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 class="panel rounded-md {className}">
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 class="px-4 py-2 flex justify-between items-center text-lg uppercase font-medium">
17
- {#if typeof title === "string"}
18
- <span>{title}</span>
19
- {:else}
20
- {@render title()}
21
- {/if}
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 editorHeight = $state<string>("300px");
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
- <a
214
- type="button"
215
- class="bg-transparent border-none text-[var(--text)] no-underline cursor-pointer text-xl font-inherit p-0 hover:underline normal-case"
216
- href={resolve(
217
- `/servers/${encodeURIComponent(server)}/databases/${encodeURIComponent(database)}/collections/${encodeURIComponent(collection)}/documents/${idValue}`,
218
- )}
219
- >
220
- {idValue}
221
- </a>
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
- <span class="ml-2 text-md text-[var(--text-secondary,#888)]">{timestamp.toLocaleString()}</span>
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:block">
234
- <button class="btn btn-outline-light btn-sm ml-2 -my-2" onclick={copyToClipboard}>Copy</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 class="btn btn-outline-light btn-sm ml-2 -my-2" onclick={enableEditor}>Edit</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 class="btn btn-outline-danger btn-sm ml-2 -my-2" onclick={showRemove}>Remove</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=" relative border-t border-[var(--border-color)]">
246
- <div class="font-mono text-sm leading-tight whitespace-pre-wrap break-words p-4 overflow-x-auto">
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
- <div class="absolute h-full z-[100] w-full top-0 left-0" class:hidden={!editorVisible} class:block={editorVisible}>
251
- <div class="absolute z-10 right-5 top-4">
252
- <button class="btn btn-success ml-2" onclick={save}>Save</button>
253
- <button class="btn btn-default ml-2" onclick={disableEditor}>Cancel</button>
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-2.5 bg-[var(--color-1)] text-[var(--text)] border border-[var(--border-color)] rounded resize-y"
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
- </div>
262
-
263
- {#if removing}
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
- {/if}
272
- </div>
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>