{
"name": "morphing-dialog",
"type": "registry:ui",
"registryDependencies": [],
"dependencies": [
"motion-v",
"@vueuse/core"
],
"devDependencies": [],
"tailwind": {},
"cssVars": {
"light": {},
"dark": {}
},
"files": [
{
"path": "MorphingDialog.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogClose.vue",
"content": "\n\n\n \n \n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogContainer.vue",
"content": "\n\n\n \n \n \n \n \n \n
\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogContent.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogDescription.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogImage.vue",
"content": "\n\n\n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogSubtitle.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogTitle.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "MorphingDialogTrigger.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui"
},
{
"path": "composables/useClickOutside.ts",
"content": "import type { Ref } from 'vue'\n\nexport function useClickOutside(\n ref: Ref,\n handler: (event: MouseEvent | TouchEvent) => void,\n): void {\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (!ref.value || ref.value.contains(event.target as Node)) {\n return\n }\n handler(event)\n }\n\n onMounted(() => {\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('touchstart', handleClickOutside)\n })\n\n onUnmounted(() => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('touchstart', handleClickOutside)\n })\n}\n",
"type": "registry:hook"
}
]
}