use-button.mjs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { useDeprecated } from "../../../hooks/use-deprecated/index.mjs";
  2. import { useFormDisabled, useFormSize } from "../../form/src/hooks/use-form-common-props.mjs";
  3. import { useFormItem } from "../../form/src/hooks/use-form-item.mjs";
  4. import { useGlobalConfig } from "../../config-provider/src/hooks/use-global-config.mjs";
  5. import { buttonGroupContextKey } from "./constants.mjs";
  6. import { Text, computed, inject, ref, useSlots } from "vue";
  7. //#region ../../packages/components/button/src/use-button.ts
  8. const useButton = (props, emit) => {
  9. useDeprecated({
  10. from: "type.text",
  11. replacement: "link",
  12. version: "3.0.0",
  13. scope: "props",
  14. ref: "https://element-plus.org/en-US/component/button.html#button-attributes"
  15. }, computed(() => props.type === "text"));
  16. const buttonGroupContext = inject(buttonGroupContextKey, void 0);
  17. const globalConfig = useGlobalConfig("button");
  18. const { form } = useFormItem();
  19. const _size = useFormSize(computed(() => buttonGroupContext?.size));
  20. const _disabled = useFormDisabled();
  21. const _ref = ref();
  22. const slots = useSlots();
  23. const _type = computed(() => props.type || buttonGroupContext?.type || globalConfig.value?.type || "");
  24. const autoInsertSpace = computed(() => props.autoInsertSpace ?? globalConfig.value?.autoInsertSpace ?? false);
  25. const _plain = computed(() => props.plain ?? globalConfig.value?.plain ?? false);
  26. const _round = computed(() => props.round ?? globalConfig.value?.round ?? false);
  27. const _text = computed(() => props.text ?? globalConfig.value?.text ?? false);
  28. const _dashed = computed(() => props.dashed ?? globalConfig.value?.dashed ?? false);
  29. const _props = computed(() => {
  30. if (props.tag === "button") return {
  31. ariaDisabled: _disabled.value || props.loading,
  32. disabled: _disabled.value || props.loading,
  33. autofocus: props.autofocus,
  34. type: props.nativeType
  35. };
  36. return {};
  37. });
  38. const shouldAddSpace = computed(() => {
  39. const defaultSlot = slots.default?.();
  40. if (autoInsertSpace.value && defaultSlot?.length === 1) {
  41. const slot = defaultSlot[0];
  42. if (slot?.type === Text) {
  43. const text = slot.children;
  44. return /^\p{Unified_Ideograph}{2}$/u.test(text.trim());
  45. }
  46. }
  47. return false;
  48. });
  49. const handleClick = (evt) => {
  50. if (_disabled.value || props.loading) {
  51. evt.stopPropagation();
  52. return;
  53. }
  54. if (props.nativeType === "reset") form?.resetFields();
  55. emit("click", evt);
  56. };
  57. return {
  58. _disabled,
  59. _size,
  60. _type,
  61. _ref,
  62. _props,
  63. _plain,
  64. _round,
  65. _text,
  66. _dashed,
  67. shouldAddSpace,
  68. handleClick
  69. };
  70. };
  71. //#endregion
  72. export { useButton };
  73. //# sourceMappingURL=use-button.mjs.map