@nuxt/devtools 4.0.0-alpha.17 → 4.0.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/_nuxt/{CodeDiff-DgjeLx6z.js.map.json → CodeDiff-C5IA82Lq.js.map.json} +1 -1
  2. package/dist/_nuxt/{CodeSnippets-CgfcaS4Z.js.map.json → CodeSnippets-iUZQ267m.js.map.json} +1 -1
  3. package/dist/_nuxt/{ComposableItem-BWQR7_fI.js.map.json → ComposableItem-K51Uhl0G.js.map.json} +1 -1
  4. package/dist/_nuxt/{DataSchemaButton-CqEfc2TV.js.map.json → DataSchemaButton-DdHHdnES.js.map.json} +1 -1
  5. package/dist/_nuxt/{DataSchemaDrawer-Xj8YzNJN.js.map.json → DataSchemaDrawer-2qqeTeF6.js.map.json} +1 -1
  6. package/dist/_nuxt/{FilepathItem-D75bkTSa.js.map.json → FilepathItem-D6jrZnIo.js.map.json} +1 -1
  7. package/dist/_nuxt/{HelpFab-CH7NlsDf.js.map.json → HelpFab-xcWoP6o_.js.map.json} +1 -1
  8. package/dist/_nuxt/{LaunchPage-ByG-3KVi.js.map.json → LaunchPage-DVRrHA9i.js.map.json} +1 -1
  9. package/dist/_nuxt/{NCheckbox-OMIu_LTG.js.map.json → NCheckbox-Cq1GuyrF.js.map.json} +1 -1
  10. package/dist/_nuxt/{NDrawer-C6Opm19C.js.map.json → NDrawer-C_ZAB3z9.js.map.json} +1 -1
  11. package/dist/_nuxt/{NDropdown-DseEG3tA.js.map.json → NDropdown-CzJi2B9y.js.map.json} +1 -1
  12. package/dist/_nuxt/NIcon-B-t2-q1r.js.map.json +1 -0
  13. package/dist/_nuxt/{NLink-Rsxlt1NN.js.map.json → NLink-DIWpT2C-.js.map.json} +1 -1
  14. package/dist/_nuxt/{NNavbar-CS-Z1Cle.js.map.json → NNavbar-BShfBHAc.js.map.json} +1 -1
  15. package/dist/_nuxt/{NSectionBlock-C7kcMkbf.js.map.json → NSectionBlock-Cm4pPEIM.js.map.json} +1 -1
  16. package/dist/_nuxt/{NSelect-geGP1eOG.js.map.json → NSelect-9Nk3v_sQ.js.map.json} +1 -1
  17. package/dist/_nuxt/{NSelectTabs-nUMnNQy-.js.map.json → NSelectTabs-D8amX2yN.js.map.json} +1 -1
  18. package/dist/_nuxt/{NSplitPane-Bh0o_t5e.js.map.json → NSplitPane-CWyIovAp.js.map.json} +1 -1
  19. package/dist/_nuxt/{NTip-DRnTpLjG.js.map.json → NTip-BVi1j0Ir.js.map.json} +1 -1
  20. package/dist/_nuxt/{ServerRouteInputs-BhIrPxPN.js.map.json → ServerRouteInputs-lclUilqu.js.map.json} +1 -1
  21. package/dist/_nuxt/{StacktraceList-B-ehJIQ-.js.map.json → StacktraceList-BUhKgrAv.js.map.json} +1 -1
  22. package/dist/_nuxt/{StateEditor-Yqdbqk_c.js.map.json → StateEditor-D_NCPzZq.js.map.json} +1 -1
  23. package/dist/_nuxt/{__blank-BM2yOFO6.js.map.json → __blank-BgoalQAL.js.map.json} +1 -1
  24. package/dist/_nuxt/{analyze-build-Cemp_oBq.js.map.json → analyze-build-DSk_N3wx.js.map.json} +1 -1
  25. package/dist/_nuxt/assets-6seYEHqs.js.map.json +1 -0
  26. package/dist/_nuxt/{components-BJnHweOE.js.map.json → components-CTVOL1-D.js.map.json} +1 -1
  27. package/dist/_nuxt/custom-_name_-DRWuAoZa.js.map.json +1 -0
  28. package/dist/_nuxt/{debug-BcJZ8M6i.js.map.json → debug-CpWOyAbK.js.map.json} +1 -1
  29. package/dist/_nuxt/entry-uV9FV_26.js.map.json +1 -0
  30. package/dist/_nuxt/{error-404-dySA7T2P.js.map.json → error-404-BN7jSsJU.js.map.json} +1 -1
  31. package/dist/_nuxt/{error-500-2Ody89Er.js.map.json → error-500-CX60RT79.js.map.json} +1 -1
  32. package/dist/_nuxt/{error-hGc4cWUU.js.map.json → error-YOq9ydYM.js.map.json} +1 -1
  33. package/dist/_nuxt/{head-BTCtirw3.js.map.json → head-Q3WHkZN-.js.map.json} +1 -1
  34. package/dist/_nuxt/{hooks-BVzlIVXR.js.map.json → hooks-Dfejz2-5.js.map.json} +1 -1
  35. package/dist/_nuxt/{imports-B3k4BZF7.js.map.json → imports-CCepJr4G.js.map.json} +1 -1
  36. package/dist/_nuxt/{modules-Ck915TxZ.js.map.json → modules-CDEu6e8J.js.map.json} +1 -1
  37. package/dist/_nuxt/nuxt-B-ZgUV2U.js.map.json +1 -0
  38. package/dist/_nuxt/{nuxt-link-C-BBeF5l.js.map.json → nuxt-link-X36zPJaC.js.map.json} +1 -1
  39. package/dist/_nuxt/{open-graph-ll_bjX_m.js.map.json → open-graph-RnltEfE1.js.map.json} +1 -1
  40. package/dist/_nuxt/overview-0981_RjH.js.map.json +1 -0
  41. package/dist/_nuxt/{pages-BddDWJsZ.js.map.json → pages-BJY0ZMcV.js.map.json} +1 -1
  42. package/dist/_nuxt/{pages-CrUWMxGz.js.map.json → pages-Dv_rq-A5.js.map.json} +1 -1
  43. package/dist/_nuxt/{pages-DWELoQlh.js.map.json → pages-c-R2EyNA.js.map.json} +1 -1
  44. package/dist/_nuxt/{payload-29bFuqLh.js.map.json → payload-EEc-a5Rs.js.map.json} +1 -1
  45. package/dist/_nuxt/{plugins-fmmRaH-S.js.map.json → plugins-DBU4EaVz.js.map.json} +1 -1
  46. package/dist/_nuxt/{ready-BQ1fhXgL.js.map.json → ready-B0tgRAWs.js.map.json} +1 -1
  47. package/dist/_nuxt/{runtime-configs-iL68LNkj.js.map.json → runtime-configs-eyjqyWy0.js.map.json} +1 -1
  48. package/dist/_nuxt/server-routes-CmFWvg0q.js.map.json +1 -0
  49. package/dist/_nuxt/server-tasks-y13wW_sS.js.map.json +1 -0
  50. package/dist/_nuxt/{settings-Qa45tU8e.js.map.json → settings-CQHWdQH5.js.map.json} +1 -1
  51. package/dist/_nuxt/{state-components-CksF081b.js.map.json → state-components-BtOK14JS.js.map.json} +1 -1
  52. package/dist/_nuxt/state-modules-B1t4RCwZ.js.map.json +1 -0
  53. package/dist/_nuxt/{state-tabs-m1o-BX5R.js.map.json → state-tabs-DgyOko_b.js.map.json} +1 -1
  54. package/dist/_nuxt/storage-CL3RFmxG.js.map.json +1 -0
  55. package/dist/_nuxt/{timeline-Dukbqafi.js.map.json → timeline-CrhB_ydt.js.map.json} +1 -1
  56. package/dist/_nuxt/utils-DdQYVRed.js.map.json +1 -0
  57. package/dist/_nuxt/{virtual-files-BQJM45QE.js.map.json → virtual-files-WqYqMpE0.js.map.json} +1 -1
  58. package/dist/_nuxt/virtual_nuxt_node_modules_.cache_nuxt_.nuxt_fetch.server-pxhz0pzP.js.map.json +1 -0
  59. package/dist/chunks/module-main.mjs +59 -40
  60. package/dist/index.mjs.map.json +1 -1
  61. package/dist/module.json +1 -1
  62. package/dist/runtime/shared/hooks.d.ts +10 -2
  63. package/dist/server.mjs.map.json +1 -1
  64. package/package.json +20 -20
  65. package/dist/_nuxt/AuthRequiredPanel-znjaI7oT.js.map.json +0 -1
  66. package/dist/_nuxt/NIcon-cjduOh_B.js.map.json +0 -1
  67. package/dist/_nuxt/assets-rTFAaows.js.map.json +0 -1
  68. package/dist/_nuxt/custom-_name_-DI8dnRDD.js.map.json +0 -1
  69. package/dist/_nuxt/entry-DZwY6FLS.js.map.json +0 -1
  70. package/dist/_nuxt/nuxt-C5VITehY.js.map.json +0 -1
  71. package/dist/_nuxt/overview-CyqDmfdE.js.map.json +0 -1
  72. package/dist/_nuxt/server-routes-Dy5_Ljmu.js.map.json +0 -1
  73. package/dist/_nuxt/server-tasks-CD-7IPFD.js.map.json +0 -1
  74. package/dist/_nuxt/state-modules-CyH4hWeN.js.map.json +0 -1
  75. package/dist/_nuxt/storage-BylO3p9r.js.map.json +0 -1
  76. package/dist/_nuxt/utils-BfB0tRbX.js.map.json +0 -1
@@ -1 +1 @@
1
- {"file":"components-BJnHweOE.js","mappings":"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","names":[],"sources":["../../../../../../../../components/docs/components.md","../../../../../../../../components/ComponentName.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentName.vue","../../../../../../../../components/ComponentDetails.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentDetails.vue","../../../../../../../../components/ComponentsGraph.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentsGraph.vue","../../../../../../../../components/ComponentItem.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentItem.vue","../../../../../../../../components/ComponentsList.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentsList.vue","../../../../../../../../pages/modules/components.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../pages/modules/components.vue"],"sourcesContent":["# Components\n\nVue Components allow us to split the UI into independent and reusable pieces, and think about each piece in isolation. This is very similar to how we nest native HTML elements, but Vue implements its own component model that allow us to encapsulate custom content and logic in each component.\n\nComponents placed in the components/ directory are automatically registered by Nuxt. They can be used in your templates without importing them.\n\n[Learn more in the documentation](https://nuxt.com/docs/guide/directory-structure/components)\n","import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentName',\n __ssrInlineRender: true,\n props: {\n component: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n _push(`<code${\n _ssrRenderAttrs(_mergeProps({\n \"text-sm\": \"\",\n \"font-mono\": \"\"\n }, _attrs))\n }><span mr1 op20>&lt;</span>${\n _ssrInterpolate(name.value)\n }<span ml1 op20>/&gt;</span></code>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n component: Component\n}>()\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n</script>\n\n<template>\n <code text-sm font-mono><span mr1 op20>&lt;</span>{{ name }}<span ml1 op20>/&gt;</span></code>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderSlot as _ssrRenderSlot, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\nimport { useCopy } from '~/composables/editor'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentDetails',\n __ssrInlineRender: true,\n props: {\n component: {},\n dependencies: {},\n dependents: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\nconst copy = useCopy()\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_ComponentName = _resolveComponent(\"ComponentName\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_FilepathItem = _resolveComponent(\"FilepathItem\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n flex: \"~ col gap1\",\n \"items-start\": \"\",\n \"of-hidden\": \"\"\n }, _attrs))}><div flex=\"~ gap2 items-center\" px3>`)\n _push(_ssrRenderComponent(_component_ComponentName, { component: __props.component }, null, _parent))\n if (__props.component.meta?.docs && typeof __props.component.meta.docs === 'string') {\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Open docs\",\n \"flex-none\": \"\",\n n: \"xs\",\n to: __props.component.meta.docs,\n target: \"_blank\",\n icon: \"carbon-catalog\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Docs `)\n } else {\n return [\n _createTextVNode(\" Docs \")\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Copy name\",\n \"flex-none\": \"\",\n n: \"xs\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(`<${name.value}></${name.value}>`, 'component-name'))\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))\n if (__props.component.global) {\n _push(_ssrRenderComponent(_component_NBadge, {\n n: \"green\",\n title: \"Registered at runtime as a global component\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div><div px3 pb2>`)\n if (filePath.value) {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n filepath: filePath.value,\n \"w-full\": \"\",\n \"text-sm\": \"\",\n op40: \"\",\n \"group-hover:op75\": \"\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n if (__props.dependents) {\n _push(`<div border=\"t base\" max-h-60 w-full of-auto px3 py3><div text-sm><strong text-primary>${_ssrInterpolate(__props.dependents.length)}</strong><span op50> references</span></div>`)\n if (__props.dependents.length) {\n _push(`<div flex=\"~ col gap-2\" items-start pt3 text-sm op75><!--[-->`)\n _ssrRenderList(__props.dependents, (id) => {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n key: id,\n filepath: id\n }, null, _parent))\n })\n _push(`<!--]--></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n if (__props.dependencies) {\n _push(`<div border=\"t base\" max-h-60 w-full of-auto px3 py3><div text-sm><strong text-primary>${_ssrInterpolate(__props.dependencies.length)}</strong><span op50> dependencies</span></div>`)\n if (__props.dependencies.length) {\n _push(`<div flex=\"~ col gap-2\" items-start pt3 text-sm op75><!--[-->`)\n _ssrRenderList(__props.dependencies, (id) => {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n key: id,\n filepath: id\n }, null, _parent))\n })\n _push(`<!--]--></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent)\n _push(`</div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\nimport { useCopy } from '~/composables/editor'\n\nconst props = defineProps<{\n component: Component\n dependencies?: string[]\n dependents?: string[]\n}>()\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\nconst copy = useCopy()\n</script>\n\n<template>\n <div flex=\"~ col gap1\" items-start of-hidden>\n <div flex=\"~ gap2 items-center\" px3>\n <ComponentName :component=\"component\" />\n <NButton\n v-if=\"component.meta?.docs && typeof component.meta.docs === 'string'\"\n title=\"Open docs\" flex-none n=\"xs\"\n :to=\"component.meta.docs\" target=\"_blank\"\n icon=\"carbon-catalog\"\n >\n Docs\n </NButton>\n <NButton\n title=\"Copy name\" flex-none n=\"xs\"\n icon=\"carbon-copy\"\n @click=\"copy(`<${name}></${name}>`, 'component-name')\"\n >\n Copy\n </NButton>\n <NBadge\n v-if=\"component.global\"\n n=\"green\"\n title=\"Registered at runtime as a global component\"\n v-text=\"'runtime'\"\n />\n </div>\n <div px3 pb2>\n <FilepathItem\n v-if=\"filePath\"\n :filepath=\"filePath\"\n w-full text-sm op40 group-hover:op75\n />\n </div>\n\n <div v-if=\"dependents\" border=\"t base\" max-h-60 w-full of-auto px3 py3>\n <div text-sm>\n <strong text-primary>{{ dependents.length }}</strong><span op50> references</span>\n </div>\n <div v-if=\"dependents.length\" flex=\"~ col gap-2\" items-start pt3 text-sm op75>\n <FilepathItem\n v-for=\"id of dependents\" :key=\"id\"\n :filepath=\"id\"\n />\n </div>\n </div>\n\n <div v-if=\"dependencies\" border=\"t base\" max-h-60 w-full of-auto px3 py3>\n <div text-sm>\n <strong text-primary>{{ dependencies.length }}</strong><span op50> dependencies</span>\n </div>\n <div v-if=\"dependencies.length\" flex=\"~ col gap-2\" items-start pt3 text-sm op75>\n <FilepathItem\n v-for=\"id of dependencies\" :key=\"id\"\n :filepath=\"id\"\n />\n </div>\n </div>\n\n <slot />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, withCtx as _withCtx, createVNode as _createVNode, isRef as _isRef, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderSlot as _ssrRenderSlot } from \"vue/server-renderer\"\n\nimport type { Component, NuxtLayout, NuxtPage } from 'nuxt/schema'\nimport type { Data, DataSetNodes, Node, Options } from 'vis-network'\nimport type { ComponentRelationship } from '~/../src/types'\nimport { useDebounce } from '@vueuse/core'\nimport { DataSet } from 'vis-data'\nimport { Network } from 'vis-network'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useLayouts, useServerConfig, useServerPages } from '~/composables/state'\nimport { useDevToolsOptions } from '../composables/storage-options'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentsGraph',\n __ssrInlineRender: true,\n props: {\n components: {},\n relationships: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst container = ref<HTMLElement>()\nconst navbar = ref<HTMLElement>()\nconst colorMode = getColorMode()\n\nconst selected = shallowRef<{\n id: string\n component?: Component\n page?: NuxtPage\n layout?: NuxtLayout\n relationship?: ComponentRelationship\n}>()\n\nconst pages = useServerPages()\nconst config = useServerConfig()\nconst layouts = useLayouts()\n\nconst {\n componentsGraphShowNodeModules: showNodeModules,\n componentsGraphShowGlobalComponents: showGlobalComponents,\n componentsGraphShowPages: showPages,\n componentsGraphShowLayouts: showLayouts,\n componentsGraphShowWorkspace: showWorkspace,\n} = useDevToolsOptions('ui')\n\nconst selectedFilter = ref<ComponentRelationship>()\n\nconst search = ref('')\nconst searchDebounced = useDebounce(search, 300)\n\nconst entries = computed(() => {\n const relations = (props.relationships || [])\n if (selectedFilter.value) {\n const set = new Set<ComponentRelationship>()\n function addToSet(rel?: ComponentRelationship) {\n if (!rel || set.has(rel))\n return\n set.add(rel)\n rel.deps.forEach((dep) => {\n addToSet(relations.find(i => i.id === dep))\n })\n }\n addToSet(selectedFilter.value)\n return [...set]\n }\n return relations\n})\n\nconst data = computed<Data>(() => {\n const nodes: Data['nodes'] = entries.value.map((rel): Node | null => {\n const component = props.components.find(i => i.filePath === rel.id)\n const page = pages.value?.find(i => i.file === rel.id)\n const layout = layouts.value?.find(i => i.file === rel.id)\n\n const group = rel.id.includes('/node_modules/')\n ? 'lib'\n : component\n ? component.global\n ? 'global'\n : 'user'\n : layout\n ? 'layout'\n : page\n ? 'page'\n : 'unknown'\n\n if (!showNodeModules.value && group === 'lib')\n return null\n if (!showPages.value && group === 'page')\n return null\n if (!showLayouts.value && group === 'layout')\n return null\n if (!showWorkspace.value && group === 'user' && config.value && !rel.id.startsWith(config.value.rootDir))\n return null\n if (!showGlobalComponents.value && group === 'global')\n return null\n\n const shape = group === 'layout'\n ? 'hexagon'\n : group === 'page'\n ? 'square'\n : 'dot'\n\n const isGrayedOut = searchDebounced.value && !rel.id.toLowerCase().includes(searchDebounced.value.toLowerCase())\n\n return {\n id: rel.id,\n label: getComponentName(rel.id),\n group,\n shape,\n size: 15 + Math.min(rel.deps.length / 2, 8),\n font: {\n color: isGrayedOut ? '#8885' : (colorMode.value === 'dark' ? 'white' : 'black'),\n },\n color: isGrayedOut ? '#8885' : selectedFilter.value?.id === rel.id ? '#82c742' : undefined,\n // @ts-expect-error additional data\n extra: {\n id: rel.id,\n component,\n page,\n layout,\n relationship: rel,\n },\n }\n }).filter((x): x is Node => !!x)\n\n const edges: Data['edges'] = entries.value.flatMap(rel => rel.deps.map(dep => ({\n from: rel.id,\n to: dep,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n })))\n\n return {\n nodes: new DataSet(nodes),\n edges,\n }\n})\n\nconst selectedDependencies = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.find(i => i.id === selected.value?.component?.filePath)?.deps\n return deps?.map(i => props.relationships?.find(j => j.id === i)?.id).filter(Boolean) as string[]\n})\n\nconst selectedDependents = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.filter(i => i.deps.includes(selected.value!.component!.filePath!))\n return deps?.map(i => props.relationships?.find(j => j.id === i.id)?.id).filter(Boolean) as string[]\n})\n\nonMounted(() => {\n const options: Options = {\n nodes: {\n shape: 'dot',\n size: 16,\n },\n physics: {\n repulsion: {\n centralGravity: 0.7,\n springLength: 100,\n springConstant: 0.01,\n },\n maxVelocity: 146,\n solver: 'forceAtlas2Based',\n timestep: 0.35,\n stabilization: {\n enabled: true,\n iterations: 200,\n },\n },\n groups: {\n user: {\n color: '#42b883',\n },\n unknown: {\n color: '#b86542',\n },\n lib: {\n color: '#b4b842',\n },\n page: {\n color: '#42b2b8',\n },\n layout: {\n color: '#4256b8',\n },\n },\n }\n const network = new Network(container.value!, data.value, options)\n\n network.on('click', (e) => {\n const id = e.nodes?.[0]\n const node = ((data.value.nodes as DataSetNodes).get(id) as any).extra\n selected.value = node\n })\n\n watch(data, () => {\n network.setData(data.value)\n })\n})\n\nfunction onCloseDrawer() {\n selected.value = undefined\n}\n\nconst COMPONENTS_PATH_RE = /.*\\/components\\//\nconst VUE_EXT_RE = /\\.vue$/\nconst INDEX_SUFFIX_RE = /\\/index$/\n\nfunction getComponentName(path: string) {\n const component = props.components.find(i => i.filePath === path)\n if (component)\n return component.pascalName\n return path\n .replace(COMPONENTS_PATH_RE, '')\n .replace(VUE_EXT_RE, '')\n .replace(INDEX_SUFFIX_RE, '')\n .split('/')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction setFilter() {\n selectedFilter.value = selected.value?.relationship\n selected.value = undefined\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NNavbar = _resolveComponent(\"NNavbar\")!\n const _component_NCheckbox = _resolveComponent(\"NCheckbox\")!\n const _component_NCard = _resolveComponent(\"NCard\")!\n const _component_NDrawer = _resolveComponent(\"NDrawer\")!\n const _component_ComponentDetails = _resolveComponent(\"ComponentDetails\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NNavbar, {\n ref_key: \"navbar\",\n ref: navbar,\n search: search.value,\n \"onUpdate:search\": ($event: any) => ((search).value = $event),\n absolute: \"\",\n \"left-0\": \"\",\n \"right-0\": \"\",\n \"top-0\": \"\"\n }, {\n actions: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ gap-x-3 gap-y-1 wrap\" w-full${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showPages),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showPages) ? (showPages).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show pages</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show pages\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showLayouts),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showLayouts) ? (showLayouts).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show layouts</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show layouts\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showWorkspace),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showWorkspace) ? (showWorkspace).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show workspace</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show workspace\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showNodeModules),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showNodeModules) ? (showNodeModules).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show node_modules</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show node_modules\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showGlobalComponents),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showGlobalComponents) ? (showGlobalComponents).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show global components</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show global components\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div>`)\n if (selectedFilter.value) {\n _push(`<button flex=\"~ gap-1\" flex-none items-center rounded-full bg-gray:20 py1 pl3 pr2 text-xs op50 hover:op100${\n _scopeId\n }> Clear filter <div i-carbon-close${\n _scopeId\n }></div></button>`)\n } else {\n _push(`<!---->`)\n }\n _push(`<div flex-auto${_scopeId}></div>`)\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent, _scopeId)\n } else {\n return [\n _createVNode(\"div\", {\n flex: \"~ gap-x-3 gap-y-1 wrap\",\n \"w-full\": \"\"\n }, [\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showPages),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showPages) ? (showPages).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show pages\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showLayouts),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showLayouts) ? (showLayouts).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show layouts\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showWorkspace),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showWorkspace) ? (showWorkspace).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show workspace\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showNodeModules),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showNodeModules) ? (showNodeModules).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show node_modules\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showGlobalComponents),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showGlobalComponents) ? (showGlobalComponents).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show global components\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ]),\n (selectedFilter.value)\n ? (_openBlock(), _createBlock(\"button\", {\n key: 0,\n flex: \"~ gap-1\",\n \"flex-none\": \"\",\n \"items-center\": \"\",\n \"rounded-full\": \"\",\n \"bg-gray:20\": \"\",\n py1: \"\",\n pl3: \"\",\n pr2: \"\",\n \"text-xs\": \"\",\n op50: \"\",\n \"hover:op100\": \"\",\n onClick: ($event: any) => (selectedFilter.value = undefined)\n }, [\n _createTextVNode(\" Clear filter \"),\n _createVNode(\"div\", { \"i-carbon-close\": \"\" })\n ], 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", { \"flex-auto\": \"\" }),\n _renderSlot(_ctx.$slots, \"default\")\n ]\n }\n }),\n _: 3\n }, _parent))\n _push(`<div relative h-full w-full><div h-full w-full></div>`)\n _push(_ssrRenderComponent(_component_NCard, {\n absolute: \"\",\n \"bottom-3\": \"\",\n \"left-3\": \"\",\n \"border-0\": \"\",\n \"n-glass-effect\": \"\",\n p2: \"\",\n px3: \"\",\n \"text-sm\": \"\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div grid=\"~ cols-[20px_1fr] items-center gap-y-1\"${\n _scopeId\n }><div h-3 w-3 rounded-full bg-hex-42b883${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Component </div><div h-3 w-3 rounded-full bg-hex-97c2fc${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Global Component </div><div h-3 w-3 bg-hex-42b2b8${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Page </div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 726 628\" ml--1px h-3${\n _scopeId\n }><path fill=\"#4256b8\" stroke-width=\"4\" d=\"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\"${\n _scopeId\n }></path></svg><div op50${\n _scopeId\n }> Layout </div><div h-3 w-3 rounded-full bg-hex-b4b842${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Library Component </div><div h-3 w-3 rounded-full bg-hex-b86542${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Unknown </div></div>`)\n } else {\n return [\n _createVNode(\"div\", { grid: \"~ cols-[20px_1fr] items-center gap-y-1\" }, [\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-42b883\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-97c2fc\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Global Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"bg-hex-42b2b8\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Page \"),\n (_openBlock(), _createBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 726 628\",\n \"ml--1px\": \"\",\n \"h-3\": \"\"\n }, [\n _createVNode(\"path\", {\n fill: \"#4256b8\",\n \"stroke-width\": \"4\",\n d: \"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\"\n })\n ])),\n _createVNode(\"div\", { op50: \"\" }, \" Layout \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-b4b842\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Library Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-b86542\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Unknown \")\n ])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(_ssrRenderComponent(_component_NDrawer, {\n \"model-value\": !!(selected.value && selected.value.component),\n top: navbar.value,\n border: \"t l base\",\n \"w-80\": \"\",\n onClose: onCloseDrawer\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n if (selected.value && selected.value.component) {\n _push(`<div py4 pt3 flex=\"~ col\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_ComponentDetails, {\n component: selected.value.component,\n dependencies: selectedDependencies.value,\n dependents: selectedDependents.value\n }, null, _parent, _scopeId))\n _push(`<div border=\"t base\" p4${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, {\n n: \"primary solid\",\n onClick: ($event: any) => (setFilter())\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Filter to this component `)\n } else {\n return [\n _createTextVNode(\" Filter to this component \")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n _push(`<!---->`)\n }\n } else {\n return [\n (selected.value && selected.value.component)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n py4: \"\",\n pt3: \"\",\n flex: \"~ col\"\n }, [\n _createVNode(_component_ComponentDetails, {\n component: selected.value.component,\n dependencies: selectedDependencies.value,\n dependents: selectedDependents.value\n }, null, 8, [\"component\", \"dependencies\", \"dependents\"]),\n _createVNode(\"div\", {\n border: \"t base\",\n p4: \"\"\n }, [\n _createVNode(_component_NButton, {\n n: \"primary solid\",\n onClick: ($event: any) => (setFilter())\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Filter to this component \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`</div><!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component, NuxtLayout, NuxtPage } from 'nuxt/schema'\nimport type { Data, DataSetNodes, Node, Options } from 'vis-network'\nimport type { ComponentRelationship } from '~/../src/types'\nimport { useDebounce } from '@vueuse/core'\nimport { DataSet } from 'vis-data'\nimport { Network } from 'vis-network'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useLayouts, useServerConfig, useServerPages } from '~/composables/state'\nimport { useDevToolsOptions } from '../composables/storage-options'\n\nconst props = defineProps<{\n components: Component[]\n relationships?: ComponentRelationship[] | null\n}>()\n\nconst container = ref<HTMLElement>()\nconst navbar = ref<HTMLElement>()\nconst colorMode = getColorMode()\n\nconst selected = shallowRef<{\n id: string\n component?: Component\n page?: NuxtPage\n layout?: NuxtLayout\n relationship?: ComponentRelationship\n}>()\n\nconst pages = useServerPages()\nconst config = useServerConfig()\nconst layouts = useLayouts()\n\nconst {\n componentsGraphShowNodeModules: showNodeModules,\n componentsGraphShowGlobalComponents: showGlobalComponents,\n componentsGraphShowPages: showPages,\n componentsGraphShowLayouts: showLayouts,\n componentsGraphShowWorkspace: showWorkspace,\n} = useDevToolsOptions('ui')\n\nconst selectedFilter = ref<ComponentRelationship>()\n\nconst search = ref('')\nconst searchDebounced = useDebounce(search, 300)\n\nconst entries = computed(() => {\n const relations = (props.relationships || [])\n if (selectedFilter.value) {\n const set = new Set<ComponentRelationship>()\n function addToSet(rel?: ComponentRelationship) {\n if (!rel || set.has(rel))\n return\n set.add(rel)\n rel.deps.forEach((dep) => {\n addToSet(relations.find(i => i.id === dep))\n })\n }\n addToSet(selectedFilter.value)\n return [...set]\n }\n return relations\n})\n\nconst data = computed<Data>(() => {\n const nodes: Data['nodes'] = entries.value.map((rel): Node | null => {\n const component = props.components.find(i => i.filePath === rel.id)\n const page = pages.value?.find(i => i.file === rel.id)\n const layout = layouts.value?.find(i => i.file === rel.id)\n\n const group = rel.id.includes('/node_modules/')\n ? 'lib'\n : component\n ? component.global\n ? 'global'\n : 'user'\n : layout\n ? 'layout'\n : page\n ? 'page'\n : 'unknown'\n\n if (!showNodeModules.value && group === 'lib')\n return null\n if (!showPages.value && group === 'page')\n return null\n if (!showLayouts.value && group === 'layout')\n return null\n if (!showWorkspace.value && group === 'user' && config.value && !rel.id.startsWith(config.value.rootDir))\n return null\n if (!showGlobalComponents.value && group === 'global')\n return null\n\n const shape = group === 'layout'\n ? 'hexagon'\n : group === 'page'\n ? 'square'\n : 'dot'\n\n const isGrayedOut = searchDebounced.value && !rel.id.toLowerCase().includes(searchDebounced.value.toLowerCase())\n\n return {\n id: rel.id,\n label: getComponentName(rel.id),\n group,\n shape,\n size: 15 + Math.min(rel.deps.length / 2, 8),\n font: {\n color: isGrayedOut ? '#8885' : (colorMode.value === 'dark' ? 'white' : 'black'),\n },\n color: isGrayedOut ? '#8885' : selectedFilter.value?.id === rel.id ? '#82c742' : undefined,\n // @ts-expect-error additional data\n extra: {\n id: rel.id,\n component,\n page,\n layout,\n relationship: rel,\n },\n }\n }).filter((x): x is Node => !!x)\n\n const edges: Data['edges'] = entries.value.flatMap(rel => rel.deps.map(dep => ({\n from: rel.id,\n to: dep,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n })))\n\n return {\n nodes: new DataSet(nodes),\n edges,\n }\n})\n\nconst selectedDependencies = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.find(i => i.id === selected.value?.component?.filePath)?.deps\n return deps?.map(i => props.relationships?.find(j => j.id === i)?.id).filter(Boolean) as string[]\n})\n\nconst selectedDependents = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.filter(i => i.deps.includes(selected.value!.component!.filePath!))\n return deps?.map(i => props.relationships?.find(j => j.id === i.id)?.id).filter(Boolean) as string[]\n})\n\nonMounted(() => {\n const options: Options = {\n nodes: {\n shape: 'dot',\n size: 16,\n },\n physics: {\n repulsion: {\n centralGravity: 0.7,\n springLength: 100,\n springConstant: 0.01,\n },\n maxVelocity: 146,\n solver: 'forceAtlas2Based',\n timestep: 0.35,\n stabilization: {\n enabled: true,\n iterations: 200,\n },\n },\n groups: {\n user: {\n color: '#42b883',\n },\n unknown: {\n color: '#b86542',\n },\n lib: {\n color: '#b4b842',\n },\n page: {\n color: '#42b2b8',\n },\n layout: {\n color: '#4256b8',\n },\n },\n }\n const network = new Network(container.value!, data.value, options)\n\n network.on('click', (e) => {\n const id = e.nodes?.[0]\n const node = ((data.value.nodes as DataSetNodes).get(id) as any).extra\n selected.value = node\n })\n\n watch(data, () => {\n network.setData(data.value)\n })\n})\n\nfunction onCloseDrawer() {\n selected.value = undefined\n}\n\nconst COMPONENTS_PATH_RE = /.*\\/components\\//\nconst VUE_EXT_RE = /\\.vue$/\nconst INDEX_SUFFIX_RE = /\\/index$/\n\nfunction getComponentName(path: string) {\n const component = props.components.find(i => i.filePath === path)\n if (component)\n return component.pascalName\n return path\n .replace(COMPONENTS_PATH_RE, '')\n .replace(VUE_EXT_RE, '')\n .replace(INDEX_SUFFIX_RE, '')\n .split('/')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction setFilter() {\n selectedFilter.value = selected.value?.relationship\n selected.value = undefined\n}\n</script>\n\n<template>\n <NNavbar ref=\"navbar\" v-model:search=\"search\" absolute left-0 right-0 top-0>\n <template #actions>\n <div flex=\"~ gap-x-3 gap-y-1 wrap\" w-full>\n <NCheckbox v-model=\"showPages\" n=\"primary sm\">\n <span op75>Show pages</span>\n </NCheckbox>\n <NCheckbox v-model=\"showLayouts\" n=\"primary sm\">\n <span op75>Show layouts</span>\n </NCheckbox>\n <NCheckbox v-model=\"showWorkspace\" n=\"primary sm\">\n <span op75>Show workspace</span>\n </NCheckbox>\n <NCheckbox v-model=\"showNodeModules\" n=\"primary sm\">\n <span op75>Show node_modules</span>\n </NCheckbox>\n <NCheckbox v-model=\"showGlobalComponents\" n=\"primary sm\">\n <span op75>Show global components</span>\n </NCheckbox>\n </div>\n <button v-if=\"selectedFilter\" flex=\"~ gap-1\" flex-none items-center rounded-full bg-gray:20 py1 pl3 pr2 text-xs op50 hover:op100 @click=\"selectedFilter = undefined\">\n Clear filter <div i-carbon-close />\n </button>\n <div flex-auto />\n <slot />\n </template>\n </NNavbar>\n\n <div relative h-full w-full>\n <div ref=\"container\" h-full w-full />\n <NCard absolute bottom-3 left-3 border-0 n-glass-effect p2 px3 text-sm>\n <div grid=\"~ cols-[20px_1fr] items-center gap-y-1\">\n <div h-3 w-3 rounded-full bg-hex-42b883 />\n <div op50>\n Component\n </div>\n <div h-3 w-3 rounded-full bg-hex-97c2fc />\n <div op50>\n Global Component\n </div>\n <div h-3 w-3 bg-hex-42b2b8 />\n <div op50>\n Page\n </div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 726 628\" ml--1px h-3>\n <path fill=\"#4256b8\" stroke-width=\"4\" d=\"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\" />\n </svg>\n <div op50>\n Layout\n </div>\n <div h-3 w-3 rounded-full bg-hex-b4b842 />\n <div op50>\n Library Component\n </div>\n <div h-3 w-3 rounded-full bg-hex-b86542 />\n <div op50>\n Unknown\n </div>\n </div>\n </NCard>\n <NDrawer\n :model-value=\"!!(selected && selected.component)\"\n :top=\"navbar\"\n border=\"t l base\" w-80\n @close=\"onCloseDrawer\"\n >\n <div v-if=\"selected && selected.component\" py4 pt3 flex=\"~ col\">\n <ComponentDetails\n :component=\"selected.component\"\n :dependencies=\"selectedDependencies\"\n :dependents=\"selectedDependents\"\n />\n <div border=\"t base\" p4>\n <NButton n=\"primary solid\" @click=\"setFilter()\">\n Filter to this component\n </NButton>\n </div>\n </div>\n </NDrawer>\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderClass as _ssrRenderClass, ssrRenderSlot as _ssrRenderSlot, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { computed } from 'vue'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentItem',\n __ssrInlineRender: true,\n props: {\n component: {},\n dependencies: {},\n dependents: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VDropdown = _resolveComponent(\"VDropdown\")!\n const _component_ComponentName = _resolveComponent(\"ComponentName\")!\n const _component_ComponentDetails = _resolveComponent(\"ComponentDetails\")!\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_FilepathItem = _resolveComponent(\"FilepathItem\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n hover: \"bg-active\",\n class: \"group\",\n flex: \"~ gap2\",\n \"w-full\": \"\",\n \"items-center\": \"\",\n rounded: \"\",\n px2: \"\",\n py1: \"\"\n }, _attrs))}>`)\n _push(_ssrRenderComponent(_component_VDropdown, null, {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_ComponentDetails, {\n component: __props.component,\n dependencies: __props.dependencies,\n dependents: __props.dependents,\n \"w-100\": \"\",\n pt3: \"\"\n }, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_ComponentDetails, {\n component: __props.component,\n dependencies: __props.dependencies,\n dependents: __props.dependents,\n \"w-100\": \"\",\n pt3: \"\"\n }, null, 8, [\"component\", \"dependencies\", \"dependents\"])\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<button hover:text-primary class=\"${\n _ssrRenderClass(__props.dependents && __props.dependents.length === 0 ? 'op50' : '')\n }\"${\n _scopeId\n }>`)\n _push(_ssrRenderComponent(_component_ComponentName, { component: __props.component }, null, _parent, _scopeId))\n _push(`</button>`)\n } else {\n return [\n _createVNode(\"button\", {\n \"hover:text-primary\": \"\",\n class: __props.dependents && __props.dependents.length === 0 ? 'op50' : ''\n }, [\n _createVNode(_component_ComponentName, { component: __props.component }, null, 8, [\"component\"])\n ], 2)\n ]\n }\n }),\n _: 1\n }, _parent))\n if (__props.dependents?.length) {\n _push(`<sup ml--1 text-primary> x${_ssrInterpolate(__props.dependents?.length)}</sup>`)\n } else {\n _push(`<!---->`)\n }\n if (__props.component.global) {\n _push(_ssrRenderComponent(_component_NBadge, {\n n: \"green\",\n title: \"Registered at runtime as a global component\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent)\n if (filePath.value) {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n filepath: filePath.value,\n \"text-sm\": \"\",\n op25: \"\",\n \"group-hover:op75\": \"\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n component: Component\n dependencies?: string[]\n dependents?: string[]\n}>()\n\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\n</script>\n\n<template>\n <div\n hover=\"bg-active\"\n class=\"group\"\n flex=\"~ gap2\"\n w-full items-center rounded px2 py1\n >\n <VDropdown>\n <button hover:text-primary :class=\"dependents && dependents.length === 0 ? 'op50' : ''\">\n <ComponentName :component=\"component\" />\n </button>\n <template #popper>\n <ComponentDetails\n :component=\"component\"\n :dependencies=\"dependencies\"\n :dependents=\"dependents\"\n w-100 pt3\n />\n </template>\n </VDropdown>\n <sup v-if=\"dependents?.length\" ml--1 text-primary>\n x{{ dependents?.length }}\n </sup>\n <NBadge\n v-if=\"component.global\"\n n=\"green\"\n title=\"Registered at runtime as a global component\"\n v-text=\"'runtime'\"\n />\n <slot />\n <FilepathItem\n v-if=\"filePath\"\n :filepath=\"filePath\"\n text-sm op25 group-hover:op75\n />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, renderSlot as _renderSlot, createVNode as _createVNode, unref as _unref, mergeProps as _mergeProps, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\nimport { ssrRenderSlot as _ssrRenderSlot, ssrRenderComponent as _ssrRenderComponent, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport type { ComponentRelationship, ComponentWithRelationships } from '../../types'\nimport Fuse from 'fuse.js'\nimport { computed, ref } from 'vue'\nimport { DETAILS_MAX_ITEMS } from '~/composables/constants'\nimport { getComponentRelationships, getModuleNameFromPath, isNodeModulePath, isNuxtPackageName } from '~/composables/utils'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentsList',\n __ssrInlineRender: true,\n props: {\n components: {},\n relationships: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst search = ref('')\nconst filterMode = ref<'all' | 'using' | 'not-used'>('all')\n\nconst componentWithRelationships = computed(() => {\n const components = props.components\n .map(c => getComponentRelationships(c, props.relationships))\n if (filterMode.value === 'using')\n return components.filter(c => c.dependents?.length)\n else if (filterMode.value === 'not-used')\n return components.filter(c => !c.dependents?.length)\n return components\n})\n\nconst builtinComponentDocs = {\n ClientOnly: 'https://nuxt.com/docs/api/components/client-only',\n DevOnly: 'https://nuxt.com/docs/api/components/dev-only',\n NuxtClientFallback: 'https://nuxt.com/docs/api/components/nuxt-client-fallback',\n NuxtPicture: 'https://nuxt.com/docs/api/components/nuxt-picture',\n NuxtRouteAnnouncer: 'https://nuxt.com/docs/api/components/nuxt-route-announcer',\n NuxtTime: 'https://nuxt.com/docs/api/components/nuxt-time',\n NuxtPage: 'https://nuxt.com/docs/api/components/nuxt-page',\n NuxtLayout: 'https://nuxt.com/docs/api/components/nuxt-layout',\n NuxtLink: 'https://nuxt.com/docs/api/components/nuxt-link',\n NuxtLoadingIndicator: 'https://nuxt.com/docs/api/components/nuxt-loading-indicator',\n NuxtErrorBoundary: 'https://nuxt.com/docs/api/components/nuxt-error-boundary',\n NuxtWelcome: 'https://nuxt.com/docs/api/components/nuxt-welcome',\n NuxtIsland: 'https://nuxt.com/docs/api/components/nuxt-island',\n NuxtImg: 'https://nuxt.com/docs/api/components/nuxt-img',\n}\n\nconst fuse = computed(() => new Fuse(componentWithRelationships.value, {\n keys: [\n 'component.pascalName',\n 'component.filePath',\n 'component.kebabName',\n ],\n}))\n\nconst filtered = computed(() => {\n const user: ComponentWithRelationships[] = []\n const lib = new Map<string, ComponentWithRelationships[]>()\n const builtin: ComponentWithRelationships[] = []\n const runtime: ComponentWithRelationships[] = []\n\n const count = {\n user: 0,\n lib: 0,\n builtin: 0,\n runtime: 0,\n }\n\n const result = search.value\n ? fuse.value.search(search.value).map(i => i.item)\n : componentWithRelationships.value\n\n result\n .forEach((component) => {\n const c = component.component\n if (c.filePath && isNodeModulePath(c.filePath)) {\n const name = getModuleNameFromPath(c.filePath)\n if (!name)\n return\n if (isNuxtPackageName(name)) {\n c.meta ??= {}\n c.meta.docs ??= builtinComponentDocs?.[c.pascalName as keyof typeof builtinComponentDocs]\n builtin.push(component)\n count.builtin++\n }\n else {\n if (!lib.has(name))\n lib.set(name, [])\n lib.get(name)!.push(component)\n count.lib++\n }\n }\n else if (c.global && !c.filePath) {\n runtime.push(component)\n count.runtime++\n }\n else {\n user.push(component)\n count.user++\n }\n })\n\n return {\n count,\n user,\n builtin,\n lib,\n runtime,\n }\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NNavbar = _resolveComponent(\"NNavbar\")!\n const _component_NIcon = _resolveComponent(\"NIcon\")!\n const _component_NSelectTabs = _resolveComponent(\"NSelectTabs\")!\n const _component_NSectionBlock = _resolveComponent(\"NSectionBlock\")!\n const _component_ComponentItem = _resolveComponent(\"ComponentItem\")!\n const _component_NIconTitle = _resolveComponent(\"NIconTitle\")!\n\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NNavbar, {\n search: search.value,\n \"onUpdate:search\": ($event: any) => ((search).value = $event),\n pb3: \"\"\n }, {\n actions: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent, _scopeId)\n } else {\n return [\n _renderSlot(_ctx.$slots, \"default\")\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ gap-2 items-center\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NIcon, {\n icon: \"carbon-filter\",\n op50: \"\"\n }, null, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NSelectTabs, {\n modelValue: filterMode.value,\n \"onUpdate:modelValue\": ($event: any) => ((filterMode).value = $event),\n n: \"primary sm\",\n options: [\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\n }, null, _parent, _scopeId))\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", { flex: \"~ gap-2 items-center\" }, [\n _createVNode(_component_NIcon, {\n icon: \"carbon-filter\",\n op50: \"\"\n }),\n _createVNode(_component_NSelectTabs, {\n modelValue: filterMode.value,\n \"onUpdate:modelValue\": ($event: any) => ((filterMode).value = $event),\n n: \"primary sm\",\n options: [\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ])\n ]\n }\n }),\n _: 3\n }, _parent))\n if (filtered.value.user.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"carbon-nominal\",\n text: \"User components\",\n open: filtered.value.user.length <= _unref(DETAILS_MAX_ITEMS),\n description: `Total components: ${filtered.value.count.user}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.user, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.user, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.runtime.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"carbon-load-balancer-global\",\n open: filtered.value.runtime.length <= _unref(DETAILS_MAX_ITEMS),\n text: \"Runtime components\",\n description: `Total components: ${filtered.value.count.runtime}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.runtime, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.runtime, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.builtin.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"simple-icons-nuxtdotjs\",\n text: \"Built-in components\",\n description: `Total components: ${filtered.value.count.builtin}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.builtin, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.builtin, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.lib.size) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n open: filtered.value.count.lib <= _unref(DETAILS_MAX_ITEMS),\n icon: \"carbon-3d-mpr-toggle\",\n text: \"Components from libraries\",\n description: `${filtered.value.count.lib} components from ${filtered.value.lib.size} packages`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.lib.entries(), ([key, value]) => {\n _push(`<div ml-2${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NIconTitle, {\n text: `${key} (${value.length})`,\n py1: \"\",\n op50: \"\"\n }, null, _parent, _scopeId))\n _push(`<div pl4${_scopeId}><!--[-->`)\n _ssrRenderList(value, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]--></div></div>`)\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.lib.entries(), ([key, value]) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: key,\n \"ml-2\": \"\"\n }, [\n _createVNode(_component_NIconTitle, {\n text: `${key} (${value.length})`,\n py1: \"\",\n op50: \"\"\n }, null, 8, [\"text\"]),\n _createVNode(\"div\", { pl4: \"\" }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(value, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ])\n ]))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport type { ComponentRelationship, ComponentWithRelationships } from '../../types'\nimport Fuse from 'fuse.js'\nimport { computed, ref } from 'vue'\nimport { DETAILS_MAX_ITEMS } from '~/composables/constants'\nimport { getComponentRelationships, getModuleNameFromPath, isNodeModulePath, isNuxtPackageName } from '~/composables/utils'\n\nconst props = defineProps<{\n components: Component[]\n relationships?: ComponentRelationship[] | null\n}>()\n\nconst search = ref('')\nconst filterMode = ref<'all' | 'using' | 'not-used'>('all')\n\nconst componentWithRelationships = computed(() => {\n const components = props.components\n .map(c => getComponentRelationships(c, props.relationships))\n if (filterMode.value === 'using')\n return components.filter(c => c.dependents?.length)\n else if (filterMode.value === 'not-used')\n return components.filter(c => !c.dependents?.length)\n return components\n})\n\nconst builtinComponentDocs = {\n ClientOnly: 'https://nuxt.com/docs/api/components/client-only',\n DevOnly: 'https://nuxt.com/docs/api/components/dev-only',\n NuxtClientFallback: 'https://nuxt.com/docs/api/components/nuxt-client-fallback',\n NuxtPicture: 'https://nuxt.com/docs/api/components/nuxt-picture',\n NuxtRouteAnnouncer: 'https://nuxt.com/docs/api/components/nuxt-route-announcer',\n NuxtTime: 'https://nuxt.com/docs/api/components/nuxt-time',\n NuxtPage: 'https://nuxt.com/docs/api/components/nuxt-page',\n NuxtLayout: 'https://nuxt.com/docs/api/components/nuxt-layout',\n NuxtLink: 'https://nuxt.com/docs/api/components/nuxt-link',\n NuxtLoadingIndicator: 'https://nuxt.com/docs/api/components/nuxt-loading-indicator',\n NuxtErrorBoundary: 'https://nuxt.com/docs/api/components/nuxt-error-boundary',\n NuxtWelcome: 'https://nuxt.com/docs/api/components/nuxt-welcome',\n NuxtIsland: 'https://nuxt.com/docs/api/components/nuxt-island',\n NuxtImg: 'https://nuxt.com/docs/api/components/nuxt-img',\n}\n\nconst fuse = computed(() => new Fuse(componentWithRelationships.value, {\n keys: [\n 'component.pascalName',\n 'component.filePath',\n 'component.kebabName',\n ],\n}))\n\nconst filtered = computed(() => {\n const user: ComponentWithRelationships[] = []\n const lib = new Map<string, ComponentWithRelationships[]>()\n const builtin: ComponentWithRelationships[] = []\n const runtime: ComponentWithRelationships[] = []\n\n const count = {\n user: 0,\n lib: 0,\n builtin: 0,\n runtime: 0,\n }\n\n const result = search.value\n ? fuse.value.search(search.value).map(i => i.item)\n : componentWithRelationships.value\n\n result\n .forEach((component) => {\n const c = component.component\n if (c.filePath && isNodeModulePath(c.filePath)) {\n const name = getModuleNameFromPath(c.filePath)\n if (!name)\n return\n if (isNuxtPackageName(name)) {\n c.meta ??= {}\n c.meta.docs ??= builtinComponentDocs?.[c.pascalName as keyof typeof builtinComponentDocs]\n builtin.push(component)\n count.builtin++\n }\n else {\n if (!lib.has(name))\n lib.set(name, [])\n lib.get(name)!.push(component)\n count.lib++\n }\n }\n else if (c.global && !c.filePath) {\n runtime.push(component)\n count.runtime++\n }\n else {\n user.push(component)\n count.user++\n }\n })\n\n return {\n count,\n user,\n builtin,\n lib,\n runtime,\n }\n})\n</script>\n\n<template>\n <NNavbar v-model:search=\"search\" pb3>\n <template #actions>\n <slot />\n </template>\n <div flex=\"~ gap-2 items-center\">\n <NIcon icon=\"carbon-filter\" op50 />\n <NSelectTabs\n v-model=\"filterMode\"\n n=\"primary sm\"\n :options=\"[\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\"\n />\n </div>\n </NNavbar>\n <NSectionBlock\n v-if=\"filtered.user.length\"\n icon=\"carbon-nominal\"\n text=\"User components\"\n :open=\"filtered.user.length <= DETAILS_MAX_ITEMS\"\n :description=\"`Total components: ${filtered.count.user}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.user\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.runtime.length\"\n icon=\"carbon-load-balancer-global\"\n :open=\"filtered.runtime.length <= DETAILS_MAX_ITEMS\"\n text=\"Runtime components\"\n :description=\"`Total components: ${filtered.count.runtime}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.runtime\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.builtin.length\"\n icon=\"simple-icons-nuxtdotjs\"\n text=\"Built-in components\"\n :description=\"`Total components: ${filtered.count.builtin}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.builtin\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.lib.size\"\n :open=\"filtered.count.lib <= DETAILS_MAX_ITEMS\"\n icon=\"carbon-3d-mpr-toggle\"\n text=\"Components from libraries\"\n :description=\"`${filtered.count.lib} components from ${filtered.lib.size} packages`\"\n >\n <div v-for=\"[key, value] of filtered.lib.entries()\" :key=\"key\" ml-2>\n <NIconTitle :text=\"`${key} (${value.length})`\" py1 op50 />\n <div pl4>\n <ComponentItem\n v-for=\"c of value\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </div>\n </div>\n </NSectionBlock>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveDynamicComponent as _resolveDynamicComponent, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, mergeProps as _mergeProps, withCtx as _withCtx, createVNode as _createVNode, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\nimport { ssrGetDirectiveProps as _ssrGetDirectiveProps, ssrRenderComponent as _ssrRenderComponent, ssrRenderVNode as _ssrRenderVNode } from \"vue/server-renderer\"\n\nimport { definePageMeta } from '#imports'\nimport ComponentsGraph from '~/components/ComponentsGraph.vue'\nimport ComponentsList from '~/components/ComponentsList.vue'\nimport { useClient } from '~/composables/client'\nimport { useComponents, useComponentsRelationships } from '~/composables/state-components'\nimport { useDevToolsOptions } from '../../composables/storage-options'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'components',\n __ssrInlineRender: true,\n setup(__props) {\n\ndefinePageMeta({\n icon: 'i-carbon-assembly-cluster',\n title: 'Components',\n order: 2,\n})\n\nconst client = useClient()\nconst components = useComponents()\nconst relationships = useComponentsRelationships()\n\nconst { componentsView: view } = useDevToolsOptions('ui')\n\nfunction openComponentInspector() {\n client.value?.inspector?.enable()\n}\n\nfunction toggleView() {\n view.value = view.value === 'list' ? 'graph' : 'list'\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_HelpFab = _resolveComponent(\"HelpFab\")!\n const _component_DocsComponents = _resolveComponent(\"DocsComponents\")!\n const _directive_tooltip = _resolveDirective(\"tooltip\")!\n\n _push(`<!--[--><div relative h-full of-auto>`)\n _ssrRenderVNode(_push, _createVNode(_resolveDynamicComponent(_unref(view) === 'list' ? ComponentsList : ComponentsGraph), {\n components: _unref(components),\n relationships: _unref(relationships)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex-none flex=\"~ gap3\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, _mergeProps({\n \"text-lg\": \"\",\n border: false,\n icon: _unref(view) === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4',\n title: \"Toggle view\",\n onClick: toggleView\n }, _ssrGetDirectiveProps(_ctx, _directive_tooltip, 'Toggle View', void 0, { \"bottom-end\": true })), null, _parent, _scopeId))\n if (_unref(client)?.inspector?.isAvailable) {\n _push(_ssrRenderComponent(_component_NButton, _mergeProps({\n \"text-lg\": \"\",\n border: false,\n icon: \"i-tabler-focus-2\",\n title: \"Inspect Vue components\",\n onClick: openComponentInspector\n }, _ssrGetDirectiveProps(_ctx, _directive_tooltip, 'Inspect Vue components', void 0, { \"bottom-end\": true })), null, _parent, _scopeId))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"flex-none\": \"\",\n flex: \"~ gap3\"\n }, [\n _withDirectives(_createVNode(_component_NButton, {\n \"text-lg\": \"\",\n border: false,\n icon: _unref(view) === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4',\n title: \"Toggle view\",\n onClick: toggleView\n }, null, 8, [\"icon\"]), [\n [\n _directive_tooltip,\n 'Toggle View',\n void 0,\n { \"bottom-end\": true }\n ]\n ]),\n (_unref(client)?.inspector?.isAvailable)\n ? _withDirectives((_openBlock(), _createBlock(_component_NButton, {\n key: 0,\n \"text-lg\": \"\",\n border: false,\n icon: \"i-tabler-focus-2\",\n title: \"Inspect Vue components\",\n onClick: openComponentInspector\n }, null, 512)), [\n [\n _directive_tooltip,\n 'Inspect Vue components',\n void 0,\n { \"bottom-end\": true }\n ]\n ])\n : _createCommentVNode(\"\", true)\n ])\n ]\n }\n }),\n _: 1\n }), _parent)\n _push(`</div>`)\n _push(_ssrRenderComponent(_component_HelpFab, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_DocsComponents, null, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_DocsComponents)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport { definePageMeta } from '#imports'\nimport ComponentsGraph from '~/components/ComponentsGraph.vue'\nimport ComponentsList from '~/components/ComponentsList.vue'\nimport { useClient } from '~/composables/client'\nimport { useComponents, useComponentsRelationships } from '~/composables/state-components'\nimport { useDevToolsOptions } from '../../composables/storage-options'\n\ndefinePageMeta({\n icon: 'i-carbon-assembly-cluster',\n title: 'Components',\n order: 2,\n})\n\nconst client = useClient()\nconst components = useComponents()\nconst relationships = useComponentsRelationships()\n\nconst { componentsView: view } = useDevToolsOptions('ui')\n\nfunction openComponentInspector() {\n client.value?.inspector?.enable()\n}\n\nfunction toggleView() {\n view.value = view.value === 'list' ? 'graph' : 'list'\n}\n</script>\n\n<template>\n <div relative h-full of-auto>\n <component\n :is=\"view === 'list' ? ComponentsList : ComponentsGraph\"\n :components=\"components\"\n :relationships=\"relationships\"\n >\n <div flex-none flex=\"~ gap3\">\n <NButton\n v-tooltip.bottom-end=\"'Toggle View'\"\n text-lg :border=\"false\"\n :icon=\"view === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4'\"\n title=\"Toggle view\"\n @click=\"toggleView\"\n />\n <NButton\n v-if=\"client?.inspector?.isAvailable\"\n v-tooltip.bottom-end=\"'Inspect Vue components'\"\n text-lg :border=\"false\"\n icon=\"i-tabler-focus-2\"\n title=\"Inspect Vue components\"\n @click=\"openComponentInspector\"\n />\n </div>\n </component>\n </div>\n\n <HelpFab>\n <DocsComponents />\n </HelpFab>\n</template>\n"],"version":3}
1
+ {"file":"components-CTVOL1-D.js","mappings":"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","names":[],"sources":["../../../../../../../../components/docs/components.md","../../../../../../../../components/ComponentName.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentName.vue","../../../../../../../../components/ComponentDetails.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentDetails.vue","../../../../../../../../components/ComponentsGraph.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentsGraph.vue","../../../../../../../../components/ComponentItem.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentItem.vue","../../../../../../../../components/ComponentsList.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/ComponentsList.vue","../../../../../../../../pages/modules/components.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../pages/modules/components.vue"],"sourcesContent":["# Components\n\nVue Components allow us to split the UI into independent and reusable pieces, and think about each piece in isolation. This is very similar to how we nest native HTML elements, but Vue implements its own component model that allow us to encapsulate custom content and logic in each component.\n\nComponents placed in the components/ directory are automatically registered by Nuxt. They can be used in your templates without importing them.\n\n[Learn more in the documentation](https://nuxt.com/docs/guide/directory-structure/components)\n","import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentName',\n __ssrInlineRender: true,\n props: {\n component: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n _push(`<code${\n _ssrRenderAttrs(_mergeProps({\n \"text-sm\": \"\",\n \"font-mono\": \"\"\n }, _attrs))\n }><span mr1 op20>&lt;</span>${\n _ssrInterpolate(name.value)\n }<span ml1 op20>/&gt;</span></code>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n component: Component\n}>()\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n</script>\n\n<template>\n <code text-sm font-mono><span mr1 op20>&lt;</span>{{ name }}<span ml1 op20>/&gt;</span></code>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, unref as _unref, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderSlot as _ssrRenderSlot, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\nimport { useCopy } from '~/composables/editor'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentDetails',\n __ssrInlineRender: true,\n props: {\n component: {},\n dependencies: {},\n dependents: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\nconst copy = useCopy()\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_ComponentName = _resolveComponent(\"ComponentName\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_FilepathItem = _resolveComponent(\"FilepathItem\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n flex: \"~ col gap1\",\n \"items-start\": \"\",\n \"of-hidden\": \"\"\n }, _attrs))}><div flex=\"~ gap2 items-center\" px3>`)\n _push(_ssrRenderComponent(_component_ComponentName, { component: __props.component }, null, _parent))\n if (__props.component.meta?.docs && typeof __props.component.meta.docs === 'string') {\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Open docs\",\n \"flex-none\": \"\",\n n: \"xs\",\n to: __props.component.meta.docs,\n target: \"_blank\",\n icon: \"carbon-catalog\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Docs `)\n } else {\n return [\n _createTextVNode(\" Docs \")\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(_ssrRenderComponent(_component_NButton, {\n title: \"Copy name\",\n \"flex-none\": \"\",\n n: \"xs\",\n icon: \"carbon-copy\",\n onClick: ($event: any) => (_unref(copy)(`<${name.value}></${name.value}>`, 'component-name'))\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))\n if (__props.component.global) {\n _push(_ssrRenderComponent(_component_NBadge, {\n n: \"green\",\n title: \"Registered at runtime as a global component\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div><div px3 pb2>`)\n if (filePath.value) {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n filepath: filePath.value,\n \"w-full\": \"\",\n \"text-sm\": \"\",\n op40: \"\",\n \"group-hover:op75\": \"\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n if (__props.dependents) {\n _push(`<div border=\"t base\" max-h-60 w-full of-auto px3 py3><div text-sm><strong text-primary>${_ssrInterpolate(__props.dependents.length)}</strong><span op50> references</span></div>`)\n if (__props.dependents.length) {\n _push(`<div flex=\"~ col gap-2\" items-start pt3 text-sm op75><!--[-->`)\n _ssrRenderList(__props.dependents, (id) => {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n key: id,\n filepath: id\n }, null, _parent))\n })\n _push(`<!--]--></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n if (__props.dependencies) {\n _push(`<div border=\"t base\" max-h-60 w-full of-auto px3 py3><div text-sm><strong text-primary>${_ssrInterpolate(__props.dependencies.length)}</strong><span op50> dependencies</span></div>`)\n if (__props.dependencies.length) {\n _push(`<div flex=\"~ col gap-2\" items-start pt3 text-sm op75><!--[-->`)\n _ssrRenderList(__props.dependencies, (id) => {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n key: id,\n filepath: id\n }, null, _parent))\n })\n _push(`<!--]--></div>`)\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n _push(`<!---->`)\n }\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent)\n _push(`</div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { pascalCase } from 'scule'\nimport { computed } from 'vue'\nimport { useCopy } from '~/composables/editor'\n\nconst props = defineProps<{\n component: Component\n dependencies?: string[]\n dependents?: string[]\n}>()\n\n// @ts-expect-error types\nconst name = computed(() => props.component.pascalName || pascalCase(props.component.name || props.component.__name || props.component.kebabName || ''))\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\nconst copy = useCopy()\n</script>\n\n<template>\n <div flex=\"~ col gap1\" items-start of-hidden>\n <div flex=\"~ gap2 items-center\" px3>\n <ComponentName :component=\"component\" />\n <NButton\n v-if=\"component.meta?.docs && typeof component.meta.docs === 'string'\"\n title=\"Open docs\" flex-none n=\"xs\"\n :to=\"component.meta.docs\" target=\"_blank\"\n icon=\"carbon-catalog\"\n >\n Docs\n </NButton>\n <NButton\n title=\"Copy name\" flex-none n=\"xs\"\n icon=\"carbon-copy\"\n @click=\"copy(`<${name}></${name}>`, 'component-name')\"\n >\n Copy\n </NButton>\n <NBadge\n v-if=\"component.global\"\n n=\"green\"\n title=\"Registered at runtime as a global component\"\n v-text=\"'runtime'\"\n />\n </div>\n <div px3 pb2>\n <FilepathItem\n v-if=\"filePath\"\n :filepath=\"filePath\"\n w-full text-sm op40 group-hover:op75\n />\n </div>\n\n <div v-if=\"dependents\" border=\"t base\" max-h-60 w-full of-auto px3 py3>\n <div text-sm>\n <strong text-primary>{{ dependents.length }}</strong><span op50> references</span>\n </div>\n <div v-if=\"dependents.length\" flex=\"~ col gap-2\" items-start pt3 text-sm op75>\n <FilepathItem\n v-for=\"id of dependents\" :key=\"id\"\n :filepath=\"id\"\n />\n </div>\n </div>\n\n <div v-if=\"dependencies\" border=\"t base\" max-h-60 w-full of-auto px3 py3>\n <div text-sm>\n <strong text-primary>{{ dependencies.length }}</strong><span op50> dependencies</span>\n </div>\n <div v-if=\"dependencies.length\" flex=\"~ col gap-2\" items-start pt3 text-sm op75>\n <FilepathItem\n v-for=\"id of dependencies\" :key=\"id\"\n :filepath=\"id\"\n />\n </div>\n </div>\n\n <slot />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, withCtx as _withCtx, createVNode as _createVNode, isRef as _isRef, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderSlot as _ssrRenderSlot } from \"vue/server-renderer\"\n\nimport type { Component, NuxtLayout, NuxtPage } from 'nuxt/schema'\nimport type { Data, DataSetNodes, Node, Options } from 'vis-network'\nimport type { ComponentRelationship } from '~/../src/types'\nimport { useDebounce } from '@vueuse/core'\nimport { DataSet } from 'vis-data'\nimport { Network } from 'vis-network'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useLayouts, useServerConfig, useServerPages } from '~/composables/state'\nimport { useDevToolsOptions } from '../composables/storage-options'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentsGraph',\n __ssrInlineRender: true,\n props: {\n components: {},\n relationships: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst container = ref<HTMLElement>()\nconst navbar = ref<HTMLElement>()\nconst colorMode = getColorMode()\n\nconst selected = shallowRef<{\n id: string\n component?: Component\n page?: NuxtPage\n layout?: NuxtLayout\n relationship?: ComponentRelationship\n}>()\n\nconst pages = useServerPages()\nconst config = useServerConfig()\nconst layouts = useLayouts()\n\nconst {\n componentsGraphShowNodeModules: showNodeModules,\n componentsGraphShowGlobalComponents: showGlobalComponents,\n componentsGraphShowPages: showPages,\n componentsGraphShowLayouts: showLayouts,\n componentsGraphShowWorkspace: showWorkspace,\n} = useDevToolsOptions('ui')\n\nconst selectedFilter = ref<ComponentRelationship>()\n\nconst search = ref('')\nconst searchDebounced = useDebounce(search, 300)\n\nconst entries = computed(() => {\n const relations = (props.relationships || [])\n if (selectedFilter.value) {\n const set = new Set<ComponentRelationship>()\n function addToSet(rel?: ComponentRelationship) {\n if (!rel || set.has(rel))\n return\n set.add(rel)\n rel.deps.forEach((dep) => {\n addToSet(relations.find(i => i.id === dep))\n })\n }\n addToSet(selectedFilter.value)\n return [...set]\n }\n return relations\n})\n\nconst data = computed<Data>(() => {\n const nodes: Data['nodes'] = entries.value.map((rel): Node | null => {\n const component = props.components.find(i => i.filePath === rel.id)\n const page = pages.value?.find(i => i.file === rel.id)\n const layout = layouts.value?.find(i => i.file === rel.id)\n\n const group = rel.id.includes('/node_modules/')\n ? 'lib'\n : component\n ? component.global\n ? 'global'\n : 'user'\n : layout\n ? 'layout'\n : page\n ? 'page'\n : 'unknown'\n\n if (!showNodeModules.value && group === 'lib')\n return null\n if (!showPages.value && group === 'page')\n return null\n if (!showLayouts.value && group === 'layout')\n return null\n if (!showWorkspace.value && group === 'user' && config.value && !rel.id.startsWith(config.value.rootDir))\n return null\n if (!showGlobalComponents.value && group === 'global')\n return null\n\n const shape = group === 'layout'\n ? 'hexagon'\n : group === 'page'\n ? 'square'\n : 'dot'\n\n const isGrayedOut = searchDebounced.value && !rel.id.toLowerCase().includes(searchDebounced.value.toLowerCase())\n\n return {\n id: rel.id,\n label: getComponentName(rel.id),\n group,\n shape,\n size: 15 + Math.min(rel.deps.length / 2, 8),\n font: {\n color: isGrayedOut ? '#8885' : (colorMode.value === 'dark' ? 'white' : 'black'),\n },\n color: isGrayedOut ? '#8885' : selectedFilter.value?.id === rel.id ? '#82c742' : undefined,\n // @ts-expect-error additional data\n extra: {\n id: rel.id,\n component,\n page,\n layout,\n relationship: rel,\n },\n }\n }).filter((x): x is Node => !!x)\n\n const edges: Data['edges'] = entries.value.flatMap(rel => rel.deps.map(dep => ({\n from: rel.id,\n to: dep,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n })))\n\n return {\n nodes: new DataSet(nodes),\n edges,\n }\n})\n\nconst selectedDependencies = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.find(i => i.id === selected.value?.component?.filePath)?.deps\n return deps?.map(i => props.relationships?.find(j => j.id === i)?.id).filter(Boolean) as string[]\n})\n\nconst selectedDependents = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.filter(i => i.deps.includes(selected.value!.component!.filePath!))\n return deps?.map(i => props.relationships?.find(j => j.id === i.id)?.id).filter(Boolean) as string[]\n})\n\nonMounted(() => {\n const options: Options = {\n nodes: {\n shape: 'dot',\n size: 16,\n },\n physics: {\n repulsion: {\n centralGravity: 0.7,\n springLength: 100,\n springConstant: 0.01,\n },\n maxVelocity: 146,\n solver: 'forceAtlas2Based',\n timestep: 0.35,\n stabilization: {\n enabled: true,\n iterations: 200,\n },\n },\n groups: {\n user: {\n color: '#42b883',\n },\n unknown: {\n color: '#b86542',\n },\n lib: {\n color: '#b4b842',\n },\n page: {\n color: '#42b2b8',\n },\n layout: {\n color: '#4256b8',\n },\n },\n }\n const network = new Network(container.value!, data.value, options)\n\n network.on('click', (e) => {\n const id = e.nodes?.[0]\n const node = ((data.value.nodes as DataSetNodes).get(id) as any).extra\n selected.value = node\n })\n\n watch(data, () => {\n network.setData(data.value)\n })\n})\n\nfunction onCloseDrawer() {\n selected.value = undefined\n}\n\nconst COMPONENTS_PATH_RE = /.*\\/components\\//\nconst VUE_EXT_RE = /\\.vue$/\nconst INDEX_SUFFIX_RE = /\\/index$/\n\nfunction getComponentName(path: string) {\n const component = props.components.find(i => i.filePath === path)\n if (component)\n return component.pascalName\n return path\n .replace(COMPONENTS_PATH_RE, '')\n .replace(VUE_EXT_RE, '')\n .replace(INDEX_SUFFIX_RE, '')\n .split('/')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction setFilter() {\n selectedFilter.value = selected.value?.relationship\n selected.value = undefined\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NNavbar = _resolveComponent(\"NNavbar\")!\n const _component_NCheckbox = _resolveComponent(\"NCheckbox\")!\n const _component_NCard = _resolveComponent(\"NCard\")!\n const _component_NDrawer = _resolveComponent(\"NDrawer\")!\n const _component_ComponentDetails = _resolveComponent(\"ComponentDetails\")!\n const _component_NButton = _resolveComponent(\"NButton\")!\n\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NNavbar, {\n ref_key: \"navbar\",\n ref: navbar,\n search: search.value,\n \"onUpdate:search\": ($event: any) => ((search).value = $event),\n absolute: \"\",\n \"left-0\": \"\",\n \"right-0\": \"\",\n \"top-0\": \"\"\n }, {\n actions: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ gap-x-3 gap-y-1 wrap\" w-full${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showPages),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showPages) ? (showPages).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show pages</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show pages\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showLayouts),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showLayouts) ? (showLayouts).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show layouts</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show layouts\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showWorkspace),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showWorkspace) ? (showWorkspace).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show workspace</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show workspace\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showNodeModules),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showNodeModules) ? (showNodeModules).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show node_modules</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show node_modules\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NCheckbox, {\n modelValue: _unref(showGlobalComponents),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showGlobalComponents) ? (showGlobalComponents).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<span op75${_scopeId}>Show global components</span>`)\n } else {\n return [\n _createVNode(\"span\", { op75: \"\" }, \"Show global components\")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div>`)\n if (selectedFilter.value) {\n _push(`<button flex=\"~ gap-1\" flex-none items-center rounded-full bg-gray:20 py1 pl3 pr2 text-xs op50 hover:op100${\n _scopeId\n }> Clear filter <div i-carbon-close${\n _scopeId\n }></div></button>`)\n } else {\n _push(`<!---->`)\n }\n _push(`<div flex-auto${_scopeId}></div>`)\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent, _scopeId)\n } else {\n return [\n _createVNode(\"div\", {\n flex: \"~ gap-x-3 gap-y-1 wrap\",\n \"w-full\": \"\"\n }, [\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showPages),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showPages) ? (showPages).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show pages\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showLayouts),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showLayouts) ? (showLayouts).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show layouts\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showWorkspace),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showWorkspace) ? (showWorkspace).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show workspace\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showNodeModules),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showNodeModules) ? (showNodeModules).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show node_modules\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createVNode(_component_NCheckbox, {\n modelValue: _unref(showGlobalComponents),\n \"onUpdate:modelValue\": ($event: any) => (_isRef(showGlobalComponents) ? (showGlobalComponents).value = $event : null),\n n: \"primary sm\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", { op75: \"\" }, \"Show global components\")\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ]),\n (selectedFilter.value)\n ? (_openBlock(), _createBlock(\"button\", {\n key: 0,\n flex: \"~ gap-1\",\n \"flex-none\": \"\",\n \"items-center\": \"\",\n \"rounded-full\": \"\",\n \"bg-gray:20\": \"\",\n py1: \"\",\n pl3: \"\",\n pr2: \"\",\n \"text-xs\": \"\",\n op50: \"\",\n \"hover:op100\": \"\",\n onClick: ($event: any) => (selectedFilter.value = undefined)\n }, [\n _createTextVNode(\" Clear filter \"),\n _createVNode(\"div\", { \"i-carbon-close\": \"\" })\n ], 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", { \"flex-auto\": \"\" }),\n _renderSlot(_ctx.$slots, \"default\")\n ]\n }\n }),\n _: 3\n }, _parent))\n _push(`<div relative h-full w-full><div h-full w-full></div>`)\n _push(_ssrRenderComponent(_component_NCard, {\n absolute: \"\",\n \"bottom-3\": \"\",\n \"left-3\": \"\",\n \"border-0\": \"\",\n \"n-glass-effect\": \"\",\n p2: \"\",\n px3: \"\",\n \"text-sm\": \"\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div grid=\"~ cols-[20px_1fr] items-center gap-y-1\"${\n _scopeId\n }><div h-3 w-3 rounded-full bg-hex-42b883${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Component </div><div h-3 w-3 rounded-full bg-hex-97c2fc${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Global Component </div><div h-3 w-3 bg-hex-42b2b8${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Page </div><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 726 628\" ml--1px h-3${\n _scopeId\n }><path fill=\"#4256b8\" stroke-width=\"4\" d=\"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\"${\n _scopeId\n }></path></svg><div op50${\n _scopeId\n }> Layout </div><div h-3 w-3 rounded-full bg-hex-b4b842${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Library Component </div><div h-3 w-3 rounded-full bg-hex-b86542${\n _scopeId\n }></div><div op50${\n _scopeId\n }> Unknown </div></div>`)\n } else {\n return [\n _createVNode(\"div\", { grid: \"~ cols-[20px_1fr] items-center gap-y-1\" }, [\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-42b883\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-97c2fc\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Global Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"bg-hex-42b2b8\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Page \"),\n (_openBlock(), _createBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 726 628\",\n \"ml--1px\": \"\",\n \"h-3\": \"\"\n }, [\n _createVNode(\"path\", {\n fill: \"#4256b8\",\n \"stroke-width\": \"4\",\n d: \"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\"\n })\n ])),\n _createVNode(\"div\", { op50: \"\" }, \" Layout \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-b4b842\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Library Component \"),\n _createVNode(\"div\", {\n \"h-3\": \"\",\n \"w-3\": \"\",\n \"rounded-full\": \"\",\n \"bg-hex-b86542\": \"\"\n }),\n _createVNode(\"div\", { op50: \"\" }, \" Unknown \")\n ])\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(_ssrRenderComponent(_component_NDrawer, {\n \"model-value\": !!(selected.value && selected.value.component),\n top: navbar.value,\n border: \"t l base\",\n \"w-80\": \"\",\n onClose: onCloseDrawer\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n if (selected.value && selected.value.component) {\n _push(`<div py4 pt3 flex=\"~ col\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_ComponentDetails, {\n component: selected.value.component,\n dependencies: selectedDependencies.value,\n dependents: selectedDependents.value\n }, null, _parent, _scopeId))\n _push(`<div border=\"t base\" p4${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, {\n n: \"primary solid\",\n onClick: ($event: any) => (setFilter())\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Filter to this component `)\n } else {\n return [\n _createTextVNode(\" Filter to this component \")\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n _push(`</div></div>`)\n } else {\n _push(`<!---->`)\n }\n } else {\n return [\n (selected.value && selected.value.component)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n py4: \"\",\n pt3: \"\",\n flex: \"~ col\"\n }, [\n _createVNode(_component_ComponentDetails, {\n component: selected.value.component,\n dependencies: selectedDependencies.value,\n dependents: selectedDependents.value\n }, null, 8, [\"component\", \"dependencies\", \"dependents\"]),\n _createVNode(\"div\", {\n border: \"t base\",\n p4: \"\"\n }, [\n _createVNode(_component_NButton, {\n n: \"primary solid\",\n onClick: ($event: any) => (setFilter())\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Filter to this component \")\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`</div><!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component, NuxtLayout, NuxtPage } from 'nuxt/schema'\nimport type { Data, DataSetNodes, Node, Options } from 'vis-network'\nimport type { ComponentRelationship } from '~/../src/types'\nimport { useDebounce } from '@vueuse/core'\nimport { DataSet } from 'vis-data'\nimport { Network } from 'vis-network'\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { getColorMode } from '~/composables/client'\nimport { useLayouts, useServerConfig, useServerPages } from '~/composables/state'\nimport { useDevToolsOptions } from '../composables/storage-options'\n\nconst props = defineProps<{\n components: Component[]\n relationships?: ComponentRelationship[] | null\n}>()\n\nconst container = ref<HTMLElement>()\nconst navbar = ref<HTMLElement>()\nconst colorMode = getColorMode()\n\nconst selected = shallowRef<{\n id: string\n component?: Component\n page?: NuxtPage\n layout?: NuxtLayout\n relationship?: ComponentRelationship\n}>()\n\nconst pages = useServerPages()\nconst config = useServerConfig()\nconst layouts = useLayouts()\n\nconst {\n componentsGraphShowNodeModules: showNodeModules,\n componentsGraphShowGlobalComponents: showGlobalComponents,\n componentsGraphShowPages: showPages,\n componentsGraphShowLayouts: showLayouts,\n componentsGraphShowWorkspace: showWorkspace,\n} = useDevToolsOptions('ui')\n\nconst selectedFilter = ref<ComponentRelationship>()\n\nconst search = ref('')\nconst searchDebounced = useDebounce(search, 300)\n\nconst entries = computed(() => {\n const relations = (props.relationships || [])\n if (selectedFilter.value) {\n const set = new Set<ComponentRelationship>()\n function addToSet(rel?: ComponentRelationship) {\n if (!rel || set.has(rel))\n return\n set.add(rel)\n rel.deps.forEach((dep) => {\n addToSet(relations.find(i => i.id === dep))\n })\n }\n addToSet(selectedFilter.value)\n return [...set]\n }\n return relations\n})\n\nconst data = computed<Data>(() => {\n const nodes: Data['nodes'] = entries.value.map((rel): Node | null => {\n const component = props.components.find(i => i.filePath === rel.id)\n const page = pages.value?.find(i => i.file === rel.id)\n const layout = layouts.value?.find(i => i.file === rel.id)\n\n const group = rel.id.includes('/node_modules/')\n ? 'lib'\n : component\n ? component.global\n ? 'global'\n : 'user'\n : layout\n ? 'layout'\n : page\n ? 'page'\n : 'unknown'\n\n if (!showNodeModules.value && group === 'lib')\n return null\n if (!showPages.value && group === 'page')\n return null\n if (!showLayouts.value && group === 'layout')\n return null\n if (!showWorkspace.value && group === 'user' && config.value && !rel.id.startsWith(config.value.rootDir))\n return null\n if (!showGlobalComponents.value && group === 'global')\n return null\n\n const shape = group === 'layout'\n ? 'hexagon'\n : group === 'page'\n ? 'square'\n : 'dot'\n\n const isGrayedOut = searchDebounced.value && !rel.id.toLowerCase().includes(searchDebounced.value.toLowerCase())\n\n return {\n id: rel.id,\n label: getComponentName(rel.id),\n group,\n shape,\n size: 15 + Math.min(rel.deps.length / 2, 8),\n font: {\n color: isGrayedOut ? '#8885' : (colorMode.value === 'dark' ? 'white' : 'black'),\n },\n color: isGrayedOut ? '#8885' : selectedFilter.value?.id === rel.id ? '#82c742' : undefined,\n // @ts-expect-error additional data\n extra: {\n id: rel.id,\n component,\n page,\n layout,\n relationship: rel,\n },\n }\n }).filter((x): x is Node => !!x)\n\n const edges: Data['edges'] = entries.value.flatMap(rel => rel.deps.map(dep => ({\n from: rel.id,\n to: dep,\n arrows: {\n to: {\n enabled: true,\n scaleFactor: 0.8,\n },\n },\n })))\n\n return {\n nodes: new DataSet(nodes),\n edges,\n }\n})\n\nconst selectedDependencies = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.find(i => i.id === selected.value?.component?.filePath)?.deps\n return deps?.map(i => props.relationships?.find(j => j.id === i)?.id).filter(Boolean) as string[]\n})\n\nconst selectedDependents = computed(() => {\n if (!selected.value?.component)\n return []\n const deps = props.relationships?.filter(i => i.deps.includes(selected.value!.component!.filePath!))\n return deps?.map(i => props.relationships?.find(j => j.id === i.id)?.id).filter(Boolean) as string[]\n})\n\nonMounted(() => {\n const options: Options = {\n nodes: {\n shape: 'dot',\n size: 16,\n },\n physics: {\n repulsion: {\n centralGravity: 0.7,\n springLength: 100,\n springConstant: 0.01,\n },\n maxVelocity: 146,\n solver: 'forceAtlas2Based',\n timestep: 0.35,\n stabilization: {\n enabled: true,\n iterations: 200,\n },\n },\n groups: {\n user: {\n color: '#42b883',\n },\n unknown: {\n color: '#b86542',\n },\n lib: {\n color: '#b4b842',\n },\n page: {\n color: '#42b2b8',\n },\n layout: {\n color: '#4256b8',\n },\n },\n }\n const network = new Network(container.value!, data.value, options)\n\n network.on('click', (e) => {\n const id = e.nodes?.[0]\n const node = ((data.value.nodes as DataSetNodes).get(id) as any).extra\n selected.value = node\n })\n\n watch(data, () => {\n network.setData(data.value)\n })\n})\n\nfunction onCloseDrawer() {\n selected.value = undefined\n}\n\nconst COMPONENTS_PATH_RE = /.*\\/components\\//\nconst VUE_EXT_RE = /\\.vue$/\nconst INDEX_SUFFIX_RE = /\\/index$/\n\nfunction getComponentName(path: string) {\n const component = props.components.find(i => i.filePath === path)\n if (component)\n return component.pascalName\n return path\n .replace(COMPONENTS_PATH_RE, '')\n .replace(VUE_EXT_RE, '')\n .replace(INDEX_SUFFIX_RE, '')\n .split('/')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction setFilter() {\n selectedFilter.value = selected.value?.relationship\n selected.value = undefined\n}\n</script>\n\n<template>\n <NNavbar ref=\"navbar\" v-model:search=\"search\" absolute left-0 right-0 top-0>\n <template #actions>\n <div flex=\"~ gap-x-3 gap-y-1 wrap\" w-full>\n <NCheckbox v-model=\"showPages\" n=\"primary sm\">\n <span op75>Show pages</span>\n </NCheckbox>\n <NCheckbox v-model=\"showLayouts\" n=\"primary sm\">\n <span op75>Show layouts</span>\n </NCheckbox>\n <NCheckbox v-model=\"showWorkspace\" n=\"primary sm\">\n <span op75>Show workspace</span>\n </NCheckbox>\n <NCheckbox v-model=\"showNodeModules\" n=\"primary sm\">\n <span op75>Show node_modules</span>\n </NCheckbox>\n <NCheckbox v-model=\"showGlobalComponents\" n=\"primary sm\">\n <span op75>Show global components</span>\n </NCheckbox>\n </div>\n <button v-if=\"selectedFilter\" flex=\"~ gap-1\" flex-none items-center rounded-full bg-gray:20 py1 pl3 pr2 text-xs op50 hover:op100 @click=\"selectedFilter = undefined\">\n Clear filter <div i-carbon-close />\n </button>\n <div flex-auto />\n <slot />\n </template>\n </NNavbar>\n\n <div relative h-full w-full>\n <div ref=\"container\" h-full w-full />\n <NCard absolute bottom-3 left-3 border-0 n-glass-effect p2 px3 text-sm>\n <div grid=\"~ cols-[20px_1fr] items-center gap-y-1\">\n <div h-3 w-3 rounded-full bg-hex-42b883 />\n <div op50>\n Component\n </div>\n <div h-3 w-3 rounded-full bg-hex-97c2fc />\n <div op50>\n Global Component\n </div>\n <div h-3 w-3 bg-hex-42b2b8 />\n <div op50>\n Page\n </div>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 726 628\" ml--1px h-3>\n <path fill=\"#4256b8\" stroke-width=\"4\" d=\"M723 314 543 625.8H183L3 314 183 2.2h360L723 314z\" />\n </svg>\n <div op50>\n Layout\n </div>\n <div h-3 w-3 rounded-full bg-hex-b4b842 />\n <div op50>\n Library Component\n </div>\n <div h-3 w-3 rounded-full bg-hex-b86542 />\n <div op50>\n Unknown\n </div>\n </div>\n </NCard>\n <NDrawer\n :model-value=\"!!(selected && selected.component)\"\n :top=\"navbar\"\n border=\"t l base\" w-80\n @close=\"onCloseDrawer\"\n >\n <div v-if=\"selected && selected.component\" py4 pt3 flex=\"~ col\">\n <ComponentDetails\n :component=\"selected.component\"\n :dependencies=\"selectedDependencies\"\n :dependents=\"selectedDependents\"\n />\n <div border=\"t base\" p4>\n <NButton n=\"primary solid\" @click=\"setFilter()\">\n Filter to this component\n </NButton>\n </div>\n </div>\n </NDrawer>\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderClass as _ssrRenderClass, ssrRenderSlot as _ssrRenderSlot, ssrRenderAttrs as _ssrRenderAttrs, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport { computed } from 'vue'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentItem',\n __ssrInlineRender: true,\n props: {\n component: {},\n dependencies: {},\n dependents: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_VDropdown = _resolveComponent(\"VDropdown\")!\n const _component_ComponentName = _resolveComponent(\"ComponentName\")!\n const _component_ComponentDetails = _resolveComponent(\"ComponentDetails\")!\n const _component_NBadge = _resolveComponent(\"NBadge\")!\n const _component_FilepathItem = _resolveComponent(\"FilepathItem\")!\n\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n hover: \"bg-active\",\n class: \"group\",\n flex: \"~ gap2\",\n \"w-full\": \"\",\n \"items-center\": \"\",\n rounded: \"\",\n px2: \"\",\n py1: \"\"\n }, _attrs))}>`)\n _push(_ssrRenderComponent(_component_VDropdown, null, {\n popper: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_ComponentDetails, {\n component: __props.component,\n dependencies: __props.dependencies,\n dependents: __props.dependents,\n \"w-100\": \"\",\n pt3: \"\"\n }, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_ComponentDetails, {\n component: __props.component,\n dependencies: __props.dependencies,\n dependents: __props.dependents,\n \"w-100\": \"\",\n pt3: \"\"\n }, null, 8, [\"component\", \"dependencies\", \"dependents\"])\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<button hover:text-primary class=\"${\n _ssrRenderClass(__props.dependents && __props.dependents.length === 0 ? 'op50' : '')\n }\"${\n _scopeId\n }>`)\n _push(_ssrRenderComponent(_component_ComponentName, { component: __props.component }, null, _parent, _scopeId))\n _push(`</button>`)\n } else {\n return [\n _createVNode(\"button\", {\n \"hover:text-primary\": \"\",\n class: __props.dependents && __props.dependents.length === 0 ? 'op50' : ''\n }, [\n _createVNode(_component_ComponentName, { component: __props.component }, null, 8, [\"component\"])\n ], 2)\n ]\n }\n }),\n _: 1\n }, _parent))\n if (__props.dependents?.length) {\n _push(`<sup ml--1 text-primary> x${_ssrInterpolate(__props.dependents?.length)}</sup>`)\n } else {\n _push(`<!---->`)\n }\n if (__props.component.global) {\n _push(_ssrRenderComponent(_component_NBadge, {\n n: \"green\",\n title: \"Registered at runtime as a global component\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent)\n if (filePath.value) {\n _push(_ssrRenderComponent(_component_FilepathItem, {\n filepath: filePath.value,\n \"text-sm\": \"\",\n op25: \"\",\n \"group-hover:op75\": \"\"\n }, null, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n component: Component\n dependencies?: string[]\n dependents?: string[]\n}>()\n\n// @ts-expect-error types\nconst filePath = computed(() => props.component.filePath || props.component.file || props.component.__file || '')\n</script>\n\n<template>\n <div\n hover=\"bg-active\"\n class=\"group\"\n flex=\"~ gap2\"\n w-full items-center rounded px2 py1\n >\n <VDropdown>\n <button hover:text-primary :class=\"dependents && dependents.length === 0 ? 'op50' : ''\">\n <ComponentName :component=\"component\" />\n </button>\n <template #popper>\n <ComponentDetails\n :component=\"component\"\n :dependencies=\"dependencies\"\n :dependents=\"dependents\"\n w-100 pt3\n />\n </template>\n </VDropdown>\n <sup v-if=\"dependents?.length\" ml--1 text-primary>\n x{{ dependents?.length }}\n </sup>\n <NBadge\n v-if=\"component.global\"\n n=\"green\"\n title=\"Registered at runtime as a global component\"\n v-text=\"'runtime'\"\n />\n <slot />\n <FilepathItem\n v-if=\"filePath\"\n :filepath=\"filePath\"\n text-sm op25 group-hover:op75\n />\n </div>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, renderSlot as _renderSlot, createVNode as _createVNode, unref as _unref, mergeProps as _mergeProps, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\nimport { ssrRenderSlot as _ssrRenderSlot, ssrRenderComponent as _ssrRenderComponent, ssrRenderList as _ssrRenderList } from \"vue/server-renderer\"\n\nimport type { Component } from 'nuxt/schema'\nimport type { ComponentRelationship, ComponentWithRelationships } from '../../types'\nimport Fuse from 'fuse.js'\nimport { computed, ref } from 'vue'\nimport { DETAILS_MAX_ITEMS } from '~/composables/constants'\nimport { getComponentRelationships, getModuleNameFromPath, isNodeModulePath, isNuxtPackageName } from '~/composables/utils'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'ComponentsList',\n __ssrInlineRender: true,\n props: {\n components: {},\n relationships: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\nconst search = ref('')\nconst filterMode = ref<'all' | 'using' | 'not-used'>('all')\n\nconst componentWithRelationships = computed(() => {\n const components = props.components\n .map(c => getComponentRelationships(c, props.relationships))\n if (filterMode.value === 'using')\n return components.filter(c => c.dependents?.length)\n else if (filterMode.value === 'not-used')\n return components.filter(c => !c.dependents?.length)\n return components\n})\n\nconst builtinComponentDocs = {\n ClientOnly: 'https://nuxt.com/docs/api/components/client-only',\n DevOnly: 'https://nuxt.com/docs/api/components/dev-only',\n NuxtClientFallback: 'https://nuxt.com/docs/api/components/nuxt-client-fallback',\n NuxtPicture: 'https://nuxt.com/docs/api/components/nuxt-picture',\n NuxtRouteAnnouncer: 'https://nuxt.com/docs/api/components/nuxt-route-announcer',\n NuxtTime: 'https://nuxt.com/docs/api/components/nuxt-time',\n NuxtPage: 'https://nuxt.com/docs/api/components/nuxt-page',\n NuxtLayout: 'https://nuxt.com/docs/api/components/nuxt-layout',\n NuxtLink: 'https://nuxt.com/docs/api/components/nuxt-link',\n NuxtLoadingIndicator: 'https://nuxt.com/docs/api/components/nuxt-loading-indicator',\n NuxtErrorBoundary: 'https://nuxt.com/docs/api/components/nuxt-error-boundary',\n NuxtWelcome: 'https://nuxt.com/docs/api/components/nuxt-welcome',\n NuxtIsland: 'https://nuxt.com/docs/api/components/nuxt-island',\n NuxtImg: 'https://nuxt.com/docs/api/components/nuxt-img',\n}\n\nconst fuse = computed(() => new Fuse(componentWithRelationships.value, {\n keys: [\n 'component.pascalName',\n 'component.filePath',\n 'component.kebabName',\n ],\n}))\n\nconst filtered = computed(() => {\n const user: ComponentWithRelationships[] = []\n const lib = new Map<string, ComponentWithRelationships[]>()\n const builtin: ComponentWithRelationships[] = []\n const runtime: ComponentWithRelationships[] = []\n\n const count = {\n user: 0,\n lib: 0,\n builtin: 0,\n runtime: 0,\n }\n\n const result = search.value\n ? fuse.value.search(search.value).map(i => i.item)\n : componentWithRelationships.value\n\n result\n .forEach((component) => {\n const c = component.component\n if (c.filePath && isNodeModulePath(c.filePath)) {\n const name = getModuleNameFromPath(c.filePath)\n if (!name)\n return\n if (isNuxtPackageName(name)) {\n c.meta ??= {}\n c.meta.docs ??= builtinComponentDocs?.[c.pascalName as keyof typeof builtinComponentDocs]\n builtin.push(component)\n count.builtin++\n }\n else {\n if (!lib.has(name))\n lib.set(name, [])\n lib.get(name)!.push(component)\n count.lib++\n }\n }\n else if (c.global && !c.filePath) {\n runtime.push(component)\n count.runtime++\n }\n else {\n user.push(component)\n count.user++\n }\n })\n\n return {\n count,\n user,\n builtin,\n lib,\n runtime,\n }\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NNavbar = _resolveComponent(\"NNavbar\")!\n const _component_NIcon = _resolveComponent(\"NIcon\")!\n const _component_NSelectTabs = _resolveComponent(\"NSelectTabs\")!\n const _component_NSectionBlock = _resolveComponent(\"NSectionBlock\")!\n const _component_ComponentItem = _resolveComponent(\"ComponentItem\")!\n const _component_NIconTitle = _resolveComponent(\"NIconTitle\")!\n\n _push(`<!--[-->`)\n _push(_ssrRenderComponent(_component_NNavbar, {\n search: search.value,\n \"onUpdate:search\": ($event: any) => ((search).value = $event),\n pb3: \"\"\n }, {\n actions: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _ssrRenderSlot(_ctx.$slots, \"default\", {}, null, _push, _parent, _scopeId)\n } else {\n return [\n _renderSlot(_ctx.$slots, \"default\")\n ]\n }\n }),\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ gap-2 items-center\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NIcon, {\n icon: \"carbon-filter\",\n op50: \"\"\n }, null, _parent, _scopeId))\n _push(_ssrRenderComponent(_component_NSelectTabs, {\n modelValue: filterMode.value,\n \"onUpdate:modelValue\": ($event: any) => ((filterMode).value = $event),\n n: \"primary sm\",\n options: [\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\n }, null, _parent, _scopeId))\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", { flex: \"~ gap-2 items-center\" }, [\n _createVNode(_component_NIcon, {\n icon: \"carbon-filter\",\n op50: \"\"\n }),\n _createVNode(_component_NSelectTabs, {\n modelValue: filterMode.value,\n \"onUpdate:modelValue\": ($event: any) => ((filterMode).value = $event),\n n: \"primary sm\",\n options: [\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\"])\n ])\n ]\n }\n }),\n _: 3\n }, _parent))\n if (filtered.value.user.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"carbon-nominal\",\n text: \"User components\",\n open: filtered.value.user.length <= _unref(DETAILS_MAX_ITEMS),\n description: `Total components: ${filtered.value.count.user}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.user, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.user, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.runtime.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"carbon-load-balancer-global\",\n open: filtered.value.runtime.length <= _unref(DETAILS_MAX_ITEMS),\n text: \"Runtime components\",\n description: `Total components: ${filtered.value.count.runtime}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.runtime, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.runtime, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.builtin.length) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n icon: \"simple-icons-nuxtdotjs\",\n text: \"Built-in components\",\n description: `Total components: ${filtered.value.count.builtin}`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.builtin, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.builtin, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n if (filtered.value.lib.size) {\n _push(_ssrRenderComponent(_component_NSectionBlock, {\n open: filtered.value.count.lib <= _unref(DETAILS_MAX_ITEMS),\n icon: \"carbon-3d-mpr-toggle\",\n text: \"Components from libraries\",\n description: `${filtered.value.count.lib} components from ${filtered.value.lib.size} packages`\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<!--[-->`)\n _ssrRenderList(filtered.value.lib.entries(), ([key, value]) => {\n _push(`<div ml-2${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NIconTitle, {\n text: `${key} (${value.length})`,\n py1: \"\",\n op50: \"\"\n }, null, _parent, _scopeId))\n _push(`<div pl4${_scopeId}><!--[-->`)\n _ssrRenderList(value, (c) => {\n _push(_ssrRenderComponent(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, _parent, _scopeId))\n })\n _push(`<!--]--></div></div>`)\n })\n _push(`<!--]-->`)\n } else {\n return [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(filtered.value.lib.entries(), ([key, value]) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: key,\n \"ml-2\": \"\"\n }, [\n _createVNode(_component_NIconTitle, {\n text: `${key} (${value.length})`,\n py1: \"\",\n op50: \"\"\n }, null, 8, [\"text\"]),\n _createVNode(\"div\", { pl4: \"\" }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(value, (c) => {\n return (_openBlock(), _createBlock(_component_ComponentItem, _mergeProps({\n key: c.component.filePath\n }, { ref_for: true }, c), null, 16))\n }), 128))\n ])\n ]))\n }), 128))\n ]\n }\n }),\n _: 1\n }, _parent))\n } else {\n _push(`<!---->`)\n }\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { Component } from 'nuxt/schema'\nimport type { ComponentRelationship, ComponentWithRelationships } from '../../types'\nimport Fuse from 'fuse.js'\nimport { computed, ref } from 'vue'\nimport { DETAILS_MAX_ITEMS } from '~/composables/constants'\nimport { getComponentRelationships, getModuleNameFromPath, isNodeModulePath, isNuxtPackageName } from '~/composables/utils'\n\nconst props = defineProps<{\n components: Component[]\n relationships?: ComponentRelationship[] | null\n}>()\n\nconst search = ref('')\nconst filterMode = ref<'all' | 'using' | 'not-used'>('all')\n\nconst componentWithRelationships = computed(() => {\n const components = props.components\n .map(c => getComponentRelationships(c, props.relationships))\n if (filterMode.value === 'using')\n return components.filter(c => c.dependents?.length)\n else if (filterMode.value === 'not-used')\n return components.filter(c => !c.dependents?.length)\n return components\n})\n\nconst builtinComponentDocs = {\n ClientOnly: 'https://nuxt.com/docs/api/components/client-only',\n DevOnly: 'https://nuxt.com/docs/api/components/dev-only',\n NuxtClientFallback: 'https://nuxt.com/docs/api/components/nuxt-client-fallback',\n NuxtPicture: 'https://nuxt.com/docs/api/components/nuxt-picture',\n NuxtRouteAnnouncer: 'https://nuxt.com/docs/api/components/nuxt-route-announcer',\n NuxtTime: 'https://nuxt.com/docs/api/components/nuxt-time',\n NuxtPage: 'https://nuxt.com/docs/api/components/nuxt-page',\n NuxtLayout: 'https://nuxt.com/docs/api/components/nuxt-layout',\n NuxtLink: 'https://nuxt.com/docs/api/components/nuxt-link',\n NuxtLoadingIndicator: 'https://nuxt.com/docs/api/components/nuxt-loading-indicator',\n NuxtErrorBoundary: 'https://nuxt.com/docs/api/components/nuxt-error-boundary',\n NuxtWelcome: 'https://nuxt.com/docs/api/components/nuxt-welcome',\n NuxtIsland: 'https://nuxt.com/docs/api/components/nuxt-island',\n NuxtImg: 'https://nuxt.com/docs/api/components/nuxt-img',\n}\n\nconst fuse = computed(() => new Fuse(componentWithRelationships.value, {\n keys: [\n 'component.pascalName',\n 'component.filePath',\n 'component.kebabName',\n ],\n}))\n\nconst filtered = computed(() => {\n const user: ComponentWithRelationships[] = []\n const lib = new Map<string, ComponentWithRelationships[]>()\n const builtin: ComponentWithRelationships[] = []\n const runtime: ComponentWithRelationships[] = []\n\n const count = {\n user: 0,\n lib: 0,\n builtin: 0,\n runtime: 0,\n }\n\n const result = search.value\n ? fuse.value.search(search.value).map(i => i.item)\n : componentWithRelationships.value\n\n result\n .forEach((component) => {\n const c = component.component\n if (c.filePath && isNodeModulePath(c.filePath)) {\n const name = getModuleNameFromPath(c.filePath)\n if (!name)\n return\n if (isNuxtPackageName(name)) {\n c.meta ??= {}\n c.meta.docs ??= builtinComponentDocs?.[c.pascalName as keyof typeof builtinComponentDocs]\n builtin.push(component)\n count.builtin++\n }\n else {\n if (!lib.has(name))\n lib.set(name, [])\n lib.get(name)!.push(component)\n count.lib++\n }\n }\n else if (c.global && !c.filePath) {\n runtime.push(component)\n count.runtime++\n }\n else {\n user.push(component)\n count.user++\n }\n })\n\n return {\n count,\n user,\n builtin,\n lib,\n runtime,\n }\n})\n</script>\n\n<template>\n <NNavbar v-model:search=\"search\" pb3>\n <template #actions>\n <slot />\n </template>\n <div flex=\"~ gap-2 items-center\">\n <NIcon icon=\"carbon-filter\" op50 />\n <NSelectTabs\n v-model=\"filterMode\"\n n=\"primary sm\"\n :options=\"[\n { label: 'All', value: 'all' },\n { label: 'Using', value: 'using' },\n { label: 'Not used', value: 'not-used' },\n ]\"\n />\n </div>\n </NNavbar>\n <NSectionBlock\n v-if=\"filtered.user.length\"\n icon=\"carbon-nominal\"\n text=\"User components\"\n :open=\"filtered.user.length <= DETAILS_MAX_ITEMS\"\n :description=\"`Total components: ${filtered.count.user}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.user\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.runtime.length\"\n icon=\"carbon-load-balancer-global\"\n :open=\"filtered.runtime.length <= DETAILS_MAX_ITEMS\"\n text=\"Runtime components\"\n :description=\"`Total components: ${filtered.count.runtime}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.runtime\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.builtin.length\"\n icon=\"simple-icons-nuxtdotjs\"\n text=\"Built-in components\"\n :description=\"`Total components: ${filtered.count.builtin}`\"\n >\n <ComponentItem\n v-for=\"c of filtered.builtin\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </NSectionBlock>\n <NSectionBlock\n v-if=\"filtered.lib.size\"\n :open=\"filtered.count.lib <= DETAILS_MAX_ITEMS\"\n icon=\"carbon-3d-mpr-toggle\"\n text=\"Components from libraries\"\n :description=\"`${filtered.count.lib} components from ${filtered.lib.size} packages`\"\n >\n <div v-for=\"[key, value] of filtered.lib.entries()\" :key=\"key\" ml-2>\n <NIconTitle :text=\"`${key} (${value.length})`\" py1 op50 />\n <div pl4>\n <ComponentItem\n v-for=\"c of value\"\n :key=\"c.component.filePath\"\n v-bind=\"c\"\n />\n </div>\n </div>\n </NSectionBlock>\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveDynamicComponent as _resolveDynamicComponent, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, mergeProps as _mergeProps, withCtx as _withCtx, createVNode as _createVNode, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\nimport { ssrGetDirectiveProps as _ssrGetDirectiveProps, ssrRenderComponent as _ssrRenderComponent, ssrRenderVNode as _ssrRenderVNode } from \"vue/server-renderer\"\n\nimport { definePageMeta } from '#imports'\nimport ComponentsGraph from '~/components/ComponentsGraph.vue'\nimport ComponentsList from '~/components/ComponentsList.vue'\nimport { useClient } from '~/composables/client'\nimport { useComponents, useComponentsRelationships } from '~/composables/state-components'\nimport { useDevToolsOptions } from '../../composables/storage-options'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'components',\n __ssrInlineRender: true,\n setup(__props) {\n\ndefinePageMeta({\n icon: 'i-carbon-assembly-cluster',\n title: 'Components',\n order: 2,\n})\n\nconst client = useClient()\nconst components = useComponents()\nconst relationships = useComponentsRelationships()\n\nconst { componentsView: view } = useDevToolsOptions('ui')\n\nfunction openComponentInspector() {\n client.value?.inspector?.enable()\n}\n\nfunction toggleView() {\n view.value = view.value === 'list' ? 'graph' : 'list'\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NButton = _resolveComponent(\"NButton\")!\n const _component_HelpFab = _resolveComponent(\"HelpFab\")!\n const _component_DocsComponents = _resolveComponent(\"DocsComponents\")!\n const _directive_tooltip = _resolveDirective(\"tooltip\")!\n\n _push(`<!--[--><div relative h-full of-auto>`)\n _ssrRenderVNode(_push, _createVNode(_resolveDynamicComponent(_unref(view) === 'list' ? ComponentsList : ComponentsGraph), {\n components: _unref(components),\n relationships: _unref(relationships)\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex-none flex=\"~ gap3\"${_scopeId}>`)\n _push(_ssrRenderComponent(_component_NButton, _mergeProps({\n \"text-lg\": \"\",\n border: false,\n icon: _unref(view) === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4',\n title: \"Toggle view\",\n onClick: toggleView\n }, _ssrGetDirectiveProps(_ctx, _directive_tooltip, 'Toggle View', void 0, { \"bottom-end\": true })), null, _parent, _scopeId))\n if (_unref(client)?.inspector?.isAvailable) {\n _push(_ssrRenderComponent(_component_NButton, _mergeProps({\n \"text-lg\": \"\",\n border: false,\n icon: \"i-tabler-focus-2\",\n title: \"Inspect Vue components\",\n onClick: openComponentInspector\n }, _ssrGetDirectiveProps(_ctx, _directive_tooltip, 'Inspect Vue components', void 0, { \"bottom-end\": true })), null, _parent, _scopeId))\n } else {\n _push(`<!---->`)\n }\n _push(`</div>`)\n } else {\n return [\n _createVNode(\"div\", {\n \"flex-none\": \"\",\n flex: \"~ gap3\"\n }, [\n _withDirectives(_createVNode(_component_NButton, {\n \"text-lg\": \"\",\n border: false,\n icon: _unref(view) === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4',\n title: \"Toggle view\",\n onClick: toggleView\n }, null, 8, [\"icon\"]), [\n [\n _directive_tooltip,\n 'Toggle View',\n void 0,\n { \"bottom-end\": true }\n ]\n ]),\n (_unref(client)?.inspector?.isAvailable)\n ? _withDirectives((_openBlock(), _createBlock(_component_NButton, {\n key: 0,\n \"text-lg\": \"\",\n border: false,\n icon: \"i-tabler-focus-2\",\n title: \"Inspect Vue components\",\n onClick: openComponentInspector\n }, null, 512)), [\n [\n _directive_tooltip,\n 'Inspect Vue components',\n void 0,\n { \"bottom-end\": true }\n ]\n ])\n : _createCommentVNode(\"\", true)\n ])\n ]\n }\n }),\n _: 1\n }), _parent)\n _push(`</div>`)\n _push(_ssrRenderComponent(_component_HelpFab, null, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_DocsComponents, null, null, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_DocsComponents)\n ]\n }\n }),\n _: 1\n }, _parent))\n _push(`<!--]-->`)\n}\n}\n\n})","<script setup lang=\"ts\">\nimport { definePageMeta } from '#imports'\nimport ComponentsGraph from '~/components/ComponentsGraph.vue'\nimport ComponentsList from '~/components/ComponentsList.vue'\nimport { useClient } from '~/composables/client'\nimport { useComponents, useComponentsRelationships } from '~/composables/state-components'\nimport { useDevToolsOptions } from '../../composables/storage-options'\n\ndefinePageMeta({\n icon: 'i-carbon-assembly-cluster',\n title: 'Components',\n order: 2,\n})\n\nconst client = useClient()\nconst components = useComponents()\nconst relationships = useComponentsRelationships()\n\nconst { componentsView: view } = useDevToolsOptions('ui')\n\nfunction openComponentInspector() {\n client.value?.inspector?.enable()\n}\n\nfunction toggleView() {\n view.value = view.value === 'list' ? 'graph' : 'list'\n}\n</script>\n\n<template>\n <div relative h-full of-auto>\n <component\n :is=\"view === 'list' ? ComponentsList : ComponentsGraph\"\n :components=\"components\"\n :relationships=\"relationships\"\n >\n <div flex-none flex=\"~ gap3\">\n <NButton\n v-tooltip.bottom-end=\"'Toggle View'\"\n text-lg :border=\"false\"\n :icon=\"view === 'graph' ? 'i-carbon-list' : 'i-carbon-network-4'\"\n title=\"Toggle view\"\n @click=\"toggleView\"\n />\n <NButton\n v-if=\"client?.inspector?.isAvailable\"\n v-tooltip.bottom-end=\"'Inspect Vue components'\"\n text-lg :border=\"false\"\n icon=\"i-tabler-focus-2\"\n title=\"Inspect Vue components\"\n @click=\"openComponentInspector\"\n />\n </div>\n </component>\n </div>\n\n <HelpFab>\n <DocsComponents />\n </HelpFab>\n</template>\n"],"version":3}
@@ -0,0 +1 @@
1
+ {"file":"custom-_name_-DRWuAoZa.js","mappings":"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","names":[],"sources":["../../../../../../../../components/IframeView.vue?vue&type=script&setup=true&lang.ts","../../../../../../../../components/IframeView.vue","../../../../../../../../pages/modules/custom-[name].vue?vue&type=script&setup=true&lang.ts","../../../../../../../../pages/modules/custom-[name].vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { mergeProps as _mergeProps } from \"vue\"\nimport { ssrRenderAttrs as _ssrRenderAttrs } from \"vue/server-renderer\"\n\nimport type { ModuleCustomTab, ModuleIframeView } from '~/../src/types'\n\n\nimport { useElementBounding } from '@vueuse/core'\nimport { computed, nextTick, onMounted, onUnmounted, reactive, ref, watchEffect } from 'vue'\nimport { getColorMode, setEmbedderColorMode, useInjectionClient } from '~/composables/client'\n\nconst iframeCacheMap = new Map<string, HTMLIFrameElement>()\nconst observedDocuments = new WeakSet<HTMLElement>()\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'IframeView',\n __ssrInlineRender: true,\n props: {\n tab: {}\n },\n setup(__props: any) {\n\n// eslint-disable-next-line import/first\nconst props = __props\n\nconst colorMode = getColorMode()\nconst anchor = ref<HTMLDivElement>()\nconst key = computed(() => props.tab.name)\nconst iframeEl = ref<HTMLIFrameElement>()\nconst box = reactive(useElementBounding(anchor))\n\nonMounted(() => {\n const view = props.tab.view as ModuleIframeView\n const isPersistent = view.persistent !== false\n const allowedPermissions = ['clipboard-write', 'clipboard-read', ...(view.permissions || [])]\n\n if (iframeCacheMap.get(key.value) && isPersistent) {\n iframeEl.value = iframeCacheMap.get(key.value)!\n iframeEl.value.style.visibility = 'visible'\n }\n else {\n iframeEl.value = document.createElement('iframe')\n iframeEl.value.setAttribute('allow', allowedPermissions.join('; '))\n iframeEl.value.setAttribute('aria-label', 'Nuxt Devtools')\n\n if (isPersistent)\n iframeCacheMap.set(key.value, iframeEl.value)\n iframeEl.value.src = view.src\n // CORS\n try {\n iframeEl.value.style.opacity = '0.01'\n iframeEl.value.onload = () => {\n injectClient()\n syncColorMode()\n iframeEl.value!.style.opacity = '1'\n }\n }\n catch (e) {\n iframeEl.value.style.opacity = '1'\n }\n document.body.appendChild(iframeEl.value)\n nextTick(updateIframeBox)\n }\n setTimeout(syncColorMode, 100)\n})\n\nwatchEffect(updateIframeBox)\nwatchEffect(syncColorMode)\nwatchEffect(injectClient)\n\nonUnmounted(() => {\n if (iframeEl.value)\n iframeEl.value.style.visibility = 'hidden'\n})\n\nfunction syncColorMode() {\n if (!iframeEl.value || !iframeEl.value.contentWindow)\n return\n try {\n const html = iframeEl.value.contentWindow.document.querySelector('html')\n if (!html)\n return\n\n const isDark = colorMode.value === 'dark'\n html.classList.toggle('dark', isDark)\n html.classList.toggle('light', !isDark)\n\n // Iframes are cached and this runs from a watcher, an `onload` and a timer —\n // observe each document once instead of stacking observers on it.\n if (observedDocuments.has(html))\n return\n observedDocuments.add(html)\n\n const ob = new MutationObserver(() => {\n const tabScheme = html.classList.contains('dark') ? 'dark' : 'light'\n // The push above trips this observer too. Only a *divergence* from what we\n // render means the tab picked a scheme of its own; treating our own write\n // as a choice would pin the UI to it and stop it following the OS.\n if (tabScheme !== colorMode.value)\n setEmbedderColorMode(tabScheme)\n })\n ob.observe(html, { attributes: true, attributeFilter: ['class'] })\n }\n catch (e) {\n }\n}\n\nconst injectionClient = useInjectionClient()\n\nfunction injectClient() {\n if (!iframeEl.value || !iframeEl.value.contentWindow)\n return\n try {\n iframeEl.value.contentWindow.__NUXT_DEVTOOLS__ = injectionClient.value\n }\n catch (e) {\n }\n}\n\nfunction updateIframeBox() {\n if (!iframeEl.value)\n return\n Object.assign(iframeEl.value.style, {\n position: 'fixed',\n left: `${box.left}px`,\n top: `${box.top}px`,\n width: `${box.width}px`,\n height: `${box.height}px`,\n outline: 'none',\n })\n}\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n _push(`<div${_ssrRenderAttrs(_mergeProps({\n ref_key: \"anchor\",\n ref: anchor,\n \"h-full\": \"\",\n \"w-full\": \"\"\n }, _attrs))}></div>`)\n}\n}\n\n})","<script lang=\"ts\">\nimport { useElementBounding } from '@vueuse/core'\nimport { computed, nextTick, onMounted, onUnmounted, reactive, ref, watchEffect } from 'vue'\nimport { getColorMode, setEmbedderColorMode, useInjectionClient } from '~/composables/client'\n\nconst iframeCacheMap = new Map<string, HTMLIFrameElement>()\nconst observedDocuments = new WeakSet<HTMLElement>()\n</script>\n\n<script setup lang=\"ts\">\n// eslint-disable-next-line import/first\nimport type { ModuleCustomTab, ModuleIframeView } from '~/../src/types'\n\nconst props = defineProps<{\n tab: ModuleCustomTab\n}>()\n\nconst colorMode = getColorMode()\nconst anchor = ref<HTMLDivElement>()\nconst key = computed(() => props.tab.name)\nconst iframeEl = ref<HTMLIFrameElement>()\nconst box = reactive(useElementBounding(anchor))\n\nonMounted(() => {\n const view = props.tab.view as ModuleIframeView\n const isPersistent = view.persistent !== false\n const allowedPermissions = ['clipboard-write', 'clipboard-read', ...(view.permissions || [])]\n\n if (iframeCacheMap.get(key.value) && isPersistent) {\n iframeEl.value = iframeCacheMap.get(key.value)!\n iframeEl.value.style.visibility = 'visible'\n }\n else {\n iframeEl.value = document.createElement('iframe')\n iframeEl.value.setAttribute('allow', allowedPermissions.join('; '))\n iframeEl.value.setAttribute('aria-label', 'Nuxt Devtools')\n\n if (isPersistent)\n iframeCacheMap.set(key.value, iframeEl.value)\n iframeEl.value.src = view.src\n // CORS\n try {\n iframeEl.value.style.opacity = '0.01'\n iframeEl.value.onload = () => {\n injectClient()\n syncColorMode()\n iframeEl.value!.style.opacity = '1'\n }\n }\n catch (e) {\n iframeEl.value.style.opacity = '1'\n }\n document.body.appendChild(iframeEl.value)\n nextTick(updateIframeBox)\n }\n setTimeout(syncColorMode, 100)\n})\n\nwatchEffect(updateIframeBox)\nwatchEffect(syncColorMode)\nwatchEffect(injectClient)\n\nonUnmounted(() => {\n if (iframeEl.value)\n iframeEl.value.style.visibility = 'hidden'\n})\n\nfunction syncColorMode() {\n if (!iframeEl.value || !iframeEl.value.contentWindow)\n return\n try {\n const html = iframeEl.value.contentWindow.document.querySelector('html')\n if (!html)\n return\n\n const isDark = colorMode.value === 'dark'\n html.classList.toggle('dark', isDark)\n html.classList.toggle('light', !isDark)\n\n // Iframes are cached and this runs from a watcher, an `onload` and a timer —\n // observe each document once instead of stacking observers on it.\n if (observedDocuments.has(html))\n return\n observedDocuments.add(html)\n\n const ob = new MutationObserver(() => {\n const tabScheme = html.classList.contains('dark') ? 'dark' : 'light'\n // The push above trips this observer too. Only a *divergence* from what we\n // render means the tab picked a scheme of its own; treating our own write\n // as a choice would pin the UI to it and stop it following the OS.\n if (tabScheme !== colorMode.value)\n setEmbedderColorMode(tabScheme)\n })\n ob.observe(html, { attributes: true, attributeFilter: ['class'] })\n }\n catch (e) {\n }\n}\n\nconst injectionClient = useInjectionClient()\n\nfunction injectClient() {\n if (!iframeEl.value || !iframeEl.value.contentWindow)\n return\n try {\n iframeEl.value.contentWindow.__NUXT_DEVTOOLS__ = injectionClient.value\n }\n catch (e) {\n }\n}\n\nfunction updateIframeBox() {\n if (!iframeEl.value)\n return\n Object.assign(iframeEl.value.style, {\n position: 'fixed',\n left: `${box.left}px`,\n top: `${box.top}px`,\n width: `${box.width}px`,\n height: `${box.height}px`,\n outline: 'none',\n })\n}\n</script>\n\n<template>\n <div ref=\"anchor\" h-full w-full />\n</template>\n","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, mergeProps as _mergeProps, resolveDynamicComponent as _resolveDynamicComponent, unref as _unref } from \"vue\"\nimport { ssrRenderComponent as _ssrRenderComponent, ssrRenderVNode as _ssrRenderVNode, ssrInterpolate as _ssrInterpolate } from \"vue/server-renderer\"\n\nimport type { ModuleCustomTab } from '~/../src/types'\nimport { computed, onMounted } from 'vue'\nimport { useRoute, useRouter } from '#app/composables/router'\nimport { definePageMeta } from '#imports'\nimport { rpc } from '~/composables/rpc'\nimport { useAllTabs } from '~/composables/state-tabs'\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'custom-[name]',\n __ssrInlineRender: true,\n props: {\n name: {}\n },\n setup(__props: any) {\n\nconst props = __props\n\ndefinePageMeta({\n layout: 'full',\n})\n\nconst route = useRoute()\nconst router = useRouter()\nconst name = computed(() => props.name ?? route.params.name)\nconst tabs = useAllTabs()\nconst tab = computed(() => tabs.value.find(i => i.name === name.value) as ModuleCustomTab | undefined)\n\nonMounted(() => {\n // if the tab is not found and passed a certain timeout, redirect to the overview page\n if (!tab.value) {\n setTimeout(() => {\n if (!tab.value)\n router.push('/modules/overview')\n }, 2000)\n }\n})\n\nreturn (_ctx: any,_push: any,_parent: any,_attrs: any) => {\n const _component_NPanelGrids = _resolveComponent(\"NPanelGrids\")!\n const _component_IframeView = _resolveComponent(\"IframeView\")!\n const _component_LaunchPage = _resolveComponent(\"LaunchPage\")!\n const _component_NCard = _resolveComponent(\"NCard\")!\n\n if (!tab.value) {\n _push(_ssrRenderComponent(_component_NPanelGrids, _attrs, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(`<div flex=\"~ col gap2\" mxa items-center${\n _scopeId\n }><div i-carbon-queued mb2 text-5xl op50${\n _scopeId\n }></div><p text-xl${\n _scopeId\n }> Tab <code text-rose${\n _scopeId\n }>${\n _ssrInterpolate(name.value)\n }</code> not found </p><p op50${\n _scopeId\n }> It might because the module contributing this tab is not installed or enabled </p><p mt8 animate-pulse${\n _scopeId\n }> Redirecting to overview page... </p></div>`)\n } else {\n return [\n _createVNode(\"div\", {\n flex: \"~ col gap2\",\n mxa: \"\",\n \"items-center\": \"\"\n }, [\n _createVNode(\"div\", {\n \"i-carbon-queued\": \"\",\n mb2: \"\",\n \"text-5xl\": \"\",\n op50: \"\"\n }),\n _createVNode(\"p\", { \"text-xl\": \"\" }, [\n _createTextVNode(\" Tab \"),\n _createVNode(\"code\", { \"text-rose\": \"\" }, _toDisplayString(name.value), 1),\n _createTextVNode(\" not found \")\n ]),\n _createVNode(\"p\", { op50: \"\" }, \" It might because the module contributing this tab is not installed or enabled \"),\n _createVNode(\"p\", {\n mt8: \"\",\n \"animate-pulse\": \"\"\n }, \" Redirecting to overview page... \")\n ])\n ]\n }\n }),\n _: 1\n }, _parent))\n } else if (tab.value.view.type === 'iframe') {\n _push(_ssrRenderComponent(_component_IframeView, _mergeProps({ tab: tab.value }, _attrs), null, _parent))\n } else if (tab.value.view.type === 'vnode') {\n _ssrRenderVNode(_push, _createVNode(_resolveDynamicComponent(tab.value.view.vnode), _attrs, null), _parent)\n } else if (tab.value.view.type === 'launch') {\n _push(_ssrRenderComponent(_component_LaunchPage, _mergeProps({\n name: `custom-${tab.value.name}`,\n icon: tab.value.view.icon || tab.value.icon,\n title: tab.value.view.title || tab.value.title,\n description: tab.value.view.description,\n actions: tab.value.view.actions,\n onAction: idx => _unref(rpc).customTabAction(tab.value!.name, idx)\n }, _attrs), null, _parent))\n } else {\n _push(_ssrRenderComponent(_component_NPanelGrids, _attrs, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(_ssrRenderComponent(_component_NCard, {\n flex: \"~ col\",\n \"h-full\": \"\",\n \"items-center\": \"\",\n \"justify-center\": \"\"\n }, {\n default: _withCtx((_, _push, _parent, _scopeId) => {\n if (_push) {\n _push(` Unknown tab type ${_ssrInterpolate(tab.value.view)}`)\n } else {\n return [\n _createTextVNode(\" Unknown tab type \" + _toDisplayString(tab.value.view), 1)\n ]\n }\n }),\n _: 1\n }, _parent, _scopeId))\n } else {\n return [\n _createVNode(_component_NCard, {\n flex: \"~ col\",\n \"h-full\": \"\",\n \"items-center\": \"\",\n \"justify-center\": \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Unknown tab type \" + _toDisplayString(tab.value.view), 1)\n ]),\n _: 1\n })\n ]\n }\n }),\n _: 1\n }, _parent))\n }\n}\n}\n\n})","<script setup lang=\"ts\">\nimport type { ModuleCustomTab } from '~/../src/types'\nimport { computed, onMounted } from 'vue'\nimport { useRoute, useRouter } from '#app/composables/router'\nimport { definePageMeta } from '#imports'\nimport { rpc } from '~/composables/rpc'\nimport { useAllTabs } from '~/composables/state-tabs'\n\nconst props = defineProps<{\n name?: string\n}>()\n\ndefinePageMeta({\n layout: 'full',\n})\n\nconst route = useRoute()\nconst router = useRouter()\nconst name = computed(() => props.name ?? route.params.name)\nconst tabs = useAllTabs()\nconst tab = computed(() => tabs.value.find(i => i.name === name.value) as ModuleCustomTab | undefined)\n\nonMounted(() => {\n // if the tab is not found and passed a certain timeout, redirect to the overview page\n if (!tab.value) {\n setTimeout(() => {\n if (!tab.value)\n router.push('/modules/overview')\n }, 2000)\n }\n})\n</script>\n\n<template>\n <template v-if=\"!tab\">\n <NPanelGrids>\n <div flex=\"~ col gap2\" mxa items-center>\n <div i-carbon-queued mb2 text-5xl op50 />\n <p text-xl>\n Tab <code text-rose>{{ name }}</code> not found\n </p>\n <p op50>\n It might because the module contributing this tab is not installed or enabled\n </p>\n <p mt8 animate-pulse>\n Redirecting to overview page...\n </p>\n </div>\n </NPanelGrids>\n </template>\n <template v-else-if=\"tab.view.type === 'iframe'\">\n <IframeView :tab=\"tab\" />\n </template>\n <template v-else-if=\"tab.view.type === 'vnode'\">\n <Component :is=\"tab.view.vnode\" />\n </template>\n <template v-else-if=\"tab.view.type === 'launch'\">\n <LaunchPage\n :name=\"`custom-${tab.name}`\"\n :icon=\"tab.view.icon || tab.icon\"\n :title=\"tab.view.title || tab.title\"\n :description=\"tab.view.description\"\n :actions=\"tab.view.actions\"\n @action=\"idx => rpc.customTabAction(tab!.name, idx)\"\n />\n </template>\n <template v-else>\n <NPanelGrids>\n <NCard flex=\"~ col\" h-full items-center justify-center>\n Unknown tab type {{ tab.view }}\n </NCard>\n </NPanelGrids>\n </template>\n</template>\n"],"version":3}