{"version":3,"file":"useConfig.mjs","sources":["../../../../common/js/global-config/t.ts","../../../../components/config-provider/hooks/useConfig.ts"],"sourcesContent":["import { isString } from 'lodash-es';\n\n/**\n * 复数规则判断函数\n * @param count 数量\n * @returns 返回复数形式的索引 (0: zero/none, 1: one, 2: other/many)\n */\nfunction getPluralIndex(count: number): number {\n  if (count === 0) return 0; // no items\n  if (count === 1) return 1; // one item\n  return 2; // multiple items\n}\n\n/**\n * @see https://github.com/Tencent/tdesign-vue-next/blob/develop/packages/components/config-provider/hooks/useConfig.ts#L48\n * 自定义 t function 可能依赖特定库函数，例如 tdesign-vue-next 中使用了 vue 的 h 函数\n * 因此交由各个类库自行实现\n */\n\n/**\n * 国际化函数，支持复数处理和变量替换\n *\n * 示例用法：\n * 1. 基本变量替换：\n *    t('Hello {name}', { name: 'World' }) // => 'Hello World'\n *\n * 2. 复数处理（传入数字）：\n *    t('no apples | one apple | {count} apples', 0) // => 'no apples'\n *    t('no apples | one apple | {count} apples', 1) // => 'one apple'\n *    t('no apples | one apple | {count} apples', 5) // => '5 apples'\n *\n * 3. 复合使用：\n *    t('no items found | found {count} item | found {count} items', 3, { count: 3 }) // => 'found 3 items'\n */\n\n// 类型重载定义\nexport function t(pattern: string): string;\nexport function t(pattern: string, data: Record<string, any>): string;\nexport function t(pattern: string, count: number): string;\nexport function t(pattern: string, count: number, data: Record<string, any>): string;\nexport function t<T>(pattern: T): string;\n\n/**\n * @param pattern 文本模式，可以是字符串、函数或其他类型\n * @param args 参数列表，支持 (count: number) 或 (count: number, data: object) 或 (data: object)\n * @returns 处理后的文本\n */\nexport function t<T>(pattern: T, ...args: any[]): string {\n  if (isString(pattern)) {\n    let text = pattern as string;\n    let count: number | undefined;\n    let data: Record<string, any> = {};\n\n    // 解析参数\n    if (args.length > 0) {\n      const [firstArg, secondArg] = args;\n\n      if (typeof firstArg === 'number') {\n        // 第一个参数是数字，表示 count\n        count = firstArg;\n        if (secondArg && typeof secondArg === 'object') {\n          // 第二个参数是对象，表示额外的数据\n          data = secondArg;\n        } else {\n          data.count = count; // 若没有提供第二个参数，则将 count 添加到数据中\n        }\n      } else if (typeof firstArg === 'object' && firstArg !== null) {\n        // 第一个参数是对象，表示数据\n        data = firstArg;\n      }\n    }\n\n    // 处理复数形式：支持 \"no items | one item | {count} items\" 格式\n    if (text.includes('|')) {\n      const pluralParts = text.split('|').map((part) => part.trim());\n\n      if (typeof count === 'number') {\n        // 使用 count 进行复数处理\n        const pluralIndex = getPluralIndex(count);\n\n        // 根据复数索引选择对应的文本\n        if (pluralIndex < pluralParts.length) {\n          text = pluralParts[pluralIndex];\n        } else {\n          // 如果索引超出范围，使用最后一个选项\n          text = pluralParts[pluralParts.length - 1];\n        }\n      } else {\n        // 如果没有 count，默认使用第一个选项\n        const [firstPart] = pluralParts;\n        text = firstPart;\n      }\n    }\n\n    // 处理变量替换：{key} 格式\n    if (data && Object.keys(data).length > 0) {\n      const regular = /\\{\\s*([\\w-]+)\\s*\\}/g;\n      text = text.replace(regular, (match, key) => {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n          return String(data[key]);\n        }\n        return match; // 如果找不到对应的键，保留原始占位符\n      });\n    }\n\n    return text as any;\n  }\n\n  // 如果不是字符串或函数，返回空字符串\n  return '';\n}\n","// TODO 应当提取到公共 hooks 中\nimport { computed, h, inject, getCurrentInstance, ref, provide } from 'vue';\nimport { cloneDeep, isFunction } from 'lodash-es';\n\nimport { defaultGlobalConfig, configProviderInjectKey, mergeWith } from '../utils/context';\nimport { GlobalConfigProvider, TdConfigProviderProps } from '../type';\n\nimport { t as commonT } from '@tdesign/common-js/global-config/t';\n\n// 这是为了解决在非component里调用useConfig hook时发出的警告\n// https://github.com/Tencent/tdesign-vue-next/issues/2025\nconst globalConfigCopy = ref<GlobalConfigProvider>();\n\nexport * from '../type';\n\n/**\n * component globalConfig\n * @param componentName\n * @returns {t, globalConfig}\n * useConfig('pagination')\n */\nexport function useConfig<T extends keyof GlobalConfigProvider>(\n  componentName: T = undefined,\n  componentLocale?: GlobalConfigProvider[T],\n) {\n  let injectGlobalConfig = null;\n  if (getCurrentInstance()) {\n    injectGlobalConfig = inject(configProviderInjectKey, null);\n    if (!injectGlobalConfig) {\n      // This handles cases where the component is created outside the ConfigProvider\n      // (e.g., LoadingPlugin, MessagePlugin, DialogPlugin, etc.)\n      injectGlobalConfig = globalConfigCopy;\n    }\n  } else {\n    injectGlobalConfig = globalConfigCopy;\n  }\n  const mergedGlobalConfig = computed(() => injectGlobalConfig?.value || defaultGlobalConfig);\n  const globalConfig = computed(() => Object.assign({}, mergedGlobalConfig.value[componentName], componentLocale));\n\n  const classPrefix = computed(() => {\n    return mergedGlobalConfig.value.classPrefix;\n  });\n\n  // 处理正则表达式\n  const t = function <T>(pattern: T, ...args: any[]) {\n    if (isFunction(pattern)) {\n      // 重要：组件的渲染必须存在参数 h，不能移除\n      if (!args.length) return pattern(h);\n      return pattern(...args);\n    }\n    // 使用公共翻译函数，以支持复数处理\n    // @ts-expect-error be passed to rest parameter\n    return commonT(pattern, ...args);\n  };\n\n  return {\n    t,\n    global: globalConfig,\n    globalConfig,\n    classPrefix,\n  };\n}\n\n/**\n * provide globalConfig\n * @param {TdConfigProviderProps} props\n * @returns {ComputedRef<GlobalConfigProvider>}\n */\nexport const provideConfig = (props: TdConfigProviderProps) => {\n  const defaultData = cloneDeep(defaultGlobalConfig);\n  const mergedGlobalConfig = computed(() =>\n    Object.assign({}, mergeWith(defaultData as unknown as GlobalConfigProvider, props.globalConfig)),\n  );\n\n  provide(configProviderInjectKey, mergedGlobalConfig);\n\n  if (!globalConfigCopy.value) {\n    globalConfigCopy.value = mergedGlobalConfig.value;\n  }\n\n  return mergedGlobalConfig;\n};\n"],"names":["getPluralIndex","count","t","pattern","isString","text","data","_len","arguments","length","args","Array","_key","firstArg","secondArg","_typeof","includes","pluralParts","split","map","part","trim","pluralIndex","_pluralParts","_slicedToArray","firstPart","Object","keys","regular","replace","match","key","prototype","hasOwnProperty","call","String","globalConfigCopy","ref","useConfig","componentName","undefined","componentLocale","injectGlobalConfig","getCurrentInstance","inject","configProviderInjectKey","mergedGlobalConfig","computed","_injectGlobalConfig","value","defaultGlobalConfig","globalConfig","assign","classPrefix","isFunction","h","apply","commonT","concat","global","provideConfig","props","defaultData","cloneDeep","mergeWith","provide"],"mappings":"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"}