vuetify
Version:
Vue Material Component Framework
1 lines • 13.4 kB
Source Map (JSON)
{"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":";AAAA;AACA;;AAEA;AAAA,SACSA,WAAW;AAAA,SACXC,IAAI;AAAA,SACJC,iBAAiB;AAAA,SACjBC,KAAK,8BAEd;AAAA,SACSC,WAAW,EAAEC,gBAAgB,EAAEC,UAAU;AAAA,SACzCC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,iBAAiB,EAAEC,WAAW;AAAA,SAC9BC,iBAAiB,EAAEC,WAAW;AAAA,SAC9BC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,YAAY;AAAA,SACZC,cAAc,EAAEC,YAAY;AAAA,SAC5BC,SAAS;AAAA,SACTC,eAAe;AAAA,SACfC,YAAY;AAAA,SACZC,SAAS,uCAElB;AACA,SAASC,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,gBAAgB,gCAEzB;AAIA,MAAMC,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAU;AAarE,OAAO,MAAMC,MAAM,GAAGF,gBAAgB,EAAe,CAAC;EACpDG,IAAI,EAAE,QAAQ;EAEdC,KAAK,EAAE;IACLC,MAAM,EAAE;MACNC,IAAI,EAAE,CAACC,OAAO,EAAEC,MAAM,CAA2D;MACjFC,SAAS,EAAGC,GAAqB,IAAK;QACpC,OAAO,OAAOA,GAAG,KAAK,SAAS,IAAI,CACjC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,CACR,CAACC,QAAQ,CAACD,GAAG,CAAC;MACjB;IACF,CAAC;IACDE,WAAW,EAAEJ,MAAM;IACnBK,QAAQ,EAAEN,OAAO;IACjBO,SAAS,EAAE;MACTR,IAAI,EAAET,SAAS;MACfkB,OAAO,EAAE;IACX,CAAC;IACDC,UAAU,EAAE;MACVV,IAAI,EAAEE,MAAM;MACZO,OAAO,EAAE;IACX,CAAC;IACDE,IAAI,EAAE;MACJX,IAAI,EAAE,CAACC,OAAO,EAAEC,MAAM,EAAEU,QAAQ,EAAEC,MAAM,CAAgC;MACxEJ,OAAO,EAAE;IACX,CAAC;IACDK,UAAU,EAAE;MACVd,IAAI,EAAEC,OAAO;MACbQ,OAAO,EAAE;IACX,CAAC;IACDM,SAAS,EAAEd,OAAO;IAClBe,KAAK,EAAEd,MAAM;IACbe,IAAI,EAAEf,MAAM;IACZF,IAAI,EAAE;MACJA,IAAI,EAAEE,MAAkC;MACxCC,SAAS,EAAGC,GAAmB,IAAKT,YAAY,CAACU,QAAQ,CAACD,GAAG;IAC/D,CAAC;IAED,GAAG/B,gBAAgB,EAAE;IACrB,GAAGE,kBAAkB,EAAE;IACvB,GAAGE,kBAAkB,EAAE;IACvB,GAAGE,iBAAiB,EAAE;IACtB,GAAGE,iBAAiB,EAAE;IACtB,GAAGE,gBAAgB,EAAE;IACrB,GAAGE,YAAY,EAAE;IACjB,GAAGC,cAAc,EAAE;IACnB,GAAGf,gBAAgB,CAAC;MAAE+C,OAAO,EAAE;IAAO,CAAC;EACzC,CAAC;EAEDC,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAc,IAAK;EAC3C,CAAC;EAEDC,KAAK,CAAEvB,KAAK,QAAa;IAAA,IAAX;MAAEwB;IAAM,CAAC;IACrB,MAAMC,QAAQ,GAAGlC,eAAe,CAACS,KAAK,EAAE,YAAY,CAAC;IACrD,MAAMa,IAAI,GAAGnB,QAAQ,CAAC,MAAM;MAC1B,IAAIM,KAAK,CAACa,IAAI,KAAK,KAAK,EAAE,OAAOa,SAAS;MAC1C,IAAI,CAAC1B,KAAK,CAACE,IAAI,EAAE,OAAOF,KAAK,CAACa,IAAI;MAElC,OAAOb,KAAK,CAACa,IAAI,IAAK,IAAGb,KAAK,CAACE,IAAK,EAAC;IACvC,CAAC,CAAC;IACF,MAAMyB,YAAY,GAAGjC,QAAQ,CAAC,OAAO;MACnCkC,KAAK,EAAE5B,KAAK,CAAC4B,KAAK,IAAI5B,KAAK,CAACE,IAAI;MAChCkB,OAAO,EAAEpB,KAAK,CAACoB;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM;MAAES;IAAa,CAAC,GAAGxC,YAAY,CAACW,KAAK,CAAC;IAC5C,MAAM;MAAE8B,YAAY;MAAEC,WAAW;MAAEC;IAAe,CAAC,GAAG1D,UAAU,CAACqD,YAAY,CAAC;IAC9E,MAAM;MAAEM;IAAe,CAAC,GAAGzD,UAAU,CAACwB,KAAK,CAAC;IAC5C,MAAM;MAAEkC;IAAgB,CAAC,GAAGxD,YAAY,CAACsB,KAAK,CAAC;IAC/C,MAAM;MAAEmC;IAAiB,CAAC,GAAGvD,YAAY,CAACoB,KAAK,CAAC;IAChD,MAAM;MAAEoC;IAAe,CAAC,GAAGtD,WAAW,CAACkB,KAAK,CAAC;IAC7C,MAAM;MAAEqC;IAAgB,CAAC,GAAGrD,WAAW,CAACgB,KAAK,CAAC;IAC9C,MAAM;MAAEsC;IAAe,CAAC,GAAGpD,UAAU,CAACc,KAAK,CAAC;IAC5C,MAAM;MAAEuC,gBAAgB;MAAEC;IAAgB,CAAC,GAAGhD,YAAY,CAACG,KAAK,CAACK,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,MAAM;MAAEyC;IAAE,CAAC,GAAGnD,SAAS,EAAE;IAEzB,MAAMoD,UAAU,GAAGhD,QAAQ,CAAC,OAAO;MACjC,YAAY,EAAE+C,CAAC,CAACzC,KAAK,CAACY,UAAU,CAAC;MACjC+B,OAAO,CAAEC,CAAa,EAAE;QACtBnB,QAAQ,CAACH,KAAK,GAAG,KAAK;MACxB;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM;MACX,MAAMuB,UAAU,GAAG,CAAC,EAAErB,KAAK,CAACsB,OAAO,IAAIjC,IAAI,CAACS,KAAK,CAAC;MAClD,MAAMyB,QAAQ,GAAG,CAAC,EAAEvB,KAAK,CAACN,KAAK,IAAIlB,KAAK,CAACkB,KAAK,CAAC;MAC/C,MAAM8B,OAAO,GAAG,CAAC,EAAEhD,KAAK,CAACmB,IAAI,IAAIK,KAAK,CAACL,IAAI,CAAC;MAC5C,MAAM8B,QAAQ,GAAG,CAAC,EAAEzB,KAAK,CAAC0B,KAAK,IAAIlD,KAAK,CAACS,QAAQ,CAAC;MAElD,OAAOgB,QAAQ,CAACH,KAAK;QAAA,SAEV,CACL,SAAS,EACTtB,KAAK,CAACC,MAAM,IAAI;UACd,iBAAiB,EAAE,CAAC,CAACD,KAAK,CAACC,MAAM;UACjC,CAAE,mBAAkBD,KAAK,CAACC,MAAM,KAAK,IAAI,GAAG,OAAO,GAAGD,KAAK,CAACC,MAAO,EAAC,GAAG;QACzE,CAAC,EACD;UACE,oBAAoB,EAAED,KAAK,CAACiB;QAC9B,CAAC,EACDY,YAAY,CAACP,KAAK,EAClBQ,YAAY,CAACR,KAAK,EAClBW,cAAc,CAACX,KAAK,EACpBa,gBAAgB,CAACb,KAAK,EACtBe,eAAe,CAACf,KAAK,EACrBgB,cAAc,CAAChB,KAAK,EACpBU,cAAc,CAACV,KAAK,CACrB;QAAA,SACM,CACLS,WAAW,CAACT,KAAK,EACjBY,eAAe,CAACZ,KAAK,EACrBc,cAAc,CAACd,KAAK,CACrB;QAAA,QACI;MAAO;QAAA,gBAEVlD,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAE7B4B,KAAK,CAACC,MAAM;UAAA,OAEN,QAAQ;UAAA,SACL,CACL,iBAAiB,EACjBsC,gBAAgB,CAACjB,KAAK,CACvB;UAAA,SACOkB,eAAe,CAAClB;QAAK,QAEhC,EAECuB,UAAU;UAAA,OAEJ,SAAS;UAAA,YACH;YACR1E,KAAK,EAAE;cACLgF,OAAO,EAAEnD,KAAK,CAACmD,OAAO;cACtBtC,IAAI,EAAEA,IAAI,CAACS,KAAK;cAChB8B,IAAI,EAAEpD,KAAK,CAACiB,SAAS,GAAG,EAAE,GAAG;YAC/B;UACF;QAAC;UAAA;YAAA,SAEU;UAAkB,IACzBO,KAAK,CAACsB,OAAO,GACXtB,KAAK,CAACsB,OAAO,EAAE,GACfjC,IAAI,CAACS,KAAK,mCAAe;QAAA,EAIlC;UAAA,SAEU;QAAkB,IACzByB,QAAQ;UAAA,OACS;QAAO;UAAA,gBACpBvB,KAAK,CAACN,KAAK,GAAGM,KAAK,CAACN,KAAK,EAAE,GAAGlB,KAAK,CAACkB,KAAK;QAAA,EAE9C,EAEC8B,OAAO,KACPxB,KAAK,CAACL,IAAI,GAAGK,KAAK,CAACL,IAAI,EAAE,GAAGnB,KAAK,CAACmB,IAAI,CACvC,EAECK,KAAK,CAACb,OAAO,IAAI,IAGnBa,KAAK,CAAC6B,MAAM;UAAA,OACH,QAAQ;UAAA,SAAO;QAAiB,IACrC7B,KAAK,CAAC6B,MAAM,EAAE,EAEnB,EAECJ,QAAQ;UAAA,OAEF,OAAO;UAAA,YACD;YACRhF,IAAI,EAAE;cACJ4C,IAAI,EAAEb,KAAK,CAACU,SAAS;cACrB0C,IAAI,EAAE,SAAS;cACfhC,OAAO,EAAE;YACX;UACF;QAAC;UAAA;YAAA,SAEU;UAAgB,IACvBI,KAAK,CAAC0B,KAAK,GAAG;YAAElD,KAAK,EAAE0C,UAAU,CAACpB;UAAM,CAAC,CAAC,uBAAeoB,UAAU,CAACpB,KAAK,OAAK;QAAA,EAGrF;MAAA,EAEJ;IACH,CAAC;EACH;AACF,CAAC,CAAC"}