{"version":3,"file":"index.jsx","sourceRoot":"lib/","sources":["widgets/IconWidget/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { isStr, isFn, isObj, isPlainObj } from '@designable/shared'\nimport { observer } from '@formily/reactive-vue'\nimport { Tooltip, TooltipProps } from '@gaoding/gd-antd-plus'\nimport { usePrefix, useRegistry, useTheme } from '../../hooks'\nimport './styles.less'\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  InjectionKey,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  Ref,\n  ref,\n  unref,\n  VNode,\n  cloneVNode,\n  PropType\n} from 'vue-demi'\nimport { composeExport } from '@jeamn/formily-components/src/__builtins__'\nimport { cloneElement, isVNode, useStyle } from '../../shared/'\nimport { useContext } from '@jeamn/formily-prototypes'\nimport cls from 'classnames'\n\nconst IconSymbol: InjectionKey<Ref<IconProviderProps>> = Symbol()\n\nconst isNumSize = (val: any) => /^[\\d.]+$/.test(val)\nexport interface IconProviderProps {\n  tooltip?: boolean\n}\n\nexport interface IShadowSVGProps {\n  content?: string\n  width?: number | string\n  height?: number | string\n}\nexport interface IIconWidgetProps extends HTMLElement {\n  tooltip?: TooltipProps\n  infer: VNode | { shadow: string }\n  size?: number | string\n}\n// IIconWidgetProps\nconst __IconWidgetInner = defineComponent({\n  name: 'DnIconWidget',\n  props: {\n    tooltip: { type: Object as PropType<TooltipProps & { content: string | VNode }> },\n    infer: { type: [String, Function, Object] as PropType<IIconWidgetProps['infer']> },\n    size: { type: [Number, String] },\n  },\n  inheritAttrs: false,\n  emits: ['click'],\n  setup(props, { attrs, emit }) {\n    const themeRef = useTheme()\n    const IconContextRef: Ref<IconProviderProps> = useContext(IconSymbol)\n    const registry = useRegistry()\n    const prefixRef = usePrefix('icon')\n\n    return () => {\n      const size = isNumSize(props.size)\n        ? `${props.size}px`\n        : props.size || '1em'\n\n      const style = useStyle()\n      const height = style?.height || size\n      const width = style?.width || size\n\n      const takeIcon: any = (infer: any) => {\n        if (isStr(infer)) {\n          const finded = registry.getDesignerIcon(infer)\n          if (finded) {\n            return takeIcon(finded)\n          }\n          return <img src={infer} height={height} width={width} />\n        } else if (isFn(infer)) {\n          return (\n            <infer\n              {...{ height: height, width: width, fill: 'currentColor' }}\n              fill=\"currentColor\"\n            ></infer>\n          )\n        } else if (isVNode(infer)) {\n          if (infer.type === 'svg') {\n            const Component = cloneElement(infer, {\n              height,\n              width,\n              fill: 'currentColor',\n              viewBox: infer.props?.viewBox || '0 0 1024 1024',\n              focusable: 'false',\n              'aria-hidden': 'true',\n            })\n            return Component\n          } else if (infer.type === 'path' || infer.type === 'g') {\n            return (\n              <svg\n                viewBox=\"0 0 1024 1024\"\n                height={height}\n                width={width}\n                fill=\"currentColor\"\n                focusable=\"false\"\n                aria-hidden=\"true\"\n              >\n                {infer}\n              </svg>\n            )\n          }\n          return infer\n        } else if (isPlainObj(infer)) {\n          const theme = unref(themeRef)\n          if (infer[theme]) {\n            return takeIcon(infer[theme])\n          } else if (infer['shadow']) {\n            return <IconWidget.ShadowSVG width={width} height={height} content={infer['shadow']} />\n          }\n        }\n        return null\n      }\n\n      const renderTooltips = (children: any) => {\n        const IconContext = unref(IconContextRef)\n        if (!isStr(props.infer) && IconContext?.tooltip) return children\n        const tooltip =\n          props.tooltip || registry.getDesignerMessage(`icons.${props.infer}`)\n        if (tooltip) {\n          const props = isObj(tooltip) ? tooltip : { content: tooltip }\n          const { content, ..._props } = props as any\n          return (\n            <Tooltip showAfter={200} {..._props} v-slots={{ content: () => content }}>\n              {children}\n            </Tooltip>\n          )\n        }\n        return children\n      }\n\n      return renderTooltips(\n        <span\n          {...attrs}\n          class={cls(prefixRef.value)}\n          style={{\n            cursor: attrs.onClick ? 'pointer' : style?.cursor,\n          }}\n          onClick={() => emit('click')}\n        >\n          {takeIcon(props.infer)}\n        </span>\n      )\n    }\n  },\n})\n\nconst IconWidgetInner = observer(__IconWidgetInner)\n\nconst ShadowSVG = defineComponent({\n  props: {\n    width: [Number, String],\n    height: [Number, String],\n    content: String,\n  },\n  setup(props, { }) {\n    const refInstance = ref<HTMLDivElement>()\n    const width = isNumSize(props.width) ? `${props.width}px` : props.width\n    const height = isNumSize(props.height) ? `${props.height}px` : props.height\n\n    onMounted(() => {\n      if (refInstance.value) {\n        const root = refInstance.value.attachShadow({\n          mode: 'open',\n        })\n        root.innerHTML = `<svg viewBox=\"0 0 1024 1024\" style=\"width:${width};height:${height}\">${props.content}</svg>`\n      }\n    })\n\n    return () => <div ref={refInstance}></div>\n  },\n})\n\nconst Provider = defineComponent({\n  name: 'IconWidget.Provider',\n  inheritAttrs: false,\n  props: { tooltip: Boolean },\n  setup(props, { slots }) {\n    provide(\n      IconSymbol,\n      computed(() => props)\n    )\n    return () => slots.default?.()\n  },\n})\n\nexport const IconWidget = composeExport(\n  IconWidgetInner,\n  {\n    ShadowSVG,\n    Provider,\n  }\n)"]}