mongoku 2.4.4 → 2.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/build/client/_app/immutable/assets/0.CEIWAdGZ.css +1 -0
  2. package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/{CI_ovvBu.js → 3LgOwb59.js} +1 -1
  5. package/build/client/_app/immutable/chunks/3LgOwb59.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/3LgOwb59.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/{0x2tqDge.js → BNF3TSWe.js} +1 -1
  8. package/build/client/_app/immutable/chunks/BNF3TSWe.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/BNF3TSWe.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/CH4IMlv6.js +4 -0
  11. package/build/client/_app/immutable/chunks/CH4IMlv6.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/CH4IMlv6.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{DqFgKUuF.js → CMu1ND4u.js} +1 -1
  14. package/build/client/_app/immutable/chunks/CMu1ND4u.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/CMu1ND4u.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/CeBnCdu0.js +1 -0
  17. package/build/client/_app/immutable/chunks/CeBnCdu0.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/CeBnCdu0.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/{m9KJhr2i.js → CrvogBCO.js} +1 -1
  20. package/build/client/_app/immutable/chunks/CrvogBCO.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/CrvogBCO.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/{SENhER8Y.js → DL_7eGCj.js} +6 -6
  23. package/build/client/_app/immutable/chunks/DL_7eGCj.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/DL_7eGCj.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/YVSmS-BO.js +1 -0
  26. package/build/client/_app/immutable/chunks/YVSmS-BO.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/YVSmS-BO.js.gz +0 -0
  28. package/build/client/_app/immutable/entry/{app.6kvAGzFx.js → app.Bn63r6jq.js} +2 -2
  29. package/build/client/_app/immutable/entry/app.Bn63r6jq.js.br +0 -0
  30. package/build/client/_app/immutable/entry/app.Bn63r6jq.js.gz +0 -0
  31. package/build/client/_app/immutable/entry/start.D-zzQzHa.js +1 -0
  32. package/build/client/_app/immutable/entry/start.D-zzQzHa.js.br +2 -0
  33. package/build/client/_app/immutable/entry/start.D-zzQzHa.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/0._Ka7l4G7.js +1 -0
  35. package/build/client/_app/immutable/nodes/0._Ka7l4G7.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/0._Ka7l4G7.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{1.C6-lRSct.js → 1.C_RZUfKy.js} +1 -1
  38. package/build/client/_app/immutable/nodes/1.C_RZUfKy.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/1.C_RZUfKy.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/10.P_2uCVkV.js +3 -0
  41. package/build/client/_app/immutable/nodes/10.P_2uCVkV.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/10.P_2uCVkV.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{11.D6PMR4JE.js → 11.B9LD_pR3.js} +1 -1
  44. package/build/client/_app/immutable/nodes/11.B9LD_pR3.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/11.B9LD_pR3.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{12.BaG9yS23.js → 12.DtrR4t5w.js} +1 -1
  47. package/build/client/_app/immutable/nodes/12.DtrR4t5w.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/12.DtrR4t5w.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{13.ClrBypIt.js → 13.BYagUX2D.js} +1 -1
  50. package/build/client/_app/immutable/nodes/13.BYagUX2D.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/13.BYagUX2D.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{7.C2cwruWu.js → 7.XwiZ31H4.js} +1 -1
  53. package/build/client/_app/immutable/nodes/7.XwiZ31H4.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/7.XwiZ31H4.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js +1 -0
  56. package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/8.Cgq8c1Pf.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js +2 -0
  59. package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/9.ClN4Gbvd.js.gz +0 -0
  61. package/build/client/_app/version.json +1 -1
  62. package/build/client/_app/version.json.br +0 -0
  63. package/build/client/_app/version.json.gz +0 -0
  64. package/build/server/chunks/{0-5-SDX-d2.js → 0-DNH-F5x0.js} +4 -4
  65. package/build/server/chunks/{0-5-SDX-d2.js.map → 0-DNH-F5x0.js.map} +1 -1
  66. package/build/server/chunks/{1-Cck2Jrzo.js → 1-1_OQTf0e.js} +2 -2
  67. package/build/server/chunks/{1-Cck2Jrzo.js.map → 1-1_OQTf0e.js.map} +1 -1
  68. package/build/server/chunks/{10-BV4HPibI.js → 10-4E_aVzT4.js} +58 -36
  69. package/build/server/chunks/10-4E_aVzT4.js.map +1 -0
  70. package/build/server/chunks/{11-iazI-4Kb.js → 11-DTyCG8Xj.js} +3 -3
  71. package/build/server/chunks/{11-iazI-4Kb.js.map → 11-DTyCG8Xj.js.map} +1 -1
  72. package/build/server/chunks/{12-B0JxHwKO.js → 12-O3oSmD2o.js} +3 -3
  73. package/build/server/chunks/{12-B0JxHwKO.js.map → 12-O3oSmD2o.js.map} +1 -1
  74. package/build/server/chunks/{13-IcujVjLI.js → 13-Drp2sCYG.js} +3 -3
  75. package/build/server/chunks/{13-IcujVjLI.js.map → 13-Drp2sCYG.js.map} +1 -1
  76. package/build/server/chunks/{7-uVKBumqv.js → 7-DL7-ZmZ2.js} +3 -3
  77. package/build/server/chunks/{7-uVKBumqv.js.map → 7-DL7-ZmZ2.js.map} +1 -1
  78. package/build/server/chunks/{8-eWNgFGi6.js → 8-GUonP2Zy.js} +3 -3
  79. package/build/server/chunks/{8-eWNgFGi6.js.map → 8-GUonP2Zy.js.map} +1 -1
  80. package/build/server/chunks/{9-C8GLDx_s.js → 9-DQhrhu5o.js} +3 -3
  81. package/build/server/chunks/{9-C8GLDx_s.js.map → 9-DQhrhu5o.js.map} +1 -1
  82. package/build/server/chunks/{JsonValue-DiECF6Zd.js → JsonValue-DoGRvQnG.js} +3 -3
  83. package/build/server/chunks/{JsonValue-DiECF6Zd.js.map → JsonValue-DoGRvQnG.js.map} +1 -1
  84. package/build/server/chunks/{Panel-DEP08QXV.js → Panel-BHGtM9Vw.js} +2 -2
  85. package/build/server/chunks/{Panel-DEP08QXV.js.map → Panel-BHGtM9Vw.js.map} +1 -1
  86. package/build/server/chunks/{PrettyJson-ElzPxPF4.js → PrettyJson-Bnmo1PGg.js} +5 -5
  87. package/build/server/chunks/{PrettyJson-ElzPxPF4.js.map → PrettyJson-Bnmo1PGg.js.map} +1 -1
  88. package/build/server/chunks/{Tooltip-DK6Aok7l.js → Tooltip-DAE2mkm6.js} +2 -2
  89. package/build/server/chunks/{Tooltip-DK6Aok7l.js.map → Tooltip-DAE2mkm6.js.map} +1 -1
  90. package/build/server/chunks/TooltipTable-xo_OEG9c.js +64 -0
  91. package/build/server/chunks/TooltipTable-xo_OEG9c.js.map +1 -0
  92. package/build/server/chunks/{_layout.svelte-CCi6mq1k.js → _layout.svelte-Dji2JJ9X.js} +29 -20
  93. package/build/server/chunks/_layout.svelte-Dji2JJ9X.js.map +1 -0
  94. package/build/server/chunks/{_page.svelte-BvjNfjgw.js → _page.svelte-C4rGFSYL.js} +7 -7
  95. package/build/server/chunks/{_page.svelte-BvjNfjgw.js.map → _page.svelte-C4rGFSYL.js.map} +1 -1
  96. package/build/server/chunks/{_page.svelte-B4BL5PJR.js → _page.svelte-CJ5HzoD0.js} +4 -4
  97. package/build/server/chunks/{_page.svelte-B4BL5PJR.js.map → _page.svelte-CJ5HzoD0.js.map} +1 -1
  98. package/build/server/chunks/{_page.svelte-DJFPwyij.js → _page.svelte-ClvvVxpD.js} +101 -35
  99. package/build/server/chunks/_page.svelte-ClvvVxpD.js.map +1 -0
  100. package/build/server/chunks/{_page.svelte-DDe4hyAB.js → _page.svelte-D3jyb8d9.js} +6 -6
  101. package/build/server/chunks/{_page.svelte-DDe4hyAB.js.map → _page.svelte-D3jyb8d9.js.map} +1 -1
  102. package/build/server/chunks/{_page.svelte-BUheieJ5.js → _page.svelte-D9IvgJO5.js} +6 -6
  103. package/build/server/chunks/{_page.svelte-BUheieJ5.js.map → _page.svelte-D9IvgJO5.js.map} +1 -1
  104. package/build/server/chunks/{_page.svelte-DEe2Kbbw.js → _page.svelte-be8sxgGt.js} +6 -6
  105. package/build/server/chunks/{_page.svelte-DEe2Kbbw.js.map → _page.svelte-be8sxgGt.js.map} +1 -1
  106. package/build/server/chunks/{_page.svelte-Bj297hp1.js → _page.svelte-x1L5xjgQ.js} +6 -6
  107. package/build/server/chunks/{_page.svelte-Bj297hp1.js.map → _page.svelte-x1L5xjgQ.js.map} +1 -1
  108. package/build/server/chunks/{index2-DzKnqQNM.js → index2-eSFyMQpS.js} +2 -2
  109. package/build/server/chunks/{index2-DzKnqQNM.js.map → index2-eSFyMQpS.js.map} +1 -1
  110. package/build/server/chunks/{remote-xxtqbu-DBe3CqEJ.js → remote-xxtqbu-ETLGkdRu.js} +2 -2
  111. package/build/server/chunks/remote-xxtqbu-ETLGkdRu.js.map +1 -0
  112. package/build/server/chunks/{servers.remote-HDmNH7n4.js → servers.remote-CGies_Na.js} +85 -6
  113. package/build/server/chunks/servers.remote-CGies_Na.js.map +1 -0
  114. package/build/server/index.js +2 -2
  115. package/build/server/index.js.map +1 -1
  116. package/build/server/manifest.js +11 -11
  117. package/build/server/manifest.js.map +1 -1
  118. package/package.json +1 -1
  119. package/src/api/servers.remote.ts +91 -2
  120. package/src/app.css +5 -0
  121. package/src/lib/actions/clickOutside.ts +24 -0
  122. package/src/lib/components/Breadcrumbs.svelte +5 -19
  123. package/src/lib/components/SearchBox.svelte +161 -62
  124. package/src/lib/components/TooltipTable.svelte +4 -2
  125. package/src/lib/icons/IconChevronDown.svelte +20 -0
  126. package/src/lib/icons/IconCopy.svelte +21 -0
  127. package/src/lib/icons/IconEdit.svelte +21 -0
  128. package/src/lib/icons/IconPlus.svelte +20 -0
  129. package/src/lib/icons/IconSortReverse.svelte +23 -0
  130. package/src/lib/stores/breadcrumbs.svelte.ts +17 -0
  131. package/src/lib/types.ts +2 -0
  132. package/src/routes/+layout.svelte +12 -1
  133. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.server.ts +67 -34
  134. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +259 -44
  135. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css +0 -1
  136. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
  137. package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
  138. package/build/client/_app/immutable/chunks/0x2tqDge.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/0x2tqDge.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/CI_ovvBu.js.br +0 -0
  141. package/build/client/_app/immutable/chunks/CI_ovvBu.js.gz +0 -0
  142. package/build/client/_app/immutable/chunks/Cp0n7wR5.js +0 -4
  143. package/build/client/_app/immutable/chunks/Cp0n7wR5.js.br +0 -0
  144. package/build/client/_app/immutable/chunks/Cp0n7wR5.js.gz +0 -0
  145. package/build/client/_app/immutable/chunks/DqFgKUuF.js.br +0 -0
  146. package/build/client/_app/immutable/chunks/DqFgKUuF.js.gz +0 -0
  147. package/build/client/_app/immutable/chunks/MW_nrxc3.js +0 -1
  148. package/build/client/_app/immutable/chunks/MW_nrxc3.js.br +0 -0
  149. package/build/client/_app/immutable/chunks/MW_nrxc3.js.gz +0 -0
  150. package/build/client/_app/immutable/chunks/SENhER8Y.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/SENhER8Y.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/m9KJhr2i.js.br +0 -0
  153. package/build/client/_app/immutable/chunks/m9KJhr2i.js.gz +0 -0
  154. package/build/client/_app/immutable/chunks/vsNApJWQ.js +0 -1
  155. package/build/client/_app/immutable/chunks/vsNApJWQ.js.br +0 -0
  156. package/build/client/_app/immutable/chunks/vsNApJWQ.js.gz +0 -0
  157. package/build/client/_app/immutable/entry/app.6kvAGzFx.js.br +0 -0
  158. package/build/client/_app/immutable/entry/app.6kvAGzFx.js.gz +0 -0
  159. package/build/client/_app/immutable/entry/start.CNBjelhv.js +0 -1
  160. package/build/client/_app/immutable/entry/start.CNBjelhv.js.br +0 -2
  161. package/build/client/_app/immutable/entry/start.CNBjelhv.js.gz +0 -0
  162. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js +0 -1
  163. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.br +0 -0
  164. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.gz +0 -0
  165. package/build/client/_app/immutable/nodes/1.C6-lRSct.js.br +0 -0
  166. package/build/client/_app/immutable/nodes/1.C6-lRSct.js.gz +0 -0
  167. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js +0 -1
  168. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.br +0 -0
  169. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.gz +0 -0
  170. package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.br +0 -0
  171. package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.gz +0 -0
  172. package/build/client/_app/immutable/nodes/12.BaG9yS23.js.br +0 -0
  173. package/build/client/_app/immutable/nodes/12.BaG9yS23.js.gz +0 -0
  174. package/build/client/_app/immutable/nodes/13.ClrBypIt.js.br +0 -0
  175. package/build/client/_app/immutable/nodes/13.ClrBypIt.js.gz +0 -0
  176. package/build/client/_app/immutable/nodes/7.C2cwruWu.js.br +0 -0
  177. package/build/client/_app/immutable/nodes/7.C2cwruWu.js.gz +0 -0
  178. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js +0 -1
  179. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.br +0 -0
  180. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.gz +0 -0
  181. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js +0 -2
  182. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.br +0 -0
  183. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.gz +0 -0
  184. package/build/server/chunks/10-BV4HPibI.js.map +0 -1
  185. package/build/server/chunks/TooltipTable-DUYKVtrh.js +0 -60
  186. package/build/server/chunks/TooltipTable-DUYKVtrh.js.map +0 -1
  187. package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +0 -1
  188. package/build/server/chunks/_page.svelte-DJFPwyij.js.map +0 -1
  189. package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +0 -1
  190. package/build/server/chunks/servers.remote-HDmNH7n4.js.map +0 -1
@@ -10,25 +10,25 @@ return {
10
10
  assets: new Set(["robots.txt"]),
11
11
  mimeTypes: {".txt":"text/plain"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.CNBjelhv.js",app:"_app/immutable/entry/app.6kvAGzFx.js",imports:["_app/immutable/entry/start.CNBjelhv.js","_app/immutable/chunks/Cp0n7wR5.js","_app/immutable/chunks/ByCRZ7zS.js","_app/immutable/chunks/reNJcONQ.js","_app/immutable/entry/app.6kvAGzFx.js","_app/immutable/chunks/reNJcONQ.js","_app/immutable/chunks/ByCRZ7zS.js","_app/immutable/chunks/BPbCnJEo.js","_app/immutable/chunks/0oUK0vJa.js","_app/immutable/chunks/BGXqurs_.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.D-zzQzHa.js",app:"_app/immutable/entry/app.Bn63r6jq.js",imports:["_app/immutable/entry/start.D-zzQzHa.js","_app/immutable/chunks/CH4IMlv6.js","_app/immutable/chunks/ByCRZ7zS.js","_app/immutable/chunks/reNJcONQ.js","_app/immutable/entry/app.Bn63r6jq.js","_app/immutable/chunks/reNJcONQ.js","_app/immutable/chunks/ByCRZ7zS.js","_app/immutable/chunks/BPbCnJEo.js","_app/immutable/chunks/0oUK0vJa.js","_app/immutable/chunks/BGXqurs_.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
- __memo(() => import('./chunks/0-5-SDX-d2.js')),
16
- __memo(() => import('./chunks/1-Cck2Jrzo.js')),
15
+ __memo(() => import('./chunks/0-DNH-F5x0.js')),
16
+ __memo(() => import('./chunks/1-1_OQTf0e.js')),
17
17
  __memo(() => import('./chunks/2-BheEgghx.js')),
18
18
  __memo(() => import('./chunks/3-BwrTscBH.js')),
19
19
  __memo(() => import('./chunks/4-D28kbpdN.js')),
20
20
  __memo(() => import('./chunks/5--wY8V1OC.js')),
21
21
  __memo(() => import('./chunks/6-ifXBeMPA.js')),
22
- __memo(() => import('./chunks/7-uVKBumqv.js')),
23
- __memo(() => import('./chunks/8-eWNgFGi6.js')),
24
- __memo(() => import('./chunks/9-C8GLDx_s.js')),
25
- __memo(() => import('./chunks/10-BV4HPibI.js')),
26
- __memo(() => import('./chunks/11-iazI-4Kb.js')),
27
- __memo(() => import('./chunks/12-B0JxHwKO.js')),
28
- __memo(() => import('./chunks/13-IcujVjLI.js'))
22
+ __memo(() => import('./chunks/7-DL7-ZmZ2.js')),
23
+ __memo(() => import('./chunks/8-GUonP2Zy.js')),
24
+ __memo(() => import('./chunks/9-DQhrhu5o.js')),
25
+ __memo(() => import('./chunks/10-4E_aVzT4.js')),
26
+ __memo(() => import('./chunks/11-DTyCG8Xj.js')),
27
+ __memo(() => import('./chunks/12-O3oSmD2o.js')),
28
+ __memo(() => import('./chunks/13-Drp2sCYG.js'))
29
29
  ],
30
30
  remotes: {
31
- 'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu-DBe3CqEJ.js'))
31
+ 'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu-ETLGkdRu.js'))
32
32
  },
33
33
  routes: [
34
34
  {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"robots.txt\"]),\n\tmimeTypes: {\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.CNBjelhv.js\",app:\"_app/immutable/entry/app.6kvAGzFx.js\",imports:[\"_app/immutable/entry/start.CNBjelhv.js\",\"_app/immutable/chunks/Cp0n7wR5.js\",\"_app/immutable/chunks/ByCRZ7zS.js\",\"_app/immutable/chunks/reNJcONQ.js\",\"_app/immutable/entry/app.6kvAGzFx.js\",\"_app/immutable/chunks/reNJcONQ.js\",\"_app/immutable/chunks/ByCRZ7zS.js\",\"_app/immutable/chunks/BPbCnJEo.js\",\"_app/immutable/chunks/0oUK0vJa.js\",\"_app/immutable/chunks/BGXqurs_.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js')),\n\t\t\t__memo(() => import('./nodes/8.js')),\n\t\t\t__memo(() => import('./nodes/9.js')),\n\t\t\t__memo(() => import('./nodes/10.js')),\n\t\t\t__memo(() => import('./nodes/11.js')),\n\t\t\t__memo(() => import('./nodes/12.js')),\n\t\t\t__memo(() => import('./nodes/13.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu.js'))\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/favicon.ico\",\n\t\t\t\tpattern: /^\\/favicon\\.ico\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/favicon.ico/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers\",\n\t\t\t\tpattern: /^\\/servers\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 8 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,], errors: [1,,,], leaf: 9 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 10 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents/[document]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"document\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,5,], errors: [1,,,,,], leaf: 11 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/indexes\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/indexes\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 12 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/mappings\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/mappings\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 13 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"robots.txt\"]),\n\tmimeTypes: {\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.D-zzQzHa.js\",app:\"_app/immutable/entry/app.Bn63r6jq.js\",imports:[\"_app/immutable/entry/start.D-zzQzHa.js\",\"_app/immutable/chunks/CH4IMlv6.js\",\"_app/immutable/chunks/ByCRZ7zS.js\",\"_app/immutable/chunks/reNJcONQ.js\",\"_app/immutable/entry/app.Bn63r6jq.js\",\"_app/immutable/chunks/reNJcONQ.js\",\"_app/immutable/chunks/ByCRZ7zS.js\",\"_app/immutable/chunks/BPbCnJEo.js\",\"_app/immutable/chunks/0oUK0vJa.js\",\"_app/immutable/chunks/BGXqurs_.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js')),\n\t\t\t__memo(() => import('./nodes/7.js')),\n\t\t\t__memo(() => import('./nodes/8.js')),\n\t\t\t__memo(() => import('./nodes/9.js')),\n\t\t\t__memo(() => import('./nodes/10.js')),\n\t\t\t__memo(() => import('./nodes/11.js')),\n\t\t\t__memo(() => import('./nodes/12.js')),\n\t\t\t__memo(() => import('./nodes/13.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t'xxtqbu': __memo(() => import('./chunks/remote-xxtqbu.js'))\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/favicon.ico\",\n\t\t\t\tpattern: /^\\/favicon\\.ico\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/favicon.ico/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers\",\n\t\t\t\tpattern: /^\\/servers\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 7 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,], errors: [1,,], leaf: 8 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,], errors: [1,,,], leaf: 9 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 10 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/documents/[document]\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/documents\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"document\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,5,], errors: [1,,,,,], leaf: 11 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/indexes\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/indexes\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 12 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/servers/[server]/databases/[database]/collections/[collection]/mappings\",\n\t\t\t\tpattern: /^\\/servers\\/([^/]+?)\\/databases\\/([^/]+?)\\/collections\\/([^/]+?)\\/mappings\\/?$/,\n\t\t\t\tparams: [{\"name\":\"server\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"database\",\"optional\":false,\"rest\":false,\"chained\":false},{\"name\":\"collection\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,2,3,4,], errors: [1,,,,], leaf: 13 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongoku",
3
- "version": "2.4.4",
3
+ "version": "2.4.5",
4
4
  "license": "MIT",
5
5
  "author": "Anthony Moi <m.anthony.moi@gmail.com>",
6
6
  "type": "module",
@@ -207,6 +207,67 @@ export const updateMany = command(
207
207
  },
208
208
  );
209
209
 
210
+ // Count documents matching a filter
211
+ export const countDocuments = query(
212
+ z.object({
213
+ server: z.string(),
214
+ database: z.string(),
215
+ collection: z.string(),
216
+ filter: z.string(),
217
+ }),
218
+ async ({ server, database, collection, filter }) => {
219
+ const mongo = await getMongo();
220
+ const client = mongo.getClient(server);
221
+ const coll = client.db(database).collection(collection);
222
+
223
+ const filterDoc = JsonEncoder.decode(parseJSON(filter));
224
+
225
+ try {
226
+ const count = await coll.countDocuments(filterDoc, {
227
+ maxTimeMS: mongo.getCountTimeout(),
228
+ });
229
+
230
+ return {
231
+ data: count,
232
+ error: null,
233
+ };
234
+ } catch (err) {
235
+ logger.error("Error counting documents:", err);
236
+ return {
237
+ data: 0,
238
+ error: `Failed to count documents: ${err instanceof Error ? err.message : String(err)}`,
239
+ };
240
+ }
241
+ },
242
+ );
243
+
244
+ // Delete multiple documents with a filter query
245
+ export const deleteMany = command(
246
+ z.object({
247
+ server: z.string(),
248
+ database: z.string(),
249
+ collection: z.string(),
250
+ filter: z.string(),
251
+ }),
252
+ async ({ server, database, collection, filter }) => {
253
+ logger.log("deleteMany called with payload:", { server, database, collection, filter });
254
+ checkReadOnly();
255
+
256
+ const mongo = await getMongo();
257
+ const client = mongo.getClient(server);
258
+ const coll = client.db(database).collection(collection);
259
+
260
+ const filterDoc = JsonEncoder.decode(parseJSON(filter));
261
+
262
+ const result = await coll.deleteMany(filterDoc);
263
+
264
+ return {
265
+ ok: true,
266
+ deletedCount: result.deletedCount,
267
+ };
268
+ },
269
+ );
270
+
210
271
  // Hide an index
211
272
  export const hideIndex = command(
212
273
  z.object({
@@ -412,8 +473,10 @@ export const loadDocuments = query(
412
473
  project: z.string().default("{}"),
413
474
  skip: z.number().int().default(0),
414
475
  limit: z.number().int().default(20),
476
+ mode: z.enum(["query", "distinct", "aggregation"]).default("query"),
477
+ field: z.string().optional(),
415
478
  }),
416
- async ({ server, database, collection, query: queryStr, sort, project, skip, limit }) => {
479
+ async ({ server, database, collection, query: queryStr, sort, project, skip, limit, mode, field }) => {
417
480
  // Parse JSON strings - return error if invalid
418
481
  let queryDoc: unknown;
419
482
 
@@ -442,7 +505,31 @@ export const loadDocuments = query(
442
505
  const client = mongo.getClient(server);
443
506
  const coll = client.db(database).collection(collection);
444
507
 
445
- if (Array.isArray(queryDoc)) {
508
+ // Handle distinct mode
509
+ if (mode === "distinct") {
510
+ if (!field) {
511
+ error(400, "Invalid distinct query: field name is required");
512
+ }
513
+
514
+ try {
515
+ const results = await coll.distinct(field, JsonEncoder.decode(queryDoc), {
516
+ maxTimeMS: mongo.getQueryTimeout(),
517
+ });
518
+
519
+ return {
520
+ data: results.map((value) => JsonEncoder.encode({ value })),
521
+ error: null,
522
+ isAggregation: false,
523
+ isDistinct: true,
524
+ };
525
+ } catch (err) {
526
+ logger.error("Error executing distinct:", err);
527
+ error(500, `Failed to execute distinct: ${err instanceof Error ? err.message : String(err)}`);
528
+ }
529
+ }
530
+
531
+ // Handle aggregation mode
532
+ if (mode === "aggregation" && Array.isArray(queryDoc)) {
446
533
  try {
447
534
  validateAggregationPipeline(queryDoc);
448
535
  } catch (err) {
@@ -473,6 +560,7 @@ export const loadDocuments = query(
473
560
  data: results,
474
561
  error: null,
475
562
  isAggregation: true,
563
+ isDistinct: false,
476
564
  };
477
565
  } catch (err) {
478
566
  logger.error("Error executing aggregation:", err);
@@ -495,6 +583,7 @@ export const loadDocuments = query(
495
583
  data: results,
496
584
  error: null,
497
585
  isAggregation: false,
586
+ isDistinct: false,
498
587
  };
499
588
  } catch (err) {
500
589
  logger.error("Error fetching query results:", err);
package/src/app.css CHANGED
@@ -299,6 +299,11 @@
299
299
  border-bottom: 1px solid var(--border-color);
300
300
  }
301
301
 
302
+ /* So that the bottom of the table doesn't overflow from the bottom of the panel. If too generic, we can move this to the panel component maybe */
303
+ .table tbody tr:last-child td {
304
+ border-bottom: none;
305
+ }
306
+
302
307
  .table th {
303
308
  font-weight: 600;
304
309
  color: var(--text);
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Action that calls a callback when a click occurs outside the element
3
+ * @param node - The element to watch for outside clicks
4
+ * @param callback - Function to call when clicking outside
5
+ */
6
+ export function clickOutside(node: HTMLElement, callback: () => void): { destroy: () => void } {
7
+ const handleClick = (event: MouseEvent) => {
8
+ if (node && !node.contains(event.target as Node)) {
9
+ callback();
10
+ }
11
+ };
12
+
13
+ // Use setTimeout to avoid the same click that triggered the action from immediately firing
14
+ const timeoutId = setTimeout(() => {
15
+ document.addEventListener("click", handleClick, true);
16
+ }, 0);
17
+
18
+ return {
19
+ destroy() {
20
+ clearTimeout(timeoutId);
21
+ document.removeEventListener("click", handleClick, true);
22
+ },
23
+ };
24
+ }
@@ -1,26 +1,12 @@
1
1
  <script lang="ts">
2
2
  import { resolve } from "$app/paths";
3
- import { page } from "$app/state";
4
-
5
- interface BreadcrumbItem {
6
- label: string;
7
- href?: string;
8
- }
9
-
10
- const breadcrumbs = $derived.by(() => {
11
- const list = (page.data.breadcrumbs ?? []) as Array<{ label: string; path: string }>;
12
-
13
- return list.reduce<BreadcrumbItem[]>(
14
- (prev, curr) => [...prev, { label: curr.label, href: `${prev.at(-1)?.href ?? ""}${curr.path}` }],
15
- [],
16
- );
17
- });
3
+ import { breadcrumbs } from "$lib/stores/breadcrumbs.svelte";
18
4
  </script>
19
5
 
20
- {#if breadcrumbs.length > 0}
6
+ {#if breadcrumbs.items.length > 0}
21
7
  <nav aria-label="Breadcrumb" class="hidden md:flex items-center gap-1 text-sm">
22
- {#each breadcrumbs as crumb, index (index)}
23
- {#if crumb.href && index < breadcrumbs.length - 1}
8
+ {#each breadcrumbs.items as crumb, index (index)}
9
+ {#if crumb.href && index < breadcrumbs.items.length - 1}
24
10
  <!-- eslint-disable @typescript-eslint/no-explicit-any -->
25
11
  <a
26
12
  href={resolve(crumb.href as any)}
@@ -34,7 +20,7 @@
34
20
  {crumb.label}
35
21
  </span>
36
22
  {/if}
37
- {#if index < breadcrumbs.length - 1}
23
+ {#if index < breadcrumbs.items.length - 1}
38
24
  <span style="color: var(--text-secondary);">/</span>
39
25
  {/if}
40
26
  {/each}
@@ -2,8 +2,13 @@
2
2
  import { goto } from "$app/navigation";
3
3
  import { resolve } from "$app/paths";
4
4
  import { page } from "$app/state";
5
+ import { clickOutside } from "$lib/actions/clickOutside";
5
6
  import { jsonTextarea } from "$lib/actions/jsonTextarea";
7
+ import { portal } from "$lib/actions/portal";
8
+ import IconChevronDown from "$lib/icons/IconChevronDown.svelte";
9
+ import IconEdit from "$lib/icons/IconEdit.svelte";
6
10
  import type { SearchParams } from "$lib/types";
11
+ import { tick } from "svelte";
7
12
 
8
13
  interface Props {
9
14
  params: SearchParams;
@@ -22,12 +27,28 @@
22
27
 
23
28
  let queryInput = $state<HTMLInputElement | HTMLTextAreaElement | undefined>(undefined);
24
29
 
25
- // Detect if query is an aggregation (starts with [)
26
- let isAggregation = $derived(params.query?.trimStart().startsWith("["));
30
+ let showModeDropdown = $state(false);
31
+ let modeButtonElement = $state<HTMLButtonElement>();
32
+ let dropdownPosition = $state({ left: "0px", top: "0px", minWidth: "140px" });
27
33
 
28
- // Disable edit mode when switching to aggregation mode
34
+ // Calculate dropdown position when shown
29
35
  $effect(() => {
30
- if (isAggregation && editMode) {
36
+ if (showModeDropdown && modeButtonElement) {
37
+ tick().then(() => {
38
+ if (!modeButtonElement) return;
39
+ const rect = modeButtonElement.getBoundingClientRect();
40
+ dropdownPosition = {
41
+ left: `${rect.left}px`,
42
+ top: `${rect.bottom + 5}px`,
43
+ minWidth: `${rect.width}px`,
44
+ };
45
+ });
46
+ }
47
+ });
48
+
49
+ // Disable edit mode when switching to aggregation or distinct mode
50
+ $effect(() => {
51
+ if ((params.mode === "aggregation" || params.mode === "distinct") && editMode) {
31
52
  editMode = false;
32
53
  }
33
54
  });
@@ -42,7 +63,9 @@
42
63
  async function submit(event: SubmitEvent) {
43
64
  event.preventDefault();
44
65
  counter++;
66
+
45
67
  const formData = new FormData(form);
68
+
46
69
  await goto(
47
70
  resolve(
48
71
  (page.url.pathname +
@@ -58,6 +81,27 @@
58
81
  );
59
82
  }
60
83
 
84
+ function selectMode(newMode: "query" | "distinct" | "aggregation") {
85
+ params.mode = newMode;
86
+ showModeDropdown = false;
87
+
88
+ // Initialize appropriate default values
89
+ if (newMode === "aggregation" && !params.query?.trimStart().startsWith("[")) {
90
+ params.query = "[]";
91
+ } else if (newMode === "query" && params.query?.trimStart().startsWith("[")) {
92
+ params.query = "{}";
93
+ } else if (newMode === "distinct") {
94
+ // When switching to distinct mode, reset field and use current query as filter
95
+ params.field = undefined;
96
+ if (!params.query || params.query.trim() === "") {
97
+ params.query = "{}";
98
+ } else if (params.query.trim() !== "{}") {
99
+ // If there's a non-empty filter, show the optional fields
100
+ showOptionalFields = true;
101
+ }
102
+ }
103
+ }
104
+
61
105
  let form = $state<HTMLFormElement | undefined>(undefined);
62
106
  </script>
63
107
 
@@ -68,13 +112,19 @@
68
112
  <div
69
113
  class="flex-1 flex items-stretch rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50"
70
114
  >
71
- <div
72
- class="px-3 flex items-center text-[13px] border-r border-[var(--border-color)]"
115
+ <!-- Mode selector dropdown -->
116
+ <button
117
+ type="button"
118
+ bind:this={modeButtonElement}
119
+ class="h-full px-3 flex items-center gap-1 text-[13px] border-r border-[var(--border-color)] hover:bg-[var(--color-3)] transition cursor-pointer"
73
120
  style="color: var(--text-secondary);"
121
+ onclick={() => (showModeDropdown = !showModeDropdown)}
74
122
  >
75
- {isAggregation ? "Aggregation" : "Query"}
76
- </div>
77
- {#if isAggregation}
123
+ <span class="capitalize">{params.mode}</span>
124
+ <IconChevronDown class="w-3 h-3" />
125
+ </button>
126
+
127
+ {#if params.mode === "aggregation"}
78
128
  <textarea
79
129
  bind:this={queryInput}
80
130
  bind:value={params.query}
@@ -85,6 +135,15 @@
85
135
  class="w-full px-3 py-2 bg-transparent outline-none font-mono text-[13px] resize-y"
86
136
  style="color: var(--text);"
87
137
  ></textarea>
138
+ {:else if params.mode === "distinct"}
139
+ <input
140
+ type="text"
141
+ bind:value={params.field}
142
+ name="field"
143
+ placeholder="field name"
144
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
145
+ style="color: var(--text);"
146
+ />
88
147
  {:else}
89
148
  <input
90
149
  type="text"
@@ -98,6 +157,7 @@
98
157
  {/if}
99
158
  </div>
100
159
 
160
+ <input type="hidden" value={params.mode} name="mode" />
101
161
  <input type="hidden" value={counter} name="v" />
102
162
 
103
163
  <div class="flex items-center gap-2">
@@ -117,26 +177,13 @@
117
177
  type="button"
118
178
  class="h-9 px-3 rounded-xl border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] transition disabled:opacity-50 cursor-pointer"
119
179
  style="color: var(--text);"
120
- title={isAggregation ? "Update not available in aggregation mode" : "Update multiple documents"}
121
- disabled={isAggregation}
180
+ title={params.mode !== "query" ? "Update not available in this mode" : "Update multiple documents"}
181
+ disabled={params.mode !== "query"}
122
182
  onclick={() => {
123
183
  editMode = !editMode;
124
184
  }}
125
185
  >
126
- <svg
127
- xmlns="http://www.w3.org/2000/svg"
128
- width="16"
129
- height="16"
130
- viewBox="0 0 24 24"
131
- fill="none"
132
- stroke="currentColor"
133
- stroke-width="2"
134
- stroke-linecap="round"
135
- stroke-linejoin="round"
136
- >
137
- <path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"></path>
138
- <path d="m15 5 4 4"></path>
139
- </svg>
186
+ <IconEdit class="w-4 h-4" />
140
187
  </button>
141
188
  {/if}
142
189
  <button
@@ -151,41 +198,63 @@
151
198
  <!-- Optional fields -->
152
199
  {#if showOptionalFields}
153
200
  <div class="grid gap-2 sm:grid-cols-2">
154
- <!-- Sort -->
155
- <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
201
+ {#if params.mode === "distinct"}
202
+ <!-- Distinct Filter -->
156
203
  <div
157
- class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
158
- style="color: var(--text-secondary);"
204
+ class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50 sm:col-span-2"
159
205
  >
160
- Sort
206
+ <div
207
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
208
+ style="color: var(--text-secondary);"
209
+ >
210
+ Filter (optional)
211
+ </div>
212
+ <input
213
+ type="text"
214
+ bind:value={params.query}
215
+ name="query"
216
+ placeholder={"{}"}
217
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
218
+ style="color: var(--text);"
219
+ />
220
+ </div>
221
+ {:else}
222
+ <!-- Sort -->
223
+ <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
224
+ <div
225
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
226
+ style="color: var(--text-secondary);"
227
+ >
228
+ Sort
229
+ </div>
230
+ <input
231
+ type="text"
232
+ bind:value={params.sort}
233
+ name="sort"
234
+ placeholder={"{}"}
235
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
236
+ style="color: var(--text);"
237
+ />
161
238
  </div>
162
- <input
163
- type="text"
164
- bind:value={params.sort}
165
- name="sort"
166
- placeholder={"{}"}
167
- class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
168
- style="color: var(--text);"
169
- />
170
- </div>
171
239
 
172
- <!-- Project -->
173
- <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
174
- <div
175
- class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
176
- style="color: var(--text-secondary);"
177
- >
178
- Project
240
+ <!-- Project -->
241
+ <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
242
+ <div
243
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
244
+ style="color: var(--text-secondary);"
245
+ >
246
+ Project
247
+ </div>
248
+ <input
249
+ type="text"
250
+ bind:value={params.project}
251
+ name="project"
252
+ placeholder={"{}"}
253
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
254
+ style="color: var(--text);"
255
+ />
179
256
  </div>
180
- <input
181
- type="text"
182
- bind:value={params.project}
183
- name="project"
184
- placeholder={"{}"}
185
- class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
186
- style="color: var(--text);"
187
- />
188
- </div>
257
+ {/if}
189
258
 
190
259
  <!-- Skip -->
191
260
  <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
@@ -226,16 +295,46 @@
226
295
  {/if}
227
296
 
228
297
  <!-- Help text -->
229
- {#if !showOptionalFields && !isAggregation && params.query === "{}"}
230
- <div class="text-xs" style="color: var(--text-secondary);">
231
- Tip: Use <code class="px-1.5 py-0.5 rounded bg-[var(--color-3)] border border-[var(--border-color)] font-mono"
232
- >[{"{...}"}]</code
233
- > to switch to aggregation mode
234
- </div>
235
- {/if}
236
298
  </form>
237
299
  </div>
238
300
 
301
+ <!-- Mode dropdown (rendered via portal to avoid overflow issues) -->
302
+ {#if showModeDropdown}
303
+ <div
304
+ use:portal
305
+ use:clickOutside={() => (showModeDropdown = false)}
306
+ class="fixed z-[1000] rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] shadow-lg overflow-hidden"
307
+ style:left={dropdownPosition.left}
308
+ style:top={dropdownPosition.top}
309
+ style:min-width={dropdownPosition.minWidth}
310
+ >
311
+ <button
312
+ type="button"
313
+ class="w-full px-3 py-2 text-left text-[13px] hover:bg-[var(--color-3)] transition cursor-pointer"
314
+ style="color: var(--text);"
315
+ onclick={() => selectMode("query")}
316
+ >
317
+ Query
318
+ </button>
319
+ <button
320
+ type="button"
321
+ class="w-full px-3 py-2 text-left text-[13px] hover:bg-[var(--color-3)] transition cursor-pointer"
322
+ style="color: var(--text);"
323
+ onclick={() => selectMode("distinct")}
324
+ >
325
+ Distinct
326
+ </button>
327
+ <button
328
+ type="button"
329
+ class="w-full px-3 py-2 text-left text-[13px] hover:bg-[var(--color-3)] transition cursor-pointer"
330
+ style="color: var(--text);"
331
+ onclick={() => selectMode("aggregation")}
332
+ >
333
+ Aggregation
334
+ </button>
335
+ </div>
336
+ {/if}
337
+
239
338
  <style lang="postcss">
240
339
  input[type="text"],
241
340
  input[type="number"],
@@ -60,11 +60,13 @@
60
60
  </thead>
61
61
  {/if}
62
62
  <tbody>
63
- {#each rows as row, index (index)}
63
+ {#each rows as row, rowIndex (rowIndex)}
64
64
  <tr>
65
65
  {#each columns as column, index (index)}
66
66
  <td
67
- class="px-2 py-1 border-b border-[var(--color-3)]"
67
+ class="px-2 py-1"
68
+ class:border-b={rowIndex < rows.length - 1}
69
+ class:border-[var(--color-3)]={rowIndex < rows.length - 1}
68
70
  class:text-left={column.align === "left" || !column.align}
69
71
  class:text-right={column.align === "right"}
70
72
  class:text-center={column.align === "center"}
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ class?: string;
4
+ }
5
+
6
+ let { class: className = "w-4 h-4" }: Props = $props();
7
+ </script>
8
+
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ viewBox="0 0 24 24"
12
+ fill="none"
13
+ stroke="currentColor"
14
+ stroke-width="2"
15
+ stroke-linecap="round"
16
+ stroke-linejoin="round"
17
+ class={className}
18
+ >
19
+ <path d="m6 9 6 6 6-6" />
20
+ </svg>