mongoku 2.4.4 → 2.4.5-compat

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 (189) 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/{m9KJhr2i.js → BNXmwc4k.js} +1 -1
  5. package/build/client/_app/immutable/chunks/BNXmwc4k.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/BNXmwc4k.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/{Cp0n7wR5.js → BbifzGa9.js} +3 -3
  8. package/build/client/_app/immutable/chunks/BbifzGa9.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/BbifzGa9.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/CKSjYb0E.js +1 -0
  11. package/build/client/_app/immutable/chunks/CKSjYb0E.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/CKSjYb0E.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{CI_ovvBu.js → CrkT9-hk.js} +1 -1
  14. package/build/client/_app/immutable/chunks/CrkT9-hk.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/CrkT9-hk.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/DFkGPZrY.js +1 -0
  17. package/build/client/_app/immutable/chunks/DFkGPZrY.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/DFkGPZrY.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/{0x2tqDge.js → DR31i7EG.js} +1 -1
  20. package/build/client/_app/immutable/chunks/DR31i7EG.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/DR31i7EG.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/{SENhER8Y.js → DxnOjRla.js} +6 -6
  23. package/build/client/_app/immutable/chunks/DxnOjRla.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/DxnOjRla.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/{DqFgKUuF.js → XxWxrQDU.js} +1 -1
  26. package/build/client/_app/immutable/chunks/XxWxrQDU.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/XxWxrQDU.js.gz +0 -0
  28. package/build/client/_app/immutable/entry/{app.6kvAGzFx.js → app.CrFcpgot.js} +2 -2
  29. package/build/client/_app/immutable/entry/app.CrFcpgot.js.br +0 -0
  30. package/build/client/_app/immutable/entry/app.CrFcpgot.js.gz +0 -0
  31. package/build/client/_app/immutable/entry/start.B7wwhxxG.js +1 -0
  32. package/build/client/_app/immutable/entry/start.B7wwhxxG.js.br +2 -0
  33. package/build/client/_app/immutable/entry/start.B7wwhxxG.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/0.BlKp3akb.js +1 -0
  35. package/build/client/_app/immutable/nodes/0.BlKp3akb.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/0.BlKp3akb.js.gz +0 -0
  37. package/build/client/_app/immutable/nodes/{1.C6-lRSct.js → 1.Me--vTAI.js} +1 -1
  38. package/build/client/_app/immutable/nodes/1.Me--vTAI.js.br +0 -0
  39. package/build/client/_app/immutable/nodes/1.Me--vTAI.js.gz +0 -0
  40. package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js +3 -0
  41. package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.br +0 -0
  42. package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.gz +0 -0
  43. package/build/client/_app/immutable/nodes/{11.D6PMR4JE.js → 11.DPl21Acy.js} +1 -1
  44. package/build/client/_app/immutable/nodes/11.DPl21Acy.js.br +0 -0
  45. package/build/client/_app/immutable/nodes/11.DPl21Acy.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/{12.BaG9yS23.js → 12.CbirgK_f.js} +1 -1
  47. package/build/client/_app/immutable/nodes/12.CbirgK_f.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/12.CbirgK_f.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/{13.ClrBypIt.js → 13.B6A3H8ri.js} +1 -1
  50. package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{7.C2cwruWu.js → 7.Dpuf92PL.js} +1 -1
  53. package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/8.CUijRgPl.js +1 -0
  56. package/build/client/_app/immutable/nodes/8.CUijRgPl.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/8.CUijRgPl.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js +2 -0
  59. package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/9.y4RV8Aeu.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-BjnfHwPA.js} +4 -4
  65. package/build/server/chunks/{0-5-SDX-d2.js.map → 0-BjnfHwPA.js.map} +1 -1
  66. package/build/server/chunks/{1-Cck2Jrzo.js → 1-DKSoKELu.js} +2 -2
  67. package/build/server/chunks/{1-Cck2Jrzo.js.map → 1-DKSoKELu.js.map} +1 -1
  68. package/build/server/chunks/{10-BV4HPibI.js → 10-BvleE1GW.js} +58 -36
  69. package/build/server/chunks/10-BvleE1GW.js.map +1 -0
  70. package/build/server/chunks/{11-iazI-4Kb.js → 11-DFqwVyt2.js} +3 -3
  71. package/build/server/chunks/{11-iazI-4Kb.js.map → 11-DFqwVyt2.js.map} +1 -1
  72. package/build/server/chunks/{12-B0JxHwKO.js → 12-C_rstTYj.js} +3 -3
  73. package/build/server/chunks/{12-B0JxHwKO.js.map → 12-C_rstTYj.js.map} +1 -1
  74. package/build/server/chunks/{13-IcujVjLI.js → 13-DwHzV1H-.js} +3 -3
  75. package/build/server/chunks/{13-IcujVjLI.js.map → 13-DwHzV1H-.js.map} +1 -1
  76. package/build/server/chunks/{7-uVKBumqv.js → 7-vWXW_G_a.js} +3 -3
  77. package/build/server/chunks/{7-uVKBumqv.js.map → 7-vWXW_G_a.js.map} +1 -1
  78. package/build/server/chunks/{8-eWNgFGi6.js → 8-BUO0RppY.js} +3 -3
  79. package/build/server/chunks/{8-eWNgFGi6.js.map → 8-BUO0RppY.js.map} +1 -1
  80. package/build/server/chunks/{9-C8GLDx_s.js → 9-BsD6WORF.js} +3 -3
  81. package/build/server/chunks/{9-C8GLDx_s.js.map → 9-BsD6WORF.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.br +0 -0
  143. package/build/client/_app/immutable/chunks/Cp0n7wR5.js.gz +0 -0
  144. package/build/client/_app/immutable/chunks/DqFgKUuF.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/DqFgKUuF.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/MW_nrxc3.js +0 -1
  147. package/build/client/_app/immutable/chunks/MW_nrxc3.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/MW_nrxc3.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/SENhER8Y.js.br +0 -0
  150. package/build/client/_app/immutable/chunks/SENhER8Y.js.gz +0 -0
  151. package/build/client/_app/immutable/chunks/m9KJhr2i.js.br +0 -0
  152. package/build/client/_app/immutable/chunks/m9KJhr2i.js.gz +0 -0
  153. package/build/client/_app/immutable/chunks/vsNApJWQ.js +0 -1
  154. package/build/client/_app/immutable/chunks/vsNApJWQ.js.br +0 -0
  155. package/build/client/_app/immutable/chunks/vsNApJWQ.js.gz +0 -0
  156. package/build/client/_app/immutable/entry/app.6kvAGzFx.js.br +0 -0
  157. package/build/client/_app/immutable/entry/app.6kvAGzFx.js.gz +0 -0
  158. package/build/client/_app/immutable/entry/start.CNBjelhv.js +0 -1
  159. package/build/client/_app/immutable/entry/start.CNBjelhv.js.br +0 -2
  160. package/build/client/_app/immutable/entry/start.CNBjelhv.js.gz +0 -0
  161. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js +0 -1
  162. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.br +0 -0
  163. package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.gz +0 -0
  164. package/build/client/_app/immutable/nodes/1.C6-lRSct.js.br +0 -0
  165. package/build/client/_app/immutable/nodes/1.C6-lRSct.js.gz +0 -0
  166. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js +0 -1
  167. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.br +0 -0
  168. package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.gz +0 -0
  169. package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.br +0 -0
  170. package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.gz +0 -0
  171. package/build/client/_app/immutable/nodes/12.BaG9yS23.js.br +0 -0
  172. package/build/client/_app/immutable/nodes/12.BaG9yS23.js.gz +0 -0
  173. package/build/client/_app/immutable/nodes/13.ClrBypIt.js.br +0 -0
  174. package/build/client/_app/immutable/nodes/13.ClrBypIt.js.gz +0 -0
  175. package/build/client/_app/immutable/nodes/7.C2cwruWu.js.br +0 -0
  176. package/build/client/_app/immutable/nodes/7.C2cwruWu.js.gz +0 -0
  177. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js +0 -1
  178. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.br +0 -0
  179. package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.gz +0 -0
  180. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js +0 -2
  181. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.br +0 -0
  182. package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.gz +0 -0
  183. package/build/server/chunks/10-BV4HPibI.js.map +0 -1
  184. package/build/server/chunks/TooltipTable-DUYKVtrh.js +0 -60
  185. package/build/server/chunks/TooltipTable-DUYKVtrh.js.map +0 -1
  186. package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +0 -1
  187. package/build/server/chunks/_page.svelte-DJFPwyij.js.map +0 -1
  188. package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +0 -1
  189. package/build/server/chunks/servers.remote-HDmNH7n4.js.map +0 -1
@@ -1,6 +1,8 @@
1
1
  <script lang="ts">
2
2
  import {
3
+ countDocuments,
3
4
  deleteDocument as deleteDocumentCommand,
5
+ deleteMany as deleteManyCommand,
4
6
  insertDocument as insertDocumentCommand,
5
7
  loadDocuments,
6
8
  updateDocument as updateDocumentCommand,
@@ -12,6 +14,9 @@
12
14
  import Panel from "$lib/components/Panel.svelte";
13
15
  import PrettyJson from "$lib/components/PrettyJson.svelte";
14
16
  import SearchBox from "$lib/components/SearchBox.svelte";
17
+ import IconCopy from "$lib/icons/IconCopy.svelte";
18
+ import IconPlus from "$lib/icons/IconPlus.svelte";
19
+ import IconSortReverse from "$lib/icons/IconSortReverse.svelte";
15
20
  import { notificationStore } from "$lib/stores/notifications.svelte";
16
21
  import type { MongoDocument, SearchParams } from "$lib/types";
17
22
  import { formatNumber } from "$lib/utils/filters";
@@ -21,7 +26,6 @@
21
26
 
22
27
  let { data }: { data: PageData } = $props();
23
28
 
24
- /* eslint-disable-next-line svelte/prefer-writable-derived */
25
29
  let params = $state<SearchParams>({ ...data.params });
26
30
  let dataPromise = $derived(data.results);
27
31
  let editMode = $state(false);
@@ -29,11 +33,22 @@
29
33
  let isUpdating = $state(false);
30
34
  let showInsertEditor = $state(false);
31
35
 
36
+ let deleteState = $state({
37
+ countChecked: false,
38
+ count: null as number | null,
39
+ countError: null as string | null,
40
+ confirmText: "",
41
+ isCounting: false,
42
+ countQuery: null as string | null,
43
+ });
44
+
32
45
  let finalCount = $state<number | null>(null);
33
46
  let countCount = 0;
34
47
 
35
48
  $effect(() => {
36
49
  params = { ...data.params };
50
+ // Reset delete confirmation when params change
51
+ resetDeleteConfirmation();
37
52
  });
38
53
 
39
54
  $effect(() => {
@@ -112,8 +127,10 @@
112
127
  }
113
128
 
114
129
  async function removeDocument(_id: { $value?: string } | undefined, items: MongoDocument[]) {
115
- const documentId = _id?.$value;
116
- if (!documentId) return;
130
+ const documentId = _id?.$value ?? _id;
131
+ if (!documentId || typeof documentId !== "string") {
132
+ return;
133
+ }
117
134
 
118
135
  try {
119
136
  await deleteDocumentCommand({
@@ -124,7 +141,7 @@
124
141
  });
125
142
 
126
143
  notificationStore.notifySuccess("Document removed successfully");
127
- modifiedItems = items.filter((item) => item._id?.$value !== documentId);
144
+ modifiedItems = items.filter((item) => (item._id?.$value ?? item._id) !== documentId);
128
145
  } catch (error) {
129
146
  notificationStore.notifyError(error, "Failed to remove document");
130
147
  }
@@ -159,6 +176,8 @@
159
176
  project: params.project,
160
177
  skip: params.skip,
161
178
  limit: params.limit,
179
+ mode: params.mode,
180
+ field: params.field,
162
181
  });
163
182
  }
164
183
 
@@ -177,6 +196,8 @@
177
196
  project: params.project,
178
197
  skip: params.skip,
179
198
  limit: params.limit,
199
+ mode: params.mode,
200
+ field: params.field,
180
201
  });
181
202
  }
182
203
 
@@ -205,6 +226,74 @@
205
226
  }
206
227
  }
207
228
 
229
+ async function checkDeleteCount() {
230
+ deleteState.isCounting = true;
231
+ deleteState.countError = null;
232
+ const currentQuery = params.query || "{}";
233
+
234
+ try {
235
+ const result = await countDocuments({
236
+ server: data.server,
237
+ database: data.database,
238
+ collection: data.collection,
239
+ filter: currentQuery,
240
+ });
241
+
242
+ deleteState.count = result.data;
243
+ deleteState.countError = result.error;
244
+ deleteState.countChecked = true;
245
+ deleteState.countQuery = currentQuery;
246
+ } catch (error) {
247
+ notificationStore.notifyError(error, "Failed to count documents");
248
+ deleteState.countError = error instanceof Error ? error.message : String(error);
249
+ } finally {
250
+ deleteState.isCounting = false;
251
+ }
252
+ }
253
+
254
+ function resetDeleteConfirmation() {
255
+ deleteState.countChecked = false;
256
+ deleteState.count = null;
257
+ deleteState.countError = null;
258
+ deleteState.confirmText = "";
259
+ deleteState.countQuery = null;
260
+ }
261
+
262
+ // Check if current query matches the query used for counting
263
+ let isQueryChanged = $derived(deleteState.countChecked && deleteState.countQuery !== (params.query || "{}"));
264
+
265
+ // Reset confirmation text when query changes
266
+ $effect(() => {
267
+ if (isQueryChanged) {
268
+ deleteState.confirmText = "";
269
+ }
270
+ });
271
+
272
+ async function executeDeleteMany() {
273
+ isUpdating = true;
274
+ try {
275
+ const result = await deleteManyCommand({
276
+ server: data.server,
277
+ database: data.database,
278
+ collection: data.collection,
279
+ filter: params.query || "{}",
280
+ });
281
+
282
+ if (result.ok) {
283
+ notificationStore.notifySuccess(`Deleted ${result.deletedCount} document(s)`);
284
+ // Reset the modified items to force a refresh
285
+ modifiedItems = null;
286
+ editMode = false;
287
+ resetDeleteConfirmation();
288
+ }
289
+ } catch (error) {
290
+ console.error(error);
291
+ notificationStore.notifyError(error, "Failed to delete documents");
292
+ } finally {
293
+ isUpdating = false;
294
+ }
295
+ }
296
+
208
297
  let insertJson = $state("{}");
209
298
 
210
299
  async function executeInsert() {
@@ -302,8 +391,23 @@
302
391
  project: params.project,
303
392
  skip: 0,
304
393
  limit: params.limit,
394
+ mode: params.mode,
395
+ field: params.field,
305
396
  });
306
397
  }
398
+
399
+ async function copyDistinctValues(items: MongoDocument[]) {
400
+ try {
401
+ // Extract the values from the {value: ...} wrapper
402
+ const values = items.map((item) => item.value);
403
+ const jsonString = serializeForEditing(values);
404
+ await navigator.clipboard.writeText(jsonString);
405
+ notificationStore.notifySuccess("Copied distinct values to clipboard");
406
+ } catch (error) {
407
+ console.error(error);
408
+ notificationStore.notifyError(error, "Failed to copy to clipboard");
409
+ }
410
+ }
307
411
  </script>
308
412
 
309
413
  {#snippet previousButton(url: string, onClick: (e: MouseEvent) => void)}
@@ -337,21 +441,18 @@
337
441
  style="color: var(--text); cursor: pointer;"
338
442
  title="Reverse sort order"
339
443
  >
340
- <svg
341
- xmlns="http://www.w3.org/2000/svg"
342
- viewBox="0 0 24 24"
343
- fill="none"
344
- stroke="currentColor"
345
- stroke-width="2"
346
- stroke-linecap="round"
347
- stroke-linejoin="round"
348
- class="w-4 h-4"
349
- >
350
- <path d="M3 6h18" />
351
- <path d="M7 12h10" />
352
- <path d="M10 18h4" />
353
- <path d="m7 16 3 3 3-3" />
354
- </svg>
444
+ <IconSortReverse class="w-4 h-4" />
445
+ </button>
446
+ {/snippet}
447
+
448
+ {#snippet copyButton(items: MongoDocument[])}
449
+ <button
450
+ onclick={() => copyDistinctValues(items)}
451
+ class="px-3 py-1 rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] hover:bg-[var(--color-3)] text-[13px] transition"
452
+ style="color: var(--text); cursor: pointer;"
453
+ title="Copy distinct values"
454
+ >
455
+ <IconCopy class="w-4 h-4" />
355
456
  </button>
356
457
  {/snippet}
357
458
 
@@ -365,18 +466,7 @@
365
466
  <h3 class="text-lg font-semibold mb-3" style="color: var(--text);">Insert New Document</h3>
366
467
  {#if !showInsertEditor}
367
468
  <button class="btn btn-success" onclick={handleInsertClick}>
368
- <svg
369
- xmlns="http://www.w3.org/2000/svg"
370
- viewBox="0 0 24 24"
371
- fill="none"
372
- stroke="currentColor"
373
- stroke-width="2"
374
- stroke-linecap="round"
375
- stroke-linejoin="round"
376
- class="w-4 h-4 inline mr-2"
377
- >
378
- <path d="M12 5v14M5 12h14" />
379
- </svg>
469
+ <IconPlus class="w-4 h-4 inline mr-2" />
380
470
  Insert Document
381
471
  </button>
382
472
  {:else}
@@ -452,6 +542,107 @@
452
542
  </div>
453
543
  </div>
454
544
 
545
+ <!-- Delete Multiple Documents Section -->
546
+ <div class="rounded-xl bg-[var(--color-3)]/30 p-4 border border-[var(--border-color)]">
547
+ <h3 class="text-lg font-semibold mb-3" style="color: var(--text);">Delete Multiple Documents</h3>
548
+ <div class="space-y-4">
549
+ <div>
550
+ <label for="delete-filter" class="block text-sm font-semibold mb-2" style="color: var(--text);">
551
+ Filter (which documents to delete):
552
+ </label>
553
+ <input
554
+ type="text"
555
+ id="delete-filter"
556
+ value={params.query || "{}"}
557
+ readonly
558
+ class="w-full p-3 rounded-xl border border-[var(--border-color)] bg-[var(--color-3)] font-mono text-sm opacity-75 cursor-not-allowed"
559
+ style="color: var(--text);"
560
+ />
561
+ <p class="text-xs mt-2" style="color: var(--text-secondary);">
562
+ This filter is taken from the query above. Modify the query to change which documents will be deleted.
563
+ </p>
564
+ </div>
565
+
566
+ {#if !deleteState.countChecked}
567
+ <div class="flex gap-3">
568
+ <button class="btn btn-default" disabled={deleteState.isCounting} onclick={checkDeleteCount}>
569
+ {deleteState.isCounting ? "Counting..." : "Check Document Count"}
570
+ </button>
571
+ </div>
572
+ {:else if isQueryChanged}
573
+ <div
574
+ class="text-sm rounded-xl bg-yellow-500/10 p-4 border border-yellow-500/30"
575
+ style="color: var(--text-secondary);"
576
+ >
577
+ <p class="font-semibold text-yellow-600 mb-2">⚠️ Query Changed</p>
578
+ <p style="color: var(--text);">
579
+ The filter has changed since you last checked the count. Please check the document count again before
580
+ proceeding.
581
+ </p>
582
+ </div>
583
+
584
+ <div class="flex gap-3">
585
+ <button class="btn btn-default" disabled={deleteState.isCounting} onclick={checkDeleteCount}>
586
+ {deleteState.isCounting ? "Counting..." : "Check Count Again"}
587
+ </button>
588
+ <button class="btn btn-default" disabled={deleteState.isCounting} onclick={resetDeleteConfirmation}>
589
+ Cancel
590
+ </button>
591
+ </div>
592
+ {:else}
593
+ <div
594
+ class="text-sm rounded-xl bg-red-500/10 p-4 border border-red-500/30"
595
+ style="color: var(--text-secondary);"
596
+ >
597
+ <p class="font-semibold text-red-600 mb-2">⚠️ Warning</p>
598
+ {#if deleteState.countError}
599
+ <p class="mb-2" style="color: var(--text);">
600
+ Unable to count documents: {deleteState.countError}
601
+ </p>
602
+ <p>
603
+ You can still proceed with deletion, but please be cautious. This operation will permanently delete
604
+ all documents matching the filter. This action cannot be undone.
605
+ </p>
606
+ {:else}
607
+ <p class="mb-2" style="color: var(--text);">
608
+ This will delete <strong class="text-red-600">{deleteState.count}</strong>
609
+ document{deleteState.count === 1 ? "" : "s"}.
610
+ </p>
611
+ <p>This operation is permanent and cannot be undone.</p>
612
+ {/if}
613
+ </div>
614
+
615
+ <div>
616
+ <label for="delete-confirm" class="block text-sm font-semibold mb-2" style="color: var(--text);">
617
+ Type <code
618
+ class="bg-[var(--light-background)] px-2 py-1 rounded border border-[var(--border-color)] font-mono text-xs"
619
+ >confirm</code
620
+ > to proceed:
621
+ </label>
622
+ <input
623
+ type="text"
624
+ id="delete-confirm"
625
+ bind:value={deleteState.confirmText}
626
+ placeholder="Type 'confirm' to enable deletion"
627
+ class="w-full p-3 rounded-xl border border-[var(--border-color)] bg-[var(--color-3)] font-mono text-sm focus:outline-none focus:ring-2"
628
+ style="color: var(--text); --tw-ring-color: var(--link);"
629
+ />
630
+ </div>
631
+
632
+ <div class="flex gap-3">
633
+ <button
634
+ class="btn btn-danger hover:bg-red-700"
635
+ disabled={isUpdating || deleteState.confirmText !== "confirm"}
636
+ onclick={executeDeleteMany}
637
+ >
638
+ {isUpdating ? "Deleting..." : "Execute Delete"}
639
+ </button>
640
+ <button class="btn btn-default" disabled={isUpdating} onclick={resetDeleteConfirmation}> Cancel </button>
641
+ </div>
642
+ {/if}
643
+ </div>
644
+ </div>
645
+
455
646
  <!-- Close Edit Mode -->
456
647
  <div class="flex justify-end">
457
648
  <button
@@ -459,6 +650,7 @@
459
650
  onclick={() => {
460
651
  editMode = false;
461
652
  showInsertEditor = false;
653
+ resetDeleteConfirmation();
462
654
  }}
463
655
  >
464
656
  Close Edit Mode
@@ -497,8 +689,12 @@
497
689
  {#await items}
498
690
  <Panel
499
691
  title={finalCount !== null
500
- ? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + data.params.limit)} of ${formatNumber(finalCount)} documents...`
501
- : "Loading documents..."}
692
+ ? data.params.mode === "distinct"
693
+ ? `${formatNumber(finalCount)} distinct value${finalCount === 1 ? "" : "s"}...`
694
+ : `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + data.params.limit)} of ${formatNumber(finalCount)} documents...`
695
+ : data.params.mode === "distinct"
696
+ ? "Loading distinct values..."
697
+ : "Loading documents..."}
502
698
  titleClass="py-1"
503
699
  >
504
700
  {#snippet actions()}
@@ -509,7 +705,6 @@
509
705
  {#if data.params.skip + data.params.limit < finalCount}
510
706
  {@render nextButton(nextUrl, navigateNext)}
511
707
  {/if}
512
- {@render sortButton()}
513
708
  {/if}
514
709
  {/snippet}
515
710
  </Panel>
@@ -520,8 +715,12 @@
520
715
  <Panel
521
716
  titleClass="py-1"
522
717
  title={items.length > 0
523
- ? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} Documents (counting...)`
524
- : "No documents"}
718
+ ? data.params.mode === "distinct"
719
+ ? `${formatNumber(items.length)} distinct value${items.length === 1 ? "" : "s"} (counting...)`
720
+ : `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} Documents (counting...)`
721
+ : data.params.mode === "distinct"
722
+ ? "No distinct values"
723
+ : "No documents"}
525
724
  >
526
725
  {#snippet actions()}
527
726
  {#if data.params.skip > 0}
@@ -530,7 +729,11 @@
530
729
  {#if items.length >= data.params.limit}
531
730
  {@render nextButton(nextUrl, navigateNext)}
532
731
  {/if}
533
- {@render sortButton()}
732
+ {#if data.params.mode === "distinct"}
733
+ {@render copyButton(items)}
734
+ {:else}
735
+ {@render sortButton()}
736
+ {/if}
534
737
  {/snippet}
535
738
  </Panel>
536
739
  {:then countData}
@@ -542,10 +745,14 @@
542
745
  {@const isTimeout = countData.error?.includes("operation exceeded time limit")}
543
746
  <Panel
544
747
  title={items.length > 0
545
- ? count > 0
546
- ? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} of ${formatNumber(count)} documents`
547
- : `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} documents (count ${isTimeout ? "timeout" : "unavailable"})`
548
- : "No documents"}
748
+ ? data.params.mode === "distinct"
749
+ ? `${formatNumber(count)} distinct value${count === 1 ? "" : "s"}`
750
+ : count > 0
751
+ ? `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} of ${formatNumber(count)} documents`
752
+ : `${formatNumber(data.params.skip + 1)} - ${formatNumber(data.params.skip + items.length)} documents (count ${isTimeout ? "timeout" : "unavailable"})`
753
+ : data.params.mode === "distinct"
754
+ ? "No distinct values"
755
+ : "No documents"}
549
756
  titleClass="py-1"
550
757
  >
551
758
  {#snippet actions()}
@@ -555,7 +762,11 @@
555
762
  {#if hasNext}
556
763
  {@render nextButton(nextUrl, navigateNext)}
557
764
  {/if}
558
- {@render sortButton()}
765
+ {#if data.params.mode === "distinct"}
766
+ {@render copyButton(items)}
767
+ {:else}
768
+ {@render sortButton()}
769
+ {/if}
559
770
  {/snippet}
560
771
  </Panel>
561
772
  {/if}
@@ -565,8 +776,12 @@
565
776
  <PrettyJson
566
777
  json={item}
567
778
  autoCollapse={true}
568
- onedit={data.isAggregation || data.readOnly ? undefined : (json) => editDocument(item._id, json, items)}
569
- onremove={data.isAggregation || data.readOnly ? undefined : () => removeDocument(item._id, items)}
779
+ onedit={data.params.mode === "aggregation" || data.params.mode === "distinct" || data.readOnly
780
+ ? undefined
781
+ : (json) => editDocument(item._id, json, items)}
782
+ onremove={data.params.mode === "aggregation" || data.params.mode === "distinct" || data.readOnly
783
+ ? undefined
784
+ : () => removeDocument(item._id, items)}
570
785
  server={data.server}
571
786
  database={data.database}
572
787
  collection={data.collection}
@@ -1 +0,0 @@
1
- .notifications.svelte-2qov3s{position:fixed;top:90px;right:20px;z-index:1001;display:flex;flex-direction:column;gap:12px}.notification.svelte-2qov3s{padding:14px 18px;border-radius:1rem;box-shadow:0 4px 12px #00000026;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);display:flex;align-items:center;gap:12px;min-width:320px;max-width:480px;animation:svelte-2qov3s-slideIn .4s cubic-bezier(.16,1,.3,1);border:1px solid rgba(255,255,255,.1);font-size:14px}.notification.svelte-2qov3s button:where(.svelte-2qov3s){background:#fff3;border:none;border-radius:8px;cursor:pointer;opacity:.8;margin-left:auto;padding:4px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;transition:all .2s}.notification.svelte-2qov3s button:where(.svelte-2qov3s):hover{opacity:1;background:#ffffff4d}.notification-error.svelte-2qov3s{background-color:#ff453a;color:#fff}.notification-success.svelte-2qov3s{background-color:#32d74b;color:#fff}.notification-info.svelte-2qov3s{background-color:#0a84ff;color:#fff}@keyframes svelte-2qov3s-slideIn{0%{transform:translate(450px);opacity:0}to{transform:translate(0);opacity:1}}.warning-banner.svelte-1358fs2{background-color:#f59e0b;color:#111827;padding:12px 24px;border-bottom:1px solid #d97706}.warning-content.svelte-1358fs2{display:flex;align-items:center;gap:12px;max-width:1400px;margin:0 auto}.warning-content.svelte-1358fs2 svg:where(.svelte-1358fs2){flex-shrink:0}.warning-content.svelte-1358fs2 span:where(.svelte-1358fs2){flex:1;font-size:14px;line-height:1.5}.warning-content.svelte-1358fs2 code:where(.svelte-1358fs2){background-color:#0000001a;padding:2px 6px;border-radius:3px;font-family:monospace;font-size:13px}.dismiss-button.svelte-1358fs2{background:none;border:none;font-size:24px;cursor:pointer;opacity:.7;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#111827}.dismiss-button.svelte-1358fs2:hover{opacity:1}.theme-content.svelte-u8uo5a{display:none}html[data-theme-mode=light] .theme-light.svelte-u8uo5a,html[data-theme-mode=dark] .theme-dark.svelte-u8uo5a{display:inline-flex;opacity:1}html[data-theme-mode=system][data-theme=light] .theme-system-light.svelte-u8uo5a,html[data-theme-mode=system][data-theme=dark] .theme-system-dark.svelte-u8uo5a{display:inline-flex;opacity:.6}.theme-text-system.svelte-u8uo5a{display:none}html[data-theme-mode=system] .theme-text-system.svelte-u8uo5a{display:inline}html[data-theme-mode=light] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):first-child,html[data-theme-mode=dark] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):first-child{opacity:1}html[data-theme-mode=system] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):first-child{opacity:.6}html[data-theme-mode=system] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):last-child{opacity:1}html[data-theme-mode=light] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):last-child,html[data-theme-mode=dark] .theme-switcher.svelte-u8uo5a button:where(.svelte-u8uo5a):last-child{opacity:.6}/*! tailwindcss v4.1.15 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-blue-500:oklch(62.3% .214 259.815);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{height:100%}body{background-color:var(--background-color);color:var(--text);tab-size:2;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Inter,system-ui,sans-serif}a:hover{text-decoration:underline}input[type=text],input[type=number],textarea{border-radius:var(--radius-2xl);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background-color:var(--color-3);color:var(--text);border:1px solid var(--color-4);transition:border-color .2s,background-color .2s}input[type=text]:focus,input[type=number]:focus,textarea:focus{border-color:var(--link);background-color:var(--light-background);outline:none}input::placeholder,textarea::placeholder{color:var(--text-secondary);opacity:1}::selection{color:var(--text);background-color:#007aff33}}@layer components{.btn{cursor:pointer;border-radius:var(--radius-xl);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;border-width:1px;font-size:14px;transition-duration:.2s}.btn-sm{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.btn-default{background-color:var(--light-background);color:var(--text);border-color:var(--color-4)}.btn-default:hover:not(:disabled){background-color:var(--color-1-5);filter:brightness(.98)}.btn-danger{background-color:var(--button-danger);color:#fff;border-color:#0000}.btn-danger:hover:not(:disabled){filter:brightness(1.1)}.btn-success{background-color:var(--button-success);color:#fff;border-color:#0000}.btn-success:hover:not(:disabled){filter:brightness(1.05)}.btn-primary{background-color:var(--link);color:#fff;border-color:#0000}.btn-primary:hover:not(:disabled){filter:brightness(1.1)}.btn-outline-danger{color:var(--button-danger);background:0 0;border-color:#ff3b304d}.btn-outline-danger:hover:not(:disabled){background-color:#ff3b301a}.btn-outline-success{color:var(--button-success);background:0 0;border-color:#34c7594d}.btn-outline-success:hover:not(:disabled){background-color:#34c7591a}.btn-outline-light{color:var(--text);border-color:var(--color-4);background:0 0}.btn-outline-light:hover:not(:disabled){background-color:var(--color-3)}.btn-outline-primary{color:var(--link);border-color:var(--link);background:0 0}.btn-outline-primary:hover:not(:disabled){background-color:var(--link);color:#fff}.btn:disabled{opacity:.5;cursor:not-allowed}.table{border-collapse:collapse;width:100%}.table thead tr{background-color:var(--color-3)}.table th,.table td{text-align:left;border-bottom:1px solid var(--border-color);padding:12px}.table th{color:var(--text);font-weight:600}.table tbody tr:hover{background-color:var(--color-1-5)}.badge{border:1px solid var(--color-4);background-color:var(--light-background);border-radius:8px;padding:4px 10px;font-size:12px;display:inline-block}.badge-danger{background-color:var(--button-danger);color:#fff;border-color:#0000}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;background-color:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background-color:var(--light-background);border:1px solid var(--color-4);border-radius:1.25rem;width:90%;max-width:500px;box-shadow:0 10px 40px #00000026}.modal-body{padding:24px}.modal-footer{border-top:1px solid var(--color-4);justify-content:flex-end;gap:10px;padding:16px 24px;display:flex}.loading{text-align:center;color:var(--text-darker);padding:40px}}@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-3{top:calc(var(--spacing)*3)}.right-3{right:calc(var(--spacing)*3)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1000\]{z-index:1000}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.-my-2{margin-block:calc(var(--spacing)*-2)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-7{height:calc(var(--spacing)*7)}.h-9{height:calc(var(--spacing)*9)}.h-14{height:calc(var(--spacing)*14)}.h-full{height:100%}.max-h-\[80vh\]{max-height:80vh}.max-h-\[400px\]{max-height:400px}.w-4{width:calc(var(--spacing)*4)}.w-7{width:calc(var(--spacing)*7)}.w-full{width:100%}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[96rem\]{max-width:96rem}.max-w-\[600px\]{max-width:600px}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.\!rounded-none{border-radius:0!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-\[var\(--border-color\)\]{border-color:var(--border-color)}.border-\[var\(--color-3\)\]{border-color:var(--color-3)}.border-red-200{border-color:var(--color-red-200)}.bg-\[var\(--background-color\)\]\/80{background-color:var(--background-color)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--background-color\)\]\/80{background-color:color-mix(in oklab,var(--background-color)80%,transparent)}}.bg-\[var\(--border-color\)\]{background-color:var(--border-color)}.bg-\[var\(--button-success\)\]{background-color:var(--button-success)}.bg-\[var\(--color-1\)\]{background-color:var(--color-1)}.bg-\[var\(--color-2\)\]{background-color:var(--color-2)}.bg-\[var\(--color-3\)\],.bg-\[var\(--color-3\)\]\/30{background-color:var(--color-3)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-3\)\]\/30{background-color:color-mix(in oklab,var(--color-3)30%,transparent)}}.bg-\[var\(--color-3\)\]\/50{background-color:var(--color-3)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-3\)\]\/50{background-color:color-mix(in oklab,var(--color-3)50%,transparent)}}.bg-\[var\(--color-4\)\]{background-color:var(--color-4)}.bg-\[var\(--light-background\)\],.bg-\[var\(--light-background\)\]\/70{background-color:var(--light-background)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--light-background\)\]\/70{background-color:color-mix(in oklab,var(--light-background)70%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-transparent{background-color:#0000}.p-0{padding:calc(var(--spacing)*0)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-2{padding-top:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--danger\,\#f44336\)\]{color:var(--danger,#f44336)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-blue-500{color:var(--color-blue-500)}.text-white{color:var(--color-white)}.no-underline{text-decoration-line:none}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-\[inset_0_-1px_0_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:inset 0 -1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:inline:is(:where(.group):hover *){display:inline}.hover\:bg-\[rgba\(255\,59\,48\,0\.1\)\]:hover{background-color:#ff3b301a}.hover\:bg-\[var\(--button-success-l\)\]:hover{background-color:var(--button-success-l)}.hover\:bg-\[var\(--color-3\)\]:hover{background-color:var(--color-3)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:brightness-95:active{--tw-brightness:brightness(95%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-6{padding:calc(var(--spacing)*6)}.sm\:px-4{padding-inline:calc(var(--spacing)*4)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-\[14px\]{font-size:14px}}@media(min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:py-10{padding-block:calc(var(--spacing)*10)}}@media(min-width:64rem){.lg\:px-8{padding-inline:calc(var(--spacing)*8)}}@media(prefers-color-scheme:dark){.dark\:bg-white{background-color:var(--color-white)}.dark\:text-black{color:var(--color-black)}}.dotted{border-bottom:1px dotted var(--text);cursor:help}.error{color:var(--error)}}:root[data-theme=light]{--color-1:#f5f5f7;--color-1-5:#fff;--light-background:#fff;--color-3:#f0f0f2;--color-4:#e5e5e7;--background-color:var(--color-1);--border-color:var(--color-4);--text:#1d1d1f;--text-inverse:#fff;--text-darker:#6e6e73;--text-lighter:#000;--text-secondary:#86868b;--link:#007aff;--error:#ff3b30;--button-danger:#ff3b30;--button-danger-l:#ff6961;--button-success:#34c759;--button-success-l:#5dd879;--button-light:#1d1d1f;--button-light-hover:#000;--code-namespace:#0070c1;--code-boolean:#007aff;--code-null:#007aff;--code-numbers:#098658;--code-string:#d73a49;--code-links:#0451a5;--code-summary:#22863a;--code-regexp:#d16969;--code-function:#6f42c1;--border:1px solid var(--color-4)}:root[data-theme=dark]{--color-1:#1c1c1e;--color-1-5:#2c2c2e;--light-background:#2c2c2e;--color-3:#3a3a3c;--color-4:#48484a;--background-color:var(--color-1);--border-color:var(--color-3);--text:#f5f5f7;--text-inverse:#1c1c1e;--text-darker:#98989d;--text-lighter:#fff;--text-secondary:#8e8e93;--link:#0a84ff;--error:#ff453a;--button-danger:#ff453a;--button-danger-l:#ff6961;--button-success:#32d74b;--button-success-l:#5dd879;--button-light:#f5f5f7;--button-light-hover:#fff;--code-namespace:#9cdcfe;--code-boolean:#0a84ff;--code-null:#0a84ff;--code-numbers:#a5d6a7;--code-string:#ff8a65;--code-links:#4fc3f7;--code-summary:#81c784;--code-regexp:#ef9a9a;--code-function:#dcdcaa;--border:1px solid var(--color-3)}:root:not([data-theme]){--color-1:#f5f5f7;--color-1-5:#fff;--light-background:#fff;--color-3:#f0f0f2;--color-4:#e5e5e7;--background-color:var(--color-1);--border-color:var(--color-4);--text:#1d1d1f;--text-inverse:#fff;--text-darker:#6e6e73;--text-lighter:#000;--text-secondary:#86868b;--link:#007aff;--error:#ff3b30;--button-danger:#ff3b30;--button-danger-l:#ff6961;--button-success:#34c759;--button-success-l:#5dd879;--button-light:#1d1d1f;--button-light-hover:#000;--code-namespace:#0070c1;--code-boolean:#007aff;--code-null:#007aff;--code-numbers:#098658;--code-string:#d73a49;--code-links:#0451a5;--code-summary:#22863a;--code-regexp:#d16969;--code-function:#6f42c1;--border:1px solid var(--color-4)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
@@ -1 +0,0 @@
1
- import"./BPbCnJEo.js";import{h as t,i as A,f as n,d as f,g as B,l as D,r as a,b as l,s as F,t as w,j as T}from"./reNJcONQ.js";import{e as k,s as M}from"./ByCRZ7zS.js";import{i as G}from"./0oUK0vJa.js";import{e as u,i as m,a as j}from"./SENhER8Y.js";import{T as I}from"./CI_ovvBu.js";var J=n('<button class="dotted text-center"><!></button>'),K=n("<th> </th>"),N=n("<thead><tr></tr></thead>"),O=n("<td> </td>"),P=n("<tr></tr>"),Q=n('<table class="w-full border-collapse text-base font-medium"><!><tbody></tbody></table>');function $(C,i){let h=A(!1);function E(){T(h,!0)}function H(){T(h,!1)}I(C,{get show(){return t(h)},tooltipClass:"p-0 whitespace-nowrap",trigger:p=>{var r=J(),g=f(r);B(g,()=>i.children??D),a(r),k("mouseenter",r,E),k("mouseleave",r,H),l(p,r)},content:p=>{var r=Q(),g=f(r);{var L=d=>{var v=N(),o=f(v);u(o,21,()=>i.columns,m,(x,e)=>{var b=K();let _;var s=f(b,!0);a(b),w(c=>{_=j(b,1,"px-2 py-1 border-b border-[var(--color-3)] bg-[var(--color-4)] font-bold",null,_,c),M(s,t(e).header)},[()=>({"text-left":t(e).align==="left"||!t(e).align,"text-right":t(e).align==="right","text-center":t(e).align==="center"})]),l(x,b)}),a(o),a(v),l(d,v)};G(g,d=>{i.hideHeader||d(L)})}var y=F(g);u(y,21,()=>i.rows,m,(d,v)=>{var o=P();u(o,21,()=>i.columns,m,(x,e,b,_)=>{var s=O();let c;var q=f(s,!0);a(s),w(z=>{c=j(s,1,"px-2 py-1 border-b border-[var(--color-3)]",null,c,z),M(q,t(v)[t(e).key])},[()=>({"text-left":t(e).align==="left"||!t(e).align,"text-right":t(e).align==="right","text-center":t(e).align==="center"})]),l(x,s)}),a(o),l(d,o)}),a(y),a(r),l(p,r)},$$slots:{trigger:!0,content:!0}})}export{$ as T};
@@ -1 +0,0 @@
1
- import{A as Z,q as I,an as E,i as p,h as i,Z as B,u as F,j as d,p as G,f as q,g as D,t as j,b as v,c as L,s as M,d as y,l as U,r as _,e as V,a as X}from"./reNJcONQ.js";import{b as A,c as b,q as m,d as Y,r as k,e as N,H as C,g as $,R as ee,f as H,h as T,v as te}from"./Cp0n7wR5.js";import"./BPbCnJEo.js";import{s as re}from"./ByCRZ7zS.js";import{i as O}from"./0oUK0vJa.js";import{a as P}from"./SENhER8Y.js";import{p as se,b as ne}from"./BGXqurs_.js";async function ae(a){const e=await fetch(a,{headers:{"x-sveltekit-pathname":location.pathname,"x-sveltekit-search":location.search}});if(!e.ok)throw new C(500,"Failed to execute remote function");const t=await e.json();if(t.type==="redirect")throw await $(t.location),new ee(307,t.location);if(t.type==="error")throw new C(t.status??500,t.error);return N(t.result,b.decoders)}function oe(a,e){return t=>{const o=A(t,b.hooks.transport),r=Y(a,o);let s=m.get(r),c=!0;try{Z(()=>(s&&s.count++,()=>{const h=m.get(r);h&&(h.count--,I().then(()=>{!h.count&&h===m.get(r)&&(m.delete(r),delete k[r])}))}))}catch{c=!1}let n=s?.resource;return n||(n=e(r,o),Object.defineProperty(n,"_key",{value:r}),m.set(r,s={count:c?1:0,resource:n}),n.then(()=>{I().then(()=>{!s.count&&s===m.get(r)&&m.delete(r)})}).catch(()=>{m.delete(r)})),n}}function S(a){for(const e of a)"release"in e&&e.release()}function ie(a,e=[]){const t=Object.entries(N(a,b.decoders));for(const[o,r]of t){const s=e.find(n=>n._key===o);s&&"release"in s&&s.release(),m.get(o)?.resource.set(r)}}function u(a){let e=p(0);const t=o=>{let r=[];E(e);const s=(async()=>{try{await Promise.resolve();const c=await fetch(`${H}/${T}/remote/${a}`,{method:"POST",body:JSON.stringify({payload:A(o,b.hooks.transport),refreshes:r.map(h=>h._key)}),headers:{"Content-Type":"application/json","x-sveltekit-pathname":location.pathname,"x-sveltekit-search":location.search}});if(!c.ok)throw S(r),new Error("Failed to execute remote function");const n=await c.json();if(n.type==="redirect")throw S(r),new Error("Redirects are not allowed in commands. Return a result instead and use goto on the client");if(n.type==="error")throw S(r),new C(n.status??500,n.error);return n.refreshes&&ie(n.refreshes,r),N(n.result,b.decoders)}finally{E(e,-1)}})();return s.updates=(...c)=>(r=c,delete s.updates,s),s};return Object.defineProperty(t,"pending",{get:()=>i(e)}),t}const R=`sveltekit:${te}`;let ce;(async()=>{if(typeof caches<"u")try{ce=await caches.open(R);const a=await caches.keys();for(const e of a)e.startsWith("sveltekit:")&&e!==R&&await caches.delete(e)}catch(a){console.warn("Failed to initialize SvelteKit cache:",a)}})();function g(a){return oe(a,(e,t)=>new de(e,async()=>{if(Object.hasOwn(k,e))return k[e];const o=`${H}/${T}/remote/${a}${t?`?payload=${t}`:""}`;return await ae(o)}))}class de{_key;#c=!1;#d;#e=p(!0);#t=[];#n=p(!1);#i=p();#a;#r=p(B([]));#u=F(()=>{if(i(this.#n))return i(this.#r).reduce((e,t)=>t(e),i(this.#i))});#o=p(void 0);#s=F(()=>{const e=i(this.#a);return i(this.#r).length,async(t,o)=>{try{await e,await I(),t?.(i(this.#u))}catch(r){o?.(r)}}});constructor(e,t){this._key=e,this.#d=t,this.#a=p(this.#h())}#h(){this.#c?d(this.#e,!0):this.#c=!0;let e,t;const o=new Promise((r,s)=>{e=r,t=s});return this.#t.push(e),Promise.resolve(this.#d()).then(r=>{const s=this.#t.indexOf(e);s!==-1&&(this.#t.splice(0,s).forEach(c=>c()),d(this.#n,!0),d(this.#e,!1),d(this.#i,r),d(this.#o,void 0),e())}).catch(r=>{const s=this.#t.indexOf(e);s!==-1&&(this.#t.splice(0,s).forEach(c=>c()),d(this.#o,r),d(this.#e,!1),t(r))}),o}get then(){return i(this.#s)}get catch(){return i(this.#s),e=>i(this.#s)(void 0,e)}get finally(){return i(this.#s),e=>i(this.#s)(()=>e(),()=>e())}get current(){return i(this.#u)}get error(){return i(this.#o)}get loading(){return i(this.#e)}get ready(){return i(this.#n)}refresh(){return delete k[this._key],d(this.#a,this.#h())}set(e){d(this.#n,!0),d(this.#e,!1),d(this.#o,void 0),d(this.#i,e),d(this.#a,Promise.resolve())}withOverride(e){return i(this.#r).push(e),{_key:this._key,release:()=>{const t=i(this.#r).indexOf(e);t!==-1&&i(this.#r).splice(t,1)}}}}const ge=u("xxtqbu/addServer"),we=u("xxtqbu/createIndex"),ke=u("xxtqbu/deleteDocument"),qe=g("xxtqbu/detectPrimaryNode"),De=u("xxtqbu/dropCollection"),je=u("xxtqbu/dropDatabase"),Oe=u("xxtqbu/dropIndex"),Pe=g("xxtqbu/fetchMappedDocument"),Se=g("xxtqbu/getIndexStatsFromNodes"),Ie=g("xxtqbu/getServerNodes"),Ce=u("xxtqbu/hideIndex"),Ne=u("xxtqbu/insertDocument"),Ee=g("xxtqbu/loadDocuments"),Fe=u("xxtqbu/removeServer"),Me=u("xxtqbu/retryConnection"),Re=u("xxtqbu/unhideIndex"),Ae=u("xxtqbu/updateDocument"),He=u("xxtqbu/updateMany");var ue=q("<span> </span>"),he=q('<div class="flex gap-2 items-center"><!></div>'),le=q('<div><div style="color: var(--text);"><!></div> <!></div>'),fe=q("<div><!> <!></div>");function Te(a,e){G(e,!0);let t=se(e,"ref",15);var o=fe(),r=y(o);{var s=n=>{var h=le(),w=y(h),z=y(w);{var J=l=>{var f=ue(),x=y(f,!0);_(f),j(()=>re(x,e.title)),v(l,f)},K=l=>{var f=V(),x=X(f);D(x,()=>e.title),v(l,f)};O(z,l=>{typeof e.title=="string"?l(J):l(K,!1)})}_(w);var Q=M(w,2);{var W=l=>{var f=he(),x=y(f);D(x,()=>e.actions),_(f),v(l,f)};O(Q,l=>{e.actions&&l(W)})}_(h),j(()=>{P(h,1,`px-3 sm:px-4 py-2 flex justify-between items-center ${e.children?"border-b border-[var(--border-color)]":""}`),P(w,1,`text-sm font-medium ${e.titleClass??""}`)}),v(n,h)};O(r,n=>{e.title&&n(s)})}var c=M(r,2);D(c,()=>e.children??U),_(o),ne(o,n=>t(n),()=>t()),j(()=>P(o,1,`rounded-2xl border border-[var(--border-color)] bg-[var(--light-background)]/70 shadow-sm ${e.class??""}`)),v(a,o),L()}export{Te as P,De as a,ke as b,ge as c,je as d,Fe as e,Pe as f,He as g,Ie as h,Ne as i,qe as j,Se as k,Ee as l,Oe as m,we as n,Re as o,Ce as p,Me as r,Ae as u};
@@ -1 +0,0 @@
1
- import{n as o,m as r}from"../chunks/Cp0n7wR5.js";export{o as load_css,r as start};
@@ -1,2 +0,0 @@
1
- )�import{n as o,m as r}from"../chunks/Cp0n7wR5.js";export{o as load_css,r as start};
2
- 
@@ -1 +0,0 @@
1
- import"../chunks/BPbCnJEo.js";import{p as A,e as R,a as D,b as c,c as C,h as o,u as j,f as w,s as f,d as n,r,t as S,B as U,j as B,i as z,b7 as G,n as q,g as F,b8 as J}from"../chunks/reNJcONQ.js";import{s as L,d as N,a as X}from"../chunks/ByCRZ7zS.js";import{a as Z,c as ee}from"../chunks/BXUq66wC.js";import{e as P,r as W,s as K,i as te,n as V,a as Y}from"../chunks/SENhER8Y.js";import{i as E}from"../chunks/0oUK0vJa.js";import{p as T}from"../chunks/m9KJhr2i.js";import{i as ae}from"../chunks/DIw4Wyr4.js";var re=w('<a class="px-2 py-1 rounded-md hover:bg-[var(--color-3)] transition no-underline" style="color: var(--text);"> </a>'),se=w('<span aria-current="page" class="px-2 py-1 rounded-md font-medium" style="color: var(--text);"> </span>'),oe=w('<span style="color: var(--text-secondary);">/</span>'),ne=w("<!> <!>",1),ie=w('<nav aria-label="Breadcrumb" class="hidden md:flex items-center gap-1 text-sm"></nav>');function le(d,e){A(e,!0);const a=j(()=>(T.data.breadcrumbs??[]).reduce((t,v)=>[...t,{label:v.label,href:`${t.at(-1)?.href??""}${v.path}`}],[]));var l=R(),h=D(l);{var b=m=>{var t=ie();P(t,21,()=>o(a),te,(v,x,g)=>{var y=ne(),u=D(y);{var O=s=>{var i=re(),p=n(i,!0);r(i),S(I=>{K(i,"href",I),L(p,o(x).label)},[()=>W(o(x).href)]),c(s,i)},k=s=>{var i=se(),p=n(i,!0);r(i),S(()=>L(p,o(x).label)),c(s,i)};E(u,s=>{o(x).href&&g<o(a).length-1?s(O):s(k,!1)})}var M=f(u,2);{var _=s=>{var i=oe();c(s,i)};E(M,s=>{g<o(a).length-1&&s(_)})}c(v,y)}),r(t),c(m,t)};E(h,m=>{o(a).length>0&&m(b)})}c(d,l),C()}var ve=(d,e)=>V.remove(o(e).id),de=w('<div><span> </span> <button aria-label="Dismiss notification" class="svelte-2qov3s"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div>'),ce=w('<div class="notifications svelte-2qov3s"></div>');function me(d,e){A(e,!1),ae();var a=ce();P(a,5,()=>V.items,l=>l.id,(l,h)=>{var b=de(),m=n(b),t=n(m,!0);r(m);var v=f(m,2);v.__click=[ve,h],r(b),S(()=>{Y(b,1,`notification notification-${o(h).type??""}`,"svelte-2qov3s"),L(t,o(h).message)}),c(l,b)}),r(a),c(d,a),C()}N(["click"]);function he(d,e,a){sessionStorage.setItem(e,"true"),B(a,!1)}var ge=w('<div class="warning-banner svelte-1358fs2"><div class="warning-content svelte-1358fs2"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-1358fs2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> <span class="svelte-1358fs2"> <code class="svelte-1358fs2">MONGOKU_SERVER_ORIGIN</code> environment variable to <code class="svelte-1358fs2"> </code>. Current server origin is <code class="svelte-1358fs2"> </code></span> <button class="dismiss-button svelte-1358fs2" aria-label="Dismiss warning">&times;</button></div></div>');function ue(d,e){A(e,!0);const a="mongoku:origin-warning-dismissed";let l=z(!1);U(()=>{if(e.serverOrigin!==T.url.origin){const t=sessionStorage.getItem(a);B(l,!t)}});var h=R(),b=D(h);{var m=t=>{var v=ge(),x=n(v),g=f(n(x),2),y=n(g),u=f(y,3),O=n(u,!0);r(u);var k=f(u,2),M=n(k,!0);r(k),r(g);var _=f(g,2);_.__click=[he,a,l],r(x),r(v),S(()=>{L(y,`To enable ${e.readOnly?"server configuration":"write operations"}, set the `),L(O,T.url.origin),L(M,e.serverOrigin)}),c(t,v)};E(b,t=>{o(l)&&t(m)})}c(d,h),C()}N(["click"]);var pe=w('<span class="px-3 py-1.5 text-[13px] font-medium bg-[var(--color-1)] shadow-[inset_0_-1px_0_rgba(0,0,0,0.06)] cursor-default" style="color: var(--text);"> </span>'),fe=w('<a data-sveltekit-reload="" class="px-3 py-1.5 text-[13px] hover:bg-[var(--color-3)] transition no-underline" style="color: var(--text-secondary);"> </a>'),xe=w("<div></div>");function _e(d,e){A(e,!0);const a=j(()=>(T.data.categories??[]).map(t=>({...t,href:T.url.pathname.split("/").slice(0,-1).join("/")+"/"+t.key}))),l=j(()=>T.url.pathname.split("/").pop());var h=R(),b=D(h);{var m=t=>{var v=xe();P(v,21,()=>o(a),x=>x.key,(x,g)=>{const y=j(()=>o(l)===o(g).key);var u=R(),O=D(u);{var k=_=>{var s=pe(),i=n(s,!0);r(s),S(()=>L(i,o(g).label)),c(_,s)},M=_=>{var s=fe(),i=n(s,!0);r(s),S(p=>{K(s,"href",p),L(i,o(g).label)},[()=>W(o(g).href)]),c(_,s)};E(O,_=>{o(y)?_(k):_(M,!1)})}c(x,u)}),r(v),S(()=>Y(v,1,`hidden sm:flex rounded-lg border border-[var(--border-color)] overflow-hidden bg-[var(--light-background)] shadow-sm ${e.class??""}`)),c(t,v)};E(b,t=>{o(a).length&&t(m)})}c(d,h),C()}const H=d=>{var e=ye();c(d,e)},Q=d=>{var e=ke();c(d,e)},be=d=>{var e=Oe();c(d,e)};function we(d,e,a,l){o(e)==="system"?a(o(l)):a(o(e)==="light"?"dark":"light")}var ye=G('<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><circle cx="12" cy="12" r="4"></circle><path 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"></path></svg>'),ke=G('<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>'),Oe=G('<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg>'),Me=(d,e)=>e("system"),Se=w('<div class="theme-switcher inline-flex rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] overflow-hidden text-sm font-medium svelte-u8uo5a" style="color: var(--text);"><button class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer svelte-u8uo5a" aria-label="Toggle theme"><span class="theme-content theme-light inline-flex items-center gap-2 svelte-u8uo5a"><!> <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Light</span></span> <span class="theme-content theme-dark inline-flex items-center gap-2 svelte-u8uo5a"><!> <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Dark</span></span> <span class="theme-content theme-system-light inline-flex items-center gap-2 svelte-u8uo5a"><!></span> <span class="theme-content theme-system-dark inline-flex items-center gap-2 svelte-u8uo5a"><!></span></button> <div class="w-px bg-[var(--border-color)]"></div> <button class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer svelte-u8uo5a" aria-label="Switch to system theme"><!> <span class="theme-text-system hidden sm:inline text-[13px] svelte-u8uo5a" style="color: var(--text-secondary);">System</span></button></div>');function Le(d,e){A(e,!0);let a=z("system"),l=z("light");U(()=>{if(typeof window<"u"){const i=localStorage.getItem("theme");B(a,i||"system",!0);const p=window.matchMedia("(prefers-color-scheme: dark)");B(l,p.matches?"dark":"light",!0);const I=$=>{B(l,$.matches?"dark":"light",!0),o(a)==="system"&&h("system")};return p.addEventListener("change",I),()=>p.removeEventListener("change",I)}});function h(i){B(a,i,!0),localStorage.setItem("theme",i);const p=document.documentElement;if(i==="system"){const I=window.matchMedia("(prefers-color-scheme: dark)").matches;p.setAttribute("data-theme",I?"dark":"light"),I?p.classList.add("dark"):p.classList.remove("dark")}else p.setAttribute("data-theme",i),i==="dark"?p.classList.add("dark"):p.classList.remove("dark");p.setAttribute("data-theme-mode",i)}const b=j(()=>o(l)==="dark"?"light":"dark");var m=Se(),t=n(m);t.__click=[we,a,h,b];var v=n(t),x=n(v);H(x),q(2),r(v);var g=f(v,2),y=n(g);Q(y),q(2),r(g);var u=f(g,2),O=n(u);H(O),r(u);var k=f(u,2),M=n(k);Q(M),r(k),r(t);var _=f(t,4);_.__click=[Me,h];var s=n(_);be(s),q(2),r(_),r(m),c(d,m),C()}N(["click"]);var Ie=w('<div style="min-height: 100vh"><header class="sticky top-0 z-50 border-b border-[var(--border-color)] bg-[var(--background-color)]/80"><div class="max-w-[96rem] mx-auto px-4 sm:px-6 lg:px-8"><div class="h-14 flex items-center gap-3"><a class="inline-flex items-center gap-2 group no-underline hover:no-underline"><span 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">M</span> <span class="text-lg font-semibold tracking-tight" style="color: var(--text);">Mongoku</span></a> <div class="hidden md:block w-px h-5 bg-[var(--border-color)]"></div> <!> <div class="ml-auto flex items-center gap-2"><!> <!></div></div></div></header> <!> <main class="max-w-[96rem] mx-auto px-4 sm:px-6 lg:px-8 py-6 md:py-10"><!> <div class="flex flex-col gap-6"><!></div></main> <div></div></div>');function qe(d,e){A(e,!0);var a=Ie();X(s=>{J.title="Mongoku"});var l=n(a),h=n(l),b=n(h),m=n(b),t=f(m,4);le(t,{});var v=f(t,2),x=n(v);_e(x,{class:""});var g=f(x,2);Le(g,{}),r(v),r(b),r(h),r(l);var y=f(l,2);ue(y,{get serverOrigin(){return e.data.serverOrigin},get readOnly(){return e.data.readOnly}});var u=f(y,2),O=n(u);me(O,{});var k=f(O,2),M=n(k);F(M,()=>e.children),r(k),r(u);var _=f(u,2);Z(_,s=>ee?.(s)),r(a),S(s=>K(m,"href",s),[()=>W("/")]),c(d,a),C()}export{qe as component};