{"version":3,"file":"use-global-config.mjs","sources":["../../../../../../../../packages/components/config-provider/src/hooks/use-global-config.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, provide, ref, unref } from 'vue'\r\nimport {\r\n  SIZE_INJECTION_KEY,\r\n  localeContextKey,\r\n  useLocale,\r\n} from '@m-eleplus-crud/hooks'\r\nimport { debugWarn, keysOf } from '@m-eleplus-crud/utils'\r\nimport { configProviderContextKey } from '../constants'\r\n\r\nimport type { MaybeRef } from '@vueuse/core'\r\nimport type { App, Ref } from 'vue'\r\nimport type { ConfigProviderContext } from '../constants'\r\n\r\nconst globalConfig = ref<ConfigProviderContext>()\r\n\r\nexport function useGlobalConfig<\r\n  K extends keyof ConfigProviderContext,\r\n  D extends ConfigProviderContext[K]\r\n>(\r\n  key: K,\r\n  defaultValue?: D\r\n): Ref<Exclude<ConfigProviderContext[K], undefined> | D>\r\nexport function useGlobalConfig(): Ref<ConfigProviderContext>\r\nexport function useGlobalConfig(\r\n  key?: keyof ConfigProviderContext,\r\n  defaultValue = undefined\r\n) {\r\n  const config = getCurrentInstance()\r\n    ? inject(configProviderContextKey, globalConfig)\r\n    : globalConfig\r\n  if (key) {\r\n    return computed(() => config.value?.[key] ?? defaultValue)\r\n  } else {\r\n    return config\r\n  }\r\n}\r\n\r\nexport function useGlobalComponentSettings(\r\n  block: string,\r\n  sizeFallback?: MaybeRef<ConfigProviderContext['size']>\r\n) {\r\n  const config = useGlobalConfig()\r\n\r\n  const locale = useLocale(computed(() => config.value?.locale))\r\n\r\n  const size = computed(() => unref(sizeFallback) || config.value?.size || '')\r\n  provideGlobalConfig(computed(() => unref(config) || {}))\r\n\r\n  return {\r\n    locale,\r\n    size,\r\n  }\r\n}\r\n\r\nexport const provideGlobalConfig = (\r\n  config: MaybeRef<ConfigProviderContext>,\r\n  app?: App,\r\n  global = false\r\n) => {\r\n  const inSetup = !!getCurrentInstance()\r\n  const oldConfig = inSetup ? useGlobalConfig() : undefined\r\n\r\n  const provideFn = app?.provide ?? (inSetup ? provide : undefined)\r\n  if (!provideFn) {\r\n    debugWarn(\r\n      'provideGlobalConfig',\r\n      'provideGlobalConfig() can only be used inside setup().'\r\n    )\r\n    return\r\n  }\r\n\r\n  const context = computed(() => {\r\n    const cfg = unref(config)\r\n    if (!oldConfig?.value) return cfg\r\n    return mergeConfig(oldConfig.value, cfg)\r\n  })\r\n  provideFn(configProviderContextKey, context)\r\n  provideFn(\r\n    localeContextKey,\r\n    computed(() => context.value.locale)\r\n  )\r\n  provideFn(SIZE_INJECTION_KEY, {\r\n    size: computed(() => context.value.size || ''),\r\n  })\r\n\r\n  if (global || !globalConfig.value) {\r\n    globalConfig.value = context.value\r\n  }\r\n  return context\r\n}\r\n\r\nconst mergeConfig = (\r\n  a: ConfigProviderContext,\r\n  b: ConfigProviderContext\r\n): ConfigProviderContext => {\r\n  const keys = [...new Set([...keysOf(a), ...keysOf(b)])]\r\n  const obj: Record<string, any> = {}\r\n  for (const key of keys) {\r\n    obj[key] = b[key] !== undefined ? b[key] : a[key]\r\n  }\r\n  return obj\r\n}\r\n"],"names":[],"mappings":"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"}