plugin-build-ui-template 1.0.3 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.js +1 -1
- package/dist/client-v2/380.103d33259df140f1.js +10 -0
- package/dist/client-v2/index.js +1 -1
- package/dist/externalVersion.js +7 -7
- package/dist/server/actions/build.js +31 -9
- package/package.json +1 -1
- package/src/server/actions/build.ts +495 -454
- package/dist/client-v2/380.b4d1d20b1e27ac78.js +0 -10
package/dist/client/index.js
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-build-ui-template",["react","antd","@nocobase/client","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-build-ui-template"]=t(require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):e["plugin-build-ui-template"]=t(e.react,e.antd,e["@nocobase/client"],e["@ant-design/icons"])}(self,function(e,t,r,n){return function(){"use strict";var a={375:function(e){e.exports=n},342:function(e){e.exports=r},59:function(e){e.exports=t},155:function(t){t.exports=e}},o={};function l(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return a[e](r,r.exports,l),r.exports}l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,{a:t}),t},l.d=function(e,t){for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.g.importScripts&&(i=l.g.location+"");var i,c=l.g.document;if(!i&&c&&(c.currentScript&&"SCRIPT"===c.currentScript.tagName.toUpperCase()&&(i=c.currentScript.src),!i)){var u=c.getElementsByTagName("script");if(u.length)for(var s=u.length-1;s>-1&&(!i||!/^http(s?):/.test(i));)i=u[s--].src}if(!i)throw Error("Automatic publicPath is not supported in this browser");l.p=i.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var p={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src&&(e=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),!e){var r=window.__webpack_public_path__||"";r&&("/"!==r.charAt(r.length-1)&&(r+="/"),e=r+"static/plugins/plugin-build-ui-template/dist/client/")}if(!e){var n=window.__nocobase_modern_client_prefix__||"v",a="/"+(n=String(n).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var o=window.location.pathname||"/",i=o.indexOf(a);e=i>=0?o.slice(0,i+1):"/"}e&&(e=e.replace(RegExp("/"+n+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-build-ui-template/dist/client/"}l.p=e}(),!function(){l.r(p),l.d(p,{PluginBuildUITemplateClient:function(){return w},default:function(){return x}});var e=l(342),t=l(155),r=l.n(t),n=l(59),a=l(375);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t,r,n,a,o,l){try{var i=e[o](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,a)}function c(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){i(o,n,a,l,c,"next",e)}function c(e){i(o,n,a,l,c,"throw",e)}l(void 0)})}}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],l=!0,i=!1;try{for(a=a.call(e);!(l=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{l||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&u[0]?n.return:u[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,u[1])).done)return a;switch(n=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,n=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){o=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(6===u[0]&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=t.call(e,o)}catch(e){u=[6,e],n=0}finally{r=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var d=n.Typography.Title,m=n.Typography.Paragraph,f=n.Typography.Text,y=function(){var o=(0,e.useAPIClient)(),l=u((0,t.useState)([]),2),i=l[0],p=l[1],y=u((0,t.useState)([]),2),g=y[0],b=y[1],h=u((0,t.useState)([]),2),v=h[0],E=h[1],S=u((0,t.useState)([]),2),w=S[0],x=S[1],T=u((0,t.useState)(!1),2),k=T[0],O=T[1],I=u((0,t.useState)(!1),2),P=I[0],C=I[1],B=u((0,t.useState)(null),2),F=B[0],_=B[1],j=u(n.Form.useForm(),1)[0],A=n.Form.useWatch("llmService",j),L=function(){return c(function(){var e,t;return s(this,function(r){switch(r.label){case 0:O(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,o.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]})];case 2:return p((null==(t=r.sent())||null==(e=t.data)?void 0:e.data)||[]),[3,5];case 3:return console.error("Failed to load spaces:",r.sent()),n.message.error("Failed to load UI generation spaces"),[3,5];case 4:return O(!1),[7];case 5:return[2]}})})()};(0,t.useEffect)(function(){A?o.resource("ai").listModels({llmService:A}).then(function(e){var t;x((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(e){console.error("Failed to load models:",e)}):x([])},[A,o]),(0,t.useEffect)(function(){L(),c(function(){var e,t;return s(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,o.resource("collections").list()];case 1:return b((null==(t=r.sent())||null==(e=t.data)?void 0:e.data)||[]),[3,3];case 2:return console.error("Failed to load collections:",r.sent()),[3,3];case 3:return[2]}})})(),c(function(){var e,t;return s(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,o.resource("ai").listLLMServices()];case 1:return E((null==(t=r.sent())||null==(e=t.data)?void 0:e.data)||[]),[3,3];case 2:return console.error("Failed to load LLM services:",r.sent()),[3,3];case 3:return[2]}})})();var e=setInterval(function(){i.some(function(e){return"building"===e.status})&&o.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]}).then(function(e){var t;return p((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(){})},3e3);return function(){return clearInterval(e)}},[i]);var q=function(e){e?(_(e),j.setFieldsValue({title:e.title,llmService:e.llmService,model:e.model,systemPrompt:e.systemPrompt,promptRequirements:e.promptRequirements,type:e.type,targetCollection:e.targetCollection})):(_(null),j.resetFields(),j.setFieldsValue({type:"block"})),C(!0)},M=function(e){switch(e){case"queued":return 10;case"preparing":return 25;case"generating":return 60;case"saving":return 90;case"completed":return 100;default:return 0}};return r().createElement("div",{style:{padding:"24px",maxWidth:"1200px",margin:"0 auto"}},r().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"24px"}},r().createElement("div",null,r().createElement(d,{level:2},"AI UI Template Builder"),r().createElement(m,{type:"secondary"},"Generate stunning custom UI Blocks and Popups in seconds using state-of-the-art LLMs, then reuse them in NocoBase v2 dynamic forms, dashboards and listings.")),r().createElement(n.Button,{type:"primary",icon:r().createElement(a.PlusOutlined,null),onClick:function(){return q()}},"New Generation Space")),r().createElement(n.List,{loading:k&&0===i.length,dataSource:i,renderItem:function(e){var t,l;return r().createElement(n.Card,{key:e.id,style:{marginBottom:"20px",borderRadius:"12px",boxShadow:"0 4px 12px rgba(0,0,0,0.05)"},actions:[r().createElement(n.Button,{key:"generate",type:"link",icon:r().createElement(a.PlayCircleOutlined,null),onClick:function(){var t;return t=e.id,c(function(){var e;return s(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),n.message.loading("Triggering AI generation...",1),[4,o.resource("aiBuildUiTemplateSpaces").build({filterByTk:t})];case 1:return r.sent(),n.message.success("UI Template generation task started successfully!"),L(),[3,3];case 2:return e=r.sent(),n.message.error((null==e?void 0:e.message)||"Failed to trigger build"),[3,3];case 3:return[2]}})})()},disabled:"building"===e.status},"Generate"),r().createElement(n.Button,{key:"edit",type:"link",onClick:function(){return q(e)}},"Edit Settings"),r().createElement(n.Button,{key:"delete",type:"link",danger:!0,icon:r().createElement(a.DeleteOutlined,null),onClick:function(){var t;return t=e.id,c(function(){return s(this,function(e){return n.Modal.confirm({title:"Are you sure to delete this generation space?",icon:r().createElement(a.ExclamationCircleOutlined,null),okType:"danger",onOk:function(){return c(function(){return s(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,o.resource("aiBuildUiTemplateSpaces").destroy({filterByTk:t})];case 1:return e.sent(),n.message.success("Space deleted"),L(),[3,3];case 2:return e.sent(),n.message.error("Failed to delete space"),[3,3];case 3:return[2]}})})()}}),[2]})})()}},"Delete")]},r().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"start",marginBottom:"16px"}},r().createElement("div",null,r().createElement(n.Space,{align:"baseline"},r().createElement(d,{level:4,style:{margin:0}},e.title),(t=e.status,l=e.buildPhase,"completed"===t?r().createElement(n.Tag,{color:"success",icon:r().createElement(a.CheckCircleOutlined,null)},"Completed"):"error"===t?r().createElement(n.Tag,{color:"error",icon:r().createElement(a.ExclamationCircleOutlined,null)},"Failed"):"building"===t?r().createElement(n.Tag,{color:"processing",icon:r().createElement(a.SyncOutlined,{spin:!0})},"Generating (",l||"queued",")"):r().createElement(n.Tag,{color:"default"},"Draft"))),r().createElement("div",{style:{marginTop:"8px"}},r().createElement(n.Tag,{color:"blue"},"popup"===e.type?"Popup Template":"Block Template"),e.targetCollection&&r().createElement(n.Tag,{color:"purple"},"Collection: ",e.targetCollection),r().createElement(n.Tag,{color:"cyan"},"LLM: ",e.llmService," (",e.model,")"))),e.templateUid&&r().createElement(n.Button,{type:"primary",ghost:!0,icon:r().createElement(a.ArrowRightOutlined,null),href:"/admin/settings/ui-templates.block"},"View Template Library")),r().createElement(m,{style:{background:"#f5f5f5",padding:"12px",borderRadius:"8px",borderLeft:"4px solid #1890ff"}},r().createElement(f,{strong:!0},"User Requirements: "),e.promptRequirements||"No specific requirements typed."),"building"===e.status&&r().createElement("div",{style:{marginTop:"16px",background:"#fafafa",padding:"16px",borderRadius:"8px"}},r().createElement(f,{type:"secondary"},"Build progress: "),r().createElement(n.Progress,{percent:M(e.buildPhase),status:"active",strokeColor:"#1890ff"}),r().createElement("div",{style:{marginTop:"8px",fontFamily:"monospace",color:"#666"}},r().createElement(n.Spin,{size:"small",style:{marginRight:"8px"}}),e.buildLog||"AI is initiating task...")),"completed"===e.status&&e.buildLog&&r().createElement(n.Alert,{message:"Build Complete",description:e.buildLog,type:"success",showIcon:!0,style:{marginTop:"12px"}}),"error"===e.status&&e.buildLog&&r().createElement(n.Alert,{message:"Generation Failed",description:e.buildLog,type:"error",showIcon:!0,style:{marginTop:"12px"}}))}}),r().createElement(n.Modal,{title:F?"Edit Generation Settings":"New UI Generation Space",open:P,onOk:function(){return c(function(){var e,t;return s(this,function(r){switch(r.label){case 0:return r.trys.push([0,6,,7]),[4,j.validateFields()];case 1:if(e=r.sent(),!F)return[3,3];return[4,o.resource("aiBuildUiTemplateSpaces").update({filterByTk:F.id,values:e})];case 2:return r.sent(),n.message.success("Space updated successfully"),[3,5];case 3:return[4,o.resource("aiBuildUiTemplateSpaces").create({values:e})];case 4:r.sent(),n.message.success("Space created successfully"),r.label=5;case 5:return C(!1),L(),[3,7];case 6:return(null==(t=r.sent())?void 0:t.name)!=="ValidateError"&&n.message.error((null==t?void 0:t.message)||"Failed to save space settings"),[3,7];case 7:return[2]}})})()},onCancel:function(){return C(!1)},width:720,destroyOnClose:!0},r().createElement(n.Form,{form:j,layout:"vertical",style:{marginTop:"16px"}},r().createElement(n.Form.Item,{name:"title",label:r().createElement(f,{strong:!0},"Space Name"),rules:[{required:!0,message:"Please enter a space name"}]},r().createElement(n.Input,{placeholder:"e.g. Sales KPI Dashboard, Customer Contact Form"})),r().createElement(n.Space,{size:"large",style:{display:"flex",width:"100%"}},r().createElement(n.Form.Item,{name:"llmService",label:r().createElement(f,{strong:!0},"AI Service"),rules:[{required:!0,message:"Please select an LLM Service"}],style:{flex:1,minWidth:"300px"}},r().createElement(n.Select,{placeholder:"Select Service",onChange:function(){return j.setFieldValue("model",void 0)}},v.map(function(e){return r().createElement(n.Select.Option,{key:e.name,value:e.name},e.title||e.name)}))),r().createElement(n.Form.Item,{name:"model",label:r().createElement(f,{strong:!0},"Model"),rules:[{required:!0,message:"Please select an LLM Model"}],style:{flex:1,minWidth:"300px"}},r().createElement(n.Select,{placeholder:"Select Model",disabled:!A},w.map(function(e){return r().createElement(n.Select.Option,{key:e.id||e.name,value:e.id||e.name},e.id||e.name)})))),r().createElement(n.Space,{size:"large",style:{display:"flex",width:"100%"}},r().createElement(n.Form.Item,{name:"type",label:r().createElement(f,{strong:!0},"Template Type"),rules:[{required:!0}],style:{flex:1}},r().createElement(n.Radio.Group,null,r().createElement(n.Radio.Button,{value:"block"},"Block (V2)"),r().createElement(n.Radio.Button,{value:"popup"},"Popup (V2)"))),r().createElement(n.Form.Item,{name:"targetCollection",label:r().createElement(f,{strong:!0},"Bind Database Collection"),style:{flex:1,minWidth:"300px"}},r().createElement(n.Select,{placeholder:"Select target collection (optional)",allowClear:!0,showSearch:!0},g.map(function(e){return r().createElement(n.Select.Option,{key:e.name,value:e.name},e.title||e.name)})))),r().createElement(n.Form.Item,{name:"promptRequirements",label:r().createElement(f,{strong:!0},"UI Requirements & Features Description"),rules:[{required:!0,message:"Please describe the layout you need AI to generate"}]},r().createElement(n.Input.TextArea,{rows:4,placeholder:"e.g. Build a comprehensive customer feedback form featuring inputs for name, email, rating slider, multi-line comment text area, and an agreement checkbox. Place them in a nice 2-column grid."})),r().createElement(n.Form.Item,{name:"systemPrompt",label:r().createElement(f,{strong:!0},"Advanced System Prompt Override (Optional)")},r().createElement(n.Input.TextArea,{rows:3,placeholder:"Override the default system prompt to customize how the LLM structures the component trees."})))))};function g(e,t,r,n,a,o,l){try{var i=e[o](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,a)}function b(e,t,r){return(b=S()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return r&&v(a,r.prototype),a}).apply(null,arguments)}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function v(e,t){return(v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function E(e){var t="function"==typeof Map?new Map:void 0;return(E=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return b(e,arguments,h(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),v(r,e)})(e)}function S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(S=function(){return!!e})()}var w=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=h(e),function(e,t){var r;if(t&&("object"==((r=t)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,S()?Reflect.construct(e,t||[],h(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&v(r,e),t=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&u[0]?n.return:u[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,u[1])).done)return a;switch(n=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,n=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){o=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(6===u[0]&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=t.call(e,o)}catch(e){u=[6,e],n=0}finally{r=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(e){return this.app.pluginSettingsManager.add("ai-build-ui-template",{icon:"LayoutOutlined",title:"Build UI Template",Component:y,aclSnippet:"pm.ai-build-ui-template"}),[2]})},function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){g(o,n,a,l,i,"next",e)}function i(e){g(o,n,a,l,i,"throw",e)}l(void 0)})}).call(this)}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(r.prototype,t),r}(E(e.Plugin)),x=w}(),p}()});
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("antd"),require("@nocobase/client"),require("@nocobase/client-v2"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-build-ui-template",["react","antd","@nocobase/client","@nocobase/client-v2","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-build-ui-template"]=t(require("react"),require("antd"),require("@nocobase/client"),require("@nocobase/client-v2"),require("@ant-design/icons")):e["plugin-build-ui-template"]=t(e.react,e.antd,e["@nocobase/client"],e["@nocobase/client-v2"],e["@ant-design/icons"])}(self,function(e,t,r,n,a){return function(){"use strict";var o={375:function(e){e.exports=a},342:function(e){e.exports=r},485:function(e){e.exports=n},59:function(e){e.exports=t},155:function(t){t.exports=e}},l={};function i(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={exports:{}};return o[e](r,r.exports,i),r.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.g.importScripts&&(c=i.g.location+"");var c,u=i.g.document;if(!c&&u&&(u.currentScript&&"SCRIPT"===u.currentScript.tagName.toUpperCase()&&(c=u.currentScript.src),!c)){var s=u.getElementsByTagName("script");if(s.length)for(var p=s.length-1;p>-1&&(!c||!/^http(s?):/.test(c));)c=s[p--].src}if(!c)throw Error("Automatic publicPath is not supported in this browser");i.p=c.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/");var d={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var r=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/plugin-build-ui-template/dist/client/")>=0&&(e=r.replace(/\/[^\/]+$/,"/"))}if(!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/plugin-build-ui-template/dist/client/")}if(!e){var a=window.__nocobase_modern_client_prefix__||"v",o="/"+(a=String(a).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var l=window.location.pathname||"/",c=l.indexOf(o);e=c>=0?l.slice(0,c+1):"/"}e&&(e=e.replace(RegExp("/"+a+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-build-ui-template/dist/client/"}i.p=e}(),!function(){i.r(d),i.d(d,{PluginBuildUITemplateClient:function(){return x},default:function(){return T}});var e=i(342),t=i(155),r=i.n(t),n=i(485),a=i(59),o=i(375);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t,r,n,a,o,l){try{var i=e[o](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,a)}function u(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){c(o,n,a,l,i,"next",e)}function i(e){c(o,n,a,l,i,"throw",e)}l(void 0)})}}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],l=!0,i=!1;try{for(a=a.call(e);!(l=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{l||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&u[0]?n.return:u[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,u[1])).done)return a;switch(n=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,n=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){o=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(6===u[0]&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=t.call(e,o)}catch(e){u=[6,e],n=0}finally{r=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var m=a.Typography.Title,f=a.Typography.Paragraph,y=a.Typography.Text,g=function(){var e=(0,n.useApp)().apiClient,l=s((0,t.useState)([]),2),i=l[0],c=l[1],d=s((0,t.useState)([]),2),g=d[0],b=d[1],h=s((0,t.useState)([]),2),v=h[0],E=h[1],S=s((0,t.useState)([]),2),w=S[0],x=S[1],T=s((0,t.useState)(!1),2),O=T[0],k=T[1],I=s((0,t.useState)(!1),2),P=I[0],C=I[1],B=s((0,t.useState)(null),2),F=B[0],_=B[1],j=s(a.Form.useForm(),1)[0],q=a.Form.useWatch("llmService",j),A=function(){return u(function(){var t,r;return p(this,function(n){switch(n.label){case 0:k(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,e.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]})];case 2:return c((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,5];case 3:return console.error("Failed to load spaces:",n.sent()),a.message.error("Failed to load UI generation spaces"),[3,5];case 4:return k(!1),[7];case 5:return[2]}})})()};(0,t.useEffect)(function(){q?e.resource("ai").listModels({llmService:q}).then(function(e){var t;x((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(e){console.error("Failed to load models:",e)}):x([])},[q,e]),(0,t.useEffect)(function(){A(),u(function(){var t,r;return p(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.resource("collections").list()];case 1:return b((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,3];case 2:return console.error("Failed to load collections:",n.sent()),[3,3];case 3:return[2]}})})(),u(function(){var t,r;return p(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.resource("ai").listLLMServices()];case 1:return E((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,3];case 2:return console.error("Failed to load LLM services:",n.sent()),[3,3];case 3:return[2]}})})();var t=setInterval(function(){i.some(function(e){return"building"===e.status})&&e.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]}).then(function(e){var t;return c((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(){})},3e3);return function(){return clearInterval(t)}},[i]);var L=function(e){e?(_(e),j.setFieldsValue({title:e.title,llmService:e.llmService,model:e.model,systemPrompt:e.systemPrompt,promptRequirements:e.promptRequirements,type:e.type,targetCollection:e.targetCollection})):(_(null),j.resetFields(),j.setFieldsValue({type:"block"})),C(!0)},M=function(e){switch(e){case"queued":return 10;case"preparing":return 25;case"generating":return 60;case"saving":return 90;case"completed":return 100;default:return 0}};return r().createElement("div",{style:{padding:"24px",maxWidth:"1200px",margin:"0 auto"}},r().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"24px"}},r().createElement("div",null,r().createElement(m,{level:2},"AI UI Template Builder"),r().createElement(f,{type:"secondary"},"Generate stunning custom UI Blocks and Popups in seconds using state-of-the-art LLMs, then reuse them in NocoBase v2 dynamic forms, dashboards and listings.")),r().createElement(a.Button,{type:"primary",icon:r().createElement(o.PlusOutlined,null),onClick:function(){return L()}},"New Generation Space")),r().createElement(a.List,{loading:O&&0===i.length,dataSource:i,renderItem:function(t){var n,l;return r().createElement(a.Card,{key:t.id,style:{marginBottom:"20px",borderRadius:"12px",boxShadow:"0 4px 12px rgba(0,0,0,0.05)"},actions:[r().createElement(a.Button,{key:"generate",type:"link",icon:r().createElement(o.PlayCircleOutlined,null),onClick:function(){var r;return r=t.id,u(function(){var t;return p(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),a.message.loading("Triggering AI generation...",1),[4,e.resource("aiBuildUiTemplateSpaces").build({filterByTk:r})];case 1:return n.sent(),a.message.success("UI Template generation task started successfully!"),A(),[3,3];case 2:return t=n.sent(),a.message.error((null==t?void 0:t.message)||"Failed to trigger build"),[3,3];case 3:return[2]}})})()},disabled:"building"===t.status},"Generate"),r().createElement(a.Button,{key:"edit",type:"link",onClick:function(){return L(t)}},"Edit Settings"),r().createElement(a.Button,{key:"delete",type:"link",danger:!0,icon:r().createElement(o.DeleteOutlined,null),onClick:function(){var n;return n=t.id,u(function(){return p(this,function(t){return a.Modal.confirm({title:"Are you sure to delete this generation space?",icon:r().createElement(o.ExclamationCircleOutlined,null),okType:"danger",onOk:function(){return u(function(){return p(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,e.resource("aiBuildUiTemplateSpaces").destroy({filterByTk:n})];case 1:return t.sent(),a.message.success("Space deleted"),A(),[3,3];case 2:return t.sent(),a.message.error("Failed to delete space"),[3,3];case 3:return[2]}})})()}}),[2]})})()}},"Delete")]},r().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"start",marginBottom:"16px"}},r().createElement("div",null,r().createElement(a.Space,{align:"baseline"},r().createElement(m,{level:4,style:{margin:0}},t.title),(n=t.status,l=t.buildPhase,"completed"===n?r().createElement(a.Tag,{color:"success",icon:r().createElement(o.CheckCircleOutlined,null)},"Completed"):"error"===n?r().createElement(a.Tag,{color:"error",icon:r().createElement(o.ExclamationCircleOutlined,null)},"Failed"):"building"===n?r().createElement(a.Tag,{color:"processing",icon:r().createElement(o.SyncOutlined,{spin:!0})},"Generating (",l||"queued",")"):r().createElement(a.Tag,{color:"default"},"Draft"))),r().createElement("div",{style:{marginTop:"8px"}},r().createElement(a.Tag,{color:"blue"},"popup"===t.type?"Popup Template":"Block Template"),t.targetCollection&&r().createElement(a.Tag,{color:"purple"},"Collection: ",t.targetCollection),r().createElement(a.Tag,{color:"cyan"},"LLM: ",t.llmService," (",t.model,")"))),t.templateUid&&r().createElement(a.Button,{type:"primary",ghost:!0,icon:r().createElement(o.ArrowRightOutlined,null),href:"/admin/settings/ui-templates.block"},"View Template Library")),r().createElement(f,{style:{background:"#f5f5f5",padding:"12px",borderRadius:"8px",borderLeft:"4px solid #1890ff"}},r().createElement(y,{strong:!0},"User Requirements: "),t.promptRequirements||"No specific requirements typed."),"building"===t.status&&r().createElement("div",{style:{marginTop:"16px",background:"#fafafa",padding:"16px",borderRadius:"8px"}},r().createElement(y,{type:"secondary"},"Build progress: "),r().createElement(a.Progress,{percent:M(t.buildPhase),status:"active",strokeColor:"#1890ff"}),r().createElement("div",{style:{marginTop:"8px",fontFamily:"monospace",color:"#666"}},r().createElement(a.Spin,{size:"small",style:{marginRight:"8px"}}),t.buildLog||"AI is initiating task...")),"completed"===t.status&&t.buildLog&&r().createElement(a.Alert,{message:"Build Complete",description:t.buildLog,type:"success",showIcon:!0,style:{marginTop:"12px"}}),"error"===t.status&&t.buildLog&&r().createElement(a.Alert,{message:"Generation Failed",description:t.buildLog,type:"error",showIcon:!0,style:{marginTop:"12px"}}))}}),r().createElement(a.Modal,{title:F?"Edit Generation Settings":"New UI Generation Space",open:P,onOk:function(){return u(function(){var t,r;return p(this,function(n){switch(n.label){case 0:return n.trys.push([0,6,,7]),[4,j.validateFields()];case 1:if(t=n.sent(),!F)return[3,3];return[4,e.resource("aiBuildUiTemplateSpaces").update({filterByTk:F.id,values:t})];case 2:return n.sent(),a.message.success("Space updated successfully"),[3,5];case 3:return[4,e.resource("aiBuildUiTemplateSpaces").create({values:t})];case 4:n.sent(),a.message.success("Space created successfully"),n.label=5;case 5:return C(!1),A(),[3,7];case 6:return(null==(r=n.sent())?void 0:r.name)!=="ValidateError"&&a.message.error((null==r?void 0:r.message)||"Failed to save space settings"),[3,7];case 7:return[2]}})})()},onCancel:function(){return C(!1)},width:720,destroyOnClose:!0},r().createElement(a.Form,{form:j,layout:"vertical",style:{marginTop:"16px"}},r().createElement(a.Form.Item,{name:"title",label:r().createElement(y,{strong:!0},"Space Name"),rules:[{required:!0,message:"Please enter a space name"}]},r().createElement(a.Input,{placeholder:"e.g. Sales KPI Dashboard, Customer Contact Form"})),r().createElement(a.Space,{size:"large",style:{display:"flex",width:"100%"}},r().createElement(a.Form.Item,{name:"llmService",label:r().createElement(y,{strong:!0},"AI Service"),rules:[{required:!0,message:"Please select an LLM Service"}],style:{flex:1,minWidth:"300px"}},r().createElement(a.Select,{placeholder:"Select Service",onChange:function(){return j.setFieldValue("model",void 0)}},v.map(function(e){return r().createElement(a.Select.Option,{key:e.name,value:e.name},e.title||e.name)}))),r().createElement(a.Form.Item,{name:"model",label:r().createElement(y,{strong:!0},"Model"),rules:[{required:!0,message:"Please select an LLM Model"}],style:{flex:1,minWidth:"300px"}},r().createElement(a.Select,{placeholder:"Select Model",disabled:!q},w.map(function(e){return r().createElement(a.Select.Option,{key:e.id||e.name,value:e.id||e.name},e.id||e.name)})))),r().createElement(a.Space,{size:"large",style:{display:"flex",width:"100%"}},r().createElement(a.Form.Item,{name:"type",label:r().createElement(y,{strong:!0},"Template Type"),rules:[{required:!0}],style:{flex:1}},r().createElement(a.Radio.Group,null,r().createElement(a.Radio.Button,{value:"block"},"Block (V2)"),r().createElement(a.Radio.Button,{value:"popup"},"Popup (V2)"))),r().createElement(a.Form.Item,{name:"targetCollection",label:r().createElement(y,{strong:!0},"Bind Database Collection"),style:{flex:1,minWidth:"300px"}},r().createElement(a.Select,{placeholder:"Select target collection (optional)",allowClear:!0,showSearch:!0},g.map(function(e){return r().createElement(a.Select.Option,{key:e.name,value:e.name},e.title||e.name)})))),r().createElement(a.Form.Item,{name:"promptRequirements",label:r().createElement(y,{strong:!0},"UI Requirements & Features Description"),rules:[{required:!0,message:"Please describe the layout you need AI to generate"}]},r().createElement(a.Input.TextArea,{rows:4,placeholder:"e.g. Build a comprehensive customer feedback form featuring inputs for name, email, rating slider, multi-line comment text area, and an agreement checkbox. Place them in a nice 2-column grid."})),r().createElement(a.Form.Item,{name:"systemPrompt",label:r().createElement(y,{strong:!0},"Advanced System Prompt Override (Optional)")},r().createElement(a.Input.TextArea,{rows:3,placeholder:"Override the default system prompt to customize how the LLM structures the component trees."})))))};function b(e,t,r,n,a,o,l){try{var i=e[o](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,a)}function h(e,t,r){return(h=w()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return r&&E(a,r.prototype),a}).apply(null,arguments)}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function E(e,t){return(E=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function S(e){var t="function"==typeof Map?new Map:void 0;return(S=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return h(e,arguments,v(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),E(r,e)})(e)}function w(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(w=function(){return!!e})()}var x=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=v(e),function(e,t){var r;if(t&&("object"==((r=t)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,w()?Reflect.construct(e,t||[],v(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&E(r,e),t=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&u[0]?n.return:u[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,u[1])).done)return a;switch(n=0,a&&(u=[2&u[0],a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,n=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===u[0]||2===u[0])){o=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(6===u[0]&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=t.call(e,o)}catch(e){u=[6,e],n=0}finally{r=a=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(e){return this.app.pluginSettingsManager.add("ai-build-ui-template",{icon:"LayoutOutlined",title:"Build UI Template",Component:g,aclSnippet:"pm.ai-build-ui-template"}),[2]})},function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){b(o,n,a,l,i,"next",e)}function i(e){b(o,n,a,l,i,"throw",e)}l(void 0)})}).call(this)}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(r.prototype,t),r}(S(e.Plugin)),T=x}(),d}()});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
"use strict";(self.webpackChunkplugin_build_ui_template_client_v2=self.webpackChunkplugin_build_ui_template_client_v2||[]).push([["380"],{23:function(e,t,r){r.d(t,{BuildUITemplateManager:function(){return y}});var n=r(155),a=r.n(n),l=r(485),i=r(59),o=r(375);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t,r,n,a,l,i){try{var o=e[l](i),s=o.value}catch(e){r(e);return}o.done?t(s):Promise.resolve(s).then(n,a)}function u(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function i(e){c(l,n,a,i,o,"next",e)}function o(e){c(l,n,a,i,o,"throw",e)}i(void 0)})}}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],i=!0,o=!1;try{for(a=a.call(e);!(i=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);i=!0);}catch(e){o=!0,n=e}finally{try{i||null==a.return||a.return()}finally{if(o)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),o=Object.defineProperty;return o(i,"next",{value:s(0)}),o(i,"throw",{value:s(1)}),o(i,"return",{value:s(2)}),"function"==typeof Symbol&&o(i,Symbol.iterator,{value:function(){return this}}),i;function s(o){return function(s){var c=[o,s];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var p=i.Typography.Title,f=i.Typography.Paragraph,g=i.Typography.Text,y=function(){var e=(0,l.useApp)().apiClient,t=m((0,n.useState)([]),2),r=t[0],s=t[1],c=m((0,n.useState)([]),2),y=c[0],h=c[1],v=m((0,n.useState)([]),2),b=v[0],E=v[1],S=m((0,n.useState)([]),2),x=S[0],k=S[1],T=m((0,n.useState)(!1),2),w=T[0],I=T[1],C=m((0,n.useState)(!1),2),B=C[0],F=C[1],L=m((0,n.useState)(null),2),O=L[0],P=L[1],A=m(i.Form.useForm(),1)[0],U=i.Form.useWatch("llmService",A),M=function(){return u(function(){var t,r;return d(this,function(n){switch(n.label){case 0:I(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,e.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]})];case 2:return s((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,5];case 3:return console.error("Failed to load spaces:",n.sent()),i.message.error("Failed to load UI generation spaces"),[3,5];case 4:return I(!1),[7];case 5:return[2]}})})()};(0,n.useEffect)(function(){U?e.resource("ai").listModels({llmService:U}).then(function(e){var t;k((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(e){console.error("Failed to load models:",e)}):k([])},[U,e]),(0,n.useEffect)(function(){M(),u(function(){var t,r;return d(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.resource("collections").list()];case 1:return h((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,3];case 2:return console.error("Failed to load collections:",n.sent()),[3,3];case 3:return[2]}})})(),u(function(){var t,r;return d(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.resource("ai").listLLMServices()];case 1:return E((null==(r=n.sent())||null==(t=r.data)?void 0:t.data)||[]),[3,3];case 2:return console.error("Failed to load LLM services:",n.sent()),[3,3];case 3:return[2]}})})();var t=setInterval(function(){r.some(function(e){return"building"===e.status})&&e.resource("aiBuildUiTemplateSpaces").list({sort:["-createdAt"]}).then(function(e){var t;return s((null==e||null==(t=e.data)?void 0:t.data)||[])}).catch(function(){})},3e3);return function(){return clearInterval(t)}},[r]);var q=function(e){e?(P(e),A.setFieldsValue({title:e.title,llmService:e.llmService,model:e.model,systemPrompt:e.systemPrompt,promptRequirements:e.promptRequirements,type:e.type,targetCollection:e.targetCollection})):(P(null),A.resetFields(),A.setFieldsValue({type:"block"})),F(!0)},R=function(e){switch(e){case"queued":return 10;case"preparing":return 25;case"generating":return 60;case"saving":return 90;case"completed":return 100;default:return 0}};return a().createElement("div",{style:{padding:"24px",maxWidth:"1200px",margin:"0 auto"}},a().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"24px"}},a().createElement("div",null,a().createElement(p,{level:2},"AI UI Template Builder"),a().createElement(f,{type:"secondary"},"Generate stunning custom UI Blocks and Popups in seconds using state-of-the-art LLMs, then reuse them in NocoBase v2 dynamic forms, dashboards and listings.")),a().createElement(i.Button,{type:"primary",icon:a().createElement(o.PlusOutlined,null),onClick:function(){return q()}},"New Generation Space")),a().createElement(i.List,{loading:w&&0===r.length,dataSource:r,renderItem:function(t){var r,n;return a().createElement(i.Card,{key:t.id,style:{marginBottom:"20px",borderRadius:"12px",boxShadow:"0 4px 12px rgba(0,0,0,0.05)"},actions:[a().createElement(i.Button,{key:"generate",type:"link",icon:a().createElement(o.PlayCircleOutlined,null),onClick:function(){var r;return r=t.id,u(function(){var t;return d(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),i.message.loading("Triggering AI generation...",1),[4,e.resource("aiBuildUiTemplateSpaces").build({filterByTk:r})];case 1:return n.sent(),i.message.success("UI Template generation task started successfully!"),M(),[3,3];case 2:return t=n.sent(),i.message.error((null==t?void 0:t.message)||"Failed to trigger build"),[3,3];case 3:return[2]}})})()},disabled:"building"===t.status},"Generate"),a().createElement(i.Button,{key:"edit",type:"link",onClick:function(){return q(t)}},"Edit Settings"),a().createElement(i.Button,{key:"delete",type:"link",danger:!0,icon:a().createElement(o.DeleteOutlined,null),onClick:function(){var r;return r=t.id,u(function(){return d(this,function(t){return i.Modal.confirm({title:"Are you sure to delete this generation space?",icon:a().createElement(o.ExclamationCircleOutlined,null),okType:"danger",onOk:function(){return u(function(){return d(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,e.resource("aiBuildUiTemplateSpaces").destroy({filterByTk:r})];case 1:return t.sent(),i.message.success("Space deleted"),M(),[3,3];case 2:return t.sent(),i.message.error("Failed to delete space"),[3,3];case 3:return[2]}})})()}}),[2]})})()}},"Delete")]},a().createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"start",marginBottom:"16px"}},a().createElement("div",null,a().createElement(i.Space,{align:"baseline"},a().createElement(p,{level:4,style:{margin:0}},t.title),(r=t.status,n=t.buildPhase,"completed"===r?a().createElement(i.Tag,{color:"success",icon:a().createElement(o.CheckCircleOutlined,null)},"Completed"):"error"===r?a().createElement(i.Tag,{color:"error",icon:a().createElement(o.ExclamationCircleOutlined,null)},"Failed"):"building"===r?a().createElement(i.Tag,{color:"processing",icon:a().createElement(o.SyncOutlined,{spin:!0})},"Generating (",n||"queued",")"):a().createElement(i.Tag,{color:"default"},"Draft"))),a().createElement("div",{style:{marginTop:"8px"}},a().createElement(i.Tag,{color:"blue"},"popup"===t.type?"Popup Template":"Block Template"),t.targetCollection&&a().createElement(i.Tag,{color:"purple"},"Collection: ",t.targetCollection),a().createElement(i.Tag,{color:"cyan"},"LLM: ",t.llmService," (",t.model,")"))),t.templateUid&&a().createElement(i.Button,{type:"primary",ghost:!0,icon:a().createElement(o.ArrowRightOutlined,null),href:"/admin/settings/ui-templates.block"},"View Template Library")),a().createElement(f,{style:{background:"#f5f5f5",padding:"12px",borderRadius:"8px",borderLeft:"4px solid #1890ff"}},a().createElement(g,{strong:!0},"User Requirements: "),t.promptRequirements||"No specific requirements typed."),"building"===t.status&&a().createElement("div",{style:{marginTop:"16px",background:"#fafafa",padding:"16px",borderRadius:"8px"}},a().createElement(g,{type:"secondary"},"Build progress: "),a().createElement(i.Progress,{percent:R(t.buildPhase),status:"active",strokeColor:"#1890ff"}),a().createElement("div",{style:{marginTop:"8px",fontFamily:"monospace",color:"#666"}},a().createElement(i.Spin,{size:"small",style:{marginRight:"8px"}}),t.buildLog||"AI is initiating task...")),"completed"===t.status&&t.buildLog&&a().createElement(i.Alert,{message:"Build Complete",description:t.buildLog,type:"success",showIcon:!0,style:{marginTop:"12px"}}),"error"===t.status&&t.buildLog&&a().createElement(i.Alert,{message:"Generation Failed",description:t.buildLog,type:"error",showIcon:!0,style:{marginTop:"12px"}}))}}),a().createElement(i.Modal,{title:O?"Edit Generation Settings":"New UI Generation Space",open:B,onOk:function(){return u(function(){var t,r;return d(this,function(n){switch(n.label){case 0:return n.trys.push([0,6,,7]),[4,A.validateFields()];case 1:if(t=n.sent(),!O)return[3,3];return[4,e.resource("aiBuildUiTemplateSpaces").update({filterByTk:O.id,values:t})];case 2:return n.sent(),i.message.success("Space updated successfully"),[3,5];case 3:return[4,e.resource("aiBuildUiTemplateSpaces").create({values:t})];case 4:n.sent(),i.message.success("Space created successfully"),n.label=5;case 5:return F(!1),M(),[3,7];case 6:return(null==(r=n.sent())?void 0:r.name)!=="ValidateError"&&i.message.error((null==r?void 0:r.message)||"Failed to save space settings"),[3,7];case 7:return[2]}})})()},onCancel:function(){return F(!1)},width:720,destroyOnClose:!0},a().createElement(i.Form,{form:A,layout:"vertical",style:{marginTop:"16px"}},a().createElement(i.Form.Item,{name:"title",label:a().createElement(g,{strong:!0},"Space Name"),rules:[{required:!0,message:"Please enter a space name"}]},a().createElement(i.Input,{placeholder:"e.g. Sales KPI Dashboard, Customer Contact Form"})),a().createElement(i.Space,{size:"large",style:{display:"flex",width:"100%"}},a().createElement(i.Form.Item,{name:"llmService",label:a().createElement(g,{strong:!0},"AI Service"),rules:[{required:!0,message:"Please select an LLM Service"}],style:{flex:1,minWidth:"300px"}},a().createElement(i.Select,{placeholder:"Select Service",onChange:function(){return A.setFieldValue("model",void 0)}},b.map(function(e){return a().createElement(i.Select.Option,{key:e.name,value:e.name},e.title||e.name)}))),a().createElement(i.Form.Item,{name:"model",label:a().createElement(g,{strong:!0},"Model"),rules:[{required:!0,message:"Please select an LLM Model"}],style:{flex:1,minWidth:"300px"}},a().createElement(i.Select,{placeholder:"Select Model",disabled:!U},x.map(function(e){return a().createElement(i.Select.Option,{key:e.id||e.name,value:e.id||e.name},e.id||e.name)})))),a().createElement(i.Space,{size:"large",style:{display:"flex",width:"100%"}},a().createElement(i.Form.Item,{name:"type",label:a().createElement(g,{strong:!0},"Template Type"),rules:[{required:!0}],style:{flex:1}},a().createElement(i.Radio.Group,null,a().createElement(i.Radio.Button,{value:"block"},"Block (V2)"),a().createElement(i.Radio.Button,{value:"popup"},"Popup (V2)"))),a().createElement(i.Form.Item,{name:"targetCollection",label:a().createElement(g,{strong:!0},"Bind Database Collection"),style:{flex:1,minWidth:"300px"}},a().createElement(i.Select,{placeholder:"Select target collection (optional)",allowClear:!0,showSearch:!0},y.map(function(e){return a().createElement(i.Select.Option,{key:e.name,value:e.name},e.title||e.name)})))),a().createElement(i.Form.Item,{name:"promptRequirements",label:a().createElement(g,{strong:!0},"UI Requirements & Features Description"),rules:[{required:!0,message:"Please describe the layout you need AI to generate"}]},a().createElement(i.Input.TextArea,{rows:4,placeholder:"e.g. Build a comprehensive customer feedback form featuring inputs for name, email, rating slider, multi-line comment text area, and an agreement checkbox. Place them in a nice 2-column grid."})),a().createElement(i.Form.Item,{name:"systemPrompt",label:a().createElement(g,{strong:!0},"Advanced System Prompt Override (Optional)")},a().createElement(i.Input.TextArea,{rows:3,placeholder:"Override the default system prompt to customize how the LLM structures the component trees."})))))}}}]);
|
package/dist/client-v2/index.js
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-build-ui-template/client-v2",["@nocobase/client-v2","react","antd","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-build-ui-template/client-v2"]=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@ant-design/icons")):e["plugin-build-ui-template/client-v2"]=t(e["@nocobase/client-v2"],e.react,e.antd,e["@ant-design/icons"])}(self,function(e,t,n,r){return function(){"use strict";var o,i,u,a={375:function(e){e.exports=r},485:function(t){t.exports=e},59:function(e){e.exports=n},155:function(e){e.exports=t}},c={};function l(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return a[e](n,n.exports,l),n.exports}l.m=a,l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,{a:t}),t},l.d=function(e,t){for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=function(e){return Promise.all(Object.keys(l.f).reduce(function(t,n){return l.f[n](e,t),t},[]))},l.u=function(e){return""+e+".103d33259df140f1.js"},l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p={},l.l=function(e,t,n,r){if(p[e])return void p[e].push(t);if(void 0!==n)for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var c=u[a];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="plugin-build-ui-template/client-v2:"+n){o=c;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,l.nc&&o.setAttribute("nonce",l.nc),o.setAttribute("data-rspack","plugin-build-ui-template/client-v2:"+n),o.src=e),p[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(s);var r=p[e];if(delete p[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),i&&document.head.appendChild(o)},l.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.g.importScripts&&(f=l.g.location+"");var p,f,s=l.g.document;if(!f&&s&&(s.currentScript&&"SCRIPT"===s.currentScript.tagName.toUpperCase()&&(f=s.currentScript.src),!f)){var d=s.getElementsByTagName("script");if(d.length)for(var b=d.length-1;b>-1&&(!f||!/^http(s?):/.test(f));)f=d[b--].src}if(!f)throw Error("Automatic publicPath is not supported in this browser");l.p=f.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o={889:0},l.f.j=function(e,t){var n=l.o(o,e)?o[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=o[e]=[t,r]});t.push(n[2]=r);var i=l.p+l.u(e),u=Error();l.l(i,function(t){if(l.o(o,e)&&(0!==(n=o[e])&&(o[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",u.name="ChunkLoadError",u.type=r,u.request=i,n[1](u)}},"chunk-"+e,e)}},i=function(e,t){var n,r,i=t[0],u=t[1],a=t[2],c=0;if(i.some(function(e){return 0!==o[e]})){for(n in u)l.o(u,n)&&(l.m[n]=u[n]);a&&a(l)}for(e&&e(t);c<i.length;c++)r=i[c],l.o(o,r)&&o[r]&&o[r][0](),o[r]=0},(u=self.webpackChunkplugin_build_ui_template_client_v2=self.webpackChunkplugin_build_ui_template_client_v2||[]).forEach(i.bind(null,0)),u.push=i.bind(null,u.push.bind(u));var v={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var n=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");n.indexOf("/static/plugins/plugin-build-ui-template/dist/client-v2/")>=0&&(e=n.replace(/\/[^\/]+$/,"/"))}if(!e){var r=window.__webpack_public_path__||"";r&&("/"!==r.charAt(r.length-1)&&(r+="/"),e=r+"static/plugins/plugin-build-ui-template/dist/client-v2/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var u=window.location.pathname||"/",a=u.indexOf(i);e=a>=0?u.slice(0,a+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-build-ui-template/dist/client-v2/"}l.p=e}(),!function(){l.r(v),l.d(v,{default:function(){return a}});var e=l(485);function t(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}function n(e,t,r){return(n=u()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&o(i,n.prototype),i}).apply(null,arguments)}l(155);function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function i(e){var t="function"==typeof Map?new Map:void 0;return(i=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return n(e,arguments,r(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),o(i,e)})(e)}function u(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(u=function(){return!!e})()}var a=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function i(){var e,t;if(!(this instanceof i))throw TypeError("Cannot call a class as a function");return e=i,t=arguments,e=r(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,u()?Reflect.construct(e,t||[],r(this).constructor):e.apply(this,t))}return i.prototype=Object.create(e&&e.prototype,{constructor:{value:i,writable:!0,configurable:!0}}),e&&o(i,e),n=[{key:"load",value:function(){var e;return(e=function(){return function(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(u,"next",{value:c(0)}),a(u,"throw",{value:c(1)}),a(u,"return",{value:c(2)}),"function"==typeof Symbol&&a(u,Symbol.iterator,{value:function(){return this}}),u;function c(a){return function(c){var l=[a,c];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(e){return this.pluginSettingsManager.addMenuItem({key:"ai-build-ui-template",title:this.t("Build UI Template"),icon:"LayoutOutlined",aclSnippet:"pm.ai-build-ui-template"}),this.pluginSettingsManager.addPageTabItem({menuKey:"ai-build-ui-template",key:"index",title:this.t("Build UI Template"),componentLoader:function(){return l.e("380").then(l.bind(l,23)).then(function(e){return{default:e.BuildUITemplateManager}})}}),[2]})},function(){var n=this,r=arguments;return new Promise(function(o,i){var u=e.apply(n,r);function a(e){t(u,o,i,a,c,"next",e)}function c(e){t(u,o,i,a,c,"throw",e)}a(void 0)})}).call(this)}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(i.prototype,n),i}(i(e.Plugin))}(),v}()});
|
package/dist/externalVersion.js
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
11
11
|
"react": "18.2.0",
|
|
12
|
-
"@nocobase/client": "2.1.
|
|
12
|
+
"@nocobase/client-v2": "2.1.9",
|
|
13
13
|
"antd": "5.24.2",
|
|
14
14
|
"@ant-design/icons": "5.6.1",
|
|
15
|
-
"@nocobase/client
|
|
16
|
-
"@nocobase/server": "2.1.
|
|
17
|
-
"@nocobase/actions": "2.1.
|
|
18
|
-
"@nocobase/database": "2.1.
|
|
19
|
-
"@nocobase/plugin-ai": "2.1.
|
|
15
|
+
"@nocobase/client": "2.1.9",
|
|
16
|
+
"@nocobase/server": "2.1.9",
|
|
17
|
+
"@nocobase/actions": "2.1.9",
|
|
18
|
+
"@nocobase/database": "2.1.9",
|
|
19
|
+
"@nocobase/plugin-ai": "2.1.9",
|
|
20
20
|
"@langchain/core": "1.1.48",
|
|
21
|
-
"@nocobase/utils": "2.1.
|
|
21
|
+
"@nocobase/utils": "2.1.9"
|
|
22
22
|
};
|
|
@@ -37,6 +37,7 @@ var import_messages = require("@langchain/core/messages");
|
|
|
37
37
|
var import_utils = require("@nocobase/utils");
|
|
38
38
|
const WORKER_JOB_BUILD_UI_TEMPLATE_PROCESS = "build-ui-template:process";
|
|
39
39
|
const BUILD_TEMPLATE_QUEUE_CHANNEL = "plugin-build-ui-template.build";
|
|
40
|
+
const BUILD_TEMPLATE_WORKER_ALIASES = [BUILD_TEMPLATE_QUEUE_CHANNEL];
|
|
40
41
|
const BUILD_TEMPLATE_QUEUE_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
41
42
|
const BUILD_TEMPLATE_QUEUE_POLL_INTERVAL_MS = 5e3;
|
|
42
43
|
const BUILD_TEMPLATE_QUEUE_WAKE_CHANNEL = "plugin-build-ui-template.build.wake";
|
|
@@ -88,25 +89,43 @@ function enqueueLocalBuild(app, message) {
|
|
|
88
89
|
(_a = app.log) == null ? void 0 : _a.info(`[plugin-build-ui-template] Enqueued build ${message.runId} for space "${message.spaceId}"`);
|
|
89
90
|
publishBuildQueueWake(app, message);
|
|
90
91
|
}
|
|
92
|
+
function isBuildTemplateWorker(app) {
|
|
93
|
+
return app.serving(WORKER_JOB_BUILD_UI_TEMPLATE_PROCESS) || workerModeServesBuildTemplate();
|
|
94
|
+
}
|
|
95
|
+
function workerModeServesBuildTemplate() {
|
|
96
|
+
const workerMode = process.env.WORKER_MODE || "";
|
|
97
|
+
const workerModes = workerMode.split(",").map((mode) => mode.trim()).filter(Boolean);
|
|
98
|
+
return workerModes.some((mode) => {
|
|
99
|
+
if (mode === "*" || mode === "worker" || mode === "task" || mode === WORKER_JOB_BUILD_UI_TEMPLATE_PROCESS) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return BUILD_TEMPLATE_WORKER_ALIASES.includes(mode);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
91
105
|
async function publishBuildQueueWake(app, message) {
|
|
92
106
|
var _a, _b, _c;
|
|
93
107
|
try {
|
|
94
108
|
await ((_b = (_a = app.pubSubManager) == null ? void 0 : _a.publish) == null ? void 0 : _b.call(
|
|
95
109
|
_a,
|
|
96
110
|
BUILD_TEMPLATE_QUEUE_WAKE_CHANNEL,
|
|
97
|
-
{ spaceId: message == null ? void 0 : message.spaceId, runId: message == null ? void 0 : message.runId }
|
|
111
|
+
{ spaceId: message == null ? void 0 : message.spaceId, runId: message == null ? void 0 : message.runId },
|
|
112
|
+
{ skipSelf: !isBuildTemplateWorker(app) }
|
|
98
113
|
));
|
|
99
114
|
} catch (error) {
|
|
100
115
|
(_c = app.log) == null ? void 0 : _c.debug(`[plugin-build-ui-template] Wake publish skipped: ${(error == null ? void 0 : error.message) || error}`);
|
|
101
116
|
}
|
|
102
117
|
}
|
|
103
118
|
function registerBuildTemplateQueue(app) {
|
|
104
|
-
var _a, _b, _c;
|
|
119
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
120
|
+
if (!isBuildTemplateWorker(app)) {
|
|
121
|
+
(_b = (_a = app.log) == null ? void 0 : _a.debug) == null ? void 0 : _b.call(_a, "[plugin-build-ui-template] Queue processor disabled on non-worker node");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
105
124
|
if (buildQueueTimer) return;
|
|
106
125
|
buildQueueWakeHandler = async () => {
|
|
107
126
|
scheduleBuildQueueTick(app, 0);
|
|
108
127
|
};
|
|
109
|
-
const subscribe = (
|
|
128
|
+
const subscribe = (_d = (_c = app.pubSubManager) == null ? void 0 : _c.subscribe) == null ? void 0 : _d.call(_c, BUILD_TEMPLATE_QUEUE_WAKE_CHANNEL, buildQueueWakeHandler);
|
|
110
129
|
if (subscribe == null ? void 0 : subscribe.catch) {
|
|
111
130
|
subscribe.catch((error) => {
|
|
112
131
|
var _a2;
|
|
@@ -114,8 +133,12 @@ function registerBuildTemplateQueue(app) {
|
|
|
114
133
|
});
|
|
115
134
|
}
|
|
116
135
|
buildQueueTimer = setInterval(() => scheduleBuildQueueTick(app, 0), BUILD_TEMPLATE_QUEUE_POLL_INTERVAL_MS);
|
|
117
|
-
(
|
|
136
|
+
(_e = buildQueueTimer.unref) == null ? void 0 : _e.call(buildQueueTimer);
|
|
118
137
|
scheduleBuildQueueTick(app, 1e3);
|
|
138
|
+
(_g = (_f = app.log) == null ? void 0 : _f.info) == null ? void 0 : _g.call(
|
|
139
|
+
_f,
|
|
140
|
+
`[plugin-build-ui-template] Queue processor started (interval ${BUILD_TEMPLATE_QUEUE_POLL_INTERVAL_MS}ms)`
|
|
141
|
+
);
|
|
119
142
|
}
|
|
120
143
|
function unregisterBuildTemplateQueue(app) {
|
|
121
144
|
var _a, _b;
|
|
@@ -128,11 +151,7 @@ function unregisterBuildTemplateQueue(app) {
|
|
|
128
151
|
buildQueueKickTimer = null;
|
|
129
152
|
}
|
|
130
153
|
if (buildQueueWakeHandler) {
|
|
131
|
-
(_b = (_a = app.pubSubManager) == null ? void 0 : _a.unsubscribe) == null ? void 0 : _b.call(
|
|
132
|
-
_a,
|
|
133
|
-
BUILD_TEMPLATE_QUEUE_WAKE_CHANNEL,
|
|
134
|
-
buildQueueWakeHandler
|
|
135
|
-
).catch(() => void 0);
|
|
154
|
+
(_b = (_a = app.pubSubManager) == null ? void 0 : _a.unsubscribe) == null ? void 0 : _b.call(_a, BUILD_TEMPLATE_QUEUE_WAKE_CHANNEL, buildQueueWakeHandler).catch(() => void 0);
|
|
136
155
|
buildQueueWakeHandler = null;
|
|
137
156
|
}
|
|
138
157
|
buildQueueProcessing = false;
|
|
@@ -216,6 +235,9 @@ async function runBuildQueueTick(app) {
|
|
|
216
235
|
}
|
|
217
236
|
async function recoverInterruptedBuilds(app) {
|
|
218
237
|
var _a;
|
|
238
|
+
if (!isBuildTemplateWorker(app)) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
219
241
|
const spaceRepo = app.db.getRepository("aiBuildUiTemplateSpaces");
|
|
220
242
|
const runningSpaces = await spaceRepo.find({
|
|
221
243
|
filter: {
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"displayName.zh-CN": "构建UI模板",
|
|
6
6
|
"description": "Generate standard UI Block and Popup templates using AI, saving directly to plugin-ui-templates.",
|
|
7
7
|
"description.vi-VN": "Tạo block và popup template bằng AI, lưu trực tiếp vào plugin-ui-templates.",
|
|
8
|
-
"version": "1.0.
|
|
8
|
+
"version": "1.0.6",
|
|
9
9
|
"license": "Apache-2.0",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"ai",
|