PluginProbe ʕ •ᴥ•ʔ
Hostinger Tools / 3.0.71
Hostinger Tools v3.0.71
3.0.71 3.0.70 3.0.69 3.0.68 3.0.67 3.0.66 1.8.1 1.8.2 1.8.3 1.9.1 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.4 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.2 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 3.0.0 3.0.10 3.0.11 3.0.12 3.0.13 3.0.14 3.0.15 3.0.16 3.0.17 3.0.18 3.0.19 3.0.2 3.0.20 3.0.21 3.0.22 3.0.23 3.0.24 3.0.25 3.0.26 3.0.27 3.0.28 3.0.29 3.0.3 3.0.30 3.0.31 3.0.32 3.0.33 3.0.34 3.0.35 3.0.36 3.0.37 3.0.38 3.0.39 3.0.4 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.0.46 3.0.47 3.0.48 3.0.49 3.0.5 3.0.50 3.0.51 3.0.52 3.0.53 3.0.54 3.0.55 3.0.56 3.0.57 3.0.58 3.0.59 3.0.6 3.0.60 3.0.61 3.0.62 3.0.65 3.0.7 3.0.8 3.0.9 trunk 1.8.0
hostinger / vue-frontend / src / composables / useButton.ts
hostinger / vue-frontend / src / composables Last commit date
index.ts 9 months ago useButton.ts 9 months ago useModal.ts 9 months ago useToggle.ts 9 months ago
useButton.ts
85 lines
1 import { computed } from "vue";
2
3 import {
4 BUTTON_ICON_CONFIGURATION,
5 BUTTON_LOADER_DIMENSION_CONFIGURATION,
6 BUTTON_SIZE_CONFIGURATION,
7 BUTTON_VARIANT_CONFIGURATION
8 } from "@/components/Button/configuration";
9 import type { Color, IButtonPropsMandatory } from "@/types";
10 import { wrapInCssVar } from "@/utils/helpers";
11
12 export const useButton = (props: IButtonPropsMandatory) => {
13 if (!BUTTON_VARIANT_CONFIGURATION[props.variant][props.color]) {
14 throw new Error(
15 `Invalid variant and color combination: ${props.variant} ${props.color}`
16 );
17 }
18
19 const tag = computed(() => {
20 if (typeof props.to === "string") {
21 return "a";
22 }
23
24 if (props.to) {
25 return "router-link";
26 }
27
28 return "button";
29 });
30
31 const configuration = computed(
32 () => BUTTON_VARIANT_CONFIGURATION[props.variant][props.color]
33 );
34
35 const iconConfiguration = computed(() => {
36 const color = props.isDisabled
37 ? configuration.value.disabled.color
38 : configuration.value.color;
39
40 return {
41 size: BUTTON_ICON_CONFIGURATION[props.size].size,
42 color
43 };
44 });
45
46 const getColorConfiguration = () => wrapInCssVar(configuration.value.color);
47
48 const getBackgroundConfiguration = () =>
49 wrapInCssVar(configuration.value.backgroundColor);
50
51 const getLoaderBorderColor = (): Color | undefined => {
52 if (props.variant === "contain") {
53 return "white";
54 }
55
56 return undefined;
57 };
58
59 const style = computed(() => ({
60 border: configuration.value.border,
61 padding: BUTTON_SIZE_CONFIGURATION[props.size].padding,
62 backgroundColor: getBackgroundConfiguration(),
63 color: getColorConfiguration(),
64 colorDisabled: wrapInCssVar(configuration.value.disabled.color),
65 backgroundColorDisabled: wrapInCssVar(
66 configuration.value.disabled.backgroundColor
67 ),
68 backgroundHoverColor: wrapInCssVar(
69 configuration.value.hoverBackgroundColor
70 ),
71 icon: iconConfiguration.value,
72 loader: {
73 borderColor: getLoaderBorderColor(),
74 size: BUTTON_LOADER_DIMENSION_CONFIGURATION[props.size].size,
75 border: BUTTON_LOADER_DIMENSION_CONFIGURATION[props.size].border
76 }
77 }));
78
79 return {
80 style: style.value,
81 tag,
82 configuration
83 };
84 };
85