@nuxt/devtools 4.0.0-alpha.17 → 4.0.0-alpha.19
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/_nuxt/{CodeDiff-DgjeLx6z.js.map.json → CodeDiff-BhzZ6fTd.js.map.json} +1 -1
- package/dist/_nuxt/{CodeSnippets-CgfcaS4Z.js.map.json → CodeSnippets-C7LxVstU.js.map.json} +1 -1
- package/dist/_nuxt/{ComposableItem-BWQR7_fI.js.map.json → ComposableItem-C0rRVuVk.js.map.json} +1 -1
- package/dist/_nuxt/{DataSchemaButton-CqEfc2TV.js.map.json → DataSchemaButton-D-t7Fd9O.js.map.json} +1 -1
- package/dist/_nuxt/{DataSchemaDrawer-Xj8YzNJN.js.map.json → DataSchemaDrawer-CRqKi4Gs.js.map.json} +1 -1
- package/dist/_nuxt/{FilepathItem-D75bkTSa.js.map.json → FilepathItem-QhFtdBo3.js.map.json} +1 -1
- package/dist/_nuxt/{HelpFab-CH7NlsDf.js.map.json → HelpFab-DsqK9feu.js.map.json} +1 -1
- package/dist/_nuxt/{LaunchPage-ByG-3KVi.js.map.json → LaunchPage-DvnAdXoI.js.map.json} +1 -1
- package/dist/_nuxt/{NCheckbox-OMIu_LTG.js.map.json → NCheckbox-C4hTNEJ1.js.map.json} +1 -1
- package/dist/_nuxt/{NDrawer-C6Opm19C.js.map.json → NDrawer-CkklqKLr.js.map.json} +1 -1
- package/dist/_nuxt/{NDropdown-DseEG3tA.js.map.json → NDropdown-CgrUsKt7.js.map.json} +1 -1
- package/dist/_nuxt/NIcon-50gk2nbO.js.map.json +1 -0
- package/dist/_nuxt/{NLink-Rsxlt1NN.js.map.json → NLink-CatISrot.js.map.json} +1 -1
- package/dist/_nuxt/{NNavbar-CS-Z1Cle.js.map.json → NNavbar-Du6Evn0c.js.map.json} +1 -1
- package/dist/_nuxt/{NSectionBlock-C7kcMkbf.js.map.json → NSectionBlock-CWogkb2Y.js.map.json} +1 -1
- package/dist/_nuxt/{NSelect-geGP1eOG.js.map.json → NSelect-C1Q6pEoo.js.map.json} +1 -1
- package/dist/_nuxt/{NSelectTabs-nUMnNQy-.js.map.json → NSelectTabs-ccruddjj.js.map.json} +1 -1
- package/dist/_nuxt/{NSplitPane-Bh0o_t5e.js.map.json → NSplitPane-CtaObqWQ.js.map.json} +1 -1
- package/dist/_nuxt/{NTip-DRnTpLjG.js.map.json → NTip-DdMJ2p97.js.map.json} +1 -1
- package/dist/_nuxt/{ServerRouteInputs-BhIrPxPN.js.map.json → ServerRouteInputs-Y1oZjFFT.js.map.json} +1 -1
- package/dist/_nuxt/{StacktraceList-B-ehJIQ-.js.map.json → StacktraceList-c-F2IS3F.js.map.json} +1 -1
- package/dist/_nuxt/{StateEditor-Yqdbqk_c.js.map.json → StateEditor-CDR7gMTz.js.map.json} +1 -1
- package/dist/_nuxt/{__blank-BM2yOFO6.js.map.json → __blank-C9tG8tKE.js.map.json} +1 -1
- package/dist/_nuxt/{analyze-build-Cemp_oBq.js.map.json → analyze-build-BqtehgeE.js.map.json} +1 -1
- package/dist/_nuxt/assets-BuVkFuYO.js.map.json +1 -0
- package/dist/_nuxt/{components-BJnHweOE.js.map.json → components-uGD7fpTl.js.map.json} +1 -1
- package/dist/_nuxt/custom-_name_-CL9ijc8K.js.map.json +1 -0
- package/dist/_nuxt/{debug-BcJZ8M6i.js.map.json → debug-D10Jwem2.js.map.json} +1 -1
- package/dist/_nuxt/entry-CqsJq8Bj.js.map.json +1 -0
- package/dist/_nuxt/{error-404-dySA7T2P.js.map.json → error-404-B3hvNTTL.js.map.json} +1 -1
- package/dist/_nuxt/{error-500-2Ody89Er.js.map.json → error-500-C707LWWo.js.map.json} +1 -1
- package/dist/_nuxt/{error-hGc4cWUU.js.map.json → error-D03t_7ms.js.map.json} +1 -1
- package/dist/_nuxt/{head-BTCtirw3.js.map.json → head-BHeO3WM1.js.map.json} +1 -1
- package/dist/_nuxt/{hooks-BVzlIVXR.js.map.json → hooks-Dao-RDzo.js.map.json} +1 -1
- package/dist/_nuxt/{imports-B3k4BZF7.js.map.json → imports-CY-qGueB.js.map.json} +1 -1
- package/dist/_nuxt/{modules-Ck915TxZ.js.map.json → modules-BTU4bGX2.js.map.json} +1 -1
- package/dist/_nuxt/nuxt-CU0ot_Hr.js.map.json +1 -0
- package/dist/_nuxt/{nuxt-link-C-BBeF5l.js.map.json → nuxt-link-DVKhBKYR.js.map.json} +1 -1
- package/dist/_nuxt/{open-graph-ll_bjX_m.js.map.json → open-graph-DrWy0sHo.js.map.json} +1 -1
- package/dist/_nuxt/overview-DMlMZwOJ.js.map.json +1 -0
- package/dist/_nuxt/{pages-CrUWMxGz.js.map.json → pages-BqpyOhlp.js.map.json} +1 -1
- package/dist/_nuxt/{pages-DWELoQlh.js.map.json → pages-Dpy3RGh8.js.map.json} +1 -1
- package/dist/_nuxt/{pages-BddDWJsZ.js.map.json → pages-SVg8-7rL.js.map.json} +1 -1
- package/dist/_nuxt/{payload-29bFuqLh.js.map.json → payload-B4tGg_yJ.js.map.json} +1 -1
- package/dist/_nuxt/{plugins-fmmRaH-S.js.map.json → plugins-sOeLpXdK.js.map.json} +1 -1
- package/dist/_nuxt/{ready-BQ1fhXgL.js.map.json → ready-DyAGZGXh.js.map.json} +1 -1
- package/dist/_nuxt/{runtime-configs-iL68LNkj.js.map.json → runtime-configs-CKsHjoDA.js.map.json} +1 -1
- package/dist/_nuxt/server-routes-Dr4xIhnL.js.map.json +1 -0
- package/dist/_nuxt/server-tasks-DVSMIJ23.js.map.json +1 -0
- package/dist/_nuxt/{settings-Qa45tU8e.js.map.json → settings-ClAb5Ncw.js.map.json} +1 -1
- package/dist/_nuxt/{state-components-CksF081b.js.map.json → state-components-CUy4qfKa.js.map.json} +1 -1
- package/dist/_nuxt/state-modules-BiTBg3sT.js.map.json +1 -0
- package/dist/_nuxt/{state-tabs-m1o-BX5R.js.map.json → state-tabs-DyXoC_gu.js.map.json} +1 -1
- package/dist/_nuxt/storage-Bl77u--J.js.map.json +1 -0
- package/dist/_nuxt/{timeline-Dukbqafi.js.map.json → timeline-RijyQyqW.js.map.json} +1 -1
- package/dist/_nuxt/utils-B-D4Pftb.js.map.json +1 -0
- package/dist/_nuxt/{virtual-files-BQJM45QE.js.map.json → virtual-files-DKOje2lN.js.map.json} +1 -1
- package/dist/_nuxt/virtual_nuxt_node_modules_.cache_nuxt_.nuxt_fetch.server-pxhz0pzP.js.map.json +1 -0
- package/dist/chunks/analyze-build.mjs +1 -1
- package/dist/chunks/module-main.mjs +92 -61
- package/dist/chunks/vite-inspect.mjs +1 -1
- package/dist/index.mjs.map.json +1 -1
- package/dist/module.json +1 -1
- package/dist/runtime/shared/hooks.d.ts +10 -2
- package/dist/server.mjs.map.json +1 -1
- package/package.json +24 -24
- package/dist/_nuxt/AuthRequiredPanel-znjaI7oT.js.map.json +0 -1
- package/dist/_nuxt/NIcon-cjduOh_B.js.map.json +0 -1
- package/dist/_nuxt/assets-rTFAaows.js.map.json +0 -1
- package/dist/_nuxt/custom-_name_-DI8dnRDD.js.map.json +0 -1
- package/dist/_nuxt/entry-DZwY6FLS.js.map.json +0 -1
- package/dist/_nuxt/nuxt-C5VITehY.js.map.json +0 -1
- package/dist/_nuxt/overview-CyqDmfdE.js.map.json +0 -1
- package/dist/_nuxt/server-routes-Dy5_Ljmu.js.map.json +0 -1
- package/dist/_nuxt/server-tasks-CD-7IPFD.js.map.json +0 -1
- package/dist/_nuxt/state-modules-CyH4hWeN.js.map.json +0 -1
- package/dist/_nuxt/storage-BylO3p9r.js.map.json +0 -1
- package/dist/_nuxt/utils-BfB0tRbX.js.map.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"timeline-Dukbqafi.js","mappings":"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","names":[],"sources":["../../../../../../../../components/TimelineItemFunction.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineItemFunction.vue","../../../../../../../../components/TimelineSegment.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineSegment.vue","../../../../../../../../composables/timeline.ts","../../../../../../../../components/TimelineTable.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineTable.vue","../../../../../../../../components/TimelineList.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineList.vue","../../../../../../../../components/TimelineArgumentView.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineArgumentView.vue","../../../../../../../../components/TimelineDetailsFunction.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineDetailsFunction.vue","../../../../../../../../components/TimelineDetailsRoute.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineDetailsRoute.vue","../../../../../../../../components/TimelineView.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineView.vue","../../../../../../../../components/docs/timeline.md","../../../../../../../../pages/modules/timeline.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../pages/modules/timeline.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEventFunction } from '../../types'\nimport { computed } from 'vue'\nimport { getHslColorFromStringHash } from '../../../devtools-ui-kit/src/composables/color'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineItemFunction',\n __ssrInlineRender: true,\n props: {\n item: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst OP_PLACEHOLDER_RE = /_op_/\n\nconst colorRaw = computed(() => getHslColorFromStringHash(props.item.name, 50, 60, '_op_'))\nconst color = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '1'))\nconst textColor = computed(() => getHslColorFromStringHash(props.item.name, 50, 40))\nconst colorBackground = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '0.2'))\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n _push(`<button${\n _ssrRenderAttrs(_mergeProps({\n class: \"group\",\n style: {\n color: color.value,\n borderLeft: `2px solid ${color.value}`,\n },\n relative: \"\",\n \"bg-base\": \"\",\n \"text-sm\": \"\",\n transition: \"\",\n \"hover:z-1000\": \"\"\n }, _attrs))\n }><div style=\"${\n _ssrRenderStyle({\n backgroundColor: colorBackground.value,\n })\n }\" absolute bottom-0 left--1px top-0 w-full text-sm transition-all duration-300></div><div style=\"${\n _ssrRenderStyle({\n 'color': textColor.value,\n '--c': color.value,\n })\n }\" border=\"r-2 t-2 y-2 transparent\" min-w-max px1 text-left group-hover=\"border-\\$c\">${\n _ssrInterpolate(__props.item.name)\n }</div></button>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventFunction } from '../../types'\nimport { computed } from 'vue'\nimport { getHslColorFromStringHash } from '../../../devtools-ui-kit/src/composables/color'\n\nconst props = defineProps<{\n item: TimelineEventFunction\n}>()\n\nconst OP_PLACEHOLDER_RE = /_op_/\n\nconst colorRaw = computed(() => getHslColorFromStringHash(props.item.name, 50, 60, '_op_'))\nconst color = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '1'))\nconst textColor = computed(() => getHslColorFromStringHash(props.item.name, 50, 40))\nconst colorBackground = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '0.2'))\n</script>\n\n<template>\n <button\n class=\"group\"\n :style=\"{\n color,\n borderLeft: `2px solid ${color}`,\n }\"\n relative bg-base text-sm transition hover:z-1000\n >\n <div\n :style=\"{\n backgroundColor: colorBackground,\n }\"\n absolute bottom-0 left--1px top-0 w-full text-sm transition-all duration-300\n />\n <div\n :style=\"{\n 'color': textColor,\n '--c': color,\n }\"\n border=\"r-2 t-2 y-2 transparent\"\n min-w-max px1 text-left group-hover=\"border-$c\"\n >\n {{ item.name }}\n </div>\n </button>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { UseTimeAgoOptions } from '@vueuse/core'\nimport type { TimelineEvent, TimelineEventNormalized, TimelineEventsSegment } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineSegment',\n __ssrInlineRender: true,\n props: {\n segment: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\nconst timeAgo = useTimeAgo(() => props.segment.start, {\n updateInterval: 1000,\n showSecond: true,\n controls: false,\n messages: ({\n justNow: '',\n past: s => s,\n future: s => s,\n invalid: '-',\n second: s => s ? `${s}s` : '',\n minute: m => `${m}m`,\n hour: h => `${h}h`,\n week: w => `${w}w`,\n day: d => `${d}d`,\n month: m => `${m}mo`,\n year: y => `${y}y`,\n } satisfies UseTimeAgoOptions<false>['messages']) as any,\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_TimelineItemFunction = _resolveComponent(\"TimelineItemFunction\")!\n\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({\n relative: \"\",\n \"h-full\": \"\"\n }, _attrs))\n }><button absolute left-0 right-0 top-0 bg-green:5 px2 py1 text-left text-xs text-green6 font-mono>${\n _ssrInterpolate(__props.segment.route?.event.to)\n }</button><div absolute left-2 top-2.3em text-xs op50>${\n _ssrInterpolate(_unref(timeAgo))\n } ago </div><div><!--[-->`)\n _ssrRenderList(__props.segment.functions, (i, idx) => {\n _push(_ssrRenderComponent(_component_TimelineItemFunction, {\n key: idx,\n item: i.event,\n style: {\n position: 'absolute',\n minWidth: `${i.relativeWidth * 100}%`,\n maxWidth: `${i.relativeWidth * 100}%`,\n top: `${4 + i.layer * 1.6}em`,\n left: `${i.relativeStart * 100}%`,\n },\n onClick: ($event: any) => (emit('select', i))\n }, null, _parent))\n })\n _push(`<!--]--></div></div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { UseTimeAgoOptions } from '@vueuse/core'\nimport type { TimelineEvent, TimelineEventNormalized, TimelineEventsSegment } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\nconst props = defineProps<{\n segment: TimelineEventsSegment\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEventNormalized<TimelineEvent>): void\n}>()\n\nconst timeAgo = useTimeAgo(() => props.segment.start, {\n updateInterval: 1000,\n showSecond: true,\n controls: false,\n messages: ({\n justNow: '',\n past: s => s,\n future: s => s,\n invalid: '-',\n second: s => s ? `${s}s` : '',\n minute: m => `${m}m`,\n hour: h => `${h}h`,\n week: w => `${w}w`,\n day: d => `${d}d`,\n month: m => `${m}mo`,\n year: y => `${y}y`,\n } satisfies UseTimeAgoOptions<false>['messages']) as any,\n})\n</script>\n\n<template>\n <div relative h-full>\n <button\n absolute left-0 right-0 top-0 bg-green:5 px2 py1 text-left text-xs text-green6 font-mono\n @click=\"segment.route ? emit('select', segment.route) : undefined\"\n >\n {{ segment.route?.event.to }}\n </button>\n <div absolute left-2 top-2.3em text-xs op50>\n {{ timeAgo }} ago\n </div>\n <div>\n <TimelineItemFunction\n v-for=\"i, idx of segment.functions\"\n :key=\"idx\"\n :item=\"i.event\"\n :style=\"{\n position: 'absolute',\n minWidth: `${i.relativeWidth * 100}%`,\n maxWidth: `${i.relativeWidth * 100}%`,\n top: `${4 + i.layer * 1.6}em`,\n left: `${i.relativeStart * 100}%`,\n }\"\n @click=\"emit('select', i)\"\n />\n </div>\n </div>\n</template>\n","import type { TimelineEvent, TimelineEventFunction, TimelineEventNormalized, TimelineEventRoute, TimelineEventsSegment } from '../../types'\n\nconst MAX_SEGMENT_DURATION = 3_000\nconst SEGMENT_END_PADDING = 50\n\nexport function segmentTimelineEvents(events: TimelineEvent[]) {\n const segments: TimelineEventsSegment[] = []\n\n let current: TimelineEventsSegment = {\n start: 0,\n end: 0,\n events: [],\n functions: [],\n duration: 0,\n }\n\n for (const event of events) {\n const end = event.end || event.start\n // Segment events by max duration or route change\n if (\n (event.start - current.end > MAX_SEGMENT_DURATION)\n || event.type === 'route'\n ) {\n current = {\n start: event.start,\n end,\n events: [],\n functions: [],\n duration: 0,\n }\n segments.push(current)\n }\n\n current.events.push(event)\n current.end = end + SEGMENT_END_PADDING\n }\n\n segments.forEach((segment, idx) => {\n const duration = segment.end - segment.start\n\n const layers: number[] = []\n\n segment.duration = duration\n segment.previousGap = idx > 0 ? segment.start - segments[idx - 1]!.end : 0\n segment.events\n .forEach((event) => {\n const end = (event.end || event.start)\n let layer = 0\n\n if (event.type !== 'route') {\n layer = layers.findIndex(layer => layer <= event.start)\n if (layer === -1) {\n layer = layers.length\n layers.push(end + 1_000)\n }\n else {\n layers[layer] = end + 1_000\n }\n }\n\n const normalized: TimelineEventNormalized<TimelineEvent> = {\n event,\n segment,\n relativeStart: (event.start - segment.start) / duration,\n relativeWidth: (end - event.start) / duration,\n layer,\n }\n\n if (event.type === 'function')\n segment.functions.push(normalized as TimelineEventNormalized<TimelineEventFunction>)\n else\n segment.route = normalized as TimelineEventNormalized<TimelineEventRoute>\n })\n })\n\n return segments\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderComponent as _ssrRenderComponent, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEvent, TimelineEventNormalized, TimelineMetrics } from '../../types'\nimport { clamp } from '@antfu/utils'\nimport { useEventListener } from '@vueuse/core'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { segmentTimelineEvents } from '~/composables/timeline'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineTable',\n __ssrInlineRender: true,\n props: {\n data: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\nconst scroller = ref<HTMLElement>()\nconst minimap = ref<HTMLElement>()\nconst minimapScroller = ref<HTMLElement>()\nconst minimapScrollerInner = ref<HTMLElement>()\nconst followScroll = ref(true)\nconst scale = ref(1.5)\n\nconst segments = computed(() => segmentTimelineEvents(props.data.events))\n\nconst scrollWidth = computed(() => {\n // eslint-disable-next-line ts/no-unused-expressions\n props.data.events.length\n return scroller.value?.scrollWidth || window.innerWidth\n})\n\nfunction syncSize() {\n if (minimapScrollerInner.value)\n minimapScrollerInner.value.style.width = `${scrollWidth.value}px`\n}\n\nfunction scrollToEnd() {\n if (followScroll.value && scroller.value) {\n // scroller.value.scrollLeft = scroller.value.scrollWidth\n // minimapScroller.value!.scrollLeft = scroller.value.scrollWidth\n\n scroller.value.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n minimapScroller.value!.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n }\n}\n\nwatch(\n () => props.data.events.length,\n async () => {\n await nextTick()\n syncSize()\n scrollToEnd()\n },\n { flush: 'post' },\n)\n\nuseEventListener(scroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n minimapScroller.value!.scrollLeft = scroller.value!.scrollLeft\n followScroll.value = scroller.value!.scrollLeft >= scroller.value!.scrollWidth - scroller.value!.clientWidth\n }\n})\nuseEventListener(minimapScroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n scroller.value!.scrollLeft = minimapScroller.value!.scrollLeft\n }\n})\nuseEventListener(scroller, 'wheel', (e: WheelEvent) => {\n if (e.altKey) {\n scale.value = clamp(scale.value + e.deltaY / 200, 0.5, 3)\n syncSize()\n }\n else {\n scroller.value!.scrollLeft += e.deltaY\n }\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n const _component_TimelineSegment = _resolveComponent(\"TimelineSegment\")!\n\n _push(`<!--[--><div relative data-v-da163089><div border=\"t b base\" relative h-50px ws-nowrap border-base data-v-da163089><!--[-->`)\n _ssrRenderList(segments.value, (segment, idx) => {\n _push(`<div relative h-full flex-inline style=\"${_ssrRenderStyle({\n width: `${Math.max(100, segment.duration / 10) / scrollWidth.value * 100}%`,\n })}\" data-v-da163089><!--[-->`)\n _ssrRenderList(segment.functions, (item, iidx) => {\n _push(`<div h-3px rounded style=\"${_ssrRenderStyle({\n width: `max(${item.relativeWidth * 100}%, 10px)`,\n position: 'absolute',\n top: `${item.layer * 4}px`,\n left: `${item.relativeStart * 100}%`,\n backgroundColor: _ctx.getHslColorFromStringHash(item.event.name, 50, 60),\n })}\" data-v-da163089></div>`)\n })\n _push(`<!--]-->`)\n if (segment.route) {\n _push(`<div absolute top-0 h-full w-px border-l border-green6 op10 style=\"${_ssrRenderStyle({\n left: `${segment.route.relativeStart * 100}%`,\n })}\" data-v-da163089></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n })\n _push(`<!--]--></div><div class=\"timeline-scroller\" absolute inset-0 h-full w-full of-x-scroll data-v-da163089><div h-1px data-v-da163089></div></div></div><div relative h-full w-full of-x-scroll of-y-hidden ws-nowrap n-panel-grids data-v-da163089><!--[-->`)\n _ssrRenderList(segments.value, (segment, idx) => {\n _push(`<!--[-->`)\n if (segment.previousGap && segment.previousGap >= 200) {\n _push(`<div border=\"x base\" h-full flex-inline bg-true-gray-1 py15 text-xs write-vertical-left op50 dark:bg-true-gray-9 data-v-da163089>`)\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n op50: \"\",\n duration: segment.previousGap,\n color: false\n }, null, _parent))\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_TimelineSegment, {\n \"flex-inline\": \"\",\n \"of-x-hidden\": \"\",\n \"bg-base\": \"\",\n \"hover:of-x-visible\": \"\",\n class: idx === segments.value.length - 1 ? 'border-r border-base' : '',\n segment: segment,\n style: {\n width: `${Math.max(50, segment.duration / 10) * scale.value}px`,\n },\n onSelect: ($event: any) => (emit('select', $event))\n }, null, _parent))\n _push(`<!--]-->`)\n })\n _push(`<!--]--></div><!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent, TimelineEventNormalized, TimelineMetrics } from '../../types'\nimport { clamp } from '@antfu/utils'\nimport { useEventListener } from '@vueuse/core'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { segmentTimelineEvents } from '~/composables/timeline'\n\nconst props = defineProps<{\n data: TimelineMetrics\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEventNormalized<TimelineEvent>): void\n}>()\n\nconst scroller = ref<HTMLElement>()\nconst minimap = ref<HTMLElement>()\nconst minimapScroller = ref<HTMLElement>()\nconst minimapScrollerInner = ref<HTMLElement>()\nconst followScroll = ref(true)\nconst scale = ref(1.5)\n\nconst segments = computed(() => segmentTimelineEvents(props.data.events))\n\nconst scrollWidth = computed(() => {\n // eslint-disable-next-line ts/no-unused-expressions\n props.data.events.length\n return scroller.value?.scrollWidth || window.innerWidth\n})\n\nfunction syncSize() {\n if (minimapScrollerInner.value)\n minimapScrollerInner.value.style.width = `${scrollWidth.value}px`\n}\n\nfunction scrollToEnd() {\n if (followScroll.value && scroller.value) {\n // scroller.value.scrollLeft = scroller.value.scrollWidth\n // minimapScroller.value!.scrollLeft = scroller.value.scrollWidth\n\n scroller.value.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n minimapScroller.value!.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n }\n}\n\nwatch(\n () => props.data.events.length,\n async () => {\n await nextTick()\n syncSize()\n scrollToEnd()\n },\n { flush: 'post' },\n)\n\nuseEventListener(scroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n minimapScroller.value!.scrollLeft = scroller.value!.scrollLeft\n followScroll.value = scroller.value!.scrollLeft >= scroller.value!.scrollWidth - scroller.value!.clientWidth\n }\n})\nuseEventListener(minimapScroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n scroller.value!.scrollLeft = minimapScroller.value!.scrollLeft\n }\n})\nuseEventListener(scroller, 'wheel', (e: WheelEvent) => {\n if (e.altKey) {\n scale.value = clamp(scale.value + e.deltaY / 200, 0.5, 3)\n syncSize()\n }\n else {\n scroller.value!.scrollLeft += e.deltaY\n }\n})\n</script>\n\n<template>\n <div relative>\n <div ref=\"minimap\" border=\"t b base\" relative h-50px ws-nowrap border-base>\n <div\n v-for=\"segment, idx of segments\"\n :key=\"idx\"\n relative h-full flex-inline\n :style=\"{\n width: `${Math.max(100, segment.duration / 10) / scrollWidth * 100}%`,\n }\"\n >\n <div\n v-for=\"item, iidx of segment.functions\"\n :key=\"iidx\"\n h-3px rounded\n :style=\"{\n width: `max(${item.relativeWidth * 100}%, 10px)`,\n position: 'absolute',\n top: `${item.layer * 4}px`,\n left: `${item.relativeStart * 100}%`,\n backgroundColor: getHslColorFromStringHash(item.event.name, 50, 60),\n }\"\n />\n <template v-if=\"segment.route\">\n <div\n absolute top-0 h-full w-px border-l border-green6 op10\n :style=\"{\n left: `${segment.route.relativeStart * 100}%`,\n }\"\n />\n </template>\n </div>\n </div>\n <div ref=\"minimapScroller\" class=\"timeline-scroller\" absolute inset-0 h-full w-full of-x-scroll>\n <div\n ref=\"minimapScrollerInner\"\n h-1px\n />\n </div>\n </div>\n <div ref=\"scroller\" relative h-full w-full of-x-scroll of-y-hidden ws-nowrap n-panel-grids>\n <template v-for=\"segment, idx of segments\" :key=\"idx\">\n <div\n v-if=\"segment.previousGap && segment.previousGap >= 200\"\n border=\"x base\"\n h-full flex-inline bg-true-gray-1 py15 text-xs write-vertical-left op50 dark:bg-true-gray-9\n >\n <DurationDisplay\n op50\n :duration=\"segment.previousGap\"\n :color=\"false\"\n />\n </div>\n <TimelineSegment\n flex-inline of-x-hidden bg-base hover:of-x-visible\n :class=\"idx === segments.length - 1 ? 'border-r border-base' : ''\"\n :segment=\"segment\"\n :style=\"{\n width: `${Math.max(50, segment.duration / 10) * scale}px`,\n }\"\n @select=\"emit('select', $event)\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n.timeline-scroller::-webkit-scrollbar {\n height: 100px;\n width: 0.1px;\n}\n\n.timeline-scroller::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n.timeline-scroller::-webkit-scrollbar-thumb {\n background-color: #8881;\n height: 100px;\n}\n.timeline-scroller:hover::-webkit-scrollbar-thumb {\n background-color: #8882;\n}\n</style>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEvent, TimelineMetrics } from '../../types'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineList',\n __ssrInlineRender: true,\n props: {\n data: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\n\n\nconst emit = __emit\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n border: \"t base\",\n flex: \"~ col\",\n \"h-full\": \"\",\n \"of-y-auto\": \"\",\n \"text-sm\": \"\"\n }, _attrs))}><!--[-->`)\n _ssrRenderList(__props.data.events, (event, idx) => {\n _push(`<button border=\"b base\" px3 py2 flex=\"~ items-center gap-2\" hover=\"bg-active\">`)\n if (event.type === 'function') {\n _push(`<!--[--><div i-carbon-function op50></div><div font-mono style=\"${\n _ssrRenderStyle({\n color: event.type === 'function'\n ? _ctx.getHslColorFromStringHash(event.name, 50, 60)\n : '',\n })\n }\">${\n _ssrInterpolate(event.name)\n }</div><div flex=\"~\" ml--1 font-mono><div op30> ( </div><!--[-->`)\n _ssrRenderList(event.args, (a, index) => {\n _push(`<!--[-->`)\n if (index) {\n _push(`<div mr2 op30> , </div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`<div op75>${_ssrInterpolate(a === null ? 'null' : a === undefined ? 'undefined' : typeof a === 'function' ? `[function]` : Array.isArray(a) ? '[Array]' : typeof a === 'object' ? '[object]' : JSON.stringify(a))}</div><!--]-->`)\n })\n _push(`<!--]--><div op30> ) </div></div><!--]-->`)\n } else {\n _push(`<!--[--><div mr-1 h-7 w-7 flex rounded-lg bg-primary:5 p1 text-green6><div i-carbon-direction-rotary-right ma text-lg></div></div><div flex=\"~ col items-start\"><div text-xs font-mono op30>${\n _ssrInterpolate(event.from)\n }</div><div text-green font-bold font-mono>${\n _ssrInterpolate(event.to)\n }</div></div><!--]-->`)\n }\n _push(`<div flex-auto></div>`)\n if (event.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: event.end - event.start,\n color: event.type === 'function'\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</button>`)\n })\n _push(`<!--]--><div min-h-100></div></div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent, TimelineMetrics } from '../../types'\n\ndefineProps<{\n data: TimelineMetrics\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEvent): void\n}>()\n</script>\n\n<template>\n <div border=\"t base\" flex=\"~ col\" h-full of-y-auto text-sm>\n <button\n v-for=\"event, idx in data.events\" :key=\"idx\"\n border=\"b base\" px3 py2\n flex=\"~ items-center gap-2\"\n hover=\"bg-active\"\n @click=\"emit('select', event)\"\n >\n <template v-if=\"event.type === 'function'\">\n <div i-carbon-function op50 />\n <div\n font-mono\n :style=\"{\n color: event.type === 'function'\n ? getHslColorFromStringHash(event.name, 50, 60)\n : '',\n }\"\n >\n {{ event.name }}\n </div>\n <div flex=\"~\" ml--1 font-mono>\n <div op30>\n (\n </div>\n <template v-for=\"a, index in event.args \" :key=\"index\">\n <div v-if=\"index\" mr2 op30>\n ,\n </div>\n <div op75>\n {{ a === null ? 'null' : a === undefined ? 'undefined' : typeof a === 'function' ? `[function]` : Array.isArray(a) ? '[Array]' : typeof a === 'object' ? '[object]' : JSON.stringify(a) }}\n </div>\n </template>\n <div op30>\n )\n </div>\n </div>\n </template>\n <template v-else>\n <div mr-1 h-7 w-7 flex rounded-lg bg-primary:5 p1 text-green6>\n <div i-carbon-direction-rotary-right ma text-lg />\n </div>\n <div flex=\"~ col items-start\">\n <div text-xs font-mono op30>\n {{ event.from }}\n </div>\n <div text-green font-bold font-mono>\n {{ event.to }}\n </div>\n </div>\n </template>\n <div flex-auto />\n <DurationDisplay\n v-if=\"event.end\"\n :duration=\"event.end - event.start\"\n :color=\"event.type === 'function'\"\n />\n </button>\n <div min-h-100 />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps, resolveComponent as _resolveComponent, unref as _unref, withCtx as _withCtx, createTextVNode as _createTextVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\nimport { ssrRenderAttrs as _ssrRenderAttrs, ssrRenderClass as _ssrRenderClass, ssrRenderComponent as _ssrRenderComponent, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport JsonEditorVue from 'json-editor-vue'\nimport { defineComponent, ref } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useCopy } from '~/composables/editor'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineArgumentView',\n __ssrInlineRender: true,\n props: {\n value: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst clone = ref<any>()\nconst error = ref<any>()\n\nfunction doClone() {\n try {\n clone.value = JSON.parse(JSON.stringify(props.value))\n }\n catch (e) {\n console.error(e)\n error.value = e\n }\n}\n\nconst OnSetup = defineComponent({\n emits: ['setup'],\n setup(_, { emit }) {\n emit('setup')\n return () => null\n },\n})\n\nconst colorMode = getColorMode()\nconst copy = useCopy()\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VMenu = _resolveComponent(\"VMenu\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n\n if ((typeof __props.value === 'string')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-blue\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(JSON.stringify(__props.value))\n }</div>`)\n } else if ((typeof __props.value === 'number')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-purple\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(__props.value)\n }</div>`)\n } else if ((typeof __props.value === 'boolean')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-green\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(__props.value)\n }</div>`)\n } else if ((typeof __props.value === 'undefined')) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))}> undefined </div>`)\n } else if ((typeof __props.value === 'function')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))\n }> [Function${\n _ssrInterpolate(__props.value.name ? `: ${__props.value.name}` : '')\n }] </div>`)\n } else if (__props.value === null) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))}> null </div>`)\n } else {\n _push(_ssrRenderComponent(_component_VMenu, _mergeProps({ placement: \"top\" }, _attrs), {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_unref(OnSetup), { onSetup: doClone }, null, _parent, _scopeId))\n if (error.value) {\n _push(`<div bg-red:10 px2 py1 text-red${\n _scopeId\n }> Failed to display object: ${\n _ssrInterpolate(error.value)\n }</div>`)\n } else if (clone.value) {\n _push(`<div${_scopeId}>`)\n _push(_ssrRenderComponent(_unref(JsonEditorVue), _mergeProps({ \"model-value\": clone.value }, _ctx.$attrs, {\n class: [\"json-editor-vue\", [\n _unref(colorMode) === 'dark' ? 'jse-theme-dark' : '',\n ]],\n \"main-menu-bar\": false,\n \"navigation-bar\": false,\n \"status-bar\": false,\n \"read-only\": true,\n indentation: 2,\n \"tab-size\": 2\n }), null, _parent, _scopeId))\n _push(`<div p2 text-sm border=\"t base\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Copy to clipboard\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(JSON.stringify(clone.value, null, 2), 'timeline-argument'))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Copy `)\n } else {\n return [\n _createTextVNode(\" Copy \")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n _push(`<!---->`)\n }\n } else {\n return [\n _createVNode(_unref(OnSetup), { onSetup: doClone }),\n (error.value)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n \"bg-red:10\": \"\",\n px2: \"\",\n py1: \"\",\n \"text-red\": \"\"\n }, \" Failed to display object: \" + _toDisplayString(error.value), 1))\n : (clone.value)\n ? (_openBlock(), _createBlock(\"div\", { key: 1 }, [\n _createVNode(_unref(JsonEditorVue), _mergeProps({ \"model-value\": clone.value }, _ctx.$attrs, {\n class: [\"json-editor-vue\", [\n _unref(colorMode) === 'dark' ? 'jse-theme-dark' : '',\n ]],\n \"main-menu-bar\": false,\n \"navigation-bar\": false,\n \"status-bar\": false,\n \"read-only\": true,\n indentation: 2,\n \"tab-size\": 2\n }), null, 16, [\"model-value\", \"class\"]),\n _createVNode(\"div\", {\n p2: \"\",\n \"text-sm\": \"\",\n border: \"t base\"\n }, [\n _createVNode(_component_NButton, {\n title: \"Copy to clipboard\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(JSON.stringify(clone.value, null, 2), 'timeline-argument'))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Copy \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span rounded-sm px1 py0.5 text-sm class=\"${\n _ssrRenderClass([\n Array.isArray(__props.value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ])\n }\"${\n _scopeId\n }>${\n _ssrInterpolate(Array.isArray(__props.value) ? `[Array(${__props.value.length})]` : `[Object]`)\n }</span>`)\n } else {\n return [\n _createVNode(\"span\", {\n \"rounded-sm\": \"\",\n px1: \"\",\n \"py0.5\": \"\",\n \"text-sm\": \"\",\n class: [\n Array.isArray(__props.value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ]\n }, _toDisplayString(Array.isArray(__props.value) ? `[Array(${__props.value.length})]` : `[Object]`), 3)\n ]\n }\n }),\n _: 1\n }, _parent))\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport JsonEditorVue from 'json-editor-vue'\nimport { defineComponent, ref } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useCopy } from '~/composables/editor'\n\nconst props = defineProps<{\n value: any\n}>()\n\nconst clone = ref<any>()\nconst error = ref<any>()\n\nfunction doClone() {\n try {\n clone.value = JSON.parse(JSON.stringify(props.value))\n }\n catch (e) {\n console.error(e)\n error.value = e\n }\n}\n\nconst OnSetup = defineComponent({\n emits: ['setup'],\n setup(_, { emit }) {\n emit('setup')\n return () => null\n },\n})\n\nconst colorMode = getColorMode()\nconst copy = useCopy()\n</script>\n\n<template>\n <div v-if=\"(typeof value === 'string')\" text-blue>\n {{ JSON.stringify(value) }}\n </div>\n <div v-else-if=\"(typeof value === 'number')\" text-purple>\n {{ value }}\n </div>\n <div v-else-if=\"(typeof value === 'boolean')\" text-green>\n {{ value }}\n </div>\n <div v-else-if=\"(typeof value === 'undefined')\" text-gray>\n undefined\n </div>\n <div v-else-if=\"(typeof value === 'function')\" text-gray>\n [Function{{ value.name ? `: ${value.name}` : '' }}]\n </div>\n <div v-else-if=\"value === null\" text-gray>\n null\n </div>\n <template v-else>\n <VMenu placement=\"top\">\n <span\n rounded-sm px1 py0.5 text-sm\n :class=\"[\n Array.isArray(value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ]\"\n >\n {{ Array.isArray(value) ? `[Array(${value.length})]` : `[Object]` }}\n </span>\n <template #popper>\n <OnSetup @setup=\"doClone\" />\n <div v-if=\"error\" bg-red:10 px2 py1 text-red>\n Failed to display object: {{ error }}\n </div>\n <div v-else-if=\"clone\">\n <JsonEditorVue\n :model-value=\"clone\"\n v-bind=\"$attrs\"\n class=\"json-editor-vue\"\n :class=\"[\n colorMode === 'dark' ? 'jse-theme-dark' : '',\n ]\"\n :main-menu-bar=\"false\"\n :navigation-bar=\"false\"\n :status-bar=\"false\"\n :read-only=\"true\"\n :indentation=\"2\"\n :tab-size=\"2\"\n />\n <div p2 text-sm border=\"t base\">\n <NButton\n title=\"Copy to clipboard\"\n icon=\"carbon-copy\"\n @click=\"copy(JSON.stringify(clone, null, 2), 'timeline-argument')\"\n >\n Copy\n </NButton>\n </div>\n </div>\n </template>\n </VMenu>\n </template>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEventFunction } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useAutoImports } from '~/composables/state'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineDetailsFunction',\n __ssrInlineRender: true,\n props: {\n record: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nconst autoImports = useAutoImports()\nconst importsMetadata = computed(() => autoImports.value?.metadata)\nconst importItem = computed(() => {\n return autoImports.value?.imports.find(i => i.as === props.record.name)\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_ComposableItem = _resolveComponent(\"ComposableItem\")!\n const _component_TimelineArgumentView = _resolveComponent(\"TimelineArgumentView\")!\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n const _component_StacktraceList = _resolveComponent(\"StacktraceList\")!\n\n if (__props.record) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"p-4\": \"\",\n flex: \"~ col gap-2\",\n \"text-base\": \"\"\n }, _attrs))}><div mx--1>`)\n _push(_ssrRenderComponent(_component_NBadge, { n: \"yellow\" }, null, _parent))\n _push(`</div><div flex=\"~ gap-1\" font-mono>`)\n if (importItem.value) {\n _push(_ssrRenderComponent(_component_ComposableItem, {\n item: importItem.value,\n metadata: importsMetadata.value,\n counter: false,\n classes: \"px2 py1\",\n \"mx--2\": \"\"\n }, null, _parent))\n } else {\n _push(`<span>${_ssrInterpolate(__props.record.name)}</span>`)\n }\n _push(`<span ml1 op30>(</span><!--[-->`)\n _ssrRenderList(__props.record.args, (arg, idx) => {\n _push(`<!--[-->`)\n if (idx) {\n _push(`<span op30>, </span>`)\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_TimelineArgumentView, { value: arg }, null, _parent))\n _push(`<!--]-->`)\n })\n _push(`<!--]--><span op30>)</span></div><div flex=\"~ gap-1\" text-sm>`)\n if (__props.record.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: __props.record.end - __props.record.start\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<span mx1 op50>·</span><div class=\"text-sm text-gray-400\">${_ssrInterpolate(_unref(timeAgo))}</div></div>`)\n if (__props.record.stacktrace) {\n _push(_ssrRenderComponent(_component_StacktraceList, {\n stacktrace: __props.record.stacktrace,\n class: \"text-xs text-gray-400\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventFunction } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useAutoImports } from '~/composables/state'\n\nconst props = defineProps<{\n record: TimelineEventFunction\n}>()\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nconst autoImports = useAutoImports()\nconst importsMetadata = computed(() => autoImports.value?.metadata)\nconst importItem = computed(() => {\n return autoImports.value?.imports.find(i => i.as === props.record.name)\n})\n</script>\n\n<template>\n <div v-if=\"record\" p-4 flex=\"~ col gap-2\" text-base>\n <div mx--1>\n <NBadge n=\"yellow\" v-text=\"'Function call'\" />\n </div>\n <div flex=\"~ gap-1\" font-mono>\n <ComposableItem\n v-if=\"importItem\"\n :item=\"importItem\"\n :metadata=\"importsMetadata\"\n :counter=\"false\"\n classes=\"px2 py1\"\n mx--2\n />\n <span v-else>{{ record.name }}</span>\n <span ml1 op30>(</span>\n <template v-for=\"arg, idx in record.args\" :key=\"idx\">\n <span v-if=\"idx\" op30>, </span>\n <TimelineArgumentView :value=\"arg\" />\n </template>\n <span op30>)</span>\n </div>\n\n <div flex=\"~ gap-1\" text-sm>\n <DurationDisplay\n v-if=\"record.end\"\n :duration=\"record.end - record.start\"\n />\n <span mx1 op50>·</span>\n <div class=\"text-sm text-gray-400\">\n {{ timeAgo }}\n </div>\n </div>\n\n <StacktraceList\n v-if=\"record.stacktrace\" :stacktrace=\"record.stacktrace\"\n class=\"text-xs text-gray-400\"\n />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEventRoute } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineDetailsRoute',\n __ssrInlineRender: true,\n props: {\n record: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n\n if (__props.record) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"p-4\": \"\",\n flex: \"~ col gap-2\"\n }, _attrs))}><div mx--1>`)\n _push(_ssrRenderComponent(_component_NBadge, { n: \"green\" }, null, _parent))\n _push(`</div><div flex=\"~ gap-1 items-center\" font-mono><span op50>${\n _ssrInterpolate(__props.record.from)\n }</span><span i-carbon-arrow-right op50></span><span>${\n _ssrInterpolate(__props.record.to)\n }</span></div><div flex=\"~ gap-1\" text-sm>`)\n if (__props.record.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: __props.record.end - __props.record.start\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<span mx1 op50>·</span><div class=\"text-sm text-gray-400\">${_ssrInterpolate(_unref(timeAgo))}</div></div></div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventRoute } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\nconst props = defineProps<{\n record: TimelineEventRoute\n}>()\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n</script>\n\n<template>\n <div v-if=\"record\" p-4 flex=\"~ col gap-2\">\n <div mx--1>\n <NBadge n=\"green\" v-text=\"'Route Change'\" />\n </div>\n <div flex=\"~ gap-1 items-center\" font-mono>\n <span op50>{{ record.from }}</span>\n <span i-carbon-arrow-right op50 />\n <span>{{ record.to }}</span>\n </div>\n\n <div flex=\"~ gap-1\" text-sm>\n <DurationDisplay\n v-if=\"record.end\"\n :duration=\"record.end - record.start\"\n />\n <span mx1 op50>·</span>\n <div class=\"text-sm text-gray-400\">\n {{ timeAgo }}\n </div>\n </div>\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, toDisplayString as _toDisplayString, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderClass as _ssrRenderClass, ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEvent } from '../../types'\nimport { computed, ref } from 'vue'\nimport { useClient } from '~/composables/client'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineView',\n __ssrInlineRender: true,\n setup(__props) {\n\nconst client = useClient()\n\nconst view = ref<'table' | 'list'>('table')\nconst selected = ref<TimelineEvent | undefined>()\n\nconst metrics = computed(() => client.value?.metrics.clientTimeline())\n\nfunction clear() {\n if (metrics.value)\n metrics.value.events = []\n}\n\nfunction toggleView() {\n view.value = view.value === 'table' ? 'list' : 'table'\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VTooltip = _resolveComponent(\"VTooltip\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_TimelineTable = _resolveComponent(\"TimelineTable\")!\n const _component_TimelineList = _resolveComponent(\"TimelineList\")!\n const _component_NDrawer = _resolveComponent(\"NDrawer\")!\n const _component_TimelineDetailsFunction = _resolveComponent(\"TimelineDetailsFunction\")!\n const _component_TimelineDetailsRoute = _resolveComponent(\"TimelineDetailsRoute\")!\n\n if (metrics.value) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"h-screen\": \"\",\n \"of-hidden\": \"\"\n }, _attrs))}><div h-screen w-full flex flex-col><div h-10 flex=\"~ gap-2 items-center justify-end\" p2 px3>`)\n _push(_ssrRenderComponent(_component_VTooltip, { flex: \"\" }, {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div text-sm${\n _scopeId\n }>${\n _ssrInterpolate(metrics.value.options.enabled ? 'Recording...' : 'Paused')\n }</div>`)\n } else {\n return [\n _createVNode(\"div\", { \"text-sm\": \"\" }, _toDisplayString(metrics.value.options.enabled ? 'Recording...' : 'Paused'), 1)\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div text-lg class=\"${\n _ssrRenderClass(metrics.value.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30')\n }\"${\n _scopeId\n }></div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"text-lg\": \"\",\n class: metrics.value.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30'\n }, null, 2)\n ]\n }\n }),\n _: 1\n }, _parent))\n if (!metrics.value.options.enabled) {\n _push(_ssrRenderComponent(_component_NButton, {\n size: \"small\",\n ml1: \"\",\n \"text-sm\": \"\",\n n: \"primary\",\n icon: \"i-carbon-play\",\n onClick: ($event: any) => (metrics.value.options.enabled = true)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Start Tracking `)\n } else {\n return [\n _createTextVNode(\" Start Tracking \")\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(_ssrRenderComponent(_component_NButton, {\n size: \"small\",\n ml1: \"\",\n \"text-sm\": \"\",\n n: \"orange\",\n icon: \"i-carbon-stop\",\n onClick: ($event: any) => (metrics.value.options.enabled = false)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Stop Tracking `)\n } else {\n return [\n _createTextVNode(\" Stop Tracking \")\n ]\n }\n }),\n _: 1\n }, _parent))\n }\n _push(`<div flex-auto></div>`)\n _push(_ssrRenderComponent(_component_NButton, {\n icon: view.value === 'table' ? 'i-carbon-roadmap' : 'i-carbon-list',\n class: \"ml-2\",\n title: \"Toggle View\",\n border: false,\n onClick: toggleView\n }, null, _parent))\n _push(_ssrRenderComponent(_component_NButton, {\n icon: \"i-carbon-trash-can\",\n \"hover-text-red\": \"\",\n class: \"ml-2\",\n border: false,\n onClick: clear\n }, null, _parent))\n _push(`</div>`)\n if (view.value === 'table') {\n _push(_ssrRenderComponent(_component_TimelineTable, {\n data: { ...metrics.value },\n onSelect: s => selected.value = s.event\n }, null, _parent))\n } else {\n _push(_ssrRenderComponent(_component_TimelineList, {\n data: { ...metrics.value },\n onSelect: s => selected.value = s\n }, null, _parent))\n }\n _push(`</div>`)\n _push(_ssrRenderComponent(_component_NDrawer, {\n \"model-value\": !!selected.value,\n \"auto-close\": \"\",\n transition: \"bottom\",\n onClose: ($event: any) => (selected.value = undefined)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div min-h-50 px3 py2${_scopeId}>`)\n if (selected.value?.type === 'function') {\n _push(_ssrRenderComponent(_component_TimelineDetailsFunction, { record: selected.value }, null, _parent, _scopeId))\n } else if (selected.value?.type === 'route') {\n _push(_ssrRenderComponent(_component_TimelineDetailsRoute, { record: selected.value }, null, _parent, _scopeId))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"min-h-50\": \"\",\n px3: \"\",\n py2: \"\"\n }, [\n (selected.value?.type === 'function')\n ? (_openBlock(), _createBlock(_component_TimelineDetailsFunction, {\n key: 0,\n record: selected.value\n }, null, 8, [\"record\"]))\n : (selected.value?.type === 'route')\n ? (_openBlock(), _createBlock(_component_TimelineDetailsRoute, {\n key: 1,\n record: selected.value\n }, null, 8, [\"record\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent } from '../../types'\nimport { computed, ref } from 'vue'\nimport { useClient } from '~/composables/client'\n\nconst client = useClient()\n\nconst view = ref<'table' | 'list'>('table')\nconst selected = ref<TimelineEvent | undefined>()\n\nconst metrics = computed(() => client.value?.metrics.clientTimeline())\n\nfunction clear() {\n if (metrics.value)\n metrics.value.events = []\n}\n\nfunction toggleView() {\n view.value = view.value === 'table' ? 'list' : 'table'\n}\n</script>\n\n<template>\n <div v-if=\"metrics\" h-screen of-hidden>\n <div h-screen w-full flex flex-col>\n <div h-10 flex=\"~ gap-2 items-center justify-end\" p2 px3>\n <VTooltip flex>\n <div\n text-lg\n :class=\"metrics.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30'\"\n />\n <template #popper>\n <div text-sm>\n {{ metrics.options.enabled ? 'Recording...' : 'Paused' }}\n </div>\n </template>\n </VTooltip>\n\n <NButton\n v-if=\"!metrics.options.enabled\"\n size=\"small\" ml1 text-sm\n n=\"primary\"\n icon=\"i-carbon-play\"\n @click=\"metrics.options.enabled = true\"\n >\n Start Tracking\n </NButton>\n <NButton\n v-else\n size=\"small\" ml1 text-sm\n n=\"orange\"\n icon=\"i-carbon-stop\"\n @click=\"metrics.options.enabled = false\"\n >\n Stop Tracking\n </NButton>\n <!-- <template v-if=\"metrics.options.enabled\">\n <NCheckbox\n v-model=\"metrics.options.stacktrace\"\n label=\"Enabled\"\n class=\"text-sm\"\n >\n Record stacktrace\n </NCheckbox>\n <NCheckbox\n v-model=\"metrics.options.arguments\"\n label=\"Enabled\"\n class=\"text-sm\"\n >\n Record arguments\n </NCheckbox>\n </template> -->\n <div flex-auto />\n <NButton\n :icon=\"view === 'table' ? 'i-carbon-roadmap' : 'i-carbon-list'\"\n class=\"ml-2\"\n title=\"Toggle View\"\n :border=\"false\"\n @click=\"toggleView\"\n />\n <NButton\n icon=\"i-carbon-trash-can\"\n hover-text-red\n class=\"ml-2\"\n :border=\"false\"\n @click=\"clear\"\n />\n </div>\n <TimelineTable\n v-if=\"view === 'table'\"\n :data=\"{ ...metrics }\"\n @select=\"s => selected = s.event\"\n />\n <TimelineList\n v-else\n :data=\"{ ...metrics }\"\n @select=\"s => selected = s\"\n />\n </div>\n <NDrawer\n :model-value=\"!!selected\"\n auto-close\n transition=\"bottom\"\n @close=\"selected = undefined\"\n >\n <div min-h-50 px3 py2>\n <TimelineDetailsFunction v-if=\"selected?.type === 'function'\" :record=\"selected\" />\n <TimelineDetailsRoute v-else-if=\"selected?.type === 'route'\" :record=\"selected\" />\n </div>\n </NDrawer>\n </div>\n</template>\n","# Timeline\n\n<blockquote text-orange bg-orange:10 py1>\nThis is an experimental feature\n</blockquote>\n\nTimeline tracks your route navigations and functions calls in your Nuxt application. It can be used to debug performance issues and to understand how your application works.\n\n## Function calls\n\nNuxt DevTools tracks function calls by wrapping them in the build time. It works for functions referenced by auto-imports, or explicit imports through `import {} from '#imports'`.\n\n```vue\n<script setup>\nimport { useMouse } from '@vueuse/core'\nimport { useRoute } from '#app/composables/router'\nimport { useNuxtApp } from '#imports'\n\nconst route = useRoute() // tracked\nconst app = useNuxtApp() // tracked\n\n// NOT tracked because it's directly imported\nconst mouse = useMouse()\n</script>\n```\n\nBy default, it tracks Nuxt provided composables as well as user defined functions. You can include/exclude functions by using the `include` and `exclude` options in the `nuxt.config.js` file.\n\n```js\nexport default defineNuxtConfig({\n devtools: {\n timeline: {\n functions: {\n include: [\n // track `useMouse`\n 'useMouse',\n // track all functions starting with `use`\n /^use[A-Z]/,\n // track all functions from @vueuse/core\n entry => entry.from === '@vueuse/core',\n ],\n exclude: [\n 'useRouter'\n ]\n }\n }\n }\n})\n```\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent } from \"vue/server-renderer\"\n\nimport { createTemplatePromise } from '@vueuse/core'\nimport { definePageMeta, devtoolsUiShowNotification } from '#imports'\nimport { useOpenInEditor } from '~/composables/editor'\nimport { rpc } from '~/composables/rpc'\nimport { useModuleOptions, useServerConfig } from '~/composables/state'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'timeline',\n __ssrInlineRender: true,\n setup(__props) {\n\ndefinePageMeta({\n icon: 'i-carbon-roadmap',\n title: 'Timeline',\n category: 'analyze',\n})\n\nconst options = useModuleOptions()\nconst config = useServerConfig()\n\nconst Dialog = createTemplatePromise<boolean, [string, string]>()\n\nconst openInEditor = useOpenInEditor()\n\nasync function showPopup() {\n try {\n const [source, modified] = await rpc.enableTimeline(true)\n if (!await Dialog.start(source, modified))\n return\n await rpc.enableTimeline(false)\n }\n catch {\n devtoolsUiShowNotification({\n message: 'Failed to enable timeline automatically. Check the terminal for more details.',\n icon: 'i-carbon-warning',\n classes: 'text-red',\n })\n }\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_TimelineView = _resolveComponent(\"TimelineView\")!\n const _component_NPanelGrids = _resolveComponent(\"NPanelGrids\")!\n const _component_LaunchPage = _resolveComponent(\"LaunchPage\")!\n const _component_NDialog = _resolveComponent(\"NDialog\")!\n const _component_NLink = _resolveComponent(\"NLink\")!\n const _component_CodeDiff = _resolveComponent(\"CodeDiff\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_HelpFab = _resolveComponent(\"HelpFab\")!\n const _component_DocsTimeline = _resolveComponent(\"DocsTimeline\")!\n\n _push(`<!--[-->`)\n if (_unref(options)?.timeline?.enabled) {\n _push(_ssrRenderComponent(_component_TimelineView, null, null, _parent))\n } else {\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NPanelGrids, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_LaunchPage, {\n icon: \"i-carbon-roadmap\",\n name: \"feature-timeline\",\n title: \"Timeline\",\n description: \"Timeline enables the inspection of when composable being executed and the route changes.\",\n actions: [\n {\n label: 'Enable',\n },\n ],\n onAction: showPopup\n }, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_LaunchPage, {\n icon: \"i-carbon-roadmap\",\n name: \"feature-timeline\",\n title: \"Timeline\",\n description: \"Timeline enables the inspection of when composable being executed and the route changes.\",\n actions: [\n {\n label: 'Enable',\n },\n ],\n onAction: showPopup\n })\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(_ssrRenderComponent(_unref(Dialog), null, {\n default: _withCtx(({ resolve, args }, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_NDialog, {\n \"model-value\": true,\n onClose: ($event: any) => (resolve(false))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ col gap-2\" w-150 p4 border=\"t base\"${\n _scopeId\n }><h2 text-xl${\n _scopeId\n }><span capitalize${\n _scopeId\n }>Enable Timeline?</span></h2><p op50${\n _scopeId\n }> Your `)\n _push(_ssrRenderComponent(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile))\n }, null, _parent, _scopeId))\n _push(` will be updated as: </p>`)\n _push(_ssrRenderComponent(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, _parent, _scopeId))\n _push(`<p${\n _scopeId\n }><span op50${\n _scopeId\n }>Then Nuxt will </span><span text-orange${\n _scopeId\n }>restart automatically</span>. </p><div flex=\"~ gap-3\" mt2 justify-end${\n _scopeId\n }>`)\n _push(_ssrRenderComponent(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Cancel `)\n } else {\n return [\n _createTextVNode(\" Cancel \")\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Enable `)\n } else {\n return [\n _createTextVNode(\" Enable \")\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n return [\n _createVNode(\"div\", {\n flex: \"~ col gap-2\",\n \"w-150\": \"\",\n p4: \"\",\n border: \"t base\"\n }, [\n _createVNode(\"h2\", { \"text-xl\": \"\" }, [\n _createVNode(\"span\", { capitalize: \"\" }, \"Enable Timeline?\")\n ]),\n _createVNode(\"p\", { op50: \"\" }, [\n _createTextVNode(\" Your \"),\n _createVNode(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile)),\n textContent: 'Nuxt config'\n }, null, 8, [\"onClick\"]),\n _createTextVNode(\" will be updated as: \")\n ]),\n _createVNode(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, 8, [\"from\", \"to\"]),\n _createVNode(\"p\", null, [\n _createVNode(\"span\", { op50: \"\" }, \"Then Nuxt will \"),\n _createVNode(\"span\", { \"text-orange\": \"\" }, \"restart automatically\"),\n _createTextVNode(\". \")\n ]),\n _createVNode(\"div\", {\n flex: \"~ gap-3\",\n mt2: \"\",\n \"justify-end\": \"\"\n }, [\n _createVNode(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Cancel \")\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n _createVNode(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Enable \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ])\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_NDialog, {\n \"model-value\": true,\n onClose: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", {\n flex: \"~ col gap-2\",\n \"w-150\": \"\",\n p4: \"\",\n border: \"t base\"\n }, [\n _createVNode(\"h2\", { \"text-xl\": \"\" }, [\n _createVNode(\"span\", { capitalize: \"\" }, \"Enable Timeline?\")\n ]),\n _createVNode(\"p\", { op50: \"\" }, [\n _createTextVNode(\" Your \"),\n _createVNode(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile)),\n textContent: 'Nuxt config'\n }, null, 8, [\"onClick\"]),\n _createTextVNode(\" will be updated as: \")\n ]),\n _createVNode(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, 8, [\"from\", \"to\"]),\n _createVNode(\"p\", null, [\n _createVNode(\"span\", { op50: \"\" }, \"Then Nuxt will \"),\n _createVNode(\"span\", { \"text-orange\": \"\" }, \"restart automatically\"),\n _createTextVNode(\". \")\n ]),\n _createVNode(\"div\", {\n flex: \"~ gap-3\",\n mt2: \"\",\n \"justify-end\": \"\"\n }, [\n _createVNode(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Cancel \")\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n _createVNode(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Enable \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ])\n ]),\n _: 2\n }, 1032, [\"onClose\"])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n }\n _push(_ssrRenderComponent(_component_HelpFab, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_DocsTimeline, null, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_DocsTimeline)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport { createTemplatePromise } from '@vueuse/core'\nimport { definePageMeta, devtoolsUiShowNotification } from '#imports'\nimport { useOpenInEditor } from '~/composables/editor'\nimport { rpc } from '~/composables/rpc'\nimport { useModuleOptions, useServerConfig } from '~/composables/state'\n\ndefinePageMeta({\n icon: 'i-carbon-roadmap',\n title: 'Timeline',\n category: 'analyze',\n})\n\nconst options = useModuleOptions()\nconst config = useServerConfig()\n\nconst Dialog = createTemplatePromise<boolean, [string, string]>()\n\nconst openInEditor = useOpenInEditor()\n\nasync function showPopup() {\n try {\n const [source, modified] = await rpc.enableTimeline(true)\n if (!await Dialog.start(source, modified))\n return\n await rpc.enableTimeline(false)\n }\n catch {\n devtoolsUiShowNotification({\n message: 'Failed to enable timeline automatically. Check the terminal for more details.',\n icon: 'i-carbon-warning',\n classes: 'text-red',\n })\n }\n}\n</script>\n\n<template>\n <TimelineView v-if=\"options?.timeline?.enabled\" />\n <template v-else>\n <NPanelGrids>\n <LaunchPage\n icon=\"i-carbon-roadmap\"\n name=\"feature-timeline\"\n title=\"Timeline\"\n description=\"Timeline enables the inspection of when composable being executed and the route changes.\"\n :actions=\"[\n {\n label: 'Enable',\n },\n ]\"\n @action=\"showPopup\"\n />\n </NPanelGrids>\n <Dialog v-slot=\"{ resolve, args }\">\n <NDialog :model-value=\"true\" @close=\"resolve(false)\">\n <div flex=\"~ col gap-2\" w-150 p4 border=\"t base\">\n <h2 text-xl>\n <span capitalize>Enable Timeline?</span>\n </h2>\n\n <p op50>\n Your <NLink\n role=\"button\" n=\"primary\" underline\n @click=\"openInEditor(config?._nuxtConfigFile)\"\n v-text=\"'Nuxt config'\"\n /> will be updated as:\n </p>\n\n <CodeDiff\n :from=\"args[0]\"\n :to=\"args[1]\"\n max-h-80 of-auto py2 border=\"~ base rounded\"\n lang=\"ts\"\n />\n\n <p>\n <span op50>Then Nuxt will </span><span text-orange>restart automatically</span>.\n </p>\n\n <div flex=\"~ gap-3\" mt2 justify-end>\n <NButton @click=\"resolve(false)\">\n Cancel\n </NButton>\n <NButton n=\"solid primary\" capitalize @click=\"resolve(true)\">\n Enable\n </NButton>\n </div>\n </div>\n </NDialog>\n </Dialog>\n </template>\n\n <HelpFab>\n <DocsTimeline />\n </HelpFab>\n</template>\n"],"version":3}
|
|
1
|
+
{"file":"timeline-RijyQyqW.js","mappings":"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","names":[],"sources":["../../../../../../../../components/TimelineItemFunction.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineItemFunction.vue","../../../../../../../../components/TimelineSegment.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineSegment.vue","../../../../../../../../composables/timeline.ts","../../../../../../../../components/TimelineTable.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineTable.vue","../../../../../../../../components/TimelineList.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineList.vue","../../../../../../../../components/TimelineArgumentView.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineArgumentView.vue","../../../../../../../../components/TimelineDetailsFunction.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineDetailsFunction.vue","../../../../../../../../components/TimelineDetailsRoute.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineDetailsRoute.vue","../../../../../../../../components/TimelineView.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/TimelineView.vue","../../../../../../../../components/docs/timeline.md","../../../../../../../../pages/modules/timeline.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../pages/modules/timeline.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEventFunction } from '../../types'\nimport { computed } from 'vue'\nimport { getHslColorFromStringHash } from '../../../devtools-ui-kit/src/composables/color'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineItemFunction',\n __ssrInlineRender: true,\n props: {\n item: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst OP_PLACEHOLDER_RE = /_op_/\n\nconst colorRaw = computed(() => getHslColorFromStringHash(props.item.name, 50, 60, '_op_'))\nconst color = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '1'))\nconst textColor = computed(() => getHslColorFromStringHash(props.item.name, 50, 40))\nconst colorBackground = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '0.2'))\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n _push(`<button${\n _ssrRenderAttrs(_mergeProps({\n class: \"group\",\n style: {\n color: color.value,\n borderLeft: `2px solid ${color.value}`,\n },\n relative: \"\",\n \"bg-base\": \"\",\n \"text-sm\": \"\",\n transition: \"\",\n \"hover:z-1000\": \"\"\n }, _attrs))\n }><div style=\"${\n _ssrRenderStyle({\n backgroundColor: colorBackground.value,\n })\n }\" absolute bottom-0 left--1px top-0 w-full text-sm transition-all duration-300></div><div style=\"${\n _ssrRenderStyle({\n 'color': textColor.value,\n '--c': color.value,\n })\n }\" border=\"r-2 t-2 y-2 transparent\" min-w-max px1 text-left group-hover=\"border-\\$c\">${\n _ssrInterpolate(__props.item.name)\n }</div></button>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventFunction } from '../../types'\nimport { computed } from 'vue'\nimport { getHslColorFromStringHash } from '../../../devtools-ui-kit/src/composables/color'\n\nconst props = defineProps<{\n item: TimelineEventFunction\n}>()\n\nconst OP_PLACEHOLDER_RE = /_op_/\n\nconst colorRaw = computed(() => getHslColorFromStringHash(props.item.name, 50, 60, '_op_'))\nconst color = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '1'))\nconst textColor = computed(() => getHslColorFromStringHash(props.item.name, 50, 40))\nconst colorBackground = computed(() => colorRaw.value.replace(OP_PLACEHOLDER_RE, '0.2'))\n</script>\n\n<template>\n <button\n class=\"group\"\n :style=\"{\n color,\n borderLeft: `2px solid ${color}`,\n }\"\n relative bg-base text-sm transition hover:z-1000\n >\n <div\n :style=\"{\n backgroundColor: colorBackground,\n }\"\n absolute bottom-0 left--1px top-0 w-full text-sm transition-all duration-300\n />\n <div\n :style=\"{\n 'color': textColor,\n '--c': color,\n }\"\n border=\"r-2 t-2 y-2 transparent\"\n min-w-max px1 text-left group-hover=\"border-$c\"\n >\n {{ item.name }}\n </div>\n </button>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { UseTimeAgoOptions } from '@vueuse/core'\nimport type { TimelineEvent, TimelineEventNormalized, TimelineEventsSegment } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineSegment',\n __ssrInlineRender: true,\n props: {\n segment: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\nconst timeAgo = useTimeAgo(() => props.segment.start, {\n updateInterval: 1000,\n showSecond: true,\n controls: false,\n messages: ({\n justNow: '',\n past: s => s,\n future: s => s,\n invalid: '-',\n second: s => s ? `${s}s` : '',\n minute: m => `${m}m`,\n hour: h => `${h}h`,\n week: w => `${w}w`,\n day: d => `${d}d`,\n month: m => `${m}mo`,\n year: y => `${y}y`,\n } satisfies UseTimeAgoOptions<false>['messages']) as any,\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_TimelineItemFunction = _resolveComponent(\"TimelineItemFunction\")!\n\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({\n relative: \"\",\n \"h-full\": \"\"\n }, _attrs))\n }><button absolute left-0 right-0 top-0 bg-green:5 px2 py1 text-left text-xs text-green6 font-mono>${\n _ssrInterpolate(__props.segment.route?.event.to)\n }</button><div absolute left-2 top-2.3em text-xs op50>${\n _ssrInterpolate(_unref(timeAgo))\n } ago </div><div><!--[-->`)\n _ssrRenderList(__props.segment.functions, (i, idx) => {\n _push(_ssrRenderComponent(_component_TimelineItemFunction, {\n key: idx,\n item: i.event,\n style: {\n position: 'absolute',\n minWidth: `${i.relativeWidth * 100}%`,\n maxWidth: `${i.relativeWidth * 100}%`,\n top: `${4 + i.layer * 1.6}em`,\n left: `${i.relativeStart * 100}%`,\n },\n onClick: ($event: any) => (emit('select', i))\n }, null, _parent))\n })\n _push(`<!--]--></div></div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { UseTimeAgoOptions } from '@vueuse/core'\nimport type { TimelineEvent, TimelineEventNormalized, TimelineEventsSegment } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\nconst props = defineProps<{\n segment: TimelineEventsSegment\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEventNormalized<TimelineEvent>): void\n}>()\n\nconst timeAgo = useTimeAgo(() => props.segment.start, {\n updateInterval: 1000,\n showSecond: true,\n controls: false,\n messages: ({\n justNow: '',\n past: s => s,\n future: s => s,\n invalid: '-',\n second: s => s ? `${s}s` : '',\n minute: m => `${m}m`,\n hour: h => `${h}h`,\n week: w => `${w}w`,\n day: d => `${d}d`,\n month: m => `${m}mo`,\n year: y => `${y}y`,\n } satisfies UseTimeAgoOptions<false>['messages']) as any,\n})\n</script>\n\n<template>\n <div relative h-full>\n <button\n absolute left-0 right-0 top-0 bg-green:5 px2 py1 text-left text-xs text-green6 font-mono\n @click=\"segment.route ? emit('select', segment.route) : undefined\"\n >\n {{ segment.route?.event.to }}\n </button>\n <div absolute left-2 top-2.3em text-xs op50>\n {{ timeAgo }} ago\n </div>\n <div>\n <TimelineItemFunction\n v-for=\"i, idx of segment.functions\"\n :key=\"idx\"\n :item=\"i.event\"\n :style=\"{\n position: 'absolute',\n minWidth: `${i.relativeWidth * 100}%`,\n maxWidth: `${i.relativeWidth * 100}%`,\n top: `${4 + i.layer * 1.6}em`,\n left: `${i.relativeStart * 100}%`,\n }\"\n @click=\"emit('select', i)\"\n />\n </div>\n </div>\n</template>\n","import type { TimelineEvent, TimelineEventFunction, TimelineEventNormalized, TimelineEventRoute, TimelineEventsSegment } from '../../types'\n\nconst MAX_SEGMENT_DURATION = 3_000\nconst SEGMENT_END_PADDING = 50\n\nexport function segmentTimelineEvents(events: TimelineEvent[]) {\n const segments: TimelineEventsSegment[] = []\n\n let current: TimelineEventsSegment = {\n start: 0,\n end: 0,\n events: [],\n functions: [],\n duration: 0,\n }\n\n for (const event of events) {\n const end = event.end || event.start\n // Segment events by max duration or route change\n if (\n (event.start - current.end > MAX_SEGMENT_DURATION)\n || event.type === 'route'\n ) {\n current = {\n start: event.start,\n end,\n events: [],\n functions: [],\n duration: 0,\n }\n segments.push(current)\n }\n\n current.events.push(event)\n current.end = end + SEGMENT_END_PADDING\n }\n\n segments.forEach((segment, idx) => {\n const duration = segment.end - segment.start\n\n const layers: number[] = []\n\n segment.duration = duration\n segment.previousGap = idx > 0 ? segment.start - segments[idx - 1]!.end : 0\n segment.events\n .forEach((event) => {\n const end = (event.end || event.start)\n let layer = 0\n\n if (event.type !== 'route') {\n layer = layers.findIndex(layer => layer <= event.start)\n if (layer === -1) {\n layer = layers.length\n layers.push(end + 1_000)\n }\n else {\n layers[layer] = end + 1_000\n }\n }\n\n const normalized: TimelineEventNormalized<TimelineEvent> = {\n event,\n segment,\n relativeStart: (event.start - segment.start) / duration,\n relativeWidth: (end - event.start) / duration,\n layer,\n }\n\n if (event.type === 'function')\n segment.functions.push(normalized as TimelineEventNormalized<TimelineEventFunction>)\n else\n segment.route = normalized as TimelineEventNormalized<TimelineEventRoute>\n })\n })\n\n return segments\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderComponent as _ssrRenderComponent, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEvent, TimelineEventNormalized, TimelineMetrics } from '../../types'\nimport { clamp } from '@antfu/utils'\nimport { useEventListener } from '@vueuse/core'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { segmentTimelineEvents } from '~/composables/timeline'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineTable',\n __ssrInlineRender: true,\n props: {\n data: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\nconst props = __props\n\nconst emit = __emit\n\nconst scroller = ref<HTMLElement>()\nconst minimap = ref<HTMLElement>()\nconst minimapScroller = ref<HTMLElement>()\nconst minimapScrollerInner = ref<HTMLElement>()\nconst followScroll = ref(true)\nconst scale = ref(1.5)\n\nconst segments = computed(() => segmentTimelineEvents(props.data.events))\n\nconst scrollWidth = computed(() => {\n // eslint-disable-next-line ts/no-unused-expressions\n props.data.events.length\n return scroller.value?.scrollWidth || window.innerWidth\n})\n\nfunction syncSize() {\n if (minimapScrollerInner.value)\n minimapScrollerInner.value.style.width = `${scrollWidth.value}px`\n}\n\nfunction scrollToEnd() {\n if (followScroll.value && scroller.value) {\n // scroller.value.scrollLeft = scroller.value.scrollWidth\n // minimapScroller.value!.scrollLeft = scroller.value.scrollWidth\n\n scroller.value.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n minimapScroller.value!.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n }\n}\n\nwatch(\n () => props.data.events.length,\n async () => {\n await nextTick()\n syncSize()\n scrollToEnd()\n },\n { flush: 'post' },\n)\n\nuseEventListener(scroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n minimapScroller.value!.scrollLeft = scroller.value!.scrollLeft\n followScroll.value = scroller.value!.scrollLeft >= scroller.value!.scrollWidth - scroller.value!.clientWidth\n }\n})\nuseEventListener(minimapScroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n scroller.value!.scrollLeft = minimapScroller.value!.scrollLeft\n }\n})\nuseEventListener(scroller, 'wheel', (e: WheelEvent) => {\n if (e.altKey) {\n scale.value = clamp(scale.value + e.deltaY / 200, 0.5, 3)\n syncSize()\n }\n else {\n scroller.value!.scrollLeft += e.deltaY\n }\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n const _component_TimelineSegment = _resolveComponent(\"TimelineSegment\")!\n\n _push(`<!--[--><div relative data-v-da163089><div border=\"t b base\" relative h-50px ws-nowrap border-base data-v-da163089><!--[-->`)\n _ssrRenderList(segments.value, (segment, idx) => {\n _push(`<div relative h-full flex-inline style=\"${_ssrRenderStyle({\n width: `${Math.max(100, segment.duration / 10) / scrollWidth.value * 100}%`,\n })}\" data-v-da163089><!--[-->`)\n _ssrRenderList(segment.functions, (item, iidx) => {\n _push(`<div h-3px rounded style=\"${_ssrRenderStyle({\n width: `max(${item.relativeWidth * 100}%, 10px)`,\n position: 'absolute',\n top: `${item.layer * 4}px`,\n left: `${item.relativeStart * 100}%`,\n backgroundColor: _ctx.getHslColorFromStringHash(item.event.name, 50, 60),\n })}\" data-v-da163089></div>`)\n })\n _push(`<!--]-->`)\n if (segment.route) {\n _push(`<div absolute top-0 h-full w-px border-l border-green6 op10 style=\"${_ssrRenderStyle({\n left: `${segment.route.relativeStart * 100}%`,\n })}\" data-v-da163089></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n })\n _push(`<!--]--></div><div class=\"timeline-scroller\" absolute inset-0 h-full w-full of-x-scroll data-v-da163089><div h-1px data-v-da163089></div></div></div><div relative h-full w-full of-x-scroll of-y-hidden ws-nowrap n-panel-grids data-v-da163089><!--[-->`)\n _ssrRenderList(segments.value, (segment, idx) => {\n _push(`<!--[-->`)\n if (segment.previousGap && segment.previousGap >= 200) {\n _push(`<div border=\"x base\" h-full flex-inline bg-true-gray-1 py15 text-xs write-vertical-left op50 dark:bg-true-gray-9 data-v-da163089>`)\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n op50: \"\",\n duration: segment.previousGap,\n color: false\n }, null, _parent))\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_TimelineSegment, {\n \"flex-inline\": \"\",\n \"of-x-hidden\": \"\",\n \"bg-base\": \"\",\n \"hover:of-x-visible\": \"\",\n class: idx === segments.value.length - 1 ? 'border-r border-base' : '',\n segment: segment,\n style: {\n width: `${Math.max(50, segment.duration / 10) * scale.value}px`,\n },\n onSelect: ($event: any) => (emit('select', $event))\n }, null, _parent))\n _push(`<!--]-->`)\n })\n _push(`<!--]--></div><!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent, TimelineEventNormalized, TimelineMetrics } from '../../types'\nimport { clamp } from '@antfu/utils'\nimport { useEventListener } from '@vueuse/core'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { segmentTimelineEvents } from '~/composables/timeline'\n\nconst props = defineProps<{\n data: TimelineMetrics\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEventNormalized<TimelineEvent>): void\n}>()\n\nconst scroller = ref<HTMLElement>()\nconst minimap = ref<HTMLElement>()\nconst minimapScroller = ref<HTMLElement>()\nconst minimapScrollerInner = ref<HTMLElement>()\nconst followScroll = ref(true)\nconst scale = ref(1.5)\n\nconst segments = computed(() => segmentTimelineEvents(props.data.events))\n\nconst scrollWidth = computed(() => {\n // eslint-disable-next-line ts/no-unused-expressions\n props.data.events.length\n return scroller.value?.scrollWidth || window.innerWidth\n})\n\nfunction syncSize() {\n if (minimapScrollerInner.value)\n minimapScrollerInner.value.style.width = `${scrollWidth.value}px`\n}\n\nfunction scrollToEnd() {\n if (followScroll.value && scroller.value) {\n // scroller.value.scrollLeft = scroller.value.scrollWidth\n // minimapScroller.value!.scrollLeft = scroller.value.scrollWidth\n\n scroller.value.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n minimapScroller.value!.scrollTo({\n left: scroller.value.scrollWidth - scroller.value.clientWidth,\n behavior: 'smooth',\n })\n }\n}\n\nwatch(\n () => props.data.events.length,\n async () => {\n await nextTick()\n syncSize()\n scrollToEnd()\n },\n { flush: 'post' },\n)\n\nuseEventListener(scroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n minimapScroller.value!.scrollLeft = scroller.value!.scrollLeft\n followScroll.value = scroller.value!.scrollLeft >= scroller.value!.scrollWidth - scroller.value!.clientWidth\n }\n})\nuseEventListener(minimapScroller, 'scroll', () => {\n if (minimapScroller.value!.scrollLeft !== scroller.value!.scrollLeft) {\n syncSize()\n scroller.value!.scrollLeft = minimapScroller.value!.scrollLeft\n }\n})\nuseEventListener(scroller, 'wheel', (e: WheelEvent) => {\n if (e.altKey) {\n scale.value = clamp(scale.value + e.deltaY / 200, 0.5, 3)\n syncSize()\n }\n else {\n scroller.value!.scrollLeft += e.deltaY\n }\n})\n</script>\n\n<template>\n <div relative>\n <div ref=\"minimap\" border=\"t b base\" relative h-50px ws-nowrap border-base>\n <div\n v-for=\"segment, idx of segments\"\n :key=\"idx\"\n relative h-full flex-inline\n :style=\"{\n width: `${Math.max(100, segment.duration / 10) / scrollWidth * 100}%`,\n }\"\n >\n <div\n v-for=\"item, iidx of segment.functions\"\n :key=\"iidx\"\n h-3px rounded\n :style=\"{\n width: `max(${item.relativeWidth * 100}%, 10px)`,\n position: 'absolute',\n top: `${item.layer * 4}px`,\n left: `${item.relativeStart * 100}%`,\n backgroundColor: getHslColorFromStringHash(item.event.name, 50, 60),\n }\"\n />\n <template v-if=\"segment.route\">\n <div\n absolute top-0 h-full w-px border-l border-green6 op10\n :style=\"{\n left: `${segment.route.relativeStart * 100}%`,\n }\"\n />\n </template>\n </div>\n </div>\n <div ref=\"minimapScroller\" class=\"timeline-scroller\" absolute inset-0 h-full w-full of-x-scroll>\n <div\n ref=\"minimapScrollerInner\"\n h-1px\n />\n </div>\n </div>\n <div ref=\"scroller\" relative h-full w-full of-x-scroll of-y-hidden ws-nowrap n-panel-grids>\n <template v-for=\"segment, idx of segments\" :key=\"idx\">\n <div\n v-if=\"segment.previousGap && segment.previousGap >= 200\"\n border=\"x base\"\n h-full flex-inline bg-true-gray-1 py15 text-xs write-vertical-left op50 dark:bg-true-gray-9\n >\n <DurationDisplay\n op50\n :duration=\"segment.previousGap\"\n :color=\"false\"\n />\n </div>\n <TimelineSegment\n flex-inline of-x-hidden bg-base hover:of-x-visible\n :class=\"idx === segments.length - 1 ? 'border-r border-base' : ''\"\n :segment=\"segment\"\n :style=\"{\n width: `${Math.max(50, segment.duration / 10) * scale}px`,\n }\"\n @select=\"emit('select', $event)\"\n />\n </template>\n </div>\n</template>\n\n<style scoped>\n.timeline-scroller::-webkit-scrollbar {\n height: 100px;\n width: 0.1px;\n}\n\n.timeline-scroller::-webkit-scrollbar-track {\n background-color: transparent;\n}\n\n.timeline-scroller::-webkit-scrollbar-thumb {\n background-color: #8881;\n height: 100px;\n}\n.timeline-scroller:hover::-webkit-scrollbar-thumb {\n background-color: #8882;\n}\n</style>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderStyle as _ssrRenderStyle, ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEvent, TimelineMetrics } from '../../types'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineList',\n __ssrInlineRender: true,\n props: {\n data: {}\n },\n emits: [\"select\"],\n setup(__props: any, { emit: __emit }) {\n\n\n\nconst emit = __emit\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n border: \"t base\",\n flex: \"~ col\",\n \"h-full\": \"\",\n \"of-y-auto\": \"\",\n \"text-sm\": \"\"\n }, _attrs))}><!--[-->`)\n _ssrRenderList(__props.data.events, (event, idx) => {\n _push(`<button border=\"b base\" px3 py2 flex=\"~ items-center gap-2\" hover=\"bg-active\">`)\n if (event.type === 'function') {\n _push(`<!--[--><div i-carbon-function op50></div><div font-mono style=\"${\n _ssrRenderStyle({\n color: event.type === 'function'\n ? _ctx.getHslColorFromStringHash(event.name, 50, 60)\n : '',\n })\n }\">${\n _ssrInterpolate(event.name)\n }</div><div flex=\"~\" ml--1 font-mono><div op30> ( </div><!--[-->`)\n _ssrRenderList(event.args, (a, index) => {\n _push(`<!--[-->`)\n if (index) {\n _push(`<div mr2 op30> , </div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`<div op75>${_ssrInterpolate(a === null ? 'null' : a === undefined ? 'undefined' : typeof a === 'function' ? `[function]` : Array.isArray(a) ? '[Array]' : typeof a === 'object' ? '[object]' : JSON.stringify(a))}</div><!--]-->`)\n })\n _push(`<!--]--><div op30> ) </div></div><!--]-->`)\n } else {\n _push(`<!--[--><div mr-1 h-7 w-7 flex rounded-lg bg-primary:5 p1 text-green6><div i-carbon-direction-rotary-right ma text-lg></div></div><div flex=\"~ col items-start\"><div text-xs font-mono op30>${\n _ssrInterpolate(event.from)\n }</div><div text-green font-bold font-mono>${\n _ssrInterpolate(event.to)\n }</div></div><!--]-->`)\n }\n _push(`<div flex-auto></div>`)\n if (event.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: event.end - event.start,\n color: event.type === 'function'\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</button>`)\n })\n _push(`<!--]--><div min-h-100></div></div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent, TimelineMetrics } from '../../types'\n\ndefineProps<{\n data: TimelineMetrics\n}>()\n\nconst emit = defineEmits<{\n (event: 'select', record: TimelineEvent): void\n}>()\n</script>\n\n<template>\n <div border=\"t base\" flex=\"~ col\" h-full of-y-auto text-sm>\n <button\n v-for=\"event, idx in data.events\" :key=\"idx\"\n border=\"b base\" px3 py2\n flex=\"~ items-center gap-2\"\n hover=\"bg-active\"\n @click=\"emit('select', event)\"\n >\n <template v-if=\"event.type === 'function'\">\n <div i-carbon-function op50 />\n <div\n font-mono\n :style=\"{\n color: event.type === 'function'\n ? getHslColorFromStringHash(event.name, 50, 60)\n : '',\n }\"\n >\n {{ event.name }}\n </div>\n <div flex=\"~\" ml--1 font-mono>\n <div op30>\n (\n </div>\n <template v-for=\"a, index in event.args \" :key=\"index\">\n <div v-if=\"index\" mr2 op30>\n ,\n </div>\n <div op75>\n {{ a === null ? 'null' : a === undefined ? 'undefined' : typeof a === 'function' ? `[function]` : Array.isArray(a) ? '[Array]' : typeof a === 'object' ? '[object]' : JSON.stringify(a) }}\n </div>\n </template>\n <div op30>\n )\n </div>\n </div>\n </template>\n <template v-else>\n <div mr-1 h-7 w-7 flex rounded-lg bg-primary:5 p1 text-green6>\n <div i-carbon-direction-rotary-right ma text-lg />\n </div>\n <div flex=\"~ col items-start\">\n <div text-xs font-mono op30>\n {{ event.from }}\n </div>\n <div text-green font-bold font-mono>\n {{ event.to }}\n </div>\n </div>\n </template>\n <div flex-auto />\n <DurationDisplay\n v-if=\"event.end\"\n :duration=\"event.end - event.start\"\n :color=\"event.type === 'function'\"\n />\n </button>\n <div min-h-100 />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps, resolveComponent as _resolveComponent, unref as _unref, withCtx as _withCtx, createTextVNode as _createTextVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\nimport { ssrRenderAttrs as _ssrRenderAttrs, ssrRenderClass as _ssrRenderClass, ssrRenderComponent as _ssrRenderComponent, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport JsonEditorVue from 'json-editor-vue'\nimport { defineComponent, ref } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useCopy } from '~/composables/editor'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineArgumentView',\n __ssrInlineRender: true,\n props: {\n value: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst clone = ref<any>()\nconst error = ref<any>()\n\nfunction doClone() {\n try {\n clone.value = JSON.parse(JSON.stringify(props.value))\n }\n catch (e) {\n console.error(e)\n error.value = e\n }\n}\n\nconst OnSetup = defineComponent({\n emits: ['setup'],\n setup(_, { emit }) {\n emit('setup')\n return () => null\n },\n})\n\nconst colorMode = getColorMode()\nconst copy = useCopy()\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VMenu = _resolveComponent(\"VMenu\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n\n if ((typeof __props.value === 'string')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-blue\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(JSON.stringify(__props.value))\n }</div>`)\n } else if ((typeof __props.value === 'number')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-purple\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(__props.value)\n }</div>`)\n } else if ((typeof __props.value === 'boolean')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-green\": \"\" }, _attrs))\n }>${\n _ssrInterpolate(__props.value)\n }</div>`)\n } else if ((typeof __props.value === 'undefined')) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))}> undefined </div>`)\n } else if ((typeof __props.value === 'function')) {\n _push(`<div${\n _ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))\n }> [Function${\n _ssrInterpolate(__props.value.name ? `: ${__props.value.name}` : '')\n }] </div>`)\n } else if (__props.value === null) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({ \"text-gray\": \"\" }, _attrs))}> null </div>`)\n } else {\n _push(_ssrRenderComponent(_component_VMenu, _mergeProps({ placement: \"top\" }, _attrs), {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_unref(OnSetup), { onSetup: doClone }, null, _parent, _scopeId))\n if (error.value) {\n _push(`<div bg-red:10 px2 py1 text-red${\n _scopeId\n }> Failed to display object: ${\n _ssrInterpolate(error.value)\n }</div>`)\n } else if (clone.value) {\n _push(`<div${_scopeId}>`)\n _push(_ssrRenderComponent(_unref(JsonEditorVue), _mergeProps({ \"model-value\": clone.value }, _ctx.$attrs, {\n class: [\"json-editor-vue\", [\n _unref(colorMode) === 'dark' ? 'jse-theme-dark' : '',\n ]],\n \"main-menu-bar\": false,\n \"navigation-bar\": false,\n \"status-bar\": false,\n \"read-only\": true,\n indentation: 2,\n \"tab-size\": 2\n }), null, _parent, _scopeId))\n _push(`<div p2 text-sm border=\"t base\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Copy to clipboard\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(JSON.stringify(clone.value, null, 2), 'timeline-argument'))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Copy `)\n } else {\n return [\n _createTextVNode(\" Copy \")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n _push(`<!---->`)\n }\n } else {\n return [\n _createVNode(_unref(OnSetup), { onSetup: doClone }),\n (error.value)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n \"bg-red:10\": \"\",\n px2: \"\",\n py1: \"\",\n \"text-red\": \"\"\n }, \" Failed to display object: \" + _toDisplayString(error.value), 1))\n : (clone.value)\n ? (_openBlock(), _createBlock(\"div\", { key: 1 }, [\n _createVNode(_unref(JsonEditorVue), _mergeProps({ \"model-value\": clone.value }, _ctx.$attrs, {\n class: [\"json-editor-vue\", [\n _unref(colorMode) === 'dark' ? 'jse-theme-dark' : '',\n ]],\n \"main-menu-bar\": false,\n \"navigation-bar\": false,\n \"status-bar\": false,\n \"read-only\": true,\n indentation: 2,\n \"tab-size\": 2\n }), null, 16, [\"model-value\", \"class\"]),\n _createVNode(\"div\", {\n p2: \"\",\n \"text-sm\": \"\",\n border: \"t base\"\n }, [\n _createVNode(_component_NButton, {\n title: \"Copy to clipboard\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(JSON.stringify(clone.value, null, 2), 'timeline-argument'))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Copy \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span rounded-sm px1 py0.5 text-sm class=\"${\n _ssrRenderClass([\n Array.isArray(__props.value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ])\n }\"${\n _scopeId\n }>${\n _ssrInterpolate(Array.isArray(__props.value) ? `[Array(${__props.value.length})]` : `[Object]`)\n }</span>`)\n } else {\n return [\n _createVNode(\"span\", {\n \"rounded-sm\": \"\",\n px1: \"\",\n \"py0.5\": \"\",\n \"text-sm\": \"\",\n class: [\n Array.isArray(__props.value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ]\n }, _toDisplayString(Array.isArray(__props.value) ? `[Array(${__props.value.length})]` : `[Object]`), 3)\n ]\n }\n }),\n _: 1\n }, _parent))\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport JsonEditorVue from 'json-editor-vue'\nimport { defineComponent, ref } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useCopy } from '~/composables/editor'\n\nconst props = defineProps<{\n value: any\n}>()\n\nconst clone = ref<any>()\nconst error = ref<any>()\n\nfunction doClone() {\n try {\n clone.value = JSON.parse(JSON.stringify(props.value))\n }\n catch (e) {\n console.error(e)\n error.value = e\n }\n}\n\nconst OnSetup = defineComponent({\n emits: ['setup'],\n setup(_, { emit }) {\n emit('setup')\n return () => null\n },\n})\n\nconst colorMode = getColorMode()\nconst copy = useCopy()\n</script>\n\n<template>\n <div v-if=\"(typeof value === 'string')\" text-blue>\n {{ JSON.stringify(value) }}\n </div>\n <div v-else-if=\"(typeof value === 'number')\" text-purple>\n {{ value }}\n </div>\n <div v-else-if=\"(typeof value === 'boolean')\" text-green>\n {{ value }}\n </div>\n <div v-else-if=\"(typeof value === 'undefined')\" text-gray>\n undefined\n </div>\n <div v-else-if=\"(typeof value === 'function')\" text-gray>\n [Function{{ value.name ? `: ${value.name}` : '' }}]\n </div>\n <div v-else-if=\"value === null\" text-gray>\n null\n </div>\n <template v-else>\n <VMenu placement=\"top\">\n <span\n rounded-sm px1 py0.5 text-sm\n :class=\"[\n Array.isArray(value) ? 'text-amber bg-amber:10' : 'text-orange bg-orange:10',\n ]\"\n >\n {{ Array.isArray(value) ? `[Array(${value.length})]` : `[Object]` }}\n </span>\n <template #popper>\n <OnSetup @setup=\"doClone\" />\n <div v-if=\"error\" bg-red:10 px2 py1 text-red>\n Failed to display object: {{ error }}\n </div>\n <div v-else-if=\"clone\">\n <JsonEditorVue\n :model-value=\"clone\"\n v-bind=\"$attrs\"\n class=\"json-editor-vue\"\n :class=\"[\n colorMode === 'dark' ? 'jse-theme-dark' : '',\n ]\"\n :main-menu-bar=\"false\"\n :navigation-bar=\"false\"\n :status-bar=\"false\"\n :read-only=\"true\"\n :indentation=\"2\"\n :tab-size=\"2\"\n />\n <div p2 text-sm border=\"t base\">\n <NButton\n title=\"Copy to clipboard\"\n icon=\"carbon-copy\"\n @click=\"copy(JSON.stringify(clone, null, 2), 'timeline-argument')\"\n >\n Copy\n </NButton>\n </div>\n </div>\n </template>\n </VMenu>\n </template>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { TimelineEventFunction } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useAutoImports } from '~/composables/state'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineDetailsFunction',\n __ssrInlineRender: true,\n props: {\n record: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nconst autoImports = useAutoImports()\nconst importsMetadata = computed(() => autoImports.value?.metadata)\nconst importItem = computed(() => {\n return autoImports.value?.imports.find(i => i.as === props.record.name)\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_ComposableItem = _resolveComponent(\"ComposableItem\")!\n const _component_TimelineArgumentView = _resolveComponent(\"TimelineArgumentView\")!\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n const _component_StacktraceList = _resolveComponent(\"StacktraceList\")!\n\n if (__props.record) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"p-4\": \"\",\n flex: \"~ col gap-2\",\n \"text-base\": \"\"\n }, _attrs))}><div mx--1>`)\n _push(_ssrRenderComponent(_component_NBadge, { n: \"yellow\" }, null, _parent))\n _push(`</div><div flex=\"~ gap-1\" font-mono>`)\n if (importItem.value) {\n _push(_ssrRenderComponent(_component_ComposableItem, {\n item: importItem.value,\n metadata: importsMetadata.value,\n counter: false,\n classes: \"px2 py1\",\n \"mx--2\": \"\"\n }, null, _parent))\n } else {\n _push(`<span>${_ssrInterpolate(__props.record.name)}</span>`)\n }\n _push(`<span ml1 op30>(</span><!--[-->`)\n _ssrRenderList(__props.record.args, (arg, idx) => {\n _push(`<!--[-->`)\n if (idx) {\n _push(`<span op30>, </span>`)\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_TimelineArgumentView, { value: arg }, null, _parent))\n _push(`<!--]-->`)\n })\n _push(`<!--]--><span op30>)</span></div><div flex=\"~ gap-1\" text-sm>`)\n if (__props.record.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: __props.record.end - __props.record.start\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<span mx1 op50>·</span><div class=\"text-sm text-gray-400\">${_ssrInterpolate(_unref(timeAgo))}</div></div>`)\n if (__props.record.stacktrace) {\n _push(_ssrRenderComponent(_component_StacktraceList, {\n stacktrace: __props.record.stacktrace,\n class: \"text-xs text-gray-400\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventFunction } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\nimport { computed } from 'vue'\nimport { useAutoImports } from '~/composables/state'\n\nconst props = defineProps<{\n record: TimelineEventFunction\n}>()\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nconst autoImports = useAutoImports()\nconst importsMetadata = computed(() => autoImports.value?.metadata)\nconst importItem = computed(() => {\n return autoImports.value?.imports.find(i => i.as === props.record.name)\n})\n</script>\n\n<template>\n <div v-if=\"record\" p-4 flex=\"~ col gap-2\" text-base>\n <div mx--1>\n <NBadge n=\"yellow\" v-text=\"'Function call'\" />\n </div>\n <div flex=\"~ gap-1\" font-mono>\n <ComposableItem\n v-if=\"importItem\"\n :item=\"importItem\"\n :metadata=\"importsMetadata\"\n :counter=\"false\"\n classes=\"px2 py1\"\n mx--2\n />\n <span v-else>{{ record.name }}</span>\n <span ml1 op30>(</span>\n <template v-for=\"arg, idx in record.args\" :key=\"idx\">\n <span v-if=\"idx\" op30>, </span>\n <TimelineArgumentView :value=\"arg\" />\n </template>\n <span op30>)</span>\n </div>\n\n <div flex=\"~ gap-1\" text-sm>\n <DurationDisplay\n v-if=\"record.end\"\n :duration=\"record.end - record.start\"\n />\n <span mx1 op50>·</span>\n <div class=\"text-sm text-gray-400\">\n {{ timeAgo }}\n </div>\n </div>\n\n <StacktraceList\n v-if=\"record.stacktrace\" :stacktrace=\"record.stacktrace\"\n class=\"text-xs text-gray-400\"\n />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEventRoute } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineDetailsRoute',\n __ssrInlineRender: true,\n props: {\n record: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_DurationDisplay = _resolveComponent(\"DurationDisplay\")!\n\n if (__props.record) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"p-4\": \"\",\n flex: \"~ col gap-2\"\n }, _attrs))}><div mx--1>`)\n _push(_ssrRenderComponent(_component_NBadge, { n: \"green\" }, null, _parent))\n _push(`</div><div flex=\"~ gap-1 items-center\" font-mono><span op50>${\n _ssrInterpolate(__props.record.from)\n }</span><span i-carbon-arrow-right op50></span><span>${\n _ssrInterpolate(__props.record.to)\n }</span></div><div flex=\"~ gap-1\" text-sm>`)\n if (__props.record.end) {\n _push(_ssrRenderComponent(_component_DurationDisplay, {\n duration: __props.record.end - __props.record.start\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<span mx1 op50>·</span><div class=\"text-sm text-gray-400\">${_ssrInterpolate(_unref(timeAgo))}</div></div></div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEventRoute } from '../../types'\nimport { useTimeAgo } from '@vueuse/core'\n\nconst props = defineProps<{\n record: TimelineEventRoute\n}>()\n\nconst timeAgo = useTimeAgo(() => props.record.start, { showSecond: true })\n</script>\n\n<template>\n <div v-if=\"record\" p-4 flex=\"~ col gap-2\">\n <div mx--1>\n <NBadge n=\"green\" v-text=\"'Route Change'\" />\n </div>\n <div flex=\"~ gap-1 items-center\" font-mono>\n <span op50>{{ record.from }}</span>\n <span i-carbon-arrow-right op50 />\n <span>{{ record.to }}</span>\n </div>\n\n <div flex=\"~ gap-1\" text-sm>\n <DurationDisplay\n v-if=\"record.end\"\n :duration=\"record.end - record.start\"\n />\n <span mx1 op50>·</span>\n <div class=\"text-sm text-gray-400\">\n {{ timeAgo }}\n </div>\n </div>\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, toDisplayString as _toDisplayString, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderClass as _ssrRenderClass, ssrRenderComponent as _ssrRenderComponent, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { TimelineEvent } from '../../types'\nimport { computed, ref } from 'vue'\nimport { useClient } from '~/composables/client'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'TimelineView',\n __ssrInlineRender: true,\n setup(__props) {\n\nconst client = useClient()\n\nconst view = ref<'table' | 'list'>('table')\nconst selected = ref<TimelineEvent | undefined>()\n\nconst metrics = computed(() => client.value?.metrics.clientTimeline())\n\nfunction clear() {\n if (metrics.value)\n metrics.value.events = []\n}\n\nfunction toggleView() {\n view.value = view.value === 'table' ? 'list' : 'table'\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VTooltip = _resolveComponent(\"VTooltip\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_TimelineTable = _resolveComponent(\"TimelineTable\")!\n const _component_TimelineList = _resolveComponent(\"TimelineList\")!\n const _component_NDrawer = _resolveComponent(\"NDrawer\")!\n const _component_TimelineDetailsFunction = _resolveComponent(\"TimelineDetailsFunction\")!\n const _component_TimelineDetailsRoute = _resolveComponent(\"TimelineDetailsRoute\")!\n\n if (metrics.value) {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n \"h-screen\": \"\",\n \"of-hidden\": \"\"\n }, _attrs))}><div h-screen w-full flex flex-col><div h-10 flex=\"~ gap-2 items-center justify-end\" p2 px3>`)\n _push(_ssrRenderComponent(_component_VTooltip, { flex: \"\" }, {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div text-sm${\n _scopeId\n }>${\n _ssrInterpolate(metrics.value.options.enabled ? 'Recording...' : 'Paused')\n }</div>`)\n } else {\n return [\n _createVNode(\"div\", { \"text-sm\": \"\" }, _toDisplayString(metrics.value.options.enabled ? 'Recording...' : 'Paused'), 1)\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div text-lg class=\"${\n _ssrRenderClass(metrics.value.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30')\n }\"${\n _scopeId\n }></div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"text-lg\": \"\",\n class: metrics.value.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30'\n }, null, 2)\n ]\n }\n }),\n _: 1\n }, _parent))\n if (!metrics.value.options.enabled) {\n _push(_ssrRenderComponent(_component_NButton, {\n size: \"small\",\n ml1: \"\",\n \"text-sm\": \"\",\n n: \"primary\",\n icon: \"i-carbon-play\",\n onClick: ($event: any) => (metrics.value.options.enabled = true)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Start Tracking `)\n } else {\n return [\n _createTextVNode(\" Start Tracking \")\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(_ssrRenderComponent(_component_NButton, {\n size: \"small\",\n ml1: \"\",\n \"text-sm\": \"\",\n n: \"orange\",\n icon: \"i-carbon-stop\",\n onClick: ($event: any) => (metrics.value.options.enabled = false)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Stop Tracking `)\n } else {\n return [\n _createTextVNode(\" Stop Tracking \")\n ]\n }\n }),\n _: 1\n }, _parent))\n }\n _push(`<div flex-auto></div>`)\n _push(_ssrRenderComponent(_component_NButton, {\n icon: view.value === 'table' ? 'i-carbon-roadmap' : 'i-carbon-list',\n class: \"ml-2\",\n title: \"Toggle View\",\n border: false,\n onClick: toggleView\n }, null, _parent))\n _push(_ssrRenderComponent(_component_NButton, {\n icon: \"i-carbon-trash-can\",\n \"hover-text-red\": \"\",\n class: \"ml-2\",\n border: false,\n onClick: clear\n }, null, _parent))\n _push(`</div>`)\n if (view.value === 'table') {\n _push(_ssrRenderComponent(_component_TimelineTable, {\n data: { ...metrics.value },\n onSelect: s => selected.value = s.event\n }, null, _parent))\n } else {\n _push(_ssrRenderComponent(_component_TimelineList, {\n data: { ...metrics.value },\n onSelect: s => selected.value = s\n }, null, _parent))\n }\n _push(`</div>`)\n _push(_ssrRenderComponent(_component_NDrawer, {\n \"model-value\": !!selected.value,\n \"auto-close\": \"\",\n transition: \"bottom\",\n onClose: ($event: any) => (selected.value = undefined)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div min-h-50 px3 py2${_scopeId}>`)\n if (selected.value?.type === 'function') {\n _push(_ssrRenderComponent(_component_TimelineDetailsFunction, { record: selected.value }, null, _parent, _scopeId))\n } else if (selected.value?.type === 'route') {\n _push(_ssrRenderComponent(_component_TimelineDetailsRoute, { record: selected.value }, null, _parent, _scopeId))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"min-h-50\": \"\",\n px3: \"\",\n py2: \"\"\n }, [\n (selected.value?.type === 'function')\n ? (_openBlock(), _createBlock(_component_TimelineDetailsFunction, {\n key: 0,\n record: selected.value\n }, null, 8, [\"record\"]))\n : (selected.value?.type === 'route')\n ? (_openBlock(), _createBlock(_component_TimelineDetailsRoute, {\n key: 1,\n record: selected.value\n }, null, 8, [\"record\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { TimelineEvent } from '../../types'\nimport { computed, ref } from 'vue'\nimport { useClient } from '~/composables/client'\n\nconst client = useClient()\n\nconst view = ref<'table' | 'list'>('table')\nconst selected = ref<TimelineEvent | undefined>()\n\nconst metrics = computed(() => client.value?.metrics.clientTimeline())\n\nfunction clear() {\n if (metrics.value)\n metrics.value.events = []\n}\n\nfunction toggleView() {\n view.value = view.value === 'table' ? 'list' : 'table'\n}\n</script>\n\n<template>\n <div v-if=\"metrics\" h-screen of-hidden>\n <div h-screen w-full flex flex-col>\n <div h-10 flex=\"~ gap-2 items-center justify-end\" p2 px3>\n <VTooltip flex>\n <div\n text-lg\n :class=\"metrics.options.enabled ? 'i-carbon-radio-button-checked text-primary animate-pulse' : 'i-carbon-pause-outline op30'\"\n />\n <template #popper>\n <div text-sm>\n {{ metrics.options.enabled ? 'Recording...' : 'Paused' }}\n </div>\n </template>\n </VTooltip>\n\n <NButton\n v-if=\"!metrics.options.enabled\"\n size=\"small\" ml1 text-sm\n n=\"primary\"\n icon=\"i-carbon-play\"\n @click=\"metrics.options.enabled = true\"\n >\n Start Tracking\n </NButton>\n <NButton\n v-else\n size=\"small\" ml1 text-sm\n n=\"orange\"\n icon=\"i-carbon-stop\"\n @click=\"metrics.options.enabled = false\"\n >\n Stop Tracking\n </NButton>\n <!-- <template v-if=\"metrics.options.enabled\">\n <NCheckbox\n v-model=\"metrics.options.stacktrace\"\n label=\"Enabled\"\n class=\"text-sm\"\n >\n Record stacktrace\n </NCheckbox>\n <NCheckbox\n v-model=\"metrics.options.arguments\"\n label=\"Enabled\"\n class=\"text-sm\"\n >\n Record arguments\n </NCheckbox>\n </template> -->\n <div flex-auto />\n <NButton\n :icon=\"view === 'table' ? 'i-carbon-roadmap' : 'i-carbon-list'\"\n class=\"ml-2\"\n title=\"Toggle View\"\n :border=\"false\"\n @click=\"toggleView\"\n />\n <NButton\n icon=\"i-carbon-trash-can\"\n hover-text-red\n class=\"ml-2\"\n :border=\"false\"\n @click=\"clear\"\n />\n </div>\n <TimelineTable\n v-if=\"view === 'table'\"\n :data=\"{ ...metrics }\"\n @select=\"s => selected = s.event\"\n />\n <TimelineList\n v-else\n :data=\"{ ...metrics }\"\n @select=\"s => selected = s\"\n />\n </div>\n <NDrawer\n :model-value=\"!!selected\"\n auto-close\n transition=\"bottom\"\n @close=\"selected = undefined\"\n >\n <div min-h-50 px3 py2>\n <TimelineDetailsFunction v-if=\"selected?.type === 'function'\" :record=\"selected\" />\n <TimelineDetailsRoute v-else-if=\"selected?.type === 'route'\" :record=\"selected\" />\n </div>\n </NDrawer>\n </div>\n</template>\n","# Timeline\n\n<blockquote text-orange bg-orange:10 py1>\nThis is an experimental feature\n</blockquote>\n\nTimeline tracks your route navigations and functions calls in your Nuxt application. It can be used to debug performance issues and to understand how your application works.\n\n## Function calls\n\nNuxt DevTools tracks function calls by wrapping them in the build time. It works for functions referenced by auto-imports, or explicit imports through `import {} from '#imports'`.\n\n```vue\n<script setup>\nimport { useMouse } from '@vueuse/core'\nimport { useRoute } from '#app/composables/router'\nimport { useNuxtApp } from '#imports'\n\nconst route = useRoute() // tracked\nconst app = useNuxtApp() // tracked\n\n// NOT tracked because it's directly imported\nconst mouse = useMouse()\n</script>\n```\n\nBy default, it tracks Nuxt provided composables as well as user defined functions. You can include/exclude functions by using the `include` and `exclude` options in the `nuxt.config.js` file.\n\n```js\nexport default defineNuxtConfig({\n devtools: {\n timeline: {\n functions: {\n include: [\n // track `useMouse`\n 'useMouse',\n // track all functions starting with `use`\n /^use[A-Z]/,\n // track all functions from @vueuse/core\n entry => entry.from === '@vueuse/core',\n ],\n exclude: [\n 'useRouter'\n ]\n }\n }\n }\n})\n```\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent } from \"vue/server-renderer\"\n\nimport { createTemplatePromise } from '@vueuse/core'\nimport { definePageMeta, devtoolsUiShowNotification } from '#imports'\nimport { useOpenInEditor } from '~/composables/editor'\nimport { rpc } from '~/composables/rpc'\nimport { useModuleOptions, useServerConfig } from '~/composables/state'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'timeline',\n __ssrInlineRender: true,\n setup(__props) {\n\ndefinePageMeta({\n icon: 'i-carbon-roadmap',\n title: 'Timeline',\n category: 'analyze',\n})\n\nconst options = useModuleOptions()\nconst config = useServerConfig()\n\nconst Dialog = createTemplatePromise<boolean, [string, string]>()\n\nconst openInEditor = useOpenInEditor()\n\nasync function showPopup() {\n try {\n const [source, modified] = await rpc.enableTimeline(true)\n if (!await Dialog.start(source, modified))\n return\n await rpc.enableTimeline(false)\n }\n catch {\n devtoolsUiShowNotification({\n message: 'Failed to enable timeline automatically. Check the terminal for more details.',\n icon: 'i-carbon-warning',\n classes: 'text-red',\n })\n }\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_TimelineView = _resolveComponent(\"TimelineView\")!\n const _component_NPanelGrids = _resolveComponent(\"NPanelGrids\")!\n const _component_LaunchPage = _resolveComponent(\"LaunchPage\")!\n const _component_NDialog = _resolveComponent(\"NDialog\")!\n const _component_NLink = _resolveComponent(\"NLink\")!\n const _component_CodeDiff = _resolveComponent(\"CodeDiff\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_HelpFab = _resolveComponent(\"HelpFab\")!\n const _component_DocsTimeline = _resolveComponent(\"DocsTimeline\")!\n\n _push(`<!--[-->`)\n if (_unref(options)?.timeline?.enabled) {\n _push(_ssrRenderComponent(_component_TimelineView, null, null, _parent))\n } else {\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NPanelGrids, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_LaunchPage, {\n icon: \"i-carbon-roadmap\",\n name: \"feature-timeline\",\n title: \"Timeline\",\n description: \"Timeline enables the inspection of when composable being executed and the route changes.\",\n actions: [\n {\n label: 'Enable',\n },\n ],\n onAction: showPopup\n }, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_LaunchPage, {\n icon: \"i-carbon-roadmap\",\n name: \"feature-timeline\",\n title: \"Timeline\",\n description: \"Timeline enables the inspection of when composable being executed and the route changes.\",\n actions: [\n {\n label: 'Enable',\n },\n ],\n onAction: showPopup\n })\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(_ssrRenderComponent(_unref(Dialog), null, {\n default: _withCtx(({ resolve, args }, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_NDialog, {\n \"model-value\": true,\n onClose: ($event: any) => (resolve(false))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ col gap-2\" w-150 p4 border=\"t base\"${\n _scopeId\n }><h2 text-xl${\n _scopeId\n }><span capitalize${\n _scopeId\n }>Enable Timeline?</span></h2><p op50${\n _scopeId\n }> Your `)\n _push(_ssrRenderComponent(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile))\n }, null, _parent, _scopeId))\n _push(` will be updated as: </p>`)\n _push(_ssrRenderComponent(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, _parent, _scopeId))\n _push(`<p${\n _scopeId\n }><span op50${\n _scopeId\n }>Then Nuxt will </span><span text-orange${\n _scopeId\n }>restart automatically</span>. </p><div flex=\"~ gap-3\" mt2 justify-end${\n _scopeId\n }>`)\n _push(_ssrRenderComponent(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Cancel `)\n } else {\n return [\n _createTextVNode(\" Cancel \")\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Enable `)\n } else {\n return [\n _createTextVNode(\" Enable \")\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n return [\n _createVNode(\"div\", {\n flex: \"~ col gap-2\",\n \"w-150\": \"\",\n p4: \"\",\n border: \"t base\"\n }, [\n _createVNode(\"h2\", { \"text-xl\": \"\" }, [\n _createVNode(\"span\", { capitalize: \"\" }, \"Enable Timeline?\")\n ]),\n _createVNode(\"p\", { op50: \"\" }, [\n _createTextVNode(\" Your \"),\n _createVNode(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile)),\n textContent: 'Nuxt config'\n }, null, 8, [\"onClick\"]),\n _createTextVNode(\" will be updated as: \")\n ]),\n _createVNode(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, 8, [\"from\", \"to\"]),\n _createVNode(\"p\", null, [\n _createVNode(\"span\", { op50: \"\" }, \"Then Nuxt will \"),\n _createVNode(\"span\", { \"text-orange\": \"\" }, \"restart automatically\"),\n _createTextVNode(\". \")\n ]),\n _createVNode(\"div\", {\n flex: \"~ gap-3\",\n mt2: \"\",\n \"justify-end\": \"\"\n }, [\n _createVNode(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Cancel \")\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n _createVNode(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Enable \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ])\n ]\n }\n }),\n _: 2\n }, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_NDialog, {\n \"model-value\": true,\n onClose: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", {\n flex: \"~ col gap-2\",\n \"w-150\": \"\",\n p4: \"\",\n border: \"t base\"\n }, [\n _createVNode(\"h2\", { \"text-xl\": \"\" }, [\n _createVNode(\"span\", { capitalize: \"\" }, \"Enable Timeline?\")\n ]),\n _createVNode(\"p\", { op50: \"\" }, [\n _createTextVNode(\" Your \"),\n _createVNode(_component_NLink, {\n role: \"button\",\n n: \"primary\",\n underline: \"\",\n onClick: ($event: any) => (_unref(openInEditor)(_unref(config)?._nuxtConfigFile)),\n textContent: 'Nuxt config'\n }, null, 8, [\"onClick\"]),\n _createTextVNode(\" will be updated as: \")\n ]),\n _createVNode(_component_CodeDiff, {\n from: args[0],\n to: args[1],\n \"max-h-80\": \"\",\n \"of-auto\": \"\",\n py2: \"\",\n border: \"~ base rounded\",\n lang: \"ts\"\n }, null, 8, [\"from\", \"to\"]),\n _createVNode(\"p\", null, [\n _createVNode(\"span\", { op50: \"\" }, \"Then Nuxt will \"),\n _createVNode(\"span\", { \"text-orange\": \"\" }, \"restart automatically\"),\n _createTextVNode(\". \")\n ]),\n _createVNode(\"div\", {\n flex: \"~ gap-3\",\n mt2: \"\",\n \"justify-end\": \"\"\n }, [\n _createVNode(_component_NButton, {\n onClick: ($event: any) => (resolve(false))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Cancel \")\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n _createVNode(_component_NButton, {\n n: \"solid primary\",\n capitalize: \"\",\n onClick: ($event: any) => (resolve(true))\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Enable \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ])\n ]),\n _: 2\n }, 1032, [\"onClose\"])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n }\n _push(_ssrRenderComponent(_component_HelpFab, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_DocsTimeline, null, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_DocsTimeline)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport { createTemplatePromise } from '@vueuse/core'\nimport { definePageMeta, devtoolsUiShowNotification } from '#imports'\nimport { useOpenInEditor } from '~/composables/editor'\nimport { rpc } from '~/composables/rpc'\nimport { useModuleOptions, useServerConfig } from '~/composables/state'\n\ndefinePageMeta({\n icon: 'i-carbon-roadmap',\n title: 'Timeline',\n category: 'analyze',\n})\n\nconst options = useModuleOptions()\nconst config = useServerConfig()\n\nconst Dialog = createTemplatePromise<boolean, [string, string]>()\n\nconst openInEditor = useOpenInEditor()\n\nasync function showPopup() {\n try {\n const [source, modified] = await rpc.enableTimeline(true)\n if (!await Dialog.start(source, modified))\n return\n await rpc.enableTimeline(false)\n }\n catch {\n devtoolsUiShowNotification({\n message: 'Failed to enable timeline automatically. Check the terminal for more details.',\n icon: 'i-carbon-warning',\n classes: 'text-red',\n })\n }\n}\n</script>\n\n<template>\n <TimelineView v-if=\"options?.timeline?.enabled\" />\n <template v-else>\n <NPanelGrids>\n <LaunchPage\n icon=\"i-carbon-roadmap\"\n name=\"feature-timeline\"\n title=\"Timeline\"\n description=\"Timeline enables the inspection of when composable being executed and the route changes.\"\n :actions=\"[\n {\n label: 'Enable',\n },\n ]\"\n @action=\"showPopup\"\n />\n </NPanelGrids>\n <Dialog v-slot=\"{ resolve, args }\">\n <NDialog :model-value=\"true\" @close=\"resolve(false)\">\n <div flex=\"~ col gap-2\" w-150 p4 border=\"t base\">\n <h2 text-xl>\n <span capitalize>Enable Timeline?</span>\n </h2>\n\n <p op50>\n Your <NLink\n role=\"button\" n=\"primary\" underline\n @click=\"openInEditor(config?._nuxtConfigFile)\"\n v-text=\"'Nuxt config'\"\n /> will be updated as:\n </p>\n\n <CodeDiff\n :from=\"args[0]\"\n :to=\"args[1]\"\n max-h-80 of-auto py2 border=\"~ base rounded\"\n lang=\"ts\"\n />\n\n <p>\n <span op50>Then Nuxt will </span><span text-orange>restart automatically</span>.\n </p>\n\n <div flex=\"~ gap-3\" mt2 justify-end>\n <NButton @click=\"resolve(false)\">\n Cancel\n </NButton>\n <NButton n=\"solid primary\" capitalize @click=\"resolve(true)\">\n Enable\n </NButton>\n </div>\n </div>\n </NDialog>\n </Dialog>\n </template>\n\n <HelpFab>\n <DocsTimeline />\n </HelpFab>\n</template>\n"],"version":3}
|