vuetify
Version:
Vue Material Component Framework
1 lines • 15.6 kB
Source Map (JSON)
{"version":3,"file":"VBtn.mjs","names":["VBtnToggleSymbol","VDefaultsProvider","VIcon","VProgressCircular","Ripple","genOverlays","makeVariantProps","useVariant","IconValue","makeBorderProps","useBorder","makeDensityProps","useDensity","makeDimensionProps","useDimension","makeElevationProps","useElevation","makeGroupItemProps","useGroupItem","makeLoaderProps","useLoader","makeLocationProps","useLocation","makePositionProps","usePosition","makeRoundedProps","useRounded","makeRouterProps","useLink","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","useSelectLink","computed","genericComponent","useRender","VBtn","name","directives","props","active","type","Boolean","default","undefined","symbol","flat","icon","String","Function","Object","prependIcon","appendIcon","block","stacked","ripple","tag","variant","emits","val","setup","attrs","slots","themeClasses","borderClasses","colorClasses","colorStyles","variantClasses","densityClasses","dimensionStyles","elevationClasses","loaderClasses","locationStyles","positionClasses","roundedClasses","sizeClasses","sizeStyles","group","link","isActive","isLink","value","isSelected","isDisabled","disabled","isElevated","border","valueAttr","JSON","stringify","select","Tag","hasPrepend","prepend","hasAppend","append","hasIcon","hasColor","selectedClass","loading","href","e","navigate","toggle","loader"],"sources":["../../../src/components/VBtn/VBtn.tsx"],"sourcesContent":["// Styles\nimport './VBtn.sass'\n\n// Components\nimport { VBtnToggleSymbol } from '@/components/VBtnToggle/VBtnToggle'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { IconValue } from '@/composables/icons'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useSelectLink } from '@/composables/selectLink'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { MakeSlots } from '@/util'\nimport type { PropType } from 'vue'\n\nexport type VBtnSlots = MakeSlots<{\n default: []\n prepend: []\n append: []\n loader: []\n}>\n\nexport const VBtn = genericComponent<VBtnSlots>()({\n name: 'VBtn',\n\n directives: { Ripple },\n\n props: {\n active: {\n type: Boolean,\n default: undefined,\n },\n symbol: {\n type: null,\n default: VBtnToggleSymbol,\n },\n flat: Boolean,\n icon: [Boolean, String, Function, Object] as PropType<boolean | IconValue>,\n prependIcon: IconValue,\n appendIcon: IconValue,\n\n block: Boolean,\n stacked: Boolean,\n\n ripple: {\n type: Boolean,\n default: true,\n },\n\n ...makeBorderProps(),\n ...makeRoundedProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeGroupItemProps(),\n ...makeLoaderProps(),\n ...makeLocationProps(),\n ...makePositionProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'button' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'elevated' } as const),\n },\n\n emits: {\n 'group:selected': (val: { value: boolean }) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { loaderClasses } = useLoader(props)\n const { locationStyles } = useLocation(props)\n const { positionClasses } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const group = useGroupItem(props, props.symbol, false)\n const link = useLink(props, attrs)\n\n const isActive = computed(() => {\n if (props.active !== undefined) {\n return props.active\n }\n\n if (link.isLink.value) {\n return link.isActive?.value\n }\n\n return group?.isSelected.value\n })\n const isDisabled = computed(() => group?.disabled.value || props.disabled)\n const isElevated = computed(() => {\n return props.variant === 'elevated' && !(props.disabled || props.flat || props.border)\n })\n const valueAttr = computed(() => {\n if (props.value === undefined) return undefined\n\n return Object(props.value) === props.value\n ? JSON.stringify(props.value, null, 0) : props.value\n })\n\n useSelectLink(link, group?.select)\n\n useRender(() => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasPrepend = !!(props.prependIcon || slots.prepend)\n const hasAppend = !!(props.appendIcon || slots.append)\n const hasIcon = !!(props.icon && props.icon !== true)\n const hasColor = (\n (group?.isSelected.value && (!link.isLink.value || link.isActive?.value)) ||\n (!group || link.isActive?.value)\n )\n\n return (\n <Tag\n type={ Tag === 'a' ? undefined : 'button' }\n class={[\n 'v-btn',\n group?.selectedClass.value,\n {\n 'v-btn--active': isActive.value,\n 'v-btn--block': props.block,\n 'v-btn--disabled': isDisabled.value,\n 'v-btn--elevated': isElevated.value,\n 'v-btn--flat': props.flat,\n 'v-btn--icon': !!props.icon,\n 'v-btn--loading': props.loading,\n 'v-btn--stacked': props.stacked,\n },\n themeClasses.value,\n borderClasses.value,\n hasColor ? colorClasses.value : undefined,\n densityClasses.value,\n elevationClasses.value,\n loaderClasses.value,\n positionClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n ]}\n style={[\n hasColor ? colorStyles.value : undefined,\n dimensionStyles.value,\n locationStyles.value,\n sizeStyles.value,\n ]}\n disabled={ isDisabled.value || undefined }\n href={ link.href.value }\n v-ripple={[\n !isDisabled.value && props.ripple,\n null,\n props.icon ? ['center'] : null,\n ]}\n onClick={ (e: MouseEvent) => {\n if (isDisabled.value) return\n\n link.navigate?.(e)\n group?.toggle()\n } }\n value={ valueAttr.value }\n >\n { genOverlays(true, 'v-btn') }\n\n { !props.icon && hasPrepend && (\n <VDefaultsProvider\n key=\"prepend\"\n defaults={{\n VIcon: {\n icon: props.prependIcon,\n },\n }}\n >\n <span class=\"v-btn__prepend\">\n { slots.prepend?.() ?? (<VIcon />) }\n </span>\n </VDefaultsProvider>\n ) }\n\n <span class=\"v-btn__content\" data-no-activator=\"\">\n <VDefaultsProvider\n key=\"content\"\n defaults={{\n VIcon: {\n icon: hasIcon ? props.icon : undefined,\n },\n }}\n >\n { slots.default?.() ?? (\n hasIcon && (\n <VIcon key=\"icon\" />\n )\n ) }\n </VDefaultsProvider>\n </span>\n\n { !props.icon && hasAppend && (\n <VDefaultsProvider\n key=\"append\"\n defaults={{\n VIcon: {\n icon: props.appendIcon,\n },\n }}\n >\n <span class=\"v-btn__append\">\n { slots.append?.() ?? (<VIcon />) }\n </span>\n </VDefaultsProvider>\n ) }\n\n { !!props.loading && (\n <span key=\"loader\" class=\"v-btn__loader\">\n { slots.loader?.() ?? (\n <VProgressCircular\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n size=\"23\"\n width=\"2\"\n />\n ) }\n </span>\n ) }\n </Tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VBtn = InstanceType<typeof VBtn>\n"],"mappings":"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"}