@exulu/frontend 1.8.0 → 1.9.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.
- package/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +129 -131
- package/dist/.next/app-path-routes-manifest.json +1 -1
- package/dist/.next/build-manifest.json +2 -2
- package/dist/.next/prerender-manifest.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/agents/edit/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +7 -7
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js +4 -4
- package/dist/.next/server/app/(application)/data/[[...query]]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page.js.nft.json +1 -1
- package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/projects/page.js +1 -1
- package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/prompts/page.js +1 -1
- package/dist/.next/server/app/(application)/prompts/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page.js +1 -1
- package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +1 -1
- package/dist/.next/server/app-paths-manifest.json +6 -6
- package/dist/.next/server/chunks/1025.js +1 -0
- package/dist/.next/server/chunks/2270.js +11 -48
- package/dist/.next/server/chunks/3434.js +1 -1
- package/dist/.next/server/chunks/3503.js +1 -0
- package/dist/.next/server/chunks/5084.js +1 -0
- package/dist/.next/server/chunks/5192.js +1 -1
- package/dist/.next/server/chunks/5485.js +1 -1
- package/dist/.next/server/chunks/5600.js +1 -1
- package/dist/.next/server/chunks/5974.js +1 -0
- package/dist/.next/server/chunks/6590.js +1 -1
- package/dist/.next/server/chunks/7471.js +1 -1
- package/dist/.next/server/chunks/8286.js +1 -1
- package/dist/.next/server/chunks/{3679.js → 9874.js} +5 -5
- package/dist/.next/server/middleware-manifest.json +5 -5
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js +2 -0
- package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js.map +1 -0
- package/dist/.next/static/chunks/{4811-316807e25b634f9f.js → 192-72d6868cd891ccc6.js} +8 -8
- package/dist/.next/static/chunks/192-72d6868cd891ccc6.js.map +1 -0
- package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js +2 -0
- package/dist/.next/static/chunks/1957-cf44b1d31a9c7d5c.js.map +1 -0
- package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js +2 -0
- package/dist/.next/static/chunks/342-d9c2d6ae9f9435cb.js.map +1 -0
- package/dist/.next/static/chunks/552-39155a93c527ec6d.js +2 -0
- package/dist/.next/static/chunks/552-39155a93c527ec6d.js.map +1 -0
- package/dist/.next/static/chunks/6367-59655a85d75e19be.js +2 -0
- package/dist/.next/static/chunks/6367-59655a85d75e19be.js.map +1 -0
- package/dist/.next/static/chunks/6373-601400fab8a3bb55.js +2 -0
- package/dist/.next/static/chunks/6373-601400fab8a3bb55.js.map +1 -0
- package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js +2 -0
- package/dist/.next/static/chunks/8030-9c926ea4dfd3a54e.js.map +1 -0
- package/dist/.next/static/chunks/{6805-792cc8008b165c07.js → 8293-0e69d89d2dac7111.js} +10 -10
- package/dist/.next/static/chunks/8293-0e69d89d2dac7111.js.map +1 -0
- package/dist/.next/static/chunks/9953-95900a236271a222.js +2 -0
- package/dist/.next/static/chunks/9953-95900a236271a222.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js +2 -0
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-e4a4693953329671.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-7edb1c7c850f982c.js +2 -0
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-7edb1c7c850f982c.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-8d2b3995cacfd832.js +2 -0
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-8d2b3995cacfd832.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js +2 -0
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js → page-827f50c6d1f150d0.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/evals/cases/{page-a39fef7444581565.js.map → page-827f50c6d1f150d0.js.map} +1 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js +2 -0
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-f04fd5291a1ef7b1.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js +2 -0
- package/dist/.next/static/chunks/app/(application)/prompts/page-2c500e9898447506.js.map +1 -0
- package/dist/.next/static/chunks/app/(application)/workflows/{page-47dedb88cec600d5.js → page-e38f9456120dab69.js} +2 -2
- package/dist/.next/static/chunks/app/(application)/workflows/page-e38f9456120dab69.js.map +1 -0
- package/dist/.next/static/css/6f8c5212af8ef284.css +4 -0
- package/dist/.next/static/css/6f8c5212af8ef284.css.map +1 -0
- package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
- package/package.json +1 -1
- package/dist/.next/server/chunks/2948.js +0 -1
- package/dist/.next/server/chunks/38.js +0 -1
- package/dist/.next/server/chunks/7958.js +0 -1
- package/dist/.next/server/chunks/8050.js +0 -1
- package/dist/.next/static/chunks/1685-9cacdee7e3f0942f.js +0 -2
- package/dist/.next/static/chunks/1685-9cacdee7e3f0942f.js.map +0 -1
- package/dist/.next/static/chunks/1957-39a01a3915f246ab.js +0 -2
- package/dist/.next/static/chunks/1957-39a01a3915f246ab.js.map +0 -1
- package/dist/.next/static/chunks/4811-316807e25b634f9f.js.map +0 -1
- package/dist/.next/static/chunks/5282-68f9880f1f951f44.js +0 -2
- package/dist/.next/static/chunks/5282-68f9880f1f951f44.js.map +0 -1
- package/dist/.next/static/chunks/6367-59cef3c74213925b.js +0 -2
- package/dist/.next/static/chunks/6367-59cef3c74213925b.js.map +0 -1
- package/dist/.next/static/chunks/6373-4c5dffaf4193621c.js +0 -2
- package/dist/.next/static/chunks/6373-4c5dffaf4193621c.js.map +0 -1
- package/dist/.next/static/chunks/6805-792cc8008b165c07.js.map +0 -1
- package/dist/.next/static/chunks/8030-c1b6be46253076cb.js +0 -2
- package/dist/.next/static/chunks/8030-c1b6be46253076cb.js.map +0 -1
- package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js +0 -2
- package/dist/.next/static/chunks/9621-f81c4d7c0ecf5a67.js.map +0 -1
- package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js +0 -2
- package/dist/.next/static/chunks/9953-dfb5fc0e5b74ec09.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-4e7e02768ed1a72a.js +0 -2
- package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/page-4e7e02768ed1a72a.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-38f845d5ccdad76b.js +0 -2
- package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-38f845d5ccdad76b.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-a391b8407f74e9b4.js +0 -2
- package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-a391b8407f74e9b4.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-cf6f8d2bd4e9c819.js +0 -2
- package/dist/.next/static/chunks/app/(application)/evals/[id]/page-cf6f8d2bd4e9c819.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-bc859da58d8505f7.js +0 -2
- package/dist/.next/static/chunks/app/(application)/projects/[project]/page-bc859da58d8505f7.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js +0 -2
- package/dist/.next/static/chunks/app/(application)/prompts/page-d2f36ff149385efd.js.map +0 -1
- package/dist/.next/static/chunks/app/(application)/workflows/page-47dedb88cec600d5.js.map +0 -1
- package/dist/.next/static/css/c8c015815c72d053.css +0 -4
- package/dist/.next/static/css/c8c015815c72d053.css.map +0 -1
- /package/dist/.next/static/{GOwerAkBncYx0J8q1TqQb → ls-syPkq9-MWp-VWWDEZJ}/_buildManifest.js +0 -0
- /package/dist/.next/static/{GOwerAkBncYx0J8q1TqQb → ls-syPkq9-MWp-VWWDEZJ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1957],{27699:function(e,s,a){a.d(s,{x:function(){return w}});var t=a(57437),l=a(2265),r=a(12199),n=a(13832),i=a(27689),o=a(26110),d=a(62869),c=a(95186),m=a(76818),u=a(26815),x=a(40875),h=a(88893),v=a(18930),p=a(77992),f=a(94508),b=a(8014),g=a(12339),j=a(35629);function w(e){var s,a,w,N;let{isOpen:y,onClose:C,messages:k,sessionTitle:_,existingWorkflow:E,isReadOnly:D=!1}=e,{user:S}=(0,l.useContext)(n.S),{toast:A}=(0,p.pm)(),[U,z]=(0,l.useState)({rights_mode:(null==E?void 0:E.rights_mode)||"private",users:(null==E?void 0:null===(s=E.RBAC)||void 0===s?void 0:s.users)||[],roles:(null==E?void 0:null===(a=E.RBAC)||void 0===a?void 0:a.roles)||[]}),Z=!!E,[W,B]=(0,l.useState)((null==E?void 0:E.name)||""),[R,V]=(0,l.useState)((null==E?void 0:E.description)||""),[M,P]=(0,l.useState)((null==E?void 0:E.variables)||[]),[F,I]=(0,l.useState)((null==E?void 0:E.steps_json)||[]),[q,O]=(0,l.useState)(!1),[$,H]=(0,l.useState)("setup"),[K,T]=(0,l.useState)(!1),[J,Q]=(0,l.useState)(null),[G,L]=(0,l.useState)(""),[X]=(0,r.D)(i.B_),[Y]=(0,r.D)(i._J);l.useEffect(()=>{if(k.length>0){let e=[];k.forEach((s,a)=>{let t=s.content||(s.parts?s.parts.filter(e=>"text"===e.type).map(e=>e.text).join("\n"):"");"user"===s.role?e.push({id:"step_".concat(a+1),type:"user",content:t,variablesUsed:[]}):"assistant"===s.role?e.push({id:"step_".concat(a+1),type:"assistant",contentExample:t}):"system"===s.role&&s.parts&&s.parts.forEach((s,t)=>{"tool-invocation"===s.type&&s.toolInvocation&&e.push({id:"step_".concat(a+1,"_").concat(t),type:"tool",toolName:s.toolInvocation.toolName})})}),console.log("transformedSteps",e),I(e),B(_||"My Workflow")}},[k,_,F.length]);let ee=(0,l.useCallback)((e,s)=>{if(!e.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/))return A({title:"Invalid variable name",description:"Variable name must start with a letter or underscore, contain only letters, numbers, and underscores, and be 2-64 characters long.",variant:"destructive"}),!1;if(M.some(s=>s.name===e))return!0;let a={name:e,type:"string",required:!0,description:s||"Auto-detected variable"};return P(e=>[...e,a]),!0},[M,A]),es=(0,l.useCallback)((e,s)=>{let a=(s.match(/\{([A-Za-z_][A-Za-z0-9_]{1,63})\}/g)||[]).map(e=>e.slice(1,-1));a.forEach(e=>{ee(e)}),I(t=>t.map(t=>t.id===e?{...t,content:s,variablesUsed:a}:t));let t=new Set;F.forEach(a=>{a.id===e?(s.match(/\{([A-Za-z_][A-Za-z0-9_]{1,63})\}/g)||[]).forEach(e=>t.add(e.slice(1,-1))):a.variablesUsed&&a.variablesUsed.forEach(e=>t.add(e))}),P(e=>e.filter(e=>t.has(e.name)))},[F,ee]),ea=(0,l.useCallback)(e=>{P(s=>s.filter(s=>s.name!==e)),I(s=>s.map(s=>{var a,t;return{...s,content:null===(a=s.content)||void 0===a?void 0:a.replace(RegExp("\\{".concat(e,"\\}"),"g"),""),variablesUsed:(null===(t=s.variablesUsed)||void 0===t?void 0:t.filter(s=>s!==e))||[]}}))},[]),et=(0,l.useCallback)((e,s)=>s.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/)?M.some(a=>a.name===s&&a.name!==e)?(A({title:"Variable name already exists",description:"A variable with this name already exists.",variant:"destructive"}),!1):(P(a=>a.map(a=>a.name===e?{...a,name:s}:a)),I(a=>a.map(a=>{var t,l;return{...a,content:null===(t=a.content)||void 0===t?void 0:t.replace(RegExp("\\{".concat(e,"\\}"),"g"),"{".concat(s,"}")),variablesUsed:(null===(l=a.variablesUsed)||void 0===l?void 0:l.map(a=>a===e?s:a))||[]}})),!0):(A({title:"Invalid variable name",description:"Variable name must start with a letter or underscore and contain only letters, numbers, and underscores.",variant:"destructive"}),!1),[M,A]),el=(0,l.useMemo)(()=>{var e,s;return!!W.trim()&&0!==F.length&&("users"!==U.rights_mode||(null===(e=U.users)||void 0===e?void 0:e.length)!==0)&&("roles"!==U.rights_mode||(null===(s=U.roles)||void 0===s?void 0:s.length)!==0)&&F.filter(e=>"user"===e.type).every(e=>{let s=e.content||"";return(null==s?void 0:s.replace(/\{[^}]+\}/g,"")).trim().length>0})},[W,F,U]),er=(0,l.useCallback)(async()=>{if(el&&(null==S?void 0:S.id)){O(!0);try{let e=F.map(e=>({id:e.id,type:e.type,..."user"===e.type&&{content:e.content},..."assistant"===e.type&&{contentExample:e.contentExample},..."tool"===e.type&&{toolName:e.toolName}}));Z&&E?(await Y({variables:{id:E.id,name:W.trim(),description:R.trim()||null,rights_mode:U.rights_mode,RBAC:{users:U.users,roles:U.roles},variables:M,steps_json:e}}),A({title:"Workflow updated!",description:'"'.concat(W,'" has been updated successfully.')})):(await X({variables:{name:W.trim(),description:R.trim()||null,owner:S.id,rights_mode:U.rights_mode,RBAC:{users:U.users,roles:U.roles},variables:M,steps_json:e}}),A({title:"Workflow created!",description:'"'.concat(W,'" has been saved as a workflow template.')})),C()}catch(e){console.error("Error saving workflow:",e),A({title:"Error saving workflow",description:"There was an error saving your workflow. Please try again.",variant:"destructive"})}finally{O(!1)}}},[el,null==S?void 0:S.id,W,R,U,M,F,X,Y,A,C,Z,E]);return y?(0,t.jsx)(o.Vq,{open:y,onOpenChange:C,children:(0,t.jsxs)(o.cZ,{className:"max-w-4xl max-h-[92vh] flex flex-col",children:[(0,t.jsxs)(o.fK,{className:"pb-4",children:[(0,t.jsx)(o.$N,{className:"text-lg",children:Z?D?"View Workflow":"Edit Workflow":"Save as Workflow"}),(0,t.jsx)(o.Be,{className:"text-sm",children:Z?D?"View workflow details and configuration.":"Modify this workflow template. Edit your messages and use {variable_name} syntax to create variables.":"Convert this conversation into a reusable workflow template. Edit your messages and use {variable_name} syntax to create variables."})]}),(0,t.jsx)("div",{className:"flex-1 mt-6",children:(0,t.jsxs)(g.mQ,{value:$,onValueChange:H,className:"h-full flex flex-col",children:[(0,t.jsxs)(g.dr,{className:"grid w-full grid-cols-2 mb-6",children:[(0,t.jsx)(g.SP,{value:"setup",className:"data-[state=active]:bg-background",children:"Setup & Permissions"}),(0,t.jsx)(g.SP,{value:"workflow",className:"data-[state=active]:bg-background",children:"Workflow Steps & Variables"})]}),(0,t.jsxs)("div",{className:"flex-1 pb-6",children:[(0,t.jsx)(g.nU,{value:"setup",className:"mt-0 h-full",children:(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(u._,{htmlFor:"workflow-name",className:"text-base font-semibold",children:"Workflow Name *"}),(0,t.jsx)(c.I,{id:"workflow-name",value:W,onChange:e=>B(e.target.value),placeholder:"My Workflow",className:"mt-2 h-11",readOnly:D}),!W.trim()&&(0,t.jsxs)("p",{className:"text-sm text-destructive mt-1 flex items-center",children:[(0,t.jsx)("span",{className:"mr-1",children:"⚠️"}),"Workflow name is required"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(u._,{htmlFor:"workflow-description",className:"text-base font-semibold",children:"Description"}),(0,t.jsx)(m.g,{id:"workflow-description",value:R,onChange:e=>V(e.target.value),placeholder:"Describe what this workflow does and when to use it...",rows:3,className:"mt-2 resize-none",readOnly:D})]})]}),(0,t.jsxs)("div",{className:"border-t pt-6",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-base font-semibold mb-1",children:"Sharing & Permissions"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Control who can view and edit this workflow"})]}),(0,t.jsxs)(d.z,{type:"button",variant:"outline",size:"sm",onClick:()=>T(!K),className:"ml-4",children:[K?"Hide Advanced":"Show Advanced",(0,t.jsx)(x.Z,{className:(0,f.cn)("w-4 h-4 ml-1 transition-transform",K&&"rotate-180")})]})]}),K&&(0,t.jsx)(b.P,{initialRightsMode:null==E?void 0:E.rights_mode,initialUsers:null==E?void 0:null===(w=E.RBAC)||void 0===w?void 0:w.users,initialRoles:null==E?void 0:null===(N=E.RBAC)||void 0===N?void 0:N.roles,onChange:(e,s,a)=>{z({rights_mode:e,users:s,roles:a})}}),!K&&(0,t.jsx)("div",{className:"text-sm text-muted-foreground bg-muted/30 p-3 rounded-md",children:"Using default permissions (private to you)"})]})]})}),(0,t.jsx)(g.nU,{value:"workflow",className:"mt-0 h-full",children:(0,t.jsxs)("div",{className:"h-full flex gap-6",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)("h3",{className:"text-base font-semibold mb-2",children:"Conversation Steps"}),(0,t.jsx)("div",{className:"border rounded-lg p-3 mb-4",children:(0,t.jsxs)("p",{className:"text-sm",children:["\uD83D\uDCA1 ",(0,t.jsx)("strong",{children:"Pro tip:"})," Use ","{variable_name}"," syntax in your messages to create reusable variables. For example you can use ","{company_name}"," to create a variable for the company name so you can reuse this flow template with different companies."]})})]}),(0,t.jsx)("div",{className:"space-y-4 max-h-[500px] overflow-y-auto pr-2",children:F.map((e,s)=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"border rounded-lg p-4 bg-card",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-3",children:[(0,t.jsx)("span",{className:(0,f.cn)("text-sm font-medium px-3 py-1 rounded-full","user"===e.type?"bg-blue-100 text-blue-700":"assistant"===e.type?"bg-green-100 text-green-700":"bg-purple-100 text-purple-700"),children:"user"===e.type?"\uD83D\uDC64 User":"assistant"===e.type?"\uD83E\uDD16 Assistant":"\uD83D\uDD27 ".concat(e.toolName)}),e.variablesUsed&&e.variablesUsed.length>0&&(0,t.jsx)("div",{className:"flex gap-1 flex-wrap",children:e.variablesUsed.map(e=>(0,t.jsx)("span",{className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded font-mono border border-blue-200",children:"{".concat(e,"}")},e))})]}),"user"===e.type?(0,t.jsx)("div",{children:(0,t.jsx)(m.g,{value:e.content||"",onChange:s=>es(e.id,s.target.value),placeholder:"Enter your message...",className:"min-h-[80px] resize-none",rows:3,readOnly:D})}):(0,t.jsx)("div",{className:"bg-muted/50 p-3 rounded-md",children:"assistant"===e.type?(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-xs font-medium text-muted-foreground mb-2",children:"Example response (will be regenerated):"}),(0,t.jsx)(j.H,{children:e.contentExample})]}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-xs font-medium text-muted-foreground mb-1",children:["Tool: ",e.toolName]}),(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Parameters will be generated dynamically"})]})})]}),s<F.length-1&&(0,t.jsx)("div",{className:"flex justify-center my-3",children:(0,t.jsx)(x.Z,{className:"w-5 h-5 text-muted-foreground/50"})})]},e.id))})]}),(0,t.jsxs)("div",{className:"w-80",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsxs)("h3",{className:"text-base font-semibold mb-2",children:["Variables (",M.length,")"]}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Auto-detected from your messages"})]}),M.length>0?(0,t.jsx)("div",{className:"space-y-3 max-h-[500px] overflow-y-auto",children:M.map(e=>(0,t.jsxs)("div",{className:"border rounded-lg p-3 bg-card",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between mb-2",children:[(0,t.jsx)("div",{className:"font-mono text-blue-600 font-medium text-sm",children:"{".concat(e.name,"}")}),!D&&(0,t.jsx)("div",{className:"flex gap-1",children:J===e.name?(0,t.jsx)(c.I,{value:G,onChange:e=>L(e.target.value),className:"h-6 text-xs font-mono w-20",placeholder:"variable_name",autoFocus:!0,onKeyDown:s=>{"Enter"===s.key?(G&&G!==e.name&&et(e.name,G),Q(null),L("")):"Escape"===s.key&&(Q(null),L(""))},onBlur:()=>{G&&G!==e.name&&et(e.name,G),Q(null),L("")}}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0",onClick:()=>{Q(e.name),L(e.name)},children:(0,t.jsx)(h.Z,{className:"w-3 h-3"})}),(0,t.jsx)(d.z,{size:"sm",variant:"ghost",className:"h-6 w-6 p-0 text-destructive hover:bg-destructive/10",onClick:()=>ea(e.name),children:(0,t.jsx)(v.Z,{className:"w-3 h-3"})})]})})]}),(0,t.jsx)("div",{className:"text-xs text-muted-foreground mb-2",children:e.description}),(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsx)("span",{className:"text-xs bg-gray-100 text-gray-700 px-1.5 py-0.5 rounded",children:e.type}),e.required&&(0,t.jsx)("span",{className:"text-xs bg-orange-100 text-orange-700 px-1.5 py-0.5 rounded",children:"required"})]})]},e.name))}):(0,t.jsxs)("div",{className:"text-center py-8 text-muted-foreground border-2 border-dashed rounded-lg",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsx)("span",{className:"text-3xl",children:"\uD83D\uDCDD"})}),(0,t.jsx)("div",{className:"text-sm mb-1 font-medium",children:"No variables yet"}),(0,t.jsxs)("div",{className:"text-xs",children:["Use ","{variable_name}"," syntax in your messages"]})]})]})]})})]})]})}),(0,t.jsx)("div",{className:"border-t p-4 bg-background",children:(0,t.jsxs)(o.cN,{children:[(0,t.jsx)(d.z,{variant:"outline",onClick:C,children:D?"Close":"Cancel"}),!D&&(0,t.jsx)(t.Fragment,{children:(0,t.jsx)(d.z,{onClick:er,disabled:!el||q,className:(0,f.cn)("min-w-[140px]",!el&&"opacity-50 cursor-not-allowed"),children:q?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2"}),Z?"Updating...":"Saving..."]}):Z?"Update Workflow":"Save Workflow"})})]})})]})}):null}},10492:function(e,s,a){a.d(s,{g:function(){return r}});var t=a(57437),l=a(94508);let r=e=>{let{className:s}=e;return(0,t.jsxs)("svg",{"aria-hidden":"true",role:"status",className:(0,l.cn)("inline w-4 h-4 text-white animate-spin fill-inherit",s),viewBox:"0 0 100 101",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("path",{d:"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",className:"fill-inherit opacity-20"}),(0,t.jsx)("path",{d:"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",className:"fill-inherit"})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=1957-cf44b1d31a9c7d5c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/chunks/1957-cf44b1d31a9c7d5c.js","mappings":"2UA2DO,SAASA,EAAkBC,CAAyG,MAKhIC,EACAA,EAuV2BA,EACAA,KA9VJ,CAAEC,OAAAA,CAAM,CAAEC,QAAAA,CAAO,CAAEC,SAAAA,CAAQ,CAAEC,aAAAA,CAAY,CAAEJ,iBAAAA,CAAgB,CAAEK,WAAAA,EAAa,EAAK,CAA0B,CAAzGN,EAC1B,CAAEO,KAAAA,CAAI,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,UAAAA,EAAWC,EAAAA,CAAWA,EACjC,CAAEC,MAAAA,CAAK,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IACZ,CAACC,EAAMC,EAAQ,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,CAC/BC,YAAad,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAkBc,WAAW,GAAI,UAC9CC,MAAOf,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAkBgB,IAAI,GAAtBhB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwBe,KAAK,GAAI,EAAE,CAC1CE,MAAOjB,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAkBgB,IAAI,GAAtBhB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwBiB,KAAK,GAAI,EAAE,GAGtCC,EAAYC,CAAAA,CAAQnB,EAGpB,CAACoB,EAAcC,EAAgB,CAAGR,CAAAA,EAAAA,EAAAA,QAAAA,EAASb,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAkBsB,IAAI,GAAI,IACrE,CAACC,EAAqBC,EAAuB,CAAGX,CAAAA,EAAAA,EAAAA,QAAAA,EAASb,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAkByB,WAAW,GAAI,IAC1F,CAACC,EAAWC,EAAa,CAAGd,CAAAA,EAAAA,EAAAA,QAAAA,EAA6Bb,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAkB0B,SAAS,GAAI,EAAE,EAC1F,CAACE,EAAOC,EAAS,CAAGhB,CAAAA,EAAAA,EAAAA,QAAAA,EAAyBb,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAkB8B,UAAU,GAAI,EAAE,EAC/E,CAACC,EAAYC,EAAc,CAAGnB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACvC,CAACoB,EAAWC,EAAa,CAAGrB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,SACrC,CAACsB,EAAcC,EAAgB,CAAGvB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC3C,CAACwB,EAAiBC,EAAmB,CAAGzB,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAChE,CAAC0B,EAAcC,EAAgB,CAAG3B,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC3C,CAAC4B,EAAuB,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,EAAYC,EAAAA,EAAwBA,EAC/D,CAACC,EAAuB,CAAGF,CAAAA,EAAAA,EAAAA,CAAAA,EAAYG,EAAAA,EAAwBA,EAGrEC,EAAAA,SAAe,CAAC,KACd,GAAI3C,EAAS4C,MAAM,CAAG,EAAG,CACvB,IAAMC,EAAmC,EAAE,CAE3C7C,EAAS8C,OAAO,CAAC,CAACC,EAASC,KACzB,IAAMC,EAAiBF,EAAiBG,OAAO,EAAKH,CAAAA,EAAQI,KAAK,CAAGJ,EAAQI,KAAK,CAACC,MAAM,CAACC,GAAKA,SAAAA,EAAEC,IAAI,EAAaC,GAAG,CAAC,GAAYF,EAAEG,IAAI,EAAEC,IAAI,CAAC,MAAQ,GAElJV,CAAiB,SAAjBA,EAAQW,IAAI,CACdb,EAAiBc,IAAI,CAAC,CACpBC,GAAI,QAAkBC,MAAA,CAAVb,EAAQ,GACpBM,KAAM,OACNJ,QAASD,EACTa,cAAe,EAAE,GAEVf,cAAAA,EAAQW,IAAI,CACrBb,EAAiBc,IAAI,CAAC,CACpBC,GAAI,QAAkBC,MAAA,CAAVb,EAAQ,GACpBM,KAAM,YACNS,eAAgBd,CAClB,GAC0B,WAAjBF,EAAQW,IAAI,EAEjBX,EAAQI,KAAK,EACfJ,EAAQI,KAAK,CAACL,OAAO,CAAC,CAACkB,EAAWC,KACd,oBAAdD,EAAKV,IAAI,EAA0BU,EAAKE,cAAc,EACxDrB,EAAiBc,IAAI,CAAC,CACpBC,GAAI,QAAqBK,MAAAA,CAAbjB,EAAQ,EAAE,KAAaa,MAAA,CAAVI,GACzBX,KAAM,OACNa,SAAUH,EAAKE,cAAc,CAACC,QAAQ,EAG5C,EAGN,GACAC,QAAQC,GAAG,CAAC,mBAAoBxB,GAChCnB,EAASmB,GACT3B,EAAgBjB,GAAgB,cAClC,CACF,EAAG,CAACD,EAAUC,EAAcwB,EAAMmB,MAAM,CAAC,EAGzC,IAAM0B,GAAiBC,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,CAACpD,EAAcG,KAChD,GAAI,CAACH,EAAKqD,KAAK,CAAC,iCAMd,OALAlE,EAAM,CACJmE,MAAO,wBACPnD,YAAa,qIACboD,QAAS,aACX,GACO,GAGT,GAAInD,EAAUoD,IAAI,CAACC,GAAKA,EAAEzD,IAAI,GAAKA,GACjC,MAAO,GAGT,IAAM0D,EAAgC,CACpC1D,KAAAA,EACAmC,KAAM,SACNwB,SAAU,GACVxD,YAAaA,GAAgB,wBAC/B,EAGA,OADAE,EAAauD,GAAQ,IAAIA,EAAMF,EAAY,EACpC,EACT,EAAG,CAACtD,EAAWjB,EAAM,EAGf0E,GAA0BT,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,CAACU,EAAgB/B,KAG3D,IAAMgC,EAAgBC,CADEjC,EAAQsB,KAAK,CAAC,uCAAyC,EAAE,EAC3CjB,GAAG,CAAC,GAAmBiB,EAAMY,KAAK,CAAC,EAAG,KAG5EF,EAAcpC,OAAO,CAAC3B,IACpBmD,GAAenD,EACjB,GAGAO,EAASqD,GAAQA,EAAKxB,GAAG,CAAC8B,GACxBA,EAAKzB,EAAE,GAAKqB,EACR,CAAE,GAAGI,CAAI,CAAEnC,QAAAA,EAASY,cAAeoB,CAAc,EACjDG,IAIN,IAAMC,EAAmB,IAAIC,IAC7B9D,EAAMqB,OAAO,CAACuC,IACRA,EAAKzB,EAAE,GAAKqB,EAGdO,CADgBtC,EAAQsB,KAAK,CAAC,uCAAyC,EAAE,EACjE1B,OAAO,CAAC,GAAmBwC,EAAiBG,GAAG,CAACjB,EAAMY,KAAK,CAAC,EAAG,MAC9DC,EAAKvB,aAAa,EAC3BuB,EAAKvB,aAAa,CAAChB,OAAO,CAAC4C,GAAWJ,EAAiBG,GAAG,CAACC,GAE/D,GAGAlE,EAAauD,GAAQA,EAAK3B,MAAM,CAACuC,GAAYL,EAAiBM,GAAG,CAACD,EAASxE,IAAI,GACjF,EAAG,CAACM,EAAO6C,GAAe,EAEpBuB,GAAiBtB,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IAEjC/C,EAAauD,GAAQA,EAAK3B,MAAM,CAACwB,GAAKA,EAAEzD,IAAI,GAAK2E,IAGjDpE,EAASqD,GAAQA,EAAKxB,GAAG,CAAC8B,QAEfA,EACMA,QAHkB,CACjC,GAAGA,CAAI,CACPnC,QAAO,OAAEmC,CAAAA,EAAAA,EAAKnC,OAAO,GAAZmC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAcU,OAAO,CAAC,OAAW,MAAmBlC,MAAA,CAAbiC,EAAa,OAAM,KAAM,IACzEhC,cAAeuB,CAAAA,OAAAA,CAAAA,EAAAA,EAAKvB,aAAa,GAAlBuB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAoBjC,MAAM,CAACwB,GAAKA,IAAMkB,EAAAA,GAAiB,EAAE,IAE5E,EAAG,EAAE,EAECE,GAAiBzB,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,CAAC0B,EAAiBC,IACnD,EAAa1B,KAAK,CAAC,iCASfjD,EAAUoD,IAAI,CAACC,GAAKA,EAAEzD,IAAI,GAAK+E,GAAWtB,EAAEzD,IAAI,GAAK8E,IACvD3F,EAAM,CACJmE,MAAO,+BACPnD,YAAa,4CACboD,QAAS,aACX,GACO,KAITlD,EAAauD,GAAQA,EAAKxB,GAAG,CAACqB,GAC5BA,EAAEzD,IAAI,GAAK8E,EAAU,CAAE,GAAGrB,CAAC,CAAEzD,KAAM+E,CAAQ,EAAItB,IAIjDlD,EAASqD,GAAQA,EAAKxB,GAAG,CAAC8B,QAEfA,EACMA,QAHkB,CACjC,GAAGA,CAAI,CACPnC,QAAO,OAAEmC,CAAAA,EAAAA,EAAKnC,OAAO,GAAZmC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAcU,OAAO,CAAC,OAAW,MAAclC,MAAA,CAARoC,EAAQ,OAAM,KAAM,IAAYpC,MAAA,CAARqC,EAAQ,MAChFpC,cAAeuB,CAAAA,OAAAA,CAAAA,EAAAA,EAAKvB,aAAa,GAAlBuB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAoB9B,GAAG,CAACqB,GAAKA,IAAMqB,EAAUC,EAAUtB,EAAAA,GAAM,EAAE,KAGzE,KA7BLtE,EAAM,CACJmE,MAAO,wBACPnD,YAAa,2GACboD,QAAS,aACX,GACO,IAyBR,CAACnD,EAAWjB,EAAM,EAGf6F,GAAUC,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,SAGc5F,EACAA,QAHpC,EAAKS,EAAaoF,IAAI,IAClB5E,IAAAA,EAAMmB,MAAM,EACZpC,CAAAA,UAAAA,EAAKG,WAAW,EAAgBH,CAAAA,OAAAA,CAAAA,EAAAA,EAAKI,KAAK,GAAVJ,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAYoC,MAAM,IAAK,IACvDpC,CAAAA,UAAAA,EAAKG,WAAW,EAAgBH,CAAAA,OAAAA,CAAAA,EAAAA,EAAKM,KAAK,GAAVN,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAYoC,MAAM,IAAK,IAKpD0D,EADiBlD,MAAM,CAACmD,GAAKA,SAAAA,EAAEjD,IAAI,EACzBkD,KAAK,CAACnB,IACrB,IAAMnC,EAAUmC,EAAKnC,OAAO,EAAI,GAEhC,MAAOuD,CADkBvD,MAAAA,EAAAA,KAAAA,EAAAA,EAAS6C,OAAO,CAAC,aAAc,KAChCM,IAAI,GAAGzD,MAAM,CAAG,CAC1C,EACF,EAAG,CAAC3B,EAAcQ,EAAOjB,EAAK,EAGxBkG,GAAanC,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,UAC7B,GAAI,IAAapE,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAMyD,EAAE,GAEzB/B,EAAc,IAEd,GAAI,CAEF,IAAM8E,EAAYlF,EAAM8B,GAAG,CAAC8B,GAAS,EACnCzB,GAAIyB,EAAKzB,EAAE,CACXN,KAAM+B,EAAK/B,IAAI,CACf,GAAI+B,SAAAA,EAAK/B,IAAI,EAAe,CAAEJ,QAASmC,EAAKnC,OAAO,CAAE,CACrD,GAAImC,cAAAA,EAAK/B,IAAI,EAAoB,CAAES,eAAgBsB,EAAKtB,cAAc,CAAE,CACxE,GAAIsB,SAAAA,EAAK/B,IAAI,EAAe,CAAEa,SAAUkB,EAAKlB,QAAQ,CAAE,CACzD,EAEIpD,CAAAA,GAAalB,GACf,MAAM4C,EAAuB,CAC3BlB,UAAW,CACTqC,GAAI/D,EAAiB+D,EAAE,CACvBzC,KAAMF,EAAaoF,IAAI,GACvB/E,YAAaF,EAAoBiF,IAAI,IAAM,KAC3C1F,YAAaH,EAAKG,WAAW,CAC7BE,KAAM,CACJD,MAAOJ,EAAKI,KAAK,CACjBE,MAAON,EAAKM,KAAK,EAGnBS,UAAAA,EACAI,WAAYgF,CACd,CACF,GAEArG,EAAM,CACJmE,MAAO,oBACPnD,YAAa,IAAiBuC,MAAA,CAAb5C,EAAa,mCAChC,KAEA,MAAMqB,EAAuB,CAC3Bf,UAAW,CACTJ,KAAMF,EAAaoF,IAAI,GACvB/E,YAAaF,EAAoBiF,IAAI,IAAM,KAC3CO,MAAOzG,EAAKyD,EAAE,CACdjD,YAAaH,EAAKG,WAAW,CAC7BE,KAAM,CACJD,MAAOJ,EAAKI,KAAK,CACjBE,MAAON,EAAKM,KAAK,EAGnBS,UAAAA,EACAI,WAAYgF,CACd,CACF,GAEArG,EAAM,CACJmE,MAAO,oBACPnD,YAAa,IAAiBuC,MAAA,CAAb5C,EAAa,2CAChC,IAGFlB,GACF,CAAE,MAAO8G,EAAO,CACdzC,QAAQyC,KAAK,CAAC,yBAA0BA,GACxCvG,EAAM,CACJmE,MAAO,wBACPnD,YAAa,6DACboD,QAAS,aACX,EACF,QAAU,CACR7C,EAAc,GAChB,EACF,EAAG,CAACsE,GAAShG,MAAAA,EAAAA,KAAAA,EAAAA,EAAMyD,EAAE,CAAE3C,EAAcG,EAAqBZ,EAAMe,EAAWE,EAAOa,EAAwBG,EAAwBnC,EAAOP,EAASgB,EAAWlB,EAAiB,SAE9K,EAGE,GAAAiH,EAAAC,GAAA,EAACC,EAAAA,EAAMA,CAAAA,CAACC,KAAMnH,EAAQoH,aAAcnH,WAClC,GAAA+G,EAAAK,IAAA,EAACC,EAAAA,EAAaA,CAAAA,CAACC,UAAU,iDACvB,GAAAP,EAAAK,IAAA,EAACG,EAAAA,EAAYA,CAAAA,CAACD,UAAU,iBACtB,GAAAP,EAAAC,GAAA,EAACQ,EAAAA,EAAWA,CAAAA,CAACF,UAAU,mBACpBtG,EAAab,EAAa,gBAAkB,gBAAmB,qBAElE,GAAA4G,EAAAC,GAAA,EAACS,EAAAA,EAAiBA,CAAAA,CAACH,UAAU,mBAC1BtG,EACIb,EACC,2CACA,wGAEF,2IAKR,GAAA4G,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,uBACb,GAAAP,EAAAK,IAAA,EAACO,EAAAA,EAAIA,CAAAA,CAACC,MAAO7F,EAAW8F,cAAe7F,EAAcsF,UAAU,iCAC7D,GAAAP,EAAAK,IAAA,EAACU,EAAAA,EAAQA,CAAAA,CAACR,UAAU,yCAClB,GAAAP,EAAAC,GAAA,EAACe,EAAAA,EAAWA,CAAAA,CAACH,MAAM,QAAQN,UAAU,6CAAoC,wBAGzE,GAAAP,EAAAC,GAAA,EAACe,EAAAA,EAAWA,CAAAA,CAACH,MAAM,WAAWN,UAAU,6CAAoC,kCAK9E,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,wBACb,GAAAP,EAAAC,GAAA,EAACgB,EAAAA,EAAWA,CAAAA,CAACJ,MAAM,QAAQN,UAAU,uBACnC,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,sBACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,sBACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAC,GAAA,EAACiB,EAAAA,CAAKA,CAAAA,CAACC,QAAQ,gBAAgBZ,UAAU,mCAA0B,oBACnE,GAAAP,EAAAC,GAAA,EAACmB,EAAAA,CAAKA,CAAAA,CACJtE,GAAG,gBACH+D,MAAO1G,EACPkH,SAAU,GAAOjH,EAAgBkH,EAAEC,MAAM,CAACV,KAAK,EAC/CW,YAAY,cACZjB,UAAU,YACVkB,SAAUrI,IAEX,CAACe,EAAaoF,IAAI,IACjB,GAAAS,EAAAK,IAAA,EAAC9D,IAAAA,CAAEgE,UAAU,4DACX,GAAAP,EAAAC,GAAA,EAACyB,OAAAA,CAAKnB,UAAU,gBAAO,OAAS,kCAMtC,GAAAP,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAC,GAAA,EAACiB,EAAAA,CAAKA,CAAAA,CAACC,QAAQ,uBAAuBZ,UAAU,mCAA0B,gBAC1E,GAAAP,EAAAC,GAAA,EAAC0B,EAAAA,CAAQA,CAAAA,CACP7E,GAAG,uBACH+D,MAAOvG,EACP+G,SAAU,GAAO9G,EAAuB+G,EAAEC,MAAM,CAACV,KAAK,EACtDW,YAAY,yDACZI,KAAM,EACNrB,UAAU,mBACVkB,SAAUrI,UAKhB,GAAA4G,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,0BACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,mDACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAC,GAAA,EAAC4B,KAAAA,CAAGtB,UAAU,wCAA+B,0BAC7C,GAAAP,EAAAC,GAAA,EAAC1D,IAAAA,CAAEgE,UAAU,yCAAgC,mDAE/C,GAAAP,EAAAK,IAAA,EAACyB,EAAAA,CAAMA,CAAAA,CACLtF,KAAK,SACLoB,QAAQ,UACRmE,KAAK,KACLC,QAAS,IAAM7G,EAAgB,CAACD,GAChCqF,UAAU,iBAETrF,EAAe,gBAAkB,gBAClC,GAAA8E,EAAAC,GAAA,EAACgC,EAAAA,CAAWA,CAAAA,CAAC1B,UAAW2B,CAAAA,EAAAA,EAAAA,EAAAA,EAAG,oCAAqChH,GAAgB,sBAGnFA,GACC,GAAA8E,EAAAC,GAAA,EAACkC,EAAAA,CAAWA,CAAAA,CACVC,kBAAmBrJ,MAAAA,EAAAA,KAAAA,EAAAA,EAAkBc,WAAW,CAChDwI,aAActJ,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAkBgB,IAAI,GAAtBhB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwBe,KAAK,CAC3CwI,aAAcvJ,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAkBgB,IAAI,GAAtBhB,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwBiB,KAAK,CAE3CqH,SAAU,CAACxH,EAAaC,EAAOE,KAC7BL,EAAQ,CACNE,YAAAA,EACAC,MAAAA,EACAE,MAAAA,CAEF,EACF,IAGH,CAACkB,GACA,GAAA8E,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,oEAA2D,uDAQlF,GAAAP,EAAAC,GAAA,EAACgB,EAAAA,EAAWA,CAAAA,CAACJ,MAAM,WAAWN,UAAU,uBACtC,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,8BAEb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,mBACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,iBACb,GAAAP,EAAAC,GAAA,EAAC4B,KAAAA,CAAGtB,UAAU,wCAA+B,uBAC7C,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,sCACb,GAAAP,EAAAK,IAAA,EAAC9D,IAAAA,CAAEgE,UAAU,oBAAU,gBAClB,GAAAP,EAAAC,GAAA,EAACsC,SAAAA,UAAO,aAAiB,QAAO,kBAAiB,kFAAiF,iBAAgB,mHAM3J,GAAAvC,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,wDACZ5F,EAAM8B,GAAG,CAAC,CAAC8B,EAAMrC,IAChB,GAAA8D,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,0CACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,yCACb,GAAAP,EAAAC,GAAA,EAACyB,OAAAA,CAAKnB,UAAW2B,CAAAA,EAAAA,EAAAA,EAAAA,EACf,6CACA3D,SAAAA,EAAK/B,IAAI,CAAc,4BACrB+B,cAAAA,EAAK/B,IAAI,CAAmB,8BAC1B,0CAEH+B,SAAAA,EAAK/B,IAAI,CAAc,oBACtB+B,cAAAA,EAAK/B,IAAI,CAAmB,yBAC1B,gBAAoBO,MAAA,CAAdwB,EAAKlB,QAAQ,IAExBkB,EAAKvB,aAAa,EAAIuB,EAAKvB,aAAa,CAAClB,MAAM,CAAG,GACjD,GAAAkE,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,gCACZhC,EAAKvB,aAAa,CAACP,GAAG,CAACmC,GACtB,GAAAoB,EAAAC,GAAA,EAACyB,OAAAA,CAAmBnB,UAAU,+FAC3B,IAAYxD,MAAA,CAAR6B,EAAQ,MADJA,SAQlBL,SAAAA,EAAK/B,IAAI,CACR,GAAAwD,EAAAC,GAAA,EAACU,MAAAA,UACC,GAAAX,EAAAC,GAAA,EAAC0B,EAAAA,CAAQA,CAAAA,CACPd,MAAOtC,EAAKnC,OAAO,EAAI,GACvBiF,SAAU,GAAOnD,GAAwBK,EAAKzB,EAAE,CAAEwE,EAAEC,MAAM,CAACV,KAAK,EAChEW,YAAY,wBACZjB,UAAU,2BACVqB,KAAM,EACNH,SAAUrI,MAId,GAAA4G,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,sCACZhC,cAAAA,EAAK/B,IAAI,CACR,GAAAwD,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,0DAAiD,4CAChE,GAAAP,EAAAC,GAAA,EAACuC,EAAAA,CAAQA,CAAAA,UACNjE,EAAKtB,cAAc,MAIxB,GAAA+C,EAAAK,IAAA,EAACM,MAAAA,WACC,GAAAX,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,2DAAiD,SAAOhC,EAAKlB,QAAQ,IACpF,GAAA2C,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,yCAAgC,qDAMxDrE,EAAQvB,EAAMmB,MAAM,CAAG,GACtB,GAAAkE,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,oCACb,GAAAP,EAAAC,GAAA,EAACgC,EAAAA,CAAWA,CAAAA,CAAC1B,UAAU,yCAvDnBhC,EAAKzB,EAAE,QAgEvB,GAAAkD,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,iBACb,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,iBACb,GAAAP,EAAAK,IAAA,EAACwB,KAAAA,CAAGtB,UAAU,yCAA+B,cAAY9F,EAAUqB,MAAM,CAAC,OAC1E,GAAAkE,EAAAC,GAAA,EAAC1D,IAAAA,CAAEgE,UAAU,yCAAgC,wCAG9C9F,EAAUqB,MAAM,CAAG,EAClB,GAAAkE,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,mDACZ9F,EAAUgC,GAAG,CAAC,GACb,GAAAuD,EAAAK,IAAA,EAACM,MAAAA,CAAwBJ,UAAU,0CACjC,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,kDACb,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,uDACZ,IAAkBxD,MAAA,CAAd8B,EAASxE,IAAI,CAAC,OAEpB,CAACjB,GACA,GAAA4G,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,sBACZnF,IAAoByD,EAASxE,IAAI,CAChC,GAAA2F,EAAAC,GAAA,EAACmB,EAAAA,CAAKA,CAAAA,CACJP,MAAOvF,EACP+F,SAAU,GAAO9F,EAAgB+F,EAAEC,MAAM,CAACV,KAAK,EAC/CN,UAAU,6BACViB,YAAY,gBACZiB,UAAS,GACTC,UAAW,IACLpB,UAAAA,EAAEqB,GAAG,EACHrH,GAAgBA,IAAiBuD,EAASxE,IAAI,EAChD6E,GAAeL,EAASxE,IAAI,CAAEiB,GAEhCD,EAAmB,MACnBE,EAAgB,KACG,WAAV+F,EAAEqB,GAAG,GACdtH,EAAmB,MACnBE,EAAgB,IAEpB,EACAqH,OAAQ,KACFtH,GAAgBA,IAAiBuD,EAASxE,IAAI,EAChD6E,GAAeL,EAASxE,IAAI,CAAEiB,GAEhCD,EAAmB,MACnBE,EAAgB,GAClB,IAGF,GAAAyE,EAAAK,IAAA,EAAAL,EAAA6C,QAAA,YACE,GAAA7C,EAAAC,GAAA,EAAC6B,EAAAA,CAAMA,CAAAA,CACLC,KAAK,KACLnE,QAAQ,QACR2C,UAAU,cACVyB,QAAS,KACP3G,EAAmBwD,EAASxE,IAAI,EAChCkB,EAAgBsD,EAASxE,IAAI,CAC/B,WAEA,GAAA2F,EAAAC,GAAA,EAAC6C,EAAAA,CAAKA,CAAAA,CAACvC,UAAU,cAEnB,GAAAP,EAAAC,GAAA,EAAC6B,EAAAA,CAAMA,CAAAA,CACLC,KAAK,KACLnE,QAAQ,QACR2C,UAAU,uDACVyB,QAAS,IAAMjD,GAAeF,EAASxE,IAAI,WAE3C,GAAA2F,EAAAC,GAAA,EAAC8C,EAAAA,CAAMA,CAAAA,CAACxC,UAAU,sBAO9B,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,8CACZ1B,EAASrE,WAAW,GAEvB,GAAAwF,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,uBACb,GAAAP,EAAAC,GAAA,EAACyB,OAAAA,CAAKnB,UAAU,mEACb1B,EAASrC,IAAI,GAEfqC,EAASb,QAAQ,EAChB,GAAAgC,EAAAC,GAAA,EAACyB,OAAAA,CAAKnB,UAAU,uEAA8D,kBApE1E1B,EAASxE,IAAI,KA6E3B,GAAA2F,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,qFACb,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,gBACb,GAAAP,EAAAC,GAAA,EAACyB,OAAAA,CAAKnB,UAAU,oBAAW,mBAE7B,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,oCAA2B,qBAC1C,GAAAP,EAAAK,IAAA,EAACM,MAAAA,CAAIJ,UAAU,oBAAU,OACjB,kBAAiB,iDAWzC,GAAAP,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,sCACb,GAAAP,EAAAK,IAAA,EAAC2C,EAAAA,EAAYA,CAAAA,WACX,GAAAhD,EAAAC,GAAA,EAAC6B,EAAAA,CAAMA,CAAAA,CAAClE,QAAQ,UAAUoE,QAAS/I,WAChCG,EAAa,QAAU,WAEzB,CAACA,GACA,GAAA4G,EAAAC,GAAA,EAAAD,EAAA6C,QAAA,WACE,GAAA7C,EAAAC,GAAA,EAAC6B,EAAAA,CAAMA,CAAAA,CACLE,QAASpC,GACTqD,SAAU,CAAC5D,IAAWvE,EACtByF,UAAW2B,CAAAA,EAAAA,EAAAA,EAAAA,EACT,gBACA,CAAC7C,IAAW,0CAGbvE,EACC,GAAAkF,EAAAK,IAAA,EAAAL,EAAA6C,QAAA,YACE,GAAA7C,EAAAC,GAAA,EAACU,MAAAA,CAAIJ,UAAU,mEACdtG,EAAY,cAAgB,eAG/BA,EAAY,kBAAoB,8BAzT9B,IAqUtB,mFCpoBO,IAAMiJ,EAAU,OAAC,CAAE3C,UAAAA,CAAS,CAAiC,CAAAzH,EAClE,MACE,GAAAkH,EAAAK,IAAA,EAAC8C,MAAAA,CACCC,cAAY,OACZxG,KAAK,SACL2D,UAAW2B,CAAAA,EAAAA,EAAAA,EAAAA,EAAG,sDAAuD3B,GACrE8C,QAAQ,cACRC,KAAK,OACLC,MAAM,uCAEN,GAAAvD,EAAAC,GAAA,EAACuD,OAAAA,CACCC,EAAE,+WACFlD,UAAU,4BAEZ,GAAAP,EAAAC,GAAA,EAACuD,OAAAA,CACCC,EAAE,glBACFlD,UAAU,mBAIlB","sources":["webpack://_N_E/./components/save-workflow-modal.tsx","webpack://_N_E/./components/ui/loading.tsx"],"sourcesContent":["\"use client\"\n\nimport React, { useState, useCallback, useContext, useMemo } from 'react'\nimport type { UIMessage as Message } from 'ai'\nimport { useMutation } from '@apollo/client'\nimport { UserContext } from '@/app/(application)/authenticated'\nimport { CREATE_WORKFLOW_TEMPLATE, UPDATE_WORKFLOW_TEMPLATE } from '@/queries/queries'\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Textarea } from '@/components/ui/textarea'\nimport { Label } from '@/components/ui/label'\nimport { Trash2, Edit2, ChevronDown } from 'lucide-react'\nimport { useToast } from '@/components/ui/use-toast'\nimport { cn } from '@/lib/utils'\nimport { RBACControl } from './rbac'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { Response } from '@/components/ai-elements/response';\n\ninterface WorkflowVariable {\n name: string\n description?: string\n type: 'string'\n required: boolean\n defaultValue?: string\n}\n\ninterface WorkflowStep {\n id: string\n type: 'user' | 'assistant' | 'tool'\n content?: string\n contentExample?: string\n toolName?: string\n variablesUsed?: string[]\n}\n\ninterface WorkflowTemplate {\n id: string\n name: string\n description?: string\n rights_mode?: 'private' | 'users' | 'roles' | 'public' /* | 'projects' */\n RBAC?: {\n users?: Array<{ id: number; rights: 'read' | 'write' }>\n roles?: Array<{ id: string; rights: 'read' | 'write' }>\n // projects?: Array<{ id: string; rights: 'read' | 'write' }>\n }\n variables?: WorkflowVariable[]\n steps_json?: WorkflowStep[]\n}\n\ninterface SaveWorkflowModalProps {\n isOpen: boolean\n onClose: () => void\n messages: Message[]\n sessionTitle?: string\n existingWorkflow?: WorkflowTemplate\n isReadOnly?: boolean\n}\n\nexport function SaveWorkflowModal({ isOpen, onClose, messages, sessionTitle, existingWorkflow, isReadOnly = false }: SaveWorkflowModalProps) {\n const { user } = useContext(UserContext)\n const { toast } = useToast()\n const [rbac, setRbac] = useState({\n rights_mode: existingWorkflow?.rights_mode || 'private',\n users: existingWorkflow?.RBAC?.users || [],\n roles: existingWorkflow?.RBAC?.roles || [],\n // projects: existingWorkflow?.RBAC?.projects || []\n })\n const isEditing = Boolean(existingWorkflow)\n\n // Form state\n const [workflowName, setWorkflowName] = useState(existingWorkflow?.name || '')\n const [workflowDescription, setWorkflowDescription] = useState(existingWorkflow?.description || '')\n const [variables, setVariables] = useState<WorkflowVariable[]>(existingWorkflow?.variables || [])\n const [steps, setSteps] = useState<WorkflowStep[]>(existingWorkflow?.steps_json || [])\n const [isCreating, setIsCreating] = useState(false)\n const [activeTab, setActiveTab] = useState('setup')\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [editingVariable, setEditingVariable] = useState<string | null>(null)\n const [editingValue, setEditingValue] = useState('')\n const [createWorkflowTemplate] = useMutation(CREATE_WORKFLOW_TEMPLATE)\n const [updateWorkflowTemplate] = useMutation(UPDATE_WORKFLOW_TEMPLATE)\n\n // Initialize steps from messages\n React.useEffect(() => {\n if (messages.length > 0) {\n const transformedSteps: WorkflowStep[] = []\n\n messages.forEach((message, index) => {\n const messageContent = (message as any).content || (message.parts ? message.parts.filter(p => p.type === 'text').map((p: any) => p.text).join('\\n') : '')\n\n if (message.role === 'user') {\n transformedSteps.push({\n id: `step_${index + 1}`,\n type: 'user',\n content: messageContent,\n variablesUsed: []\n })\n } else if (message.role === 'assistant') {\n transformedSteps.push({\n id: `step_${index + 1}`,\n type: 'assistant',\n contentExample: messageContent\n })\n } else if (message.role === 'system') {\n // Handle tool calls from message parts\n if (message.parts) {\n message.parts.forEach((part: any, partIndex: number) => {\n if (part.type === 'tool-invocation' && part.toolInvocation) {\n transformedSteps.push({\n id: `step_${index + 1}_${partIndex}`,\n type: 'tool',\n toolName: part.toolInvocation.toolName\n })\n }\n })\n }\n }\n })\n console.log(\"transformedSteps\", transformedSteps)\n setSteps(transformedSteps)\n setWorkflowName(sessionTitle || 'My Workflow')\n }\n }, [messages, sessionTitle, steps.length])\n\n // Variable management functions\n const createVariable = useCallback((name: string, description?: string) => {\n if (!name.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/)) {\n toast({\n title: \"Invalid variable name\",\n description: \"Variable name must start with a letter or underscore, contain only letters, numbers, and underscores, and be 2-64 characters long.\",\n variant: \"destructive\"\n })\n return false\n }\n\n if (variables.some(v => v.name === name)) {\n return true // Variable already exists, that's fine\n }\n\n const newVariable: WorkflowVariable = {\n name,\n type: 'string',\n required: true,\n description: description || `Auto-detected variable`\n }\n\n setVariables(prev => [...prev, newVariable])\n return true\n }, [variables, toast])\n\n // Auto-detect variables from {variable_name} syntax and update content\n const handleStepContentChange = useCallback((stepId: string, content: string) => {\n // Extract all variables from the content\n const variableMatches = content.match(/\\{([A-Za-z_][A-Za-z0-9_]{1,63})\\}/g) || []\n const variableNames = variableMatches.map((match: string) => match.slice(1, -1)) // Remove { and }\n\n // Create variables that don't exist yet\n variableNames.forEach(name => {\n createVariable(name)\n })\n\n // Update the step content\n setSteps(prev => prev.map(step =>\n step.id === stepId\n ? { ...step, content, variablesUsed: variableNames }\n : step\n ))\n\n // Remove unused variables\n const allUsedVariables = new Set<string>()\n steps.forEach(step => {\n if (step.id === stepId) {\n // Use the new content for this step\n const matches = content.match(/\\{([A-Za-z_][A-Za-z0-9_]{1,63})\\}/g) || []\n matches.forEach((match: string) => allUsedVariables.add(match.slice(1, -1)))\n } else if (step.variablesUsed) {\n step.variablesUsed.forEach(varName => allUsedVariables.add(varName))\n }\n })\n\n // Remove variables that are no longer used anywhere\n setVariables(prev => prev.filter(variable => allUsedVariables.has(variable.name)))\n }, [steps, createVariable])\n\n const deleteVariable = useCallback((variableName: string) => {\n // Remove variable from variables list\n setVariables(prev => prev.filter(v => v.name !== variableName))\n\n // Remove variable references from steps\n setSteps(prev => prev.map(step => ({\n ...step,\n content: step.content?.replace(new RegExp(`\\\\{${variableName}\\\\}`, 'g'), ''),\n variablesUsed: step.variablesUsed?.filter(v => v !== variableName) || []\n })))\n }, [])\n\n const renameVariable = useCallback((oldName: string, newName: string) => {\n if (!newName.match(/^[A-Za-z_][A-Za-z0-9_]{1,63}$/)) {\n toast({\n title: \"Invalid variable name\",\n description: \"Variable name must start with a letter or underscore and contain only letters, numbers, and underscores.\",\n variant: \"destructive\"\n })\n return false\n }\n\n if (variables.some(v => v.name === newName && v.name !== oldName)) {\n toast({\n title: \"Variable name already exists\",\n description: \"A variable with this name already exists.\",\n variant: \"destructive\"\n })\n return false\n }\n\n // Update variable name\n setVariables(prev => prev.map(v =>\n v.name === oldName ? { ...v, name: newName } : v\n ))\n\n // Update variable references in steps\n setSteps(prev => prev.map(step => ({\n ...step,\n content: step.content?.replace(new RegExp(`\\\\{${oldName}\\\\}`, 'g'), `{${newName}}`),\n variablesUsed: step.variablesUsed?.map(v => v === oldName ? newName : v) || []\n })))\n\n return true\n }, [variables, toast])\n\n // Validation\n const isValid = useMemo(() => {\n if (!workflowName.trim()) return false\n if (steps.length === 0) return false\n if (rbac.rights_mode === 'users' && rbac.users?.length === 0) return false\n if (rbac.rights_mode === 'roles' && rbac.roles?.length === 0) return false\n // if (rbac.rights_mode === 'projects' && rbac.projects?.length === 0) return false\n\n // Check that all user steps have non-empty content after variable replacement\n const userSteps = steps.filter(s => s.type === 'user')\n return userSteps.every(step => {\n const content = step.content || ''\n const withoutVariables = content?.replace(/\\{[^}]+\\}/g, '')\n return withoutVariables.trim().length > 0\n })\n }, [workflowName, steps, rbac])\n\n // Save workflow\n const handleSave = useCallback(async () => {\n if (!isValid || !user?.id) return\n\n setIsCreating(true)\n\n try {\n\n const stepsJson = steps.map(step => ({\n id: step.id,\n type: step.type,\n ...(step.type === 'user' && { content: step.content }),\n ...(step.type === 'assistant' && { contentExample: step.contentExample }),\n ...(step.type === 'tool' && { toolName: step.toolName })\n }))\n\n if (isEditing && existingWorkflow) {\n await updateWorkflowTemplate({\n variables: {\n id: existingWorkflow.id,\n name: workflowName.trim(),\n description: workflowDescription.trim() || null,\n rights_mode: rbac.rights_mode,\n RBAC: {\n users: rbac.users,\n roles: rbac.roles,\n // projects: rbac.projects\n },\n variables,\n steps_json: stepsJson\n }\n })\n\n toast({\n title: \"Workflow updated!\",\n description: `\"${workflowName}\" has been updated successfully.`\n })\n } else {\n await createWorkflowTemplate({\n variables: {\n name: workflowName.trim(),\n description: workflowDescription.trim() || null,\n owner: user.id,\n rights_mode: rbac.rights_mode,\n RBAC: {\n users: rbac.users,\n roles: rbac.roles,\n // projects: rbac.projects\n },\n variables,\n steps_json: stepsJson\n }\n })\n\n toast({\n title: \"Workflow created!\",\n description: `\"${workflowName}\" has been saved as a workflow template.`\n })\n }\n\n onClose()\n } catch (error) {\n console.error('Error saving workflow:', error)\n toast({\n title: \"Error saving workflow\",\n description: \"There was an error saving your workflow. Please try again.\",\n variant: \"destructive\"\n })\n } finally {\n setIsCreating(false)\n }\n }, [isValid, user?.id, workflowName, workflowDescription, rbac, variables, steps, createWorkflowTemplate, updateWorkflowTemplate, toast, onClose, isEditing, existingWorkflow])\n\n if (!isOpen) return null\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"max-w-4xl max-h-[92vh] flex flex-col\">\n <DialogHeader className=\"pb-4\">\n <DialogTitle className=\"text-lg\">\n {isEditing ? (isReadOnly ? 'View Workflow' : 'Edit Workflow') : 'Save as Workflow'}\n </DialogTitle>\n <DialogDescription className=\"text-sm\">\n {isEditing\n ? (isReadOnly\n ? 'View workflow details and configuration.'\n : 'Modify this workflow template. Edit your messages and use {variable_name} syntax to create variables.'\n )\n : 'Convert this conversation into a reusable workflow template. Edit your messages and use {variable_name} syntax to create variables.'\n }\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"flex-1 mt-6\">\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"h-full flex flex-col\">\n <TabsList className=\"grid w-full grid-cols-2 mb-6\">\n <TabsTrigger value=\"setup\" className=\"data-[state=active]:bg-background\">\n Setup & Permissions\n </TabsTrigger>\n <TabsTrigger value=\"workflow\" className=\"data-[state=active]:bg-background\">\n Workflow Steps & Variables\n </TabsTrigger>\n </TabsList>\n\n <div className=\"flex-1 pb-6\">\n <TabsContent value=\"setup\" className=\"mt-0 h-full\">\n <div className=\"space-y-6\">\n <div className=\"space-y-4\">\n <div>\n <Label htmlFor=\"workflow-name\" className=\"text-base font-semibold\">Workflow Name *</Label>\n <Input\n id=\"workflow-name\"\n value={workflowName}\n onChange={(e) => setWorkflowName(e.target.value)}\n placeholder=\"My Workflow\"\n className=\"mt-2 h-11\"\n readOnly={isReadOnly}\n />\n {!workflowName.trim() && (\n <p className=\"text-sm text-destructive mt-1 flex items-center\">\n <span className=\"mr-1\">⚠️</span>\n Workflow name is required\n </p>\n )}\n </div>\n\n <div>\n <Label htmlFor=\"workflow-description\" className=\"text-base font-semibold\">Description</Label>\n <Textarea\n id=\"workflow-description\"\n value={workflowDescription}\n onChange={(e) => setWorkflowDescription(e.target.value)}\n placeholder=\"Describe what this workflow does and when to use it...\"\n rows={3}\n className=\"mt-2 resize-none\"\n readOnly={isReadOnly}\n />\n </div>\n </div>\n\n <div className=\"border-t pt-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <h3 className=\"text-base font-semibold mb-1\">Sharing & Permissions</h3>\n <p className=\"text-sm text-muted-foreground\">Control who can view and edit this workflow</p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"ml-4\"\n >\n {showAdvanced ? 'Hide Advanced' : 'Show Advanced'}\n <ChevronDown className={cn(\"w-4 h-4 ml-1 transition-transform\", showAdvanced && \"rotate-180\")} />\n </Button>\n </div>\n {showAdvanced && (\n <RBACControl\n initialRightsMode={existingWorkflow?.rights_mode}\n initialUsers={existingWorkflow?.RBAC?.users}\n initialRoles={existingWorkflow?.RBAC?.roles}\n // initialProjects={existingWorkflow?.RBAC?.projects}\n onChange={(rights_mode, users, roles) => {\n setRbac({\n rights_mode,\n users,\n roles,\n // projects\n })\n }}\n />\n )}\n {!showAdvanced && (\n <div className=\"text-sm text-muted-foreground bg-muted/30 p-3 rounded-md\">\n Using default permissions (private to you)\n </div>\n )}\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"workflow\" className=\"mt-0 h-full\">\n <div className=\"h-full flex gap-6\">\n {/* Left side - Messages */}\n <div className=\"flex-1\">\n <div className=\"mb-4\">\n <h3 className=\"text-base font-semibold mb-2\">Conversation Steps</h3>\n <div className=\"border rounded-lg p-3 mb-4\">\n <p className=\"text-sm\">\n 💡 <strong>Pro tip:</strong> Use {`{variable_name}`} syntax in your messages to create reusable variables. For example you can use {`{company_name}`} to create a variable for the company name\n so you can reuse this flow template with different companies.\n </p>\n </div>\n </div>\n\n <div className=\"space-y-4 max-h-[500px] overflow-y-auto pr-2\">\n {steps.map((step, index) => (\n <div key={step.id}>\n <div className=\"border rounded-lg p-4 bg-card\">\n <div className=\"flex items-center gap-3 mb-3\">\n <span className={cn(\n \"text-sm font-medium px-3 py-1 rounded-full\",\n step.type === 'user' ? \"bg-blue-100 text-blue-700\" :\n step.type === 'assistant' ? \"bg-green-100 text-green-700\" :\n \"bg-purple-100 text-purple-700\"\n )}>\n {step.type === 'user' ? '👤 User' :\n step.type === 'assistant' ? '🤖 Assistant' :\n `🔧 ${step.toolName}`}\n </span>\n {step.variablesUsed && step.variablesUsed.length > 0 && (\n <div className=\"flex gap-1 flex-wrap\">\n {step.variablesUsed.map(varName => (\n <span key={varName} className=\"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded font-mono border border-blue-200\">\n {`{${varName}}`}\n </span>\n ))}\n </div>\n )}\n </div>\n\n {step.type === 'user' ? (\n <div>\n <Textarea\n value={step.content || ''}\n onChange={(e) => handleStepContentChange(step.id, e.target.value)}\n placeholder=\"Enter your message...\"\n className=\"min-h-[80px] resize-none\"\n rows={3}\n readOnly={isReadOnly}\n />\n </div>\n ) : (\n <div className=\"bg-muted/50 p-3 rounded-md\">\n {step.type === 'assistant' ? (\n <div>\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">Example response (will be regenerated):</div>\n <Response>\n {step.contentExample}\n </Response>\n </div>\n ) : (\n <div>\n <div className=\"text-xs font-medium text-muted-foreground mb-1\">Tool: {step.toolName}</div>\n <div className=\"text-sm text-muted-foreground\">Parameters will be generated dynamically</div>\n </div>\n )}\n </div>\n )}\n </div>\n {index < steps.length - 1 && (\n <div className=\"flex justify-center my-3\">\n <ChevronDown className=\"w-5 h-5 text-muted-foreground/50\" />\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Right side - Variables */}\n <div className=\"w-80\">\n <div className=\"mb-4\">\n <h3 className=\"text-base font-semibold mb-2\">Variables ({variables.length})</h3>\n <p className=\"text-sm text-muted-foreground\">Auto-detected from your messages</p>\n </div>\n\n {variables.length > 0 ? (\n <div className=\"space-y-3 max-h-[500px] overflow-y-auto\">\n {variables.map((variable) => (\n <div key={variable.name} className=\"border rounded-lg p-3 bg-card\">\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"font-mono text-blue-600 font-medium text-sm\">\n {`{${variable.name}}`}\n </div>\n {!isReadOnly && (\n <div className=\"flex gap-1\">\n {editingVariable === variable.name ? (\n <Input\n value={editingValue}\n onChange={(e) => setEditingValue(e.target.value)}\n className=\"h-6 text-xs font-mono w-20\"\n placeholder=\"variable_name\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n if (editingValue && editingValue !== variable.name) {\n renameVariable(variable.name, editingValue)\n }\n setEditingVariable(null)\n setEditingValue('')\n } else if (e.key === 'Escape') {\n setEditingVariable(null)\n setEditingValue('')\n }\n }}\n onBlur={() => {\n if (editingValue && editingValue !== variable.name) {\n renameVariable(variable.name, editingValue)\n }\n setEditingVariable(null)\n setEditingValue('')\n }}\n />\n ) : (\n <>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 w-6 p-0\"\n onClick={() => {\n setEditingVariable(variable.name)\n setEditingValue(variable.name)\n }}\n >\n <Edit2 className=\"w-3 h-3\" />\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 w-6 p-0 text-destructive hover:bg-destructive/10\"\n onClick={() => deleteVariable(variable.name)}\n >\n <Trash2 className=\"w-3 h-3\" />\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n <div className=\"text-xs text-muted-foreground mb-2\">\n {variable.description}\n </div>\n <div className=\"flex gap-1\">\n <span className=\"text-xs bg-gray-100 text-gray-700 px-1.5 py-0.5 rounded\">\n {variable.type}\n </span>\n {variable.required && (\n <span className=\"text-xs bg-orange-100 text-orange-700 px-1.5 py-0.5 rounded\">\n required\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-muted-foreground border-2 border-dashed rounded-lg\">\n <div className=\"mb-3\">\n <span className=\"text-3xl\">📝</span>\n </div>\n <div className=\"text-sm mb-1 font-medium\">No variables yet</div>\n <div className=\"text-xs\">\n Use {`{variable_name}`} syntax in your messages\n </div>\n </div>\n )}\n </div>\n </div>\n </TabsContent>\n </div>\n </Tabs>\n </div>\n\n <div className=\"border-t p-4 bg-background\">\n <DialogFooter>\n <Button variant=\"outline\" onClick={onClose}>\n {isReadOnly ? 'Close' : 'Cancel'}\n </Button>\n {!isReadOnly && (\n <>\n <Button\n onClick={handleSave}\n disabled={!isValid || isCreating}\n className={cn(\n \"min-w-[140px]\",\n !isValid && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {isCreating ? (\n <>\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2\"></div>\n {isEditing ? 'Updating...' : 'Saving...'}\n </>\n ) : (\n isEditing ? 'Update Workflow' : 'Save Workflow'\n )}\n </Button>\n\n </>\n\n )}\n </DialogFooter>\n </div>\n </DialogContent>\n </Dialog>\n )\n}","import { cn } from \"@/lib/utils\";\n\nexport const Loading = ({ className }: { className?: null | string }) => {\n return (\n <svg\n aria-hidden=\"true\"\n role=\"status\"\n className={cn(\"inline w-4 h-4 text-white animate-spin fill-inherit\", className)}\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n className=\"fill-inherit opacity-20\"\n ></path>\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n className=\"fill-inherit\"\n ></path>\n </svg>\n );\n};\n"],"names":["SaveWorkflowModal","param","existingWorkflow","isOpen","onClose","messages","sessionTitle","isReadOnly","user","useContext","UserContext","toast","useToast","rbac","setRbac","useState","rights_mode","users","RBAC","roles","isEditing","Boolean","workflowName","setWorkflowName","name","workflowDescription","setWorkflowDescription","description","variables","setVariables","steps","setSteps","steps_json","isCreating","setIsCreating","activeTab","setActiveTab","showAdvanced","setShowAdvanced","editingVariable","setEditingVariable","editingValue","setEditingValue","createWorkflowTemplate","useMutation","CREATE_WORKFLOW_TEMPLATE","updateWorkflowTemplate","UPDATE_WORKFLOW_TEMPLATE","React","length","transformedSteps","forEach","message","index","messageContent","content","parts","filter","p","type","map","text","join","role","push","id","concat","variablesUsed","contentExample","part","partIndex","toolInvocation","toolName","console","log","createVariable","useCallback","match","title","variant","some","v","newVariable","required","prev","handleStepContentChange","stepId","variableNames","variableMatches","slice","step","allUsedVariables","Set","matches","add","varName","variable","has","deleteVariable","variableName","replace","renameVariable","oldName","newName","isValid","useMemo","trim","userSteps","s","every","withoutVariables","handleSave","stepsJson","owner","error","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","Dialog","open","onOpenChange","jsxs","DialogContent","className","DialogHeader","DialogTitle","DialogDescription","div","Tabs","value","onValueChange","TabsList","TabsTrigger","TabsContent","Label","htmlFor","Input","onChange","e","target","placeholder","readOnly","span","Textarea","rows","h3","Button","size","onClick","ChevronDown","cn","RBACControl","initialRightsMode","initialUsers","initialRoles","strong","Response","autoFocus","onKeyDown","key","onBlur","Fragment","Edit2","Trash2","DialogFooter","disabled","Loading","svg","aria-hidden","viewBox","fill","xmlns","path","d"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[342],{42488:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Activity",[["path",{d:"M22 12h-4l-3 9L9 3l-3 9H2",key:"d5dnw9"}]])},31047:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Calendar",[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",ry:"2",key:"eu3xkr"}],["line",{x1:"16",x2:"16",y1:"2",y2:"6",key:"m3sa8f"}],["line",{x1:"8",x2:"8",y1:"2",y2:"6",key:"18kwsl"}],["line",{x1:"3",x2:"21",y1:"10",y2:"10",key:"xt86sb"}]])},24156:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("ChevronsUpDown",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]])},91723:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]])},29202:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]])},25846:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},66337:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]])},53417:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]])},17684:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("MoreVertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]])},15868:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z",key:"1lpok0"}]])},31810:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("ThumbsUp",[["path",{d:"M7 10v12",key:"1qc93n"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z",key:"y3tblf"}]])},92369:function(t,a,e){e.d(a,{Z:function(){return r}});let r=(0,e(39763).Z)("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]])},14438:function(t,a,e){e.d(a,{Am:function(){return i}});var r=e(2265);e(54887),Array(12).fill(0);var o=1,s=new class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let a=this.subscribers.indexOf(t);this.subscribers.splice(a,1)}),this.publish=t=>{this.subscribers.forEach(a=>a(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var a;let{message:e,...r}=t,s="number"==typeof(null==t?void 0:t.id)||(null==(a=t.id)?void 0:a.length)>0?t.id:o++,n=this.toasts.find(t=>t.id===s),i=void 0===t.dismissible||t.dismissible;return this.dismissedToasts.has(s)&&this.dismissedToasts.delete(s),n?this.toasts=this.toasts.map(a=>a.id===s?(this.publish({...a,...t,id:s,title:e}),{...a,...t,id:s,dismissible:i,title:e}):a):this.addToast({title:e,...r,dismissible:i,id:s}),s},this.dismiss=t=>(this.dismissedToasts.add(t),t||this.toasts.forEach(t=>{this.subscribers.forEach(a=>a({id:t.id,dismiss:!0}))}),this.subscribers.forEach(a=>a({id:t,dismiss:!0})),t),this.message=(t,a)=>this.create({...a,message:t}),this.error=(t,a)=>this.create({...a,message:t,type:"error"}),this.success=(t,a)=>this.create({...a,type:"success",message:t}),this.info=(t,a)=>this.create({...a,type:"info",message:t}),this.warning=(t,a)=>this.create({...a,type:"warning",message:t}),this.loading=(t,a)=>this.create({...a,type:"loading",message:t}),this.promise=(t,a)=>{let e;if(!a)return;void 0!==a.loading&&(e=this.create({...a,promise:t,type:"loading",message:a.loading,description:"function"!=typeof a.description?a.description:void 0}));let o=t instanceof Promise?t:t(),s=void 0!==e,i,d=o.then(async t=>{if(i=["resolve",t],r.isValidElement(t))s=!1,this.create({id:e,type:"default",message:t});else if(n(t)&&!t.ok){s=!1;let r="function"==typeof a.error?await a.error("HTTP error! status: ".concat(t.status)):a.error,o="function"==typeof a.description?await a.description("HTTP error! status: ".concat(t.status)):a.description;this.create({id:e,type:"error",message:r,description:o})}else if(void 0!==a.success){s=!1;let r="function"==typeof a.success?await a.success(t):a.success,o="function"==typeof a.description?await a.description(t):a.description;this.create({id:e,type:"success",message:r,description:o})}}).catch(async t=>{if(i=["reject",t],void 0!==a.error){s=!1;let r="function"==typeof a.error?await a.error(t):a.error,o="function"==typeof a.description?await a.description(t):a.description;this.create({id:e,type:"error",message:r,description:o})}}).finally(()=>{var t;s&&(this.dismiss(e),e=void 0),null==(t=a.finally)||t.call(a)}),l=()=>new Promise((t,a)=>d.then(()=>"reject"===i[0]?a(i[1]):t(i[1])).catch(a));return"string"!=typeof e&&"number"!=typeof e?{unwrap:l}:Object.assign(e,{unwrap:l})},this.custom=(t,a)=>{let e=(null==a?void 0:a.id)||o++;return this.create({jsx:t(e),id:e,...a}),e},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},n=t=>t&&"object"==typeof t&&"ok"in t&&"boolean"==typeof t.ok&&"status"in t&&"number"==typeof t.status,i=Object.assign((t,a)=>{let e=(null==a?void 0:a.id)||o++;return s.addToast({title:t,...a,id:e}),e},{success:s.success,info:s.info,warning:s.warning,error:s.error,custom:s.custom,message:s.message,promise:s.promise,dismiss:s.dismiss,loading:s.loading},{getHistory:()=>s.toasts,getToasts:()=>s.getActiveToasts()});!function(t){let{insertAt:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||"undefined"==typeof document)return;let e=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===a&&e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r),r.styleSheet?r.styleSheet.cssText=t:r.appendChild(document.createTextNode(t))}(':where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\n')}}]);
|
|
2
|
+
//# sourceMappingURL=342-d9c2d6ae9f9435cb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/chunks/342-d9c2d6ae9f9435cb.js","mappings":"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","sources":["webpack://_N_E/../../../src/icons/activity.ts","webpack://_N_E/../../../src/icons/calendar.ts","webpack://_N_E/../../../src/icons/chevrons-up-down.ts","webpack://_N_E/../../../src/icons/clock.ts","webpack://_N_E/../../../src/icons/globe.ts","webpack://_N_E/../../../src/icons/lightbulb.ts","webpack://_N_E/../../../src/icons/lock.ts","webpack://_N_E/../../../src/icons/message-square.ts","webpack://_N_E/../../../src/icons/more-vertical.ts","webpack://_N_E/../../../src/icons/square-pen.ts","webpack://_N_E/../../../src/icons/thumbs-up.ts","webpack://_N_E/../../../src/icons/user.ts","webpack://_N_E/../src/index.tsx","webpack://_N_E/../src/assets.tsx","webpack://_N_E/../src/hooks.tsx","webpack://_N_E/../src/state.ts","webpack://_N_E/#style-inject:#style-inject","webpack://_N_E/../src/styles.css","webpack://_N_E/../src/types.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Activity\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/activity\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Activity = createLucideIcon('Activity', [\n ['path', { d: 'M22 12h-4l-3 9L9 3l-3 9H2', key: 'd5dnw9' }],\n]);\n\nexport default Activity;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Calendar\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/calendar\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Calendar = createLucideIcon('Calendar', [\n ['rect', { width: '18', height: '18', x: '3', y: '4', rx: '2', ry: '2', key: 'eu3xkr' }],\n ['line', { x1: '16', x2: '16', y1: '2', y2: '6', key: 'm3sa8f' }],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '6', key: '18kwsl' }],\n ['line', { x1: '3', x2: '21', y1: '10', y2: '10', key: 'xt86sb' }],\n]);\n\nexport default Calendar;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('ChevronsUpDown', [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n]);\n\nexport default ChevronsUpDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Clock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Clock = createLucideIcon('Clock', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['polyline', { points: '12 6 12 12 16 14', key: '68esgv' }],\n]);\n\nexport default Clock;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Globe\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/globe\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Globe = createLucideIcon('Globe', [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20', key: '13o1zl' }],\n ['path', { d: 'M2 12h20', key: '9i4pu4' }],\n]);\n\nexport default Globe;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Lightbulb\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/lightbulb\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Lightbulb = createLucideIcon('Lightbulb', [\n [\n 'path',\n {\n d: 'M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5',\n key: '1gvzjb',\n },\n ],\n ['path', { d: 'M9 18h6', key: 'x1upvd' }],\n ['path', { d: 'M10 22h4', key: 'ceow96' }],\n]);\n\nexport default Lightbulb;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Lock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/lock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Lock = createLucideIcon('Lock', [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2', key: '1w4ew1' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4', key: 'fwvmzm' }],\n]);\n\nexport default Lock;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MessageSquare\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageSquare = createLucideIcon('MessageSquare', [\n ['path', { d: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z', key: '1lielz' }],\n]);\n\nexport default MessageSquare;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name MoreVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/more-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MoreVertical = createLucideIcon('MoreVertical', [\n ['circle', { cx: '12', cy: '12', r: '1', key: '41hilf' }],\n ['circle', { cx: '12', cy: '5', r: '1', key: 'gxeob9' }],\n ['circle', { cx: '12', cy: '19', r: '1', key: 'lyex9k' }],\n]);\n\nexport default MoreVertical;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name SquarePen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/square-pen\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SquarePen = createLucideIcon('SquarePen', [\n ['path', { d: 'M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7', key: '1m0v6g' }],\n ['path', { d: 'M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z', key: '1lpok0' }],\n]);\n\nexport default SquarePen;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ThumbsUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/thumbs-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ThumbsUp = createLucideIcon('ThumbsUp', [\n ['path', { d: 'M7 10v12', key: '1qc93n' }],\n [\n 'path',\n {\n d: 'M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z',\n key: 'y3tblf',\n },\n ],\n]);\n\nexport default ThumbsUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('User', [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n]);\n\nexport default User;\n","'use client';\n\nimport React, { forwardRef, isValidElement } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { CloseIcon, getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport { toast, ToastState } from './state';\nimport './styles.css';\nimport {\n isAction,\n SwipeDirection,\n type ExternalToast,\n type HeightT,\n type ToasterProps,\n type ToastProps,\n type ToastT,\n type ToastToDismiss,\n} from './types';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 20;\n\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nfunction getDefaultSwipeDirections(position: string): Array<SwipeDirection> {\n const [y, x] = position.split('-');\n const directions: Array<SwipeDirection> = [];\n\n if (y) {\n directions.push(y as SwipeDirection);\n }\n\n if (x) {\n directions.push(x as SwipeDirection);\n }\n\n return directions;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n defaultRichColors,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n } = props;\n const [swipeDirection, setSwipeDirection] = React.useState<'x' | 'y' | null>(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState<'left' | 'right' | 'up' | 'down' | null>(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n remainingTime.current = duration;\n }, [duration]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime.current);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, toast, toastType, pauseWhenPageIsHidden, isDocumentHidden, deleteToast]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {loadingIconProp}\n </div>\n );\n }\n return <Loader className={cn(classNames?.loader, toast?.classNames?.loader)} visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={toast.richColors ?? defaultRichColors}\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-swiped={isSwiped}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-swipe-direction={swipeOutDirection}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onDragEnd={() => {\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n }}\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmountX = Number(\n toastRef.current?.style.getPropertyValue('--swipe-amount-x').replace('px', '') || 0,\n );\n const swipeAmountY = Number(\n toastRef.current?.style.getPropertyValue('--swipe-amount-y').replace('px', '') || 0,\n );\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n\n deleteToast();\n setSwipeOut(true);\n setIsSwiped(false);\n return;\n }\n\n setSwiping(false);\n setSwipeDirection(null);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const isHighlighted = window.getSelection()?.toString().length > 0;\n if (isHighlighted) return;\n\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n\n const swipeDirections = props.swipeDirections ?? getDefaultSwipeDirections(position);\n\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n\n let swipeAmount = { x: 0, y: 0 };\n\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0) {\n swipeAmount.y = yDelta;\n } else if (swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0) {\n swipeAmount.x = xDelta;\n } else if (swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n }\n }\n }\n\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n\n // Apply transform using both x and y values\n toastRef.current?.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n toastRef.current?.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n {icons?.close ?? CloseIcon}\n </button>\n ) : null}\n {/* TODO: This can be cleaner */}\n {toast.jsx || isValidElement(toast.title) ? (\n toast.jsx ? (\n toast.jsx\n ) : typeof toast.title === 'function' ? (\n toast.title()\n ) : (\n toast.title\n )\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\" className={cn(classNames?.icon, toast?.classNames?.icon)}>\n {toast.promise || (toast.type === 'loading' && !toast.icon) ? toast.icon || getLoadingIcon() : null}\n {toast.type !== 'loading' ? toast.icon || icons?.[toastType] || getAsset(toastType) : null}\n </div>\n ) : null}\n\n <div data-content=\"\" className={cn(classNames?.content, toast?.classNames?.content)}>\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {typeof toast.title === 'function' ? toast.title() : toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {typeof toast.description === 'function' ? toast.description() : toast.description}\n </div>\n ) : null}\n </div>\n {isValidElement(toast.cancel) ? (\n toast.cancel\n ) : toast.cancel && isAction(toast.cancel) ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick?.(event);\n deleteToast();\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {isValidElement(toast.action) ? (\n toast.action\n ) : toast.action && isAction(toast.action) ? (\n <button\n data-button\n data-action\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick?.(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction assignOffset(defaultOffset: ToasterProps['offset'], mobileOffset: ToasterProps['mobileOffset']) {\n const styles = {} as React.CSSProperties;\n\n [defaultOffset, mobileOffset].forEach((offset, index) => {\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n\n function assignAll(offset: string | number) {\n ['top', 'right', 'bottom', 'left'].forEach((key) => {\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n ['top', 'right', 'bottom', 'left'].forEach((key) => {\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n\n return styles;\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setActiveToasts((toasts) => toasts.filter((t) => t.id !== toast.id));\n });\n });\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setActiveToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(props, ref) {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n mobileOffset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap = GAP,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback((toastToRemove: ToastT) => {\n setToasts((toasts) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n return toasts.filter(({ id }) => id !== toastToRemove.id);\n });\n }, []);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches }) => {\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section\n ref={ref}\n aria-label={`${containerAriaLabel} ${hotkeyLabel}`}\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n suppressHydrationWarning\n >\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n\n if (!toasts.length) return null;\n\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-y-position={y}\n data-lifted={expanded && toasts.length > 1 && !expand}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset),\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => setExpanded(false)}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n defaultRichColors={richColors}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n swipeDirections={props.swipeDirections}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n});\nexport { toast, Toaster, type ExternalToast, type ToastT, type ToasterProps, useSonner };\nexport { type ToastClassnames, type ToastToDismiss, type Action } from './types';\n","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible, className }: { visible: boolean, className?: string }) => {\n return (\n <div className={['sonner-loading-wrapper', className].filter(Boolean).join(' ')} data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const CloseIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import type { ExternalToast, PromiseData, PromiseT, ToastT, ToastToDismiss, ToastTypes } from './types';\n\nimport React from 'react';\n\nlet toastsCounter = 1;\n\ntype titleT = (() => React.ReactNode) | React.ReactNode;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n dismissedToasts: Set<string | number>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: titleT;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n this.dismissedToasts.add(id);\n\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n let result: ['resolve', ToastData] | ['reject', unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = ['resolve', response];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({ id, type: 'default', message: response });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const message =\n typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? await data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description =\n typeof data.description === 'function' ? await data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch(async (error) => {\n result = ['reject', error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise.then(() => (result[0] === 'reject' ? reject(result[1]) : resolve(result[1]))).catch(reject),\n );\n\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return { unwrap };\n } else {\n return Object.assign(id, { unwrap });\n }\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n\n getActiveToasts = () => {\n return this.toasts.filter((toast) => !this.dismissedToasts.has(toast.id));\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: titleT, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n\n ToastState.addToast({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst isHttpResponse = (data: any): data is Response => {\n return (\n data &&\n typeof data === 'object' &&\n 'ok' in data &&\n typeof data.ok === 'boolean' &&\n 'status' in data &&\n typeof data.status === 'number'\n );\n};\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\nconst getToasts = () => ToastState.getActiveToasts();\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(\n basicToast,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory, getToasts },\n);\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":where(html[dir=\\\"ltr\\\"]),:where([data-sonner-toaster][dir=\\\"ltr\\\"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir=\\\"rtl\\\"]),:where([data-sonner-toaster][dir=\\\"rtl\\\"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted=\\\"true\\\"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted=\\\"true\\\"]){transform:none}}:where([data-sonner-toaster][data-x-position=\\\"right\\\"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position=\\\"left\\\"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position=\\\"center\\\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\\\"top\\\"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position=\\\"bottom\\\"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled=\\\"true\\\"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\\\"top\\\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise=\\\"true\\\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\\\"dark\\\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\\\"true\\\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\\\"top\\\"][data-swiping=\\\"true\\\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"][data-swiping=\\\"true\\\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\\\"false\\\"][data-removed=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\\\"true\\\"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"][data-styled=\\\"true\\\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\\\"false\\\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\\\"true\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"true\\\"][data-swipe-out=\\\"false\\\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"false\\\"][data-swipe-out=\\\"false\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"false\\\"][data-swipe-out=\\\"false\\\"][data-expanded=\\\"false\\\"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"false\\\"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","import React from 'react';\n\nexport type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | React.ReactNode\n | ((data: Data) => React.ReactNode | string | Promise<React.ReactNode | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, 'description'>;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | React.ReactNode;\n success?: PromiseTResult<ToastData>;\n error?: PromiseTResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: React.ReactNode;\n info?: React.ReactNode;\n warning?: React.ReactNode;\n error?: React.ReactNode;\n loading?: React.ReactNode;\n close?: React.ReactNode;\n}\n\nexport interface Action {\n label: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n actionButtonStyle?: React.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n title?: (() => React.ReactNode) | React.ReactNode;\n type?: ToastTypes;\n icon?: React.ReactNode;\n jsx?: React.ReactNode;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => React.ReactNode) | React.ReactNode;\n duration?: number;\n delete?: boolean;\n action?: Action | React.ReactNode;\n cancel?: Action | React.ReactNode;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n}\n\nexport function isAction(action: Action | React.ReactNode): action is Action {\n return (action as Action).label !== undefined;\n}\n\nexport type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n}\n\ntype Offset =\n | {\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n }\n | string\n | number;\n\nexport interface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark' | 'system';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: Offset;\n mobileOffset?: Offset;\n dir?: 'rtl' | 'ltr' | 'auto';\n swipeDirections?: SwipeDirection[];\n /**\n * @deprecated Please use the `icons` prop instead:\n * ```jsx\n * <Toaster\n * icons={{ loading: <LoadingIcon /> }}\n * />\n * ```\n */\n loadingIcon?: React.ReactNode;\n icons?: ToastIcons;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n}\n\nexport type SwipeDirection = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n swipeDirections?: SwipeDirection[];\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n loadingIcon?: React.ReactNode;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n pauseWhenPageIsHidden: boolean;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = 'SwipedOut',\n SwipedBack = 'SwipedBack',\n NotSwiped = 'NotSwiped',\n}\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {\n id?: number | string;\n};\n"],"names":["Activity","createLucideIcon","d","key","Calendar","width","height","x","y","rx","ry","x1","x2","y1","y2","ChevronsUpDown","Clock","cx","cy","r","points","Globe","Lightbulb","Lock","MessageSquare","MoreVertical","SquarePen","ThumbsUp","User","Array","fill","toastsCounter","ToastState","constructor","subscribe","subscriber","subscribers","push","index","indexOf","splice","publish","data","forEach","addToast","toasts","create","_a","message","rest","id","length","alreadyExists","find","toast","dismissible","dismissedToasts","has","delete","map","title","dismiss","add","error","type","success","info","warning","loading","promise","description","p","Promise","shouldDismiss","result","originalPromise","then","response","React","isHttpResponse","ok","concat","status","catch","finally","call","unwrap","resolve","reject","Object","assign","custom","jsx","getActiveToasts","filter","Set","getHistory","getToasts","styleInject","css","insertAt","arguments","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,7598,3619],{22252:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]])},32660:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},55455:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("Book",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}]])},66901:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("CheckCircle2",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},40875:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]])},33245:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},15863:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("Loader2",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},53417:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]])},45675:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("Pencil",[["path",{d:"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",key:"5qss01"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]])},52636:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("RefreshCcw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]])},45131:function(e,t,r){r.d(t,{Z:function(){return n}});let n=(0,r(39763).Z)("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]])},1119:function(e,t,r){r.d(t,{Z:function(){return n}});function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(null,arguments)}},62484:function(e,t,r){r.d(t,{u:function(){return n}});function n(e,[t,r]){return Math.min(r,Math.max(t,e))}},23619:function(e,t,r){r.d(t,{aU:function(){return eM},$j:function(){return ek},VY:function(){return ew},dk:function(){return eC},aV:function(){return eT},h_:function(){return ex},fC:function(){return eD},Dx:function(){return ej},xz:function(){return eb}});var n=r(2265),o=r(73966),i=r(98575),a=r(6741),l=r(99255),u=r(80886),s=r(22308),c=r(99103),d=r(83832),f=r(71599),p=r(66840),m=r(86097),g=r(60703),h=r(5478),v=r(37053),y=r(57437),D="Dialog",[b,x]=(0,o.b)(D),[T,w]=b(D),M=e=>{let{__scopeDialog:t,children:r,open:o,defaultOpen:i,onOpenChange:a,modal:s=!0}=e,c=n.useRef(null),d=n.useRef(null),[f,p]=(0,u.T)({prop:o,defaultProp:null!=i&&i,onChange:a,caller:D});return(0,y.jsx)(T,{scope:t,triggerRef:c,contentRef:d,contentId:(0,l.M)(),titleId:(0,l.M)(),descriptionId:(0,l.M)(),open:f,onOpenChange:p,onOpenToggle:n.useCallback(()=>p(e=>!e),[p]),modal:s,children:r})};M.displayName=D;var k="DialogTrigger",j=n.forwardRef((e,t)=>{let{__scopeDialog:r,...n}=e,o=w(k,r),l=(0,i.e)(t,o.triggerRef);return(0,y.jsx)(p.WV.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":V(o.open),...n,ref:l,onClick:(0,a.M)(e.onClick,o.onOpenToggle)})});j.displayName=k;var C="DialogPortal",[S,R]=b(C,{forceMount:void 0}),A=e=>{let{__scopeDialog:t,forceMount:r,children:o,container:i}=e,a=w(C,t);return(0,y.jsx)(S,{scope:t,forceMount:r,children:n.Children.map(o,e=>(0,y.jsx)(f.z,{present:r||a.open,children:(0,y.jsx)(d.h,{asChild:!0,container:i,children:e})}))})};A.displayName=C;var N="DialogOverlay",E=n.forwardRef((e,t)=>{let r=R(N,e.__scopeDialog),{forceMount:n=r.forceMount,...o}=e,i=w(N,e.__scopeDialog);return i.modal?(0,y.jsx)(f.z,{present:n||i.open,children:(0,y.jsx)(Z,{...o,ref:t})}):null});E.displayName=N;var O=(0,v.Z8)("DialogOverlay.RemoveScroll"),Z=n.forwardRef((e,t)=>{let{__scopeDialog:r,...n}=e,o=w(N,r);return(0,y.jsx)(g.Z,{as:O,allowPinchZoom:!0,shards:[o.contentRef],children:(0,y.jsx)(p.WV.div,{"data-state":V(o.open),...n,ref:t,style:{pointerEvents:"auto",...n.style}})})}),F="DialogContent",z=n.forwardRef((e,t)=>{let r=R(F,e.__scopeDialog),{forceMount:n=r.forceMount,...o}=e,i=w(F,e.__scopeDialog);return(0,y.jsx)(f.z,{present:n||i.open,children:i.modal?(0,y.jsx)(I,{...o,ref:t}):(0,y.jsx)(H,{...o,ref:t})})});z.displayName=F;var I=n.forwardRef((e,t)=>{let r=w(F,e.__scopeDialog),o=n.useRef(null),l=(0,i.e)(t,r.contentRef,o);return n.useEffect(()=>{let e=o.current;if(e)return(0,h.Ry)(e)},[]),(0,y.jsx)(_,{...e,ref:l,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,a.M)(e.onCloseAutoFocus,e=>{var t;e.preventDefault(),null===(t=r.triggerRef.current)||void 0===t||t.focus()}),onPointerDownOutside:(0,a.M)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,r=0===t.button&&!0===t.ctrlKey;(2===t.button||r)&&e.preventDefault()}),onFocusOutside:(0,a.M)(e.onFocusOutside,e=>e.preventDefault())})}),H=n.forwardRef((e,t)=>{let r=w(F,e.__scopeDialog),o=n.useRef(!1),i=n.useRef(!1);return(0,y.jsx)(_,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{var n,a;null===(n=e.onCloseAutoFocus)||void 0===n||n.call(e,t),t.defaultPrevented||(o.current||null===(a=r.triggerRef.current)||void 0===a||a.focus(),t.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:t=>{var n,a;null===(n=e.onInteractOutside)||void 0===n||n.call(e,t),t.defaultPrevented||(o.current=!0,"pointerdown"!==t.detail.originalEvent.type||(i.current=!0));let l=t.target;(null===(a=r.triggerRef.current)||void 0===a?void 0:a.contains(l))&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})}),_=n.forwardRef((e,t)=>{let{__scopeDialog:r,trapFocus:o,onOpenAutoFocus:a,onCloseAutoFocus:l,...u}=e,d=w(F,r),f=n.useRef(null),p=(0,i.e)(t,f);return(0,m.EW)(),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(c.M,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:a,onUnmountAutoFocus:l,children:(0,y.jsx)(s.XB,{role:"dialog",id:d.contentId,"aria-describedby":d.descriptionId,"aria-labelledby":d.titleId,"data-state":V(d.open),...u,ref:p,onDismiss:()=>d.onOpenChange(!1)})}),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(J,{titleId:d.titleId}),(0,y.jsx)(K,{contentRef:f,descriptionId:d.descriptionId})]})]})}),P="DialogTitle",Q=n.forwardRef((e,t)=>{let{__scopeDialog:r,...n}=e,o=w(P,r);return(0,y.jsx)(p.WV.h2,{id:o.titleId,...n,ref:t})});Q.displayName=P;var L="DialogDescription",B=n.forwardRef((e,t)=>{let{__scopeDialog:r,...n}=e,o=w(L,r);return(0,y.jsx)(p.WV.p,{id:o.descriptionId,...n,ref:t})});B.displayName=L;var X="DialogClose",q=n.forwardRef((e,t)=>{let{__scopeDialog:r,...n}=e,o=w(X,r);return(0,y.jsx)(p.WV.button,{type:"button",...n,ref:t,onClick:(0,a.M)(e.onClick,()=>o.onOpenChange(!1))})});function V(e){return e?"open":"closed"}q.displayName=X;var W="DialogTitleWarning",[Y,U]=(0,o.k)(W,{contentName:F,titleName:P,docsSlug:"dialog"}),J=e=>{let{titleId:t}=e,r=U(W),o="`".concat(r.contentName,"` requires a `").concat(r.titleName,"` for the component to be accessible for screen reader users.\n\nIf you want to hide the `").concat(r.titleName,"`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/").concat(r.docsSlug);return n.useEffect(()=>{t&&!document.getElementById(t)&&console.error(o)},[o,t]),null},K=e=>{let{contentRef:t,descriptionId:r}=e,o=U("DialogDescriptionWarning"),i="Warning: Missing `Description` or `aria-describedby={undefined}` for {".concat(o.contentName,"}.");return n.useEffect(()=>{var e;let n=null===(e=t.current)||void 0===e?void 0:e.getAttribute("aria-describedby");r&&n&&!document.getElementById(r)&&console.warn(i)},[i,t,r]),null},$="AlertDialog",[G,ee]=(0,o.b)($,[x]),et=x(),er=e=>{let{__scopeAlertDialog:t,...r}=e,n=et(t);return(0,y.jsx)(M,{...n,...r,modal:!0})};er.displayName=$;var en=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,o=et(r);return(0,y.jsx)(j,{...o,...n,ref:t})});en.displayName="AlertDialogTrigger";var eo=e=>{let{__scopeAlertDialog:t,...r}=e,n=et(t);return(0,y.jsx)(A,{...n,...r})};eo.displayName="AlertDialogPortal";var ei=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,o=et(r);return(0,y.jsx)(E,{...o,...n,ref:t})});ei.displayName="AlertDialogOverlay";var ea="AlertDialogContent",[el,eu]=G(ea),es=(0,v.sA)("AlertDialogContent"),ec=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,children:o,...l}=e,u=et(r),s=n.useRef(null),c=(0,i.e)(t,s),d=n.useRef(null);return(0,y.jsx)(Y,{contentName:ea,titleName:ed,docsSlug:"alert-dialog",children:(0,y.jsx)(el,{scope:r,cancelRef:d,children:(0,y.jsxs)(z,{role:"alertdialog",...u,...l,ref:c,onOpenAutoFocus:(0,a.M)(l.onOpenAutoFocus,e=>{var t;e.preventDefault(),null===(t=d.current)||void 0===t||t.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,y.jsx)(es,{children:o}),(0,y.jsx)(ey,{contentRef:s})]})})})});ec.displayName=ea;var ed="AlertDialogTitle",ef=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,o=et(r);return(0,y.jsx)(Q,{...o,...n,ref:t})});ef.displayName=ed;var ep="AlertDialogDescription",em=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,o=et(r);return(0,y.jsx)(B,{...o,...n,ref:t})});em.displayName=ep;var eg=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,o=et(r);return(0,y.jsx)(q,{...o,...n,ref:t})});eg.displayName="AlertDialogAction";var eh="AlertDialogCancel",ev=n.forwardRef((e,t)=>{let{__scopeAlertDialog:r,...n}=e,{cancelRef:o}=eu(eh,r),a=et(r),l=(0,i.e)(t,o);return(0,y.jsx)(q,{...a,...n,ref:l})});ev.displayName=eh;var ey=e=>{let{contentRef:t}=e,r="`".concat(ea,"` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the `").concat(ea,"` by passing a `").concat(ep,"` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an `id` and passing the same value to the `aria-describedby` prop in `").concat(ea,"`. If the description is confusing or duplicative for sighted users, you can use the `@radix-ui/react-visually-hidden` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog");return n.useEffect(()=>{var e;document.getElementById(null===(e=t.current)||void 0===e?void 0:e.getAttribute("aria-describedby"))||console.warn(r)},[r,t]),null},eD=er,eb=en,ex=eo,eT=ei,ew=ec,eM=eg,ek=ev,ej=ef,eC=em},81363:function(e,t,r){r.d(t,{T:function(){return o}});var n=r(99649);function o(e,t){let r=(0,n.Q)(e),o=(0,n.Q)(t);return 12*(r.getFullYear()-o.getFullYear())+(r.getMonth()-o.getMonth())}},27742:function(e,t,r){r.d(t,{V:function(){return o}});var n=r(99649);function o(e){let t=(0,n.Q)(e),r=t.getMonth();return t.setFullYear(t.getFullYear(),r+1,0),t.setHours(23,59,59,999),t}},7598:function(e,t,r){r.d(t,{Q:function(){return f}});var n=r(63497),o=r(99649);function i(e,t){let r=(0,o.Q)(e),n=(0,o.Q)(t),i=r.getTime()-n.getTime();return i<0?-1:i>0?1:i}var a=r(78198),l=r(81363),u=r(27742),s=r(5654),c=r(55528),d=r(9340);function f(e,t){return function(e,t,r){var n,f,p,m,g,h;let v,y,D;let b=(0,c.j)(),x=null!==(f=null!==(n=null==r?void 0:r.locale)&&void 0!==n?n:b.locale)&&void 0!==f?f:s._,T=i(e,t);if(isNaN(T))throw RangeError("Invalid time value");let w=Object.assign({},r,{addSuffix:null==r?void 0:r.addSuffix,comparison:T});T>0?(v=(0,o.Q)(t),y=(0,o.Q)(e)):(v=(0,o.Q)(e),y=(0,o.Q)(t));let M=(p=y,m=v,(h=null==void 0?void 0:(void 0).roundingMethod,e=>{let t=(h?Math[h]:Math.trunc)(e);return 0===t?0:t})((+(0,o.Q)(p)-+(0,o.Q)(m))/1e3)),k=Math.round((M-((0,d.D)(y)-(0,d.D)(v))/1e3)/60);if(k<2){if(null==r?void 0:r.includeSeconds){if(M<5)return x.formatDistance("lessThanXSeconds",5,w);if(M<10)return x.formatDistance("lessThanXSeconds",10,w);if(M<20)return x.formatDistance("lessThanXSeconds",20,w);if(M<40)return x.formatDistance("halfAMinute",0,w);else if(M<60)return x.formatDistance("lessThanXMinutes",1,w);else return x.formatDistance("xMinutes",1,w)}return 0===k?x.formatDistance("lessThanXMinutes",1,w):x.formatDistance("xMinutes",k,w)}if(k<45)return x.formatDistance("xMinutes",k,w);if(k<90)return x.formatDistance("aboutXHours",1,w);if(k<a.H_)return x.formatDistance("aboutXHours",Math.round(k/60),w);if(k<2520)return x.formatDistance("xDays",1,w);if(k<a.fH){let e=Math.round(k/a.H_);return x.formatDistance("xDays",e,w)}if(k<2*a.fH)return D=Math.round(k/a.fH),x.formatDistance("aboutXMonths",D,w);if((D=function(e,t){let r;let n=(0,o.Q)(e),a=(0,o.Q)(t),s=i(n,a),c=Math.abs((0,l.T)(n,a));if(c<1)r=0;else{1===n.getMonth()&&n.getDate()>27&&n.setDate(30),n.setMonth(n.getMonth()-s*c);let t=i(n,a)===-s;(function(e){let t=(0,o.Q)(e);return+function(e){let t=(0,o.Q)(e);return t.setHours(23,59,59,999),t}(t)==+(0,u.V)(t)})((0,o.Q)(e))&&1===c&&1===i(e,a)&&(t=!1),r=s*(c-Number(t))}return 0===r?0:r}(y,v))<12){let e=Math.round(k/a.fH);return x.formatDistance("xMonths",e,w)}{let e=D%12,t=Math.trunc(D/12);return e<3?x.formatDistance("aboutXYears",t,w):e<9?x.formatDistance("overXYears",t,w):x.formatDistance("almostXYears",t+1,w)}}(e,(0,n.L)(e,Date.now()),t)}},20460:function(e,t,r){r.d(t,{h:function(){return m}});var n=r(57437),o=r(2265);let i={damping:.7,stiffness:.05,mass:1.25},a=1e3/60,l=!1;globalThis.document?.addEventListener("mousedown",()=>{l=!0}),globalThis.document?.addEventListener("mouseup",()=>{l=!1}),globalThis.document?.addEventListener("click",()=>{l=!1});let u=(e={})=>{let[t,r]=(0,o.useState)(!1),[n,i]=(0,o.useState)(!1!==e.initial),[u,c]=(0,o.useState)(!1),f=(0,o.useRef)(null);f.current=e;let p=(0,o.useCallback)(()=>{if(!l)return!1;let e=window.getSelection();if(!e||!e.rangeCount)return!1;let t=e.getRangeAt(0);return t.commonAncestorContainer.contains(x.current)||x.current?.contains(t.commonAncestorContainer)},[]),m=(0,o.useCallback)(e=>{h.isAtBottom=e,i(e)},[]),g=(0,o.useCallback)(e=>{h.escapedFromLock=e,r(e)},[]),h=(0,o.useMemo)(()=>{let r;return{escapedFromLock:t,isAtBottom:n,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return x.current?.scrollTop??0},set scrollTop(scrollTop){x.current&&(x.current.scrollTop=scrollTop,h.ignoreScrollToTop=x.current.scrollTop)},get targetScrollTop(){if(!x.current||!T.current)return 0;return x.current.scrollHeight-1-x.current.clientHeight},get calculatedTargetScrollTop(){if(!x.current||!T.current)return 0;let{targetScrollTop:t}=this;if(!e.targetScrollTop)return t;if(r?.targetScrollTop===t)return r.calculatedScrollTop;let n=Math.max(Math.min(e.targetScrollTop(t,{scrollElement:x.current,contentElement:T.current}),t),0);return r={targetScrollTop:t,calculatedScrollTop:n},requestAnimationFrame(()=>{r=void 0}),n},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=70}}},[]),v=(0,o.useCallback)((e={})=>{let t;"string"==typeof e&&(e={animation:e}),e.preserveScrollPosition||m(!0);let r=Date.now()+(Number(e.wait)||0),n=d(f.current,e.animation),{ignoreEscapes:o=!1}=e,i=h.calculatedTargetScrollTop;e.duration instanceof Promise?e.duration.finally(()=>{t=Date.now()}):t=r+(e.duration??0);let l=async()=>{let e=new Promise(requestAnimationFrame).then(()=>{if(!h.isAtBottom)return h.animation=void 0,!1;let{scrollTop:u}=h,s=performance.now(),c=(s-(h.lastTick??s))/a;if(h.animation||(h.animation={behavior:n,promise:e,ignoreEscapes:o}),h.animation.behavior===n&&(h.lastTick=s),p()||r>Date.now())return l();if(u<Math.min(i,h.calculatedTargetScrollTop)){if(h.animation?.behavior===n){if("instant"===n)return h.scrollTop=h.calculatedTargetScrollTop,l();h.velocity=(n.damping*h.velocity+n.stiffness*h.scrollDifference)/n.mass,h.accumulated+=h.velocity*c,h.scrollTop+=h.accumulated,h.scrollTop!==u&&(h.accumulated=0)}return l()}return t>Date.now()?(i=h.calculatedTargetScrollTop,l()):(h.animation=void 0,h.scrollTop<h.calculatedTargetScrollTop)?v({animation:d(f.current,f.current.resize),ignoreEscapes:o,duration:Math.max(0,t-Date.now())||void 0}):h.isAtBottom});return e.then(e=>(requestAnimationFrame(()=>{h.animation||(h.lastTick=void 0,h.velocity=0)}),e))};return(!0!==e.wait&&(h.animation=void 0),h.animation?.behavior===n)?h.animation.promise:l()},[m,p,h]),y=(0,o.useCallback)(()=>{g(!0),m(!1)},[g,m]),D=(0,o.useCallback)(({target:e})=>{if(e!==x.current)return;let{scrollTop:t,ignoreScrollToTop:r}=h,{lastScrollTop:n=t}=h;h.lastScrollTop=t,h.ignoreScrollToTop=void 0,r&&r>t&&(n=r),c(h.isNearBottom),setTimeout(()=>{if(h.resizeDifference||t===r)return;if(p()){g(!0),m(!1);return}let e=t>n,o=t<n;if(h.animation?.ignoreEscapes){h.scrollTop=n;return}o&&(g(!0),m(!1)),e&&g(!1),!h.escapedFromLock&&h.isNearBottom&&m(!0)},1)},[g,m,p,h]),b=(0,o.useCallback)(({target:e,deltaY:t})=>{let r=e;for(;!["scroll","auto"].includes(getComputedStyle(r).overflow);){if(!r.parentElement)return;r=r.parentElement}r===x.current&&t<0&&x.current.scrollHeight>x.current.clientHeight&&!h.animation?.ignoreEscapes&&(g(!0),m(!1))},[g,m,h]),x=s(e=>{x.current?.removeEventListener("scroll",D),x.current?.removeEventListener("wheel",b),e?.addEventListener("scroll",D,{passive:!0}),e?.addEventListener("wheel",b,{passive:!0})},[]),T=s(e=>{let t;h.resizeObserver?.disconnect(),e&&(h.resizeObserver=new ResizeObserver(([e])=>{let{height:r}=e.contentRect,n=r-(t??r);if(h.resizeDifference=n,h.scrollTop>h.targetScrollTop&&(h.scrollTop=h.targetScrollTop),c(h.isNearBottom),n>=0){let e=d(f.current,t?f.current.resize:f.current.initial);v({animation:e,wait:!0,preserveScrollPosition:!0,duration:"instant"===e?void 0:350})}else h.isNearBottom&&(g(!1),m(!0));t=r,requestAnimationFrame(()=>{setTimeout(()=>{h.resizeDifference===n&&(h.resizeDifference=0)},1)})}),h.resizeObserver?.observe(e))},[]);return{contentRef:T,scrollRef:x,scrollToBottom:v,stopScroll:y,isAtBottom:n||u,isNearBottom:u,escapedFromLock:t,state:h}};function s(e,t){let r=(0,o.useCallback)(t=>(r.current=t,e(t)),t);return r}let c=new Map;function d(...e){let t={...i},r=!1;for(let n of e){if("instant"===n){r=!0;continue}"object"==typeof n&&(r=!1,t.damping=n.damping??t.damping,t.stiffness=n.stiffness??t.stiffness,t.mass=n.mass??t.mass)}let n=JSON.stringify(t);return c.has(n)||c.set(n,Object.freeze(t)),r?"instant":c.get(n)}let f=(0,o.createContext)(null),p="undefined"!=typeof window?o.useLayoutEffect:o.useEffect;function m({instance:e,children:t,resize:r,initial:i,mass:a,damping:l,stiffness:s,targetScrollTop:c,contextRef:d,...m}){let g=(0,o.useRef)(null),h=u({mass:a,damping:l,stiffness:s,resize:r,initial:i,targetScrollTop:o.useCallback((e,t)=>{let r=M?.targetScrollTop??c;return r?.(e,t)??e},[c])}),{scrollRef:v,contentRef:y,scrollToBottom:D,stopScroll:b,isAtBottom:x,escapedFromLock:T,state:w}=e??h,M=(0,o.useMemo)(()=>({scrollToBottom:D,stopScroll:b,scrollRef:v,isAtBottom:x,escapedFromLock:T,contentRef:y,state:w,get targetScrollTop(){return g.current},set targetScrollTop(targetScrollTop){g.current=targetScrollTop}}),[D,x,y,v,b,T,w]);return(0,o.useImperativeHandle)(d,()=>M,[M]),p(()=>{v.current&&"visible"===getComputedStyle(v.current).overflow&&(v.current.style.overflow="auto")},[]),(0,n.jsx)(f.Provider,{value:M,children:(0,n.jsx)("div",{...m,children:"function"==typeof t?t(M):t})})}(m||(m={})).Content=function({children:e,...t}){let r=function(){let e=(0,o.useContext)(f);if(!e)throw Error("use-stick-to-bottom component context must be used within a StickToBottom component");return e}();return(0,n.jsx)("div",{ref:r.scrollRef,style:{height:"100%",width:"100%"},children:(0,n.jsx)("div",{...t,ref:r.contentRef,children:"function"==typeof e?e(r):e})})}}}]);
|
|
2
|
+
//# sourceMappingURL=552-39155a93c527ec6d.js.map
|