mongoku 2.2.4 → 2.3.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 (351) hide show
  1. package/build/client/_app/immutable/assets/0.BXOUh4Q1.css +1 -0
  2. package/build/client/_app/immutable/assets/0.BXOUh4Q1.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.BXOUh4Q1.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.B90SyvCO.css +1 -0
  8. package/build/client/_app/immutable/assets/12.B90SyvCO.css.br +0 -0
  9. package/build/client/_app/immutable/assets/12.B90SyvCO.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/AIOqEo5H.js +1 -0
  14. package/build/client/_app/immutable/chunks/AIOqEo5H.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/AIOqEo5H.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/{D7E46CWw.js → BEYqxaXI.js} +1 -1
  17. package/build/client/_app/immutable/chunks/BEYqxaXI.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BEYqxaXI.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/BJqoLy3B.js +2 -0
  20. package/build/client/_app/immutable/chunks/BJqoLy3B.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/BJqoLy3B.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/{DR9xdhsg.js → BXaawuvz.js} +1 -1
  23. package/build/client/_app/immutable/chunks/BXaawuvz.js.br +2 -0
  24. package/build/client/_app/immutable/chunks/BXaawuvz.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/{D4iRRB8h.js → BgGFWTC8.js} +1 -1
  26. package/build/client/_app/immutable/chunks/BgGFWTC8.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BgGFWTC8.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/{5nAxkTTP.js → Bpmh7lVJ.js} +1 -1
  29. package/build/client/_app/immutable/chunks/Bpmh7lVJ.js.br +6 -0
  30. package/build/client/_app/immutable/chunks/Bpmh7lVJ.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/BrrIPcne.js +1 -0
  32. package/build/client/_app/immutable/chunks/BrrIPcne.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/BrrIPcne.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/{BUNgwIS0.js → ByHQcyQR.js} +1 -1
  35. package/build/client/_app/immutable/chunks/ByHQcyQR.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/ByHQcyQR.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{Dx56OlI-.js → C6AfvKtU.js} +1 -1
  38. package/build/client/_app/immutable/chunks/C6AfvKtU.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/C6AfvKtU.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/COPDkxhL.js +29 -0
  41. package/build/client/_app/immutable/chunks/COPDkxhL.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/COPDkxhL.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/{3iRu_dUj.js → CTHGUrxr.js} +2 -2
  44. package/build/client/_app/immutable/chunks/CTHGUrxr.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/CTHGUrxr.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/{BQEBQyfZ.js → Cotvfu8-.js} +1 -1
  47. package/build/client/_app/immutable/chunks/Cotvfu8-.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/Cotvfu8-.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/DQ-rgtMu.js +1 -0
  50. package/build/client/_app/immutable/chunks/DQ-rgtMu.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/DQ-rgtMu.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/DR2XDb5m.js +4 -0
  53. package/build/client/_app/immutable/chunks/DR2XDb5m.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/DR2XDb5m.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/DUjc2RFp.js +1 -0
  56. package/build/client/_app/immutable/chunks/DUjc2RFp.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/DUjc2RFp.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/{BE8UzJuY.js → DaTUpm_7.js} +1 -1
  59. package/build/client/_app/immutable/chunks/DaTUpm_7.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/DaTUpm_7.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/{C0PCwpqt.js → DnwC6gcO.js} +1 -1
  62. package/build/client/_app/immutable/chunks/DnwC6gcO.js.br +0 -0
  63. package/build/client/_app/immutable/chunks/DnwC6gcO.js.gz +0 -0
  64. package/build/client/_app/immutable/chunks/Dt2qaq8g.js +1 -0
  65. package/build/client/_app/immutable/chunks/Dt2qaq8g.js.br +0 -0
  66. package/build/client/_app/immutable/chunks/Dt2qaq8g.js.gz +0 -0
  67. package/build/client/_app/immutable/chunks/EUN-td6X.js +1 -0
  68. package/build/client/_app/immutable/chunks/EUN-td6X.js.br +0 -0
  69. package/build/client/_app/immutable/chunks/EUN-td6X.js.gz +0 -0
  70. package/build/client/_app/immutable/chunks/{Cx2cA4gg.js → EbSISJZg.js} +1 -1
  71. package/build/client/_app/immutable/chunks/EbSISJZg.js.br +0 -0
  72. package/build/client/_app/immutable/chunks/EbSISJZg.js.gz +0 -0
  73. package/build/client/_app/immutable/chunks/f0NSiE2-.js +1 -0
  74. package/build/client/_app/immutable/chunks/f0NSiE2-.js.br +0 -0
  75. package/build/client/_app/immutable/chunks/f0NSiE2-.js.gz +0 -0
  76. package/build/client/_app/immutable/chunks/{C2sjtvBO.js → qhxgM-U4.js} +1 -1
  77. package/build/client/_app/immutable/chunks/qhxgM-U4.js.br +0 -0
  78. package/build/client/_app/immutable/chunks/qhxgM-U4.js.gz +0 -0
  79. package/build/client/_app/immutable/chunks/zJxs36IQ.js +1 -0
  80. package/build/client/_app/immutable/chunks/zJxs36IQ.js.br +0 -0
  81. package/build/client/_app/immutable/chunks/zJxs36IQ.js.gz +0 -0
  82. package/build/client/_app/immutable/entry/{app.DrdSPfGo.js → app.Cu4hmll6.js} +2 -2
  83. package/build/client/_app/immutable/entry/app.Cu4hmll6.js.br +0 -0
  84. package/build/client/_app/immutable/entry/app.Cu4hmll6.js.gz +0 -0
  85. package/build/client/_app/immutable/entry/start.CWodO31h.js +1 -0
  86. package/build/client/_app/immutable/entry/start.CWodO31h.js.br +2 -0
  87. package/build/client/_app/immutable/entry/start.CWodO31h.js.gz +0 -0
  88. package/build/client/_app/immutable/nodes/0.CA_MMU1Y.js +1 -0
  89. package/build/client/_app/immutable/nodes/0.CA_MMU1Y.js.br +0 -0
  90. package/build/client/_app/immutable/nodes/0.CA_MMU1Y.js.gz +0 -0
  91. package/build/client/_app/immutable/nodes/1.RRRMvoTM.js +1 -0
  92. package/build/client/_app/immutable/nodes/1.RRRMvoTM.js.br +1 -0
  93. package/build/client/_app/immutable/nodes/1.RRRMvoTM.js.gz +0 -0
  94. package/build/client/_app/immutable/nodes/10.SPSTrllh.js +1 -0
  95. package/build/client/_app/immutable/nodes/10.SPSTrllh.js.br +0 -0
  96. package/build/client/_app/immutable/nodes/10.SPSTrllh.js.gz +0 -0
  97. package/build/client/_app/immutable/nodes/{11.qfhS2VqU.js → 11.C4Wc3Kw8.js} +1 -1
  98. package/build/client/_app/immutable/nodes/11.C4Wc3Kw8.js.br +0 -0
  99. package/build/client/_app/immutable/nodes/11.C4Wc3Kw8.js.gz +0 -0
  100. package/build/client/_app/immutable/nodes/12.CWkEGtcM.js +1 -0
  101. package/build/client/_app/immutable/nodes/12.CWkEGtcM.js.br +0 -0
  102. package/build/client/_app/immutable/nodes/12.CWkEGtcM.js.gz +0 -0
  103. package/build/client/_app/immutable/nodes/13.CHTpks4Z.js +66 -0
  104. package/build/client/_app/immutable/nodes/13.CHTpks4Z.js.br +0 -0
  105. package/build/client/_app/immutable/nodes/13.CHTpks4Z.js.gz +0 -0
  106. package/build/client/_app/immutable/nodes/{2.DwwrLLW4.js → 2.tuhqPc6d.js} +1 -1
  107. package/build/client/_app/immutable/nodes/2.tuhqPc6d.js.br +0 -0
  108. package/build/client/_app/immutable/nodes/2.tuhqPc6d.js.gz +0 -0
  109. package/build/client/_app/immutable/nodes/{3.t20GootO.js → 3.304xAIC7.js} +1 -1
  110. package/build/client/_app/immutable/nodes/3.304xAIC7.js.br +0 -0
  111. package/build/client/_app/immutable/nodes/3.304xAIC7.js.gz +0 -0
  112. package/build/client/_app/immutable/nodes/{4.CXHjkPtf.js → 4.CRm68VfX.js} +1 -1
  113. package/build/client/_app/immutable/nodes/4.CRm68VfX.js.br +0 -0
  114. package/build/client/_app/immutable/nodes/4.CRm68VfX.js.gz +0 -0
  115. package/build/client/_app/immutable/nodes/{5.C9tcr5B0.js → 5.DfCi7Z5N.js} +1 -1
  116. package/build/client/_app/immutable/nodes/5.DfCi7Z5N.js.br +0 -0
  117. package/build/client/_app/immutable/nodes/5.DfCi7Z5N.js.gz +0 -0
  118. package/build/client/_app/immutable/nodes/7.COdDrqa5.js +1 -0
  119. package/build/client/_app/immutable/nodes/7.COdDrqa5.js.br +0 -0
  120. package/build/client/_app/immutable/nodes/7.COdDrqa5.js.gz +0 -0
  121. package/build/client/_app/immutable/nodes/8.COLtCRaa.js +1 -0
  122. package/build/client/_app/immutable/nodes/8.COLtCRaa.js.br +0 -0
  123. package/build/client/_app/immutable/nodes/8.COLtCRaa.js.gz +0 -0
  124. package/build/client/_app/immutable/nodes/{9.BXMJq3Z_.js → 9.DGHjsSV7.js} +2 -2
  125. package/build/client/_app/immutable/nodes/9.DGHjsSV7.js.br +0 -0
  126. package/build/client/_app/immutable/nodes/9.DGHjsSV7.js.gz +0 -0
  127. package/build/client/_app/version.json +1 -1
  128. package/build/client/_app/version.json.br +0 -0
  129. package/build/client/_app/version.json.gz +0 -0
  130. package/build/server/chunks/0-QaXL5dxl.js +22 -0
  131. package/build/server/chunks/0-QaXL5dxl.js.map +1 -0
  132. package/build/server/chunks/1-lbtVyJzb.js +9 -0
  133. package/build/server/chunks/{1-C_LPMO7A.js.map → 1-lbtVyJzb.js.map} +1 -1
  134. package/build/server/chunks/{10-DGUQMXHt.js → 10-srcxgYum.js} +4 -4
  135. package/build/server/chunks/10-srcxgYum.js.map +1 -0
  136. package/build/server/chunks/{11-CxBnyyqR.js → 11-Do6XJz0l.js} +4 -4
  137. package/build/server/chunks/11-Do6XJz0l.js.map +1 -0
  138. package/build/server/chunks/{12-K_JVUnsk.js → 12-zP_nvSCU.js} +4 -4
  139. package/build/server/chunks/12-zP_nvSCU.js.map +1 -0
  140. package/build/server/chunks/{13-Cay35aHK.js → 13-Df-9cdO7.js} +4 -4
  141. package/build/server/chunks/{13-Cay35aHK.js.map → 13-Df-9cdO7.js.map} +1 -1
  142. package/build/server/chunks/{2-ClkERMhY.js → 2-CEvLemXF.js} +2 -2
  143. package/build/server/chunks/{2-ClkERMhY.js.map → 2-CEvLemXF.js.map} +1 -1
  144. package/build/server/chunks/{3-CTpqmxdo.js → 3-C8wnnjW_.js} +2 -2
  145. package/build/server/chunks/{3-CTpqmxdo.js.map → 3-C8wnnjW_.js.map} +1 -1
  146. package/build/server/chunks/{4-CUH4fZn8.js → 4-CFsHQHNr.js} +2 -2
  147. package/build/server/chunks/{4-CUH4fZn8.js.map → 4-CFsHQHNr.js.map} +1 -1
  148. package/build/server/chunks/{5-BSEdxfut.js → 5-BHNZukuO.js} +2 -2
  149. package/build/server/chunks/{5-BSEdxfut.js.map → 5-BHNZukuO.js.map} +1 -1
  150. package/build/server/chunks/{7-DvU-_ADW.js → 7-_mc0fkA5.js} +4 -4
  151. package/build/server/chunks/7-_mc0fkA5.js.map +1 -0
  152. package/build/server/chunks/{8-CA3-CJtS.js → 8-CgCyM--7.js} +4 -4
  153. package/build/server/chunks/8-CgCyM--7.js.map +1 -0
  154. package/build/server/chunks/{9-jMOS3lPS.js → 9-CrztPNtK.js} +4 -4
  155. package/build/server/chunks/9-CrztPNtK.js.map +1 -0
  156. package/build/server/chunks/{JsonValue-WMdIUvRM.js → JsonValue-BUoddLqM.js} +10 -3
  157. package/build/server/chunks/JsonValue-BUoddLqM.js.map +1 -0
  158. package/build/server/chunks/{Modal-zVnoAfFx.js → Modal-BzZ9u6V6.js} +3 -3
  159. package/build/server/chunks/Modal-BzZ9u6V6.js.map +1 -0
  160. package/build/server/chunks/Panel-DEP08QXV.js +48 -0
  161. package/build/server/chunks/Panel-DEP08QXV.js.map +1 -0
  162. package/build/server/chunks/{PrettyJson-D3CylSVd.js → PrettyJson-5I-m1T9H.js} +53 -38
  163. package/build/server/chunks/PrettyJson-5I-m1T9H.js.map +1 -0
  164. package/build/server/chunks/Tooltip-DK6Aok7l.js +35 -0
  165. package/build/server/chunks/Tooltip-DK6Aok7l.js.map +1 -0
  166. package/build/server/chunks/{TooltipTable-DCu3GLqO.js → TooltipTable-DUYKVtrh.js} +3 -3
  167. package/build/server/chunks/{TooltipTable-DCu3GLqO.js.map → TooltipTable-DUYKVtrh.js.map} +1 -1
  168. package/build/server/chunks/_layout.svelte-CLgSVnvV.js +160 -0
  169. package/build/server/chunks/_layout.svelte-CLgSVnvV.js.map +1 -0
  170. package/build/server/chunks/{_page.svelte-DoOBFRSo.js → _page.svelte-B4-xrCHW.js} +42 -30
  171. package/build/server/chunks/_page.svelte-B4-xrCHW.js.map +1 -0
  172. package/build/server/chunks/{_page.svelte-C-13GpOe.js → _page.svelte-BORdYQFx.js} +12 -10
  173. package/build/server/chunks/_page.svelte-BORdYQFx.js.map +1 -0
  174. package/build/server/chunks/{_page.svelte-2w3fCax2.js → _page.svelte-C8zstZ7b.js} +6 -6
  175. package/build/server/chunks/{_page.svelte-2w3fCax2.js.map → _page.svelte-C8zstZ7b.js.map} +1 -1
  176. package/build/server/chunks/{_page.svelte-BBHqwhWF.js → _page.svelte-C9l9vy6P.js} +8 -7
  177. package/build/server/chunks/{_page.svelte-BBHqwhWF.js.map → _page.svelte-C9l9vy6P.js.map} +1 -1
  178. package/build/server/chunks/{_page.svelte-BRxX_vQR.js → _page.svelte-CRBjbDDt.js} +8 -7
  179. package/build/server/chunks/{_page.svelte-BRxX_vQR.js.map → _page.svelte-CRBjbDDt.js.map} +1 -1
  180. package/build/server/chunks/{_page.svelte-Cm_vgRRR.js → _page.svelte-CiIXCzlp.js} +18 -14
  181. package/build/server/chunks/_page.svelte-CiIXCzlp.js.map +1 -0
  182. package/build/server/chunks/{_page.svelte-Ca9u_35e.js → _page.svelte-TuuvQq-s.js} +7 -6
  183. package/build/server/chunks/{_page.svelte-Ca9u_35e.js.map → _page.svelte-TuuvQq-s.js.map} +1 -1
  184. package/build/server/chunks/{index2-DBFlGzWV.js → index2-DzKnqQNM.js} +2 -2
  185. package/build/server/chunks/{index2-DBFlGzWV.js.map → index2-DzKnqQNM.js.map} +1 -1
  186. package/build/server/index.js +3 -3
  187. package/build/server/index.js.map +1 -1
  188. package/build/server/manifest.js +14 -14
  189. package/build/server/manifest.js.map +1 -1
  190. package/package.json +1 -1
  191. package/src/app.css +161 -134
  192. package/src/app.html +23 -10
  193. package/src/lib/actions/portal.ts +28 -0
  194. package/src/lib/components/Breadcrumbs.svelte +20 -60
  195. package/src/lib/components/JsonValue.svelte +30 -1
  196. package/src/lib/components/Modal.svelte +5 -5
  197. package/src/lib/components/Notifications.svelte +40 -20
  198. package/src/lib/components/PageSwitcher.svelte +14 -10
  199. package/src/lib/components/Panel.svelte +19 -15
  200. package/src/lib/components/PrettyJson.svelte +101 -43
  201. package/src/lib/components/SearchBox.svelte +117 -96
  202. package/src/lib/components/ThemeSwitcher.svelte +191 -36
  203. package/src/lib/components/Tooltip.svelte +23 -14
  204. package/src/routes/+layout.svelte +36 -17
  205. package/src/routes/servers/+page.svelte +1 -1
  206. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +77 -40
  207. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/indexes/+page.svelte +118 -95
  208. package/src/routes/servers/[server]/databases/[database]/collections/[collection]/mappings/+page.svelte +26 -12
  209. package/build/client/_app/immutable/assets/0.COnAcXN4.css +0 -1
  210. package/build/client/_app/immutable/assets/0.COnAcXN4.css.br +0 -0
  211. package/build/client/_app/immutable/assets/0.COnAcXN4.css.gz +0 -0
  212. package/build/client/_app/immutable/assets/10.59aTjJn9.css +0 -1
  213. package/build/client/_app/immutable/assets/10.59aTjJn9.css.br +0 -0
  214. package/build/client/_app/immutable/assets/10.59aTjJn9.css.gz +0 -0
  215. package/build/client/_app/immutable/assets/12.BdCOhvz0.css +0 -1
  216. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.br +0 -0
  217. package/build/client/_app/immutable/assets/12.BdCOhvz0.css.gz +0 -0
  218. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css +0 -1
  219. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.br +0 -0
  220. package/build/client/_app/immutable/assets/Modal.DIIFkbGB.css.gz +0 -0
  221. package/build/client/_app/immutable/assets/Panel.B3aWupye.css +0 -1
  222. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.br +0 -0
  223. package/build/client/_app/immutable/assets/Panel.B3aWupye.css.gz +0 -0
  224. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.Cnibl3-L.woff2 +0 -0
  225. package/build/client/_app/immutable/assets/cuprum-cyrillic-400-normal.RKIjpA76.woff +0 -0
  226. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.CT5q4ZVh.woff2 +0 -0
  227. package/build/client/_app/immutable/assets/cuprum-cyrillic-ext-400-normal.iCCFJ4Gn.woff +0 -0
  228. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.Cbwtr8a4.woff +0 -0
  229. package/build/client/_app/immutable/assets/cuprum-latin-400-normal.CjFvNwMJ.woff2 +0 -0
  230. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BWTJtpjo.woff2 +0 -0
  231. package/build/client/_app/immutable/assets/cuprum-latin-ext-400-normal.BZXayy47.woff +0 -0
  232. package/build/client/_app/immutable/assets/cuprum-vietnamese-400-normal.uXRi1gw5.woff +0 -0
  233. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.BdIzgbsr.woff +0 -0
  234. package/build/client/_app/immutable/assets/rajdhani-devanagari-400-normal.CTuj2HZW.woff2 +0 -0
  235. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.C6_q4usG.woff +0 -0
  236. package/build/client/_app/immutable/assets/rajdhani-latin-400-normal.CurJOxDW.woff2 +0 -0
  237. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.DACPYgMx.woff2 +0 -0
  238. package/build/client/_app/immutable/assets/rajdhani-latin-ext-400-normal.Der7ynDE.woff +0 -0
  239. package/build/client/_app/immutable/chunks/3iRu_dUj.js.br +0 -0
  240. package/build/client/_app/immutable/chunks/3iRu_dUj.js.gz +0 -0
  241. package/build/client/_app/immutable/chunks/5nAxkTTP.js.br +0 -5
  242. package/build/client/_app/immutable/chunks/5nAxkTTP.js.gz +0 -0
  243. package/build/client/_app/immutable/chunks/BBg-V8FE.js +0 -1
  244. package/build/client/_app/immutable/chunks/BBg-V8FE.js.br +0 -0
  245. package/build/client/_app/immutable/chunks/BBg-V8FE.js.gz +0 -0
  246. package/build/client/_app/immutable/chunks/BE8UzJuY.js.br +0 -0
  247. package/build/client/_app/immutable/chunks/BE8UzJuY.js.gz +0 -0
  248. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.br +0 -0
  249. package/build/client/_app/immutable/chunks/BQEBQyfZ.js.gz +0 -0
  250. package/build/client/_app/immutable/chunks/BUNgwIS0.js.br +0 -0
  251. package/build/client/_app/immutable/chunks/BUNgwIS0.js.gz +0 -0
  252. package/build/client/_app/immutable/chunks/BvKY81hz.js +0 -1
  253. package/build/client/_app/immutable/chunks/BvKY81hz.js.br +0 -0
  254. package/build/client/_app/immutable/chunks/BvKY81hz.js.gz +0 -0
  255. package/build/client/_app/immutable/chunks/C0PCwpqt.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/C0PCwpqt.js.gz +0 -0
  257. package/build/client/_app/immutable/chunks/C0rm4mmq.js +0 -1
  258. package/build/client/_app/immutable/chunks/C0rm4mmq.js.br +0 -0
  259. package/build/client/_app/immutable/chunks/C0rm4mmq.js.gz +0 -0
  260. package/build/client/_app/immutable/chunks/C2sjtvBO.js.br +0 -0
  261. package/build/client/_app/immutable/chunks/C2sjtvBO.js.gz +0 -0
  262. package/build/client/_app/immutable/chunks/C82Rp5eQ.js +0 -1
  263. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.br +0 -0
  264. package/build/client/_app/immutable/chunks/C82Rp5eQ.js.gz +0 -0
  265. package/build/client/_app/immutable/chunks/CGSOl_q_.js +0 -4
  266. package/build/client/_app/immutable/chunks/CGSOl_q_.js.br +0 -0
  267. package/build/client/_app/immutable/chunks/CGSOl_q_.js.gz +0 -0
  268. package/build/client/_app/immutable/chunks/CjNnAkTB.js +0 -1
  269. package/build/client/_app/immutable/chunks/CjNnAkTB.js.br +0 -0
  270. package/build/client/_app/immutable/chunks/CjNnAkTB.js.gz +0 -0
  271. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.br +0 -0
  272. package/build/client/_app/immutable/chunks/Cx2cA4gg.js.gz +0 -0
  273. package/build/client/_app/immutable/chunks/D4iRRB8h.js.br +0 -0
  274. package/build/client/_app/immutable/chunks/D4iRRB8h.js.gz +0 -0
  275. package/build/client/_app/immutable/chunks/D5ccpaXt.js +0 -1
  276. package/build/client/_app/immutable/chunks/D5ccpaXt.js.br +0 -0
  277. package/build/client/_app/immutable/chunks/D5ccpaXt.js.gz +0 -0
  278. package/build/client/_app/immutable/chunks/D7E46CWw.js.br +0 -0
  279. package/build/client/_app/immutable/chunks/D7E46CWw.js.gz +0 -0
  280. package/build/client/_app/immutable/chunks/DR9xdhsg.js.br +0 -0
  281. package/build/client/_app/immutable/chunks/DR9xdhsg.js.gz +0 -0
  282. package/build/client/_app/immutable/chunks/DVRQRZnh.js +0 -1
  283. package/build/client/_app/immutable/chunks/DVRQRZnh.js.br +0 -0
  284. package/build/client/_app/immutable/chunks/DVRQRZnh.js.gz +0 -0
  285. package/build/client/_app/immutable/chunks/DcPEQ0_V.js +0 -29
  286. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.br +0 -0
  287. package/build/client/_app/immutable/chunks/DcPEQ0_V.js.gz +0 -0
  288. package/build/client/_app/immutable/chunks/Dx56OlI-.js.br +0 -2
  289. package/build/client/_app/immutable/chunks/Dx56OlI-.js.gz +0 -0
  290. package/build/client/_app/immutable/chunks/PXh00dfp.js +0 -2
  291. package/build/client/_app/immutable/chunks/PXh00dfp.js.br +0 -0
  292. package/build/client/_app/immutable/chunks/PXh00dfp.js.gz +0 -0
  293. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.br +0 -0
  294. package/build/client/_app/immutable/entry/app.DrdSPfGo.js.gz +0 -0
  295. package/build/client/_app/immutable/entry/start.DGG3CpnK.js +0 -1
  296. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.br +0 -2
  297. package/build/client/_app/immutable/entry/start.DGG3CpnK.js.gz +0 -0
  298. package/build/client/_app/immutable/nodes/0.kCLtccjl.js +0 -5
  299. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.br +0 -0
  300. package/build/client/_app/immutable/nodes/0.kCLtccjl.js.gz +0 -0
  301. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js +0 -1
  302. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.br +0 -3
  303. package/build/client/_app/immutable/nodes/1.Dr8p9JHT.js.gz +0 -0
  304. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js +0 -2
  305. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.br +0 -0
  306. package/build/client/_app/immutable/nodes/10.B4uwvHd0.js.gz +0 -0
  307. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.br +0 -0
  308. package/build/client/_app/immutable/nodes/11.qfhS2VqU.js.gz +0 -0
  309. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js +0 -1
  310. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.br +0 -0
  311. package/build/client/_app/immutable/nodes/12.DkZDCIfS.js.gz +0 -0
  312. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js +0 -66
  313. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.br +0 -0
  314. package/build/client/_app/immutable/nodes/13.DFVzMgyY.js.gz +0 -0
  315. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.br +0 -1
  316. package/build/client/_app/immutable/nodes/2.DwwrLLW4.js.gz +0 -0
  317. package/build/client/_app/immutable/nodes/3.t20GootO.js.br +0 -0
  318. package/build/client/_app/immutable/nodes/3.t20GootO.js.gz +0 -0
  319. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.br +0 -0
  320. package/build/client/_app/immutable/nodes/4.CXHjkPtf.js.gz +0 -0
  321. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.br +0 -0
  322. package/build/client/_app/immutable/nodes/5.C9tcr5B0.js.gz +0 -0
  323. package/build/client/_app/immutable/nodes/7.D14iWySv.js +0 -1
  324. package/build/client/_app/immutable/nodes/7.D14iWySv.js.br +0 -0
  325. package/build/client/_app/immutable/nodes/7.D14iWySv.js.gz +0 -0
  326. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js +0 -1
  327. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.br +0 -0
  328. package/build/client/_app/immutable/nodes/8.BSXe_VNA.js.gz +0 -0
  329. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.br +0 -0
  330. package/build/client/_app/immutable/nodes/9.BXMJq3Z_.js.gz +0 -0
  331. package/build/server/chunks/0-BozXjQlk.js +0 -22
  332. package/build/server/chunks/0-BozXjQlk.js.map +0 -1
  333. package/build/server/chunks/1-C_LPMO7A.js +0 -9
  334. package/build/server/chunks/10-DGUQMXHt.js.map +0 -1
  335. package/build/server/chunks/11-CxBnyyqR.js.map +0 -1
  336. package/build/server/chunks/12-K_JVUnsk.js.map +0 -1
  337. package/build/server/chunks/7-DvU-_ADW.js.map +0 -1
  338. package/build/server/chunks/8-CA3-CJtS.js.map +0 -1
  339. package/build/server/chunks/9-jMOS3lPS.js.map +0 -1
  340. package/build/server/chunks/JsonValue-WMdIUvRM.js.map +0 -1
  341. package/build/server/chunks/Modal-zVnoAfFx.js.map +0 -1
  342. package/build/server/chunks/Panel-yg5YKL4d.js +0 -38
  343. package/build/server/chunks/Panel-yg5YKL4d.js.map +0 -1
  344. package/build/server/chunks/PrettyJson-D3CylSVd.js.map +0 -1
  345. package/build/server/chunks/Tooltip-ys6l541_.js +0 -28
  346. package/build/server/chunks/Tooltip-ys6l541_.js.map +0 -1
  347. package/build/server/chunks/_layout.svelte-DMm1Ill8.js +0 -168
  348. package/build/server/chunks/_layout.svelte-DMm1Ill8.js.map +0 -1
  349. package/build/server/chunks/_page.svelte-C-13GpOe.js.map +0 -1
  350. package/build/server/chunks/_page.svelte-Cm_vgRRR.js.map +0 -1
  351. package/build/server/chunks/_page.svelte-DoOBFRSo.js.map +0 -1
@@ -61,18 +61,18 @@
61
61
  let form = $state<HTMLFormElement | undefined>(undefined);
62
62
  </script>
63
63
 
64
- <div>
65
- <form class="flex items-stretch w-full" method="GET" action="?" onsubmit={submit} bind:this={form}>
66
- <!-- Parameters group -->
67
- <div class="flex-grow">
68
- <!-- Query input (always shown) -->
69
- <div class="flex items-stretch w-full {isAggregation ? 'min-h-10' : 'h-10'}">
64
+ <div class="rounded-2xl border border-[var(--border-color)] bg-[var(--light-background)]/70 shadow-sm p-3 sm:p-4">
65
+ <form class="flex flex-col gap-3" method="GET" action="?" onsubmit={submit} bind:this={form}>
66
+ <!-- Query input (always shown) -->
67
+ <div class="flex items-stretch gap-2">
68
+ <div
69
+ class="flex-1 flex items-stretch rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50"
70
+ >
70
71
  <div
71
- class="min-w-[100px] flex justify-center items-center border border-[var(--color-4)] {!showOptionalFields
72
- ? 'border-b rounded-bl-md'
73
- : 'border-b-0'} bg-[var(--color-1)] rounded-tl-md"
72
+ class="px-3 flex items-center text-[13px] border-r border-[var(--border-color)]"
73
+ style="color: var(--text-secondary);"
74
74
  >
75
- {isAggregation ? "Aggregation:" : "Query:"}
75
+ {isAggregation ? "Aggregation" : "Query"}
76
76
  </div>
77
77
  {#if isAggregation}
78
78
  <textarea
@@ -82,7 +82,8 @@
82
82
  name="query"
83
83
  rows="5"
84
84
  use:jsonTextarea={{ onsubmit: () => form?.requestSubmit() }}
85
- class="flex-grow border-0 bg-[var(--color-3)] pl-2.5 font-mono py-2 resize-y"
85
+ class="w-full px-3 py-2 bg-transparent outline-none font-mono text-[13px] resize-y"
86
+ style="color: var(--text);"
86
87
  ></textarea>
87
88
  {:else}
88
89
  <input
@@ -91,134 +92,154 @@
91
92
  bind:value={params.query}
92
93
  placeholder={"{}"}
93
94
  name="query"
94
- class="flex-grow border-0 bg-[var(--color-3)] pl-2.5 font-mono"
95
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
96
+ style="color: var(--text);"
95
97
  />
96
98
  {/if}
97
99
  </div>
98
100
 
99
101
  <input type="hidden" value={counter} name="v" />
100
- <!-- Sort input -->
101
- {#if showOptionalFields}
102
- <div class="flex items-stretch w-full h-10">
102
+
103
+ <div class="flex items-center gap-2">
104
+ <button
105
+ type="button"
106
+ class="h-9 px-3 rounded-xl border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[15px] font-semibold leading-none transition cursor-pointer"
107
+ style="color: var(--text);"
108
+ title="Toggle optional fields"
109
+ onclick={() => {
110
+ showOptionalFields = !showOptionalFields;
111
+ }}
112
+ >
113
+ {showOptionalFields ? "−" : "+"}
114
+ </button>
115
+ {#if !readonly}
116
+ <button
117
+ type="button"
118
+ 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
+ style="color: var(--text);"
120
+ title={isAggregation ? "Update not available in aggregation mode" : "Update multiple documents"}
121
+ disabled={isAggregation}
122
+ onclick={() => {
123
+ editMode = !editMode;
124
+ }}
125
+ >
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>
140
+ </button>
141
+ {/if}
142
+ <button
143
+ type="submit"
144
+ class="h-9 px-4 rounded-xl bg-[var(--button-success)] text-white font-semibold transition cursor-pointer hover:bg-[var(--button-success-l)] active:brightness-95"
145
+ >
146
+ Go
147
+ </button>
148
+ </div>
149
+ </div>
150
+
151
+ <!-- Optional fields -->
152
+ {#if showOptionalFields}
153
+ <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">
103
156
  <div
104
- class="min-w-[100px] flex justify-center items-center border border-[var(--color-4)] border-b-0 bg-[var(--color-1)]"
157
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
158
+ style="color: var(--text-secondary);"
105
159
  >
106
- Sort:
160
+ Sort
107
161
  </div>
108
162
  <input
109
163
  type="text"
110
164
  bind:value={params.sort}
111
165
  name="sort"
112
166
  placeholder={"{}"}
113
- class="flex-grow border-0 border-t border-[var(--color-4)] bg-[var(--color-3)] pl-2.5 font-mono"
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);"
114
169
  />
115
170
  </div>
116
171
 
117
- <!-- Skip input -->
118
- <div class="flex items-stretch w-full h-10">
172
+ <!-- Project -->
173
+ <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
119
174
  <div
120
- class="min-w-[100px] flex justify-center items-center border border-[var(--color-4)] border-b-0 bg-[var(--color-1)]"
175
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
176
+ style="color: var(--text-secondary);"
121
177
  >
122
- Skip:
178
+ Project
123
179
  </div>
124
180
  <input
125
- type="number"
126
- bind:value={params.skip}
127
- name="skip"
128
- min="0"
129
- class="flex-grow border-0 border-t border-[var(--color-4)] bg-[var(--color-3)] pl-2.5 font-mono"
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);"
130
187
  />
131
188
  </div>
132
189
 
133
- <!-- Limit input -->
134
- <div class="flex items-stretch w-full h-10">
190
+ <!-- Skip -->
191
+ <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
135
192
  <div
136
- class="min-w-[100px] flex justify-center items-center border border-[var(--color-4)] border-b-0 bg-[var(--color-1)]"
193
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
194
+ style="color: var(--text-secondary);"
137
195
  >
138
- Limit:
196
+ Skip
139
197
  </div>
140
198
  <input
141
199
  type="number"
142
- bind:value={params.limit}
143
- name="limit"
144
- min="1"
145
- class="flex-grow border-0 border-t border-[var(--color-4)] bg-[var(--color-3)] pl-2.5 font-mono"
200
+ bind:value={params.skip}
201
+ name="skip"
202
+ min="0"
203
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
204
+ style="color: var(--text);"
146
205
  />
147
206
  </div>
148
207
 
149
- <!-- Project input -->
150
- <div class="flex items-stretch w-full h-10">
208
+ <!-- Limit -->
209
+ <div class="rounded-xl border border-[var(--border-color)] overflow-hidden bg-[var(--color-3)]/50">
151
210
  <div
152
- class="min-w-[100px] flex justify-center items-center border border-[var(--color-4)] border-b bg-[var(--color-1)] rounded-bl-md"
211
+ class="px-3 py-1.5 text-[12px] border-b border-[var(--border-color)]"
212
+ style="color: var(--text-secondary);"
153
213
  >
154
- Project:
214
+ Limit
155
215
  </div>
156
216
  <input
157
- type="text"
158
- bind:value={params.project}
159
- name="project"
160
- placeholder={"{}"}
161
- class="flex-grow border-0 border-t border-[var(--color-4)] bg-[var(--color-3)] pl-2.5 font-mono"
217
+ type="number"
218
+ bind:value={params.limit}
219
+ name="limit"
220
+ min="1"
221
+ class="w-full h-9 px-3 bg-transparent outline-none font-mono text-[13px] border-0 !rounded-none"
222
+ style="color: var(--text);"
162
223
  />
163
224
  </div>
164
- {/if}
165
- </div>
166
-
167
- <!-- Toggle optional fields button -->
168
- <button
169
- class="btn btn-default !w-12 !rounded-none !border-r-0 text-2xl leading-none font-bold !py-1.5"
170
- type="button"
171
- onclick={() => {
172
- showOptionalFields = !showOptionalFields;
173
- }}
174
- >
175
- {showOptionalFields ? "−" : "+"}
176
- </button>
177
-
178
- <!-- Edit/Update button -->
179
- {#if !readonly}
180
- <button
181
- class="btn btn-default !w-12 !rounded-none !border-r-0 text-lg leading-none font-bold !py-1.5"
182
- type="button"
183
- title={isAggregation ? "Update not available in aggregation mode" : "Update multiple documents"}
184
- disabled={isAggregation}
185
- onclick={() => {
186
- editMode = !editMode;
187
- }}
188
- >
189
- <svg
190
- xmlns="http://www.w3.org/2000/svg"
191
- width="18"
192
- height="18"
193
- viewBox="0 0 24 24"
194
- fill="none"
195
- stroke="currentColor"
196
- stroke-width="2"
197
- stroke-linecap="round"
198
- stroke-linejoin="round"
199
- >
200
- <path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"></path>
201
- <path d="m15 5 4 4"></path>
202
- </svg>
203
- </button>
225
+ </div>
204
226
  {/if}
205
227
 
206
- <!-- Search button -->
207
- <button class="btn btn-success !rounded-l-none !rounded-r-md font-bold !py-1.5" type="submit"> GO! </button>
228
+ <!-- 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}
208
236
  </form>
209
-
210
- <!-- Help text when collapsed -->
211
- {#if !showOptionalFields && !isAggregation && params.query === "{}"}
212
- <div class="text-xs mt-1 ml-1" style="color: var(--text-secondary);">
213
- Tip: Use <code class="bg-[var(--color-3)] px-1 py-0.5 rounded font-mono">[{"{...}"}]</code> to switch to aggregation
214
- mode
215
- </div>
216
- {/if}
217
237
  </div>
218
238
 
219
239
  <style lang="postcss">
220
- input,
240
+ input[type="text"],
241
+ input[type="number"],
221
242
  textarea {
222
- border-radius: 0;
243
+ border-radius: 0 !important;
223
244
  }
224
245
  </style>
@@ -1,13 +1,29 @@
1
1
  <script lang="ts">
2
2
  type Theme = "system" | "light" | "dark";
3
3
 
4
- let currentTheme = $state<Theme>("dark");
4
+ let currentTheme = $state<Theme>("system");
5
+ let systemTheme = $state<"light" | "dark">("light");
5
6
 
6
- // Load theme from localStorage on mount
7
+ // Load theme from localStorage on mount and listen for system theme changes
7
8
  $effect(() => {
8
9
  if (typeof window !== "undefined") {
9
10
  const stored = localStorage.getItem("theme") as Theme | null;
10
- currentTheme = stored || "dark";
11
+ currentTheme = stored || "system";
12
+
13
+ // Detect system theme
14
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
15
+ systemTheme = mediaQuery.matches ? "dark" : "light";
16
+
17
+ // Listen for system theme changes
18
+ const handler = (e: MediaQueryListEvent) => {
19
+ systemTheme = e.matches ? "dark" : "light";
20
+ if (currentTheme === "system") {
21
+ setTheme("system");
22
+ }
23
+ };
24
+ mediaQuery.addEventListener("change", handler);
25
+
26
+ return () => mediaQuery.removeEventListener("change", handler);
11
27
  }
12
28
  });
13
29
 
@@ -20,47 +36,186 @@
20
36
  if (theme === "system") {
21
37
  const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
22
38
  root.setAttribute("data-theme", prefersDark ? "dark" : "light");
39
+ // Also add/remove dark class for Tailwind
40
+ if (prefersDark) {
41
+ root.classList.add("dark");
42
+ } else {
43
+ root.classList.remove("dark");
44
+ }
23
45
  } else {
24
46
  root.setAttribute("data-theme", theme);
47
+ // Also add/remove dark class for Tailwind
48
+ if (theme === "dark") {
49
+ root.classList.add("dark");
50
+ } else {
51
+ root.classList.remove("dark");
52
+ }
25
53
  }
26
- }
27
54
 
28
- function cycleTheme() {
29
- const themes: Theme[] = ["system", "light", "dark"];
30
- const currentIndex = themes.indexOf(currentTheme);
31
- const nextTheme = themes[(currentIndex + 1) % themes.length];
32
- setTheme(nextTheme);
55
+ // Set theme mode for CSS-based rendering
56
+ root.setAttribute("data-theme-mode", theme);
33
57
  }
34
58
 
35
- const icon = $derived.by(() => {
36
- switch (currentTheme) {
37
- case "light":
38
- return "☀️";
39
- case "dark":
40
- return "🌙";
41
- case "system":
42
- return "💻";
43
- }
44
- });
59
+ const oppositeTheme = $derived(systemTheme === "dark" ? "light" : "dark");
45
60
 
46
- const label = $derived.by(() => {
47
- switch (currentTheme) {
48
- case "light":
49
- return "Light";
50
- case "dark":
51
- return "Dark";
52
- case "system":
53
- return "System";
61
+ function toggleTheme() {
62
+ if (currentTheme === "system") {
63
+ setTheme(oppositeTheme);
64
+ } else {
65
+ // Toggle between light and dark
66
+ setTheme(currentTheme === "light" ? "dark" : "light");
54
67
  }
55
- });
68
+ }
56
69
  </script>
57
70
 
58
- <button
59
- onclick={cycleTheme}
60
- class="btn btn-default btn-sm flex items-center gap-2"
61
- title="Change theme (current: {label})"
62
- aria-label="Change theme"
71
+ {#snippet sunIcon()}
72
+ <svg
73
+ xmlns="http://www.w3.org/2000/svg"
74
+ class="h-4 w-4"
75
+ viewBox="0 0 24 24"
76
+ fill="none"
77
+ stroke="currentColor"
78
+ stroke-width="1.6"
79
+ >
80
+ <circle cx="12" cy="12" r="4"></circle>
81
+ <path
82
+ d="M12 2v2m0 16v2m10-10h-2M4 12H2m15.364-7.364-1.414 1.414M8.05 16.95l-1.414 1.414m0-12.728L8.05 6.364m10.607 10.607 1.414 1.414"
83
+ ></path>
84
+ </svg>
85
+ {/snippet}
86
+
87
+ {#snippet moonIcon()}
88
+ <svg
89
+ xmlns="http://www.w3.org/2000/svg"
90
+ class="h-4 w-4"
91
+ viewBox="0 0 24 24"
92
+ fill="none"
93
+ stroke="currentColor"
94
+ stroke-width="1.6"
95
+ >
96
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
97
+ </svg>
98
+ {/snippet}
99
+
100
+ {#snippet systemIcon()}
101
+ <svg
102
+ xmlns="http://www.w3.org/2000/svg"
103
+ class="h-4 w-4"
104
+ viewBox="0 0 24 24"
105
+ fill="none"
106
+ stroke="currentColor"
107
+ stroke-width="1.6"
108
+ >
109
+ <rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect>
110
+ <line x1="8" y1="21" x2="16" y2="21"></line>
111
+ <line x1="12" y1="17" x2="12" y2="21"></line>
112
+ </svg>
113
+ {/snippet}
114
+
115
+ <div
116
+ class="theme-switcher inline-flex rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] overflow-hidden text-sm font-medium"
117
+ style="color: var(--text);"
63
118
  >
64
- <span class="text-base">{icon}</span>
65
- <span class="hidden sm:inline">{label}</span>
66
- </button>
119
+ <!-- Left side -->
120
+ <button
121
+ onclick={toggleTheme}
122
+ class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer"
123
+ aria-label="Toggle theme"
124
+ >
125
+ <!-- Light mode selected -->
126
+ <span class="theme-content theme-light inline-flex items-center gap-2">
127
+ {@render sunIcon()}
128
+ <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Light</span>
129
+ </span>
130
+
131
+ <!-- Dark mode selected -->
132
+ <span class="theme-content theme-dark inline-flex items-center gap-2">
133
+ {@render moonIcon()}
134
+ <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Dark</span>
135
+ </span>
136
+
137
+ <!-- System mode + light actual theme -->
138
+ <span class="theme-content theme-system-light inline-flex items-center gap-2">
139
+ {@render sunIcon()}
140
+ </span>
141
+
142
+ <!-- System mode + dark actual theme -->
143
+ <span class="theme-content theme-system-dark inline-flex items-center gap-2">
144
+ {@render moonIcon()}
145
+ </span>
146
+ </button>
147
+
148
+ <!-- Divider -->
149
+ <div class="w-px bg-[var(--border-color)]"></div>
150
+
151
+ <!-- Right side -->
152
+ <button
153
+ onclick={() => setTheme("system")}
154
+ class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer"
155
+ aria-label="Switch to system theme"
156
+ >
157
+ {@render systemIcon()}
158
+ <span class="theme-text-system hidden sm:inline text-[13px]" style="color: var(--text-secondary);"> System </span>
159
+ </button>
160
+ </div>
161
+
162
+ <style>
163
+ /* Hide all theme content by default */
164
+ .theme-content {
165
+ display: none;
166
+ }
167
+
168
+ /* Show light mode when selected */
169
+ :global(html[data-theme-mode="light"]) .theme-light {
170
+ display: inline-flex;
171
+ opacity: 1;
172
+ }
173
+
174
+ /* Show dark mode when selected */
175
+ :global(html[data-theme-mode="dark"]) .theme-dark {
176
+ display: inline-flex;
177
+ opacity: 1;
178
+ }
179
+
180
+ /* Show system mode icons based on actual theme */
181
+ :global(html[data-theme-mode="system"][data-theme="light"]) .theme-system-light {
182
+ display: inline-flex;
183
+ opacity: 0.6;
184
+ }
185
+
186
+ :global(html[data-theme-mode="system"][data-theme="dark"]) .theme-system-dark {
187
+ display: inline-flex;
188
+ opacity: 0.6;
189
+ }
190
+
191
+ /* Show System text only when system mode is selected */
192
+ .theme-text-system {
193
+ display: none;
194
+ }
195
+
196
+ :global(html[data-theme-mode="system"]) .theme-text-system {
197
+ display: inline;
198
+ }
199
+
200
+ /* Opacity for left button when not system mode */
201
+ :global(html[data-theme-mode="light"]) .theme-switcher button:first-child,
202
+ :global(html[data-theme-mode="dark"]) .theme-switcher button:first-child {
203
+ opacity: 1;
204
+ }
205
+
206
+ /* Opacity for left button when system mode */
207
+ :global(html[data-theme-mode="system"]) .theme-switcher button:first-child {
208
+ opacity: 0.6;
209
+ }
210
+
211
+ /* Opacity for right button when system mode */
212
+ :global(html[data-theme-mode="system"]) .theme-switcher button:last-child {
213
+ opacity: 1;
214
+ }
215
+
216
+ /* Opacity for right button when not system mode */
217
+ :global(html[data-theme-mode="light"]) .theme-switcher button:last-child,
218
+ :global(html[data-theme-mode="dark"]) .theme-switcher button:last-child {
219
+ opacity: 0.6;
220
+ }
221
+ </style>
@@ -1,4 +1,5 @@
1
1
  <script lang="ts">
2
+ import { portal } from "$lib/actions/portal";
2
3
  import { tick, type Snippet } from "svelte";
3
4
 
4
5
  interface Props {
@@ -10,9 +11,13 @@
10
11
  show?: boolean;
11
12
  /** Additional class for the tooltip container */
12
13
  tooltipClass?: string;
14
+ /** Callback when mouse enters the tooltip content */
15
+ onTooltipMouseEnter?: () => void;
16
+ /** Callback when mouse leaves the tooltip content */
17
+ onTooltipMouseLeave?: () => void;
13
18
  }
14
19
 
15
- let { trigger, content, show = false, tooltipClass = "" }: Props = $props();
20
+ let { trigger, content, show = false, tooltipClass = "", onTooltipMouseEnter, onTooltipMouseLeave }: Props = $props();
16
21
 
17
22
  let tooltipElement = $state<HTMLDivElement>();
18
23
  let containerElement = $state<HTMLDivElement>();
@@ -67,16 +72,20 @@
67
72
  });
68
73
  </script>
69
74
 
70
- <div class="relative inline-block" bind:this={containerElement}>
71
- {@render trigger()}{#if show}
72
- <div
73
- class="fixed bg-[var(--light-background)] border border-[var(--color-3)] rounded z-[1000] shadow-lg {tooltipClass}"
74
- bind:this={tooltipElement}
75
- style:left={tooltipPosition.left}
76
- style:right={tooltipPosition.right}
77
- style:top={tooltipPosition.top}
78
- >
79
- {@render content()}
80
- </div>
81
- {/if}
82
- </div>
75
+ <!-- The formatting is intentional to avoid adding extra spaces around the trigger -->
76
+ <div class="relative inline-block" bind:this={containerElement}>{@render trigger()}</div>{#if show}
77
+ <div
78
+ use:portal
79
+ role="tooltip"
80
+ class="fixed bg-[var(--light-background)] border border-[var(--border-color)] rounded-2xl z-[1000] shadow-xl backdrop-blur-md {tooltipClass}"
81
+ bind:this={tooltipElement}
82
+ style:left={tooltipPosition.left}
83
+ style:right={tooltipPosition.right}
84
+ style:top={tooltipPosition.top}
85
+ style="color: var(--text);"
86
+ onmouseenter={onTooltipMouseEnter}
87
+ onmouseleave={onTooltipMouseLeave}
88
+ >
89
+ {@render content()}
90
+ </div>
91
+ {/if}
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { resolve } from "$app/paths";
3
+ import { createPortal } from "$lib/actions/portal";
3
4
  import Breadcrumbs from "$lib/components/Breadcrumbs.svelte";
4
5
  import Notifications from "$lib/components/Notifications.svelte";
5
6
  import OriginWarning from "$lib/components/OriginWarning.svelte";
@@ -15,26 +16,44 @@
15
16
  </svelte:head>
16
17
 
17
18
  <div style="min-height: 100vh">
18
- <nav class="navbar px-6 py-4 flex items-center">
19
- <a href={resolve("/")} class="text-2xl font-medium">Mongoku</a>
20
- <Breadcrumbs />
21
- <div class="ml-auto flex items-center gap-2">
22
- <PageSwitcher class="" />
23
- <ThemeSwitcher />
19
+ <!-- App bar -->
20
+ <header class="sticky top-0 z-50 border-b border-[var(--border-color)] bg-[var(--background-color)]/80">
21
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
22
+ <div class="h-14 flex items-center gap-3">
23
+ <!-- Logo -->
24
+ <a href={resolve("/")} class="inline-flex items-center gap-2 group no-underline hover:no-underline">
25
+ <span
26
+ class="inline-flex items-center justify-center w-7 h-7 rounded-md bg-black dark:bg-white text-white dark:text-black text-sm font-semibold select-none"
27
+ >
28
+ M
29
+ </span>
30
+ <span class="text-lg font-semibold tracking-tight" style="color: var(--text);">Mongoku</span>
31
+ </a>
32
+
33
+ <div class="hidden md:block w-px h-5 bg-[var(--border-color)]"></div>
34
+
35
+ <!-- Breadcrumbs -->
36
+ <Breadcrumbs />
37
+
38
+ <div class="ml-auto flex items-center gap-2">
39
+ <!-- View tabs -->
40
+ <PageSwitcher class="" />
41
+ <ThemeSwitcher />
42
+ </div>
43
+ </div>
24
44
  </div>
25
- </nav>
45
+ </header>
26
46
 
27
47
  <OriginWarning serverOrigin={data.serverOrigin} readOnly={data.readOnly} />
28
48
 
29
- <div class="px-6 py-6 flex flex-col gap-6">
49
+ <!-- Main -->
50
+ <main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 md:py-10">
30
51
  <Notifications />
31
- {@render children()}
32
- </div>
33
- </div>
52
+ <div class="flex flex-col gap-6">
53
+ {@render children()}
54
+ </div>
55
+ </main>
34
56
 
35
- <style lang="postcss">
36
- .navbar {
37
- background-color: var(--light-background);
38
- border-bottom: var(--border);
39
- }
40
- </style>
57
+ <!-- Portal container for tooltips and other overlay content -->
58
+ <div use:createPortal></div>
59
+ </div>
@@ -171,7 +171,7 @@
171
171
  {/if}
172
172
  {/await}
173
173
  </td>
174
- <td style="width: 200px">
174
+ <td style="width: 250px">
175
175
  <div class="flex gap-2 justify-end">
176
176
  {#await server.details then details}
177
177
  {#if "error" in details && details.error}