1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { useGlobalConfig } from '../use-global-config'
- export const defaultNamespace = 'el'
- const statePrefix = 'is-'
- const _bem = (namespace: string, block: string, blockSuffix: string, element: string, modifier: string) => {
- let cls = `${namespace}-${block}`
- if (blockSuffix) {
- cls += `-${blockSuffix}`
- }
- if (element) {
- cls += `__${element}`
- }
- if (modifier) {
- cls += `--${modifier}`
- }
- return cls
- }
- export const useNamespace = (block: string) => {
- const namespace = useGlobalConfig('namespace', defaultNamespace)
- const b = (blockSuffix = '') => _bem(namespace.value, block, blockSuffix, '', '')
- const e = (element?: string) => (element ? _bem(namespace.value, block, '', element, '') : '')
- const m = (modifier?: string) => (modifier ? _bem(namespace.value, block, '', '', modifier) : '')
- const be = (blockSuffix?: string, element?: string) => (blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, '') : '')
- const em = (element?: string, modifier?: string) => (element && modifier ? _bem(namespace.value, block, '', element, modifier) : '')
- const bm = (blockSuffix?: string, modifier?: string) => (blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, '', modifier) : '')
- const bem = (blockSuffix?: string, element?: string, modifier?: string) => (blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : '')
- const is: {
- (name: string, state: boolean | undefined): string
- (name: string): string
- } = (name: string, ...args: [boolean | undefined] | []) => {
- const state = args.length >= 1 ? args[0]! : true
- return name && state ? `${statePrefix}${name}` : ''
- }
- // for css var
- // --el-xxx: value;
- const cssVar = (object: Record<string, string>) => {
- const styles: Record<string, string> = {}
- for (const key in object) {
- if (object[key]) {
- styles[`--${namespace.value}-${key}`] = object[key]
- }
- }
- return styles
- }
- // with block
- const cssVarBlock = (object: Record<string, string>) => {
- const styles: Record<string, string> = {}
- for (const key in object) {
- if (object[key]) {
- styles[`--${namespace.value}-${block}-${key}`] = object[key]
- }
- }
- return styles
- }
- const cssVarName = (name: string) => `--${namespace.value}-${name}`
- const cssVarBlockName = (name: string) => `--${namespace.value}-${block}-${name}`
- return {
- namespace,
- b,
- e,
- m,
- be,
- em,
- bm,
- bem,
- is,
- // css
- cssVar,
- cssVarName,
- cssVarBlock,
- cssVarBlockName,
- }
- }
- export type UseNamespaceReturn = ReturnType<typeof useNamespace>
|