{"version":3,"file":"VAlert.mjs","names":["VAlertTitle","VBtn","VDefaultsProvider","VIcon","genOverlays","makeVariantProps","useVariant","makeDensityProps","useDensity","makeDimensionProps","useDimension","makeElevationProps","useElevation","makeLocationProps","useLocation","makePositionProps","usePosition","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","useLocale","useProxiedModel","useTextColor","IconValue","computed","toRef","genericComponent","allowedTypes","VAlert","name","props","border","type","Boolean","String","validator","val","includes","borderColor","closable","closeIcon","default","closeLabel","icon","Function","Object","modelValue","prominent","title","text","variant","emits","value","setup","slots","isActive","undefined","variantProps","color","themeClasses","colorClasses","colorStyles","variantClasses","densityClasses","dimensionStyles","elevationClasses","locationStyles","positionClasses","roundedClasses","textColorClasses","textColorStyles","t","closeProps","onClick","e","hasPrepend","prepend","hasTitle","hasText","hasClose","close","density","size","append"],"sources":["../../../src/components/VAlert/VAlert.tsx"],"sourcesContent":["// Styles\nimport './VAlert.sass'\n\n// Components\nimport { VAlertTitle } from './VAlertTitle'\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useTextColor } from '@/composables/color'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nconst allowedTypes = ['success', 'info', 'warning', 'error'] as const\n\ntype ContextualType = typeof allowedTypes[number]\n\nexport type VAlertSlots = MakeSlots<{\n  default: []\n  prepend: []\n  title: []\n  text: []\n  append: []\n  close: []\n}>\n\nexport const VAlert = genericComponent<VAlertSlots>()({\n  name: 'VAlert',\n\n  props: {\n    border: {\n      type: [Boolean, String] as PropType<boolean | 'top' | 'end' | 'bottom' | 'start'>,\n      validator: (val: boolean | string) => {\n        return typeof val === 'boolean' || [\n          'top',\n          'end',\n          'bottom',\n          'start',\n        ].includes(val)\n      },\n    },\n    borderColor: String,\n    closable: Boolean,\n    closeIcon: {\n      type: IconValue,\n      default: '$close',\n    },\n    closeLabel: {\n      type: String,\n      default: '$vuetify.close',\n    },\n    icon: {\n      type: [Boolean, String, Function, Object] as PropType<false | IconValue>,\n      default: null,\n    },\n    modelValue: {\n      type: Boolean,\n      default: true,\n    },\n    prominent: Boolean,\n    title: String,\n    text: String,\n    type: {\n      type: String as PropType<ContextualType>,\n      validator: (val: ContextualType) => allowedTypes.includes(val),\n    },\n\n    ...makeDensityProps(),\n    ...makeDimensionProps(),\n    ...makeElevationProps(),\n    ...makeLocationProps(),\n    ...makePositionProps(),\n    ...makeRoundedProps(),\n    ...makeTagProps(),\n    ...makeThemeProps(),\n    ...makeVariantProps({ variant: 'flat' } as const),\n  },\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const icon = computed(() => {\n      if (props.icon === false) return undefined\n      if (!props.type) return props.icon\n\n      return props.icon ?? `$${props.type}`\n    })\n    const variantProps = computed(() => ({\n      color: props.color ?? props.type,\n      variant: props.variant,\n    }))\n\n    const { themeClasses } = provideTheme(props)\n    const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses } = useRounded(props)\n    const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'borderColor'))\n    const { t } = useLocale()\n\n    const closeProps = computed(() => ({\n      'aria-label': t(props.closeLabel),\n      onClick (e: MouseEvent) {\n        isActive.value = false\n      },\n    }))\n\n    return () => {\n      const hasPrepend = !!(slots.prepend || icon.value)\n      const hasTitle = !!(slots.title || props.title)\n      const hasText = !!(props.text || slots.text)\n      const hasClose = !!(slots.close || props.closable)\n\n      return isActive.value && (\n        <props.tag\n          class={[\n            'v-alert',\n            props.border && {\n              'v-alert--border': !!props.border,\n              [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true,\n            },\n            {\n              'v-alert--prominent': props.prominent,\n            },\n            themeClasses.value,\n            colorClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            positionClasses.value,\n            roundedClasses.value,\n            variantClasses.value,\n          ]}\n          style={[\n            colorStyles.value,\n            dimensionStyles.value,\n            locationStyles.value,\n          ]}\n          role=\"alert\"\n        >\n          { genOverlays(false, 'v-alert') }\n\n          { props.border && (\n            <div\n              key=\"border\"\n              class={[\n                'v-alert__border',\n                textColorClasses.value,\n              ]}\n              style={ textColorStyles.value }\n            />\n          ) }\n\n          { hasPrepend && (\n            <VDefaultsProvider\n              key=\"prepend\"\n              defaults={{\n                VIcon: {\n                  density: props.density,\n                  icon: icon.value,\n                  size: props.prominent ? 44 : 28,\n                },\n              }}\n            >\n              <div class=\"v-alert__prepend\">\n                { slots.prepend\n                  ? slots.prepend()\n                  : icon.value && (<VIcon />)\n                }\n              </div>\n            </VDefaultsProvider>\n          ) }\n\n          <div class=\"v-alert__content\">\n            { hasTitle && (\n              <VAlertTitle key=\"title\">\n                { slots.title ? slots.title() : props.title }\n              </VAlertTitle>\n            ) }\n\n            { hasText && (\n              slots.text ? slots.text() : props.text\n            ) }\n\n            { slots.default?.() }\n          </div>\n\n          { slots.append && (\n            <div key=\"append\" class=\"v-alert__append\">\n              { slots.append() }\n            </div>\n          ) }\n\n          { hasClose && (\n            <VDefaultsProvider\n              key=\"close\"\n              defaults={{\n                VBtn: {\n                  icon: props.closeIcon,\n                  size: 'x-small',\n                  variant: 'text',\n                },\n              }}\n            >\n              <div class=\"v-alert__close\">\n                { slots.close?.({ props: closeProps.value }) ?? <VBtn { ...closeProps.value } /> }\n              </div>\n            </VDefaultsProvider>\n          ) }\n        </props.tag>\n      )\n    }\n  },\n})\n\nexport type VAlert = InstanceType<typeof VAlert>\n"],"mappings":"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"}