{"version":3,"file":"VDialog.mjs","names":["VDialogTransition","VDefaultsProvider","VOverlay","makeVOverlayProps","forwardRefs","useProxiedModel","useScopeId","computed","mergeProps","nextTick","ref","watch","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","makeVDialogProps","fullscreen","Boolean","retainFocus","type","default","scrollable","origin","scrollStrategy","transition","component","zIndex","VDialog","name","props","emits","value","setup","_ref","slots","isActive","scopeId","overlay","onFocusin","e","before","relatedTarget","after","target","contentEl","globalTop","document","includes","contains","focusable","length","firstElement","lastElement","focus","val","addEventListener","removeEventListener","immediate","preventScroll","activatorEl","activatorProps","String","overlayProps","filterProps","_createVNode","_mergeProps","class","style","$event","activator","_len","arguments","args","Array","_key"],"sources":["../../../src/components/VDialog/VDialog.tsx"],"sourcesContent":["// Styles\nimport './VDialog.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, mergeProps, nextTick, ref, watch } from 'vue'\nimport { focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVDialogProps = propsFactory({\n  fullscreen: Boolean,\n  retainFocus: {\n    type: Boolean,\n    default: true,\n  },\n  scrollable: Boolean,\n\n  ...makeVOverlayProps({\n    origin: 'center center' as const,\n    scrollStrategy: 'block' as const,\n    transition: { component: VDialogTransition as Component },\n    zIndex: 2400,\n  }),\n}, 'VDialog')\n\nexport const VDialog = genericComponent<OverlaySlots>()({\n  name: 'VDialog',\n\n  props: makeVDialogProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { scopeId } = useScopeId()\n\n    const overlay = ref<VOverlay>()\n    function onFocusin (e: FocusEvent) {\n      const before = e.relatedTarget as HTMLElement | null\n      const after = e.target as HTMLElement | null\n\n      if (\n        before !== after &&\n        overlay.value?.contentEl &&\n        // We're the topmost dialog\n        overlay.value?.globalTop &&\n        // It isn't the document or the dialog body\n        ![document, overlay.value.contentEl].includes(after!) &&\n        // It isn't inside the dialog body\n        !overlay.value.contentEl.contains(after)\n      ) {\n        const focusable = focusableChildren(overlay.value.contentEl)\n\n        if (!focusable.length) return\n\n        const firstElement = focusable[0]\n        const lastElement = focusable[focusable.length - 1]\n\n        if (before === firstElement) {\n          lastElement.focus()\n        } else {\n          firstElement.focus()\n        }\n      }\n    }\n\n    if (IN_BROWSER) {\n      watch(() => isActive.value && props.retainFocus, val => {\n        val\n          ? document.addEventListener('focusin', onFocusin)\n          : document.removeEventListener('focusin', onFocusin)\n      }, { immediate: true })\n    }\n\n    watch(isActive, async val => {\n      await nextTick()\n      if (val) {\n        overlay.value!.contentEl?.focus({ preventScroll: true })\n      } else {\n        overlay.value!.activatorEl?.focus({ preventScroll: true })\n      }\n    })\n\n    const activatorProps = computed(() =>\n      mergeProps({\n        'aria-haspopup': 'dialog',\n        'aria-expanded': String(isActive.value),\n      }, props.activatorProps)\n    )\n\n    useRender(() => {\n      const [overlayProps] = VOverlay.filterProps(props)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-dialog',\n            {\n              'v-dialog--fullscreen': props.fullscreen,\n              'v-dialog--scrollable': props.scrollable,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...overlayProps }\n          v-model={ isActive.value }\n          aria-modal=\"true\"\n          activatorProps={ activatorProps.value }\n          role=\"dialog\"\n          { ...scopeId }\n        >\n          {{\n            activator: slots.activator,\n            default: (...args) => (\n              <VDefaultsProvider root=\"VDialog\">\n                { slots.default?.(...args) }\n              </VDefaultsProvider>\n            ),\n          }}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({}, overlay)\n  },\n})\n\nexport type VDialog = InstanceType<typeof VDialog>\n"],"mappings":"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"}