{"version":3,"file":"use-global-config.mjs","names":[],"sources":["../../../../../../../packages/components/config-provider/src/hooks/use-global-config.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, provide, ref, unref } from 'vue'\nimport { debugWarn, keysOf } from '@element-plus/utils'\nimport {\n  SIZE_INJECTION_KEY,\n  defaultInitialZIndex,\n  defaultNamespace,\n  emptyValuesContextKey,\n  localeContextKey,\n  namespaceContextKey,\n  useLocale,\n  useNamespace,\n  useZIndex,\n  zIndexContextKey,\n} from '@element-plus/hooks'\nimport { configProviderContextKey } from '../constants'\n\nimport type { MaybeRef } from '@vueuse/core'\nimport type { App, Ref } from 'vue'\nimport type { ConfigProviderContext } from '../constants'\n\n// this is meant to fix global methods like `ElMessage(opts)`, this way we can inject current locale\n// into the component as default injection value.\n// refer to: https://github.com/element-plus/element-plus/issues/2610#issuecomment-887965266\nconst globalConfig = ref<ConfigProviderContext>()\n\nexport function useGlobalConfig<\n  K extends keyof ConfigProviderContext,\n  D extends ConfigProviderContext[K],\n>(\n  key: K,\n  defaultValue?: D\n): Ref<Exclude<ConfigProviderContext[K], undefined> | D>\nexport function useGlobalConfig(): Ref<ConfigProviderContext>\nexport function useGlobalConfig(\n  key?: keyof ConfigProviderContext,\n  defaultValue = undefined\n) {\n  const config = getCurrentInstance()\n    ? inject(configProviderContextKey, globalConfig)\n    : globalConfig\n  if (key) {\n    return computed(() => config.value?.[key] ?? defaultValue)\n  } else {\n    return config\n  }\n}\n\n// for components like `ElMessage` `ElNotification` `ElMessageBox`.\nexport function useGlobalComponentSettings(\n  block: string,\n  sizeFallback?: MaybeRef<ConfigProviderContext['size']>\n) {\n  const config = useGlobalConfig()\n\n  const ns = useNamespace(\n    block,\n    computed(() => config.value?.namespace || defaultNamespace)\n  )\n\n  const locale = useLocale(computed(() => config.value?.locale))\n  const zIndex = useZIndex(\n    computed(() => config.value?.zIndex || defaultInitialZIndex)\n  )\n  const size = computed(() => unref(sizeFallback) || config.value?.size || '')\n  provideGlobalConfig(computed(() => unref(config) || {}))\n\n  return {\n    ns,\n    locale,\n    zIndex,\n    size,\n  }\n}\n\nexport const provideGlobalConfig = (\n  config: MaybeRef<ConfigProviderContext>,\n  app?: App,\n  global = false\n) => {\n  const inSetup = !!getCurrentInstance()\n  const oldConfig = inSetup ? useGlobalConfig() : undefined\n\n  const provideFn = app?.provide ?? (inSetup ? provide : undefined)\n  if (!provideFn) {\n    debugWarn(\n      'provideGlobalConfig',\n      'provideGlobalConfig() can only be used inside setup().'\n    )\n    return\n  }\n\n  const context = computed(() => {\n    const cfg = unref(config)\n    if (!oldConfig?.value) return cfg\n    return mergeConfig(oldConfig.value, cfg)\n  })\n  provideFn(configProviderContextKey, context)\n  provideFn(\n    localeContextKey,\n    computed(() => context.value.locale)\n  )\n  provideFn(\n    namespaceContextKey,\n    computed(() => context.value.namespace)\n  )\n  provideFn(\n    zIndexContextKey,\n    computed(() => context.value.zIndex)\n  )\n\n  provideFn(SIZE_INJECTION_KEY, {\n    size: computed(() => context.value.size || ''),\n  })\n\n  provideFn(\n    emptyValuesContextKey,\n    computed(() => ({\n      emptyValues: context.value.emptyValues,\n      valueOnClear: context.value.valueOnClear,\n    }))\n  )\n\n  if (global || !globalConfig.value) {\n    globalConfig.value = context.value\n  }\n  return context\n}\n\nconst mergeConfig = (\n  a: ConfigProviderContext,\n  b: ConfigProviderContext\n): ConfigProviderContext => {\n  const keys = [...new Set([...keysOf(a), ...keysOf(b)])]\n  const obj: Record<string, any> = {}\n  for (const key of keys) {\n    obj[key] = b[key] !== undefined ? b[key] : a[key]\n  }\n  return obj\n}\n"],"mappings":";;;;;;;;;;;AAuBA,MAAM,eAAe,KAA4B;AAUjD,SAAgB,gBACd,KACA,eAAe,QACf;CACA,MAAM,SAAS,oBAAoB,GAC/B,OAAO,0BAA0B,aAAa,GAC9C;AACJ,KAAI,IACF,QAAO,eAAe,OAAO,QAAQ,QAAQ,aAAa;KAE1D,QAAO;;AAKX,SAAgB,2BACd,OACA,cACA;CACA,MAAM,SAAS,iBAAiB;CAEhC,MAAM,KAAK,aACT,OACA,eAAe,OAAO,OAAO,aAAa,iBAAiB,CAC5D;CAED,MAAM,SAAS,UAAU,eAAe,OAAO,OAAO,OAAO,CAAC;CAC9D,MAAM,SAAS,UACb,eAAe,OAAO,OAAO,UAAU,qBAAqB,CAC7D;CACD,MAAM,OAAO,eAAe,MAAM,aAAa,IAAI,OAAO,OAAO,QAAQ,GAAG;AAC5E,qBAAoB,eAAe,MAAM,OAAO,IAAI,EAAE,CAAC,CAAC;AAExD,QAAO;EACL;EACA;EACA;EACA;EACD;;AAGH,MAAa,uBACX,QACA,KACA,SAAS,UACN;CACH,MAAM,UAAU,CAAC,CAAC,oBAAoB;CACtC,MAAM,YAAY,UAAU,iBAAiB,GAAG;CAEhD,MAAM,YAAY,KAAK,YAAY,UAAU,UAAU;AACvD,KAAI,CAAC,WAAW;AACd,YACE,uBACA,yDACD;AACD;;CAGF,MAAM,UAAU,eAAe;EAC7B,MAAM,MAAM,MAAM,OAAO;AACzB,MAAI,CAAC,WAAW,MAAO,QAAO;AAC9B,SAAO,YAAY,UAAU,OAAO,IAAI;GACxC;AACF,WAAU,0BAA0B,QAAQ;AAC5C,WACE,kBACA,eAAe,QAAQ,MAAM,OAAO,CACrC;AACD,WACE,qBACA,eAAe,QAAQ,MAAM,UAAU,CACxC;AACD,WACE,kBACA,eAAe,QAAQ,MAAM,OAAO,CACrC;AAED,WAAU,oBAAoB,EAC5B,MAAM,eAAe,QAAQ,MAAM,QAAQ,GAAG,EAC/C,CAAC;AAEF,WACE,uBACA,gBAAgB;EACd,aAAa,QAAQ,MAAM;EAC3B,cAAc,QAAQ,MAAM;EAC7B,EAAE,CACJ;AAED,KAAI,UAAU,CAAC,aAAa,MAC1B,cAAa,QAAQ,QAAQ;AAE/B,QAAO;;AAGT,MAAM,eACJ,GACA,MAC0B;CAC1B,MAAM,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;CACvD,MAAM,MAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,EAAE,SAAS,SAAY,EAAE,OAAO,EAAE;AAE/C,QAAO"}