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.
- package/build/client/_app/immutable/assets/0.CEIWAdGZ.css +1 -0
- package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CEIWAdGZ.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{m9KJhr2i.js → BNXmwc4k.js} +1 -1
- package/build/client/_app/immutable/chunks/BNXmwc4k.js.br +0 -0
- package/build/client/_app/immutable/chunks/BNXmwc4k.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cp0n7wR5.js → BbifzGa9.js} +3 -3
- package/build/client/_app/immutable/chunks/BbifzGa9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BbifzGa9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js +1 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKSjYb0E.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CI_ovvBu.js → CrkT9-hk.js} +1 -1
- package/build/client/_app/immutable/chunks/CrkT9-hk.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrkT9-hk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js +1 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js.br +0 -0
- package/build/client/_app/immutable/chunks/DFkGPZrY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{0x2tqDge.js → DR31i7EG.js} +1 -1
- package/build/client/_app/immutable/chunks/DR31i7EG.js.br +0 -0
- package/build/client/_app/immutable/chunks/DR31i7EG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{SENhER8Y.js → DxnOjRla.js} +6 -6
- package/build/client/_app/immutable/chunks/DxnOjRla.js.br +0 -0
- package/build/client/_app/immutable/chunks/DxnOjRla.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DqFgKUuF.js → XxWxrQDU.js} +1 -1
- package/build/client/_app/immutable/chunks/XxWxrQDU.js.br +0 -0
- package/build/client/_app/immutable/chunks/XxWxrQDU.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.6kvAGzFx.js → app.CrFcpgot.js} +2 -2
- package/build/client/_app/immutable/entry/app.CrFcpgot.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CrFcpgot.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js +1 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js.br +2 -0
- package/build/client/_app/immutable/entry/start.B7wwhxxG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js +1 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BlKp3akb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C6-lRSct.js → 1.Me--vTAI.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Me--vTAI.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Me--vTAI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js +3 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BMXrY0Bx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.D6PMR4JE.js → 11.DPl21Acy.js} +1 -1
- package/build/client/_app/immutable/nodes/11.DPl21Acy.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DPl21Acy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{12.BaG9yS23.js → 12.CbirgK_f.js} +1 -1
- package/build/client/_app/immutable/nodes/12.CbirgK_f.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.CbirgK_f.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.ClrBypIt.js → 13.B6A3H8ri.js} +1 -1
- package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.B6A3H8ri.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.C2cwruWu.js → 7.Dpuf92PL.js} +1 -1
- package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Dpuf92PL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js +1 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CUijRgPl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js +2 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.y4RV8Aeu.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/{0-5-SDX-d2.js → 0-BjnfHwPA.js} +4 -4
- package/build/server/chunks/{0-5-SDX-d2.js.map → 0-BjnfHwPA.js.map} +1 -1
- package/build/server/chunks/{1-Cck2Jrzo.js → 1-DKSoKELu.js} +2 -2
- package/build/server/chunks/{1-Cck2Jrzo.js.map → 1-DKSoKELu.js.map} +1 -1
- package/build/server/chunks/{10-BV4HPibI.js → 10-BvleE1GW.js} +58 -36
- package/build/server/chunks/10-BvleE1GW.js.map +1 -0
- package/build/server/chunks/{11-iazI-4Kb.js → 11-DFqwVyt2.js} +3 -3
- package/build/server/chunks/{11-iazI-4Kb.js.map → 11-DFqwVyt2.js.map} +1 -1
- package/build/server/chunks/{12-B0JxHwKO.js → 12-C_rstTYj.js} +3 -3
- package/build/server/chunks/{12-B0JxHwKO.js.map → 12-C_rstTYj.js.map} +1 -1
- package/build/server/chunks/{13-IcujVjLI.js → 13-DwHzV1H-.js} +3 -3
- package/build/server/chunks/{13-IcujVjLI.js.map → 13-DwHzV1H-.js.map} +1 -1
- package/build/server/chunks/{7-uVKBumqv.js → 7-vWXW_G_a.js} +3 -3
- package/build/server/chunks/{7-uVKBumqv.js.map → 7-vWXW_G_a.js.map} +1 -1
- package/build/server/chunks/{8-eWNgFGi6.js → 8-BUO0RppY.js} +3 -3
- package/build/server/chunks/{8-eWNgFGi6.js.map → 8-BUO0RppY.js.map} +1 -1
- package/build/server/chunks/{9-C8GLDx_s.js → 9-BsD6WORF.js} +3 -3
- package/build/server/chunks/{9-C8GLDx_s.js.map → 9-BsD6WORF.js.map} +1 -1
- package/build/server/chunks/{JsonValue-DiECF6Zd.js → JsonValue-DoGRvQnG.js} +3 -3
- package/build/server/chunks/{JsonValue-DiECF6Zd.js.map → JsonValue-DoGRvQnG.js.map} +1 -1
- package/build/server/chunks/{Panel-DEP08QXV.js → Panel-BHGtM9Vw.js} +2 -2
- package/build/server/chunks/{Panel-DEP08QXV.js.map → Panel-BHGtM9Vw.js.map} +1 -1
- package/build/server/chunks/{PrettyJson-ElzPxPF4.js → PrettyJson-Bnmo1PGg.js} +5 -5
- package/build/server/chunks/{PrettyJson-ElzPxPF4.js.map → PrettyJson-Bnmo1PGg.js.map} +1 -1
- package/build/server/chunks/{Tooltip-DK6Aok7l.js → Tooltip-DAE2mkm6.js} +2 -2
- package/build/server/chunks/{Tooltip-DK6Aok7l.js.map → Tooltip-DAE2mkm6.js.map} +1 -1
- package/build/server/chunks/TooltipTable-xo_OEG9c.js +64 -0
- package/build/server/chunks/TooltipTable-xo_OEG9c.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-CCi6mq1k.js → _layout.svelte-Dji2JJ9X.js} +29 -20
- package/build/server/chunks/_layout.svelte-Dji2JJ9X.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BvjNfjgw.js → _page.svelte-C4rGFSYL.js} +7 -7
- package/build/server/chunks/{_page.svelte-BvjNfjgw.js.map → _page.svelte-C4rGFSYL.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-B4BL5PJR.js → _page.svelte-CJ5HzoD0.js} +4 -4
- package/build/server/chunks/{_page.svelte-B4BL5PJR.js.map → _page.svelte-CJ5HzoD0.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DJFPwyij.js → _page.svelte-ClvvVxpD.js} +101 -35
- package/build/server/chunks/_page.svelte-ClvvVxpD.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DDe4hyAB.js → _page.svelte-D3jyb8d9.js} +6 -6
- package/build/server/chunks/{_page.svelte-DDe4hyAB.js.map → _page.svelte-D3jyb8d9.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BUheieJ5.js → _page.svelte-D9IvgJO5.js} +6 -6
- package/build/server/chunks/{_page.svelte-BUheieJ5.js.map → _page.svelte-D9IvgJO5.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DEe2Kbbw.js → _page.svelte-be8sxgGt.js} +6 -6
- package/build/server/chunks/{_page.svelte-DEe2Kbbw.js.map → _page.svelte-be8sxgGt.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Bj297hp1.js → _page.svelte-x1L5xjgQ.js} +6 -6
- package/build/server/chunks/{_page.svelte-Bj297hp1.js.map → _page.svelte-x1L5xjgQ.js.map} +1 -1
- package/build/server/chunks/{index2-DzKnqQNM.js → index2-eSFyMQpS.js} +2 -2
- package/build/server/chunks/{index2-DzKnqQNM.js.map → index2-eSFyMQpS.js.map} +1 -1
- package/build/server/chunks/{remote-xxtqbu-DBe3CqEJ.js → remote-xxtqbu-ETLGkdRu.js} +2 -2
- package/build/server/chunks/remote-xxtqbu-ETLGkdRu.js.map +1 -0
- package/build/server/chunks/{servers.remote-HDmNH7n4.js → servers.remote-CGies_Na.js} +85 -6
- package/build/server/chunks/servers.remote-CGies_Na.js.map +1 -0
- package/build/server/index.js +2 -2
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +11 -11
- package/build/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/api/servers.remote.ts +91 -2
- package/src/app.css +5 -0
- package/src/lib/actions/clickOutside.ts +24 -0
- package/src/lib/components/Breadcrumbs.svelte +5 -19
- package/src/lib/components/SearchBox.svelte +161 -62
- package/src/lib/components/TooltipTable.svelte +4 -2
- package/src/lib/icons/IconChevronDown.svelte +20 -0
- package/src/lib/icons/IconCopy.svelte +21 -0
- package/src/lib/icons/IconEdit.svelte +21 -0
- package/src/lib/icons/IconPlus.svelte +20 -0
- package/src/lib/icons/IconSortReverse.svelte +23 -0
- package/src/lib/stores/breadcrumbs.svelte.ts +17 -0
- package/src/lib/types.ts +2 -0
- package/src/routes/+layout.svelte +12 -1
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.server.ts +67 -34
- package/src/routes/servers/[server]/databases/[database]/collections/[collection]/documents/+page.svelte +259 -44
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css +0 -1
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.br +0 -0
- package/build/client/_app/immutable/assets/0.C-Y-CVnr.css.gz +0 -0
- package/build/client/_app/immutable/chunks/0x2tqDge.js.br +0 -0
- package/build/client/_app/immutable/chunks/0x2tqDge.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CI_ovvBu.js.br +0 -0
- package/build/client/_app/immutable/chunks/CI_ovvBu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cp0n7wR5.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cp0n7wR5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DqFgKUuF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DqFgKUuF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/MW_nrxc3.js +0 -1
- package/build/client/_app/immutable/chunks/MW_nrxc3.js.br +0 -0
- package/build/client/_app/immutable/chunks/MW_nrxc3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/SENhER8Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/SENhER8Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/m9KJhr2i.js.br +0 -0
- package/build/client/_app/immutable/chunks/m9KJhr2i.js.gz +0 -0
- package/build/client/_app/immutable/chunks/vsNApJWQ.js +0 -1
- package/build/client/_app/immutable/chunks/vsNApJWQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/vsNApJWQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.6kvAGzFx.js.br +0 -0
- package/build/client/_app/immutable/entry/app.6kvAGzFx.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CNBjelhv.js +0 -1
- package/build/client/_app/immutable/entry/start.CNBjelhv.js.br +0 -2
- package/build/client/_app/immutable/entry/start.CNBjelhv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js +0 -1
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.ClgWJHZK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C6-lRSct.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.C6-lRSct.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js +0 -1
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DIGWL6eC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D6PMR4JE.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.BaG9yS23.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.BaG9yS23.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.ClrBypIt.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.ClrBypIt.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.C2cwruWu.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.C2cwruWu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js +0 -1
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CRDgVKjB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js +0 -2
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.X5vwJ8aD.js.gz +0 -0
- package/build/server/chunks/10-BV4HPibI.js.map +0 -1
- package/build/server/chunks/TooltipTable-DUYKVtrh.js +0 -60
- package/build/server/chunks/TooltipTable-DUYKVtrh.js.map +0 -1
- package/build/server/chunks/_layout.svelte-CCi6mq1k.js.map +0 -1
- package/build/server/chunks/_page.svelte-DJFPwyij.js.map +0 -1
- package/build/server/chunks/remote-xxtqbu-DBe3CqEJ.js.map +0 -1
- 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)
|
|
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
|
-
<
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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
|
-
<
|
|
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
|
-
?
|
|
501
|
-
|
|
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
|
-
?
|
|
524
|
-
|
|
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
|
-
{
|
|
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
|
-
?
|
|
546
|
-
? `${formatNumber(
|
|
547
|
-
:
|
|
548
|
-
|
|
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
|
-
{
|
|
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.
|
|
569
|
-
|
|
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}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as o,m as r}from"../chunks/Cp0n7wR5.js";export{o as load_css,r as start};
|
|
Binary file
|
|
@@ -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">×</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};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|