{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-global-config/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, provide, ref, unref } from 'vue'\r\nimport { defaultNamespace, namespaceContextKey, useNamespace } from '@sgui-plus/hooks/use-namespace'\r\nimport { defaultInitialZIndex, zIndexContextKey, useZIndex } from '@sgui-plus/hooks/use-z-index'\r\nimport { useLocale } from '@sgui-plus/hooks/use-locale'\r\nimport { configProviderContextKey } from '@sgui-plus/components/config-provider/src/constants'\r\nimport { keysOf } from '@sgui-plus/utils/objects'\r\nimport { debugWarn } from '@sgui-plus/utils/error'\r\nimport type { MaybeRef } from '@vueuse/core'\r\nimport type { App, Ref } from 'vue'\r\nimport type { ConfigProviderContext } from '@sgui-plus/components/config-provider/src/constants'\r\n\r\n// this is meant to fix global methods like `ElMessage(opts)`, this way we can inject current locale\r\n// into the component as default injection value.\r\n// refer to: https://github.com/element-plus/element-plus/issues/2610#issuecomment-887965266\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\n// for components like `SgMessage` `SgNotification` .\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 ns = useNamespace(\r\n    block,\r\n    computed(() => config.value?.namespace || defaultNamespace)\r\n  )\r\n\r\n  const locale = useLocale(computed(() => config.value?.locale))\r\n  const zIndex = useZIndex(\r\n    computed(() => config.value?.zIndex || defaultInitialZIndex)\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    ns,\r\n    locale,\r\n    zIndex,\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\r\n  // @ts-ignore\r\n  provideFn(configProviderContextKey, context)\r\n  // @ts-ignore\r\n  provideFn(\r\n    namespaceContextKey,\r\n    computed(() => context.value.namespace)\r\n  )\r\n  // @ts-ignore\r\n  provideFn(\r\n    zIndexContextKey,\r\n    computed(() => context.value.zIndex)\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] ?? a[key]\r\n  }\r\n  return obj\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;AACpB,SAAS,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,KAAK,CAAC,EAAE;AAC5D,EAAE,MAAM,MAAM,GAAG,kBAAkB,EAAE,GAAG,MAAM,CAAC,wBAAwB,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC;AACtG,EAAE,IAAI,GAAG,EAAE;AACX,IAAI,OAAO,QAAQ,CAAC,MAAM;AAC1B,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC;AACjB,MAAM,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC;AAC/F,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,CAAC;AACM,SAAS,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE;AAChE,EAAE,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;AACnC,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM;AAChD,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,KAAK,gBAAgB,CAAC;AACrF,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM;AAC1C,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AAC5D,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM;AAC1C,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,oBAAoB,CAAC;AACtF,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM;AAC9B,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACzF,GAAG,CAAC,CAAC;AACL,EAAE,mBAAmB,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,EAAE,OAAO;AACT,IAAI,EAAE;AACN,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,IAAI;AACR,GAAG,CAAC;AACJ,CAAC;AACW,MAAC,mBAAmB,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,KAAK;AACpE,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,kBAAkB,EAAE,CAAC;AACzC,EAAE,MAAM,SAAS,GAAG,OAAO,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC,CAAC;AACzD,EAAE,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;AACxG,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,IAAI,SAAS,CAAC,qBAAqB,EAAE,wDAAwD,CAAC,CAAC;AAC/F,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM;AACjC,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;AACvD,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7C,GAAG,CAAC,CAAC;AACL,EAAE,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AAC/C,EAAE,SAAS,CAAC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,EAAE,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,EAAE,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACrC,IAAI,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,GAAG;AACH,EAAE,OAAO,OAAO,CAAC;AACjB,EAAE;AACF,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AAC9B,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,MAAM,IAAI,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB,EAAE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnD,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;;;;"}