mirror of
				https://github.com/antd-tiny-vue/antd-tiny-vue.git
				synced 2025-11-04 10:31:46 +08:00 
			
		
		
		
	fix: fix provide inject error
This commit is contained in:
		
							
								
								
									
										11
									
								
								components/_util/wave/index.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								components/_util/wave/index.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
import { defineComponent } from 'vue'
 | 
			
		||||
 | 
			
		||||
const Wave = defineComponent({
 | 
			
		||||
  name: 'Wave',
 | 
			
		||||
  inheritAttrs: false,
 | 
			
		||||
  setup() {
 | 
			
		||||
    return () => {}
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export default Wave
 | 
			
		||||
							
								
								
									
										34
									
								
								components/_util/wave/style.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								components/_util/wave/style.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
import { genComponentStyleHook } from '../../theme/internal'
 | 
			
		||||
import type { FullToken, GenerateStyle } from '../../theme/internal'
 | 
			
		||||
 | 
			
		||||
export interface ComponentToken {}
 | 
			
		||||
 | 
			
		||||
export interface WaveToken extends FullToken<'Wave'> {}
 | 
			
		||||
 | 
			
		||||
const genWaveStyle: GenerateStyle<WaveToken> = token => {
 | 
			
		||||
  const { componentCls, colorPrimary } = token
 | 
			
		||||
  return {
 | 
			
		||||
    [componentCls]: {
 | 
			
		||||
      position: 'absolute',
 | 
			
		||||
      background: 'transparent',
 | 
			
		||||
      pointerEvents: 'none',
 | 
			
		||||
      boxSizing: 'border-box',
 | 
			
		||||
      color: `var(--wave-color, ${colorPrimary})`,
 | 
			
		||||
 | 
			
		||||
      boxShadow: `0 0 0 0 currentcolor`,
 | 
			
		||||
      opacity: 0.2,
 | 
			
		||||
 | 
			
		||||
      // =================== Motion ===================
 | 
			
		||||
      '&.wave-motion-appear': {
 | 
			
		||||
        transition: [`box-shadow 0.4s ${token.motionEaseOutCirc}`, `opacity 2s ${token.motionEaseOutCirc}`].join(','),
 | 
			
		||||
 | 
			
		||||
        '&-active': {
 | 
			
		||||
          boxShadow: `0 0 0 6px currentcolor`,
 | 
			
		||||
          opacity: 0
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default genComponentStyleHook('Wave', token => [genWaveStyle(token)])
 | 
			
		||||
							
								
								
									
										35
									
								
								components/_util/wave/util.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								components/_util/wave/util.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
export function isNotGrey(color: string) {
 | 
			
		||||
  // eslint-disable-next-line no-useless-escape
 | 
			
		||||
  const match = (color || '').match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/)
 | 
			
		||||
  if (match && match[1] && match[2] && match[3]) {
 | 
			
		||||
    return !(match[1] === match[2] && match[2] === match[3])
 | 
			
		||||
  }
 | 
			
		||||
  return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isValidWaveColor(color: string) {
 | 
			
		||||
  return (
 | 
			
		||||
    color &&
 | 
			
		||||
    color !== '#fff' &&
 | 
			
		||||
    color !== '#ffffff' &&
 | 
			
		||||
    color !== 'rgb(255, 255, 255)' &&
 | 
			
		||||
    color !== 'rgba(255, 255, 255, 1)' &&
 | 
			
		||||
    isNotGrey(color) &&
 | 
			
		||||
    !/rgba\((?:\d*, ){3}0\)/.test(color) && // any transparent rgba color
 | 
			
		||||
    color !== 'transparent'
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getTargetWaveColor(node: HTMLElement) {
 | 
			
		||||
  const { borderTopColor, borderColor, backgroundColor } = getComputedStyle(node)
 | 
			
		||||
  if (isValidWaveColor(borderTopColor)) {
 | 
			
		||||
    return borderTopColor
 | 
			
		||||
  }
 | 
			
		||||
  if (isValidWaveColor(borderColor)) {
 | 
			
		||||
    return borderColor
 | 
			
		||||
  }
 | 
			
		||||
  if (isValidWaveColor(backgroundColor)) {
 | 
			
		||||
    return backgroundColor
 | 
			
		||||
  }
 | 
			
		||||
  return null
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import { createInjectionState } from '@vueuse/core'
 | 
			
		||||
import { computed } from 'vue'
 | 
			
		||||
import { computed, inject, provide } from 'vue'
 | 
			
		||||
 | 
			
		||||
export const defaultIconPrefixCls = 'anticon'
 | 
			
		||||
 | 
			
		||||
@@ -8,21 +7,27 @@ const defaultGetPrefixCls = (suffixCls?: string, customizePrefixCls?: string) =>
 | 
			
		||||
 | 
			
		||||
  return suffixCls ? `ant-${suffixCls}` : 'ant'
 | 
			
		||||
}
 | 
			
		||||
const [useProviderConfigProvide, useProviderConfigInject] = createInjectionState(() => {
 | 
			
		||||
 | 
			
		||||
export const ConfigProviderContext = Symbol('ConfigProviderContext')
 | 
			
		||||
 | 
			
		||||
export const defaultConfigProviderState = () => {
 | 
			
		||||
  const getPrefixCls = defaultGetPrefixCls
 | 
			
		||||
  const iconPrefixCls = computed(() => defaultIconPrefixCls)
 | 
			
		||||
  return {
 | 
			
		||||
    getPrefixCls,
 | 
			
		||||
    iconPrefixCls
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const useProviderConfigProvide = () => {
 | 
			
		||||
  const defaultState = defaultConfigProviderState()
 | 
			
		||||
  provide(ConfigProviderContext, defaultState)
 | 
			
		||||
  return {
 | 
			
		||||
    ...defaultState
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { useProviderConfigProvide }
 | 
			
		||||
export const useProviderConfigState = () => {
 | 
			
		||||
  return (
 | 
			
		||||
    useProviderConfigInject() ?? {
 | 
			
		||||
      getPrefixCls: defaultGetPrefixCls,
 | 
			
		||||
      iconPrefixCls: computed(() => defaultIconPrefixCls)
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
  return inject(ConfigProviderContext, defaultConfigProviderState())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ import type { ComponentToken as ButtonComponentToken } from '../../button/style'
 | 
			
		||||
// import type { ComponentToken as TourComponentToken } from '../../tour/style'
 | 
			
		||||
// import type { ComponentToken as QRCodeComponentToken } from '../../qrcode/style'
 | 
			
		||||
// import type { ComponentToken as AppComponentToken } from '../../app/style'
 | 
			
		||||
// import type { ComponentToken as WaveToken } from '../../_util/wave/style'
 | 
			
		||||
import type { ComponentToken as WaveToken } from '../../_util/wave/style'
 | 
			
		||||
 | 
			
		||||
export interface ComponentTokenMap {
 | 
			
		||||
  Affix?: {}
 | 
			
		||||
@@ -115,5 +115,5 @@ export interface ComponentTokenMap {
 | 
			
		||||
  // App?: AppComponentToken
 | 
			
		||||
  //
 | 
			
		||||
  // /** @private Internal TS definition. Do not use. */
 | 
			
		||||
  // Wave?: WaveToken
 | 
			
		||||
  Wave?: WaveToken
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,7 @@
 | 
			
		||||
import type { CSSInterpolation, Theme } from '@antd-tiny-vue/cssinjs'
 | 
			
		||||
import { createTheme, useCacheToken, useStyleRegister } from '@antd-tiny-vue/cssinjs'
 | 
			
		||||
import { createInjectionState } from '@vueuse/core'
 | 
			
		||||
import type { ComputedRef, VNodeChild } from 'vue'
 | 
			
		||||
import { computed } from 'vue'
 | 
			
		||||
import { computed, inject, provide } from 'vue'
 | 
			
		||||
import version from '../version'
 | 
			
		||||
import type { AliasToken, GlobalToken, MapToken, OverrideToken, PresetColorKey, PresetColorType, SeedToken } from './interface'
 | 
			
		||||
import { PresetColors } from './interface'
 | 
			
		||||
@@ -50,12 +49,14 @@ export interface DesignTokenConfig {
 | 
			
		||||
  hashed?: string | boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const [useDesignTokenProvider, useDesignTokenInject] = createInjectionState((token: DesignTokenConfig) => {
 | 
			
		||||
  return token
 | 
			
		||||
})
 | 
			
		||||
export const DesignTokenContext = Symbol('DesignTokenContext')
 | 
			
		||||
 | 
			
		||||
const useDesignTokenProvider = (token: DesignTokenConfig) => {
 | 
			
		||||
  provide(DesignTokenContext, token)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { useDesignTokenProvider }
 | 
			
		||||
export const useDesignTokenState = () => useDesignTokenInject() ?? defaultConfig
 | 
			
		||||
export const useDesignTokenState = () => inject(DesignTokenContext, defaultConfig)
 | 
			
		||||
 | 
			
		||||
// ================================== Hook ==================================
 | 
			
		||||
export function useToken(): [ComputedRef<Theme<SeedToken, MapToken>>, ComputedRef<GlobalToken>, ComputedRef<string>] {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user