{"version":3,"file":"VSnackbar.mjs","names":["VDefaultsProvider","VOverlay","makeVOverlayProps","VProgressLinear","forwardRefs","makeLocationProps","useLocation","makePositionProps","usePosition","useProxiedModel","makeRoundedProps","useRounded","useScopeId","makeThemeProps","provideTheme","genOverlays","makeVariantProps","useVariant","mergeProps","nextTick","onMounted","onScopeDispose","ref","shallowRef","watch","genericComponent","omit","propsFactory","refElement","useRender","useCountdown","milliseconds","time","timer","clear","clearInterval","reset","value","start","el","style","getComputedStyle","transitionDuration","interval","parseFloat","startTime","performance","now","window","setInterval","elapsed","Math","max","makeVSnackbarProps","multiLine","Boolean","text","String","timeout","type","Number","default","vertical","location","transition","VSnackbar","name","props","emits","v","setup","_ref","slots","isActive","locationStyles","positionClasses","scopeId","themeClasses","colorClasses","colorStyles","variantClasses","roundedClasses","countdown","overlay","timerRef","isHovering","startTimeout","activeTimeout","clearTimeout","element","setTimeout","onPointerenter","onPointerleave","overlayProps","filterProps","hasContent","_createVNode","_mergeProps","class","$event","contentProps","actions","VBtn","variant","ripple","slim","activator"],"sources":["../../../src/components/VSnackbar/VSnackbar.tsx"],"sourcesContent":["// Styles\nimport './VSnackbar.sass'\n\n// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useScopeId } from '@/composables/scopeId'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, refElement, useRender } from '@/util'\n\ntype VSnackbarSlots = {\n  activator: { isActive: boolean, props: Record<string, any> }\n  default: never\n  actions: never\n  text: never\n}\n\nfunction useCountdown (milliseconds: number) {\n  const time = shallowRef(milliseconds)\n  let timer = -1\n\n  function clear () {\n    clearInterval(timer)\n  }\n\n  function reset () {\n    clear()\n\n    nextTick(() => time.value = milliseconds)\n  }\n\n  function start (el?: HTMLElement) {\n    const style = el ? getComputedStyle(el) : { transitionDuration: 0.2 }\n    const interval = parseFloat(style.transitionDuration) * 1000 || 200\n\n    clear()\n\n    if (time.value <= 0) return\n\n    const startTime = performance.now()\n    timer = window.setInterval(() => {\n      const elapsed = performance.now() - startTime + interval\n      time.value = Math.max(milliseconds - elapsed, 0)\n\n      if (time.value <= 0) clear()\n    }, interval)\n  }\n\n  onScopeDispose(clear)\n\n  return { clear, time, start, reset }\n}\n\nexport const makeVSnackbarProps = propsFactory({\n  multiLine: Boolean,\n  text: String,\n  timer: [Boolean, String],\n  timeout: {\n    type: [Number, String],\n    default: 5000,\n  },\n  vertical: Boolean,\n\n  ...makeLocationProps({ location: 'bottom' } as const),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeVariantProps(),\n  ...makeThemeProps(),\n  ...omit(makeVOverlayProps({\n    transition: 'v-snackbar-transition',\n  }), ['persistent', 'noClickAnimation', 'scrim', 'scrollStrategy']),\n}, 'VSnackbar')\n\nexport const VSnackbar = genericComponent<VSnackbarSlots>()({\n  name: 'VSnackbar',\n\n  props: makeVSnackbarProps(),\n\n  emits: {\n    'update:modelValue': (v: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { scopeId } = useScopeId()\n    const { themeClasses } = provideTheme(props)\n    const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n    const { roundedClasses } = useRounded(props)\n    const countdown = useCountdown(Number(props.timeout))\n\n    const overlay = ref<VOverlay>()\n    const timerRef = ref<VProgressLinear>()\n    const isHovering = shallowRef(false)\n\n    watch(isActive, startTimeout)\n    watch(() => props.timeout, startTimeout)\n\n    onMounted(() => {\n      if (isActive.value) startTimeout()\n    })\n\n    let activeTimeout = -1\n    function startTimeout () {\n      countdown.reset()\n      window.clearTimeout(activeTimeout)\n      const timeout = Number(props.timeout)\n\n      if (!isActive.value || timeout === -1) return\n\n      const element = refElement(timerRef.value)\n\n      countdown.start(element)\n\n      activeTimeout = window.setTimeout(() => {\n        isActive.value = false\n      }, timeout)\n    }\n\n    function clearTimeout () {\n      countdown.reset()\n      window.clearTimeout(activeTimeout)\n    }\n\n    function onPointerenter () {\n      isHovering.value = true\n      clearTimeout()\n    }\n\n    function onPointerleave () {\n      isHovering.value = false\n      startTimeout()\n    }\n\n    useRender(() => {\n      const overlayProps = VOverlay.filterProps(props)\n      const hasContent = !!(slots.default || slots.text || props.text)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-snackbar',\n            {\n              'v-snackbar--active': isActive.value,\n              'v-snackbar--multi-line': props.multiLine && !props.vertical,\n              'v-snackbar--timer': !!props.timer,\n              'v-snackbar--vertical': props.vertical,\n            },\n            positionClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          { ...overlayProps }\n          v-model={ isActive.value }\n          contentProps={ mergeProps({\n            class: [\n              'v-snackbar__wrapper',\n              themeClasses.value,\n              colorClasses.value,\n              roundedClasses.value,\n              variantClasses.value,\n            ],\n            style: [\n              locationStyles.value,\n              colorStyles.value,\n            ],\n            onPointerenter,\n            onPointerleave,\n          }, overlayProps.contentProps)}\n          persistent\n          noClickAnimation\n          scrim={ false }\n          scrollStrategy=\"none\"\n          _disableGlobalStack\n          { ...scopeId }\n          v-slots={{ activator: slots.activator }}\n        >\n          { genOverlays(false, 'v-snackbar') }\n\n          { props.timer && (\n            <div key=\"timer\" class=\"v-snackbar__timer\">\n              <VProgressLinear\n                ref={ timerRef }\n                active={ !isHovering.value }\n                color={ typeof props.timer === 'string' ? props.timer : 'info' }\n                max={ props.timeout }\n                model-value={ countdown.time.value }\n              />\n            </div>\n          )}\n\n          { hasContent && (\n            <div\n              key=\"content\"\n              class=\"v-snackbar__content\"\n              role=\"status\"\n              aria-live=\"polite\"\n            >\n              { slots.text?.() ?? props.text }\n\n              { slots.default?.() }\n            </div>\n          )}\n\n          { slots.actions && (\n            <VDefaultsProvider\n              defaults={{\n                VBtn: {\n                  variant: 'text',\n                  ripple: false,\n                  slim: true,\n                },\n              }}\n            >\n              <div class=\"v-snackbar__actions\">\n                { slots.actions() }\n              </div>\n            </VDefaultsProvider>\n          )}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({}, overlay)\n  },\n})\n\nexport type VSnackbar = InstanceType<typeof VSnackbar>\n"],"mappings":"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"}