{"version":3,"file":"index.jsx","sourceRoot":"lib/","sources":["widgets/ResourceWidget/index.tsx"],"names":[],"mappings":";;;;;;AAAA,yBAAsB;AACtB,yCAKyB;AACzB,6CAAyC;AACzC,sDAAgD;AAChD,qCAAuC;AACvC,4CAA0C;AAC1C,4CAA0C;AAC1C,0DAA4B;AAC5B,qCAA+D;AAG/D,sDAAoD;AAUvC,QAAA,cAAc,GAAG,IAAA,uBAAQ,EACpC,IAAA,0BAAe,EAAC;IACd,KAAK,EAAE;QACL,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAC/C,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE,EAAE;QAC3C,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,MAAM;KACd;IACD,KAAK,EAAL,UAAM,KAAK,EAAE,EAAS;YAAP,KAAK,WAAA;QAClB,IAAM,SAAS,GAAG,IAAA,iBAAS,EAAC,UAAU,CAAC,CAAA;QACvC,IAAM,MAAM,GAAG,IAAA,cAAG,EAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAEvC,IAAM,UAAU,GAAG,UAAC,MAAiB;YACnC,IAAM,MAAM,GAAG,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAA;YACvB,IAAA,IAAI,GAA+B,MAAM,KAArC,EAAE,IAAI,GAAyB,MAAM,KAA/B,EAAE,KAAK,GAAkB,MAAM,MAAxB,EAAE,KAAK,GAAW,MAAM,MAAjB,EAAE,IAAI,GAAK,MAAM,KAAX,CAAW;YACjD,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,CACxB,KAAK,CAAC,CAAC,EAAE,eAAe,EAAE,eAAQ,IAAI,IAAI,CAAC,CAAE,EAAE,CAAC,CAChD,IAAI,EAAE,GAAG,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,EAAE,CAAC,CAE3D;YAAA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAG,CAC5D;YAAA,CAAC,IAAI,IAAI,IAAA,kBAAO,EAAC,IAAI,CAAC,CAAC,CAAC;oBACtB,EAAE,CAAC,IAAI,CAAC,GAAG;oBACX,CAAC,CAAC,CACA,CAAC,uBAAU,CACT,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,CAC7B,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAC1C,CACH,CACH;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,CACjC;cAAA,CAAC,KAAK,IAAI,CAAC,iCAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,iCAAe,CAAC,CAC3D;YAAA,EAAE,IAAI,CACR;UAAA,EAAE,GAAG,CAAC,CACP,CAAA;QACH,CAAC,CAAA;QAED,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAc,UAAC,GAAG,EAAE,MAAM;YAC5D,IAAI,IAAA,qBAAc,EAAC,MAAM,CAAC,EAAE;gBAC1B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;aAC1B;iBAAM,IAAI,IAAA,qBAAc,EAAC,MAAM,CAAC,EAAE;gBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;aACnC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,IAAM,WAAW,GACf,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,MAAM;;YAC5B,OAAO,MAAM,GAAG,CAAC,MAAA,MAAM,CAAC,IAAI,mCAAI,CAAC,CAAC,CAAA;QACpC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;QAEX,OAAO;YACL,IAAM,MAAM,GAAG,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAA;YAC/B,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,IAAA,oBAAG,EAAC,MAAM,EAAE;oBACjB,MAAM,EAAE,MAAM,CAAC,KAAK;iBACrB,CAAC,CAAC,CAEH;YAAA,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAC1B,OAAO,CAAC,CAAC,UAAC,CAAC;oBACT,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAA;gBAC9B,CAAC,CAAC,CAEF;cAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,gBAAgB,CAAC,CACpC;gBAAA,CAAC,uBAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAC1C;cAAA,EAAE,GAAG,CACL;cAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,iBAAiB,CAAC,CACrC;gBAAA,CAAC,uBAAU,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAU,CACvC;cAAA,EAAE,GAAG,CACP;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,kBAAkB,CAAC,CACtC;cAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,CAC9B;gBAAA,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,aAAI,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAC9D;gBAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAC/B,KAAK,CAAC,CAAC,EAAE,eAAe,EAAE,eAAQ,CAAC,GAAG,WAAW,CAAE,EAAE,CAAC,CACvD,EAAE,GAAG,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;cAAA,EAAE,GAAG,CACP;YAAA,EAAE,GAAG,CACP;UAAA,EAAE,GAAG,CAAC,CACP,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CACH,CAAA","sourcesContent":["import './styles.less'\nimport {\n  isResourceHost,\n  isResourceList,\n  IResourceLike,\n  IResource,\n} from '@designable/core'\nimport { isFn } from '@designable/shared'\nimport { observer } from '@formily/reactive-vue'\nimport { usePrefix } from '../../hooks'\nimport { IconWidget } from '../IconWidget'\nimport { TextWidget } from '../TextWidget'\nimport cls from 'classnames'\nimport { defineComponent, isVNode, ref, unref } from 'vue-demi'\nimport { VNode } from 'vue/types/umd'\nimport { VueComponent } from '@formily/vue'\nimport { NodeTitleWidget } from '../NodeTitleWidget'\n\nexport interface IResourceWidgetProps {\n  title: VNode\n  sources?: IResourceLike[]\n  className?: string\n  defaultExpand?: boolean\n  children?: VNode[]\n}\n\nexport const ResourceWidget = observer(\n  defineComponent({\n    props: {\n      defaultExpand: { type: Boolean, default: true },\n      sources: { type: Array, default: () => [] },\n      className: String,\n      title: String,\n    },\n    setup(props, { slots }) {\n      const prefixRef = usePrefix('resource')\n      const expand = ref(props.defaultExpand)\n\n      const renderNode = (source: IResource) => {\n        const prefix = unref(prefixRef)\n        const { node, icon, title, thumb, span } = source\n        return (\n          <div\n            class={prefix + '-item'}\n            style={{ gridColumnStart: `span ${span || 1}` }}\n            {...{ key: node?.id, 'data-designer-source-id': node?.id }}\n          >\n            {thumb && <img class={prefix + '-item-thumb'} src={thumb} />}\n            {icon && isVNode(icon) ?\n              <>{icon}</>\n              : (\n                <IconWidget\n                  class={prefix + '-item-icon'}\n                  infer={icon}\n                  style={{ width: '150px', height: '40px' }}\n                />\n              )}\n            <span class={prefix + '-item-text'}>\n              {title || <NodeTitleWidget node={node}></NodeTitleWidget>}\n            </span>\n          </div>\n        )\n      }\n\n      const sources = props.sources.reduce<IResource[]>((buf, source) => {\n        if (isResourceList(source)) {\n          return buf.concat(source)\n        } else if (isResourceHost(source)) {\n          return buf.concat(source.Resource)\n        }\n        return buf\n      }, [])\n\n      const remainItems =\n        sources.reduce((length, source) => {\n          return length + (source.span ?? 1)\n        }, 0) % 3\n\n      return () => {\n        const prefix = unref(prefixRef)\n        return (\n          <div\n            class={cls(prefix, {\n              expand: expand.value,\n            })}\n          >\n            <div\n              class={prefix + '-header'}\n              onClick={(e) => {\n                e.stopPropagation()\n                e.preventDefault()\n                expand.value = !expand.value\n              }}\n            >\n              <div class={prefix + '-header-expand'}>\n                <IconWidget infer=\"Expand\" size={'10px'} />\n              </div>\n              <div class={prefix + '-header-content'}>\n                <TextWidget>{props.title}</TextWidget>\n              </div>\n            </div>\n            <div class={prefix + '-content-wrapper'}>\n              <div class={prefix + '-content'}>\n                {sources.map(isFn(slots.default) ? slots.default : renderNode)}\n                {remainItems ? (\n                  <div\n                    class={prefix + '-item-remain'}\n                    style={{ gridColumnStart: `span ${3 - remainItems}` }}\n                  ></div>\n                ) : null}\n              </div>\n            </div>\n          </div>\n        )\n      }\n    },\n  })\n)\n"]}