@next-bricks/ai-portal 0.40.1 → 0.41.0

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.
Files changed (53) hide show
  1. package/dist/bricks.json +19 -17
  2. package/dist/chunks/2608.e0bf7de9.js +2 -0
  3. package/dist/chunks/2608.e0bf7de9.js.map +1 -0
  4. package/dist/chunks/{8616.ceae4e7b.js → 3689.2a3f6d8c.js} +3 -3
  5. package/dist/chunks/{8616.ceae4e7b.js.map → 3689.2a3f6d8c.js.map} +1 -1
  6. package/dist/chunks/{382.d2e3f46f.js → 382.6655f2dc.js} +2 -2
  7. package/dist/chunks/{382.d2e3f46f.js.map → 382.6655f2dc.js.map} +1 -1
  8. package/dist/chunks/{4957.f878df32.js → 4957.b0937d56.js} +3 -3
  9. package/dist/chunks/{4957.f878df32.js.map → 4957.b0937d56.js.map} +1 -1
  10. package/dist/chunks/{5521.ef48a4d3.js → 5521.eeb5a205.js} +2 -2
  11. package/dist/chunks/{5521.ef48a4d3.js.map → 5521.eeb5a205.js.map} +1 -1
  12. package/dist/chunks/{6862.32630cc8.js → 6862.fc9c39ee.js} +3 -3
  13. package/dist/chunks/{6862.32630cc8.js.map → 6862.fc9c39ee.js.map} +1 -1
  14. package/dist/chunks/chat-box.9c68697e.js +2 -0
  15. package/dist/chunks/chat-box.9c68697e.js.map +1 -0
  16. package/dist/chunks/elevo-logo.dc137a3c.js +2 -0
  17. package/dist/chunks/elevo-logo.dc137a3c.js.map +1 -0
  18. package/dist/chunks/elevo-sidebar.08b20757.js +3 -0
  19. package/dist/chunks/elevo-sidebar.08b20757.js.map +1 -0
  20. package/dist/chunks/{goal-card-list.9866674c.js → goal-card-list.7a0aecb2.js} +3 -3
  21. package/dist/chunks/goal-card-list.7a0aecb2.js.map +1 -0
  22. package/dist/chunks/{home-container.9f9ca1ca.js → home-container.211ba989.js} +2 -2
  23. package/dist/chunks/{home-container.9f9ca1ca.js.map → home-container.211ba989.js.map} +1 -1
  24. package/dist/chunks/{main.41cfca3c.js → main.8a0a20f0.js} +2 -2
  25. package/dist/chunks/{main.41cfca3c.js.map → main.8a0a20f0.js.map} +1 -1
  26. package/dist/chunks/page-container.099db5b9.js +2 -0
  27. package/dist/chunks/{page-container.a637a6c4.js.map → page-container.099db5b9.js.map} +1 -1
  28. package/dist/examples.json +15 -12
  29. package/dist/index.b28b88f6.js +2 -0
  30. package/dist/index.b28b88f6.js.map +1 -0
  31. package/dist/manifest.json +146 -137
  32. package/dist/types.json +379 -374
  33. package/dist-types/bootstrap.d.ts +1 -0
  34. package/dist-types/elevo-logo/index.d.ts +9 -0
  35. package/dist-types/elevo-logo/index.spec.d.ts +1 -0
  36. package/dist-types/goal-card-list/CardItem/CardItem.d.ts +1 -1
  37. package/docs/elevo-logo.md +9 -0
  38. package/package.json +2 -2
  39. package/dist/chunks/8176.0dd744df.js +0 -2
  40. package/dist/chunks/8176.0dd744df.js.map +0 -1
  41. package/dist/chunks/chat-box.6ae456b3.js +0 -2
  42. package/dist/chunks/chat-box.6ae456b3.js.map +0 -1
  43. package/dist/chunks/elevo-sidebar.199ad1c6.js +0 -3
  44. package/dist/chunks/elevo-sidebar.199ad1c6.js.map +0 -1
  45. package/dist/chunks/goal-card-list.9866674c.js.map +0 -1
  46. package/dist/chunks/page-container.a637a6c4.js +0 -2
  47. package/dist/index.624ef877.js +0 -2
  48. package/dist/index.624ef877.js.map +0 -1
  49. /package/dist/chunks/{8616.ceae4e7b.js.LICENSE.txt → 3689.2a3f6d8c.js.LICENSE.txt} +0 -0
  50. /package/dist/chunks/{4957.f878df32.js.LICENSE.txt → 4957.b0937d56.js.LICENSE.txt} +0 -0
  51. /package/dist/chunks/{6862.32630cc8.js.LICENSE.txt → 6862.fc9c39ee.js.LICENSE.txt} +0 -0
  52. /package/dist/chunks/{elevo-sidebar.199ad1c6.js.LICENSE.txt → elevo-sidebar.08b20757.js.LICENSE.txt} +0 -0
  53. /package/dist/chunks/{goal-card-list.9866674c.js.LICENSE.txt → goal-card-list.7a0aecb2.js.LICENSE.txt} +0 -0
@@ -1,3 +1,3 @@
1
- /*! For license information please see 8616.ceae4e7b.js.LICENSE.txt */
2
- "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[8616],{26785:(e,t,i)=>{i.d(t,{Y:()=>f});var a=i(89575),n=i(18769),o=i.n(n),r=i(21302),l=i.n(r),s=i(53373),c=i.n(s),d=i(57372);const p=async(e,t)=>(await d.http.post("api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search",e,t)).data;var m=i(41030),u=i(99671),g=i(42965),h=i(97907),E=i(98343);const f=(0,n.forwardRef)(b);function b(e,t){let{activeId:i,actions:r,urlTemplate:s,onActionClick:d,onHistoryClick:f}=e;const b=(0,n.useRef)(null),[v,x]=(0,n.useState)(null),[y,k]=(0,n.useState)(),[w,T]=(0,n.useState)();(0,n.useEffect)((()=>{Promise.all([p({next_token:w},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;x((e=>[...null!=e?e:[],...t.data])),k(t.next_token)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[w]);const A=(0,n.useMemo)((()=>{const e=new Map,t=l()(),i=t.clone().startOf("day"),a=i.clone().subtract(1,"day"),n=i.clone().subtract(7,"days"),o=i.clone().subtract(30,"days"),r=+i/1e3,s=+a/1e3,c=+n/1e3,d=+o/1e3,p=+t.clone().startOf("year")/1e3;for(const t of null!=v?v:[]){let i;i=t.startTime>=r?(0,u.t)(u.K.TODAY):t.startTime>=s?(0,u.t)(u.K.YESTERDAY):t.startTime>=c?(0,u.t)(u.K.PREVIOUS_7_DAYS):t.startTime>=d?(0,u.t)(u.K.PREVIOUS_30_DAYS):t.startTime>=p?l()(1e3*t.startTime).format("MMMM"):l()(1e3*t.startTime).format("YYYY");let a=e.get(i);a||e.set(i,a={title:i,items:[]}),a.items.push(t)}return[...e.values()]}),[v]),[O,_]=(0,n.useState)(null),N=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=N.current,t=b.current;if(!e||!y||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&T(y)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[y]);const S=(0,n.useRef)(0),C=(0,n.useCallback)((async()=>{try{const e=++S.current,t=await p({},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==S.current)return;x((e=>{const i=null!=e?e:[],a=t.data,n=new Set(a.map((e=>e.id))),o=new Map(a.map((e=>[e.id,e])));let r=!1,l=!1,s=!0;for(const e of i){const t=o.get(e.id);if(!t)break;if(r=!0,l=s&&t!==a[0]||!(0,m.isEqual)(t,e),l)break;s=!1}return r?l?[...a,...i.filter((e=>!n.has(e.id)))]:e:(k(t.next_token),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);return(0,n.useImperativeHandle)(t,(()=>({pull:C})),[C]),v?o().createElement("div",{className:"history",ref:b},o().createElement("ul",null,A.map((e=>o().createElement("li",{key:e.title,className:"group"},o().createElement("div",{className:"group-title"},e.title),o().createElement("ul",{className:"items"},e.items.map((e=>o().createElement("li",{key:e.id},o().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.id===O,active:e.id===i}),onClick:f},s?{url:(0,E.Q)(s,e)}:null),o().createElement("div",{className:"item-title",title:e.title},e.title),o().createElement(g.qu,{className:"actions",actions:r,onActionClick:t=>{d({action:t.detail,item:e})},onVisibleChange:t=>{_(t.detail?e.id:null)}}),!h.QB.includes(e.state)&&o().createElement("div",{className:"working"})))))))))),y&&o().createElement("div",{className:"load-more",ref:N},o().createElement(g.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))):o().createElement("div",{className:"history"},o().createElement("div",{className:"loading"},o().createElement(g.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))}},42965:(e,t,i)=>{i.d(t,{Bj:()=>n,EM:()=>o,JQ:()=>l,Py:()=>c,qb:()=>r,qu:()=>s});var a=i(11280);const n=(0,a.wrapBrick)("eo-icon"),o=(0,a.wrapBrick)("eo-link"),r=(0,a.wrapBrick)("eo-dropdown-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),l=(0,a.wrapBrick)("eo-easyops-avatar"),s=(0,a.wrapBrick)("eo-mini-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),c=(0,a.wrapBrick)("ai-portal.icon-button")},45646:(e,t,i)=>{i.d(t,{D:()=>E});var a=i(89575),n=i(18769),o=i.n(n),r=i(53373),l=i.n(r),s=i(57372);const c=async(e,t)=>(await s.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations",{...t,params:e})).data;var d=i(41030),p=i(99671),m=i(42965),u=i(97907),g=i(98343);const h={lib:"fa",icon:"plus"},E=(0,n.forwardRef)(f);function f(e,t){let{historyActiveId:i,historyActions:r,historyUrlTemplate:E,projectActiveId:f,projectUrlTemplate:b,projectActions:v,onActionClick:x,onHistoryClick:y,onProjectActionClick:k,onAddProject:w}=e;const T=(0,n.useRef)(null),[A,O]=(0,n.useState)(null),[_,N]=(0,n.useState)(!1),[S,C]=(0,n.useState)(!1),[I,R]=(0,n.useState)(null),[P,Y]=(0,n.useState)(!1),[U,D]=(0,n.useState)(),[j,M]=(0,n.useState)(),[B,V]=(0,n.useState)(!1),L=(0,n.useRef)(!0),[H,J]=(0,n.useState)([]),q=(0,n.useMemo)((()=>[...null!=r?r:[],{isDropdown:!0,text:(0,p.t)(p.K.MOVE_TO_PROJECT),disabled:!(null!=A&&A.length),items:null==A?void 0:A.map((e=>({event:"move",key:e.instanceId,text:e.name,project:e})))}]),[r,A]);(0,n.useEffect)((()=>{(async()=>{try{const e=await(async()=>(await s.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/projects",{params:{page:1,page_size:3e3}})).data)();O(e.list)}catch(e){console.error("Error loading projects:",e),C(!0),O([])}})()}),[]),(0,n.useEffect)((()=>{Promise.all([c({token:j,limit:30,onlyOwner:!0,onlyUnrelatedProject:!0},{interceptorParams:{ignoreLoadingBar:!0}}),...L.current?[]:[new Promise((e=>setTimeout(e,500)))]]).then((e=>{let[t]=e;L.current=!1,R((e=>[...null!=e?e:[],...t.conversations])),D(t.nextToken)})).catch((e=>{console.error("Error loading chat history:",e),R([]),V(!0)}))}),[j]);const[z,G]=(0,n.useState)(null),K=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=K.current,t=T.current;if(!e||!U||!t||P)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&M(U)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[U,P]);const W=(0,n.useRef)(0),Q=(0,n.useCallback)((async()=>{try{const e=++W.current,t=await c({limit:30,onlyOwner:!0,onlyUnrelatedProject:!0},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==W.current)return;R((e=>{const i=null!=e?e:[],a=t.conversations,n=new Set(a.map((e=>e.conversationId))),o=new Map(a.map((e=>[e.conversationId,e])));let r=!1,l=!1,s=!0;for(const e of i){const t=o.get(e.conversationId);if(!t)break;if(r=!0,l=s&&t!==a[0]||!(0,d.isEqual)(t,e),l)break;s=!1}return r?l?[...a,...i.filter((e=>!n.has(e.conversationId)))]:e:(D(t.nextToken),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);(0,n.useImperativeHandle)(t,(()=>({pull:Q,removeProject:e=>{O((t=>t?t.filter((t=>t.instanceId!==e)):t))},addProject:e=>{O((t=>t?[...t,e]:[e]))},moveConversation:e=>{J((t=>[...t,e]))}})),[Q]);const F=(0,n.useMemo)((()=>I&&I.length?I.filter((e=>!H.includes(e.conversationId))):I),[I,H]);return o().createElement("div",{className:"history",ref:T},o().createElement("div",{className:l()("section",{collapsed:_})},o().createElement("div",{className:"section-title"},o().createElement("div",{className:"section-label",onClick:()=>N((e=>!e))},(0,p.t)(p.K.PROJECTS),o().createElement(m.Bj,{lib:"fa",icon:"angle-down"})),o().createElement(m.Py,{icon:h,variant:"mini-light",tooltip:(0,p.t)(p.K.CREATE_PROJECT),onClick:w})),o().createElement("ul",{className:"items"},S?o().createElement("li",{className:"error"},"Failed to load project"):A?A.map((e=>o().createElement("li",{key:e.instanceId},o().createElement(m.EM,(0,a.A)({className:l()("item",{"actions-active":e.instanceId===z,active:e.instanceId===f}),onClick:y},b?{url:(0,g.Q)(b,e)}:null),o().createElement("div",{className:"item-title",title:e.name},e.name||(0,p.t)(p.K.UNNAMED)),o().createElement(m.qu,{className:"actions",actions:v,onActionClick:t=>{k({action:t.detail,project:e})},onVisibleChange:t=>{G(t.detail?e.instanceId:null)}}))))):o().createElement("li",{className:"loading"},o().createElement(m.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))),o().createElement("div",{className:l()("section",{collapsed:P})},o().createElement("div",{className:"section-title"},o().createElement("div",{className:"section-label",onClick:()=>Y((e=>!e))},(0,p.t)(p.K.HISTORY),o().createElement(m.Bj,{lib:"fa",icon:"angle-down"}))),o().createElement("ul",{className:"items"},F?F.map((e=>o().createElement("li",{key:e.conversationId},o().createElement(m.EM,(0,a.A)({className:l()("item",{"actions-active":e.conversationId===z,active:e.conversationId===i}),onClick:y},E?{url:(0,g.Q)(E,e)}:null),o().createElement("div",{className:"item-title",title:e.title},e.title||(0,p.t)(p.K.UNTITLED)),o().createElement(m.qu,{className:"actions",actions:q,onActionClick:t=>{x({action:t.detail,item:e})},onVisibleChange:t=>{G(t.detail?e.conversationId:null)}}),!u.QB.includes(e.state)&&o().createElement("div",{className:"working"}))))):o().createElement("li",{className:"loading"},o().createElement(m.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})),B?o().createElement("li",{className:"error"},"Failed to load chat history"):null),!P&&U&&o().createElement("div",{className:"load-more",ref:K},o().createElement(m.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))))}},48688:(e,t,i)=>{e.exports=i.p+"images/e47076cc.png"},61408:(e,t,i)=>{i.d(t,{A:()=>l});var a=i(36758),n=i.n(a),o=i(40935),r=i.n(o)()(n());r.push([e.id,':host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:1;width:260px;height:100%;background:rgba(246,247,249,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:23px 11px 0;display:flex;flex-direction:column;transition:transform 0.3s ease-in-out}.logo-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;margin-left:4px}.logo-link::part(link){display:block}.logo{vertical-align:middle}.new-chat::part(link){display:flex;gap:0;align-items:center;color:var(--elevo-color-brand);font-size:14px;text-align:left;cursor:pointer}.sidebar .new-chat::part(link){background:#f0f4ff;border-radius:8px;border:1px solid #c9d7ff;padding:9px 13px;font-weight:500;margin-bottom:16px}.sidebar .new-chat::part(link):hover{background:rgba(201,215,255,0.5)}.new-chat-icon{font-size:16px;margin-right:5px}.footer{border-top:1px solid rgba(0,0,0,0.04);padding:9px 12px;margin:0 -12px}.dropdown{display:block}.account{background:none;border:none;border-radius:8px;padding:6px 10px;display:block;width:100%;text-align:left;cursor:pointer}.account:hover{background:rgba(0,0,0,0.04)}.alternative{position:fixed;top:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;transition:opacity 0.2s ease-in-out;background:rgba(255,255,255,0);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.alternative .new-chat::part(link){padding:4px;margin-left:16px;font-size:12px}.alternative .new-chat::part(link):hover{color:#7891ff}.alternative .new-chat::part(link):active{color:#0911b3}.container{width:270px;padding:10px 0 10px 10px;height:100%;transition:width 0.3s ease-in-out,padding 0.3s ease-in-out}.container.collapsed{width:0;padding:10px 0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior="drawer"]){z-index:1;width:0}:host(:not([behavior="drawer"])) .alternative .new-chat{display:none}.mask{position:fixed;top:0;right:0;bottom:0;left:0}.links{border-bottom:1px solid rgba(0,0,0,0.06);padding-bottom:16px;margin-bottom:16px}.link{display:block}.link + .link{margin-top:4px}.link::part(link){display:flex;gap:0;align-items:center;padding:7px 10px;border-radius:8px;color:#000}.link::part(link):hover{background:rgba(0,0,0,0.04)}.link .icon{font-size:16px;margin-right:10px}.link .title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history{flex:1;min-height:0;overflow-y:auto;margin:0 -12px;padding:0 12px}.history ul{list-style:none;margin:0;padding:0}.history .section + .section{margin-top:14px}.history .section-title{display:flex;align-items:center;justify-content:space-between;height:30px;margin-bottom:6px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:24px;padding:0 8px;margin-left:-8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#8c8c8c;border-radius:8px}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .section-label:hover{background:rgba(0,0,0,0.04)}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .error,.history .loading{display:flex;align-items:center;height:36px;padding:0 8px}.history .loading{justify-content:center}.history .error{color:var(--color-error)}.history .group + .group{margin-top:15px}.history .group-title{font-weight:500;font-size:12px;color:#000;padding:8px;height:36px;line-height:20px}.history .item{display:block}.history .item::part(link){display:flex;align-items:center;padding:0 8px;height:36px;border-radius:8px;color:#000}.history .item.active::part(link){background:rgba(0,0,0,0.06)}.history .item.actions-active::part(link),.history .item::part(link):hover{background:rgba(0,0,0,0.04)}.history .item-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history .actions{cursor:auto}.history .item:not(:hover):not(.actions-active) .actions{display:none}.history .working{width:8px;height:8px;border-radius:8px;background:var(--elevo-color-brand);margin:0 7px}.history .item.actions-active .working,.history .item:hover .working,.history .item.active .working{display:none}.history .load-more{display:flex;justify-content:center;align-items:center;height:36px}',""]);const l=r.toString()},99671:(e,t,i)=>{i.d(t,{I:()=>s,K:()=>n,NS:()=>l,t:()=>c});var a=i(87117);let n=function(e){return e.NEW_CHAT="NEW_CHAT",e.LOGOUT="LOGOUT",e.TODAY="TODAY",e.YESTERDAY="YESTERDAY",e.PREVIOUS_7_DAYS="PREVIOUS_7_DAYS",e.PREVIOUS_30_DAYS="PREVIOUS_30_DAYS",e.SWITCH_LANGUAGE="SWITCH_LANGUAGE",e.PROJECTS="PROJECTS",e.HISTORY="HISTORY",e.CREATE_PROJECT="CREATE_PROJECT",e.MOVE_TO_PROJECT="MOVE_TO_PROJECT",e.UNTITLED="UNTITLED",e.UNNAMED="UNNAMED",e}({});const o={[n.NEW_CHAT]:"New chat",[n.LOGOUT]:"Logout",[n.TODAY]:"Today",[n.YESTERDAY]:"Yesterday",[n.PREVIOUS_7_DAYS]:"Previous 7 days",[n.PREVIOUS_30_DAYS]:"Previous 30 days",[n.SWITCH_LANGUAGE]:"中文",[n.PROJECTS]:"Project management",[n.HISTORY]:"Chat history",[n.CREATE_PROJECT]:"Create project",[n.MOVE_TO_PROJECT]:"Move to project",[n.UNTITLED]:"Untitled",[n.UNNAMED]:"Unnamed"},r={[n.NEW_CHAT]:"新对话",[n.LOGOUT]:"登出",[n.TODAY]:"今天",[n.YESTERDAY]:"昨天",[n.PREVIOUS_7_DAYS]:"过去7天",[n.PREVIOUS_30_DAYS]:"过去30天",[n.SWITCH_LANGUAGE]:"English",[n.PROJECTS]:"项目管理",[n.HISTORY]:"历史对话",[n.CREATE_PROJECT]:"创建项目",[n.MOVE_TO_PROJECT]:"移动到项目",[n.UNTITLED]:"无标题",[n.UNNAMED]:"未命名"},l="bricks/ai-portal/elevo-sidebar",s={en:o,zh:r},c=a.i18n.getFixedT(null,l)}}]);
3
- //# sourceMappingURL=8616.ceae4e7b.js.map
1
+ /*! For license information please see 3689.2a3f6d8c.js.LICENSE.txt */
2
+ "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[3689],{26785:(e,t,i)=>{i.d(t,{Y:()=>f});var a=i(89575),n=i(18769),o=i.n(n),r=i(21302),l=i.n(r),s=i(53373),c=i.n(s),d=i(57372);const p=async(e,t)=>(await d.http.post("api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search",e,t)).data;var m=i(41030),u=i(99671),g=i(42965),h=i(97907),E=i(98343);const f=(0,n.forwardRef)(b);function b(e,t){let{activeId:i,actions:r,urlTemplate:s,onActionClick:d,onHistoryClick:f}=e;const b=(0,n.useRef)(null),[v,x]=(0,n.useState)(null),[y,k]=(0,n.useState)(),[w,T]=(0,n.useState)();(0,n.useEffect)((()=>{Promise.all([p({next_token:w},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;x((e=>[...null!=e?e:[],...t.data])),k(t.next_token)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[w]);const A=(0,n.useMemo)((()=>{const e=new Map,t=l()(),i=t.clone().startOf("day"),a=i.clone().subtract(1,"day"),n=i.clone().subtract(7,"days"),o=i.clone().subtract(30,"days"),r=+i/1e3,s=+a/1e3,c=+n/1e3,d=+o/1e3,p=+t.clone().startOf("year")/1e3;for(const t of null!=v?v:[]){let i;i=t.startTime>=r?(0,u.t)(u.K.TODAY):t.startTime>=s?(0,u.t)(u.K.YESTERDAY):t.startTime>=c?(0,u.t)(u.K.PREVIOUS_7_DAYS):t.startTime>=d?(0,u.t)(u.K.PREVIOUS_30_DAYS):t.startTime>=p?l()(1e3*t.startTime).format("MMMM"):l()(1e3*t.startTime).format("YYYY");let a=e.get(i);a||e.set(i,a={title:i,items:[]}),a.items.push(t)}return[...e.values()]}),[v]),[O,_]=(0,n.useState)(null),N=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=N.current,t=b.current;if(!e||!y||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&T(y)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[y]);const S=(0,n.useRef)(0),C=(0,n.useCallback)((async()=>{try{const e=++S.current,t=await p({},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==S.current)return;x((e=>{const i=null!=e?e:[],a=t.data,n=new Set(a.map((e=>e.id))),o=new Map(a.map((e=>[e.id,e])));let r=!1,l=!1,s=!0;for(const e of i){const t=o.get(e.id);if(!t)break;if(r=!0,l=s&&t!==a[0]||!(0,m.isEqual)(t,e),l)break;s=!1}return r?l?[...a,...i.filter((e=>!n.has(e.id)))]:e:(k(t.next_token),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);return(0,n.useImperativeHandle)(t,(()=>({pull:C})),[C]),v?o().createElement("div",{className:"history",ref:b},o().createElement("ul",null,A.map((e=>o().createElement("li",{key:e.title,className:"group"},o().createElement("div",{className:"group-title"},e.title),o().createElement("ul",{className:"items"},e.items.map((e=>o().createElement("li",{key:e.id},o().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.id===O,active:e.id===i}),onClick:f},s?{url:(0,E.Q)(s,e)}:null),o().createElement("div",{className:"item-title",title:e.title},e.title),o().createElement(g.qu,{className:"actions",actions:r,onActionClick:t=>{d({action:t.detail,item:e})},onVisibleChange:t=>{_(t.detail?e.id:null)}}),!h.QB.includes(e.state)&&o().createElement("div",{className:"working"})))))))))),y&&o().createElement("div",{className:"load-more",ref:N},o().createElement(g.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))):o().createElement("div",{className:"history"},o().createElement("div",{className:"loading"},o().createElement(g.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))}},42965:(e,t,i)=>{i.d(t,{Bj:()=>n,EM:()=>o,JQ:()=>l,Py:()=>c,qb:()=>r,qu:()=>s});var a=i(11280);const n=(0,a.wrapBrick)("eo-icon"),o=(0,a.wrapBrick)("eo-link"),r=(0,a.wrapBrick)("eo-dropdown-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),l=(0,a.wrapBrick)("eo-easyops-avatar"),s=(0,a.wrapBrick)("eo-mini-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),c=(0,a.wrapBrick)("ai-portal.icon-button")},45646:(e,t,i)=>{i.d(t,{D:()=>E});var a=i(89575),n=i(18769),o=i.n(n),r=i(53373),l=i.n(r),s=i(57372);const c=async(e,t)=>(await s.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations",{...t,params:e})).data;var d=i(41030),p=i(99671),m=i(42965),u=i(97907),g=i(98343);const h={lib:"fa",icon:"plus"},E=(0,n.forwardRef)(f);function f(e,t){let{historyActiveId:i,historyActions:r,historyUrlTemplate:E,projectActiveId:f,projectUrlTemplate:b,projectActions:v,onActionClick:x,onHistoryClick:y,onProjectActionClick:k,onAddProject:w}=e;const T=(0,n.useRef)(null),[A,O]=(0,n.useState)(null),[_,N]=(0,n.useState)(!1),[S,C]=(0,n.useState)(!1),[I,R]=(0,n.useState)(null),[P,Y]=(0,n.useState)(!1),[U,D]=(0,n.useState)(),[j,M]=(0,n.useState)(),[B,V]=(0,n.useState)(!1),L=(0,n.useRef)(!0),[H,J]=(0,n.useState)([]),q=(0,n.useMemo)((()=>[...null!=r?r:[],{isDropdown:!0,text:(0,p.t)(p.K.MOVE_TO_PROJECT),disabled:!(null!=A&&A.length),items:null==A?void 0:A.map((e=>({event:"move",key:e.instanceId,text:e.name,project:e})))}]),[r,A]);(0,n.useEffect)((()=>{(async()=>{try{const e=await(async()=>(await s.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/projects",{params:{page:1,page_size:3e3}})).data)();O(e.list)}catch(e){console.error("Error loading projects:",e),C(!0),O([])}})()}),[]),(0,n.useEffect)((()=>{Promise.all([c({token:j,limit:30,onlyOwner:!0,onlyUnrelatedProject:!0},{interceptorParams:{ignoreLoadingBar:!0}}),...L.current?[]:[new Promise((e=>setTimeout(e,500)))]]).then((e=>{let[t]=e;L.current=!1,R((e=>[...null!=e?e:[],...t.conversations])),D(t.nextToken)})).catch((e=>{console.error("Error loading chat history:",e),R([]),V(!0)}))}),[j]);const[z,G]=(0,n.useState)(null),K=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=K.current,t=T.current;if(!e||!U||!t||P)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&M(U)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[U,P]);const W=(0,n.useRef)(0),Q=(0,n.useCallback)((async()=>{try{const e=++W.current,t=await c({limit:30,onlyOwner:!0,onlyUnrelatedProject:!0},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==W.current)return;R((e=>{const i=null!=e?e:[],a=t.conversations,n=new Set(a.map((e=>e.conversationId))),o=new Map(a.map((e=>[e.conversationId,e])));let r=!1,l=!1,s=!0;for(const e of i){const t=o.get(e.conversationId);if(!t)break;if(r=!0,l=s&&t!==a[0]||!(0,d.isEqual)(t,e),l)break;s=!1}return r?l?[...a,...i.filter((e=>!n.has(e.conversationId)))]:e:(D(t.nextToken),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);(0,n.useImperativeHandle)(t,(()=>({pull:Q,removeProject:e=>{O((t=>t?t.filter((t=>t.instanceId!==e)):t))},addProject:e=>{O((t=>t?[...t,e]:[e]))},moveConversation:e=>{J((t=>[...t,e]))}})),[Q]);const F=(0,n.useMemo)((()=>I&&I.length?I.filter((e=>!H.includes(e.conversationId))):I),[I,H]);return o().createElement("div",{className:"history",ref:T},o().createElement("div",{className:l()("section",{collapsed:_})},o().createElement("div",{className:"section-title"},o().createElement("div",{className:"section-label",onClick:()=>N((e=>!e))},(0,p.t)(p.K.PROJECTS),o().createElement(m.Bj,{lib:"fa",icon:"angle-down"})),o().createElement(m.Py,{icon:h,variant:"mini-light",tooltip:(0,p.t)(p.K.CREATE_PROJECT),onClick:w})),o().createElement("ul",{className:"items"},S?o().createElement("li",{className:"error"},"Failed to load project"):A?A.map((e=>o().createElement("li",{key:e.instanceId},o().createElement(m.EM,(0,a.A)({className:l()("item",{"actions-active":e.instanceId===z,active:e.instanceId===f}),onClick:y},b?{url:(0,g.Q)(b,e)}:null),o().createElement("div",{className:"item-title",title:e.name},e.name||(0,p.t)(p.K.UNNAMED)),o().createElement(m.qu,{className:"actions",actions:v,onActionClick:t=>{k({action:t.detail,project:e})},onVisibleChange:t=>{G(t.detail?e.instanceId:null)}}))))):o().createElement("li",{className:"loading"},o().createElement(m.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))),o().createElement("div",{className:l()("section",{collapsed:P})},o().createElement("div",{className:"section-title"},o().createElement("div",{className:"section-label",onClick:()=>Y((e=>!e))},(0,p.t)(p.K.HISTORY),o().createElement(m.Bj,{lib:"fa",icon:"angle-down"}))),o().createElement("ul",{className:"items"},F?F.map((e=>o().createElement("li",{key:e.conversationId},o().createElement(m.EM,(0,a.A)({className:l()("item",{"actions-active":e.conversationId===z,active:e.conversationId===i}),onClick:y},E?{url:(0,g.Q)(E,e)}:null),o().createElement("div",{className:"item-title",title:e.title},e.title||(0,p.t)(p.K.UNTITLED)),o().createElement(m.qu,{className:"actions",actions:q,onActionClick:t=>{x({action:t.detail,item:e})},onVisibleChange:t=>{G(t.detail?e.conversationId:null)}}),!u.QB.includes(e.state)&&o().createElement("div",{className:"working"}))))):o().createElement("li",{className:"loading"},o().createElement(m.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})),B?o().createElement("li",{className:"error"},"Failed to load chat history"):null),!P&&U&&o().createElement("div",{className:"load-more",ref:K},o().createElement(m.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))))}},61408:(e,t,i)=>{i.d(t,{A:()=>l});var a=i(36758),n=i.n(a),o=i(40935),r=i.n(o)()(n());r.push([e.id,':host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:1;width:260px;height:100%;background:rgba(246,247,249,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:23px 11px 0;display:flex;flex-direction:column;transition:transform 0.3s ease-in-out}.logo-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;margin-left:4px}.logo-link::part(link){display:block}.logo{vertical-align:middle}.new-chat::part(link){display:flex;gap:0;align-items:center;color:var(--elevo-color-brand);font-size:14px;text-align:left;cursor:pointer}.sidebar .new-chat::part(link){background:#f0f4ff;border-radius:8px;border:1px solid #c9d7ff;padding:9px 13px;font-weight:500;margin-bottom:16px}.sidebar .new-chat::part(link):hover{background:rgba(201,215,255,0.5)}.new-chat-icon{font-size:16px;margin-right:5px}.footer{border-top:1px solid rgba(0,0,0,0.04);padding:9px 12px;margin:0 -12px}.dropdown{display:block}.account{background:none;border:none;border-radius:8px;padding:6px 10px;display:block;width:100%;text-align:left;cursor:pointer}.account:hover{background:rgba(0,0,0,0.04)}.alternative{position:fixed;top:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;transition:opacity 0.2s ease-in-out;background:rgba(255,255,255,0);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.alternative .new-chat::part(link){padding:4px;margin-left:16px;font-size:12px}.alternative .new-chat::part(link):hover{color:#7891ff}.alternative .new-chat::part(link):active{color:#0911b3}.container{width:270px;padding:10px 0 10px 10px;height:100%;transition:width 0.3s ease-in-out,padding 0.3s ease-in-out}.container.collapsed{width:0;padding:10px 0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior="drawer"]){z-index:1;width:0}:host(:not([behavior="drawer"])) .alternative .new-chat{display:none}.mask{position:fixed;top:0;right:0;bottom:0;left:0}.links{border-bottom:1px solid rgba(0,0,0,0.06);padding-bottom:16px;margin-bottom:16px}.link{display:block}.link + .link{margin-top:4px}.link::part(link){display:flex;gap:0;align-items:center;padding:7px 10px;border-radius:8px;color:#000}.link::part(link):hover{background:rgba(0,0,0,0.04)}.link .icon{font-size:16px;margin-right:10px}.link .title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history{flex:1;min-height:0;overflow-y:auto;margin:0 -12px;padding:0 12px}.history ul{list-style:none;margin:0;padding:0}.history .section + .section{margin-top:14px}.history .section-title{display:flex;align-items:center;justify-content:space-between;height:30px;margin-bottom:6px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:24px;padding:0 8px;margin-left:-8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#8c8c8c;border-radius:8px}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .section-label:hover{background:rgba(0,0,0,0.04)}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .error,.history .loading{display:flex;align-items:center;height:36px;padding:0 8px}.history .loading{justify-content:center}.history .error{color:var(--color-error)}.history .group + .group{margin-top:15px}.history .group-title{font-weight:500;font-size:12px;color:#000;padding:8px;height:36px;line-height:20px}.history .item{display:block}.history .item::part(link){display:flex;align-items:center;padding:0 8px;height:36px;border-radius:8px;color:#000}.history .item.active::part(link){background:rgba(0,0,0,0.06)}.history .item.actions-active::part(link),.history .item::part(link):hover{background:rgba(0,0,0,0.04)}.history .item-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history .actions{cursor:auto}.history .item:not(:hover):not(.actions-active) .actions{display:none}.history .working{width:8px;height:8px;border-radius:8px;background:var(--elevo-color-brand);margin:0 7px}.history .item.actions-active .working,.history .item:hover .working,.history .item.active .working{display:none}.history .load-more{display:flex;justify-content:center;align-items:center;height:36px}',""]);const l=r.toString()},99671:(e,t,i)=>{i.d(t,{I:()=>s,K:()=>n,NS:()=>l,t:()=>c});var a=i(87117);let n=function(e){return e.NEW_CHAT="NEW_CHAT",e.LOGOUT="LOGOUT",e.TODAY="TODAY",e.YESTERDAY="YESTERDAY",e.PREVIOUS_7_DAYS="PREVIOUS_7_DAYS",e.PREVIOUS_30_DAYS="PREVIOUS_30_DAYS",e.SWITCH_LANGUAGE="SWITCH_LANGUAGE",e.PROJECTS="PROJECTS",e.HISTORY="HISTORY",e.CREATE_PROJECT="CREATE_PROJECT",e.MOVE_TO_PROJECT="MOVE_TO_PROJECT",e.UNTITLED="UNTITLED",e.UNNAMED="UNNAMED",e}({});const o={[n.NEW_CHAT]:"New chat",[n.LOGOUT]:"Logout",[n.TODAY]:"Today",[n.YESTERDAY]:"Yesterday",[n.PREVIOUS_7_DAYS]:"Previous 7 days",[n.PREVIOUS_30_DAYS]:"Previous 30 days",[n.SWITCH_LANGUAGE]:"中文",[n.PROJECTS]:"Project management",[n.HISTORY]:"Chat history",[n.CREATE_PROJECT]:"Create project",[n.MOVE_TO_PROJECT]:"Move to project",[n.UNTITLED]:"Untitled",[n.UNNAMED]:"Unnamed"},r={[n.NEW_CHAT]:"新对话",[n.LOGOUT]:"登出",[n.TODAY]:"今天",[n.YESTERDAY]:"昨天",[n.PREVIOUS_7_DAYS]:"过去7天",[n.PREVIOUS_30_DAYS]:"过去30天",[n.SWITCH_LANGUAGE]:"English",[n.PROJECTS]:"项目管理",[n.HISTORY]:"历史对话",[n.CREATE_PROJECT]:"创建项目",[n.MOVE_TO_PROJECT]:"移动到项目",[n.UNTITLED]:"无标题",[n.UNNAMED]:"未命名"},l="bricks/ai-portal/elevo-sidebar",s={en:o,zh:r},c=a.i18n.getFixedT(null,l)}}]);
3
+ //# sourceMappingURL=3689.2a3f6d8c.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunks/8616.ceae4e7b.js","mappings":"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","sources":["webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/agent_flow/searchTaskForAgentFlow.js","webpack:///./src/elevo-sidebar/LegacyChatHistory.tsx","webpack:///./src/elevo-sidebar/bricks.ts","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/getElevoProjects.js","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/listElevoConversations.js","webpack:///./src/elevo-sidebar/ChatHistory.tsx","webpack:///./src/elevo-sidebar/styles.shadow.css","webpack:///./src/elevo-sidebar/i18n.ts"],"sourcesContent":["import { http } from \"@next-core/http\";\n/**\n * @description 分页查询agent flow, 默认只查询最近三个页的数据\n * @endpoint POST /api/v1/llm/agent/flow/search\n */\nexport const AgentFlowApi_searchTaskForAgentFlow = async (data, options) => /**! @contract easyops.api.llm.agent_flow.SearchTaskForAgentFlow@1.0.0 */(await http.post(\"api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search\", data, options)).data;\n//# sourceMappingURL=searchTaskForAgentFlow.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport { AgentFlowApi_searchTaskForAgentFlow } from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport { isEqual } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.js\";\nimport { WrappedIcon, WrappedLink, WrappedMiniActions } from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport type { ChatHistoryRef } from \"./ChatHistory.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\n\ninterface LegacyHistoryItem {\n id: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\ninterface LegacyGroupedHistory {\n title: string;\n items: LegacyHistoryItem[];\n}\n\nexport interface LegacyActionClickDetail {\n action: SimpleActionType;\n item: LegacyHistoryItem;\n}\n\nexport interface LegacyChatHistoryProps {\n activeId?: string;\n urlTemplate?: string;\n actions?: ActionType[];\n onActionClick: (detail: LegacyActionClickDetail) => void;\n onHistoryClick: () => void;\n}\n\nexport const LegacyChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n activeId,\n actions,\n urlTemplate,\n onActionClick,\n onHistoryClick,\n }: LegacyChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [list, setList] = useState<LegacyHistoryItem[] | null>(null);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n\n useEffect(() => {\n Promise.all([\n AgentFlowApi_searchTaskForAgentFlow(\n { next_token: loadNextToken },\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ])\n .then(([data]) => {\n setList((prev) => [\n ...(prev ?? []),\n ...(data.data as LegacyHistoryItem[]),\n ]);\n setNextToken(data.next_token);\n })\n .catch((error) => {\n if (process.env.NODE_ENV !== \"test\") {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n }\n });\n }, [loadNextToken]);\n\n const groups = useMemo(() => {\n const groupMap = new Map<string, LegacyGroupedHistory>();\n // Group history by\n // - today\n // - yesterday\n // - previous 7 days\n // - previous 30 days\n // - each month this year\n // - each year before.\n const now = moment();\n const startOfDay = now.clone().startOf(\"day\");\n const yesterday = startOfDay.clone().subtract(1, \"day\");\n const sevenDaysAgo = startOfDay.clone().subtract(7, \"days\");\n const thirtyDaysAgo = startOfDay.clone().subtract(30, \"days\");\n const thisYear = now.clone().startOf(\"year\");\n\n const timestamps = {\n startOfDay: +startOfDay / 1000,\n yesterday: +yesterday / 1000,\n sevenDaysAgo: +sevenDaysAgo / 1000,\n thirtyDaysAgo: +thirtyDaysAgo / 1000,\n thisYear: +thisYear / 1000,\n };\n for (const item of list ?? []) {\n let groupKey: string;\n if (item.startTime >= timestamps.startOfDay) {\n groupKey = t(K.TODAY);\n } else if (item.startTime >= timestamps.yesterday) {\n groupKey = t(K.YESTERDAY);\n } else if (item.startTime >= timestamps.sevenDaysAgo) {\n groupKey = t(K.PREVIOUS_7_DAYS);\n } else if (item.startTime >= timestamps.thirtyDaysAgo) {\n groupKey = t(K.PREVIOUS_30_DAYS);\n } else if (item.startTime >= timestamps.thisYear) {\n groupKey = moment(item.startTime * 1000).format(\"MMMM\");\n } else {\n groupKey = moment(item.startTime * 1000).format(\"YYYY\");\n }\n let group = groupMap.get(groupKey);\n if (!group) {\n groupMap.set(groupKey, (group = { title: groupKey, items: [] }));\n }\n group.items.push(item);\n }\n\n return [...groupMap.values()];\n }, [list]);\n\n const [actionsVisible, setActionsVisible] = useState<string | null>(null);\n\n const nextRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const next = nextRef.current;\n const root = rootRef.current;\n if (!next || !nextToken || !root) {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setLoadNextToken(nextToken);\n }\n }\n },\n { root }\n );\n observer.observe(next);\n return () => {\n observer.disconnect();\n };\n }, [nextToken]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await AgentFlowApi_searchTaskForAgentFlow(\n {},\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n if (pullId !== pullIdRef.current) {\n // Ignore this pull if a newer one has been triggered\n return;\n }\n setList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.data as LegacyHistoryItem[];\n const newIds = new Set(newList.map((item) => item.id));\n const newItemsMap = new Map(newList.map((item) => [item.id, item]));\n\n let foundIntersection = false;\n let foundChanged = false;\n let isFirst = true;\n for (const item of prevList) {\n const newItem = newItemsMap.get(item.id);\n if (newItem) {\n foundIntersection = true;\n foundChanged =\n (isFirst && newItem !== newList[0]) || !isEqual(newItem, item);\n if (foundChanged) {\n break;\n }\n } else {\n break;\n }\n isFirst = false;\n }\n\n if (!foundIntersection) {\n setNextToken(tempList.next_token);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.id)),\n ];\n }\n\n return prev;\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error pulling chat history:\", error);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n pull,\n }),\n [pull]\n );\n\n if (!list) {\n return (\n <div className=\"history\">\n <div className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"history\" ref={rootRef}>\n <ul>\n {groups.map((group) => (\n <li key={group.title} className=\"group\">\n <div className=\"group-title\">{group.title}</div>\n <ul className=\"items\">\n {group.items.map((item) => (\n <li key={item.id}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.id === actionsVisible,\n active: item.id === activeId,\n })}\n onClick={onHistoryClick}\n {...(urlTemplate\n ? { url: parseTemplate(urlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={actions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? item.id : null);\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n {nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping,\n} from \"@next-bricks/basic/dropdown-actions\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport type {\n EoMiniActions,\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping,\n EoMiniActionsProps,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedDropdownActions = wrapBrick<\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping\n>(\"eo-dropdown-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedEasyopsAvatar = wrapBrick<\n EoEasyopsAvatar,\n EoEasyopsAvatarProps\n>(\"eo-easyops-avatar\");\nexport const WrappedMiniActions = wrapBrick<\n EoMiniActions,\n EoMiniActionsProps,\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping\n>(\"eo-mini-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo项目列表\n * @endpoint list /api/v1/elevo/projects\n */\nexport const ElevoApi_getElevoProjects = async (params, options) => /**! @contract easyops.api.llm.elevo.GetElevoProjects@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/projects\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=getElevoProjects.js.map","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo会话列表\n * @endpoint GET /api/v1/elevo/conversations\n */\nexport const ElevoApi_listElevoConversations = async (params, options) => /**! @contract easyops.api.llm.elevo.ListElevoConversations@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=listElevoConversations.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport {\n ElevoApi_listElevoConversations,\n ElevoApi_getElevoProjects,\n type ElevoApi_ListElevoConversationsRequestParams,\n} from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport { isEqual } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.js\";\nimport {\n WrappedIcon,\n WrappedLink,\n WrappedMiniActions,\n WrappedIconButton,\n} from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\n\nconst ADD_ICON: GeneralIconProps = {\n lib: \"fa\",\n icon: \"plus\",\n};\n\nexport interface HistoryItem {\n conversationId: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\nexport interface GroupedHistory {\n title: string;\n items: HistoryItem[];\n}\n\nexport interface ActionClickDetail {\n action: SimpleActionType;\n item: HistoryItem;\n project?: Project;\n}\n\nexport interface ProjectActionClickDetail {\n action: SimpleActionType;\n project: Project;\n}\n\nexport interface Project {\n /** 实例ID */\n instanceId: string;\n /** 项目名称 */\n name: string;\n /** 项目描述 */\n description: string;\n /** 状态 */\n state: \"active\" | \"inactive\";\n /** 默认数字人ID */\n defaultAiEmployeeId: string;\n /** 创建者 */\n creator: string;\n /** 创建时间 */\n ctime: string;\n /** 修改时间 */\n mtime: string;\n /** 修改者 */\n modifier: string;\n}\n\nexport interface ChatHistoryProps {\n historyActiveId?: string;\n historyUrlTemplate?: string;\n historyActions?: ActionType[];\n projectActiveId?: string;\n projectUrlTemplate?: string;\n projectActions?: ActionType[];\n onActionClick: (detail: ActionClickDetail) => void;\n onHistoryClick: () => void;\n onProjectActionClick: (detail: ProjectActionClickDetail) => void;\n onAddProject: () => void;\n}\n\nexport interface ChatHistoryRef {\n pull: () => void;\n removeProject?: (projectId: string) => void;\n addProject?: (project: Project) => void;\n moveConversation?: (conversationId: string) => void;\n}\n\nexport const ChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n historyActiveId,\n historyActions,\n historyUrlTemplate,\n projectActiveId,\n projectUrlTemplate,\n projectActions,\n onActionClick,\n onHistoryClick,\n onProjectActionClick,\n onAddProject,\n }: ChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [projects, setProjects] = useState<Project[] | null>(null);\n const [projectsCollapsed, setProjectsCollapsed] = useState(false);\n const [projectsError, setProjectsError] = useState(false);\n const [historyList, setHistoryList] = useState<HistoryItem[] | null>(null);\n const [historyCollapsed, setHistoryCollapsed] = useState(false);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n const [historyError, setHistoryError] = useState(false);\n const initialRef = useRef(true);\n const [movedConversations, setMovedConversations] = useState<string[]>([]);\n\n const mergedHistoryActions = useMemo(\n () =>\n [\n ...(historyActions ?? []),\n {\n isDropdown: true,\n text: t(K.MOVE_TO_PROJECT),\n disabled: !projects?.length,\n items: projects?.map((project) => ({\n event: \"move\",\n key: project.instanceId,\n text: project.name,\n project,\n })),\n },\n ] as ActionType[],\n [historyActions, projects]\n );\n\n useEffect(() => {\n (async () => {\n try {\n const projects = await ElevoApi_getElevoProjects({\n page: 1,\n page_size: 3000,\n });\n setProjects(projects.list as Project[]);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error loading projects:\", error);\n setProjectsError(true);\n setProjects([]);\n }\n })();\n }, []);\n\n useEffect(() => {\n Promise.all([\n ElevoApi_listElevoConversations(\n {\n token: loadNextToken,\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n ...(initialRef.current\n ? []\n : [\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ]),\n ])\n .then(([data]) => {\n initialRef.current = false;\n setHistoryList((prev) => [\n ...(prev ?? []),\n ...(data.conversations as HistoryItem[]),\n ]);\n setNextToken(data.nextToken);\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n setHistoryList([]);\n setHistoryError(true);\n });\n }, [loadNextToken]);\n\n const [actionsVisible, setActionsVisible] = useState<string | null>(null);\n\n const nextRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const next = nextRef.current;\n const root = rootRef.current;\n if (!next || !nextToken || !root || historyCollapsed) {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setLoadNextToken(nextToken);\n }\n }\n },\n { root }\n );\n observer.observe(next);\n return () => {\n observer.disconnect();\n };\n }, [nextToken, historyCollapsed]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await ElevoApi_listElevoConversations(\n {\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n if (pullId !== pullIdRef.current) {\n // Ignore this pull if a newer one has been triggered\n return;\n }\n setHistoryList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.conversations as HistoryItem[];\n const newIds = new Set(newList.map((item) => item.conversationId));\n const newItemsMap = new Map(\n newList.map((item) => [item.conversationId, item])\n );\n\n let foundIntersection = false;\n let foundChanged = false;\n let isFirst = true;\n for (const item of prevList) {\n const newItem = newItemsMap.get(item.conversationId);\n if (newItem) {\n foundIntersection = true;\n foundChanged =\n (isFirst && newItem !== newList[0]) || !isEqual(newItem, item);\n if (foundChanged) {\n break;\n }\n } else {\n break;\n }\n isFirst = false;\n }\n\n if (!foundIntersection) {\n setNextToken(tempList.nextToken);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.conversationId)),\n ];\n }\n\n return prev;\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error pulling chat history:\", error);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n pull,\n removeProject: (projectId: string) => {\n setProjects((prev) =>\n prev ? prev.filter((p) => p.instanceId !== projectId) : prev\n );\n },\n addProject: (project: Project) => {\n setProjects((prev) => (prev ? [...prev, project] : [project]));\n },\n moveConversation: (conversationId: string) => {\n setMovedConversations((prev) => [...prev, conversationId]);\n },\n }),\n [pull]\n );\n\n const filteredHistoryList = useMemo(() => {\n if (!historyList || !historyList.length) {\n return historyList;\n }\n return historyList.filter(\n (item) => !movedConversations.includes(item.conversationId)\n );\n }, [historyList, movedConversations]);\n\n return (\n <div className=\"history\" ref={rootRef}>\n <div className={classNames(\"section\", { collapsed: projectsCollapsed })}>\n <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setProjectsCollapsed((prev) => !prev)}\n >\n {t(K.PROJECTS)}\n <WrappedIcon lib=\"fa\" icon=\"angle-down\" />\n </div>\n <WrappedIconButton\n icon={ADD_ICON}\n variant=\"mini-light\"\n tooltip={t(K.CREATE_PROJECT)}\n onClick={onAddProject}\n />\n </div>\n <ul className=\"items\">\n {projectsError ? (\n <li className=\"error\">Failed to load project</li>\n ) : projects ? (\n projects.map((project) => (\n <li key={project.instanceId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": project.instanceId === actionsVisible,\n active: project.instanceId === projectActiveId,\n })}\n onClick={onHistoryClick}\n {...(projectUrlTemplate\n ? { url: parseTemplate(projectUrlTemplate, project) }\n : null)}\n >\n <div className=\"item-title\" title={project.name}>\n {project.name || t(K.UNNAMED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={projectActions}\n onActionClick={(e) => {\n onProjectActionClick({ action: e.detail, project });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? project.instanceId : null);\n }}\n />\n </WrappedLink>\n </li>\n ))\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n </ul>\n </div>\n <div className={classNames(\"section\", { collapsed: historyCollapsed })}>\n <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setHistoryCollapsed((prev) => !prev)}\n >\n {t(K.HISTORY)}\n <WrappedIcon lib=\"fa\" icon=\"angle-down\" />\n </div>\n </div>\n <ul className=\"items\">\n {filteredHistoryList ? (\n filteredHistoryList.map((item) => (\n <li key={item.conversationId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.conversationId === actionsVisible,\n active: item.conversationId === historyActiveId,\n })}\n onClick={onHistoryClick}\n {...(historyUrlTemplate\n ? { url: parseTemplate(historyUrlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title || t(K.UNTITLED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={mergedHistoryActions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? item.conversationId : null);\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n </li>\n ))\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n {historyError ? (\n <li className=\"error\">Failed to load chat history</li>\n ) : null}\n </ul>\n {!historyCollapsed && nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:1;width:260px;height:100%;background:rgba(246,247,249,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:23px 11px 0;display:flex;flex-direction:column;transition:transform 0.3s ease-in-out}.logo-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;margin-left:4px}.logo-link::part(link){display:block}.logo{vertical-align:middle}.new-chat::part(link){display:flex;gap:0;align-items:center;color:var(--elevo-color-brand);font-size:14px;text-align:left;cursor:pointer}.sidebar .new-chat::part(link){background:#f0f4ff;border-radius:8px;border:1px solid #c9d7ff;padding:9px 13px;font-weight:500;margin-bottom:16px}.sidebar .new-chat::part(link):hover{background:rgba(201,215,255,0.5)}.new-chat-icon{font-size:16px;margin-right:5px}.footer{border-top:1px solid rgba(0,0,0,0.04);padding:9px 12px;margin:0 -12px}.dropdown{display:block}.account{background:none;border:none;border-radius:8px;padding:6px 10px;display:block;width:100%;text-align:left;cursor:pointer}.account:hover{background:rgba(0,0,0,0.04)}.alternative{position:fixed;top:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;transition:opacity 0.2s ease-in-out;background:rgba(255,255,255,0);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.alternative .new-chat::part(link){padding:4px;margin-left:16px;font-size:12px}.alternative .new-chat::part(link):hover{color:#7891ff}.alternative .new-chat::part(link):active{color:#0911b3}.container{width:270px;padding:10px 0 10px 10px;height:100%;transition:width 0.3s ease-in-out,padding 0.3s ease-in-out}.container.collapsed{width:0;padding:10px 0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior=\"drawer\"]){z-index:1;width:0}:host(:not([behavior=\"drawer\"])) .alternative .new-chat{display:none}.mask{position:fixed;top:0;right:0;bottom:0;left:0}.links{border-bottom:1px solid rgba(0,0,0,0.06);padding-bottom:16px;margin-bottom:16px}.link{display:block}.link + .link{margin-top:4px}.link::part(link){display:flex;gap:0;align-items:center;padding:7px 10px;border-radius:8px;color:#000}.link::part(link):hover{background:rgba(0,0,0,0.04)}.link .icon{font-size:16px;margin-right:10px}.link .title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history{flex:1;min-height:0;overflow-y:auto;margin:0 -12px;padding:0 12px}.history ul{list-style:none;margin:0;padding:0}.history .section + .section{margin-top:14px}.history .section-title{display:flex;align-items:center;justify-content:space-between;height:30px;margin-bottom:6px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:24px;padding:0 8px;margin-left:-8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#8c8c8c;border-radius:8px}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .section-label:hover{background:rgba(0,0,0,0.04)}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .error,.history .loading{display:flex;align-items:center;height:36px;padding:0 8px}.history .loading{justify-content:center}.history .error{color:var(--color-error)}.history .group + .group{margin-top:15px}.history .group-title{font-weight:500;font-size:12px;color:#000;padding:8px;height:36px;line-height:20px}.history .item{display:block}.history .item::part(link){display:flex;align-items:center;padding:0 8px;height:36px;border-radius:8px;color:#000}.history .item.active::part(link){background:rgba(0,0,0,0.06)}.history .item.actions-active::part(link),.history .item::part(link):hover{background:rgba(0,0,0,0.04)}.history .item-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history .actions{cursor:auto}.history .item:not(:hover):not(.actions-active) .actions{display:none}.history .working{width:8px;height:8px;border-radius:8px;background:var(--elevo-color-brand);margin:0 7px}.history .item.actions-active .working,.history .item:hover .working,.history .item.active .working{display:none}.history .load-more{display:flex;justify-content:center;align-items:center;height:36px}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n NEW_CHAT = \"NEW_CHAT\",\n LOGOUT = \"LOGOUT\",\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n PREVIOUS_7_DAYS = \"PREVIOUS_7_DAYS\",\n PREVIOUS_30_DAYS = \"PREVIOUS_30_DAYS\",\n SWITCH_LANGUAGE = \"SWITCH_LANGUAGE\",\n PROJECTS = \"PROJECTS\",\n HISTORY = \"HISTORY\",\n CREATE_PROJECT = \"CREATE_PROJECT\",\n MOVE_TO_PROJECT = \"MOVE_TO_PROJECT\",\n UNTITLED = \"UNTITLED\",\n UNNAMED = \"UNNAMED\",\n}\n\nconst en: Locale = {\n [K.NEW_CHAT]: \"New chat\",\n [K.LOGOUT]: \"Logout\",\n [K.TODAY]: \"Today\",\n [K.YESTERDAY]: \"Yesterday\",\n [K.PREVIOUS_7_DAYS]: \"Previous 7 days\",\n [K.PREVIOUS_30_DAYS]: \"Previous 30 days\",\n [K.SWITCH_LANGUAGE]: \"中文\",\n [K.PROJECTS]: \"Project management\",\n [K.HISTORY]: \"Chat history\",\n [K.CREATE_PROJECT]: \"Create project\",\n [K.MOVE_TO_PROJECT]: \"Move to project\",\n [K.UNTITLED]: \"Untitled\",\n [K.UNNAMED]: \"Unnamed\",\n};\n\nconst zh: Locale = {\n [K.NEW_CHAT]: \"新对话\",\n [K.LOGOUT]: \"登出\",\n [K.TODAY]: \"今天\",\n [K.YESTERDAY]: \"昨天\",\n [K.PREVIOUS_7_DAYS]: \"过去7天\",\n [K.PREVIOUS_30_DAYS]: \"过去30天\",\n [K.SWITCH_LANGUAGE]: \"English\",\n [K.PROJECTS]: \"项目管理\",\n [K.HISTORY]: \"历史对话\",\n [K.CREATE_PROJECT]: \"创建项目\",\n [K.MOVE_TO_PROJECT]: \"移动到项目\",\n [K.UNTITLED]: \"无标题\",\n [K.UNNAMED]: \"未命名\",\n};\n\nexport const NS = \"bricks/ai-portal/elevo-sidebar\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n"],"names":["AgentFlowApi_searchTaskForAgentFlow","async","data","options","http","post","LegacyChatHistory","forwardRef","LowLevelChatHistory","_ref","ref","activeId","actions","urlTemplate","onActionClick","onHistoryClick","rootRef","useRef","list","setList","useState","nextToken","setNextToken","loadNextToken","setLoadNextToken","useEffect","Promise","all","next_token","interceptorParams","ignoreLoadingBar","resolve","setTimeout","then","_ref2","prev","catch","error","console","groups","useMemo","groupMap","Map","now","moment","startOfDay","clone","startOf","yesterday","subtract","sevenDaysAgo","thirtyDaysAgo","timestamps","item","groupKey","startTime","t","K","TODAY","YESTERDAY","PREVIOUS_7_DAYS","PREVIOUS_30_DAYS","format","group","get","set","title","items","push","values","actionsVisible","setActionsVisible","nextRef","next","current","root","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","pullIdRef","pull","useCallback","pullId","tempList","prevList","newList","newIds","Set","map","id","newItemsMap","foundIntersection","foundChanged","isFirst","newItem","isEqual","filter","has","useImperativeHandle","React","className","key","WrappedLink","_extends","classNames","active","onClick","url","parseTemplate","WrappedMiniActions","e","action","detail","onVisibleChange","DONE_STATES","includes","state","WrappedIcon","lib","icon","spinning","theme","wrapBrick","WrappedDropdownActions","WrappedEasyopsAvatar","WrappedIconButton","ElevoApi_listElevoConversations","params","ADD_ICON","ChatHistory","historyActiveId","historyActions","historyUrlTemplate","projectActiveId","projectUrlTemplate","projectActions","onProjectActionClick","onAddProject","projects","setProjects","projectsCollapsed","setProjectsCollapsed","projectsError","setProjectsError","historyList","setHistoryList","historyCollapsed","setHistoryCollapsed","historyError","setHistoryError","initialRef","movedConversations","setMovedConversations","mergedHistoryActions","isDropdown","text","MOVE_TO_PROJECT","disabled","length","project","event","instanceId","name","page","page_size","ElevoApi_getElevoProjects","token","limit","onlyOwner","onlyUnrelatedProject","conversations","conversationId","removeProject","projectId","p","addProject","moveConversation","filteredHistoryList","collapsed","PROJECTS","variant","tooltip","CREATE_PROJECT","UNNAMED","HISTORY","UNTITLED","___CSS_LOADER_EXPORT___","module","toString","en","NEW_CHAT","LOGOUT","SWITCH_LANGUAGE","zh","NS","locales","i18n","getFixedT"],"sourceRoot":""}
1
+ {"version":3,"file":"chunks/3689.2a3f6d8c.js","mappings":"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","sources":["webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/agent_flow/searchTaskForAgentFlow.js","webpack:///./src/elevo-sidebar/LegacyChatHistory.tsx","webpack:///./src/elevo-sidebar/bricks.ts","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/getElevoProjects.js","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/listElevoConversations.js","webpack:///./src/elevo-sidebar/ChatHistory.tsx","webpack:///./src/elevo-sidebar/styles.shadow.css","webpack:///./src/elevo-sidebar/i18n.ts"],"sourcesContent":["import { http } from \"@next-core/http\";\n/**\n * @description 分页查询agent flow, 默认只查询最近三个页的数据\n * @endpoint POST /api/v1/llm/agent/flow/search\n */\nexport const AgentFlowApi_searchTaskForAgentFlow = async (data, options) => /**! @contract easyops.api.llm.agent_flow.SearchTaskForAgentFlow@1.0.0 */(await http.post(\"api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search\", data, options)).data;\n//# sourceMappingURL=searchTaskForAgentFlow.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport { AgentFlowApi_searchTaskForAgentFlow } from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport { isEqual } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.js\";\nimport { WrappedIcon, WrappedLink, WrappedMiniActions } from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport type { ChatHistoryRef } from \"./ChatHistory.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\n\ninterface LegacyHistoryItem {\n id: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\ninterface LegacyGroupedHistory {\n title: string;\n items: LegacyHistoryItem[];\n}\n\nexport interface LegacyActionClickDetail {\n action: SimpleActionType;\n item: LegacyHistoryItem;\n}\n\nexport interface LegacyChatHistoryProps {\n activeId?: string;\n urlTemplate?: string;\n actions?: ActionType[];\n onActionClick: (detail: LegacyActionClickDetail) => void;\n onHistoryClick: () => void;\n}\n\nexport const LegacyChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n activeId,\n actions,\n urlTemplate,\n onActionClick,\n onHistoryClick,\n }: LegacyChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [list, setList] = useState<LegacyHistoryItem[] | null>(null);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n\n useEffect(() => {\n Promise.all([\n AgentFlowApi_searchTaskForAgentFlow(\n { next_token: loadNextToken },\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ])\n .then(([data]) => {\n setList((prev) => [\n ...(prev ?? []),\n ...(data.data as LegacyHistoryItem[]),\n ]);\n setNextToken(data.next_token);\n })\n .catch((error) => {\n if (process.env.NODE_ENV !== \"test\") {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n }\n });\n }, [loadNextToken]);\n\n const groups = useMemo(() => {\n const groupMap = new Map<string, LegacyGroupedHistory>();\n // Group history by\n // - today\n // - yesterday\n // - previous 7 days\n // - previous 30 days\n // - each month this year\n // - each year before.\n const now = moment();\n const startOfDay = now.clone().startOf(\"day\");\n const yesterday = startOfDay.clone().subtract(1, \"day\");\n const sevenDaysAgo = startOfDay.clone().subtract(7, \"days\");\n const thirtyDaysAgo = startOfDay.clone().subtract(30, \"days\");\n const thisYear = now.clone().startOf(\"year\");\n\n const timestamps = {\n startOfDay: +startOfDay / 1000,\n yesterday: +yesterday / 1000,\n sevenDaysAgo: +sevenDaysAgo / 1000,\n thirtyDaysAgo: +thirtyDaysAgo / 1000,\n thisYear: +thisYear / 1000,\n };\n for (const item of list ?? []) {\n let groupKey: string;\n if (item.startTime >= timestamps.startOfDay) {\n groupKey = t(K.TODAY);\n } else if (item.startTime >= timestamps.yesterday) {\n groupKey = t(K.YESTERDAY);\n } else if (item.startTime >= timestamps.sevenDaysAgo) {\n groupKey = t(K.PREVIOUS_7_DAYS);\n } else if (item.startTime >= timestamps.thirtyDaysAgo) {\n groupKey = t(K.PREVIOUS_30_DAYS);\n } else if (item.startTime >= timestamps.thisYear) {\n groupKey = moment(item.startTime * 1000).format(\"MMMM\");\n } else {\n groupKey = moment(item.startTime * 1000).format(\"YYYY\");\n }\n let group = groupMap.get(groupKey);\n if (!group) {\n groupMap.set(groupKey, (group = { title: groupKey, items: [] }));\n }\n group.items.push(item);\n }\n\n return [...groupMap.values()];\n }, [list]);\n\n const [actionsVisible, setActionsVisible] = useState<string | null>(null);\n\n const nextRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const next = nextRef.current;\n const root = rootRef.current;\n if (!next || !nextToken || !root) {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setLoadNextToken(nextToken);\n }\n }\n },\n { root }\n );\n observer.observe(next);\n return () => {\n observer.disconnect();\n };\n }, [nextToken]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await AgentFlowApi_searchTaskForAgentFlow(\n {},\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n if (pullId !== pullIdRef.current) {\n // Ignore this pull if a newer one has been triggered\n return;\n }\n setList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.data as LegacyHistoryItem[];\n const newIds = new Set(newList.map((item) => item.id));\n const newItemsMap = new Map(newList.map((item) => [item.id, item]));\n\n let foundIntersection = false;\n let foundChanged = false;\n let isFirst = true;\n for (const item of prevList) {\n const newItem = newItemsMap.get(item.id);\n if (newItem) {\n foundIntersection = true;\n foundChanged =\n (isFirst && newItem !== newList[0]) || !isEqual(newItem, item);\n if (foundChanged) {\n break;\n }\n } else {\n break;\n }\n isFirst = false;\n }\n\n if (!foundIntersection) {\n setNextToken(tempList.next_token);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.id)),\n ];\n }\n\n return prev;\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error pulling chat history:\", error);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n pull,\n }),\n [pull]\n );\n\n if (!list) {\n return (\n <div className=\"history\">\n <div className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"history\" ref={rootRef}>\n <ul>\n {groups.map((group) => (\n <li key={group.title} className=\"group\">\n <div className=\"group-title\">{group.title}</div>\n <ul className=\"items\">\n {group.items.map((item) => (\n <li key={item.id}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.id === actionsVisible,\n active: item.id === activeId,\n })}\n onClick={onHistoryClick}\n {...(urlTemplate\n ? { url: parseTemplate(urlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={actions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? item.id : null);\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n {nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping,\n} from \"@next-bricks/basic/dropdown-actions\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport type {\n EoMiniActions,\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping,\n EoMiniActionsProps,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedDropdownActions = wrapBrick<\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping\n>(\"eo-dropdown-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedEasyopsAvatar = wrapBrick<\n EoEasyopsAvatar,\n EoEasyopsAvatarProps\n>(\"eo-easyops-avatar\");\nexport const WrappedMiniActions = wrapBrick<\n EoMiniActions,\n EoMiniActionsProps,\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping\n>(\"eo-mini-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo项目列表\n * @endpoint list /api/v1/elevo/projects\n */\nexport const ElevoApi_getElevoProjects = async (params, options) => /**! @contract easyops.api.llm.elevo.GetElevoProjects@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/projects\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=getElevoProjects.js.map","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo会话列表\n * @endpoint GET /api/v1/elevo/conversations\n */\nexport const ElevoApi_listElevoConversations = async (params, options) => /**! @contract easyops.api.llm.elevo.ListElevoConversations@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=listElevoConversations.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport {\n ElevoApi_listElevoConversations,\n ElevoApi_getElevoProjects,\n type ElevoApi_ListElevoConversationsRequestParams,\n} from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport { isEqual } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.js\";\nimport {\n WrappedIcon,\n WrappedLink,\n WrappedMiniActions,\n WrappedIconButton,\n} from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\n\nconst ADD_ICON: GeneralIconProps = {\n lib: \"fa\",\n icon: \"plus\",\n};\n\nexport interface HistoryItem {\n conversationId: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\nexport interface GroupedHistory {\n title: string;\n items: HistoryItem[];\n}\n\nexport interface ActionClickDetail {\n action: SimpleActionType;\n item: HistoryItem;\n project?: Project;\n}\n\nexport interface ProjectActionClickDetail {\n action: SimpleActionType;\n project: Project;\n}\n\nexport interface Project {\n /** 实例ID */\n instanceId: string;\n /** 项目名称 */\n name: string;\n /** 项目描述 */\n description: string;\n /** 状态 */\n state: \"active\" | \"inactive\";\n /** 默认数字人ID */\n defaultAiEmployeeId: string;\n /** 创建者 */\n creator: string;\n /** 创建时间 */\n ctime: string;\n /** 修改时间 */\n mtime: string;\n /** 修改者 */\n modifier: string;\n}\n\nexport interface ChatHistoryProps {\n historyActiveId?: string;\n historyUrlTemplate?: string;\n historyActions?: ActionType[];\n projectActiveId?: string;\n projectUrlTemplate?: string;\n projectActions?: ActionType[];\n onActionClick: (detail: ActionClickDetail) => void;\n onHistoryClick: () => void;\n onProjectActionClick: (detail: ProjectActionClickDetail) => void;\n onAddProject: () => void;\n}\n\nexport interface ChatHistoryRef {\n pull: () => void;\n removeProject?: (projectId: string) => void;\n addProject?: (project: Project) => void;\n moveConversation?: (conversationId: string) => void;\n}\n\nexport const ChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n historyActiveId,\n historyActions,\n historyUrlTemplate,\n projectActiveId,\n projectUrlTemplate,\n projectActions,\n onActionClick,\n onHistoryClick,\n onProjectActionClick,\n onAddProject,\n }: ChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [projects, setProjects] = useState<Project[] | null>(null);\n const [projectsCollapsed, setProjectsCollapsed] = useState(false);\n const [projectsError, setProjectsError] = useState(false);\n const [historyList, setHistoryList] = useState<HistoryItem[] | null>(null);\n const [historyCollapsed, setHistoryCollapsed] = useState(false);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n const [historyError, setHistoryError] = useState(false);\n const initialRef = useRef(true);\n const [movedConversations, setMovedConversations] = useState<string[]>([]);\n\n const mergedHistoryActions = useMemo(\n () =>\n [\n ...(historyActions ?? []),\n {\n isDropdown: true,\n text: t(K.MOVE_TO_PROJECT),\n disabled: !projects?.length,\n items: projects?.map((project) => ({\n event: \"move\",\n key: project.instanceId,\n text: project.name,\n project,\n })),\n },\n ] as ActionType[],\n [historyActions, projects]\n );\n\n useEffect(() => {\n (async () => {\n try {\n const projects = await ElevoApi_getElevoProjects({\n page: 1,\n page_size: 3000,\n });\n setProjects(projects.list as Project[]);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error loading projects:\", error);\n setProjectsError(true);\n setProjects([]);\n }\n })();\n }, []);\n\n useEffect(() => {\n Promise.all([\n ElevoApi_listElevoConversations(\n {\n token: loadNextToken,\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n ...(initialRef.current\n ? []\n : [\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ]),\n ])\n .then(([data]) => {\n initialRef.current = false;\n setHistoryList((prev) => [\n ...(prev ?? []),\n ...(data.conversations as HistoryItem[]),\n ]);\n setNextToken(data.nextToken);\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n setHistoryList([]);\n setHistoryError(true);\n });\n }, [loadNextToken]);\n\n const [actionsVisible, setActionsVisible] = useState<string | null>(null);\n\n const nextRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const next = nextRef.current;\n const root = rootRef.current;\n if (!next || !nextToken || !root || historyCollapsed) {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setLoadNextToken(nextToken);\n }\n }\n },\n { root }\n );\n observer.observe(next);\n return () => {\n observer.disconnect();\n };\n }, [nextToken, historyCollapsed]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await ElevoApi_listElevoConversations(\n {\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n if (pullId !== pullIdRef.current) {\n // Ignore this pull if a newer one has been triggered\n return;\n }\n setHistoryList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.conversations as HistoryItem[];\n const newIds = new Set(newList.map((item) => item.conversationId));\n const newItemsMap = new Map(\n newList.map((item) => [item.conversationId, item])\n );\n\n let foundIntersection = false;\n let foundChanged = false;\n let isFirst = true;\n for (const item of prevList) {\n const newItem = newItemsMap.get(item.conversationId);\n if (newItem) {\n foundIntersection = true;\n foundChanged =\n (isFirst && newItem !== newList[0]) || !isEqual(newItem, item);\n if (foundChanged) {\n break;\n }\n } else {\n break;\n }\n isFirst = false;\n }\n\n if (!foundIntersection) {\n setNextToken(tempList.nextToken);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.conversationId)),\n ];\n }\n\n return prev;\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error pulling chat history:\", error);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n pull,\n removeProject: (projectId: string) => {\n setProjects((prev) =>\n prev ? prev.filter((p) => p.instanceId !== projectId) : prev\n );\n },\n addProject: (project: Project) => {\n setProjects((prev) => (prev ? [...prev, project] : [project]));\n },\n moveConversation: (conversationId: string) => {\n setMovedConversations((prev) => [...prev, conversationId]);\n },\n }),\n [pull]\n );\n\n const filteredHistoryList = useMemo(() => {\n if (!historyList || !historyList.length) {\n return historyList;\n }\n return historyList.filter(\n (item) => !movedConversations.includes(item.conversationId)\n );\n }, [historyList, movedConversations]);\n\n return (\n <div className=\"history\" ref={rootRef}>\n <div className={classNames(\"section\", { collapsed: projectsCollapsed })}>\n <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setProjectsCollapsed((prev) => !prev)}\n >\n {t(K.PROJECTS)}\n <WrappedIcon lib=\"fa\" icon=\"angle-down\" />\n </div>\n <WrappedIconButton\n icon={ADD_ICON}\n variant=\"mini-light\"\n tooltip={t(K.CREATE_PROJECT)}\n onClick={onAddProject}\n />\n </div>\n <ul className=\"items\">\n {projectsError ? (\n <li className=\"error\">Failed to load project</li>\n ) : projects ? (\n projects.map((project) => (\n <li key={project.instanceId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": project.instanceId === actionsVisible,\n active: project.instanceId === projectActiveId,\n })}\n onClick={onHistoryClick}\n {...(projectUrlTemplate\n ? { url: parseTemplate(projectUrlTemplate, project) }\n : null)}\n >\n <div className=\"item-title\" title={project.name}>\n {project.name || t(K.UNNAMED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={projectActions}\n onActionClick={(e) => {\n onProjectActionClick({ action: e.detail, project });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? project.instanceId : null);\n }}\n />\n </WrappedLink>\n </li>\n ))\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n </ul>\n </div>\n <div className={classNames(\"section\", { collapsed: historyCollapsed })}>\n <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setHistoryCollapsed((prev) => !prev)}\n >\n {t(K.HISTORY)}\n <WrappedIcon lib=\"fa\" icon=\"angle-down\" />\n </div>\n </div>\n <ul className=\"items\">\n {filteredHistoryList ? (\n filteredHistoryList.map((item) => (\n <li key={item.conversationId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.conversationId === actionsVisible,\n active: item.conversationId === historyActiveId,\n })}\n onClick={onHistoryClick}\n {...(historyUrlTemplate\n ? { url: parseTemplate(historyUrlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title || t(K.UNTITLED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={mergedHistoryActions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? item.conversationId : null);\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n </li>\n ))\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n {historyError ? (\n <li className=\"error\">Failed to load chat history</li>\n ) : null}\n </ul>\n {!historyCollapsed && nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:1;width:260px;height:100%;background:rgba(246,247,249,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:23px 11px 0;display:flex;flex-direction:column;transition:transform 0.3s ease-in-out}.logo-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;margin-left:4px}.logo-link::part(link){display:block}.logo{vertical-align:middle}.new-chat::part(link){display:flex;gap:0;align-items:center;color:var(--elevo-color-brand);font-size:14px;text-align:left;cursor:pointer}.sidebar .new-chat::part(link){background:#f0f4ff;border-radius:8px;border:1px solid #c9d7ff;padding:9px 13px;font-weight:500;margin-bottom:16px}.sidebar .new-chat::part(link):hover{background:rgba(201,215,255,0.5)}.new-chat-icon{font-size:16px;margin-right:5px}.footer{border-top:1px solid rgba(0,0,0,0.04);padding:9px 12px;margin:0 -12px}.dropdown{display:block}.account{background:none;border:none;border-radius:8px;padding:6px 10px;display:block;width:100%;text-align:left;cursor:pointer}.account:hover{background:rgba(0,0,0,0.04)}.alternative{position:fixed;top:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;transition:opacity 0.2s ease-in-out;background:rgba(255,255,255,0);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.alternative .new-chat::part(link){padding:4px;margin-left:16px;font-size:12px}.alternative .new-chat::part(link):hover{color:#7891ff}.alternative .new-chat::part(link):active{color:#0911b3}.container{width:270px;padding:10px 0 10px 10px;height:100%;transition:width 0.3s ease-in-out,padding 0.3s ease-in-out}.container.collapsed{width:0;padding:10px 0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior=\"drawer\"]){z-index:1;width:0}:host(:not([behavior=\"drawer\"])) .alternative .new-chat{display:none}.mask{position:fixed;top:0;right:0;bottom:0;left:0}.links{border-bottom:1px solid rgba(0,0,0,0.06);padding-bottom:16px;margin-bottom:16px}.link{display:block}.link + .link{margin-top:4px}.link::part(link){display:flex;gap:0;align-items:center;padding:7px 10px;border-radius:8px;color:#000}.link::part(link):hover{background:rgba(0,0,0,0.04)}.link .icon{font-size:16px;margin-right:10px}.link .title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history{flex:1;min-height:0;overflow-y:auto;margin:0 -12px;padding:0 12px}.history ul{list-style:none;margin:0;padding:0}.history .section + .section{margin-top:14px}.history .section-title{display:flex;align-items:center;justify-content:space-between;height:30px;margin-bottom:6px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:24px;padding:0 8px;margin-left:-8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#8c8c8c;border-radius:8px}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .section-label:hover{background:rgba(0,0,0,0.04)}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .error,.history .loading{display:flex;align-items:center;height:36px;padding:0 8px}.history .loading{justify-content:center}.history .error{color:var(--color-error)}.history .group + .group{margin-top:15px}.history .group-title{font-weight:500;font-size:12px;color:#000;padding:8px;height:36px;line-height:20px}.history .item{display:block}.history .item::part(link){display:flex;align-items:center;padding:0 8px;height:36px;border-radius:8px;color:#000}.history .item.active::part(link){background:rgba(0,0,0,0.06)}.history .item.actions-active::part(link),.history .item::part(link):hover{background:rgba(0,0,0,0.04)}.history .item-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history .actions{cursor:auto}.history .item:not(:hover):not(.actions-active) .actions{display:none}.history .working{width:8px;height:8px;border-radius:8px;background:var(--elevo-color-brand);margin:0 7px}.history .item.actions-active .working,.history .item:hover .working,.history .item.active .working{display:none}.history .load-more{display:flex;justify-content:center;align-items:center;height:36px}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n NEW_CHAT = \"NEW_CHAT\",\n LOGOUT = \"LOGOUT\",\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n PREVIOUS_7_DAYS = \"PREVIOUS_7_DAYS\",\n PREVIOUS_30_DAYS = \"PREVIOUS_30_DAYS\",\n SWITCH_LANGUAGE = \"SWITCH_LANGUAGE\",\n PROJECTS = \"PROJECTS\",\n HISTORY = \"HISTORY\",\n CREATE_PROJECT = \"CREATE_PROJECT\",\n MOVE_TO_PROJECT = \"MOVE_TO_PROJECT\",\n UNTITLED = \"UNTITLED\",\n UNNAMED = \"UNNAMED\",\n}\n\nconst en: Locale = {\n [K.NEW_CHAT]: \"New chat\",\n [K.LOGOUT]: \"Logout\",\n [K.TODAY]: \"Today\",\n [K.YESTERDAY]: \"Yesterday\",\n [K.PREVIOUS_7_DAYS]: \"Previous 7 days\",\n [K.PREVIOUS_30_DAYS]: \"Previous 30 days\",\n [K.SWITCH_LANGUAGE]: \"中文\",\n [K.PROJECTS]: \"Project management\",\n [K.HISTORY]: \"Chat history\",\n [K.CREATE_PROJECT]: \"Create project\",\n [K.MOVE_TO_PROJECT]: \"Move to project\",\n [K.UNTITLED]: \"Untitled\",\n [K.UNNAMED]: \"Unnamed\",\n};\n\nconst zh: Locale = {\n [K.NEW_CHAT]: \"新对话\",\n [K.LOGOUT]: \"登出\",\n [K.TODAY]: \"今天\",\n [K.YESTERDAY]: \"昨天\",\n [K.PREVIOUS_7_DAYS]: \"过去7天\",\n [K.PREVIOUS_30_DAYS]: \"过去30天\",\n [K.SWITCH_LANGUAGE]: \"English\",\n [K.PROJECTS]: \"项目管理\",\n [K.HISTORY]: \"历史对话\",\n [K.CREATE_PROJECT]: \"创建项目\",\n [K.MOVE_TO_PROJECT]: \"移动到项目\",\n [K.UNTITLED]: \"无标题\",\n [K.UNNAMED]: \"未命名\",\n};\n\nexport const NS = \"bricks/ai-portal/elevo-sidebar\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n"],"names":["AgentFlowApi_searchTaskForAgentFlow","async","data","options","http","post","LegacyChatHistory","forwardRef","LowLevelChatHistory","_ref","ref","activeId","actions","urlTemplate","onActionClick","onHistoryClick","rootRef","useRef","list","setList","useState","nextToken","setNextToken","loadNextToken","setLoadNextToken","useEffect","Promise","all","next_token","interceptorParams","ignoreLoadingBar","resolve","setTimeout","then","_ref2","prev","catch","error","console","groups","useMemo","groupMap","Map","now","moment","startOfDay","clone","startOf","yesterday","subtract","sevenDaysAgo","thirtyDaysAgo","timestamps","item","groupKey","startTime","t","K","TODAY","YESTERDAY","PREVIOUS_7_DAYS","PREVIOUS_30_DAYS","format","group","get","set","title","items","push","values","actionsVisible","setActionsVisible","nextRef","next","current","root","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","pullIdRef","pull","useCallback","pullId","tempList","prevList","newList","newIds","Set","map","id","newItemsMap","foundIntersection","foundChanged","isFirst","newItem","isEqual","filter","has","useImperativeHandle","React","className","key","WrappedLink","_extends","classNames","active","onClick","url","parseTemplate","WrappedMiniActions","e","action","detail","onVisibleChange","DONE_STATES","includes","state","WrappedIcon","lib","icon","spinning","theme","wrapBrick","WrappedDropdownActions","WrappedEasyopsAvatar","WrappedIconButton","ElevoApi_listElevoConversations","params","ADD_ICON","ChatHistory","historyActiveId","historyActions","historyUrlTemplate","projectActiveId","projectUrlTemplate","projectActions","onProjectActionClick","onAddProject","projects","setProjects","projectsCollapsed","setProjectsCollapsed","projectsError","setProjectsError","historyList","setHistoryList","historyCollapsed","setHistoryCollapsed","historyError","setHistoryError","initialRef","movedConversations","setMovedConversations","mergedHistoryActions","isDropdown","text","MOVE_TO_PROJECT","disabled","length","project","event","instanceId","name","page","page_size","ElevoApi_getElevoProjects","token","limit","onlyOwner","onlyUnrelatedProject","conversations","conversationId","removeProject","projectId","p","addProject","moveConversation","filteredHistoryList","collapsed","PROJECTS","variant","tooltip","CREATE_PROJECT","UNNAMED","HISTORY","UNTITLED","___CSS_LOADER_EXPORT___","module","toString","en","NEW_CHAT","LOGOUT","SWITCH_LANGUAGE","zh","NS","locales","i18n","getFixedT"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (()=>{"use strict";var e,r,t,n,s,o,i,a,p,l,u,c,d,m,f,y,g,h,v,b={20382:(e,r,t)=>{var n=t(40580),s=t(58135);const o=/^<%=?\s/,i=/\s%>$/;function a(e){let r=null;return s.traverse(e,{enter(e,t){var n;!r&&(s.isFunctionExpression(e)||s.isStatement(e)||s.isJSX(e)||s.isArrowFunctionExpression(e)&&(s.isBlockStatement(e.body)||s.isObjectProperty(null===(n=t[t.length-1])||void 0===n?void 0:n.node)))&&(r=e)}}),r}function p(e){return s.isNullLiteral(e)||s.isIdentifier(e)&&"undefined"===e.name}function l(e){let r=!1;return s.traverse(e,{enter(e){r||!s.isJSXElement(e)&&!s.isJSXFragment(e)||(r=!0)}}),r}function u(e){return e.slice(2).replace(/([a-z])([A-Z])/g,"$1.$2").toLowerCase()}var c=t(71321);function d(e,r){return f(e,new Map([...r.templateCollection?r.templateCollection.identifiers.map((e=>[e,`STATE.${e}`])):r.contexts.map((e=>[e,`CTX.${e}`])),...r.functionNames.map((e=>[e,`FN.${e}`]))]))}function m(e,r,t){return function(e,r){if(null==r||!r.size)return e;if([...r.keys()].some((r=>e.includes(r)))){const t=[];let n;try{n=(0,c.precookFunction)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(r.has(e.name)){var s;const r=null===(s=n[n.length-1])||void 0===s?void 0:s.node;let o;r&&"Property"===r.type&&!r.computed&&r.shorthand&&(o=!0),t.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse function failed:",e)}if(t.length>0&&n){const n=[];let s=0;for(let o=0;o<t.length;o++){const{id:i,shorthand:a}=t[o],{name:p,start:l,end:u}=i;n.push(e.substring(s,l),`${a?`${p}: `:""}${r.get(p)}`),s=u}return n.push(e.substring(s)),n.join("")}}return e}(e,new Map(r.functionNames.filter((e=>e!==t)).map((e=>[e,`FN.${e}`]))))}function f(e,r){if(null==r||!r.size)return e;if([...r.keys()].some((r=>e.includes(r)))){const t=[];let n;try{n=(0,c.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(r.has(e.name)){var s;const r=null===(s=n[n.length-1])||void 0===s?void 0:s.node;let o;r&&"Property"===r.type&&!r.computed&&r.shorthand&&(o=!0),t.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse expression failed:",e)}if(t.length>0&&n){const{prefix:e,source:s,suffix:o}=n,i=[];let a=0;for(let e=0;e<t.length;e++){const{id:n,shorthand:o}=t[e],{name:p,start:l,end:u}=n;i.push(s.substring(a,l),`${o?`${p}: `:""}${r.get(p)}`),a=u}return i.push(s.substring(a)),`${e}${i.join("")}${o}`}}return e}const y={callApi:[2,3],callHttp:[1,2],"Entity.list":[1,2],"Entity.get":[2]};function g(e,r,t,n){if(!s.isCallExpression(e)&&!s.isOptionalCallExpression(e))return r.errors.push({message:`Await expression must be a call expression, received ${e.type}`,node:e,severity:"error"}),null;const{callee:a}=e;let l;if(s.isMemberExpression(a)){if(null==t||!t.workspace)return r.errors.push({message:"Entity SDK calls require a workspace context",node:a,severity:"error"}),null;if(!s.isIdentifier(a.object)||"Entity"!==a.object.name||!s.isIdentifier(a.property)||a.computed||"list"!==a.property.name&&"get"!==a.property.name)return r.errors.push({message:"Unexpected awaited expression",node:a,severity:"error"}),null;l=`Entity.${a.property.name}`}else{if(!s.isIdentifier(a))return r.errors.push({message:`Await expression must call an identifier, received ${a.type}`,node:a,severity:"error"}),null;if(l=a.name,"callApi"!==l&&"callHttp"!==l)return r.errors.push({message:`Await expression must call "callApi" or "callHttp", received "${l}"`,node:a,severity:"error"}),null}const u=y[l],c=e.arguments.length<u[0];if((c||!u.includes(e.arguments.length))&&(r.errors.push({message:`"${l}()" expects ${u.join(" or ")} arguments, but got ${e.arguments.length}`,node:e,severity:c?"error":"warning"}),c))return null;let d;const m=e.arguments[0];if("callHttp"===l){const e=S(m,r,{...n,allowExpression:!0});if("string"!=typeof e)return r.errors.push({message:`"${l}()" expects a string value as the first argument, but got ${typeof e}`,node:m,severity:"error"}),null;d={api:e,http:!0}}else if("callApi"===l){const t=e.arguments[0];if(!s.isStringLiteral(t))return r.errors.push({message:`"${l}()" expects a string literal as the first argument, but got ${t.type}`,node:t,severity:"error"}),null;d={api:t.value}}else{const t=S(m,r,{...n,allowExpression:!0});if("string"!=typeof t)return r.errors.push({message:`"${l}()" expects a string value as the first argument, but got ${typeof t}`,node:m,severity:"error"}),null;const s=e.arguments[1];let o;s&&(o=S(s,r,{...n,allowExpression:!0})),d={api:l,entity:t,params:o}}if("callApi"===l||"callHttp"===l){const a=e.arguments[1];if(a&&!p(a)){s.isObjectExpression(a)||r.errors.push({message:`Data source "params" prefers an object literal, but got ${a.type}`,node:a,severity:"notice"});const e=S(a,r,{...n,allowExpression:!0});(function(e){if("string"!=typeof e)return!1;const r=e.trim();return o.test(r)&&i.test(r)})(e)||"object"==typeof e&&null!==e?d.params=e:r.errors.push({message:"API params expects an object or expression, but got "+typeof e,node:a,severity:"error"}),null!=t&&t.reward&&(d.ambiguousParams=S(a,{...r,errors:[]},{allowExpression:!0,ambiguous:!0}))}}if("callApi"===l){const t=e.arguments[2];if(t&&!p(t))if(s.isObjectExpression(t))for(const e of t.properties){if(!s.isObjectProperty(e)){r.errors.push({message:`"callApi()" third param "meta" expects object properties, but got ${e.type}`,node:e,severity:"error"});continue}const t=e.key;if(!s.isIdentifier(t)){r.errors.push({message:`"callApi()" third param "meta" property key must be an identifier, but got ${t.type}`,node:t,severity:"error"});continue}if("objectId"!==t.name){r.errors.push({message:`"callApi()" third param "meta" property key must be "objectId", but got "${t.name}"`,node:t,severity:"error"});continue}const n=e.value;if(!p(n)){if(!s.isStringLiteral(n)){r.errors.push({message:`"callApi()" third param "meta" property "${t.name}" expects a string literal, but got ${n.type}`,node:n,severity:"error"});continue}d.objectId=n.value}}else r.errors.push({message:`"callApi()" third param "meta" expects an object literal, but got ${t.type}`,node:t,severity:"error"})}return d}function h(e,r,t,n,o){var i;if(!s.isArrowFunctionExpression(e))return r.errors.push({message:`Expected arrow function expression as event handler, but got ${e.type}`,node:e,severity:"error"}),null;if(e.params.length>1)return r.errors.push({message:`Event handler expects 0 or 1 parameter, but got ${e.params.length}`,node:e,severity:"error"}),null;const a=new Map(null!==(i=null==n?void 0:n.replacePatterns)&&void 0!==i?i:[]),p=e.params[0];if(p){if(!s.isIdentifier(p))return r.errors.push({message:`Event handler parameter expects an identifier, but got ${p.type}`,node:p,severity:"error"}),null;const e=p.name;a.set(e,o?"EVENT.detail":"EVENT"),r.contexts.includes(e)&&r.errors.push({message:`Event handler parameter "${e}" conflicts with existing global variables`,node:p,severity:"error"})}if(!s.isBlockStatement(e.body))return r.errors.push({message:`Event handler body expects a block statement, but got ${e.body.type}`,node:e.body,severity:"error"}),null;const l=[];for(const o of e.body.body)if(s.isExpressionStatement(o))if(s.isAssignmentExpression(o.expression)){const{left:e,right:t}=o.expression;if(!s.isIdentifier(e)){r.errors.push({message:`Assignment in event handler expects an identifier on the left side, but got ${e.type}`,node:e,severity:"error"});continue}const i=S(t,r,{...n,allowExpression:!0,replacePatterns:a});l.push({action:"update_variable",payload:{name:e.name,value:i}})}else if(s.isCallExpression(o.expression)||s.isOptionalCallExpression(o.expression)){const{callee:e,arguments:i}=o.expression;if(s.isMemberExpression(e)||s.isOptionalMemberExpression(e)){if(!s.isCallExpression(e.object)){r.errors.push({message:`Member expression in event handler expects a call expression as object, but got ${e.object.type}`,node:e.object,severity:"error"});continue}if(!s.isIdentifier(e.object.callee)){r.errors.push({message:`Member expression in event handler expects an identifier as callee, but got ${e.object.callee.type}`,node:e.object.callee,severity:"error"});continue}if(!s.isIdentifier(e.property)){r.errors.push({message:`Member expression in event handler expects an identifier as property, but got ${e.property.type}`,node:e.property,severity:"error"});continue}const p=e.object.callee.name,u=e.object.arguments;if("getComponent"===p){if(2!==u.length){r.errors.push({message:`"getComponent()" expects 2 arguments, but got ${u.length}`,node:o.expression,severity:"error"});continue}const t=u[0];if(!s.isStringLiteral(t)){r.errors.push({message:`"getComponent()" expects a string literal as its first argument, but got ${t.type}`,node:t,severity:"error"});continue}const n=u[1];if(!s.isStringLiteral(n)){r.errors.push({message:`"getComponent()" expects a string literal as its second argument, but got ${n.type}`,node:n,severity:"error"});continue}l.push({action:"call_component",payload:{componentId:n.value,method:e.property.name,args:i.map((e=>S(e,r,{allowExpression:!0,replacePatterns:a})))}})}else if("callApi"===p||"callHttp"===p){if("then"!==e.property.name){r.errors.push({message:`"${p}()" expects "then" as its method, but got ${e.property.name}`,node:e.property,severity:"error"});continue}if(1!==i.length){r.errors.push({message:`"${p}().then()" expects exactly 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}const s=g(e.object,r,t,{replacePatterns:a});if(!s)continue;r.contracts.add(s.api);const u=h(i[0],r,t,n,!0);l.push({action:"call_api",payload:s,callback:u?{success:u}:void 0})}else r.errors.push({message:`Unsupported action in event handler: ${p}`,node:e.object.callee,severity:"error"});continue}if(!s.isIdentifier(e)){r.errors.push({message:`Call expression in event handler expects an identifier as callee, but got ${e.type}`,node:e,severity:"error"});continue}if(r.templateCollection){if(r.templateCollection.setters.has(e.name)){const t=i[0];l.push({action:"update_variable",payload:{scope:"template",name:r.templateCollection.setters.get(e.name),value:void 0===t?void 0:S(t,r,{allowExpression:!0,replacePatterns:a})}}),1!==i.length&&r.errors.push({message:`State setter expects exactly 1 argument, but got ${i.length}`,node:i[1],severity:"error"});continue}}else if(r.contextSetters.has(e.name)){const t=i[0];l.push({action:"update_variable",payload:{name:r.contextSetters.get(e.name),value:void 0===t?void 0:S(t,r,{allowExpression:!0,replacePatterns:a})}}),1!==i.length&&r.errors.push({message:`State setter expects exactly 1 argument, but got ${i.length}`,node:i[1],severity:"error"});continue}if("showMessage"===e.name){if(1!==i.length){r.errors.push({message:`"showMessage()" expects 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}const e=S(i[0],r,{allowExpression:!0,replacePatterns:a});l.push({action:"show_message",payload:e})}else if("refresh"===e.name){if(1!==i.length){r.errors.push({message:`"refresh()" expects 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}if(!s.isIdentifier(i[0])){r.errors.push({message:`"refresh()" expects an identifier as its argument, but got ${i[0].type}`,node:i[0],severity:"error"});continue}l.push({action:"refresh_data_source",payload:{name:i[0].name}})}else if("callApi"===e.name||"callHttp"===e.name){const e=g(o.expression,r,t,{replacePatterns:a});if(!e)continue;r.contracts.add(e.api),l.push({action:"call_api",payload:e})}else r.errors.push({message:`Unsupported action in event handler: ${e.name}`,node:e,severity:"error"})}else r.errors.push({message:`Unsupported event handler expression: ${o.expression.type}`,node:o.expression,severity:"error"});else r.errors.push({message:`Unsupported event handler statement: ${o.type}`,node:o,severity:"error"});return l}function v(e,r,t,n){if(s.isJSXElement(e)){if(!s.isJSXIdentifier(e.openingElement.name))return r.errors.push({message:`Expected JSXIdentifier, but got ${e.openingElement.name.type}`,node:e.openingElement.name,severity:"error"}),null;const a=e.openingElement.name.name;if("Fragment"===a){for(const t of e.openingElement.attributes)s.isJSXAttribute(t)&&s.isJSXIdentifier(t.name)&&"key"===t.name.name||r.errors.push({message:"Invalid attribute for Fragment",node:t,severity:"error"});return e.children.flatMap((e=>v(e,r,t,n)))}const l={},m={};let f,y;for(const a of e.openingElement.attributes){if(s.isJSXSpreadAttribute(a)){r.errors.push({message:"Spread attributes are not supported in component",node:a,severity:"error"});continue}if(!s.isJSXIdentifier(a.name)){r.errors.push({message:`Expected JSXIdentifier, but got ${a.name.type}`,node:a.name,severity:"error"});continue}const e=a.name.name;if(/^on[A-Z]/.test(e)){var o;if(!s.isJSXExpressionContainer(a.value)){var i,p;r.errors.push({message:`Event handler "${e}" expects a JSXExpressionContainer, but got ${null===(i=a.value)||void 0===i?void 0:i.type}`,node:null!==(p=a.value)&&void 0!==p?p:a,severity:"error"});continue}if(s.isJSXEmptyExpression(a.value.expression)){r.errors.push({message:"Empty expression in events is not allowed",node:a.value,severity:"warning"});continue}const n=a.value.expression;let l=null;l=s.isIdentifier(n)&&null!==(o=r.templateCollection)&&void 0!==o&&o.events.includes(n.name)?[{action:"dispatch_event",payload:{type:u(n.name),detail:"<% EVENT.detail %>"}}]:h(n,r,t),l&&(null!=f||(f={}),f[u(e)]=l)}else if("componentId"===e){if(!s.isStringLiteral(a.value)){var c,d;r.errors.push({message:`"componentId" attribute in component expects a string literal, but got ${null===(c=a.value)||void 0===c?void 0:c.type}`,node:null!==(d=a.value)&&void 0!==d?d:a,severity:"error"});continue}y=a.value.value}else if(null==a.value)l[e]=!0;else if(s.isStringLiteral(a.value))l[e]=a.value.value,m[e]=a.value.value;else if(s.isJSXExpressionContainer(a.value)){if(s.isJSXEmptyExpression(a.value.expression)){r.errors.push({message:`Empty expression in JSX attribute "${e}" is not allowed`,node:a.value,severity:"warning"});continue}l[e]=w(a.value.expression,r,{...n,allowExpression:!0,allowUseBrick:!0,modifier:"="}),null!=t&&t.reward&&(m[e]=S(a.value.expression,{...r,errors:[]},{allowExpression:!0,ambiguous:!0}))}else r.errors.push({message:`Unsupported attribute value type in component: ${a.value.type}`,node:a.value,severity:"error"})}const{textContent:g,children:x}=b(e.children,r,t,n);g&&(l.textContent=g);const $={name:a,componentId:y,properties:l,events:f,children:x};return null!=t&&t.reward&&($.ambiguousProps=m),y&&(r.componentsMap.has(y)?r.errors.push({message:`Duplicated componentId "${y}" found`,node:e,severity:"error"}):r.componentsMap.set(y,$)),{type:"component",component:$}}if(s.isJSXFragment(e))return e.children.flatMap((e=>v(e,r,t,n)));if(s.isJSXText(e))return e.value.trim()?{type:"text",text:e.value}:null;if(s.isJSXExpressionContainer(e))return v(e.expression,r,t,n);if(s.isJSXEmptyExpression(e))return null;if(s.isCallExpression(e)){const o=e.callee;if(s.isMemberExpression(o)&&s.isIdentifier(o.property)&&!o.computed&&"map"===o.property.name){const i=e.arguments;if(i.length>0){i.length>1&&r.errors.push({message:"Only one argument is allowed for map function",node:i[1],severity:"error"});const[e]=i;if(s.isArrowFunctionExpression(e)){if(s.isBlockStatement(e.body))return r.errors.push({message:"Block statement is not allowed in map function",node:e.body,severity:"error"}),null;if(l(e.body)){var m;const i=a(o.object);if(i)return r.errors.push({message:`Unsupported node type as the object of a map function with JSX element: ${i.type}`,node:i,severity:"error"}),null;if(e.params.length>2)return r.errors.push({message:"Only up to 2 parameters are allowed in map function with JSX element",node:e,severity:"error"}),null;const p=e.params.find((e=>!s.isIdentifier(e)));if(p)return r.errors.push({message:"Only identifier parameters are allowed in map function with JSX element",node:p,severity:"error"}),null;const l=new Map(null!==(m=null==n?void 0:n.replacePatterns)&&void 0!==m?m:[]);if(e.params.length>0){const[r,t]=e.params;l.set(r.name,"ITEM"),t&&l.set(t.name,"INDEX")}return{type:"component",component:{name:"ForEach",properties:{dataSource:w(o.object,r,{...n,modifier:"=",allowExpression:!0})},children:$([e.body],r,t,{...n,replacePatterns:l})}}}}}}}else if(s.isConditionalExpression(e)){const{test:s,consequent:o,alternate:i}=e;if(l(o)||l(i)){const e=a(s);return e?(r.errors.push({message:`Unsupported node type in conditional expression test: ${e.type}`,node:e,severity:"error"}),null):{type:"component",component:{name:"If",properties:{dataSource:w(s,r,{...n,modifier:"=",allowExpression:!0})},children:[...$([o],r,t,n),...$([i],r,t,n).map((e=>({...e,slot:"else"})))]}}}}else if(s.isLogicalExpression(e)){const{left:s,right:o,operator:i}=e;if(("&&"===i||"||"===i)&&l(o)){const i=a(s);if(i)return r.errors.push({message:`Unsupported node type in logical expression left: ${i.type}`,node:i,severity:"error"}),null;const p=$([o],r,t,n);return{type:"component",component:{name:"If",properties:{dataSource:w(s,r,{...n,modifier:"=",allowExpression:!0})},children:"&&"===e.operator?p:p.map((e=>({...e,slot:"else"})))}}}}if(s.isExpression(e)){const t=a(e);return t?(r.errors.push({message:`Unsupported node type in expression: ${t.type}`,node:t,severity:"error"}),null):{type:"expression",expression:e}}return r.errors.push({message:`Unsupported node type in component: ${e.type}`,node:e,severity:"error"}),null}function b(e,r,t,n){let s=e.flatMap((e=>v(e,r,t,n))),o=s.every((e=>"text"===(null==e?void 0:e.type)));if(!o){let e=null;const r=[];for(const t of s){if(null===t);else if("text"===t.type||"expression"===t.type){var i,a,p;if("text"===(null===(i=e)||void 0===i?void 0:i.type)||"expression"===(null===(a=e)||void 0===a?void 0:a.type)){e={type:"merged",children:[e,t]},r.splice(r.length-1,1,e);continue}if("merged"===(null===(p=e)||void 0===p?void 0:p.type)){e.children.push(t);continue}}e=t,r.push(t)}s=r,o=s.every((e=>"text"===(null==e?void 0:e.type)||"merged"===(null==e?void 0:e.type)&&e.children.every((e=>"text"===e.type))))}return o?{textContent:s.flatMap((e=>"text"===e.type?e.text:e.children.map((e=>e.text)))).join("").trim()}:s.every((e=>!!e&&"component"!==e.type))?{textContent:f(d(x(s.flatMap((e=>"merged"===e.type?e.children:e)),r.source),r),null==n?void 0:n.replacePatterns)}:{children:s.filter((e=>!!e)).map((e=>"component"===e.type?e.component:{name:"Plaintext",properties:{textContent:"text"===e.type?e.text:f(d("expression"===e.type?`<%= ${I(r.source,e.expression)} %>`:x(e.children,r.source),r),null==n?void 0:n.replacePatterns)}}))}}function x(e,r){return`<%= CTX.__builtin_fn_mergeTexts(${e.map((e=>"text"===e.type?JSON.stringify(e):`{type:"expression",value:(${I(r,e.expression)})}`)).join(", ")}) %>`}function $(e,r,t,n){const{textContent:s,children:o}=b(e,r,t,n);return null!=o?o:[{name:"Plaintext",properties:{textContent:s}}]}const E=Symbol("ambiguous");function S(e,r,t){if(s.isObjectExpression(e))return function(e,r,t){if(e.properties.some((e=>s.isSpreadElement(e)))&&t.allowExpression){const s=a(e);if(!s){var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"})}const o={};for(const n of e.properties)if(s.isObjectProperty(n)){if(n.computed||n.shorthand){r.errors.push({message:"Computed properties and shorthand properties are not supported",node:n.key,severity:"error"});continue}let e;if(s.isIdentifier(n.key))e=n.key.name;else{if(!s.isStringLiteral(n.key)){r.errors.push({message:`Unsupported object key type: ${n.key.type}`,node:n.key,severity:"error"});continue}e=n.key.value}o[e]=S(n.value,r,t)}else r.errors.push({message:`Unsupported property type: ${n.type}`,node:n,severity:"error"});return o}(e,r,t);if(s.isArrayExpression(e))return function(e,r,t){if(e.elements.some((e=>s.isSpreadElement(e)))&&t.allowExpression){const s=a(e);if(!s){var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"})}const o=[];for(const n of e.elements)null!==n?s.isSpreadElement(n)?r.errors.push({message:"Spread elements are not supported in arrays",node:n,severity:"error"}):o.push(S(n,r,t)):r.errors.push({message:"Array elements cannot be empty",node:e,severity:"error"});return o}(e,r,t);if(s.isStringLiteral(e)||s.isNumericLiteral(e)||s.isBooleanLiteral(e))return e.value;if(s.isNullLiteral(e))return null;if(!s.isIdentifier(e)||"undefined"!==e.name){if(t.allowUseBrick&&s.isArrowFunctionExpression(e)){const n=e.body;if(s.isBlockStatement(n))return r.errors.push({message:"Block statements are not supported in render callback",node:n,severity:"error"}),null;const o=[];for(const t of e.params){if(!s.isIdentifier(t))return r.errors.push({message:`Unsupported parameter type: ${t.type}`,node:t,severity:"error"}),null;o.push(t.name)}return{params:o,children:$([n],r,void 0,t)}}if(s.isExpression(e)&&t.allowExpression){const s=a(e);if(s)return r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"}),null;{var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}}return r.errors.push({message:`Unsupported node type: ${e.type}`,node:e,severity:"error"}),null}}function w(e,r,t){let n=!1;if(s.traverse(e,{enter(e,r){var t;let o;n||s.isStringLiteral(e)||s.isNumericLiteral(e)||s.isBooleanLiteral(e)||s.isNullLiteral(e)||s.isObjectExpression(e)||s.isArrayExpression(e)||s.isObjectProperty(e)||s.isIdentifier(e)&&(o=null===(t=r[r.length-1])||void 0===t?void 0:t.node,1)&&(o&&s.isObjectProperty(o)?!o.computed&&!o.shorthand:"undefined"===e.name)||(n=!0)}}),n&&!a(e)){var o;const n=I(r.source,e);return f(d(`<%${null!==(o=t.modifier)&&void 0!==o?o:""} ${n} %>`,r),null==t?void 0:t.replacePatterns)}return S(e,r,t)}function I(e,r){const t=[];s.traverse(r,{enter(e){(s.isTSTypeAnnotation(e)||s.isTSTypeParameterInstantiation(e))&&t.push([e.start,e.end])}});let n="",o=r.start;for(const[r,s]of t)r>o&&(n+=e.substring(o,r),o=s);return n+=e.substring(o,r.end),n}function k(e,r,t){const n=e.openingElement;if(!s.isJSXIdentifier(n.name))return void r.errors.push({message:`Expected JSXIdentifier, but got ${n.name.type}`,node:n.name,severity:"error"});const o=n.name.name;if("View"!==o)return void r.errors.push({message:`Expected <View>, but got <${o}>`,node:n.name,severity:"error"});for(const e of n.attributes){if(s.isJSXSpreadAttribute(e)){r.errors.push({message:"Spread attributes are not supported in <eo-view>",node:e,severity:"error"});continue}if(!s.isJSXIdentifier(e.name)){r.errors.push({message:`Expected JSXIdentifier, but got ${e.name.type}`,node:e.name,severity:"error"});continue}const t=e.name.name;var i,a;"title"===t?s.isStringLiteral(e.value)?r.title=e.value.value:r.errors.push({message:`"title" attribute in <eo-view> expects a string literal, but got ${null===(i=e.value)||void 0===i?void 0:i.type}`,node:null!==(a=e.value)&&void 0!==a?a:e,severity:"error"}):r.errors.push({message:`Unsupported attribute "${t}" in <eo-view>`,node:e.name,severity:"notice"})}r.title||r.errors.push({message:'"title" attribute is required in <eo-view>',node:n.name,severity:"warning"});const p=$(e.children,r,t);r.components.push(...p)}function j(e,r){e.async||e.generator?r.errors.push({message:"Function declaration cannot be async or generator",node:e,severity:"error"}):e.id?r.functions.push({name:e.id.name,source:m(r.source.slice(e.start,e.end),r,e.id.name),typescript:!0}):r.errors.push({message:"Function declaration must have a name",node:e,severity:"error"})}function A(e,r,t,n,s,o,i){var a;const p=g(e,r,t);if(!p)return null;r.contracts.add(p.api);const l={name:n,scope:r.templateCollection?"template":"view",config:i,...p};if(s){if(s.length>("catch"===o?1:2))return r.errors.push({message:`"callApi().${o}()" expects no more than 2 arguments, but got ${s.length}`,node:s[1],severity:"error"}),!1;if(s.length>0){const e=C(s[0],r);e&&(l["catch"===o?"rejectTransform":"transform"]=e)}if("catch"!==o&&s.length>1){const e=C(s[1],r);e&&(l.rejectTransform=e)}}(null!==(a=r.templateCollection)&&void 0!==a?a:r).dataSources.push(l)}function C(e,r){if(!s.isArrowFunctionExpression(e))return r.errors.push({message:`"callApi().then()" callback expects an arrow function, but got ${e.type}`,node:e,severity:"error"}),null;if(!s.isExpression(e.body))return r.errors.push({message:`"callApi().then()" callback function body expects an expression, but got ${e.body.type}`,node:e.body,severity:"error"}),null;var t;if(e.params.length>1)return r.errors.push({message:`"callApi().then()" callback function expects exactly 0 or 1 parameter, but got ${e.params.length}`,node:null!==(t=e.params[1])&&void 0!==t?t:e,severity:"error"}),null;const n=`<% ${I(r.source,e.body)} %>`;if(0===e.params.length)return n;const o=e.params[0];return s.isIdentifier(o)?f(n,new Map([[o.name,"DATA"]])):(r.errors.push({message:`"callApi().then()" callback function parameter expects an identifier, but got ${o.type}`,node:o,severity:"error"}),null)}function P(e,r,t,n){if(e.async||e.generator)return void r.errors.push({message:"Function declaration cannot be async or generator",node:e,severity:"error"});if("template"===t){if(e.params.length>1)return void r.errors.push({message:`Component function expects at most 1 parameter, but got ${e.params.length}`,node:e.params[1],severity:"error"})}else if(e.params.length>0)return void r.errors.push({message:`View function expects no parameter, but got ${e.params.length}`,node:e.params[0],severity:"error"});let o,i,a,p;if("template"===t){o=[],i=new Map,a=[],p=[];const t=[];r.templateCollection={identifiers:o,setters:i,dataSources:p,events:t};const n=e.params[0];if(n){if(!s.isObjectPattern(n))return r.errors.push({message:`Component function parameter expects an object pattern, but got ${n.type}`,node:n,severity:"error"}),void delete r.templateCollection;for(const e of n.properties){if(s.isRestElement(e)){r.errors.push({message:"Component function parameter does not support rest element",node:e,severity:"error"});continue}if(e.computed||!e.shorthand){r.errors.push({message:"Unexpected computed or non-shorthand property in component function parameter",node:e,severity:"error"});continue}if(!s.isIdentifier(e.key)){r.errors.push({message:`Component function parameter property expects an identifier as key, but got ${e.key.type}`,node:e.key,severity:"error"});continue}const n=e.key.name;if(/^on[A-Z]/.test(n))s.isIdentifier(e.value)||r.errors.push({message:`Event handler property "${n}" expects an identifier as value, but got ${e.value.type}`,node:e.value,severity:"error"}),t.push(n);else if(o.push(n),s.isAssignmentPattern(e.value)){const t=S(e.value.right,r,{allowExpression:!0});a.push({name:n,expose:!0,value:t})}else a.push({name:n,expose:!0})}}}else o=r.contexts,i=r.contextSetters,a=r.variables,p=r.dataSources;for(const r of e.body.body)if(s.isVariableDeclaration(r))for(const e of r.declarations)if(s.isCallExpression(e.init)&&s.isIdentifier(e.init.callee))switch(e.init.callee.name){case"useState":if(s.isArrayPattern(e.id)){const[r,t]=e.id.elements;if(s.isIdentifier(r)){const e=r.name;o.push(e),s.isIdentifier(t)&&i.set(t.name,e)}}break;case"useResource":if(s.isArrayPattern(e.id)){const[r]=e.id.elements;if(s.isIdentifier(r)){const e=r.name;o.push(e)}}}else s.isIdentifier(e.id)&&o.push(e.id.name);for(const o of e.body.body)if(s.isVariableDeclaration(o)){if("const"!==o.kind){r.errors.push({message:`Unsupported variable declaration kind: ${o.kind}`,node:o,severity:"error"});continue}for(const e of o.declarations){if(e.init&&s.isCallExpression(e.init)&&s.isIdentifier(e.init.callee))switch(e.init.callee.name){case"useState":{if(!s.isArrayPattern(e.id)){r.errors.push({message:`"useState()" return value must be destructured into an array pattern, received ${e.id.type}`,node:e.id,severity:"error"});continue}const[t,n]=e.id.elements;if(!s.isIdentifier(t)){r.errors.push({message:`"useState()" expects an identifier as the variable name, received ${null==t?void 0:t.type}`,node:t,severity:"error"});continue}if(n&&!s.isIdentifier(n)){r.errors.push({message:`"useState()" expects an identifier as the setter name, received ${n.type}`,node:n,severity:"error"});continue}const o=t.name,i=e.init.arguments;if(0===i.length)a.push({name:o,expose:!1});else{i.length>1&&r.errors.push({message:`"useState()" expects at most 1 argument, but got ${i.length}`,node:e.init,severity:"error"});const t=S(i[0],r,{allowExpression:!0});a.push({name:o,expose:!1,value:t})}continue}case"useResource":{if(!s.isArrayPattern(e.id)){r.errors.push({message:`"useResource()" return value must be destructured into an array pattern, received ${e.id.type}`,node:e.id,severity:"error"});continue}const[t]=e.id.elements;if(!s.isIdentifier(t)){r.errors.push({message:`"useResource()" expects an identifier as the variable name, received ${null==t?void 0:t.type}`,node:t,severity:"error"});continue}const o=t.name,i=e.init.arguments;(0===i.length||i.length>2)&&r.errors.push({message:`"useResource()" expects 1 or 2 arguments, but got ${i.length}`,node:e.init,severity:"error"});const a=i[0];if(!s.isArrowFunctionExpression(a)){r.errors.push({message:`"useResource()" expects an arrow function as the argument, but got ${a.type}`,node:a,severity:"error"});continue}if(a.async||a.generator){r.errors.push({message:'"useResource()" argument function cannot be async or generator',node:a,severity:"error"});continue}const p=a.body;if(s.isBlockStatement(p)){r.errors.push({message:'Block statement is not supported in "useResource()" argument function',node:p,severity:"error"});continue}if(!s.isCallExpression(p)){r.errors.push({message:`"useResource()" argument function must return a call expression, but got ${p.type}`,node:p,severity:"error"});continue}const{callee:l}=p;if(!s.isIdentifier(l)&&!s.isMemberExpression(l)){r.errors.push({message:`"useResource()" argument function must return a call to an identifier or member expression, but got ${l.type}`,node:l,severity:"error"});continue}const u=i[1];let c;if(u){if(!s.isObjectExpression(u)){r.errors.push({message:`"useResource()" second argument must be an object expression, but got ${u.type}`,node:u,severity:"error"});continue}for(const e of u.properties){if(!s.isObjectProperty(e)){r.errors.push({message:`Unsupported property type in "useResource()" second argument: ${e.type}`,node:e,severity:"error"});continue}const t=e.key;s.isIdentifier(t)?e.computed?r.errors.push({message:'"useResource()" second argument property key cannot be computed',node:t,severity:"error"}):"enabled"===t.name||"fallback"===t.name?(null!=c||(c={}),c[t.name]=S(e.value,r,{allowExpression:!0})):r.errors.push({message:`"useResource()" second argument property key must be "enabled" or "fallback", but got "${t.name}"`,node:t,severity:"error"}):r.errors.push({message:`"useResource()" second argument property key must be an identifier, but got ${t.type}`,node:t,severity:"error"})}}if(s.isMemberExpression(l)){if(!s.isIdentifier(l.property)||l.computed||"then"!==l.property.name&&"catch"!==l.property.name){r.errors.push({message:"Unexpected awaited expression",node:l.property,severity:"error"});continue}A(l.object,r,n,o,p.arguments,l.property.name,c)}else A(p,r,n,o,void 0,void 0,c);continue}}if(!s.isIdentifier(e.id)){r.errors.push({message:`Expect an identifier as the variable name, received ${e.id.type}`,node:e.id,severity:"error"});continue}const t=e.id.name;if(null==e.init)e.id.typeAnnotation||r.errors.push({message:`Variable "${t}" with no initial value must have a type annotation`,node:e.id,severity:"error"}),a.push({name:t});else{const n=S(e.init,r,{allowExpression:!0});a.push({name:t,value:n})}}}else{if(s.isReturnStatement(o)){var l;if(!s.isJSXElement(o.argument))return void r.errors.push({message:`Exported default declaration must be a JSX element, but got ${null===(l=o.argument)||void 0===l?void 0:l.type}`,node:o.argument,severity:"error"});if("template"===t){const t=$([o.argument],r,n);return r.templates.push({name:e.id.name,variables:a,dataSources:p,components:t}),void delete r.templateCollection}return void k(o.argument,r,n)}s.isTSInterfaceDeclaration(o)||s.isTSTypeAliasDeclaration(o)||r.errors.push({message:`Unsupported top level statement type: ${o.type}`,node:o,severity:"error"})}r.errors.push({message:"Component function declaration must have a return statement returning a JSX element",node:e,severity:"error"})}function T(e,r,t){for(const t of e.program.body)s.isFunctionDeclaration(t)&&t.id&&!X(t.id)&&r.functionNames.push(t.id.name);for(const n of e.program.body)if(s.isFunctionDeclaration(n)){if(!n.id){r.errors.push({message:"Function declaration must have a name",node:n,severity:"error"});continue}X(n.id)?P(n,r,"template",t):j(n,r)}else if(s.isExportDefaultDeclaration(n)){if(!s.isFunctionDeclaration(n.declaration)){r.errors.push({message:`Expected function declaration as default export, but got ${n.declaration.type}`,node:n.declaration,severity:"error"});continue}P(n.declaration,r,"view",t)}else s.isTSInterfaceDeclaration(n)||s.isTSTypeAliasDeclaration(n)||r.errors.push({message:`Unsupported top level statement type: ${n.type}`,node:n,severity:"error"})}function X(e){return e.name[0]>="A"&&e.name[0]<="Z"}(0,t(47695).p)(class{parse(e,r){return function(e,r){var t,o;const i=[],a={source:e,title:void 0,dataSources:[],variables:[],components:[],componentsMap:new Map,errors:i,contexts:null!==(t=null==r?void 0:r.withContexts)&&void 0!==t?t:[],contextSetters:new Map,functionNames:[],functions:[],contracts:new Set,templates:[]};let p;try{p=(0,n.parse)(e,{plugins:["jsx","typescript"],sourceType:"module",errorRecovery:!0})}catch(e){return i.push({message:`Failed to parse TSX: ${e}`,node:null,severity:"fatal"}),a}if(null!==(o=p.errors)&&void 0!==o&&o.length)for(const e of p.errors)i.push({message:`${e.code}: ${e.reasonCode}`,node:null,severity:"error"});for(const e of p.program.body)if(s.isExportDefaultDeclaration(e)){if(s.isFunctionDeclaration(e.declaration))return T(p,a,r),a;break}return function(e,r,t){const{errors:n,contexts:o,functionNames:i,variables:a}=r;s.traverse(e.program,{enter(e){s.isTSAnyKeyword(e)?n.push({message:"Unexpected 'any' type",node:e,severity:"warning"}):s.isTSAsExpression(e)&&n.push({message:"Unexpected 'as' usage",node:e,severity:"warning"})}});for(const r of e.program.body)if(s.isVariableDeclaration(r))for(const e of r.declarations)s.isIdentifier(e.id)&&o.push(e.id.name);else s.isFunctionDeclaration(r)&&r.id&&i.push(r.id.name);let p=!1;for(const o of e.program.body)if(s.isVariableDeclaration(o)){if(p&&n.push({message:"Unexpected variable declaration after export",node:o,severity:"error"}),"let"!==o.kind&&"const"!==o.kind){n.push({message:`Unsupported variable declaration kind: ${o.kind}`,node:o,severity:"error"});continue}for(const e of o.declarations){if(!s.isIdentifier(e.id)){n.push({message:`Expect an identifier as the variable name, received ${e.id.type}`,node:e.id,severity:"error"});continue}const o=e.id.name;if(null==e.init)e.id.typeAnnotation||n.push({message:`Variable "${o}" with no initial value must have a type annotation`,node:e.id,severity:"error"}),a.push({name:o});else if(s.isAwaitExpression(e.init)){const i=e.init.argument;if(!s.isCallExpression(i)){n.push({message:`Await expression must be a call expression, received ${i.type}`,node:i,severity:"error"});continue}const{callee:a}=i;if(!s.isIdentifier(a)&&!s.isMemberExpression(a)){n.push({message:`Await expression must call an identifier or member expression, received ${a.type}`,node:a,severity:"error"});continue}if(s.isMemberExpression(a))if(s.isIdentifier(a.object)&&"Entity"===a.object.name){if(!s.isIdentifier(a.property)||a.computed||"list"!==a.property.name&&"get"!==a.property.name){n.push({message:"Unexpected awaited expression",node:a.property,severity:"error"});continue}A(i,r,t,o)}else{if(!s.isIdentifier(a.property)||a.computed||"then"!==a.property.name&&"catch"!==a.property.name){n.push({message:"Unexpected awaited expression",node:a.property,severity:"error"});continue}A(a.object,r,t,o,i.arguments,a.property.name)}else A(i,r,t,o)}else{const t=S(e.init,r,{allowExpression:!0});a.push({name:o,value:t})}}}else if(s.isFunctionDeclaration(o))p&&n.push({message:"Unexpected function declaration after export",node:o,severity:"error"}),j(o,r);else if(s.isExportDefaultDeclaration(o)){p=!0;const e=o.declaration;if(!s.isJSXElement(e)){n.push({message:`Exported default declaration must be a JSX element, but got ${e.type}`,node:e,severity:"error"});continue}k(e,r,t)}else s.isTSInterfaceDeclaration(o)||s.isTSTypeAliasDeclaration(o)||n.push({message:`Unsupported top level statement type: ${o.type}`,node:o,severity:"error"})}(p,a,r),a}(e,r)}})}},x={};function $(e){var r=x[e];if(void 0!==r)return r.exports;var t=x[e]={exports:{}};return b[e](t,t.exports,$),t.exports}$.m=b,$.c=x,$.x=()=>{var e=$.O(void 0,[5521,4957,1321,580],(()=>$(20382)));return $.O(e)},e=[],$.O=(r,t,n,s)=>{if(!t){var o=1/0;for(l=0;l<e.length;l++){for(var[t,n,s]=e[l],i=!0,a=0;a<t.length;a++)(!1&s||o>=s)&&Object.keys($.O).every((e=>$.O[e](t[a])))?t.splice(a--,1):(i=!1,s<o&&(o=s));if(i){e.splice(l--,1);var p=n();void 0!==p&&(r=p)}}return r}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[t,n,s]},$.d=(e,r)=>{for(var t in r)$.o(r,t)&&!$.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},$.f={},$.e=e=>Promise.all(Object.keys($.f).reduce(((r,t)=>($.f[t](e,r),r)),[])),$.u=e=>"chunks/"+e+"."+{1122:"95231c39",4957:"f878df32",5521:"ef48a4d3",6773:"afd27a30"}[e]+".js",$.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),$.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),$.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{$.S={};var e={},r={};$.I=(t,n)=>{n||(n=[]);var s=r[t];if(s||(s=r[t]={}),!(n.indexOf(s)>=0)){if(n.push(s),e[t])return e[t];$.o($.S,t)||($.S[t]={}),$.S[t];var o=[];return e[t]=o.length?Promise.all(o).then((()=>e[t]=1)):1}}})(),(()=>{var e;$.g.importScripts&&(e=$.g.location+"");var r=$.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),$.p=e+"../"})(),r=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},t=(e,t)=>{e=r(e),t=r(t);for(var n=0;;){if(n>=e.length)return n<t.length&&"u"!=(typeof t[n])[0];var s=e[n],o=(typeof s)[0];if(n>=t.length)return"u"==o;var i=t[n],a=(typeof i)[0];if(o!=a)return"o"==o&&"n"==a||"s"==a||"u"==o;if("o"!=o&&"u"!=o&&s!=i)return s<i;n++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var s=1,o=1;o<e.length;o++)s--,t+="u"==(typeof(a=e[o]))[0]?"-":(s>0?".":"")+(s=2,a);return t}var i=[];for(o=1;o<e.length;o++){var a=e[o];i.push(0===a?"not("+p()+")":1===a?"("+p()+" || "+p()+")":2===a?i.pop()+" "+i.pop():n(a))}return p();function p(){return i.pop().replace(/^\((.+)\)$/,"$1")}},s=(e,t)=>{if(0 in e){t=r(t);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,a=1,p=!0;;a++,i++){var l,u,c=a<e.length?(typeof e[a])[0]:"";if(i>=t.length||"o"==(u=(typeof(l=t[i]))[0]))return!p||("u"==c?a>n&&!o:""==c!=o);if("u"==u){if(!p||"u"!=c)return!1}else if(p)if(c==u)if(a<=n){if(l!=e[a])return!1}else{if(o?l>e[a]:l<e[a])return!1;l!=e[a]&&(p=!1)}else if("s"!=c&&"n"!=c){if(o||a<=n)return!1;p=!1,a--}else{if(a<=n||u<c!=o)return!1;p=!1}else"s"!=c&&"n"!=c&&(p=!1,a--)}}var d=[],m=d.pop.bind(d);for(i=1;i<e.length;i++){var f=e[i];d.push(1==f?m()|m():2==f?m()&m():f?s(f,t):!m())}return!!m()},o=(e,r)=>e&&$.o(e,r),i=e=>(e.loaded=1,e.get()),a=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),p=(e,r,n)=>{var s=n?a(e[r]):e[r];return Object.keys(s).reduce(((e,r)=>!e||!s[e].loaded&&t(e,r)?r:e),0)},l=(e,r,t,s)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(s)+")",u=e=>{throw new Error(e)},c=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=(e,r,t)=>t?t():((e,r)=>u("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(e=>function(r,t,n,s,o){var i=$.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,$.S[r],t,!1,s,o)):e(r,$.S[r],t,n,s,o)})(((e,r,t,n,a,u)=>{if(!o(r,t))return d(e,t,u);var m=p(r,t,n);return s(a,m)||c(l(r,t,m,a)),i(r[t][m])})),f={},y={71321:()=>m("default","@next-core/cook",!1,[0],(()=>Promise.all([$.e(1122),$.e(580)]).then((()=>()=>$(61122))))),40580:()=>m("default","@babel/parser",!1,[0],(()=>$.e(6773).then((()=>()=>$(46773)))))},g={580:[40580],1321:[71321]},h={},$.f.consumes=(e,r)=>{$.o(g,e)&&g[e].forEach((e=>{if($.o(f,e))return r.push(f[e]);if(!h[e]){var t=r=>{f[e]=0,$.m[e]=t=>{delete $.c[e],t.exports=r()}};h[e]=!0;var n=r=>{delete f[e],$.m[e]=t=>{throw delete $.c[e],r}};try{var s=y[e]();s.then?r.push(f[e]=s.then(t).catch(n)):t(s)}catch(e){n(e)}}}))},(()=>{var e={382:1};$.f.i=(r,t)=>{e[r]||/^(1321|580)$/.test(r)||importScripts($.p+$.u(r))};var r=globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[],t=r.push.bind(r);r.push=r=>{var[n,s,o]=r;for(var i in s)$.o(s,i)&&($.m[i]=s[i]);for(o&&o($);n.length;)e[n.pop()]=1;t(r)}})(),v=$.x,$.x=()=>Promise.all([5521,4957,1321,580].map($.e,$)).then(v),$.x()})();
2
- //# sourceMappingURL=382.d2e3f46f.js.map
1
+ (()=>{"use strict";var e,r,t,n,s,o,i,a,p,l,u,c,d,m,f,y,g,h,v,b={20382:(e,r,t)=>{var n=t(40580),s=t(58135);const o=/^<%=?\s/,i=/\s%>$/;function a(e){let r=null;return s.traverse(e,{enter(e,t){var n;!r&&(s.isFunctionExpression(e)||s.isStatement(e)||s.isJSX(e)||s.isArrowFunctionExpression(e)&&(s.isBlockStatement(e.body)||s.isObjectProperty(null===(n=t[t.length-1])||void 0===n?void 0:n.node)))&&(r=e)}}),r}function p(e){return s.isNullLiteral(e)||s.isIdentifier(e)&&"undefined"===e.name}function l(e){let r=!1;return s.traverse(e,{enter(e){r||!s.isJSXElement(e)&&!s.isJSXFragment(e)||(r=!0)}}),r}function u(e){return e.slice(2).replace(/([a-z])([A-Z])/g,"$1.$2").toLowerCase()}var c=t(71321);function d(e,r){return f(e,new Map([...r.templateCollection?r.templateCollection.identifiers.map((e=>[e,`STATE.${e}`])):r.contexts.map((e=>[e,`CTX.${e}`])),...r.functionNames.map((e=>[e,`FN.${e}`]))]))}function m(e,r,t){return function(e,r){if(null==r||!r.size)return e;if([...r.keys()].some((r=>e.includes(r)))){const t=[];let n;try{n=(0,c.precookFunction)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(r.has(e.name)){var s;const r=null===(s=n[n.length-1])||void 0===s?void 0:s.node;let o;r&&"Property"===r.type&&!r.computed&&r.shorthand&&(o=!0),t.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse function failed:",e)}if(t.length>0&&n){const n=[];let s=0;for(let o=0;o<t.length;o++){const{id:i,shorthand:a}=t[o],{name:p,start:l,end:u}=i;n.push(e.substring(s,l),`${a?`${p}: `:""}${r.get(p)}`),s=u}return n.push(e.substring(s)),n.join("")}}return e}(e,new Map(r.functionNames.filter((e=>e!==t)).map((e=>[e,`FN.${e}`]))))}function f(e,r){if(null==r||!r.size)return e;if([...r.keys()].some((r=>e.includes(r)))){const t=[];let n;try{n=(0,c.preevaluate)(e,{withParent:!0,hooks:{beforeVisitGlobal(e,n){if(r.has(e.name)){var s;const r=null===(s=n[n.length-1])||void 0===s?void 0:s.node;let o;r&&"Property"===r.type&&!r.computed&&r.shorthand&&(o=!0),t.push({id:e,shorthand:o})}}}})}catch(e){console.error("Parse expression failed:",e)}if(t.length>0&&n){const{prefix:e,source:s,suffix:o}=n,i=[];let a=0;for(let e=0;e<t.length;e++){const{id:n,shorthand:o}=t[e],{name:p,start:l,end:u}=n;i.push(s.substring(a,l),`${o?`${p}: `:""}${r.get(p)}`),a=u}return i.push(s.substring(a)),`${e}${i.join("")}${o}`}}return e}const y={callApi:[2,3],callHttp:[1,2],"Entity.list":[1,2],"Entity.get":[2]};function g(e,r,t,n){if(!s.isCallExpression(e)&&!s.isOptionalCallExpression(e))return r.errors.push({message:`Await expression must be a call expression, received ${e.type}`,node:e,severity:"error"}),null;const{callee:a}=e;let l;if(s.isMemberExpression(a)){if(null==t||!t.workspace)return r.errors.push({message:"Entity SDK calls require a workspace context",node:a,severity:"error"}),null;if(!s.isIdentifier(a.object)||"Entity"!==a.object.name||!s.isIdentifier(a.property)||a.computed||"list"!==a.property.name&&"get"!==a.property.name)return r.errors.push({message:"Unexpected awaited expression",node:a,severity:"error"}),null;l=`Entity.${a.property.name}`}else{if(!s.isIdentifier(a))return r.errors.push({message:`Await expression must call an identifier, received ${a.type}`,node:a,severity:"error"}),null;if(l=a.name,"callApi"!==l&&"callHttp"!==l)return r.errors.push({message:`Await expression must call "callApi" or "callHttp", received "${l}"`,node:a,severity:"error"}),null}const u=y[l],c=e.arguments.length<u[0];if((c||!u.includes(e.arguments.length))&&(r.errors.push({message:`"${l}()" expects ${u.join(" or ")} arguments, but got ${e.arguments.length}`,node:e,severity:c?"error":"warning"}),c))return null;let d;const m=e.arguments[0];if("callHttp"===l){const e=S(m,r,{...n,allowExpression:!0});if("string"!=typeof e)return r.errors.push({message:`"${l}()" expects a string value as the first argument, but got ${typeof e}`,node:m,severity:"error"}),null;d={api:e,http:!0}}else if("callApi"===l){const t=e.arguments[0];if(!s.isStringLiteral(t))return r.errors.push({message:`"${l}()" expects a string literal as the first argument, but got ${t.type}`,node:t,severity:"error"}),null;d={api:t.value}}else{const t=S(m,r,{...n,allowExpression:!0});if("string"!=typeof t)return r.errors.push({message:`"${l}()" expects a string value as the first argument, but got ${typeof t}`,node:m,severity:"error"}),null;const s=e.arguments[1];let o;s&&(o=S(s,r,{...n,allowExpression:!0})),d={api:l,entity:t,params:o}}if("callApi"===l||"callHttp"===l){const a=e.arguments[1];if(a&&!p(a)){s.isObjectExpression(a)||r.errors.push({message:`Data source "params" prefers an object literal, but got ${a.type}`,node:a,severity:"notice"});const e=S(a,r,{...n,allowExpression:!0});(function(e){if("string"!=typeof e)return!1;const r=e.trim();return o.test(r)&&i.test(r)})(e)||"object"==typeof e&&null!==e?d.params=e:r.errors.push({message:"API params expects an object or expression, but got "+typeof e,node:a,severity:"error"}),null!=t&&t.reward&&(d.ambiguousParams=S(a,{...r,errors:[]},{allowExpression:!0,ambiguous:!0}))}}if("callApi"===l){const t=e.arguments[2];if(t&&!p(t))if(s.isObjectExpression(t))for(const e of t.properties){if(!s.isObjectProperty(e)){r.errors.push({message:`"callApi()" third param "meta" expects object properties, but got ${e.type}`,node:e,severity:"error"});continue}const t=e.key;if(!s.isIdentifier(t)){r.errors.push({message:`"callApi()" third param "meta" property key must be an identifier, but got ${t.type}`,node:t,severity:"error"});continue}if("objectId"!==t.name){r.errors.push({message:`"callApi()" third param "meta" property key must be "objectId", but got "${t.name}"`,node:t,severity:"error"});continue}const n=e.value;if(!p(n)){if(!s.isStringLiteral(n)){r.errors.push({message:`"callApi()" third param "meta" property "${t.name}" expects a string literal, but got ${n.type}`,node:n,severity:"error"});continue}d.objectId=n.value}}else r.errors.push({message:`"callApi()" third param "meta" expects an object literal, but got ${t.type}`,node:t,severity:"error"})}return d}function h(e,r,t,n,o){var i;if(!s.isArrowFunctionExpression(e))return r.errors.push({message:`Expected arrow function expression as event handler, but got ${e.type}`,node:e,severity:"error"}),null;if(e.params.length>1)return r.errors.push({message:`Event handler expects 0 or 1 parameter, but got ${e.params.length}`,node:e,severity:"error"}),null;const a=new Map(null!==(i=null==n?void 0:n.replacePatterns)&&void 0!==i?i:[]),p=e.params[0];if(p){if(!s.isIdentifier(p))return r.errors.push({message:`Event handler parameter expects an identifier, but got ${p.type}`,node:p,severity:"error"}),null;const e=p.name;a.set(e,o?"EVENT.detail":"EVENT"),r.contexts.includes(e)&&r.errors.push({message:`Event handler parameter "${e}" conflicts with existing global variables`,node:p,severity:"error"})}if(!s.isBlockStatement(e.body))return r.errors.push({message:`Event handler body expects a block statement, but got ${e.body.type}`,node:e.body,severity:"error"}),null;const l=[];for(const o of e.body.body)if(s.isExpressionStatement(o))if(s.isAssignmentExpression(o.expression)){const{left:e,right:t}=o.expression;if(!s.isIdentifier(e)){r.errors.push({message:`Assignment in event handler expects an identifier on the left side, but got ${e.type}`,node:e,severity:"error"});continue}const i=S(t,r,{...n,allowExpression:!0,replacePatterns:a});l.push({action:"update_variable",payload:{name:e.name,value:i}})}else if(s.isCallExpression(o.expression)||s.isOptionalCallExpression(o.expression)){const{callee:e,arguments:i}=o.expression;if(s.isMemberExpression(e)||s.isOptionalMemberExpression(e)){if(!s.isCallExpression(e.object)){r.errors.push({message:`Member expression in event handler expects a call expression as object, but got ${e.object.type}`,node:e.object,severity:"error"});continue}if(!s.isIdentifier(e.object.callee)){r.errors.push({message:`Member expression in event handler expects an identifier as callee, but got ${e.object.callee.type}`,node:e.object.callee,severity:"error"});continue}if(!s.isIdentifier(e.property)){r.errors.push({message:`Member expression in event handler expects an identifier as property, but got ${e.property.type}`,node:e.property,severity:"error"});continue}const p=e.object.callee.name,u=e.object.arguments;if("getComponent"===p){if(2!==u.length){r.errors.push({message:`"getComponent()" expects 2 arguments, but got ${u.length}`,node:o.expression,severity:"error"});continue}const t=u[0];if(!s.isStringLiteral(t)){r.errors.push({message:`"getComponent()" expects a string literal as its first argument, but got ${t.type}`,node:t,severity:"error"});continue}const n=u[1];if(!s.isStringLiteral(n)){r.errors.push({message:`"getComponent()" expects a string literal as its second argument, but got ${n.type}`,node:n,severity:"error"});continue}l.push({action:"call_component",payload:{componentId:n.value,method:e.property.name,args:i.map((e=>S(e,r,{allowExpression:!0,replacePatterns:a})))}})}else if("callApi"===p||"callHttp"===p){if("then"!==e.property.name){r.errors.push({message:`"${p}()" expects "then" as its method, but got ${e.property.name}`,node:e.property,severity:"error"});continue}if(1!==i.length){r.errors.push({message:`"${p}().then()" expects exactly 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}const s=g(e.object,r,t,{replacePatterns:a});if(!s)continue;r.contracts.add(s.api);const u=h(i[0],r,t,n,!0);l.push({action:"call_api",payload:s,callback:u?{success:u}:void 0})}else r.errors.push({message:`Unsupported action in event handler: ${p}`,node:e.object.callee,severity:"error"});continue}if(!s.isIdentifier(e)){r.errors.push({message:`Call expression in event handler expects an identifier as callee, but got ${e.type}`,node:e,severity:"error"});continue}if(r.templateCollection){if(r.templateCollection.setters.has(e.name)){const t=i[0];l.push({action:"update_variable",payload:{scope:"template",name:r.templateCollection.setters.get(e.name),value:void 0===t?void 0:S(t,r,{allowExpression:!0,replacePatterns:a})}}),1!==i.length&&r.errors.push({message:`State setter expects exactly 1 argument, but got ${i.length}`,node:i[1],severity:"error"});continue}}else if(r.contextSetters.has(e.name)){const t=i[0];l.push({action:"update_variable",payload:{name:r.contextSetters.get(e.name),value:void 0===t?void 0:S(t,r,{allowExpression:!0,replacePatterns:a})}}),1!==i.length&&r.errors.push({message:`State setter expects exactly 1 argument, but got ${i.length}`,node:i[1],severity:"error"});continue}if("showMessage"===e.name){if(1!==i.length){r.errors.push({message:`"showMessage()" expects 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}const e=S(i[0],r,{allowExpression:!0,replacePatterns:a});l.push({action:"show_message",payload:e})}else if("refresh"===e.name){if(1!==i.length){r.errors.push({message:`"refresh()" expects 1 argument, but got ${i.length}`,node:o.expression,severity:"error"});continue}if(!s.isIdentifier(i[0])){r.errors.push({message:`"refresh()" expects an identifier as its argument, but got ${i[0].type}`,node:i[0],severity:"error"});continue}l.push({action:"refresh_data_source",payload:{name:i[0].name}})}else if("callApi"===e.name||"callHttp"===e.name){const e=g(o.expression,r,t,{replacePatterns:a});if(!e)continue;r.contracts.add(e.api),l.push({action:"call_api",payload:e})}else r.errors.push({message:`Unsupported action in event handler: ${e.name}`,node:e,severity:"error"})}else r.errors.push({message:`Unsupported event handler expression: ${o.expression.type}`,node:o.expression,severity:"error"});else r.errors.push({message:`Unsupported event handler statement: ${o.type}`,node:o,severity:"error"});return l}function v(e,r,t,n){if(s.isJSXElement(e)){if(!s.isJSXIdentifier(e.openingElement.name))return r.errors.push({message:`Expected JSXIdentifier, but got ${e.openingElement.name.type}`,node:e.openingElement.name,severity:"error"}),null;const a=e.openingElement.name.name;if("Fragment"===a){for(const t of e.openingElement.attributes)s.isJSXAttribute(t)&&s.isJSXIdentifier(t.name)&&"key"===t.name.name||r.errors.push({message:"Invalid attribute for Fragment",node:t,severity:"error"});return e.children.flatMap((e=>v(e,r,t,n)))}const l={},m={};let f,y;for(const a of e.openingElement.attributes){if(s.isJSXSpreadAttribute(a)){r.errors.push({message:"Spread attributes are not supported in component",node:a,severity:"error"});continue}if(!s.isJSXIdentifier(a.name)){r.errors.push({message:`Expected JSXIdentifier, but got ${a.name.type}`,node:a.name,severity:"error"});continue}const e=a.name.name;if(/^on[A-Z]/.test(e)){var o;if(!s.isJSXExpressionContainer(a.value)){var i,p;r.errors.push({message:`Event handler "${e}" expects a JSXExpressionContainer, but got ${null===(i=a.value)||void 0===i?void 0:i.type}`,node:null!==(p=a.value)&&void 0!==p?p:a,severity:"error"});continue}if(s.isJSXEmptyExpression(a.value.expression)){r.errors.push({message:"Empty expression in events is not allowed",node:a.value,severity:"warning"});continue}const n=a.value.expression;let l=null;l=s.isIdentifier(n)&&null!==(o=r.templateCollection)&&void 0!==o&&o.events.includes(n.name)?[{action:"dispatch_event",payload:{type:u(n.name),detail:"<% EVENT.detail %>"}}]:h(n,r,t),l&&(null!=f||(f={}),f[u(e)]=l)}else if("componentId"===e){if(!s.isStringLiteral(a.value)){var c,d;r.errors.push({message:`"componentId" attribute in component expects a string literal, but got ${null===(c=a.value)||void 0===c?void 0:c.type}`,node:null!==(d=a.value)&&void 0!==d?d:a,severity:"error"});continue}y=a.value.value}else if(null==a.value)l[e]=!0;else if(s.isStringLiteral(a.value))l[e]=a.value.value,m[e]=a.value.value;else if(s.isJSXExpressionContainer(a.value)){if(s.isJSXEmptyExpression(a.value.expression)){r.errors.push({message:`Empty expression in JSX attribute "${e}" is not allowed`,node:a.value,severity:"warning"});continue}l[e]=w(a.value.expression,r,{...n,allowExpression:!0,allowUseBrick:!0,modifier:"="}),null!=t&&t.reward&&(m[e]=S(a.value.expression,{...r,errors:[]},{allowExpression:!0,ambiguous:!0}))}else r.errors.push({message:`Unsupported attribute value type in component: ${a.value.type}`,node:a.value,severity:"error"})}const{textContent:g,children:x}=b(e.children,r,t,n);g&&(l.textContent=g);const $={name:a,componentId:y,properties:l,events:f,children:x};return null!=t&&t.reward&&($.ambiguousProps=m),y&&(r.componentsMap.has(y)?r.errors.push({message:`Duplicated componentId "${y}" found`,node:e,severity:"error"}):r.componentsMap.set(y,$)),{type:"component",component:$}}if(s.isJSXFragment(e))return e.children.flatMap((e=>v(e,r,t,n)));if(s.isJSXText(e))return e.value.trim()?{type:"text",text:e.value}:null;if(s.isJSXExpressionContainer(e))return v(e.expression,r,t,n);if(s.isJSXEmptyExpression(e))return null;if(s.isCallExpression(e)){const o=e.callee;if(s.isMemberExpression(o)&&s.isIdentifier(o.property)&&!o.computed&&"map"===o.property.name){const i=e.arguments;if(i.length>0){i.length>1&&r.errors.push({message:"Only one argument is allowed for map function",node:i[1],severity:"error"});const[e]=i;if(s.isArrowFunctionExpression(e)){if(s.isBlockStatement(e.body))return r.errors.push({message:"Block statement is not allowed in map function",node:e.body,severity:"error"}),null;if(l(e.body)){var m;const i=a(o.object);if(i)return r.errors.push({message:`Unsupported node type as the object of a map function with JSX element: ${i.type}`,node:i,severity:"error"}),null;if(e.params.length>2)return r.errors.push({message:"Only up to 2 parameters are allowed in map function with JSX element",node:e,severity:"error"}),null;const p=e.params.find((e=>!s.isIdentifier(e)));if(p)return r.errors.push({message:"Only identifier parameters are allowed in map function with JSX element",node:p,severity:"error"}),null;const l=new Map(null!==(m=null==n?void 0:n.replacePatterns)&&void 0!==m?m:[]);if(e.params.length>0){const[r,t]=e.params;l.set(r.name,"ITEM"),t&&l.set(t.name,"INDEX")}return{type:"component",component:{name:"ForEach",properties:{dataSource:w(o.object,r,{...n,modifier:"=",allowExpression:!0})},children:$([e.body],r,t,{...n,replacePatterns:l})}}}}}}}else if(s.isConditionalExpression(e)){const{test:s,consequent:o,alternate:i}=e;if(l(o)||l(i)){const e=a(s);return e?(r.errors.push({message:`Unsupported node type in conditional expression test: ${e.type}`,node:e,severity:"error"}),null):{type:"component",component:{name:"If",properties:{dataSource:w(s,r,{...n,modifier:"=",allowExpression:!0})},children:[...$([o],r,t,n),...$([i],r,t,n).map((e=>({...e,slot:"else"})))]}}}}else if(s.isLogicalExpression(e)){const{left:s,right:o,operator:i}=e;if(("&&"===i||"||"===i)&&l(o)){const i=a(s);if(i)return r.errors.push({message:`Unsupported node type in logical expression left: ${i.type}`,node:i,severity:"error"}),null;const p=$([o],r,t,n);return{type:"component",component:{name:"If",properties:{dataSource:w(s,r,{...n,modifier:"=",allowExpression:!0})},children:"&&"===e.operator?p:p.map((e=>({...e,slot:"else"})))}}}}if(s.isExpression(e)){const t=a(e);return t?(r.errors.push({message:`Unsupported node type in expression: ${t.type}`,node:t,severity:"error"}),null):{type:"expression",expression:e}}return r.errors.push({message:`Unsupported node type in component: ${e.type}`,node:e,severity:"error"}),null}function b(e,r,t,n){let s=e.flatMap((e=>v(e,r,t,n))),o=s.every((e=>"text"===(null==e?void 0:e.type)));if(!o){let e=null;const r=[];for(const t of s){if(null===t);else if("text"===t.type||"expression"===t.type){var i,a,p;if("text"===(null===(i=e)||void 0===i?void 0:i.type)||"expression"===(null===(a=e)||void 0===a?void 0:a.type)){e={type:"merged",children:[e,t]},r.splice(r.length-1,1,e);continue}if("merged"===(null===(p=e)||void 0===p?void 0:p.type)){e.children.push(t);continue}}e=t,r.push(t)}s=r,o=s.every((e=>"text"===(null==e?void 0:e.type)||"merged"===(null==e?void 0:e.type)&&e.children.every((e=>"text"===e.type))))}return o?{textContent:s.flatMap((e=>"text"===e.type?e.text:e.children.map((e=>e.text)))).join("").trim()}:s.every((e=>!!e&&"component"!==e.type))?{textContent:f(d(x(s.flatMap((e=>"merged"===e.type?e.children:e)),r.source),r),null==n?void 0:n.replacePatterns)}:{children:s.filter((e=>!!e)).map((e=>"component"===e.type?e.component:{name:"Plaintext",properties:{textContent:"text"===e.type?e.text:f(d("expression"===e.type?`<%= ${I(r.source,e.expression)} %>`:x(e.children,r.source),r),null==n?void 0:n.replacePatterns)}}))}}function x(e,r){return`<%= CTX.__builtin_fn_mergeTexts(${e.map((e=>"text"===e.type?JSON.stringify(e):`{type:"expression",value:(${I(r,e.expression)})}`)).join(", ")}) %>`}function $(e,r,t,n){const{textContent:s,children:o}=b(e,r,t,n);return null!=o?o:[{name:"Plaintext",properties:{textContent:s}}]}const E=Symbol("ambiguous");function S(e,r,t){if(s.isObjectExpression(e))return function(e,r,t){if(e.properties.some((e=>s.isSpreadElement(e)))&&t.allowExpression){const s=a(e);if(!s){var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"})}const o={};for(const n of e.properties)if(s.isObjectProperty(n)){if(n.computed||n.shorthand){r.errors.push({message:"Computed properties and shorthand properties are not supported",node:n.key,severity:"error"});continue}let e;if(s.isIdentifier(n.key))e=n.key.name;else{if(!s.isStringLiteral(n.key)){r.errors.push({message:`Unsupported object key type: ${n.key.type}`,node:n.key,severity:"error"});continue}e=n.key.value}o[e]=S(n.value,r,t)}else r.errors.push({message:`Unsupported property type: ${n.type}`,node:n,severity:"error"});return o}(e,r,t);if(s.isArrayExpression(e))return function(e,r,t){if(e.elements.some((e=>s.isSpreadElement(e)))&&t.allowExpression){const s=a(e);if(!s){var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"})}const o=[];for(const n of e.elements)null!==n?s.isSpreadElement(n)?r.errors.push({message:"Spread elements are not supported in arrays",node:n,severity:"error"}):o.push(S(n,r,t)):r.errors.push({message:"Array elements cannot be empty",node:e,severity:"error"});return o}(e,r,t);if(s.isStringLiteral(e)||s.isNumericLiteral(e)||s.isBooleanLiteral(e))return e.value;if(s.isNullLiteral(e))return null;if(!s.isIdentifier(e)||"undefined"!==e.name){if(t.allowUseBrick&&s.isArrowFunctionExpression(e)){const n=e.body;if(s.isBlockStatement(n))return r.errors.push({message:"Block statements are not supported in render callback",node:n,severity:"error"}),null;const o=[];for(const t of e.params){if(!s.isIdentifier(t))return r.errors.push({message:`Unsupported parameter type: ${t.type}`,node:t,severity:"error"}),null;o.push(t.name)}return{params:o,children:$([n],r,void 0,t)}}if(s.isExpression(e)&&t.allowExpression){const s=a(e);if(s)return r.errors.push({message:`Unsupported node type: ${s.type}`,node:s,severity:"error"}),null;{var n;if(t.ambiguous)return E;const s=I(r.source,e);return f(d(`<%${null!==(n=t.modifier)&&void 0!==n?n:""} ${s} %>`,r),null==t?void 0:t.replacePatterns)}}return r.errors.push({message:`Unsupported node type: ${e.type}`,node:e,severity:"error"}),null}}function w(e,r,t){let n=!1;if(s.traverse(e,{enter(e,r){var t;let o;n||s.isStringLiteral(e)||s.isNumericLiteral(e)||s.isBooleanLiteral(e)||s.isNullLiteral(e)||s.isObjectExpression(e)||s.isArrayExpression(e)||s.isObjectProperty(e)||s.isIdentifier(e)&&(o=null===(t=r[r.length-1])||void 0===t?void 0:t.node,1)&&(o&&s.isObjectProperty(o)?!o.computed&&!o.shorthand:"undefined"===e.name)||(n=!0)}}),n&&!a(e)){var o;const n=I(r.source,e);return f(d(`<%${null!==(o=t.modifier)&&void 0!==o?o:""} ${n} %>`,r),null==t?void 0:t.replacePatterns)}return S(e,r,t)}function I(e,r){const t=[];s.traverse(r,{enter(e){(s.isTSTypeAnnotation(e)||s.isTSTypeParameterInstantiation(e))&&t.push([e.start,e.end])}});let n="",o=r.start;for(const[r,s]of t)r>o&&(n+=e.substring(o,r),o=s);return n+=e.substring(o,r.end),n}function k(e,r,t){const n=e.openingElement;if(!s.isJSXIdentifier(n.name))return void r.errors.push({message:`Expected JSXIdentifier, but got ${n.name.type}`,node:n.name,severity:"error"});const o=n.name.name;if("View"!==o)return void r.errors.push({message:`Expected <View>, but got <${o}>`,node:n.name,severity:"error"});for(const e of n.attributes){if(s.isJSXSpreadAttribute(e)){r.errors.push({message:"Spread attributes are not supported in <eo-view>",node:e,severity:"error"});continue}if(!s.isJSXIdentifier(e.name)){r.errors.push({message:`Expected JSXIdentifier, but got ${e.name.type}`,node:e.name,severity:"error"});continue}const t=e.name.name;var i,a;"title"===t?s.isStringLiteral(e.value)?r.title=e.value.value:r.errors.push({message:`"title" attribute in <eo-view> expects a string literal, but got ${null===(i=e.value)||void 0===i?void 0:i.type}`,node:null!==(a=e.value)&&void 0!==a?a:e,severity:"error"}):r.errors.push({message:`Unsupported attribute "${t}" in <eo-view>`,node:e.name,severity:"notice"})}r.title||r.errors.push({message:'"title" attribute is required in <eo-view>',node:n.name,severity:"warning"});const p=$(e.children,r,t);r.components.push(...p)}function j(e,r){e.async||e.generator?r.errors.push({message:"Function declaration cannot be async or generator",node:e,severity:"error"}):e.id?r.functions.push({name:e.id.name,source:m(r.source.slice(e.start,e.end),r,e.id.name),typescript:!0}):r.errors.push({message:"Function declaration must have a name",node:e,severity:"error"})}function A(e,r,t,n,s,o,i){var a;const p=g(e,r,t);if(!p)return null;r.contracts.add(p.api);const l={name:n,scope:r.templateCollection?"template":"view",config:i,...p};if(s){if(s.length>("catch"===o?1:2))return r.errors.push({message:`"callApi().${o}()" expects no more than 2 arguments, but got ${s.length}`,node:s[1],severity:"error"}),!1;if(s.length>0){const e=C(s[0],r);e&&(l["catch"===o?"rejectTransform":"transform"]=e)}if("catch"!==o&&s.length>1){const e=C(s[1],r);e&&(l.rejectTransform=e)}}(null!==(a=r.templateCollection)&&void 0!==a?a:r).dataSources.push(l)}function C(e,r){if(!s.isArrowFunctionExpression(e))return r.errors.push({message:`"callApi().then()" callback expects an arrow function, but got ${e.type}`,node:e,severity:"error"}),null;if(!s.isExpression(e.body))return r.errors.push({message:`"callApi().then()" callback function body expects an expression, but got ${e.body.type}`,node:e.body,severity:"error"}),null;var t;if(e.params.length>1)return r.errors.push({message:`"callApi().then()" callback function expects exactly 0 or 1 parameter, but got ${e.params.length}`,node:null!==(t=e.params[1])&&void 0!==t?t:e,severity:"error"}),null;const n=`<% ${I(r.source,e.body)} %>`;if(0===e.params.length)return n;const o=e.params[0];return s.isIdentifier(o)?f(n,new Map([[o.name,"DATA"]])):(r.errors.push({message:`"callApi().then()" callback function parameter expects an identifier, but got ${o.type}`,node:o,severity:"error"}),null)}function P(e,r,t,n){if(e.async||e.generator)return void r.errors.push({message:"Function declaration cannot be async or generator",node:e,severity:"error"});if("template"===t){if(e.params.length>1)return void r.errors.push({message:`Component function expects at most 1 parameter, but got ${e.params.length}`,node:e.params[1],severity:"error"})}else if(e.params.length>0)return void r.errors.push({message:`View function expects no parameter, but got ${e.params.length}`,node:e.params[0],severity:"error"});let o,i,a,p;if("template"===t){o=[],i=new Map,a=[],p=[];const t=[];r.templateCollection={identifiers:o,setters:i,dataSources:p,events:t};const n=e.params[0];if(n){if(!s.isObjectPattern(n))return r.errors.push({message:`Component function parameter expects an object pattern, but got ${n.type}`,node:n,severity:"error"}),void delete r.templateCollection;for(const e of n.properties){if(s.isRestElement(e)){r.errors.push({message:"Component function parameter does not support rest element",node:e,severity:"error"});continue}if(e.computed||!e.shorthand){r.errors.push({message:"Unexpected computed or non-shorthand property in component function parameter",node:e,severity:"error"});continue}if(!s.isIdentifier(e.key)){r.errors.push({message:`Component function parameter property expects an identifier as key, but got ${e.key.type}`,node:e.key,severity:"error"});continue}const n=e.key.name;if(/^on[A-Z]/.test(n))s.isIdentifier(e.value)||r.errors.push({message:`Event handler property "${n}" expects an identifier as value, but got ${e.value.type}`,node:e.value,severity:"error"}),t.push(n);else if(o.push(n),s.isAssignmentPattern(e.value)){const t=S(e.value.right,r,{allowExpression:!0});a.push({name:n,expose:!0,value:t})}else a.push({name:n,expose:!0})}}}else o=r.contexts,i=r.contextSetters,a=r.variables,p=r.dataSources;for(const r of e.body.body)if(s.isVariableDeclaration(r))for(const e of r.declarations)if(s.isCallExpression(e.init)&&s.isIdentifier(e.init.callee))switch(e.init.callee.name){case"useState":if(s.isArrayPattern(e.id)){const[r,t]=e.id.elements;if(s.isIdentifier(r)){const e=r.name;o.push(e),s.isIdentifier(t)&&i.set(t.name,e)}}break;case"useResource":if(s.isArrayPattern(e.id)){const[r]=e.id.elements;if(s.isIdentifier(r)){const e=r.name;o.push(e)}}}else s.isIdentifier(e.id)&&o.push(e.id.name);for(const o of e.body.body)if(s.isVariableDeclaration(o)){if("const"!==o.kind){r.errors.push({message:`Unsupported variable declaration kind: ${o.kind}`,node:o,severity:"error"});continue}for(const e of o.declarations){if(e.init&&s.isCallExpression(e.init)&&s.isIdentifier(e.init.callee))switch(e.init.callee.name){case"useState":{if(!s.isArrayPattern(e.id)){r.errors.push({message:`"useState()" return value must be destructured into an array pattern, received ${e.id.type}`,node:e.id,severity:"error"});continue}const[t,n]=e.id.elements;if(!s.isIdentifier(t)){r.errors.push({message:`"useState()" expects an identifier as the variable name, received ${null==t?void 0:t.type}`,node:t,severity:"error"});continue}if(n&&!s.isIdentifier(n)){r.errors.push({message:`"useState()" expects an identifier as the setter name, received ${n.type}`,node:n,severity:"error"});continue}const o=t.name,i=e.init.arguments;if(0===i.length)a.push({name:o,expose:!1});else{i.length>1&&r.errors.push({message:`"useState()" expects at most 1 argument, but got ${i.length}`,node:e.init,severity:"error"});const t=S(i[0],r,{allowExpression:!0});a.push({name:o,expose:!1,value:t})}continue}case"useResource":{if(!s.isArrayPattern(e.id)){r.errors.push({message:`"useResource()" return value must be destructured into an array pattern, received ${e.id.type}`,node:e.id,severity:"error"});continue}const[t]=e.id.elements;if(!s.isIdentifier(t)){r.errors.push({message:`"useResource()" expects an identifier as the variable name, received ${null==t?void 0:t.type}`,node:t,severity:"error"});continue}const o=t.name,i=e.init.arguments;(0===i.length||i.length>2)&&r.errors.push({message:`"useResource()" expects 1 or 2 arguments, but got ${i.length}`,node:e.init,severity:"error"});const a=i[0];if(!s.isArrowFunctionExpression(a)){r.errors.push({message:`"useResource()" expects an arrow function as the argument, but got ${a.type}`,node:a,severity:"error"});continue}if(a.async||a.generator){r.errors.push({message:'"useResource()" argument function cannot be async or generator',node:a,severity:"error"});continue}const p=a.body;if(s.isBlockStatement(p)){r.errors.push({message:'Block statement is not supported in "useResource()" argument function',node:p,severity:"error"});continue}if(!s.isCallExpression(p)){r.errors.push({message:`"useResource()" argument function must return a call expression, but got ${p.type}`,node:p,severity:"error"});continue}const{callee:l}=p;if(!s.isIdentifier(l)&&!s.isMemberExpression(l)){r.errors.push({message:`"useResource()" argument function must return a call to an identifier or member expression, but got ${l.type}`,node:l,severity:"error"});continue}const u=i[1];let c;if(u){if(!s.isObjectExpression(u)){r.errors.push({message:`"useResource()" second argument must be an object expression, but got ${u.type}`,node:u,severity:"error"});continue}for(const e of u.properties){if(!s.isObjectProperty(e)){r.errors.push({message:`Unsupported property type in "useResource()" second argument: ${e.type}`,node:e,severity:"error"});continue}const t=e.key;s.isIdentifier(t)?e.computed?r.errors.push({message:'"useResource()" second argument property key cannot be computed',node:t,severity:"error"}):"enabled"===t.name||"fallback"===t.name?(null!=c||(c={}),c[t.name]=S(e.value,r,{allowExpression:!0})):r.errors.push({message:`"useResource()" second argument property key must be "enabled" or "fallback", but got "${t.name}"`,node:t,severity:"error"}):r.errors.push({message:`"useResource()" second argument property key must be an identifier, but got ${t.type}`,node:t,severity:"error"})}}if(s.isMemberExpression(l)){if(!s.isIdentifier(l.property)||l.computed||"then"!==l.property.name&&"catch"!==l.property.name){r.errors.push({message:"Unexpected awaited expression",node:l.property,severity:"error"});continue}A(l.object,r,n,o,p.arguments,l.property.name,c)}else A(p,r,n,o,void 0,void 0,c);continue}}if(!s.isIdentifier(e.id)){r.errors.push({message:`Expect an identifier as the variable name, received ${e.id.type}`,node:e.id,severity:"error"});continue}const t=e.id.name;if(null==e.init)e.id.typeAnnotation||r.errors.push({message:`Variable "${t}" with no initial value must have a type annotation`,node:e.id,severity:"error"}),a.push({name:t});else{const n=S(e.init,r,{allowExpression:!0});a.push({name:t,value:n})}}}else{if(s.isReturnStatement(o)){var l;if(!s.isJSXElement(o.argument))return void r.errors.push({message:`Exported default declaration must be a JSX element, but got ${null===(l=o.argument)||void 0===l?void 0:l.type}`,node:o.argument,severity:"error"});if("template"===t){const t=$([o.argument],r,n);return r.templates.push({name:e.id.name,variables:a,dataSources:p,components:t}),void delete r.templateCollection}return void k(o.argument,r,n)}s.isTSInterfaceDeclaration(o)||s.isTSTypeAliasDeclaration(o)||r.errors.push({message:`Unsupported top level statement type: ${o.type}`,node:o,severity:"error"})}r.errors.push({message:"Component function declaration must have a return statement returning a JSX element",node:e,severity:"error"})}function T(e,r,t){for(const t of e.program.body)s.isFunctionDeclaration(t)&&t.id&&!X(t.id)&&r.functionNames.push(t.id.name);for(const n of e.program.body)if(s.isFunctionDeclaration(n)){if(!n.id){r.errors.push({message:"Function declaration must have a name",node:n,severity:"error"});continue}X(n.id)?P(n,r,"template",t):j(n,r)}else if(s.isExportDefaultDeclaration(n)){if(!s.isFunctionDeclaration(n.declaration)){r.errors.push({message:`Expected function declaration as default export, but got ${n.declaration.type}`,node:n.declaration,severity:"error"});continue}P(n.declaration,r,"view",t)}else s.isTSInterfaceDeclaration(n)||s.isTSTypeAliasDeclaration(n)||r.errors.push({message:`Unsupported top level statement type: ${n.type}`,node:n,severity:"error"})}function X(e){return e.name[0]>="A"&&e.name[0]<="Z"}(0,t(47695).p)(class{parse(e,r){return function(e,r){var t,o;const i=[],a={source:e,title:void 0,dataSources:[],variables:[],components:[],componentsMap:new Map,errors:i,contexts:null!==(t=null==r?void 0:r.withContexts)&&void 0!==t?t:[],contextSetters:new Map,functionNames:[],functions:[],contracts:new Set,templates:[]};let p;try{p=(0,n.parse)(e,{plugins:["jsx","typescript"],sourceType:"module",errorRecovery:!0})}catch(e){return i.push({message:`Failed to parse TSX: ${e}`,node:null,severity:"fatal"}),a}if(null!==(o=p.errors)&&void 0!==o&&o.length)for(const e of p.errors)i.push({message:`${e.code}: ${e.reasonCode}`,node:null,severity:"error"});for(const e of p.program.body)if(s.isExportDefaultDeclaration(e)){if(s.isFunctionDeclaration(e.declaration))return T(p,a,r),a;break}return function(e,r,t){const{errors:n,contexts:o,functionNames:i,variables:a}=r;s.traverse(e.program,{enter(e){s.isTSAnyKeyword(e)?n.push({message:"Unexpected 'any' type",node:e,severity:"warning"}):s.isTSAsExpression(e)&&n.push({message:"Unexpected 'as' usage",node:e,severity:"warning"})}});for(const r of e.program.body)if(s.isVariableDeclaration(r))for(const e of r.declarations)s.isIdentifier(e.id)&&o.push(e.id.name);else s.isFunctionDeclaration(r)&&r.id&&i.push(r.id.name);let p=!1;for(const o of e.program.body)if(s.isVariableDeclaration(o)){if(p&&n.push({message:"Unexpected variable declaration after export",node:o,severity:"error"}),"let"!==o.kind&&"const"!==o.kind){n.push({message:`Unsupported variable declaration kind: ${o.kind}`,node:o,severity:"error"});continue}for(const e of o.declarations){if(!s.isIdentifier(e.id)){n.push({message:`Expect an identifier as the variable name, received ${e.id.type}`,node:e.id,severity:"error"});continue}const o=e.id.name;if(null==e.init)e.id.typeAnnotation||n.push({message:`Variable "${o}" with no initial value must have a type annotation`,node:e.id,severity:"error"}),a.push({name:o});else if(s.isAwaitExpression(e.init)){const i=e.init.argument;if(!s.isCallExpression(i)){n.push({message:`Await expression must be a call expression, received ${i.type}`,node:i,severity:"error"});continue}const{callee:a}=i;if(!s.isIdentifier(a)&&!s.isMemberExpression(a)){n.push({message:`Await expression must call an identifier or member expression, received ${a.type}`,node:a,severity:"error"});continue}if(s.isMemberExpression(a))if(s.isIdentifier(a.object)&&"Entity"===a.object.name){if(!s.isIdentifier(a.property)||a.computed||"list"!==a.property.name&&"get"!==a.property.name){n.push({message:"Unexpected awaited expression",node:a.property,severity:"error"});continue}A(i,r,t,o)}else{if(!s.isIdentifier(a.property)||a.computed||"then"!==a.property.name&&"catch"!==a.property.name){n.push({message:"Unexpected awaited expression",node:a.property,severity:"error"});continue}A(a.object,r,t,o,i.arguments,a.property.name)}else A(i,r,t,o)}else{const t=S(e.init,r,{allowExpression:!0});a.push({name:o,value:t})}}}else if(s.isFunctionDeclaration(o))p&&n.push({message:"Unexpected function declaration after export",node:o,severity:"error"}),j(o,r);else if(s.isExportDefaultDeclaration(o)){p=!0;const e=o.declaration;if(!s.isJSXElement(e)){n.push({message:`Exported default declaration must be a JSX element, but got ${e.type}`,node:e,severity:"error"});continue}k(e,r,t)}else s.isTSInterfaceDeclaration(o)||s.isTSTypeAliasDeclaration(o)||n.push({message:`Unsupported top level statement type: ${o.type}`,node:o,severity:"error"})}(p,a,r),a}(e,r)}})}},x={};function $(e){var r=x[e];if(void 0!==r)return r.exports;var t=x[e]={exports:{}};return b[e](t,t.exports,$),t.exports}$.m=b,$.c=x,$.x=()=>{var e=$.O(void 0,[5521,4957,1321,580],(()=>$(20382)));return $.O(e)},e=[],$.O=(r,t,n,s)=>{if(!t){var o=1/0;for(l=0;l<e.length;l++){for(var[t,n,s]=e[l],i=!0,a=0;a<t.length;a++)(!1&s||o>=s)&&Object.keys($.O).every((e=>$.O[e](t[a])))?t.splice(a--,1):(i=!1,s<o&&(o=s));if(i){e.splice(l--,1);var p=n();void 0!==p&&(r=p)}}return r}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[t,n,s]},$.d=(e,r)=>{for(var t in r)$.o(r,t)&&!$.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},$.f={},$.e=e=>Promise.all(Object.keys($.f).reduce(((r,t)=>($.f[t](e,r),r)),[])),$.u=e=>"chunks/"+e+"."+{1122:"95231c39",4957:"b0937d56",5521:"eeb5a205",6773:"afd27a30"}[e]+".js",$.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),$.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),$.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{$.S={};var e={},r={};$.I=(t,n)=>{n||(n=[]);var s=r[t];if(s||(s=r[t]={}),!(n.indexOf(s)>=0)){if(n.push(s),e[t])return e[t];$.o($.S,t)||($.S[t]={}),$.S[t];var o=[];return e[t]=o.length?Promise.all(o).then((()=>e[t]=1)):1}}})(),(()=>{var e;$.g.importScripts&&(e=$.g.location+"");var r=$.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),$.p=e+"../"})(),r=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},t=(e,t)=>{e=r(e),t=r(t);for(var n=0;;){if(n>=e.length)return n<t.length&&"u"!=(typeof t[n])[0];var s=e[n],o=(typeof s)[0];if(n>=t.length)return"u"==o;var i=t[n],a=(typeof i)[0];if(o!=a)return"o"==o&&"n"==a||"s"==a||"u"==o;if("o"!=o&&"u"!=o&&s!=i)return s<i;n++}},n=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var s=1,o=1;o<e.length;o++)s--,t+="u"==(typeof(a=e[o]))[0]?"-":(s>0?".":"")+(s=2,a);return t}var i=[];for(o=1;o<e.length;o++){var a=e[o];i.push(0===a?"not("+p()+")":1===a?"("+p()+" || "+p()+")":2===a?i.pop()+" "+i.pop():n(a))}return p();function p(){return i.pop().replace(/^\((.+)\)$/,"$1")}},s=(e,t)=>{if(0 in e){t=r(t);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,a=1,p=!0;;a++,i++){var l,u,c=a<e.length?(typeof e[a])[0]:"";if(i>=t.length||"o"==(u=(typeof(l=t[i]))[0]))return!p||("u"==c?a>n&&!o:""==c!=o);if("u"==u){if(!p||"u"!=c)return!1}else if(p)if(c==u)if(a<=n){if(l!=e[a])return!1}else{if(o?l>e[a]:l<e[a])return!1;l!=e[a]&&(p=!1)}else if("s"!=c&&"n"!=c){if(o||a<=n)return!1;p=!1,a--}else{if(a<=n||u<c!=o)return!1;p=!1}else"s"!=c&&"n"!=c&&(p=!1,a--)}}var d=[],m=d.pop.bind(d);for(i=1;i<e.length;i++){var f=e[i];d.push(1==f?m()|m():2==f?m()&m():f?s(f,t):!m())}return!!m()},o=(e,r)=>e&&$.o(e,r),i=e=>(e.loaded=1,e.get()),a=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),p=(e,r,n)=>{var s=n?a(e[r]):e[r];return Object.keys(s).reduce(((e,r)=>!e||!s[e].loaded&&t(e,r)?r:e),0)},l=(e,r,t,s)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(s)+")",u=e=>{throw new Error(e)},c=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=(e,r,t)=>t?t():((e,r)=>u("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(e=>function(r,t,n,s,o){var i=$.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,$.S[r],t,!1,s,o)):e(r,$.S[r],t,n,s,o)})(((e,r,t,n,a,u)=>{if(!o(r,t))return d(e,t,u);var m=p(r,t,n);return s(a,m)||c(l(r,t,m,a)),i(r[t][m])})),f={},y={71321:()=>m("default","@next-core/cook",!1,[0],(()=>Promise.all([$.e(1122),$.e(580)]).then((()=>()=>$(61122))))),40580:()=>m("default","@babel/parser",!1,[0],(()=>$.e(6773).then((()=>()=>$(46773)))))},g={580:[40580],1321:[71321]},h={},$.f.consumes=(e,r)=>{$.o(g,e)&&g[e].forEach((e=>{if($.o(f,e))return r.push(f[e]);if(!h[e]){var t=r=>{f[e]=0,$.m[e]=t=>{delete $.c[e],t.exports=r()}};h[e]=!0;var n=r=>{delete f[e],$.m[e]=t=>{throw delete $.c[e],r}};try{var s=y[e]();s.then?r.push(f[e]=s.then(t).catch(n)):t(s)}catch(e){n(e)}}}))},(()=>{var e={382:1};$.f.i=(r,t)=>{e[r]||/^(1321|580)$/.test(r)||importScripts($.p+$.u(r))};var r=globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[],t=r.push.bind(r);r.push=r=>{var[n,s,o]=r;for(var i in s)$.o(s,i)&&($.m[i]=s[i]);for(o&&o($);n.length;)e[n.pop()]=1;t(r)}})(),v=$.x,$.x=()=>Promise.all([5521,4957,1321,580].map($.e,$)).then(v),$.x()})();
2
+ //# sourceMappingURL=382.6655f2dc.js.map