plugin-build-ui-template 1.0.3 → 1.0.4

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.
@@ -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&&(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||"/",l=o.indexOf(a);e=l>=0?o.slice(0,l+1):"/"}e&&(e=e.replace(RegExp("/"+n+"/?$"),"/")),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),k=T[0],O=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:O(!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 O(!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:k&&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."})))))}}}]);
@@ -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("@nocobase/client"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("plugin-build-ui-template/client-v2",["@nocobase/client-v2","react","antd","@nocobase/client","@ant-design/icons"],t):"object"==typeof exports?exports["plugin-build-ui-template/client-v2"]=t(require("@nocobase/client-v2"),require("react"),require("antd"),require("@nocobase/client"),require("@ant-design/icons")):e["plugin-build-ui-template/client-v2"]=t(e["@nocobase/client-v2"],e.react,e.antd,e["@nocobase/client"],e["@ant-design/icons"])}(self,function(e,t,n,r,o){return function(){"use strict";var i,u,c,a={375:function(e){e.exports=o},342:function(e){e.exports=r},485:function(t){t.exports=e},59:function(e){e.exports=n},155:function(e){e.exports=t}},l={};function p(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return a[e](n,n.exports,p),n.exports}p.m=a,p.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(t,{a:t}),t},p.d=function(e,t){for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.f={},p.e=function(e){return Promise.all(Object.keys(p.f).reduce(function(t,n){return p.f[n](e,t),t},[]))},p.u=function(e){return""+e+".b4d1d20b1e27ac78.js"},p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),p.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f={},p.l=function(e,t,n,r){if(f[e])return void f[e].push(t);if(void 0!==n)for(var o,i,u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var a=u[c];if(a.getAttribute("src")==e||a.getAttribute("data-rspack")=="plugin-build-ui-template/client-v2:"+n){o=a;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,p.nc&&o.setAttribute("nonce",p.nc),o.setAttribute("data-rspack","plugin-build-ui-template/client-v2:"+n),o.src=e),f[e]=[t];var l=function(t,n){o.onerror=o.onload=null,clearTimeout(s);var r=f[e];if(delete f[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},p.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},p.g.importScripts&&(s=p.g.location+"");var f,s,d=p.g.document;if(!s&&d&&(d.currentScript&&"SCRIPT"===d.currentScript.tagName.toUpperCase()&&(s=d.currentScript.src),!s)){var b=d.getElementsByTagName("script");if(b.length)for(var v=b.length-1;v>-1&&(!s||!/^http(s?):/.test(s));)s=b[v--].src}if(!s)throw Error("Automatic publicPath is not supported in this browser");p.p=s.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i={889:0},p.f.j=function(e,t){var n=p.o(i,e)?i[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=p.p+p.u(e),u=Error();p.l(o,function(t){if(p.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}},u=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],a=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)p.o(u,n)&&(p.m[n]=u[n]);c&&c(p)}for(e&&e(t);a<o.length;a++)r=o[a],p.o(i,r)&&i[r]&&i[r][0](),i[r]=0},(c=self.webpackChunkplugin_build_ui_template_client_v2=self.webpackChunkplugin_build_ui_template_client_v2||[]).forEach(u.bind(null,0)),c.push=u.bind(null,c.push.bind(c));var h={};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 n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/plugin-build-ui-template/dist/client-v2/")}if(!e){var r=window.__nocobase_modern_client_prefix__||"v",o="/"+(r=String(r).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var i=window.location.pathname||"/",u=i.indexOf(o);e=u>=0?i.slice(0,u+1):"/"}e&&(e=e.replace(RegExp("/"+r+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/plugin-build-ui-template/dist/client-v2/"}p.p=e}(),!function(){p.r(h),p.d(h,{default:function(){return c}});var e=p(485);function t(e,t,n,r,o,i,u){try{var c=e[i](u),a=c.value}catch(e){n(e);return}c.done?t(a):Promise.resolve(a).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)}p(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 c=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),c=Object.defineProperty;return c(u,"next",{value:a(0)}),c(u,"throw",{value:a(1)}),c(u,"return",{value:a(2)}),"function"==typeof Symbol&&c(u,Symbol.iterator,{value:function(){return this}}),u;function a(c){return function(a){var l=[c,a];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 p.e("380").then(p.bind(p,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 c(e){t(u,o,i,c,a,"next",e)}function a(e){t(u,o,i,c,a,"throw",e)}c(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))}(),h}()});
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&&(e=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/plugin-build-ui-template/dist/client-v2/")}if(!e){var r=window.__nocobase_modern_client_prefix__||"v",o="/"+(r=String(r).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var i=window.location.pathname||"/",u=i.indexOf(o);e=u>=0?i.slice(0,u+1):"/"}e&&(e=e.replace(RegExp("/"+r+"/?$"),"/")),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}()});
@@ -9,10 +9,10 @@
9
9
 
10
10
  module.exports = {
11
11
  "react": "18.2.0",
12
- "@nocobase/client": "2.1.6",
12
+ "@nocobase/client-v2": "2.1.6",
13
13
  "antd": "5.24.2",
14
14
  "@ant-design/icons": "5.6.1",
15
- "@nocobase/client-v2": "2.1.6",
15
+ "@nocobase/client": "2.1.6",
16
16
  "@nocobase/server": "2.1.6",
17
17
  "@nocobase/actions": "2.1.6",
18
18
  "@nocobase/database": "2.1.6",
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.3",
8
+ "version": "1.0.4",
9
9
  "license": "Apache-2.0",
10
10
  "keywords": [
11
11
  "ai",
@@ -1,10 +0,0 @@
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(342),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.useAPIClient)(),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],P=m((0,n.useState)(null),2),L=P[0],O=P[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?(O(e),A.setFieldsValue({title:e.title,llmService:e.llmService,model:e.model,systemPrompt:e.systemPrompt,promptRequirements:e.promptRequirements,type:e.type,targetCollection:e.targetCollection})):(O(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:L?"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(),!L)return[3,3];return[4,e.resource("aiBuildUiTemplateSpaces").update({filterByTk:L.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."})))))}}}]);