@pinia/colada-devtools 0.4.0 → 0.4.1
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/dist/index.js.map +1 -1
- package/dist-panel/{(unselected)-BvYXA0-7.js → (unselected)-1XtzP47s.js} +3 -3
- package/dist-panel/{(unselected)-BvYXA0-7.js.map → (unselected)-1XtzP47s.js.map} +1 -1
- package/dist-panel/{(unselected)-De_qnqOP.js → (unselected)-CF4tcOEp.js} +3 -3
- package/dist-panel/{(unselected)-De_qnqOP.js.map → (unselected)-CF4tcOEp.js.map} +1 -1
- package/dist-panel/{_mutationId_-DJZUO9uK.js → _mutationId_-DmzWbpVT.js} +5 -5
- package/dist-panel/{_mutationId_-DJZUO9uK.js.map → _mutationId_-DmzWbpVT.js.map} +1 -1
- package/dist-panel/{_queryId_-OYxjQ3wF.js → _queryId_-5tGPPWCM.js} +5 -5
- package/dist-panel/{_queryId_-OYxjQ3wF.js.map → _queryId_-5tGPPWCM.js.map} +1 -1
- package/dist-panel/{circle-x-CKUVRuJV.js → circle-x-eNhJ6QJ3.js} +2 -2
- package/dist-panel/{circle-x-CKUVRuJV.js.map → circle-x-eNhJ6QJ3.js.map} +1 -1
- package/dist-panel/{index-CbhK8baV.js → index-C5FekW9K.js} +2 -2
- package/dist-panel/{index-CbhK8baV.js.map → index-C5FekW9K.js.map} +1 -1
- package/dist-panel/{index-BDRe8hqi.js → index-D0GQZaew.js} +1403 -1396
- package/dist-panel/index-D0GQZaew.js.map +1 -0
- package/dist-panel/index.js +1 -1
- package/dist-panel/{loader-DUh7Y4gr.js → loader-DjhAUFXk.js} +2 -2
- package/dist-panel/loader-DjhAUFXk.js.map +1 -0
- package/dist-panel/{mouse-pointer-click-tLOKuf9h.js → mouse-pointer-click-BwcHzNw_.js} +2 -2
- package/dist-panel/mouse-pointer-click-BwcHzNw_.js.map +1 -0
- package/dist-panel/{mutations-DbP2-xaA.js → mutations-Fiuj8fCV.js} +4 -4
- package/dist-panel/{mutations-DbP2-xaA.js.map → mutations-Fiuj8fCV.js.map} +1 -1
- package/dist-panel/{queries-CfTVwyNe.js → queries-Czfs9c3l.js} +4 -4
- package/dist-panel/{queries-CfTVwyNe.js.map → queries-Czfs9c3l.js.map} +1 -1
- package/dist-panel/{settings--jMqFgqF.js → settings-BHmLo73t.js} +2 -2
- package/dist-panel/{settings--jMqFgqF.js.map → settings-BHmLo73t.js.map} +1 -1
- package/dist-panel/{use-container-media-query-B1rNyopG.js → use-container-media-query-DHWhgIKV.js} +2 -2
- package/dist-panel/{use-container-media-query-B1rNyopG.js.map → use-container-media-query-DHWhgIKV.js.map} +1 -1
- package/package.json +7 -7
- package/dist-panel/index-BDRe8hqi.js.map +0 -1
- package/dist-panel/loader-DUh7Y4gr.js.map +0 -1
- package/dist-panel/mouse-pointer-click-tLOKuf9h.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as o } from "./mouse-pointer-click-
|
|
2
|
-
import { _ as c, c as s, o as n, a as _, q as a, i as r } from "./index-
|
|
1
|
+
import { _ as o } from "./mouse-pointer-click-BwcHzNw_.js";
|
|
2
|
+
import { _ as c, c as s, o as n, a as _, q as a, i as r } from "./index-D0GQZaew.js";
|
|
3
3
|
const i = {}, l = { class: "py-6 mx-auto" }, p = { class: "flex flex-col text-center items-center gap-2 text-lg px-2" };
|
|
4
4
|
function d(m, e) {
|
|
5
5
|
const t = o;
|
|
@@ -14,4 +14,4 @@ const f = /* @__PURE__ */ c(i, [["render", d]]);
|
|
|
14
14
|
export {
|
|
15
15
|
f as default
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=(unselected)-
|
|
17
|
+
//# sourceMappingURL=(unselected)-1XtzP47s.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"(unselected)-
|
|
1
|
+
{"version":3,"file":"(unselected)-1XtzP47s.js","sources":["../src/panel/pages/mutations/(unselected).vue"],"sourcesContent":["<script setup lang=\"ts\"></script>\n\n<template>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Mutation to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n </div>\n</template>\n"],"names":["_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_i_lucide_mouse_pointer_click"],"mappings":";;cAGOA,IAAA,EAAA,OAAM,eAAc,GACpBC,IAAA,EAAA,OAAM,4DAA2D;;;AADtE,SAAAC,EAAA,GAAAC,EAKM,OALNH,GAKM;AAAA,IAJJI,EAGI,KAHJH,GAGI;AAAA,wBAHiE,kCAEnE,EAAA;AAAA,MAAAI,EAAgCC,CAAA;AAAA;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as o } from "./mouse-pointer-click-
|
|
2
|
-
import { _ as c, c as s, o as n, a as _, q as a, i as r } from "./index-
|
|
1
|
+
import { _ as o } from "./mouse-pointer-click-BwcHzNw_.js";
|
|
2
|
+
import { _ as c, c as s, o as n, a as _, q as a, i as r } from "./index-D0GQZaew.js";
|
|
3
3
|
const i = {}, l = { class: "py-6 mx-auto" }, p = { class: "flex flex-col text-center items-center gap-2 text-lg px-2" };
|
|
4
4
|
function d(m, e) {
|
|
5
5
|
const t = o;
|
|
@@ -14,4 +14,4 @@ const f = /* @__PURE__ */ c(i, [["render", d]]);
|
|
|
14
14
|
export {
|
|
15
15
|
f as default
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=(unselected)-
|
|
17
|
+
//# sourceMappingURL=(unselected)-CF4tcOEp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"(unselected)-
|
|
1
|
+
{"version":3,"file":"(unselected)-CF4tcOEp.js","sources":["../src/panel/pages/queries/(unselected).vue"],"sourcesContent":["<script setup lang=\"ts\"></script>\n\n<template>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Query to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n </div>\n</template>\n"],"names":["_hoisted_1","_hoisted_2","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_i_lucide_mouse_pointer_click"],"mappings":";;cAGOA,IAAA,EAAA,OAAM,eAAc,GACpBC,IAAA,EAAA,OAAM,4DAA2D;;;AADtE,SAAAC,EAAA,GAAAC,EAKM,OALNH,GAKM;AAAA,IAJJI,EAGI,KAHJH,GAGI;AAAA,wBAHiE,+BAEnE,EAAA;AAAA,MAAAI,EAAgCC,CAAA;AAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { _ as q } from "./mouse-pointer-click-
|
|
2
|
-
import { I as G, _ as H, a as J, b as P, c as X, d as K, e as Q, f as Y, g as Z } from "./circle-x-
|
|
3
|
-
import { m as z, c as r, o as n, a as s, d as tt, k as et, b as st, s as ot, j as at, v as M, p as b, F as N, i as o, w as l, g as a, n as V, x as C, q as p, y as nt, u as it, f as I, t as g, z as lt, A as ut, e as x, B as rt } from "./index-
|
|
4
|
-
import { _ as dt, a as pt } from "./loader-
|
|
1
|
+
import { _ as q } from "./mouse-pointer-click-BwcHzNw_.js";
|
|
2
|
+
import { I as G, _ as H, a as J, b as P, c as X, d as K, e as Q, f as Y, g as Z } from "./circle-x-eNhJ6QJ3.js";
|
|
3
|
+
import { m as z, c as r, o as n, a as s, d as tt, k as et, b as st, s as ot, j as at, v as M, p as b, F as N, i as o, w as l, g as a, n as V, x as C, q as p, y as nt, u as it, f as I, t as g, z as lt, A as ut, e as x, B as rt } from "./index-D0GQZaew.js";
|
|
4
|
+
import { _ as dt, a as pt } from "./loader-DjhAUFXk.js";
|
|
5
5
|
const mt = {
|
|
6
6
|
viewBox: "0 0 24 24",
|
|
7
7
|
width: "1.2em",
|
|
@@ -304,4 +304,4 @@ const gt = z({ name: "lucide-variable", render: ft }), xt = { class: "flex flex-
|
|
|
304
304
|
export {
|
|
305
305
|
Ft as default
|
|
306
306
|
};
|
|
307
|
-
//# sourceMappingURL=_mutationId_-
|
|
307
|
+
//# sourceMappingURL=_mutationId_-DmzWbpVT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_mutationId_-DJZUO9uK.js","sources":["../src/panel/pages/mutations/[mutationId].vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UseMutationEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed, ref, watch } from 'vue'\nimport { useDuplexChannel, useMutationEntries } from '../../composables/duplex-channel'\nimport { useRoute, useRouter } from 'vue-router'\nimport type { DataStateStatus } from '@pinia/colada'\n\nimport IWrench from '~icons/lucide/wrench'\nimport IInfoCircle from '~icons/lucide/info'\nimport IFileText from '~icons/lucide/file-text'\nimport ICircleX from '~icons/lucide/circle-x'\nimport IBraces from '~icons/lucide/braces'\nimport IVariable from '~icons/lucide/variable'\nimport { useTimeAgo, useLocalStorage, formatTimeAgo } from '@vueuse/core'\nimport type { FormatTimeAgoOptions } from '@vueuse/core'\n\nconst route = useRoute()\nconst router = useRouter()\nconst mutations = useMutationEntries()\n\nconst selectedMutation = computed<UseMutationEntryPayload | null>(() => {\n const mutationId = route.params.mutationId\n return mutations.value.find((entry) => entry.id === Number(mutationId)) ?? null\n})\n\nconst TIME_AGO_OPTIONS: FormatTimeAgoOptions = {\n showSecond: true,\n rounding: 'floor',\n max: 1000 * 60 * 60 * 24, // 1 day\n}\n\nconst lastUpdate = useTimeAgo(() => selectedMutation.value?.devtools.updatedAt ?? 0, {\n ...TIME_AGO_OPTIONS,\n updateInterval: 3000,\n})\n\nconst channel = useDuplexChannel()\n\n// Track when we're replaying to auto-navigate to new mutation\nlet justReplayed = false\nconst mutationCountBeforeReplay = ref(0)\n\nfunction replayMutation(id: UseMutationEntryPayload['id']) {\n // Track state before replay\n mutationCountBeforeReplay.value = mutations.value.length\n justReplayed = true\n\n // Emit the replay event\n channel.emit('mutations:replay', id)\n}\n\n// FIXME: we should move this logic up and auto detect replays maybe with some linking\n// isReplayOf: mutationId\n// and we can display this in the interface too\nwatch(\n () => mutations.value,\n () => {\n if (justReplayed) {\n // Find the latest id\n const newest = mutations.value.toSorted((a, b) => b.id - a.id)[0]\n\n if (newest) {\n router.push({\n name: '/mutations/[mutationId]',\n params: { mutationId: newest.id },\n })\n }\n\n justReplayed = false\n }\n },\n {\n deep: true,\n },\n)\n\nconst isDataOpen = useLocalStorage<boolean>('pc:mutation:details:data:open', false, {})\nconst isVarsOpen = useLocalStorage<boolean>('pc:mutation:details:vars:open', true, {})\nlet wasDataOpen = isDataOpen.value\nlet lastStatus: DataStateStatus | null = null\nconst isErrorOpen = useLocalStorage<boolean>('pc:mutation:details:error:open', false, {})\n\nwatch(\n () => selectedMutation.value?.state,\n (state) => {\n if (!state || lastStatus === state.status) return\n lastStatus = state.status\n if (state.status === 'error') {\n isErrorOpen.value = true\n wasDataOpen = isDataOpen.value\n isDataOpen.value = false\n } else if (state.status === 'success') {\n isDataOpen.value = wasDataOpen\n isErrorOpen.value = false\n }\n },\n)\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y dark:divide-(--ui-border) divide-(--ui-border-accented)\">\n <template v-if=\"selectedMutation\">\n <UCollapse title=\"Details\" :icon=\"IInfoCircle\">\n <div class=\"py-1 text-sm\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>id:</span>\n <span>\n <code class=\"rounded bg-neutral-500/20 p-0.5\">{{ selectedMutation.id }}</code>\n </span>\n </p>\n\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>key:</span>\n <span class=\"flex items-center gap-1.5\">\n <code class=\"rounded p-0.5 bg-neutral-500/20\">\n {{ selectedMutation.key ?? 'undefined' }}\n </code>\n <span\n v-if=\"!selectedMutation.key\"\n class=\"text-xs text-(--ui-text-muted) italic cursor-help\"\n title=\"This mutation was created without a custom key\"\n >\n (anonymous)\n </span>\n </span>\n </p>\n\n <p class=\"grid grid-cols-[auto_1fr] gap-x-2\" title=\"When was the mutation last updated\">\n <span>Last update:</span>\n <span class=\"font-bold\">{{ lastUpdate }}</span>\n </p>\n\n <p\n v-if=\"!selectedMutation.active && selectedMutation.options\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When is this mutation entry garbage collected\"\n >\n <template\n v-if=\"\n typeof selectedMutation.options.gcTime === 'number' &&\n Number.isFinite(selectedMutation.options.gcTime)\n \"\n >\n <span>Will be <i>gced</i></span>\n <span class=\"font-bold\">{{\n formatTimeAgo(\n new Date(selectedMutation.devtools.inactiveAt + selectedMutation.options.gcTime),\n {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n },\n )\n }}</span>\n </template>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Actions\" :icon=\"IWrench\">\n <div class=\"py-2 gap-2 flex flex-wrap items-center justify-items-start\">\n <UButton\n v-if=\"selectedMutation.devtools.simulate !== 'loading'\"\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Simulate a loading state\"\n @click=\"channel.emit('mutations:simulate:loading', selectedMutation.id)\"\n >\n <i-lucide-loader />\n Simulate loading\n </UButton>\n <UButton\n v-else\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Stop simulating loading state\"\n @click=\"channel.emit('mutations:simulate:loading:stop', selectedMutation.id)\"\n >\n <i-lucide-loader class=\"animate-spin\" />\n Stop loading\n </UButton>\n\n <UButton\n v-if=\"selectedMutation.devtools.simulate !== 'error'\"\n class=\"theme-error\"\n size=\"sm\"\n title=\"Simulate an Error state\"\n @click=\"channel.emit('mutations:simulate:error', selectedMutation.id)\"\n >\n <i-lucide-x-octagon /> Simulate error\n </UButton>\n <UButton\n v-else\n class=\"theme-error\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('mutations:simulate:error:stop', selectedMutation.id)\"\n >\n <i-lucide-rotate-ccw /> Remove error\n </UButton>\n\n <UButton\n class=\"theme-success\"\n size=\"sm\"\n title=\"Re-trigger this mutation with the same variables\"\n @click=\"replayMutation(selectedMutation.id)\"\n >\n <i-lucide-repeat-2 />\n Replay\n </UButton>\n\n <UButton\n class=\"theme-warning\"\n size=\"sm\"\n title=\"Remove this mutation from the cache\"\n @click=\"channel.emit('mutations:remove', selectedMutation.id)\"\n >\n <i-lucide-trash /> Remove\n </UButton>\n </div>\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isVarsOpen\"\n :title=\"`Variables${selectedMutation.vars === undefined ? ' (empty)' : ''}`\"\n :class=\"[selectedMutation.vars === undefined && 'text-(--ui-text-muted)']\"\n :icon=\"IVariable\"\n no-padding\n >\n <JsonViewer :data=\"selectedMutation.vars\" readonly />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isDataOpen\"\n :title=\"`Data${selectedMutation.state.data === undefined ? ' (empty)' : ''}`\"\n :icon=\"IFileText\"\n :class=\"[selectedMutation.state.data === undefined && 'text-(--ui-text-muted)']\"\n no-padding\n >\n <JsonViewer :data=\"selectedMutation.state.data\" />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isErrorOpen\"\n :title=\"`Error${selectedMutation.state.status === 'error' ? ' (!)' : ''}`\"\n :icon=\"ICircleX\"\n >\n <div class=\"py-1\">\n <pre\n v-if=\"selectedMutation.state.error\"\n class=\"rounded p-1 overflow-auto max-h-[1200px]\"\n >{{ selectedMutation.state.error }}</pre\n >\n <p v-else class=\"text-neutral-500/50\">No error</p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Options\" :open=\"false\" :icon=\"IBraces\" no-padding>\n <JsonViewer v-if=\"selectedMutation.options\" :data=\"selectedMutation.options\" readonly />\n <p v-else>No options configured for this mutation.</p>\n </UCollapse>\n </template>\n\n <template v-else>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Mutation to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n </div>\n </template>\n </div>\n</template>\n"],"names":["route","useRoute","router","useRouter","mutations","useMutationEntries","selectedMutation","computed","mutationId","entry","TIME_AGO_OPTIONS","lastUpdate","useTimeAgo","channel","useDuplexChannel","justReplayed","mutationCountBeforeReplay","ref","replayMutation","id","watch","newest","a","b","isDataOpen","useLocalStorage","isVarsOpen","wasDataOpen","lastStatus","isErrorOpen","state","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_createVNode","_component_UCollapse","_unref","IInfoCircle","_createElementVNode","_hoisted_2","_hoisted_3","_cache","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","formatTimeAgo","IWrench","_hoisted_13","_createBlock","_component_UButton","_component_i_lucide_loader","_component_i_lucide_x_octagon","_component_i_lucide_rotate_ccw","$event","_component_i_lucide_repeat_2","_component_i_lucide_trash","_normalizeClass","IVariable","_component_JsonViewer","IFileText","ICircleX","_hoisted_14","_hoisted_15","_hoisted_16","IBraces","_hoisted_18","_hoisted_19","_component_i_lucide_mouse_pointer_click"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_mutationId_-DmzWbpVT.js","sources":["../src/panel/pages/mutations/[mutationId].vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { UseMutationEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed, ref, watch } from 'vue'\nimport { useDuplexChannel, useMutationEntries } from '../../composables/duplex-channel'\nimport { useRoute, useRouter } from 'vue-router'\nimport type { DataStateStatus } from '@pinia/colada'\n\nimport IWrench from '~icons/lucide/wrench'\nimport IInfoCircle from '~icons/lucide/info'\nimport IFileText from '~icons/lucide/file-text'\nimport ICircleX from '~icons/lucide/circle-x'\nimport IBraces from '~icons/lucide/braces'\nimport IVariable from '~icons/lucide/variable'\nimport { useTimeAgo, useLocalStorage, formatTimeAgo } from '@vueuse/core'\nimport type { FormatTimeAgoOptions } from '@vueuse/core'\n\nconst route = useRoute()\nconst router = useRouter()\nconst mutations = useMutationEntries()\n\nconst selectedMutation = computed<UseMutationEntryPayload | null>(() => {\n const mutationId = route.params.mutationId\n return mutations.value.find((entry) => entry.id === Number(mutationId)) ?? null\n})\n\nconst TIME_AGO_OPTIONS: FormatTimeAgoOptions = {\n showSecond: true,\n rounding: 'floor',\n max: 1000 * 60 * 60 * 24, // 1 day\n}\n\nconst lastUpdate = useTimeAgo(() => selectedMutation.value?.devtools.updatedAt ?? 0, {\n ...TIME_AGO_OPTIONS,\n updateInterval: 3000,\n})\n\nconst channel = useDuplexChannel()\n\n// Track when we're replaying to auto-navigate to new mutation\nlet justReplayed = false\nconst mutationCountBeforeReplay = ref(0)\n\nfunction replayMutation(id: UseMutationEntryPayload['id']) {\n // Track state before replay\n mutationCountBeforeReplay.value = mutations.value.length\n justReplayed = true\n\n // Emit the replay event\n channel.emit('mutations:replay', id)\n}\n\n// FIXME: we should move this logic up and auto detect replays maybe with some linking\n// isReplayOf: mutationId\n// and we can display this in the interface too\nwatch(\n () => mutations.value,\n () => {\n if (justReplayed) {\n // Find the latest id\n const newest = mutations.value.toSorted((a, b) => b.id - a.id)[0]\n\n if (newest) {\n router.push({\n name: '/mutations/[mutationId]',\n params: { mutationId: newest.id },\n })\n }\n\n justReplayed = false\n }\n },\n {\n deep: true,\n },\n)\n\nconst isDataOpen = useLocalStorage<boolean>('pc:mutation:details:data:open', false, {})\nconst isVarsOpen = useLocalStorage<boolean>('pc:mutation:details:vars:open', true, {})\nlet wasDataOpen = isDataOpen.value\nlet lastStatus: DataStateStatus | null = null\nconst isErrorOpen = useLocalStorage<boolean>('pc:mutation:details:error:open', false, {})\n\nwatch(\n () => selectedMutation.value?.state,\n (state) => {\n if (!state || lastStatus === state.status) return\n lastStatus = state.status\n if (state.status === 'error') {\n isErrorOpen.value = true\n wasDataOpen = isDataOpen.value\n isDataOpen.value = false\n } else if (state.status === 'success') {\n isDataOpen.value = wasDataOpen\n isErrorOpen.value = false\n }\n },\n)\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y dark:divide-(--ui-border) divide-(--ui-border-accented)\">\n <template v-if=\"selectedMutation\">\n <UCollapse title=\"Details\" :icon=\"IInfoCircle\">\n <div class=\"py-1 text-sm\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>id:</span>\n <span>\n <code class=\"rounded bg-neutral-500/20 p-0.5\">{{ selectedMutation.id }}</code>\n </span>\n </p>\n\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>key:</span>\n <span class=\"flex items-center gap-1.5\">\n <code class=\"rounded p-0.5 bg-neutral-500/20\">\n {{ selectedMutation.key ?? 'undefined' }}\n </code>\n <span\n v-if=\"!selectedMutation.key\"\n class=\"text-xs text-(--ui-text-muted) italic cursor-help\"\n title=\"This mutation was created without a custom key\"\n >\n (anonymous)\n </span>\n </span>\n </p>\n\n <p class=\"grid grid-cols-[auto_1fr] gap-x-2\" title=\"When was the mutation last updated\">\n <span>Last update:</span>\n <span class=\"font-bold\">{{ lastUpdate }}</span>\n </p>\n\n <p\n v-if=\"!selectedMutation.active && selectedMutation.options\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When is this mutation entry garbage collected\"\n >\n <template\n v-if=\"\n typeof selectedMutation.options.gcTime === 'number' &&\n Number.isFinite(selectedMutation.options.gcTime)\n \"\n >\n <span>Will be <i>gced</i></span>\n <span class=\"font-bold\">{{\n formatTimeAgo(\n new Date(selectedMutation.devtools.inactiveAt + selectedMutation.options.gcTime),\n {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n },\n )\n }}</span>\n </template>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Actions\" :icon=\"IWrench\">\n <div class=\"py-2 gap-2 flex flex-wrap items-center justify-items-start\">\n <UButton\n v-if=\"selectedMutation.devtools.simulate !== 'loading'\"\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Simulate a loading state\"\n @click=\"channel.emit('mutations:simulate:loading', selectedMutation.id)\"\n >\n <i-lucide-loader />\n Simulate loading\n </UButton>\n <UButton\n v-else\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Stop simulating loading state\"\n @click=\"channel.emit('mutations:simulate:loading:stop', selectedMutation.id)\"\n >\n <i-lucide-loader class=\"animate-spin\" />\n Stop loading\n </UButton>\n\n <UButton\n v-if=\"selectedMutation.devtools.simulate !== 'error'\"\n class=\"theme-error\"\n size=\"sm\"\n title=\"Simulate an Error state\"\n @click=\"channel.emit('mutations:simulate:error', selectedMutation.id)\"\n >\n <i-lucide-x-octagon /> Simulate error\n </UButton>\n <UButton\n v-else\n class=\"theme-error\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('mutations:simulate:error:stop', selectedMutation.id)\"\n >\n <i-lucide-rotate-ccw /> Remove error\n </UButton>\n\n <UButton\n class=\"theme-success\"\n size=\"sm\"\n title=\"Re-trigger this mutation with the same variables\"\n @click=\"replayMutation(selectedMutation.id)\"\n >\n <i-lucide-repeat-2 />\n Replay\n </UButton>\n\n <UButton\n class=\"theme-warning\"\n size=\"sm\"\n title=\"Remove this mutation from the cache\"\n @click=\"channel.emit('mutations:remove', selectedMutation.id)\"\n >\n <i-lucide-trash /> Remove\n </UButton>\n </div>\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isVarsOpen\"\n :title=\"`Variables${selectedMutation.vars === undefined ? ' (empty)' : ''}`\"\n :class=\"[selectedMutation.vars === undefined && 'text-(--ui-text-muted)']\"\n :icon=\"IVariable\"\n no-padding\n >\n <JsonViewer :data=\"selectedMutation.vars\" readonly />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isDataOpen\"\n :title=\"`Data${selectedMutation.state.data === undefined ? ' (empty)' : ''}`\"\n :icon=\"IFileText\"\n :class=\"[selectedMutation.state.data === undefined && 'text-(--ui-text-muted)']\"\n no-padding\n >\n <JsonViewer :data=\"selectedMutation.state.data\" />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isErrorOpen\"\n :title=\"`Error${selectedMutation.state.status === 'error' ? ' (!)' : ''}`\"\n :icon=\"ICircleX\"\n >\n <div class=\"py-1\">\n <pre\n v-if=\"selectedMutation.state.error\"\n class=\"rounded p-1 overflow-auto max-h-[1200px]\"\n >{{ selectedMutation.state.error }}</pre\n >\n <p v-else class=\"text-neutral-500/50\">No error</p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Options\" :open=\"false\" :icon=\"IBraces\" no-padding>\n <JsonViewer v-if=\"selectedMutation.options\" :data=\"selectedMutation.options\" readonly />\n <p v-else>No options configured for this mutation.</p>\n </UCollapse>\n </template>\n\n <template v-else>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Mutation to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n </div>\n </template>\n </div>\n</template>\n"],"names":["route","useRoute","router","useRouter","mutations","useMutationEntries","selectedMutation","computed","mutationId","entry","TIME_AGO_OPTIONS","lastUpdate","useTimeAgo","channel","useDuplexChannel","justReplayed","mutationCountBeforeReplay","ref","replayMutation","id","watch","newest","a","b","isDataOpen","useLocalStorage","isVarsOpen","wasDataOpen","lastStatus","isErrorOpen","state","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_createVNode","_component_UCollapse","_unref","IInfoCircle","_createElementVNode","_hoisted_2","_hoisted_3","_cache","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","formatTimeAgo","IWrench","_hoisted_13","_createBlock","_component_UButton","_component_i_lucide_loader","_component_i_lucide_x_octagon","_component_i_lucide_rotate_ccw","$event","_component_i_lucide_repeat_2","_component_i_lucide_trash","_normalizeClass","IVariable","_component_JsonViewer","IFileText","ICircleX","_hoisted_14","_hoisted_15","_hoisted_16","IBraces","_hoisted_18","_hoisted_19","_component_i_lucide_mouse_pointer_click"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,UAAMA,IAAQC,GAAA,GACRC,IAASC,GAAA,GACTC,IAAYC,GAAA,GAEZC,IAAmBC,GAAyC,MAAM;AACtE,YAAMC,IAAaR,EAAM,OAAO;AAChC,aAAOI,EAAU,MAAM,KAAK,CAACK,MAAUA,EAAM,OAAO,OAAOD,CAAU,CAAC,KAAK;AAAA,IAC7E,CAAC,GAEKE,IAAyC;AAAA,MAC7C,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,KAAK,MAAO,KAAK,KAAK;AAAA;AAAA,IAAA,GAGlBC,IAAaC,GAAW,MAAMN,EAAiB,OAAO,SAAS,aAAa,GAAG;AAAA,MACnF,GAAGI;AAAA,MACH,gBAAgB;AAAA,IAAA,CACjB,GAEKG,IAAUC,GAAA;AAGhB,QAAIC,IAAe;AACnB,UAAMC,IAA4BC,GAAI,CAAC;AAEvC,aAASC,EAAeC,GAAmC;AAEzD,MAAAH,EAA0B,QAAQZ,EAAU,MAAM,QAClDW,IAAe,IAGfF,EAAQ,KAAK,oBAAoBM,CAAE;AAAA,IACrC;AAKA,IAAAC;AAAA,MACE,MAAMhB,EAAU;AAAA,MAChB,MAAM;AACJ,YAAIW,GAAc;AAEhB,gBAAMM,IAASjB,EAAU,MAAM,SAAS,CAACkB,GAAGC,MAAMA,EAAE,KAAKD,EAAE,EAAE,EAAE,CAAC;AAEhE,UAAID,KACFnB,EAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ,EAAE,YAAYmB,EAAO,GAAA;AAAA,UAAG,CACjC,GAGHN,IAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,MAAA;AAAA,IACR;AAGF,UAAMS,IAAaC,EAAyB,iCAAiC,IAAO,CAAA,CAAE,GAChFC,IAAaD,EAAyB,iCAAiC,IAAM,CAAA,CAAE;AACrF,QAAIE,IAAcH,EAAW,OACzBI,IAAqC;AACzC,UAAMC,IAAcJ,EAAyB,kCAAkC,IAAO,CAAA,CAAE;AAExF,WAAAL;AAAA,MACE,MAAMd,EAAiB,OAAO;AAAA,MAC9B,CAACwB,MAAU;AACT,QAAI,CAACA,KAASF,MAAeE,EAAM,WACnCF,IAAaE,EAAM,QACfA,EAAM,WAAW,WACnBD,EAAY,QAAQ,IACpBF,IAAcH,EAAW,OACzBA,EAAW,QAAQ,MACVM,EAAM,WAAW,cAC1BN,EAAW,QAAQG,GACnBE,EAAY,QAAQ;AAAA,MAExB;AAAA,IAAA;;AAKA,aAAAE,EAAA,GAAAC,EA0KM,OA1KNC,IA0KM;AAAA,QAzKY3B,EAAA,cAAhB0B,EA+JWE,GAAA,EAAA,KAAA,KAAA;AAAA,UA9JTC,EAsDYC,GAAA;AAAA,YAtDD,OAAM;AAAA,YAAW,MAAMC,EAAAC,CAAA;AAAA,UAAA;uBAChC,MAoDM;AAAA,cApDNC,EAoDM,OApDNC,IAoDM;AAAA,gBAnDJD,EAKI,KALJE,IAKI;AAAA,kBAJFC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAgB,cAAV,OAAG,EAAA;AAAA,kBACTA,EAEO,QAAA,MAAA;AAAA,oBADLA,EAA8E,QAA9EI,IAA8EC,EAA7BtC,EAAA,MAAiB,EAAE,GAAA,CAAA;AAAA,kBAAA;;gBAIxEiC,EAcI,KAdJM,IAcI;AAAA,kBAbFH,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAH,EAAiB,cAAX,QAAI,EAAA;AAAA,kBACVA,EAWO,QAXPO,IAWO;AAAA,oBAVLP,EAEO,QAFPQ,IAEOH,EADFtC,EAAA,MAAiB,OAAG,WAAA,GAAA,CAAA;AAAA,oBAGhBA,EAAA,MAAiB,wBAD1B0B,EAMO,QANPgB,IAIC,eAED;AAAA;;gBAIJT,EAGI,KAHJU,IAGI;AAAA,kBAFFP,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAH,EAAyB,cAAnB,gBAAY,EAAA;AAAA,kBAClBA,EAA+C,QAA/CW,IAA+CN,EAApBP,EAAA1B,CAAA,CAAU,GAAA,CAAA;AAAA,gBAAA;gBAI9B,CAAAL,EAAA,MAAiB,UAAUA,EAAA,MAAiB,WADrDyB,EAAA,GAAAC,EAsBI,KAtBJmB,IAsBI;AAAA,yBAhB8B7C,EAAA,MAAiB,QAAQ,UAAM,YAAiC,OAAO,SAASA,QAAiB,QAAQ,MAAM,UAD/I0B,EAgBWE,GAAA,EAAA,KAAA,KAAA;AAAA,sCAVTK,EAAgC,QAAA,MAAA;AAAA,wBAA1B,UAAQ;AAAA,sBAAAA,EAAW,WAAR,MAAI;AAAA,oBAAA;oBACrBA,EAQS,QARTa,IAQSR,EAPPP,EAAAgB,EAAA;AAAA,0BAAqC,KAAK/C,EAAA,MAAiB,SAAS,aAAaA,EAAA,MAAiB,QAAQ,MAAM;AAAA;2BAA8CI;AAAA,6BAA2C;AAAA,sBAAA;AAAA;;;;;;;UAanNyB,EA6DYC,GAAA;AAAA,YA7DD,OAAM;AAAA,YAAW,MAAMC,EAAAiB,CAAA;AAAA,UAAA;uBAChC,MA2DM;AAAA,cA3DNf,EA2DM,OA3DNgB,IA2DM;AAAA,gBAzDIjD,EAAA,MAAiB,SAAS,aAAQ,kBAD1CkD,EASUC,GAAA;AAAA;kBAPR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,gCAAOpB,EAAAxB,CAAA,EAAQ,KAAI,8BAA+BP,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAEtE,MAAmB;AAAA,oBAAnB6B,EAAmBuB,CAAA;AAAA,wCAAA,sBAErB,EAAA;AAAA,kBAAA;;4BACAF,EASUC,GAAA;AAAA;kBAPR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,gCAAOpB,EAAAxB,CAAA,EAAQ,KAAI,mCAAoCP,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAE3E,MAAwC;AAAA,oBAAxC6B,EAAwCuB,GAAA,EAAvB,OAAM,gBAAc;AAAA,wCAAG,kBAE1C,EAAA;AAAA,kBAAA;;;gBAGQpD,EAAA,MAAiB,SAAS,aAAQ,gBAD1CkD,EAQUC,GAAA;AAAA;kBANR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,gCAAOpB,EAAAxB,CAAA,EAAQ,KAAI,4BAA6BP,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAEpE,MAAsB;AAAA,oBAAtB6B,EAAsBwB,CAAA;AAAA,wCAAA,oBACxB,EAAA;AAAA,kBAAA;;4BACAH,EAQUC,GAAA;AAAA;kBANR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,gCAAOpB,EAAAxB,CAAA,EAAQ,KAAI,iCAAkCP,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAEzE,MAAuB;AAAA,oBAAvB6B,EAAuByB,CAAA;AAAA,wCAAA,kBACzB,EAAA;AAAA,kBAAA;;;gBAEAzB,EAQUsB,GAAA;AAAA,kBAPR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,SAAKf,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAmB,MAAE3C,EAAeZ,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAE1C,MAAqB;AAAA,oBAArB6B,EAAqB2B,CAAA;AAAA,wCAAA,YAEvB,EAAA;AAAA,kBAAA;;;gBAEA3B,EAOUsB,GAAA;AAAA,kBANR,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,OAAM;AAAA,kBACL,gCAAOpB,EAAAxB,CAAA,EAAQ,KAAI,oBAAqBP,EAAA,MAAiB,EAAE;AAAA,gBAAA;6BAE5D,MAAkB;AAAA,oBAAlB6B,EAAkB4B,CAAA;AAAA,wCAAA,YACpB,EAAA;AAAA,kBAAA;;;;;;;UAIJ5B,EAQYC,GAAA;AAAA,YAPF,MAAMC,EAAAX,CAAA;AAAA,2DAAAA,EAAU,QAAAmC,IAAA;AAAA,YACvB,OAAK,YAAcvD,EAAA,MAAiB,SAAS,SAAS,aAAA,EAAA;AAAA,YACtD,OAAK0D,EAAA,CAAG1D,EAAA,MAAiB,SAAS,UAAS,wBAAA,CAAA;AAAA,YAC3C,MAAM+B,EAAA4B,EAAA;AAAA,YACP,cAAA;AAAA,UAAA;uBAEA,MAAqD;AAAA,cAArD9B,EAAqD+B,GAAA;AAAA,gBAAxC,MAAM5D,EAAA,MAAiB;AAAA,gBAAM,UAAA;AAAA,cAAA;;;;UAG5C6B,EAQYC,GAAA;AAAA,YAPF,MAAMC,EAAAb,CAAA;AAAA,2DAAAA,EAAU,QAAAqC,IAAA;AAAA,YACvB,cAAcvD,EAAA,MAAiB,MAAM,SAAS,SAAS,aAAA,EAAA;AAAA,YACvD,MAAM+B,EAAA8B,CAAA;AAAA,YACN,UAAQ7D,EAAA,MAAiB,MAAM,SAAS,UAAS,wBAAA,CAAA;AAAA,YAClD,cAAA;AAAA,UAAA;uBAEA,MAAkD;AAAA,cAAlD6B,EAAkD+B,GAAA;AAAA,gBAArC,MAAM5D,EAAA,MAAiB,MAAM;AAAA,cAAA;;;;UAG5C6B,EAaYC,GAAA;AAAA,YAZF,MAAMC,EAAAR,CAAA;AAAA,2DAAAA,EAAW,QAAAgC,IAAA;AAAA,YACxB,OAAK,QAAUvD,EAAA,MAAiB,MAAM,WAAM,UAAA,SAAA,EAAA;AAAA,YAC5C,MAAM+B,EAAA+B,CAAA;AAAA,UAAA;uBAEP,MAOM;AAAA,cAPN7B,EAOM,OAPN8B,IAOM;AAAA,gBALI/D,EAAA,MAAiB,MAAM,SAD/ByB,KAAAC,EAIC,OAJDsC,IAIC1B,EADKtC,QAAiB,MAAM,KAAK,GAAA,CAAA,WAElC0B,EAAkD,KAAlDuC,IAAsC,UAAQ;AAAA,cAAA;;;;UAIlDpC,EAGYC,GAAA;AAAA,YAHD,OAAM;AAAA,YAAW,MAAM;AAAA,YAAQ,MAAMC,EAAAmC,CAAA;AAAA,YAAS,cAAA;AAAA,UAAA;uBACvD,MAAwF;AAAA,cAAtElE,EAAA,MAAiB,gBAAnCkD,EAAwFU,GAAA;AAAA;gBAA3C,MAAM5D,EAAA,MAAiB;AAAA,gBAAS,UAAA;AAAA,cAAA,0BAC7EyB,EAAA,GAAAC,EAAsD,SAA5C,0CAAwC;AAAA,YAAA;;;mBAKpDD,KAAAC,EAKM,OALNyC,IAKM;AAAA,UAJJlC,EAGI,KAHJmC,IAGI;AAAA,gCAHiE,kCAEnE,EAAA;AAAA,YAAAvC,EAAgCwC,CAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { _ as j } from "./mouse-pointer-click-
|
|
2
|
-
import { I as F, _ as U, a as Q, b as W, c as G, d as J, e as P, f as X, g as K } from "./circle-x-
|
|
3
|
-
import { _ as Y, a as Z } from "./loader-
|
|
4
|
-
import { m as $, c as u, o as n, a as t, d as ee, C as te, b as se, s as oe, p as D, v as ne, F as C, i as l, w as r, g as o, n as z, x as R, q as p, t as m, y as le, f as b, z as ae, A as I, e as k, B as ie, h as re } from "./index-
|
|
1
|
+
import { _ as j } from "./mouse-pointer-click-BwcHzNw_.js";
|
|
2
|
+
import { I as F, _ as U, a as Q, b as W, c as G, d as J, e as P, f as X, g as K } from "./circle-x-eNhJ6QJ3.js";
|
|
3
|
+
import { _ as Y, a as Z } from "./loader-DjhAUFXk.js";
|
|
4
|
+
import { m as $, c as u, o as n, a as t, d as ee, C as te, b as se, s as oe, p as D, v as ne, F as C, i as l, w as r, g as o, n as z, x as R, q as p, t as m, y as le, f as b, z as ae, A as I, e as k, B as ie, h as re } from "./index-D0GQZaew.js";
|
|
5
5
|
const ue = {
|
|
6
6
|
viewBox: "0 0 24 24",
|
|
7
7
|
width: "1.2em",
|
|
@@ -436,4 +436,4 @@ const xe = $({ name: "lucide-sigma-square", render: ke }), we = { class: "flex f
|
|
|
436
436
|
export {
|
|
437
437
|
tt as default
|
|
438
438
|
};
|
|
439
|
-
//# sourceMappingURL=_queryId_-
|
|
439
|
+
//# sourceMappingURL=_queryId_-5tGPPWCM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_queryId_-OYxjQ3wF.js","sources":["../src/panel/utils/time.ts","../src/panel/pages/queries/[queryId].vue"],"sourcesContent":["export function formatDuration(timeInMs: number): string {\n if (timeInMs < 1000) {\n return `${Math.round(timeInMs)} ms`\n }\n\n const seconds = timeInMs / 1000\n if (timeInMs < 10_000) {\n return `${seconds.toFixed(3)} seconds`\n }\n\n if (timeInMs < 60_000) {\n return `${Math.floor(seconds)} seconds`\n }\n\n const minutes = Math.floor(seconds / 60)\n\n if (timeInMs < 3_600_000) {\n return `${minutes} minute${minutes > 1 ? 's' : ''}`\n }\n\n const hours = Math.floor(minutes / 60)\n\n return `${hours}h${minutes % 60}m${seconds % 60}s`\n}\n","<script setup lang=\"ts\">\nimport type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed, watch } from 'vue'\nimport { useDuplexChannel, useQueryEntries } from '../../composables/duplex-channel'\nimport { formatDuration } from '../../utils/time'\nimport { useRoute } from 'vue-router'\nimport type { DataStateStatus } from '@pinia/colada'\n\nimport IWrench from '~icons/lucide/wrench'\nimport IInfoCircle from '~icons/lucide/info'\nimport IFileText from '~icons/lucide/file-text'\nimport ICircleX from '~icons/lucide/circle-x'\nimport IBraces from '~icons/lucide/braces'\nimport IHistory from '~icons/lucide/history'\nimport ISigmaSquare from '~icons/lucide/sigma-square'\nimport { useTimeAgo, formatTimeAgo, useLocalStorage } from '@vueuse/core'\nimport type { FormatTimeAgoOptions } from '@vueuse/core'\n\nconst route = useRoute()\nconst queries = useQueryEntries()\n\nconst selectedQuery = computed<UseQueryEntryPayload | null>(() => {\n return queries.value.find((entry) => entry.keyHash === route.params.queryId) ?? null\n})\n\nconst TIME_AGO_OPTIONS: FormatTimeAgoOptions = {\n showSecond: true,\n rounding: 'floor',\n max: 1000 * 60 * 60 * 24, // 1 day\n}\n\nconst lastUpdate = useTimeAgo(() => selectedQuery.value?.devtools.updatedAt ?? 0, {\n ...TIME_AGO_OPTIONS,\n updateInterval: 3000,\n})\n\n// TODO: we should be able to highlight components using this query\n// const el = useTemplateRef('me')\n// TODO: add ref=\"me\" to the div\n// watch(\n// // also trigger if the selectedQuery changes\n// () => [el.value, selectedQuery.value?.id] as const,\n// ([el]) => {\n// if (!el || !selectedQuery.value) return\n//\n// const observingComponents = findVueComponents(\n// el,\n// selectedQuery.value.deps.filter((c) => c.type === 'component').map((c) => c.uid) ?? [],\n// )\n//\n// console.log('elements', observingComponents)\n// },\n// )\n\nconst channel = useDuplexChannel()\n\nconst isDataOpen = useLocalStorage<boolean>('pc:query:details:data:open', false, {})\nlet wasDataOpen = isDataOpen.value\nlet lastStatus: DataStateStatus | null = null\nconst isErrorOpen = useLocalStorage<boolean>('pc:query:details:error:open', false, {})\nwatch(\n () => selectedQuery.value?.state,\n (state) => {\n if (!state || lastStatus === state.status) return\n lastStatus = state.status\n if (state.status === 'error') {\n isErrorOpen.value = true\n // preserve it for later\n wasDataOpen = isDataOpen.value\n isDataOpen.value = false\n } else if (state.status === 'success') {\n isDataOpen.value = wasDataOpen\n isErrorOpen.value = false\n }\n },\n)\n\n// Helper function to set nested value\nfunction setNestedValue(obj: any, path: Array<string | number>, value: unknown): boolean {\n if (path.length === 0) {\n console.error('Cannot set value with empty path')\n return false\n }\n\n let current = obj\n // Navigate to parent of target value\n for (let i = 0; i < path.length - 1; i++) {\n if (current == null || typeof current !== 'object') {\n console.error('Invalid path:', path, 'at index', i, 'Current value:', current)\n return false\n }\n current = current[path[i]!]\n }\n\n // Validate the final parent exists\n if (current == null || typeof current !== 'object') {\n console.error('Invalid final parent in path:', path)\n return false\n }\n\n // Set the final value\n current[path.at(-1)!] = value\n return true\n}\n\n// Handle value updates from JsonViewer\nconst handleValueUpdate = (path: Array<string | number>, value: unknown) => {\n if (!selectedQuery.value) return\n\n // Update the value at the path\n const success = setNestedValue(selectedQuery.value.state.data, path, value)\n\n if (!success) {\n console.error('Failed to update value at path:', path)\n return\n }\n\n // Send to app via RPC\n channel.emit('queries:set:state', selectedQuery.value.key, selectedQuery.value.state)\n}\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y dark:divide-(--ui-border) divide-(--ui-border-accented)\">\n <template v-if=\"selectedQuery\">\n <UCollapse title=\"Details\" :icon=\"IInfoCircle\">\n <div class=\"py-1 text-sm\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>key:</span>\n <span>\n <code class=\"rounded bg-neutral-500/20 p-0.5\">{{ selectedQuery.key }}</code>\n </span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the query entry last updated\"\n >\n <span>Last update:</span>\n <span class=\"font-bold\">{{ lastUpdate }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the last time the query was fetched\"\n >\n <span>Last fetch:</span>\n <span class=\"font-bold\">{{\n formatTimeAgo(new Date(selectedQuery.devtools.history.at(0)!.fetchTime!.start), {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n })\n }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime?.end\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How long did the last query take to fetch\"\n >\n <span>Fetch duration:</span>\n <span class=\"font-bold\">{{\n formatDuration(\n selectedQuery.devtools.history.at(0)!.fetchTime!.end! -\n selectedQuery.devtools.history.at(0)!.fetchTime!.start,\n )\n }}</span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How many components and effects are using this query\"\n >\n <span\n >Observers: <span class=\"font-bold\">{{ selectedQuery.deps.length }}</span></span\n >\n </p>\n\n <p\n v-if=\"!selectedQuery.active && selectedQuery.options\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When is this query entry garbace collected\"\n >\n <template\n v-if=\"\n typeof selectedQuery.options.gcTime === 'number' &&\n Number.isFinite(selectedQuery.options.gcTime)\n \"\n >\n <span>Will be <i>gced</i></span>\n <span class=\"font-bold\">{{\n formatTimeAgo(\n new Date(selectedQuery.devtools.inactiveAt + selectedQuery.options.gcTime),\n {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n },\n )\n }}</span>\n </template>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Actions\" :icon=\"IWrench\">\n <div class=\"py-2 gap-2 flex flex-wrap items-center justify-items-start\">\n <UButton\n class=\"theme-info\"\n size=\"sm\"\n title=\"Refetch this query\"\n :disabled=\"selectedQuery.options?.enabled === false\"\n @click=\"channel.emit('queries:refetch', selectedQuery.key)\"\n >\n <i-lucide-refresh-cw class=\"size-3.5\" /> Refetch\n </UButton>\n\n <UButton\n class=\"theme-neutral\"\n size=\"sm\"\n title=\"Invalidate this query\"\n @click=\"channel.emit('queries:invalidate', selectedQuery.key)\"\n >\n <i-lucide-timer-reset /> Invalidate\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'loading'\"\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:loading', selectedQuery.key)\"\n >\n <i-lucide-loader />\n Simulate loading\n </UButton>\n <UButton\n v-else\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Simulate a loading state\"\n @click=\"channel.emit('queries:simulate:loading:stop', selectedQuery.key)\"\n >\n <i-lucide-loader class=\"animate-spin\" />\n Stop loading\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'error'\"\n class=\"theme-error\"\n size=\"sm\"\n title=\"Simulate an Error state\"\n @click=\"channel.emit('queries:simulate:error', selectedQuery.key)\"\n >\n <i-lucide-x-octagon /> Simulate error\n </UButton>\n <UButton\n v-else\n class=\"theme-error\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:error:stop', selectedQuery.key)\"\n >\n <i-lucide-rotate-ccw /> Remove error\n </UButton>\n\n <UButton\n class=\"theme-warning\"\n size=\"sm\"\n title=\"Reset this query to its initial (pending) state\"\n @click=\"channel.emit('queries:reset', selectedQuery.key)\"\n >\n <i-lucide-trash /> Reset\n </UButton>\n </div>\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isDataOpen\"\n :title=\"`Data${selectedQuery.state.data === undefined ? ' (empty)' : ''}`\"\n :icon=\"IFileText\"\n :class=\"[selectedQuery.state.data === undefined && 'text-(--ui-text-muted)']\"\n no-padding\n >\n <JsonViewer :data=\"selectedQuery.state.data\" @update:value=\"handleValueUpdate\" />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isErrorOpen\"\n :title=\"`Error${selectedQuery.state.status === 'error' ? ' (!)' : '(empty)'}`\"\n :icon=\"ICircleX\"\n :class=\"[selectedQuery.state.status !== 'error' && 'text-(--ui-text-muted)']\"\n disabled\n >\n <div class=\"py-1\">\n <pre v-if=\"selectedQuery.state.error\" class=\"rounded p-1 overflow-auto max-h-[1200px]\">{{\n selectedQuery.state.error\n }}</pre>\n <p v-else class=\"text-(--ui-text-muted)/50\">No error</p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Call count\" :icon=\"ISigmaSquare\" :open=\"false\">\n <div class=\"py-1\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>Calls:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.total }}</code>\n </span>\n <span>Success:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.succeed }}</code>\n </span>\n <span>Errors:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.errored }}</code>\n </span>\n <span>Cancelled:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.cancelled }}</code>\n </span>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse\n :title=\"`History (${selectedQuery.devtools.history.length})`\"\n :icon=\"IHistory\"\n :open=\"false\"\n >\n <div class=\"py-1\">\n <UCollapse\n v-for=\"entry of selectedQuery.devtools.history\"\n :key=\"entry.updatedAt\"\n :title=\"`Entry nº${entry.id} (${formatTimeAgo(new Date(entry.updatedAt), TIME_AGO_OPTIONS)})`\"\n :open=\"false\"\n class=\"border border-neutral-200 dark:border-neutral-800\"\n >\n <JsonViewer :data=\"entry\" readonly />\n </UCollapse>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Options\" :open=\"false\" :icon=\"IBraces\" no-padding>\n <JsonViewer v-if=\"selectedQuery.options\" :data=\"selectedQuery.options\" readonly />\n <p v-else>\n This Query entry has no options. It might have been created from the server or manually\n set with\n <code>queryCache.setQueryData()</code> for prefetching.\n </p>\n </UCollapse>\n </template>\n\n <template v-else>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Query to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n <p class=\"text-center text-sm text-neutral-500 mt-4\">\n No query with key {{ route.params.queryId }} was found in the cache\n </p>\n </div>\n </template>\n </div>\n</template>\n"],"names":["formatDuration","timeInMs","seconds","minutes","route","useRoute","queries","useQueryEntries","selectedQuery","computed","entry","TIME_AGO_OPTIONS","lastUpdate","useTimeAgo","channel","useDuplexChannel","isDataOpen","useLocalStorage","wasDataOpen","lastStatus","isErrorOpen","watch","state","setNestedValue","obj","path","value","current","i","handleValueUpdate","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_createVNode","_component_UCollapse","_unref","IInfoCircle","_createElementVNode","_hoisted_2","_hoisted_3","_cache","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","formatTimeAgo","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","IWrench","_hoisted_15","_component_UButton","_component_i_lucide_refresh_cw","_component_i_lucide_timer_reset","_createBlock","_component_i_lucide_loader","_component_i_lucide_x_octagon","_component_i_lucide_rotate_ccw","_component_i_lucide_trash","$event","IFileText","_component_JsonViewer","ICircleX","_normalizeClass","_hoisted_16","_hoisted_17","_hoisted_18","ISigmaSquare","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","IHistory","_hoisted_25","IBraces","_hoisted_26","_hoisted_27","_hoisted_28","_component_i_lucide_mouse_pointer_click","_hoisted_29"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_queryId_-5tGPPWCM.js","sources":["../src/panel/utils/time.ts","../src/panel/pages/queries/[queryId].vue"],"sourcesContent":["export function formatDuration(timeInMs: number): string {\n if (timeInMs < 1000) {\n return `${Math.round(timeInMs)} ms`\n }\n\n const seconds = timeInMs / 1000\n if (timeInMs < 10_000) {\n return `${seconds.toFixed(3)} seconds`\n }\n\n if (timeInMs < 60_000) {\n return `${Math.floor(seconds)} seconds`\n }\n\n const minutes = Math.floor(seconds / 60)\n\n if (timeInMs < 3_600_000) {\n return `${minutes} minute${minutes > 1 ? 's' : ''}`\n }\n\n const hours = Math.floor(minutes / 60)\n\n return `${hours}h${minutes % 60}m${seconds % 60}s`\n}\n","<script setup lang=\"ts\">\nimport type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed, watch } from 'vue'\nimport { useDuplexChannel, useQueryEntries } from '../../composables/duplex-channel'\nimport { formatDuration } from '../../utils/time'\nimport { useRoute } from 'vue-router'\nimport type { DataStateStatus } from '@pinia/colada'\n\nimport IWrench from '~icons/lucide/wrench'\nimport IInfoCircle from '~icons/lucide/info'\nimport IFileText from '~icons/lucide/file-text'\nimport ICircleX from '~icons/lucide/circle-x'\nimport IBraces from '~icons/lucide/braces'\nimport IHistory from '~icons/lucide/history'\nimport ISigmaSquare from '~icons/lucide/sigma-square'\nimport { useTimeAgo, formatTimeAgo, useLocalStorage } from '@vueuse/core'\nimport type { FormatTimeAgoOptions } from '@vueuse/core'\n\nconst route = useRoute()\nconst queries = useQueryEntries()\n\nconst selectedQuery = computed<UseQueryEntryPayload | null>(() => {\n return queries.value.find((entry) => entry.keyHash === route.params.queryId) ?? null\n})\n\nconst TIME_AGO_OPTIONS: FormatTimeAgoOptions = {\n showSecond: true,\n rounding: 'floor',\n max: 1000 * 60 * 60 * 24, // 1 day\n}\n\nconst lastUpdate = useTimeAgo(() => selectedQuery.value?.devtools.updatedAt ?? 0, {\n ...TIME_AGO_OPTIONS,\n updateInterval: 3000,\n})\n\n// TODO: we should be able to highlight components using this query\n// const el = useTemplateRef('me')\n// TODO: add ref=\"me\" to the div\n// watch(\n// // also trigger if the selectedQuery changes\n// () => [el.value, selectedQuery.value?.id] as const,\n// ([el]) => {\n// if (!el || !selectedQuery.value) return\n//\n// const observingComponents = findVueComponents(\n// el,\n// selectedQuery.value.deps.filter((c) => c.type === 'component').map((c) => c.uid) ?? [],\n// )\n//\n// console.log('elements', observingComponents)\n// },\n// )\n\nconst channel = useDuplexChannel()\n\nconst isDataOpen = useLocalStorage<boolean>('pc:query:details:data:open', false, {})\nlet wasDataOpen = isDataOpen.value\nlet lastStatus: DataStateStatus | null = null\nconst isErrorOpen = useLocalStorage<boolean>('pc:query:details:error:open', false, {})\nwatch(\n () => selectedQuery.value?.state,\n (state) => {\n if (!state || lastStatus === state.status) return\n lastStatus = state.status\n if (state.status === 'error') {\n isErrorOpen.value = true\n // preserve it for later\n wasDataOpen = isDataOpen.value\n isDataOpen.value = false\n } else if (state.status === 'success') {\n isDataOpen.value = wasDataOpen\n isErrorOpen.value = false\n }\n },\n)\n\n// Helper function to set nested value\nfunction setNestedValue(obj: any, path: Array<string | number>, value: unknown): boolean {\n if (path.length === 0) {\n console.error('Cannot set value with empty path')\n return false\n }\n\n let current = obj\n // Navigate to parent of target value\n for (let i = 0; i < path.length - 1; i++) {\n if (current == null || typeof current !== 'object') {\n console.error('Invalid path:', path, 'at index', i, 'Current value:', current)\n return false\n }\n current = current[path[i]!]\n }\n\n // Validate the final parent exists\n if (current == null || typeof current !== 'object') {\n console.error('Invalid final parent in path:', path)\n return false\n }\n\n // Set the final value\n current[path.at(-1)!] = value\n return true\n}\n\n// Handle value updates from JsonViewer\nconst handleValueUpdate = (path: Array<string | number>, value: unknown) => {\n if (!selectedQuery.value) return\n\n // Update the value at the path\n const success = setNestedValue(selectedQuery.value.state.data, path, value)\n\n if (!success) {\n console.error('Failed to update value at path:', path)\n return\n }\n\n // Send to app via RPC\n channel.emit('queries:set:state', selectedQuery.value.key, selectedQuery.value.state)\n}\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y dark:divide-(--ui-border) divide-(--ui-border-accented)\">\n <template v-if=\"selectedQuery\">\n <UCollapse title=\"Details\" :icon=\"IInfoCircle\">\n <div class=\"py-1 text-sm\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>key:</span>\n <span>\n <code class=\"rounded bg-neutral-500/20 p-0.5\">{{ selectedQuery.key }}</code>\n </span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the query entry last updated\"\n >\n <span>Last update:</span>\n <span class=\"font-bold\">{{ lastUpdate }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the last time the query was fetched\"\n >\n <span>Last fetch:</span>\n <span class=\"font-bold\">{{\n formatTimeAgo(new Date(selectedQuery.devtools.history.at(0)!.fetchTime!.start), {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n })\n }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime?.end\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How long did the last query take to fetch\"\n >\n <span>Fetch duration:</span>\n <span class=\"font-bold\">{{\n formatDuration(\n selectedQuery.devtools.history.at(0)!.fetchTime!.end! -\n selectedQuery.devtools.history.at(0)!.fetchTime!.start,\n )\n }}</span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How many components and effects are using this query\"\n >\n <span\n >Observers: <span class=\"font-bold\">{{ selectedQuery.deps.length }}</span></span\n >\n </p>\n\n <p\n v-if=\"!selectedQuery.active && selectedQuery.options\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When is this query entry garbace collected\"\n >\n <template\n v-if=\"\n typeof selectedQuery.options.gcTime === 'number' &&\n Number.isFinite(selectedQuery.options.gcTime)\n \"\n >\n <span>Will be <i>gced</i></span>\n <span class=\"font-bold\">{{\n formatTimeAgo(\n new Date(selectedQuery.devtools.inactiveAt + selectedQuery.options.gcTime),\n {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n },\n )\n }}</span>\n </template>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Actions\" :icon=\"IWrench\">\n <div class=\"py-2 gap-2 flex flex-wrap items-center justify-items-start\">\n <UButton\n class=\"theme-info\"\n size=\"sm\"\n title=\"Refetch this query\"\n :disabled=\"selectedQuery.options?.enabled === false\"\n @click=\"channel.emit('queries:refetch', selectedQuery.key)\"\n >\n <i-lucide-refresh-cw class=\"size-3.5\" /> Refetch\n </UButton>\n\n <UButton\n class=\"theme-neutral\"\n size=\"sm\"\n title=\"Invalidate this query\"\n @click=\"channel.emit('queries:invalidate', selectedQuery.key)\"\n >\n <i-lucide-timer-reset /> Invalidate\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'loading'\"\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:loading', selectedQuery.key)\"\n >\n <i-lucide-loader />\n Simulate loading\n </UButton>\n <UButton\n v-else\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Simulate a loading state\"\n @click=\"channel.emit('queries:simulate:loading:stop', selectedQuery.key)\"\n >\n <i-lucide-loader class=\"animate-spin\" />\n Stop loading\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'error'\"\n class=\"theme-error\"\n size=\"sm\"\n title=\"Simulate an Error state\"\n @click=\"channel.emit('queries:simulate:error', selectedQuery.key)\"\n >\n <i-lucide-x-octagon /> Simulate error\n </UButton>\n <UButton\n v-else\n class=\"theme-error\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:error:stop', selectedQuery.key)\"\n >\n <i-lucide-rotate-ccw /> Remove error\n </UButton>\n\n <UButton\n class=\"theme-warning\"\n size=\"sm\"\n title=\"Reset this query to its initial (pending) state\"\n @click=\"channel.emit('queries:reset', selectedQuery.key)\"\n >\n <i-lucide-trash /> Reset\n </UButton>\n </div>\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isDataOpen\"\n :title=\"`Data${selectedQuery.state.data === undefined ? ' (empty)' : ''}`\"\n :icon=\"IFileText\"\n :class=\"[selectedQuery.state.data === undefined && 'text-(--ui-text-muted)']\"\n no-padding\n >\n <JsonViewer :data=\"selectedQuery.state.data\" @update:value=\"handleValueUpdate\" />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isErrorOpen\"\n :title=\"`Error${selectedQuery.state.status === 'error' ? ' (!)' : '(empty)'}`\"\n :icon=\"ICircleX\"\n :class=\"[selectedQuery.state.status !== 'error' && 'text-(--ui-text-muted)']\"\n disabled\n >\n <div class=\"py-1\">\n <pre v-if=\"selectedQuery.state.error\" class=\"rounded p-1 overflow-auto max-h-[1200px]\">{{\n selectedQuery.state.error\n }}</pre>\n <p v-else class=\"text-(--ui-text-muted)/50\">No error</p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Call count\" :icon=\"ISigmaSquare\" :open=\"false\">\n <div class=\"py-1\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>Calls:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.total }}</code>\n </span>\n <span>Success:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.succeed }}</code>\n </span>\n <span>Errors:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.errored }}</code>\n </span>\n <span>Cancelled:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.cancelled }}</code>\n </span>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse\n :title=\"`History (${selectedQuery.devtools.history.length})`\"\n :icon=\"IHistory\"\n :open=\"false\"\n >\n <div class=\"py-1\">\n <UCollapse\n v-for=\"entry of selectedQuery.devtools.history\"\n :key=\"entry.updatedAt\"\n :title=\"`Entry nº${entry.id} (${formatTimeAgo(new Date(entry.updatedAt), TIME_AGO_OPTIONS)})`\"\n :open=\"false\"\n class=\"border border-neutral-200 dark:border-neutral-800\"\n >\n <JsonViewer :data=\"entry\" readonly />\n </UCollapse>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Options\" :open=\"false\" :icon=\"IBraces\" no-padding>\n <JsonViewer v-if=\"selectedQuery.options\" :data=\"selectedQuery.options\" readonly />\n <p v-else>\n This Query entry has no options. It might have been created from the server or manually\n set with\n <code>queryCache.setQueryData()</code> for prefetching.\n </p>\n </UCollapse>\n </template>\n\n <template v-else>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Query to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n <p class=\"text-center text-sm text-neutral-500 mt-4\">\n No query with key {{ route.params.queryId }} was found in the cache\n </p>\n </div>\n </template>\n </div>\n</template>\n"],"names":["formatDuration","timeInMs","seconds","minutes","route","useRoute","queries","useQueryEntries","selectedQuery","computed","entry","TIME_AGO_OPTIONS","lastUpdate","useTimeAgo","channel","useDuplexChannel","isDataOpen","useLocalStorage","wasDataOpen","lastStatus","isErrorOpen","watch","state","setNestedValue","obj","path","value","current","i","handleValueUpdate","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_createVNode","_component_UCollapse","_unref","IInfoCircle","_createElementVNode","_hoisted_2","_hoisted_3","_cache","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","formatTimeAgo","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","IWrench","_hoisted_15","_component_UButton","_component_i_lucide_refresh_cw","_component_i_lucide_timer_reset","_createBlock","_component_i_lucide_loader","_component_i_lucide_x_octagon","_component_i_lucide_rotate_ccw","_component_i_lucide_trash","$event","IFileText","_component_JsonViewer","ICircleX","_normalizeClass","_hoisted_16","_hoisted_17","_hoisted_18","ISigmaSquare","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","IHistory","_hoisted_25","IBraces","_hoisted_26","_hoisted_27","_hoisted_28","_component_i_lucide_mouse_pointer_click","_hoisted_29"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getValueTypeClass as $, formatValue as I, getValueType as ie, isNonSerializableValue as se, isPlainObject as A } from "@pinia/colada-devtools/shared";
|
|
2
|
-
import { m as c, c as o, o as a, a as n, d as P, j as O, l as re, b as f, n as h, T as ue, f as b, e as w, g as s, t as C, J as H, i as d, K as q, X as L, B as y, w as x, F as J, Y as K, Z as G, h as Q, r as ce, Q as de, $ as ve, I as he, a0 as me, P as T, q as fe, _ as pe } from "./index-
|
|
2
|
+
import { m as c, c as o, o as a, a as n, d as P, j as O, l as re, b as f, n as h, T as ue, f as b, e as w, g as s, t as C, J as H, i as d, K as q, X as L, B as y, w as x, F as J, Y as K, Z as G, h as Q, r as ce, Q as de, $ as ve, I as he, a0 as me, P as T, q as fe, _ as pe } from "./index-D0GQZaew.js";
|
|
3
3
|
const ke = {
|
|
4
4
|
viewBox: "0 0 24 24",
|
|
5
5
|
width: "1.2em",
|
|
@@ -675,4 +675,4 @@ export {
|
|
|
675
675
|
kt as f,
|
|
676
676
|
pt as g
|
|
677
677
|
};
|
|
678
|
-
//# sourceMappingURL=circle-x-
|
|
678
|
+
//# sourceMappingURL=circle-x-eNhJ6QJ3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle-x-CKUVRuJV.js","sources":["../src/panel/components/editable-json/JsonItem.vue","../src/panel/components/editable-json/JsonViewer.vue","../src/panel/components/UCollapse.ce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, useTemplateRef } from 'vue'\nimport type { JSONValue } from '@pinia/colada-devtools/shared'\nimport {\n formatValue,\n getValueTypeClass,\n isPlainObject,\n getValueType,\n isNonSerializableValue,\n} from '@pinia/colada-devtools/shared'\nimport UButton from '../UButton.ce.vue'\nimport ILucideChevronRight from '~icons/lucide/chevron-right'\nimport ILucidePencil from '~icons/lucide/pencil'\nimport ILucideSquare from '~icons/lucide/square'\nimport ILucideCheckSquare from '~icons/lucide/check-square'\nimport ILucideBraces from '~icons/lucide/braces'\nimport ILucideSave from '~icons/lucide/save'\nimport ILucideUndo from '~icons/lucide/undo'\nimport ILucideMinus from '~icons/lucide/minus'\nimport ILucidePlus from '~icons/lucide/plus'\n\nconst {\n itemKey,\n value,\n depth,\n path = [],\n readonly,\n} = defineProps<{\n itemKey: string\n value: JSONValue | Map<PropertyKey, any> | Set<unknown>\n depth: number\n path?: Array<string | number>\n readonly?: boolean\n}>()\n\n// Editing state\nconst editMode = ref<'simple' | 'json' | null>(null)\nconst editValue = ref<string>('')\nconst inputRef = useTemplateRef('inputRef')\n\n// Value type helpers\nconst valueType = computed(() => getValueType(value))\nconst isNumber = computed(() => valueType.value === 'number')\nconst isBigInt = computed(() => valueType.value === 'bigint')\nconst isString = computed(() => valueType.value === 'string')\nconst isBoolean = computed(() => valueType.value === 'boolean')\n\nconst isCustomValue = computed(() => isNonSerializableValue(value))\n\nconst isEditablePrimitive = computed(\n () => !isCustomValue.value && (isNumber.value || isString.value),\n)\n\nconst isEditableViaSimple = computed(\n () => !isCustomValue.value && (isNumber.value || isString.value),\n)\n\n// TODO: only readonly are non-editable via JSON\n// that includes readonly prop and custom values\nconst isEditableViaJson = computed(() => !isCustomValue.value && !readonly)\n\nconst isExpanded = ref(false)\n\nconst isExpandable = computed(() => {\n return (\n (Array.isArray(value) && value.length > 0) ||\n (isPlainObject(value) && Object.keys(value).length > 0) ||\n (value instanceof Map && value.size > 0) ||\n (value instanceof Set && value.size > 0)\n )\n})\n\nconst keyValuePairs = computed<Iterable<[PropertyKey, any]>>(() => {\n // for perf to avoid reading props.value multiple times\n const readValue = value\n if (Array.isArray(readValue)) {\n return readValue.map((v, i) => [i, v] as const)\n } else if (isPlainObject(readValue)) {\n return Object.entries(readValue)\n } else if (readValue instanceof Map) {\n return readValue.entries()\n } else if (readValue instanceof Set) {\n return Array.from(readValue).map((v, i) => [i, v] as const)\n }\n return []\n})\n\nconst emit = defineEmits<{\n 'update:value': [path: Array<string | number>, value: unknown]\n}>()\n\n// Editing methods\nfunction enterEditMode(mode: 'simple' | 'json' = 'simple') {\n editMode.value = mode\n\n if (mode === 'json') {\n // JSON mode: use JSON.stringify representation\n if (value === undefined) {\n editValue.value = 'undefined'\n } else {\n editValue.value = JSON.stringify(value)\n }\n } else if (mode === 'simple') {\n // most editable values work like this\n editValue.value = String(value)\n }\n\n // Auto-focus the input\n nextTick(() => {\n inputRef.value?.focus()\n })\n}\n\nfunction saveEdit() {\n let newValue: unknown\n\n if (editMode.value === 'json') {\n try {\n // cannot use JSON.parse for undefined\n if (editValue.value === 'undefined') {\n newValue = undefined\n } else {\n newValue = JSON.parse(editValue.value)\n }\n } catch (error) {\n // TODO: display a warning and stay in edit mode\n console.error('Invalid JSON:', error)\n // cancelEdit()\n return\n }\n } else {\n switch (valueType.value) {\n case 'bigint':\n try {\n newValue = BigInt(editValue.value)\n } catch (error) {\n console.error('Invalid BigInt:', error)\n // TODO: display a warning\n return\n }\n break\n case 'number':\n newValue = Number(editValue.value)\n if (Number.isNaN(newValue)) {\n console.error('Invalid number')\n // TODO: display a warning\n return\n }\n break\n default:\n newValue = editValue.value\n break\n }\n }\n\n emit('update:value', path, newValue)\n editMode.value = null\n}\n\nfunction cancelEdit() {\n editMode.value = null\n editValue.value = ''\n}\n\nfunction increment(event: MouseEvent) {\n const step = event.shiftKey ? 10 : 1\n const newValue = (value as number) + step\n emit('update:value', path, newValue)\n}\n\nfunction decrement(event: MouseEvent) {\n const step = event.shiftKey ? 10 : 1\n const newValue = (value as number) - step\n emit('update:value', path, newValue)\n}\n\nfunction toggleBoolean() {\n emit('update:value', path, !value)\n}\n\nfunction toggleExpansion() {\n if (!isExpandable.value) return\n isExpanded.value = !isExpanded.value\n}\n\n// TODO: rework the indentation of nested items, it's currently bugged: it increases too much and is too small at the beginning\n</script>\n\n<template>\n <div\n :style=\"{ paddingLeft: `${depth * 0.35}em` }\"\n class=\"ring-(--ui-bg-muted)\"\n :class=\"{\n 'hover:ring': isExpandable,\n 'rounded-tl': depth > 0,\n }\"\n >\n <div\n class=\"group flex items-center gap-2 py-0.5 bg-transparent hover:bg-(--ui-bg-muted) duration-200 transition-colors\"\n :class=\"depth > 0 && 'rounded-l'\"\n >\n <ILucideChevronRight\n v-if=\"isExpandable\"\n class=\"size-3 text-(--ui-text-dimmed) transition-transform duration-200 cursor-pointer\"\n :class=\"{ 'rotate-90': isExpanded }\"\n @click=\"toggleExpansion\"\n />\n\n <!-- Maintain alignment by adding left margin when chevron is absent -->\n <span class=\"text-(--devtools-syntax-gray)\" :class=\"!isExpandable && 'ml-5'\">\n {{ itemKey }}:\n </span>\n\n <!-- Editable primitive value -->\n <span v-if=\"!isExpandable && isEditablePrimitive\" class=\"flex\">\n <!-- Editing mode -->\n <span v-if=\"!readonly && editMode\" class=\"inline-flex items-center gap-1\">\n <input\n ref=\"inputRef\"\n v-model=\"editValue\"\n class=\"px-1\"\n :class=\"getValueTypeClass(value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n data-1p-ignore\n data-lpignore=\"true\"\n @keydown.enter=\"saveEdit\"\n @keydown.escape=\"cancelEdit\"\n />\n <UButton size=\"xs\" variant=\"outline\" title=\"Cancel changes (Esc)\" @click=\"cancelEdit\">\n <ILucideUndo class=\"size-3\" />\n </UButton>\n <UButton size=\"xs\" variant=\"outline\" title=\"Save changes (Enter)\" @click=\"saveEdit\">\n <ILucideSave class=\"size-3\" />\n </UButton>\n </span>\n\n <!-- Display mode -->\n <template v-else>\n <span\n :class=\"getValueTypeClass(value)\"\n @dblclick.stop=\"!readonly && enterEditMode('simple')\"\n >\n {{ formatValue(value) }}\n </span>\n\n <!-- Edit controls (shown on hover via Tailwind group) -->\n <span v-if=\"!readonly\" class=\"hidden group-hover:flex gap-0.5 ml-1 align-middle\">\n <UButton\n v-if=\"isNumber || isBigInt\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Decrement value (Shift for -10)\"\n @click=\"decrement\"\n >\n <ILucideMinus class=\"size-3\" />\n </UButton>\n <UButton\n v-if=\"isNumber || isBigInt\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Increment value (Shift for +10)\"\n @click=\"increment\"\n >\n <ILucidePlus class=\"size-3\" />\n </UButton>\n\n <!-- Simple edit button - only for strings and numbers -->\n <UButton\n v-if=\"isEditableViaSimple\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit value\"\n @click=\"enterEditMode('simple')\"\n >\n <ILucidePencil class=\"size-3\" />\n </UButton>\n\n <!-- JSON edit button - for all editable values -->\n <UButton\n v-if=\"isEditableViaJson\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit as JSON\"\n @click=\"enterEditMode('json')\"\n >\n <ILucideBraces class=\"size-3\" />\n </UButton>\n </span>\n </template>\n </span>\n\n <!-- Boolean value with checkbox -->\n <span\n v-else-if=\"!isExpandable && isBoolean && !isCustomValue\"\n class=\"inline-flex items-center gap-1\"\n >\n <component\n :is=\"value ? ILucideCheckSquare : ILucideSquare\"\n class=\"size-3 text-(--ui-text-muted)\"\n :class=\"!readonly && 'cursor-pointer hover:text-(--ui-text)'\"\n :title=\"readonly ? undefined : `Click to toggle (current: ${value})`\"\n @click=\"!readonly && toggleBoolean()\"\n />\n <span\n :class=\"[getValueTypeClass(value), !readonly && 'cursor-pointer']\"\n @click=\"!readonly && toggleBoolean()\"\n >\n {{ formatValue(value) }}\n </span>\n </span>\n\n <!-- Editable null/undefined with JSON mode only -->\n <span\n v-else-if=\"\n !isExpandable && (valueType === 'null' || valueType === 'undefined') && !isCustomValue\n \"\n class=\"inline\"\n >\n <!-- Editing mode -->\n <span v-if=\"!readonly && editMode\" class=\"inline-flex items-center gap-1\">\n <input\n ref=\"inputRef\"\n v-model=\"editValue\"\n class=\"px-1\"\n :class=\"getValueTypeClass(value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n data-1p-ignore\n data-lpignore=\"true\"\n @keydown.enter=\"saveEdit\"\n @keydown.escape=\"cancelEdit\"\n />\n <UButton size=\"xs\" variant=\"outline\" title=\"Cancel changes (Esc)\" @click=\"cancelEdit\">\n <ILucideUndo class=\"size-3\" />\n </UButton>\n <UButton size=\"xs\" variant=\"outline\" title=\"Save changes (Enter)\" @click=\"saveEdit\">\n <ILucideSave class=\"size-3\" />\n </UButton>\n </span>\n\n <!-- Display mode -->\n <template v-else>\n <span\n :class=\"getValueTypeClass(value)\"\n @dblclick.stop=\"!readonly && enterEditMode('json')\"\n >\n {{ formatValue(value) }}\n </span>\n\n <!-- Edit controls (JSON mode only) -->\n <span v-if=\"!readonly\" class=\"hidden group-hover:inline-flex gap-0.5 ml-1 align-middle\">\n <UButton\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit as JSON\"\n @click=\"enterEditMode('json')\"\n >\n <ILucideBraces class=\"size-3\" />\n </UButton>\n </span>\n </template>\n </span>\n\n <!-- Non-editable value (expandable or non-primitive) -->\n <span\n v-else\n :class=\"[getValueTypeClass(value), isExpandable && 'cursor-pointer']\"\n :title=\"isExpandable ? 'Click to expand' : undefined\"\n @click=\"toggleExpansion\"\n >\n {{ formatValue(value) }}\n </span>\n </div>\n\n <!-- Expanded children -->\n <template v-if=\"isExpandable && isExpanded\">\n <JsonItem\n v-for=\"[childKey, childValue] of keyValuePairs\"\n :key=\"childKey\"\n :item-key=\"String(childKey)\"\n :value=\"childValue\"\n :depth=\"depth + 1\"\n :path=\"typeof childKey === 'symbol' ? undefined : [...path, childKey]\"\n :readonly=\"readonly\"\n @update:value=\"(...args) => emit('update:value', ...args)\"\n />\n </template>\n </div>\n</template>\n","<script lang=\"ts\">\nfunction isExpandable(\n value: unknown,\n): value is unknown[] | Record<string, unknown> | Map<unknown, unknown> | Set<unknown> {\n return (\n !!value &&\n (Array.isArray(value) || isPlainObject(value) || value instanceof Map || value instanceof Set)\n )\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { formatValue, getValueTypeClass, isPlainObject } from '@pinia/colada-devtools/shared'\nimport JsonItem from './JsonItem.vue'\n\ndefineProps<{\n data: unknown\n readonly?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:value': [path: Array<string | number>, value: unknown]\n}>()\n</script>\n\n<template>\n <!-- Handle expandable items -->\n <template v-if=\"isExpandable(data)\">\n <JsonItem\n class=\"font-mono\"\n v-for=\"[key, value] in Object.entries(data)\"\n :key=\"key\"\n :item-key=\"key\"\n :value=\"value\"\n :depth=\"0\"\n :path=\"[key]\"\n :readonly\n @update:value=\"(...args) => emit('update:value', ...args)\"\n />\n </template>\n <!-- Handle primitive root values -->\n <template v-else>\n <span class=\"font-mono\" :class=\"getValueTypeClass(data)\">{{ formatValue(data) }}</span>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { Component } from 'vue'\n\ndefineProps<{\n title?: string\n icon?: Component\n noPadding?: boolean\n}>()\n\nconst open = defineModel<boolean>('open', {\n default: true,\n})\n\nfunction scrollIfNeeded(event: TransitionEvent) {\n if (event.target instanceof HTMLElement) {\n const scrollOptions: ScrollIntoViewOptions = {\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n }\n event.target.scrollIntoView(scrollOptions)\n }\n}\n</script>\n\n<template>\n <div class=\"collapse collapse-arrow\">\n <input v-model=\"open\" type=\"checkbox\" />\n <div class=\"collapse-title px-2 py-0.5 bg-neutral-200 dark:bg-neutral-800 theme-neutral\">\n <slot name=\"title\" :open :title>\n <h3 class=\"font-semibold text-sm flex gap-x-1 items-center\">\n <slot name=\"icon\">\n <component :is=\"icon\" v-if=\"icon\" class=\"size-4\" />\n </slot>\n {{ title ?? 'Group' }}\n </h3>\n </slot>\n </div>\n <div\n :class=\"!noPadding && 'px-2'\"\n class=\"collapse-content text-sm overflow-hidden\"\n @transitionend=\"scrollIfNeeded\"\n >\n <slot :open />\n </div>\n </div>\n</template>\n\n<style scoped>\n.collapse:not(td, tr, colgroup) {\n visibility: visible;\n}\n\n.collapse {\n position: relative;\n display: grid;\n overflow: hidden;\n width: 100%;\n grid-template-rows: max-content 0fr;\n transition: grid-template-rows 0.2s;\n isolation: isolate;\n\n > input:is([type='checkbox'], [type='radio']) {\n grid-column-start: 1;\n grid-row-start: 1;\n appearance: none;\n opacity: 0;\n }\n\n &:is([open], :focus),\n &:has(> input:is([type='checkbox'], [type='radio']):checked) {\n grid-template-rows: max-content 1fr;\n }\n\n &:is([open], :focus) > .collapse-content,\n &:not(.collapse-close)\n > :where(input:is([type='checkbox'], [type='radio']):checked ~ .collapse-content) {\n visibility: visible;\n min-height: fit-content;\n }\n &:focus-visible,\n &:has(> input:is([type='checkbox'], [type='radio']):focus-visible) {\n outline-color: var(--ui-text);\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n }\n\n &:not(.collapse-close) {\n > input[type='checkbox'],\n > input[type='radio']:not(:checked),\n > .collapse-title {\n cursor: pointer;\n }\n }\n\n &:focus:not(.collapse-close, .collapse[open]) > .collapse-title {\n cursor: unset;\n }\n\n &:is([open]) {\n &.collapse-arrow {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n }\n\n &.collapse-arrow:focus {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n &.collapse-arrow {\n > input:is([type='checkbox'], [type='radio']):checked ~ .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n > input:is([type='checkbox'], [type='radio']) {\n z-index: 1;\n width: 100%;\n }\n}\n\n.collapse-title,\n.collapse-content {\n grid-column-start: 1;\n grid-row-start: 1;\n}\n\n.collapse-content {\n visibility: hidden;\n grid-column-start: 1;\n grid-row-start: 2;\n min-height: 0;\n cursor: unset;\n transition: visibility 0.2s;\n}\n\n.collapse-arrow {\n > .collapse-title:after {\n position: absolute;\n display: block;\n height: 0.5rem;\n width: 0.5rem;\n transform: translateY(-100%) rotate(45deg);\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 0.2s;\n top: 50%;\n right: 0.8em;\n inset-inline-end: 0.75rem;\n content: '';\n transform-origin: 75% 75%;\n box-shadow: 2px 2px;\n pointer-events: none;\n }\n}\n\n.collapse-title {\n position: relative;\n width: 100%;\n transition: background-color 0.2s ease-out;\n}\n</style>\n"],"names":["editMode","ref","editValue","inputRef","useTemplateRef","valueType","computed","getValueType","__props","isNumber","isBigInt","isString","isBoolean","isCustomValue","isNonSerializableValue","isEditablePrimitive","isEditableViaSimple","isEditableViaJson","isExpanded","isExpandable","isPlainObject","keyValuePairs","readValue","v","i","emit","__emit","enterEditMode","mode","nextTick","saveEdit","newValue","error","cancelEdit","increment","event","step","decrement","toggleBoolean","toggleExpansion","_createElementBlock","_createElementVNode","_normalizeClass","_createBlock","_unref","ILucideChevronRight","_toDisplayString","_openBlock","_hoisted_1","_hoisted_2","$event","getValueTypeClass","_createVNode","UButton","ILucideUndo","ILucideSave","_Fragment","_cache","_withModifiers","formatValue","_hoisted_3","ILucideMinus","ILucidePlus","ILucidePencil","ILucideBraces","_hoisted_4","_resolveDynamicComponent","ILucideCheckSquare","ILucideSquare","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_renderList","childKey","childValue","_component_JsonItem","args","value","key","JsonItem","open","_useModel","scrollIfNeeded","scrollOptions","_renderSlot","_ctx","_createTextVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"circle-x-eNhJ6QJ3.js","sources":["../src/panel/components/editable-json/JsonItem.vue","../src/panel/components/editable-json/JsonViewer.vue","../src/panel/components/UCollapse.ce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, useTemplateRef } from 'vue'\nimport type { JSONValue } from '@pinia/colada-devtools/shared'\nimport {\n formatValue,\n getValueTypeClass,\n isPlainObject,\n getValueType,\n isNonSerializableValue,\n} from '@pinia/colada-devtools/shared'\nimport UButton from '../UButton.ce.vue'\nimport ILucideChevronRight from '~icons/lucide/chevron-right'\nimport ILucidePencil from '~icons/lucide/pencil'\nimport ILucideSquare from '~icons/lucide/square'\nimport ILucideCheckSquare from '~icons/lucide/check-square'\nimport ILucideBraces from '~icons/lucide/braces'\nimport ILucideSave from '~icons/lucide/save'\nimport ILucideUndo from '~icons/lucide/undo'\nimport ILucideMinus from '~icons/lucide/minus'\nimport ILucidePlus from '~icons/lucide/plus'\n\nconst {\n itemKey,\n value,\n depth,\n path = [],\n readonly,\n} = defineProps<{\n itemKey: string\n value: JSONValue | Map<PropertyKey, any> | Set<unknown>\n depth: number\n path?: Array<string | number>\n readonly?: boolean\n}>()\n\n// Editing state\nconst editMode = ref<'simple' | 'json' | null>(null)\nconst editValue = ref<string>('')\nconst inputRef = useTemplateRef('inputRef')\n\n// Value type helpers\nconst valueType = computed(() => getValueType(value))\nconst isNumber = computed(() => valueType.value === 'number')\nconst isBigInt = computed(() => valueType.value === 'bigint')\nconst isString = computed(() => valueType.value === 'string')\nconst isBoolean = computed(() => valueType.value === 'boolean')\n\nconst isCustomValue = computed(() => isNonSerializableValue(value))\n\nconst isEditablePrimitive = computed(\n () => !isCustomValue.value && (isNumber.value || isString.value),\n)\n\nconst isEditableViaSimple = computed(\n () => !isCustomValue.value && (isNumber.value || isString.value),\n)\n\n// TODO: only readonly are non-editable via JSON\n// that includes readonly prop and custom values\nconst isEditableViaJson = computed(() => !isCustomValue.value && !readonly)\n\nconst isExpanded = ref(false)\n\nconst isExpandable = computed(() => {\n return (\n (Array.isArray(value) && value.length > 0) ||\n (isPlainObject(value) && Object.keys(value).length > 0) ||\n (value instanceof Map && value.size > 0) ||\n (value instanceof Set && value.size > 0)\n )\n})\n\nconst keyValuePairs = computed<Iterable<[PropertyKey, any]>>(() => {\n // for perf to avoid reading props.value multiple times\n const readValue = value\n if (Array.isArray(readValue)) {\n return readValue.map((v, i) => [i, v] as const)\n } else if (isPlainObject(readValue)) {\n return Object.entries(readValue)\n } else if (readValue instanceof Map) {\n return readValue.entries()\n } else if (readValue instanceof Set) {\n return Array.from(readValue).map((v, i) => [i, v] as const)\n }\n return []\n})\n\nconst emit = defineEmits<{\n 'update:value': [path: Array<string | number>, value: unknown]\n}>()\n\n// Editing methods\nfunction enterEditMode(mode: 'simple' | 'json' = 'simple') {\n editMode.value = mode\n\n if (mode === 'json') {\n // JSON mode: use JSON.stringify representation\n if (value === undefined) {\n editValue.value = 'undefined'\n } else {\n editValue.value = JSON.stringify(value)\n }\n } else if (mode === 'simple') {\n // most editable values work like this\n editValue.value = String(value)\n }\n\n // Auto-focus the input\n nextTick(() => {\n inputRef.value?.focus()\n })\n}\n\nfunction saveEdit() {\n let newValue: unknown\n\n if (editMode.value === 'json') {\n try {\n // cannot use JSON.parse for undefined\n if (editValue.value === 'undefined') {\n newValue = undefined\n } else {\n newValue = JSON.parse(editValue.value)\n }\n } catch (error) {\n // TODO: display a warning and stay in edit mode\n console.error('Invalid JSON:', error)\n // cancelEdit()\n return\n }\n } else {\n switch (valueType.value) {\n case 'bigint':\n try {\n newValue = BigInt(editValue.value)\n } catch (error) {\n console.error('Invalid BigInt:', error)\n // TODO: display a warning\n return\n }\n break\n case 'number':\n newValue = Number(editValue.value)\n if (Number.isNaN(newValue)) {\n console.error('Invalid number')\n // TODO: display a warning\n return\n }\n break\n default:\n newValue = editValue.value\n break\n }\n }\n\n emit('update:value', path, newValue)\n editMode.value = null\n}\n\nfunction cancelEdit() {\n editMode.value = null\n editValue.value = ''\n}\n\nfunction increment(event: MouseEvent) {\n const step = event.shiftKey ? 10 : 1\n const newValue = (value as number) + step\n emit('update:value', path, newValue)\n}\n\nfunction decrement(event: MouseEvent) {\n const step = event.shiftKey ? 10 : 1\n const newValue = (value as number) - step\n emit('update:value', path, newValue)\n}\n\nfunction toggleBoolean() {\n emit('update:value', path, !value)\n}\n\nfunction toggleExpansion() {\n if (!isExpandable.value) return\n isExpanded.value = !isExpanded.value\n}\n\n// TODO: rework the indentation of nested items, it's currently bugged: it increases too much and is too small at the beginning\n</script>\n\n<template>\n <div\n :style=\"{ paddingLeft: `${depth * 0.35}em` }\"\n class=\"ring-(--ui-bg-muted)\"\n :class=\"{\n 'hover:ring': isExpandable,\n 'rounded-tl': depth > 0,\n }\"\n >\n <div\n class=\"group flex items-center gap-2 py-0.5 bg-transparent hover:bg-(--ui-bg-muted) duration-200 transition-colors\"\n :class=\"depth > 0 && 'rounded-l'\"\n >\n <ILucideChevronRight\n v-if=\"isExpandable\"\n class=\"size-3 text-(--ui-text-dimmed) transition-transform duration-200 cursor-pointer\"\n :class=\"{ 'rotate-90': isExpanded }\"\n @click=\"toggleExpansion\"\n />\n\n <!-- Maintain alignment by adding left margin when chevron is absent -->\n <span class=\"text-(--devtools-syntax-gray)\" :class=\"!isExpandable && 'ml-5'\">\n {{ itemKey }}:\n </span>\n\n <!-- Editable primitive value -->\n <span v-if=\"!isExpandable && isEditablePrimitive\" class=\"flex\">\n <!-- Editing mode -->\n <span v-if=\"!readonly && editMode\" class=\"inline-flex items-center gap-1\">\n <input\n ref=\"inputRef\"\n v-model=\"editValue\"\n class=\"px-1\"\n :class=\"getValueTypeClass(value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n data-1p-ignore\n data-lpignore=\"true\"\n @keydown.enter=\"saveEdit\"\n @keydown.escape=\"cancelEdit\"\n />\n <UButton size=\"xs\" variant=\"outline\" title=\"Cancel changes (Esc)\" @click=\"cancelEdit\">\n <ILucideUndo class=\"size-3\" />\n </UButton>\n <UButton size=\"xs\" variant=\"outline\" title=\"Save changes (Enter)\" @click=\"saveEdit\">\n <ILucideSave class=\"size-3\" />\n </UButton>\n </span>\n\n <!-- Display mode -->\n <template v-else>\n <span\n :class=\"getValueTypeClass(value)\"\n @dblclick.stop=\"!readonly && enterEditMode('simple')\"\n >\n {{ formatValue(value) }}\n </span>\n\n <!-- Edit controls (shown on hover via Tailwind group) -->\n <span v-if=\"!readonly\" class=\"hidden group-hover:flex gap-0.5 ml-1 align-middle\">\n <UButton\n v-if=\"isNumber || isBigInt\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Decrement value (Shift for -10)\"\n @click=\"decrement\"\n >\n <ILucideMinus class=\"size-3\" />\n </UButton>\n <UButton\n v-if=\"isNumber || isBigInt\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Increment value (Shift for +10)\"\n @click=\"increment\"\n >\n <ILucidePlus class=\"size-3\" />\n </UButton>\n\n <!-- Simple edit button - only for strings and numbers -->\n <UButton\n v-if=\"isEditableViaSimple\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit value\"\n @click=\"enterEditMode('simple')\"\n >\n <ILucidePencil class=\"size-3\" />\n </UButton>\n\n <!-- JSON edit button - for all editable values -->\n <UButton\n v-if=\"isEditableViaJson\"\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit as JSON\"\n @click=\"enterEditMode('json')\"\n >\n <ILucideBraces class=\"size-3\" />\n </UButton>\n </span>\n </template>\n </span>\n\n <!-- Boolean value with checkbox -->\n <span\n v-else-if=\"!isExpandable && isBoolean && !isCustomValue\"\n class=\"inline-flex items-center gap-1\"\n >\n <component\n :is=\"value ? ILucideCheckSquare : ILucideSquare\"\n class=\"size-3 text-(--ui-text-muted)\"\n :class=\"!readonly && 'cursor-pointer hover:text-(--ui-text)'\"\n :title=\"readonly ? undefined : `Click to toggle (current: ${value})`\"\n @click=\"!readonly && toggleBoolean()\"\n />\n <span\n :class=\"[getValueTypeClass(value), !readonly && 'cursor-pointer']\"\n @click=\"!readonly && toggleBoolean()\"\n >\n {{ formatValue(value) }}\n </span>\n </span>\n\n <!-- Editable null/undefined with JSON mode only -->\n <span\n v-else-if=\"\n !isExpandable && (valueType === 'null' || valueType === 'undefined') && !isCustomValue\n \"\n class=\"inline\"\n >\n <!-- Editing mode -->\n <span v-if=\"!readonly && editMode\" class=\"inline-flex items-center gap-1\">\n <input\n ref=\"inputRef\"\n v-model=\"editValue\"\n class=\"px-1\"\n :class=\"getValueTypeClass(value)\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n data-1p-ignore\n data-lpignore=\"true\"\n @keydown.enter=\"saveEdit\"\n @keydown.escape=\"cancelEdit\"\n />\n <UButton size=\"xs\" variant=\"outline\" title=\"Cancel changes (Esc)\" @click=\"cancelEdit\">\n <ILucideUndo class=\"size-3\" />\n </UButton>\n <UButton size=\"xs\" variant=\"outline\" title=\"Save changes (Enter)\" @click=\"saveEdit\">\n <ILucideSave class=\"size-3\" />\n </UButton>\n </span>\n\n <!-- Display mode -->\n <template v-else>\n <span\n :class=\"getValueTypeClass(value)\"\n @dblclick.stop=\"!readonly && enterEditMode('json')\"\n >\n {{ formatValue(value) }}\n </span>\n\n <!-- Edit controls (JSON mode only) -->\n <span v-if=\"!readonly\" class=\"hidden group-hover:inline-flex gap-0.5 ml-1 align-middle\">\n <UButton\n size=\"xs\"\n variant=\"outline\"\n title=\"Edit as JSON\"\n @click=\"enterEditMode('json')\"\n >\n <ILucideBraces class=\"size-3\" />\n </UButton>\n </span>\n </template>\n </span>\n\n <!-- Non-editable value (expandable or non-primitive) -->\n <span\n v-else\n :class=\"[getValueTypeClass(value), isExpandable && 'cursor-pointer']\"\n :title=\"isExpandable ? 'Click to expand' : undefined\"\n @click=\"toggleExpansion\"\n >\n {{ formatValue(value) }}\n </span>\n </div>\n\n <!-- Expanded children -->\n <template v-if=\"isExpandable && isExpanded\">\n <JsonItem\n v-for=\"[childKey, childValue] of keyValuePairs\"\n :key=\"childKey\"\n :item-key=\"String(childKey)\"\n :value=\"childValue\"\n :depth=\"depth + 1\"\n :path=\"typeof childKey === 'symbol' ? undefined : [...path, childKey]\"\n :readonly=\"readonly\"\n @update:value=\"(...args) => emit('update:value', ...args)\"\n />\n </template>\n </div>\n</template>\n","<script lang=\"ts\">\nfunction isExpandable(\n value: unknown,\n): value is unknown[] | Record<string, unknown> | Map<unknown, unknown> | Set<unknown> {\n return (\n !!value &&\n (Array.isArray(value) || isPlainObject(value) || value instanceof Map || value instanceof Set)\n )\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { formatValue, getValueTypeClass, isPlainObject } from '@pinia/colada-devtools/shared'\nimport JsonItem from './JsonItem.vue'\n\ndefineProps<{\n data: unknown\n readonly?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:value': [path: Array<string | number>, value: unknown]\n}>()\n</script>\n\n<template>\n <!-- Handle expandable items -->\n <template v-if=\"isExpandable(data)\">\n <JsonItem\n class=\"font-mono\"\n v-for=\"[key, value] in Object.entries(data)\"\n :key=\"key\"\n :item-key=\"key\"\n :value=\"value\"\n :depth=\"0\"\n :path=\"[key]\"\n :readonly\n @update:value=\"(...args) => emit('update:value', ...args)\"\n />\n </template>\n <!-- Handle primitive root values -->\n <template v-else>\n <span class=\"font-mono\" :class=\"getValueTypeClass(data)\">{{ formatValue(data) }}</span>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { Component } from 'vue'\n\ndefineProps<{\n title?: string\n icon?: Component\n noPadding?: boolean\n}>()\n\nconst open = defineModel<boolean>('open', {\n default: true,\n})\n\nfunction scrollIfNeeded(event: TransitionEvent) {\n if (event.target instanceof HTMLElement) {\n const scrollOptions: ScrollIntoViewOptions = {\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n }\n event.target.scrollIntoView(scrollOptions)\n }\n}\n</script>\n\n<template>\n <div class=\"collapse collapse-arrow\">\n <input v-model=\"open\" type=\"checkbox\" />\n <div class=\"collapse-title px-2 py-0.5 bg-neutral-200 dark:bg-neutral-800 theme-neutral\">\n <slot name=\"title\" :open :title>\n <h3 class=\"font-semibold text-sm flex gap-x-1 items-center\">\n <slot name=\"icon\">\n <component :is=\"icon\" v-if=\"icon\" class=\"size-4\" />\n </slot>\n {{ title ?? 'Group' }}\n </h3>\n </slot>\n </div>\n <div\n :class=\"!noPadding && 'px-2'\"\n class=\"collapse-content text-sm overflow-hidden\"\n @transitionend=\"scrollIfNeeded\"\n >\n <slot :open />\n </div>\n </div>\n</template>\n\n<style scoped>\n.collapse:not(td, tr, colgroup) {\n visibility: visible;\n}\n\n.collapse {\n position: relative;\n display: grid;\n overflow: hidden;\n width: 100%;\n grid-template-rows: max-content 0fr;\n transition: grid-template-rows 0.2s;\n isolation: isolate;\n\n > input:is([type='checkbox'], [type='radio']) {\n grid-column-start: 1;\n grid-row-start: 1;\n appearance: none;\n opacity: 0;\n }\n\n &:is([open], :focus),\n &:has(> input:is([type='checkbox'], [type='radio']):checked) {\n grid-template-rows: max-content 1fr;\n }\n\n &:is([open], :focus) > .collapse-content,\n &:not(.collapse-close)\n > :where(input:is([type='checkbox'], [type='radio']):checked ~ .collapse-content) {\n visibility: visible;\n min-height: fit-content;\n }\n &:focus-visible,\n &:has(> input:is([type='checkbox'], [type='radio']):focus-visible) {\n outline-color: var(--ui-text);\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n }\n\n &:not(.collapse-close) {\n > input[type='checkbox'],\n > input[type='radio']:not(:checked),\n > .collapse-title {\n cursor: pointer;\n }\n }\n\n &:focus:not(.collapse-close, .collapse[open]) > .collapse-title {\n cursor: unset;\n }\n\n &:is([open]) {\n &.collapse-arrow {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n }\n\n &.collapse-arrow:focus {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n &.collapse-arrow {\n > input:is([type='checkbox'], [type='radio']):checked ~ .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n > input:is([type='checkbox'], [type='radio']) {\n z-index: 1;\n width: 100%;\n }\n}\n\n.collapse-title,\n.collapse-content {\n grid-column-start: 1;\n grid-row-start: 1;\n}\n\n.collapse-content {\n visibility: hidden;\n grid-column-start: 1;\n grid-row-start: 2;\n min-height: 0;\n cursor: unset;\n transition: visibility 0.2s;\n}\n\n.collapse-arrow {\n > .collapse-title:after {\n position: absolute;\n display: block;\n height: 0.5rem;\n width: 0.5rem;\n transform: translateY(-100%) rotate(45deg);\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 0.2s;\n top: 50%;\n right: 0.8em;\n inset-inline-end: 0.75rem;\n content: '';\n transform-origin: 75% 75%;\n box-shadow: 2px 2px;\n pointer-events: none;\n }\n}\n\n.collapse-title {\n position: relative;\n width: 100%;\n transition: background-color 0.2s ease-out;\n}\n</style>\n"],"names":["editMode","ref","editValue","inputRef","useTemplateRef","valueType","computed","getValueType","__props","isNumber","isBigInt","isString","isBoolean","isCustomValue","isNonSerializableValue","isEditablePrimitive","isEditableViaSimple","isEditableViaJson","isExpanded","isExpandable","isPlainObject","keyValuePairs","readValue","v","i","emit","__emit","enterEditMode","mode","nextTick","saveEdit","newValue","error","cancelEdit","increment","event","step","decrement","toggleBoolean","toggleExpansion","_createElementBlock","_createElementVNode","_normalizeClass","_createBlock","_unref","ILucideChevronRight","_toDisplayString","_openBlock","_hoisted_1","_hoisted_2","$event","getValueTypeClass","_createVNode","UButton","ILucideUndo","ILucideSave","_Fragment","_cache","_withModifiers","formatValue","_hoisted_3","ILucideMinus","ILucidePlus","ILucidePencil","ILucideBraces","_hoisted_4","_resolveDynamicComponent","ILucideCheckSquare","ILucideSquare","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_renderList","childKey","childValue","_component_JsonItem","args","value","key","JsonItem","open","_useModel","scrollIfNeeded","scrollOptions","_renderSlot","_ctx","_createTextVNode"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as e, c, o as n } from "./index-
|
|
1
|
+
import { _ as e, c, o as n } from "./index-D0GQZaew.js";
|
|
2
2
|
const o = {};
|
|
3
3
|
function r(t, a) {
|
|
4
4
|
return n(), c("h1", null, "Homepage");
|
|
@@ -7,4 +7,4 @@ const _ = /* @__PURE__ */ e(o, [["render", r]]);
|
|
|
7
7
|
export {
|
|
8
8
|
_ as default
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=index-
|
|
10
|
+
//# sourceMappingURL=index-C5FekW9K.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-C5FekW9K.js","sources":["../src/panel/pages/index.vue"],"sourcesContent":["<script setup lang=\"ts\"></script>\n\n<template>\n <h1>Homepage</h1>\n</template>\n"],"names":["_openBlock","_createElementBlock"],"mappings":";;;AAGE,SAAAA,EAAA,GAAAC,EAAiB,YAAb,UAAQ;;;"}
|