{"version":3,"file":"dep-46ec3e86.mjs","sources":["../../../common/js/utils/general.ts","../../../components/hooks/tnode.ts"],"sourcesContent":["import { isFunction, isObject } from 'lodash-es';\n\nconst { hasOwnProperty } = Object.prototype;\n\nexport const hasOwn = <T extends object>(val: T, key: string | symbol | number): key is keyof T => hasOwnProperty.call(val, key);\nexport const getPropertyValFromObj = <T extends object>(\n  val: T,\n  key: string | symbol | number,\n): T[keyof T] | undefined => (hasOwn(val, key) ? val[key] : undefined);\n\nconst objectToString: typeof Object.prototype.toString = Object.prototype.toString;\nconst toTypeString = (value: unknown): string => objectToString.call(value);\nexport const isPlainObject = <T extends object>(val: unknown): val is T => toTypeString(val) === '[object Object]';\nexport const isPromise = <T = any>(val: unknown): val is Promise<T> => (isObject(val) || isFunction(val))\n  && isFunction((val as any).then)\n  && isFunction((val as any).catch);\n","import { h, getCurrentInstance, ComponentInternalInstance, VNode } from 'vue';\nimport { isFunction } from 'lodash-es';\nimport { camelCase } from 'lodash-es';\nimport { kebabCase } from 'lodash-es';\nimport { getDefaultNode, getParams, OptionsType, JSXRenderContext, getSlotFirst } from '../utils/render-tnode';\nimport { hasOwn } from '@tdesign/common-js/utils/general';\n\n// 兼容处理插槽名称，同时支持驼峰命名和中划线命名，示例：value-display 和 valueDisplay\nfunction handleSlots(instance: ComponentInternalInstance, name: string, params: Record<string, any>) {\n  // 2023-08 new Function 触发部分使用场景安全策略问题（Chrome插件/eletron等）\n  // // 每个 slots 需要单独的 h 函数 否则直接assign会重复把不同 slots 的 params 都注入\n  // const finalParams = new Function('return ' + h.toString())();\n  // if (params) {\n  //   Object.assign(finalParams, params);\n  // }\n\n  // 检查是否存在 驼峰命名 的插槽（过滤注释节点）\n  let node = instance.slots[camelCase(name)]?.(params);\n  if (node && node.filter((t) => t.type.toString() !== 'Symbol(v-cmt)').length) return node;\n  // 检查是否存在 中划线命名 的插槽\n  node = instance.slots[kebabCase(name)]?.(params);\n  if (node && node.filter((t) => t.type.toString() !== 'Symbol(v-cmt)').length) return node;\n  return null;\n}\n\n/**\n * 是否为空节点，需要过滤掉注释节点。注释节点也会被认为是空节点\n */\nfunction isEmptyNode(node: any) {\n  if ([undefined, null, ''].includes(node)) return true;\n  const innerNodes = node instanceof Array ? node : [node];\n  const r = innerNodes.filter((node) => node?.type?.toString() !== 'Symbol(Comment)');\n  return !r.length;\n}\n\n// TODO 可以把这里移动到 utils 中\n/**\n * 检查用户是否有主动传 prop\n * @param instance 组件实例\n * @param propName prop 名称\n * @returns boolean\n */\nfunction isPropExplicitlySet(instance: ComponentInternalInstance, propName: string) {\n  const vProps = instance?.vnode.props || {};\n  return hasOwn(vProps, camelCase(propName)) || hasOwn(vProps, kebabCase(propName));\n}\n\n/**\n/**\n * 通过 JSX 的方式渲染 TNode，props 和 插槽同时处理，也能处理默认值为 true 则渲染默认节点的情况\n * 优先级：用户注入的 props 值 > slot > 默认 props 值\n * 如果 props 值为 true ，则使用插槽渲染。如果也没有插槽的情况下，则使用 defaultNode 渲染\n * @example const renderTNodeJSX = useTNodeJSX()\n * @return () => {}\n * @param name 插槽和属性名称\n * @param options 值可能为默认渲染节点，也可能是默认渲染节点和参数的集合\n * @example renderTNodeJSX('closeBtn')  优先级 props function 大于 插槽\n * @example renderTNodeJSX('closeBtn', <close-icon />)。 当属性值为 true 时则渲染 <close-icon />\n * @example renderTNodeJSX('closeBtn', { defaultNode: <close-icon />, params })。 params 为渲染节点时所需的参数\n */\nexport const useTNodeJSX = () => {\n  const instance = getCurrentInstance();\n  return function (name: string, options?: OptionsType) {\n    // 渲染节点时所需的参数\n    const renderParams = getParams(options);\n    // 默认渲染节点\n    // TODO 这里需要讨论，这里的默认节点规则是什么呢？ pp test:unit image-viewer pp test:unit Collapse\n    const defaultNode = getDefaultNode(options);\n    // 是否显示设置 slot 优先\n    const isSlotFirst = getSlotFirst(options);\n    // 插槽\n    const renderSlot = instance.slots[camelCase(name)] || instance.slots[kebabCase(name)];\n\n    if (isSlotFirst && renderSlot) {\n      // 1. 如果显示设置了 slot 优先，并且存在 slot，那么优先使用 slot\n      return handleSlots(instance, name, renderParams);\n    } else {\n      // 2. 否者按照 用户主动传入的 props 值 > slot > 默认 props 值\n      // 2.1 处理主动传入的 prop\n      if (isPropExplicitlySet(instance, name)) {\n        // 2.1.1 如果有传，那么优先使用 prop 的值\n        const propsNode = instance.props[camelCase(name)] || instance.props[kebabCase(name)];\n        // 2.1.2 如果 prop 的值为 false 或者 null，那么直接不渲染\n        if (propsNode === false || propsNode === null) return;\n        // 2.1.3 如果 prop 的值为 true，那么使用 slot 渲染\n        if (propsNode === true) {\n          return handleSlots(instance, name, renderParams) || defaultNode;\n        }\n        // 2.1.4 如果 prop 的值为函数，那么执行函数\n        if (isFunction(propsNode)) return propsNode(h, renderParams);\n        // 2.1.5 如果 prop 的值为 undefined、''，那么使用插槽渲染\n        const isPropsEmpty = [undefined, ''].includes(propsNode as any);\n        if (isPropsEmpty && renderSlot) {\n          return handleSlots(instance, name, renderParams);\n        }\n        // 2.1.6 如果 prop 的值为其他值，那么直接返回\n        return propsNode;\n      }\n      // 2.2 如果未主动传入 prop，那么渲染 slot，当然前提是存在 slot\n      if (renderSlot) {\n        return handleSlots(instance, name, renderParams);\n      }\n      // 2.3 如果未主动传入 prop，也没有 slot，那么就走 prop\n      const propsNode = instance.props[camelCase(name)] || instance.props[kebabCase(name)];\n      if (propsNode === false || propsNode === null) return;\n      if (propsNode === true) {\n        return defaultNode;\n      }\n      if (isFunction(propsNode)) return propsNode(h, renderParams);\n      return propsNode;\n    }\n  };\n};\n\n/**\n * 在setup中，通过JSX的方式 TNode，props 和 插槽同时处理。与 renderTNodeJSX 区别在于属性值为 undefined 时会渲染默认节点\n * @example const renderTNodeJSXDefault = useTNodeDefault()\n * @return () => {}\n * @param name 插槽和属性名称\n * @example renderTNodeJSXDefault('closeBtn')\n * @example renderTNodeJSXDefault('closeBtn', <close-icon />) closeBtn 为空时，则兜底渲染 <close-icon />\n * @example renderTNodeJSXDefault('closeBtn', { defaultNode: <close-icon />, params }) 。params 为渲染节点时所需的参数\n */\nexport const useTNodeDefault = () => {\n  const renderTNodeJSX = useTNodeJSX();\n  return function (name: string, options?: VNode | JSXRenderContext) {\n    const defaultNode = getDefaultNode(options);\n    return renderTNodeJSX(name, options) || defaultNode;\n  };\n};\n\n/**\n * 在setup中，用于处理相同名称的 TNode 渲染\n * @example const renderContent = useContent()\n * @return () => {}\n * @param name1 第一个名称，优先级高于 name2\n * @param name2 第二个名称\n * @param defaultNode 默认渲染内容：当 name1 和 name2 都为空时会启动默认内容渲染\n * @example renderContent('default', 'content')\n * @example renderContent('default', 'content', '我是默认内容')\n * @example renderContent('default', 'content', { defaultNode: '我是默认内容', params })\n */\nexport const useContent = () => {\n  const renderTNodeJSX = useTNodeJSX();\n  return function (name1: string, name2: string, options?: VNode | JSXRenderContext) {\n    // assemble params && defaultNode\n    const params = getParams(options);\n    const defaultNode = getDefaultNode(options);\n\n    const toParams = params ? { params } : undefined;\n\n    const node1 = renderTNodeJSX(name1, toParams);\n    const node2 = renderTNodeJSX(name2, toParams);\n\n    const res = isEmptyNode(node1) ? node2 : node1;\n    return isEmptyNode(res) ? defaultNode : res;\n  };\n};\n"],"names":["hasOwnProperty","Object","prototype","hasOwn","val","key","call","getPropertyValFromObj","objectToString","toString","toTypeString","value","isPlainObject","isPromise","isObject","isFunction","then","handleSlots","instance","name","params","_instance$slots$camel","_instance$slots","_instance$slots$kebab","_instance$slots2","node","slots","camelCase","filter","t","type","length","kebabCase","isEmptyNode","includes","innerNodes","Array","r","_node2$type","isPropExplicitlySet","propName","vProps","vnode","props","useTNodeJSX","getCurrentInstance","options","renderParams","getParams","defaultNode","getDefaultNode","isSlotFirst","getSlotFirst","renderSlot","propsNode","h","isPropsEmpty","useTNodeDefault","renderTNodeJSX","useContent","name1","name2","toParams","node1","node2","res"],"mappings":"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"}