button-custom.mjs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { computed } from 'vue';
  2. import { TinyColor } from '@ctrl/tinycolor';
  3. import { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';
  4. import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
  5. function darken(color, amount = 20) {
  6. return color.mix("#141414", amount).toString();
  7. }
  8. function useButtonCustomStyle(props) {
  9. const _disabled = useFormDisabled();
  10. const ns = useNamespace("button");
  11. return computed(() => {
  12. let styles = {};
  13. let buttonColor = props.color;
  14. if (buttonColor) {
  15. const match = buttonColor.match(/var\((.*?)\)/);
  16. if (match) {
  17. buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]);
  18. }
  19. const color = new TinyColor(buttonColor);
  20. const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20);
  21. if (props.plain) {
  22. styles = ns.cssVarBlock({
  23. "bg-color": props.dark ? darken(color, 90) : color.tint(90).toString(),
  24. "text-color": buttonColor,
  25. "border-color": props.dark ? darken(color, 50) : color.tint(50).toString(),
  26. "hover-text-color": `var(${ns.cssVarName("color-white")})`,
  27. "hover-bg-color": buttonColor,
  28. "hover-border-color": buttonColor,
  29. "active-bg-color": activeBgColor,
  30. "active-text-color": `var(${ns.cssVarName("color-white")})`,
  31. "active-border-color": activeBgColor
  32. });
  33. if (_disabled.value) {
  34. styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color, 90) : color.tint(90).toString();
  35. styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color, 50) : color.tint(50).toString();
  36. styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color, 80) : color.tint(80).toString();
  37. }
  38. } else {
  39. const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString();
  40. const textColor = color.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`;
  41. styles = ns.cssVarBlock({
  42. "bg-color": buttonColor,
  43. "text-color": textColor,
  44. "border-color": buttonColor,
  45. "hover-bg-color": hoverBgColor,
  46. "hover-text-color": textColor,
  47. "hover-border-color": hoverBgColor,
  48. "active-bg-color": activeBgColor,
  49. "active-border-color": activeBgColor
  50. });
  51. if (_disabled.value) {
  52. const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString();
  53. styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor;
  54. styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`;
  55. styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor;
  56. }
  57. }
  58. }
  59. return styles;
  60. });
  61. }
  62. export { darken, useButtonCustomStyle };
  63. //# sourceMappingURL=button-custom.mjs.map