{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-namespace/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, ref, unref } from 'vue'\n\nimport type { Mod, Mods } from '@xzx-design/utils'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const defaultNamespace = 'xzx'\nconst statePrefix = 'is-'\n\nconst _bem = (\n  namespace: string,\n  block: string,\n  blockSuffix: string,\n  element: string,\n  modifier: string\n) => {\n  let cls = `${namespace}-${block}`\n  if (blockSuffix) {\n    cls += `-${blockSuffix}`\n  }\n  if (element) {\n    cls += `__${element}`\n  }\n  if (modifier) {\n    cls += `--${modifier}`\n  }\n  return cls\n}\n\nfunction genBem(name: string, mods?: Mods): string {\n  if (!mods) {\n    return ''\n  }\n\n  if (typeof mods === 'string') {\n    return ` ${name}--${mods}`\n  }\n\n  if (Array.isArray(mods)) {\n    return (mods as Mod[]).reduce<string>(\n      (ret, item) => ret + genBem(name, item),\n      ''\n    )\n  }\n\n  return Object.keys(mods).reduce(\n    (ret, key) => ret + (mods[key] ? genBem(name, key) : ''),\n    ''\n  )\n}\n\nexport function createBEM(name: string) {\n  return (el?: Mods, mods?: Mods): Mods => {\n    if (el && typeof el !== 'string') {\n      mods = el\n      el = ''\n    }\n\n    el = el ? `${name}__${el}` : name\n\n    return `${el}${genBem(el, mods)}`\n  }\n}\n\nexport type BEM = ReturnType<typeof createBEM>\n\nexport const namespaceContextKey: InjectionKey<Ref<string | undefined>> =\n  Symbol('namespaceContextKey')\n\nexport const useGetDerivedNamespace = (\n  namespaceOverrides?: Ref<string | undefined>\n) => {\n  const derivedNamespace =\n    namespaceOverrides ||\n    (getCurrentInstance()\n      ? inject(namespaceContextKey, ref(defaultNamespace))\n      : ref(defaultNamespace))\n  const namespace = computed(() => {\n    return unref(derivedNamespace) || defaultNamespace\n  })\n  return namespace\n}\n\nexport const useNamespace = (\n  block: string,\n  namespaceOverrides?: Ref<string | undefined>\n) => {\n  const namespace = useGetDerivedNamespace(namespaceOverrides)\n  const b = (blockSuffix = '') =>\n    _bem(namespace.value, block, blockSuffix, '', '')\n  const e = (element?: string) =>\n    element ? _bem(namespace.value, block, '', element, '') : ''\n  const m = (modifier?: string) =>\n    modifier ? _bem(namespace.value, block, '', '', modifier) : ''\n  const be = (blockSuffix?: string, element?: string) =>\n    blockSuffix && element\n      ? _bem(namespace.value, block, blockSuffix, element, '')\n      : ''\n  const em = (element?: string, modifier?: string) =>\n    element && modifier\n      ? _bem(namespace.value, block, '', element, modifier)\n      : ''\n  const bm = (blockSuffix?: string, modifier?: string) =>\n    blockSuffix && modifier\n      ? _bem(namespace.value, block, blockSuffix, '', modifier)\n      : ''\n  const bem = (\n    blockSuffix?: string | any[] | Record<any, any>,\n    element?: string | any[] | Record<any, any>,\n    modifier?: string\n  ) => {\n    if (typeof blockSuffix !== 'string' || typeof element !== 'string') {\n      return createBEM(b())(blockSuffix, element)\n    } else {\n      return blockSuffix && element && modifier\n        ? _bem(\n            namespace.value,\n            block,\n            blockSuffix as string,\n            element as string,\n            modifier\n          )\n        : ''\n    }\n  }\n  const is: {\n    (name: string, state: boolean | undefined): string\n    (name: string): string\n  } = (name: string, ...args: [boolean | undefined] | []) => {\n    const state = args.length >= 1 ? args[0]! : true\n    return name && state ? `${statePrefix}${name}` : ''\n  }\n\n  // for css var\n  // --el-xxx: value;\n  const cssVar = (object: Record<string, string>) => {\n    const styles: Record<string, string> = {}\n    for (const key in object) {\n      if (object[key]) {\n        styles[`--${namespace.value}-${key}`] = object[key]\n      }\n    }\n    return styles\n  }\n  // with block\n  const cssVarBlock = (object: Record<string, string>) => {\n    const styles: Record<string, string> = {}\n    for (const key in object) {\n      if (object[key]) {\n        styles[`--${namespace.value}-${block}-${key}`] = object[key]\n      }\n    }\n    return styles\n  }\n\n  const cssVarName = (name: string) => `--${namespace.value}-${name}`\n  const cssVarBlockName = (name: string) =>\n    `--${namespace.value}-${block}-${name}`\n\n  return {\n    namespace,\n    b,\n    e,\n    m,\n    be,\n    em,\n    bm,\n    bem,\n    is,\n    // css\n    cssVar,\n    cssVarName,\n    cssVarBlock,\n    cssVarBlockName,\n  }\n}\n\nexport type UseNamespaceReturn = ReturnType<typeof useNamespace>\n"],"names":[],"mappings":"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"}