orcheo-studio 0.24.5 → 0.24.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bumpversion.cfg +1 -1
- package/dist/assets/{arc-C-7b0zH4.js → arc-CJePtrV4.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-Ciy8lV6J.js → architectureDiagram-VXUJARFQ-BavAz0jp.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-dC88adQ_.js → blockDiagram-VD42YOAC-Bx1XAydH.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-BiHVvXEu.js → c4Diagram-YG6GDRKO-B2LhByin.js} +1 -1
- package/dist/assets/channel-BuDj-lWJ.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-C6V7Huup.js → chunk-4BX2VUAB-UqiH5dLp.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-DRmZnlbz.js → chunk-55IACEB6-ChxTr_6v.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-DwV5xRJr.js → chunk-B4BG7PRW-2ETw-eA1.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-BHsUZ0IJ.js → chunk-DI55MBZ5-BdxVSKej.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-6Q-Lz0AM.js → chunk-FMBD7UC4-BJF2M5iQ.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-BFy_ml8O.js → chunk-QN33PNHL-DI9t3nKL.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-C1fN91FN.js → chunk-QZHKN3VN-DsbUIBgB.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-FLRSQ_Fi.js → chunk-TZMSLE5B-DzMhWfBV.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-Bc5AzWzU.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-Bc5AzWzU.js +1 -0
- package/dist/assets/clone-CtxIENQC.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BSWP1X1D.js → cose-bilkent-S5V4N54A-BcKKbLWz.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-CYoZFlcz.js → dagre-6UL2VRFP-CERJ9KSL.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-B8RGX0YL.js → diagram-PSM6KHXK-DGl--Cyq.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-ChWXJ8p_.js → diagram-QEK2KX5R-DbfdELCd.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-Dwic0Fjn.js → diagram-S2PKOQOG-CsR4YAm5.js} +1 -1
- package/dist/assets/{erDiagram-Q2GNP2WA-0NSDB0DX.js → erDiagram-Q2GNP2WA-BlOr_gpI.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-DEoGWs9L.js → flowDiagram-NV44I4VS-BAyDXjxF.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-DqzV4S6l.js → ganttDiagram-JELNMOA3-b2ntam6s.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-B-EIQM_H.js → gitGraphDiagram-V2S2FVAM-BvdeZrga.js} +1 -1
- package/dist/assets/{graph-Ha1DTJNG.js → graph-DMrtDwYQ.js} +1 -1
- package/dist/assets/{index-DTxvVcXp.js → index-CaWVBOSf.js} +204 -189
- package/dist/assets/index-CbLxL6va.css +1 -0
- package/dist/assets/{infoDiagram-HS3SLOUP-C4_vpEkn.js → infoDiagram-HS3SLOUP-CFO6LsEb.js} +1 -1
- package/dist/assets/{isUndefined-DkuoqItu.js → isUndefined-DE2VOYrW.js} +1 -1
- package/dist/assets/{journeyDiagram-XKPGCS4Q-BxY4e6OZ.js → journeyDiagram-XKPGCS4Q-Svi8cltR.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-BTX3_Q7O.js → kanban-definition-3W4ZIXB7-C7uds03_.js} +1 -1
- package/dist/assets/{layout-Dt1W0fl0.js → layout-D5N_DnHw.js} +1 -1
- package/dist/assets/{linear-CjywSMUX.js → linear-h9-K1RBq.js} +1 -1
- package/dist/assets/{min-Dblq6bty.js → min-CjtZYucR.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-C5P7bAFm.js → mindmap-definition-VGOIOE7T-Bw80_6TW.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-BSMylwok.js → pieDiagram-ADFJNKIX-DGukFJSP.js} +1 -1
- package/dist/assets/{quadrantDiagram-AYHSOK5B-C74B7bqa.js → quadrantDiagram-AYHSOK5B-CU7GPi0P.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-CvPzL8Le.js → requirementDiagram-UZGBJVZJ-D_aCZrji.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-BFHm6g6t.js → sankeyDiagram-TZEHDZUN-Wgtprjih.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-e74mJ0xk.js → sequenceDiagram-WL72ISMW-BCOCCVxS.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-VLQxNVA7.js → stateDiagram-FKZM4ZOC-DHVe22f9.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-Bq9eQr8D.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-oveNP_QD.js → timeline-definition-IT6M3QCI-Cm4CAEQk.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-Cowimd29.js → treemap-GDKQZRPO-DvLhDp9r.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-CP9Fm_aO.js → xychartDiagram-PRI3JC2R-BtcJYIPe.js} +1 -1
- package/dist/index.html +8 -2
- package/index.html +6 -0
- package/package.json +1 -1
- package/src/design-system/ui/button.tsx +1 -1
- package/src/features/account/components/settings/appearance-settings-tab.tsx +1 -1
- package/src/features/account/pages/profile/components/profile-general-tab.tsx +1 -1
- package/src/features/auth/pages/login.tsx +1 -1
- package/src/features/auth/pages/verify.tsx +1 -1
- package/src/features/chatkit/components/public-chat-error-boundary.tsx +1 -1
- package/src/features/chatkit/components/public-chat-widget.tsx +2 -3
- package/src/features/chatkit/lib/chatkit-theme.ts +3 -2
- package/src/features/chatkit/pages/public-chat.tsx +17 -15
- package/src/features/shared/components/top-navigation/studio-brand.tsx +1 -1
- package/src/features/shared/components/workspace-bootstrap-gate.tsx +4 -4
- package/src/features/workflow/components/dialogs/credential-access-badge.tsx +2 -2
- package/src/features/workflow/components/dialogs/credential-status-badge.tsx +2 -2
- package/src/features/workflow/components/dialogs/credentials-table.tsx +1 -1
- package/src/features/workflow/components/dialogs/update-workflow-dialog.tsx +34 -78
- package/src/features/workflow/components/dialogs/upload-workflow-dialog.tsx +40 -136
- package/src/features/workflow/components/dialogs/workflow-folder-picker.tsx +178 -0
- package/src/features/workflow/components/panels/workflow-diff-dialog.tsx +5 -5
- package/src/features/workflow/components/panels/workflow-history-table.tsx +3 -4
- package/src/features/workflow/components/trace/agent-prism/theme/theme.css +74 -74
- package/src/features/workflow/lib/workflow-folder-selection.ts +239 -0
- package/src/features/workflow/pages/workflow/components/settings-tab-content.tsx +24 -9
- package/src/features/workflow/pages/workflow/components/workflow-tab-content.tsx +3 -3
- package/src/features/workflow/pages/workflow-gallery/workflow-card.tsx +16 -16
- package/src/index.css +101 -59
- package/tailwind.config.js +47 -2
- package/dist/assets/channel-pJdT5i-M.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-CNT-EGNU.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-CNT-EGNU.js +0 -1
- package/dist/assets/clone-BCi0j082.js +0 -1
- package/dist/assets/index-Df4jFRhd.css +0 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-Bbpq2t6B.js +0 -1
package/dist/assets/{xychartDiagram-PRI3JC2R-CP9Fm_aO.js → xychartDiagram-PRI3JC2R-BtcJYIPe.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Nt,H as mi,e as yi,y as bi,F as St,i as Ai,D as Yt,E as wi,K as Ci,aI as Si,R as Wt}from"./index-
|
|
1
|
+
import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Nt,H as mi,e as yi,y as bi,F as St,i as Ai,D as Yt,E as wi,K as Ci,aI as Si,R as Wt}from"./index-CaWVBOSf.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-h9-K1RBq.js";import"./defaultLocale-C4B-KCzX.js";function Ri(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function yt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,g,m=!1,p=0,k=0,v=.5;delete e.unknown;function C(){var b=t().length,E=n<s,D=E?n:s,P=E?s:n;o=(P-D)/Math.max(1,b-p+k*2),m&&(o=Math.floor(o)),D+=(P-D-o*(b-p))*v,g=o*(1-p),m&&(D=Math.round(D),g=Math.round(g));var I=Ri(b).map(function(y){return D+o*y});return i(E?I.reverse():I)}return e.domain=function(b){return arguments.length?(t(b),C()):t()},e.range=function(b){return arguments.length?([s,n]=b,s=+s,n=+n,C()):[s,n]},e.rangeRound=function(b){return[s,n]=b,s=+s,n=+n,m=!0,C()},e.bandwidth=function(){return g},e.step=function(){return o},e.round=function(b){return arguments.length?(m=!!b,C()):m},e.padding=function(b){return arguments.length?(p=Math.min(1,k=+b),C()):p},e.paddingInner=function(b){return arguments.length?(p=Math.min(1,b),C()):p},e.paddingOuter=function(b){return arguments.length?(k=+b,C()):k},e.align=function(b){return arguments.length?(v=Math.max(0,Math.min(1,b)),C()):v},e.copy=function(){return yt(t(),[s,n]).round(m).paddingInner(p).paddingOuter(k).align(v)},_i.apply(C(),arguments)}var bt=(function(){var e=a(function(F,h,u,x){for(u=u||{},x=F.length;x--;u[F[x]]=h);return u},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],g=[1,7],m=[1,5,10,12,14,16,18,19,21,23,34,35,36],p=[1,25],k=[1,26],v=[1,28],C=[1,29],b=[1,30],E=[1,31],D=[1,32],P=[1,33],I=[1,34],y=[1,35],_=[1,36],c=[1,37],W=[1,43],z=[1,42],U=[1,47],X=[1,50],l=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],S=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],$={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(h,u,x,d,w,r,at){var f=r.length-1;switch(w){case 5:d.setOrientation(r[f]);break;case 9:d.setDiagramTitle(r[f].text.trim());break;case 12:d.setLineData({text:"",type:"text"},r[f]);break;case 13:d.setLineData(r[f-1],r[f]);break;case 14:d.setBarData({text:"",type:"text"},r[f]);break;case 15:d.setBarData(r[f-1],r[f]);break;case 16:this.$=r[f].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=r[f].trim(),d.setAccDescription(this.$);break;case 19:this.$=r[f-1];break;case 20:this.$=[Number(r[f-2]),...r[f]];break;case 21:this.$=[Number(r[f])];break;case 22:d.setXAxisTitle(r[f]);break;case 23:d.setXAxisTitle(r[f-1]);break;case 24:d.setXAxisTitle({type:"text",text:""});break;case 25:d.setXAxisBand(r[f]);break;case 26:d.setXAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 27:this.$=r[f-1];break;case 28:this.$=[r[f-2],...r[f]];break;case 29:this.$=[r[f]];break;case 30:d.setYAxisTitle(r[f]);break;case 31:d.setYAxisTitle(r[f-1]);break;case 32:d.setYAxisTitle({type:"text",text:""});break;case 33:d.setYAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 37:this.$={text:r[f],type:"text"};break;case 38:this.$={text:r[f],type:"text"};break;case 39:this.$={text:r[f],type:"markdown"};break;case 40:this.$=r[f];break;case 41:this.$=r[f-1]+""+r[f];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:g}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:g}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:g}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(m,[2,34]),e(m,[2,35]),e(m,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:g}),{1:[2,3]},e(m,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:g}),{11:23,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:39,13:38,24:W,27:z,29:40,30:41,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:45,15:44,27:U,33:46,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:49,17:48,24:X,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:52,17:51,24:X,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{20:[1,53]},{22:[1,54]},e(l,[2,18]),{1:[2,2]},e(l,[2,8]),e(l,[2,9]),e(L,[2,37],{40:55,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c}),e(L,[2,38]),e(L,[2,39]),e(S,[2,40]),e(S,[2,42]),e(S,[2,43]),e(S,[2,44]),e(S,[2,45]),e(S,[2,46]),e(S,[2,47]),e(S,[2,48]),e(S,[2,49]),e(S,[2,50]),e(S,[2,51]),e(l,[2,10]),e(l,[2,22],{30:41,29:56,24:W,27:z}),e(l,[2,24]),e(l,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},e(l,[2,11]),e(l,[2,30],{33:60,27:U}),e(l,[2,32]),{31:[1,61]},e(l,[2,12]),{17:62,24:X},{25:63,27:R},e(l,[2,14]),{17:65,24:X},e(l,[2,16]),e(l,[2,17]),e(S,[2,41]),e(l,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(l,[2,31]),{27:[1,69]},e(l,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(l,[2,15]),e(l,[2,26]),e(l,[2,27]),{11:59,32:72,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},e(l,[2,33]),e(l,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(h,u){if(u.recoverable)this.trace(h);else{var x=new Error(h);throw x.hash=u,x}},"parseError"),parse:a(function(h){var u=this,x=[0],d=[],w=[null],r=[],at=this.table,f="",lt=0,It=0,hi=2,Mt=1,li=r.slice.call(arguments,1),T=Object.create(this.lexer),Y={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(Y.yy[dt]=this.yy[dt]);T.setInput(h,Y.yy),Y.yy.lexer=T,Y.yy.parser=this,typeof T.yylloc>"u"&&(T.yylloc={});var ft=T.yylloc;r.push(ft);var ci=T.options&&T.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ui(V){x.length=x.length-2*V,w.length=w.length-V,r.length=r.length-V}a(ui,"popStack");function Vt(){var V;return V=d.pop()||T.lex()||Mt,typeof V!="number"&&(V instanceof Array&&(d=V,V=d.pop()),V=u.symbols_[V]||V),V}a(Vt,"lex");for(var M,H,B,pt,q={},ct,O,Bt,ut;;){if(H=x[x.length-1],this.defaultActions[H]?B=this.defaultActions[H]:((M===null||typeof M>"u")&&(M=Vt()),B=at[H]&&at[H][M]),typeof B>"u"||!B.length||!B[0]){var mt="";ut=[];for(ct in at[H])this.terminals_[ct]&&ct>hi&&ut.push("'"+this.terminals_[ct]+"'");T.showPosition?mt="Parse error on line "+(lt+1)+`:
|
|
2
2
|
`+T.showPosition()+`
|
|
3
3
|
Expecting `+ut.join(", ")+", got '"+(this.terminals_[M]||M)+"'":mt="Parse error on line "+(lt+1)+": Unexpected "+(M==Mt?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(mt,{text:T.match,token:this.terminals_[M]||M,line:T.yylineno,loc:ft,expected:ut})}if(B[0]instanceof Array&&B.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+M);switch(B[0]){case 1:x.push(M),w.push(T.yytext),r.push(T.yylloc),x.push(B[1]),M=null,It=T.yyleng,f=T.yytext,lt=T.yylineno,ft=T.yylloc;break;case 2:if(O=this.productions_[B[1]][1],q.$=w[w.length-O],q._$={first_line:r[r.length-(O||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(O||1)].first_column,last_column:r[r.length-1].last_column},ci&&(q._$.range=[r[r.length-(O||1)].range[0],r[r.length-1].range[1]]),pt=this.performAction.apply(q,[f,It,lt,Y.yy,B[1],w,r].concat(li)),typeof pt<"u")return pt;O&&(x=x.slice(0,-1*O*2),w=w.slice(0,-1*O),r=r.slice(0,-1*O)),x.push(this.productions_[B[1]][0]),w.push(q.$),r.push(q._$),Bt=at[x[x.length-2]][x[x.length-1]],x.push(Bt);break;case 3:return!0}}return!0},"parse")},Et=(function(){var F={EOF:1,parseError:a(function(u,x){if(this.yy.parser)this.yy.parser.parseError(u,x);else throw new Error(u)},"parseError"),setInput:a(function(h,u){return this.yy=u||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var u=h.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:a(function(h){var u=h.length,x=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),x.length-1&&(this.yylineno-=x.length-1);var w=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:x?(x.length===d.length?this.yylloc.first_column:0)+d[d.length-x.length].length-x[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[w[0],w[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(h){this.unput(this.match.slice(h))},"less"),pastInput:a(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var h=this.pastInput(),u=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
|
package/dist/index.html
CHANGED
|
@@ -4,9 +4,15 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link
|
|
10
|
+
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap"
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
/>
|
|
7
13
|
<title>Orcheo</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-CaWVBOSf.js"></script>
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CbLxL6va.css">
|
|
10
16
|
</head>
|
|
11
17
|
<body>
|
|
12
18
|
<div id="root"></div>
|
package/index.html
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link
|
|
10
|
+
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap"
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
/>
|
|
7
13
|
<title>Orcheo</title>
|
|
8
14
|
</head>
|
|
9
15
|
<body>
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ const buttonVariants = cva(
|
|
|
10
10
|
variants: {
|
|
11
11
|
variant: {
|
|
12
12
|
default:
|
|
13
|
-
"bg-primary text-primary-foreground shadow hover:bg-primary
|
|
13
|
+
"bg-primary text-primary-foreground shadow hover:bg-primary-hover active:bg-primary-active",
|
|
14
14
|
destructive:
|
|
15
15
|
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
16
16
|
outline:
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import ThemeSettings from "@features/account/components/theme-settings";
|
|
9
9
|
|
|
10
10
|
const AppearanceSettingsTab = () => (
|
|
11
|
-
<Card>
|
|
11
|
+
<Card className="border-border/70 bg-muted/40 shadow-none">
|
|
12
12
|
<CardHeader>
|
|
13
13
|
<CardTitle>Theme</CardTitle>
|
|
14
14
|
<CardDescription>
|
|
@@ -21,7 +21,7 @@ interface ProfileGeneralTabProps {
|
|
|
21
21
|
export function ProfileGeneralTab({ user }: ProfileGeneralTabProps) {
|
|
22
22
|
return (
|
|
23
23
|
<div className="space-y-4">
|
|
24
|
-
<Card>
|
|
24
|
+
<Card className="border-border/70 bg-muted/40 shadow-none">
|
|
25
25
|
<CardHeader>
|
|
26
26
|
<CardTitle>Profile Information</CardTitle>
|
|
27
27
|
<CardDescription>
|
|
@@ -105,7 +105,7 @@ export default function Login() {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
return (
|
|
108
|
-
<div className="flex min-h-screen items-center justify-center bg-
|
|
108
|
+
<div className="flex min-h-screen items-center justify-center bg-cream dark:bg-background p-6 text-foreground">
|
|
109
109
|
<Card className="w-full max-w-md border-border bg-card text-card-foreground shadow-xl">
|
|
110
110
|
<CardHeader className="text-center">
|
|
111
111
|
<CardTitle className="text-xl">Sign in to Orcheo</CardTitle>
|
|
@@ -63,7 +63,7 @@ export default function AuthVerify() {
|
|
|
63
63
|
}, [token, redirectTo, navigate]);
|
|
64
64
|
|
|
65
65
|
return (
|
|
66
|
-
<div className="flex min-h-screen items-center justify-center bg-
|
|
66
|
+
<div className="flex min-h-screen items-center justify-center bg-cream dark:bg-background p-6 text-foreground">
|
|
67
67
|
<Card className="w-full max-w-md border-border bg-card text-card-foreground shadow-xl">
|
|
68
68
|
<CardHeader>
|
|
69
69
|
<CardTitle>Signing in</CardTitle>
|
|
@@ -42,7 +42,7 @@ export class PublicChatErrorBoundary extends Component<
|
|
|
42
42
|
public override render(): ReactNode {
|
|
43
43
|
if (this.state.hasError) {
|
|
44
44
|
return (
|
|
45
|
-
<Alert className="rounded-3xl border-
|
|
45
|
+
<Alert className="rounded-3xl border-destructive/40 bg-destructive-muted p-6 text-destructive-muted-foreground">
|
|
46
46
|
<AlertTitle>Something went wrong</AlertTitle>
|
|
47
47
|
<AlertDescription>
|
|
48
48
|
{this.state.errorMessage ||
|
|
@@ -220,9 +220,8 @@ export function PublicChatWidget({
|
|
|
220
220
|
<div
|
|
221
221
|
className={cn(
|
|
222
222
|
"relative h-full w-full overflow-hidden rounded-3xl",
|
|
223
|
-
"border border-
|
|
224
|
-
"shadow-[0_25px_80px_rgba(
|
|
225
|
-
"dark:border-slate-800/70 dark:bg-slate-900",
|
|
223
|
+
"border border-border/70 bg-card",
|
|
224
|
+
"shadow-[0_25px_80px_rgba(40,30,16,0.12)]",
|
|
226
225
|
)}
|
|
227
226
|
>
|
|
228
227
|
<ChatKitSurface options={options} />
|
|
@@ -6,13 +6,14 @@ export const buildChatTheme = (
|
|
|
6
6
|
): NonNullable<UseChatKitOptions["theme"]> => ({
|
|
7
7
|
colorScheme: scheme,
|
|
8
8
|
color: {
|
|
9
|
+
// Warm ink grayscale + Orcheo orange accent (orcheo-design-system tokens).
|
|
9
10
|
grayscale: {
|
|
10
|
-
hue:
|
|
11
|
+
hue: 42,
|
|
11
12
|
tint: 6,
|
|
12
13
|
shade: scheme === "dark" ? -1 : -4,
|
|
13
14
|
},
|
|
14
15
|
accent: {
|
|
15
|
-
primary:
|
|
16
|
+
primary: "#f87825",
|
|
16
17
|
level: 1,
|
|
17
18
|
},
|
|
18
19
|
},
|
|
@@ -225,9 +225,9 @@ export default function PublicChatPage() {
|
|
|
225
225
|
|
|
226
226
|
if (workflowState.status === "error") {
|
|
227
227
|
return (
|
|
228
|
-
<div className="rounded-3xl border border-
|
|
228
|
+
<div className="rounded-3xl border border-border/80 bg-card/70 p-6 text-foreground shadow-sm">
|
|
229
229
|
<p className="text-lg font-semibold">Chat unavailable</p>
|
|
230
|
-
<p className="mt-2 text-sm text-
|
|
230
|
+
<p className="mt-2 text-sm text-muted-foreground">
|
|
231
231
|
We cannot open a ChatKit session until the workflow loads.
|
|
232
232
|
</p>
|
|
233
233
|
<Button asChild variant="secondary" className="mt-4">
|
|
@@ -240,7 +240,7 @@ export default function PublicChatPage() {
|
|
|
240
240
|
return (
|
|
241
241
|
<div className="space-y-4">
|
|
242
242
|
{rateLimitError && (
|
|
243
|
-
<Alert className="border-
|
|
243
|
+
<Alert className="border-warning/50 bg-warning-muted text-warning-muted-foreground">
|
|
244
244
|
<AlertTitle>Slow down for a moment</AlertTitle>
|
|
245
245
|
<AlertDescription>
|
|
246
246
|
{rateLimitError.message ||
|
|
@@ -250,7 +250,7 @@ export default function PublicChatPage() {
|
|
|
250
250
|
<Button
|
|
251
251
|
size="sm"
|
|
252
252
|
variant="outline"
|
|
253
|
-
className="border-
|
|
253
|
+
className="border-warning/60 text-warning-muted-foreground"
|
|
254
254
|
onClick={() => setRateLimitError(null)}
|
|
255
255
|
>
|
|
256
256
|
Dismiss
|
|
@@ -260,8 +260,10 @@ export default function PublicChatPage() {
|
|
|
260
260
|
)}
|
|
261
261
|
|
|
262
262
|
{chatError ? (
|
|
263
|
-
<div className="space-y-4 rounded-3xl border border-
|
|
264
|
-
<p className="font-medium text-
|
|
263
|
+
<div className="space-y-4 rounded-3xl border border-destructive/40 bg-destructive-muted p-6 text-center">
|
|
264
|
+
<p className="font-medium text-destructive-muted-foreground">
|
|
265
|
+
{chatError.message}
|
|
266
|
+
</p>
|
|
265
267
|
<div className="flex flex-wrap justify-center gap-3">
|
|
266
268
|
<Button asChild variant="outline">
|
|
267
269
|
<a href={contactHref}>Contact owner</a>
|
|
@@ -271,7 +273,7 @@ export default function PublicChatPage() {
|
|
|
271
273
|
) : (
|
|
272
274
|
<div className="relative min-h-[520px]">
|
|
273
275
|
{!isChatReady && (
|
|
274
|
-
<div className="absolute inset-0 flex flex-col gap-4 rounded-3xl bg-
|
|
276
|
+
<div className="absolute inset-0 flex flex-col gap-4 rounded-3xl bg-background/90 p-6 shadow-sm">
|
|
275
277
|
<Skeleton className="h-10 w-1/2 self-center" />
|
|
276
278
|
<Skeleton className="h-full w-full" />
|
|
277
279
|
</div>
|
|
@@ -313,21 +315,21 @@ export default function PublicChatPage() {
|
|
|
313
315
|
<div className="space-y-6">
|
|
314
316
|
<div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
|
315
317
|
<div className="space-y-2">
|
|
316
|
-
<p className="text-3xl font-semibold text-
|
|
318
|
+
<p className="text-3xl font-semibold text-foreground">
|
|
317
319
|
Chat with “{currentWorkflowName}”
|
|
318
320
|
</p>
|
|
319
|
-
<p className="text-base text-
|
|
321
|
+
<p className="text-base text-muted-foreground">
|
|
320
322
|
Chat sessions open automatically for published workflows unless
|
|
321
323
|
the owner requires OAuth login.
|
|
322
324
|
</p>
|
|
323
325
|
{workflowState.status === "ready" && (
|
|
324
|
-
<div className="flex flex-wrap gap-2 text-xs text-
|
|
326
|
+
<div className="flex flex-wrap gap-2 text-xs text-muted-foreground">
|
|
325
327
|
{workflowState.workflow.handle && (
|
|
326
|
-
<code className="rounded bg-
|
|
328
|
+
<code className="rounded bg-muted px-2 py-1">
|
|
327
329
|
handle: {workflowState.workflow.handle}
|
|
328
330
|
</code>
|
|
329
331
|
)}
|
|
330
|
-
<code className="rounded bg-
|
|
332
|
+
<code className="rounded bg-muted px-2 py-1">
|
|
331
333
|
id: {workflowState.workflow.id}
|
|
332
334
|
</code>
|
|
333
335
|
</div>
|
|
@@ -342,7 +344,7 @@ export default function PublicChatPage() {
|
|
|
342
344
|
|
|
343
345
|
return (
|
|
344
346
|
<PublicChatErrorBoundary onReset={handleErrorBoundaryReset}>
|
|
345
|
-
<div className="h-screen overflow-hidden bg-
|
|
347
|
+
<div className="h-screen overflow-hidden bg-background text-foreground">
|
|
346
348
|
<div className="mx-auto flex h-full max-w-6xl flex-col px-4 py-6 lg:py-8">
|
|
347
349
|
<div className="flex flex-1 items-center justify-center">
|
|
348
350
|
<div className="w-full max-w-3xl">{renderChatColumn()}</div>
|
|
@@ -403,7 +405,7 @@ function ThemeToggleButtonGroup({
|
|
|
403
405
|
onValueChange={handleThemeChange}
|
|
404
406
|
aria-label="Select display theme"
|
|
405
407
|
className={cn(
|
|
406
|
-
"rounded-full border border-
|
|
408
|
+
"rounded-full border border-border bg-card/90 px-1 py-1 shadow-[inset_0_-1px_4px_rgba(40,30,16,0.12)] backdrop-blur-sm dark:bg-background/70",
|
|
407
409
|
className,
|
|
408
410
|
)}
|
|
409
411
|
variant="default"
|
|
@@ -414,7 +416,7 @@ function ThemeToggleButtonGroup({
|
|
|
414
416
|
key={option.value}
|
|
415
417
|
value={option.value}
|
|
416
418
|
aria-label={`Use ${option.label.toLowerCase()} theme`}
|
|
417
|
-
className="h-9 w-9 rounded-full border border-transparent p-0 text-
|
|
419
|
+
className="h-9 w-9 rounded-full border border-transparent p-0 text-muted-foreground transition-all hover:bg-transparent hover:text-foreground data-[state=on]:border-primary/20 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground data-[state=on]:shadow-[0_4px_12px_rgba(248,120,37,0.3)]"
|
|
418
420
|
>
|
|
419
421
|
{option.icon}
|
|
420
422
|
<span className="sr-only">{option.label}</span>
|
|
@@ -42,7 +42,7 @@ export default function StudioBrand() {
|
|
|
42
42
|
>
|
|
43
43
|
<Badge
|
|
44
44
|
variant="outline"
|
|
45
|
-
className="border-
|
|
45
|
+
className="border-warning/40 bg-warning/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.2em] text-warning-muted-foreground shadow-none"
|
|
46
46
|
>
|
|
47
47
|
Beta
|
|
48
48
|
</Badge>
|
|
@@ -155,7 +155,7 @@ export function WorkspaceBootstrapGate({
|
|
|
155
155
|
|
|
156
156
|
if (isLoading) {
|
|
157
157
|
return (
|
|
158
|
-
<div className="flex min-h-screen items-center justify-center bg-
|
|
158
|
+
<div className="flex min-h-screen items-center justify-center bg-background text-foreground">
|
|
159
159
|
<Card className="w-full max-w-md border-border bg-card/80 backdrop-blur-xl dark:border-primary/25 dark:bg-primary/5">
|
|
160
160
|
<CardContent className="flex items-center gap-3 p-6 text-sm text-muted-foreground">
|
|
161
161
|
<Loader2 className="h-4 w-4 animate-spin" />
|
|
@@ -171,16 +171,16 @@ export function WorkspaceBootstrapGate({
|
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
return (
|
|
174
|
-
<div className="relative flex min-h-screen items-center justify-center overflow-hidden bg-
|
|
174
|
+
<div className="relative flex min-h-screen items-center justify-center overflow-hidden bg-background text-foreground">
|
|
175
175
|
<div
|
|
176
|
-
className="absolute inset-0 bg-gradient-to-br from-
|
|
176
|
+
className="absolute inset-0 bg-gradient-to-br from-background via-secondary to-background dark:via-card/80"
|
|
177
177
|
aria-hidden="true"
|
|
178
178
|
/>
|
|
179
179
|
<div
|
|
180
180
|
className="absolute inset-0 opacity-40 mix-blend-soft-light dark:opacity-60"
|
|
181
181
|
style={{
|
|
182
182
|
backgroundImage:
|
|
183
|
-
"radial-gradient(circle at 20% 20%, rgba(
|
|
183
|
+
"radial-gradient(circle at 20% 20%, rgba(224, 192, 144, 0.25), transparent 45%), radial-gradient(circle at 80% 30%, rgba(248, 120, 37, 0.2), transparent 50%), radial-gradient(circle at 50% 80%, rgba(246, 245, 212, 0.35), transparent 55%)",
|
|
184
184
|
}}
|
|
185
185
|
aria-hidden="true"
|
|
186
186
|
/>
|
|
@@ -12,7 +12,7 @@ export function CredentialAccessBadge({ access }: CredentialAccessBadgeProps) {
|
|
|
12
12
|
return (
|
|
13
13
|
<Badge
|
|
14
14
|
variant="outline"
|
|
15
|
-
className="
|
|
15
|
+
className="border-info/30 bg-info-muted text-info-muted-foreground"
|
|
16
16
|
>
|
|
17
17
|
<Lock className="h-3 w-3 mr-1" />
|
|
18
18
|
Scoped
|
|
@@ -22,7 +22,7 @@ export function CredentialAccessBadge({ access }: CredentialAccessBadgeProps) {
|
|
|
22
22
|
return (
|
|
23
23
|
<Badge
|
|
24
24
|
variant="outline"
|
|
25
|
-
className="
|
|
25
|
+
className="border-primary/30 bg-primary/10 text-primary-active"
|
|
26
26
|
>
|
|
27
27
|
<Users className="h-3 w-3 mr-1" />
|
|
28
28
|
Shared
|
|
@@ -15,7 +15,7 @@ export function CredentialStatusBadge({ status }: CredentialStatusBadgeProps) {
|
|
|
15
15
|
return (
|
|
16
16
|
<Badge
|
|
17
17
|
variant="outline"
|
|
18
|
-
className="flex items-center gap-1
|
|
18
|
+
className="flex items-center gap-1 border-success/30 bg-success-muted text-success-muted-foreground"
|
|
19
19
|
>
|
|
20
20
|
<CheckCircle2 className="h-3 w-3" />
|
|
21
21
|
Healthy
|
|
@@ -25,7 +25,7 @@ export function CredentialStatusBadge({ status }: CredentialStatusBadgeProps) {
|
|
|
25
25
|
return (
|
|
26
26
|
<Badge
|
|
27
27
|
variant="outline"
|
|
28
|
-
className="flex items-center gap-1
|
|
28
|
+
className="flex items-center gap-1 border-destructive/30 bg-destructive-muted text-destructive-muted-foreground"
|
|
29
29
|
>
|
|
30
30
|
<AlertTriangle className="h-3 w-3" />
|
|
31
31
|
Unhealthy
|
|
@@ -353,7 +353,7 @@ export function CredentialsTable({
|
|
|
353
353
|
className={cn(
|
|
354
354
|
"h-6 w-6 transition-colors",
|
|
355
355
|
currentCopyState === "success" &&
|
|
356
|
-
"text-
|
|
356
|
+
"text-success hover:text-success/80",
|
|
357
357
|
currentCopyState === "error" &&
|
|
358
358
|
"text-destructive hover:text-destructive",
|
|
359
359
|
)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback,
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
2
|
import { Loader2, RefreshCw } from "lucide-react";
|
|
3
3
|
import { Button } from "@/design-system/ui/button";
|
|
4
4
|
import {
|
|
@@ -9,10 +9,11 @@ import {
|
|
|
9
9
|
DialogHeader,
|
|
10
10
|
DialogTitle,
|
|
11
11
|
} from "@/design-system/ui/dialog";
|
|
12
|
-
import { Input } from "@/design-system/ui/input";
|
|
13
12
|
import { Label } from "@/design-system/ui/label";
|
|
14
13
|
import { toast } from "@/hooks/use-toast";
|
|
15
14
|
import { updateWorkflowFromFiles } from "@features/workflow/lib/workflow-storage";
|
|
15
|
+
import { WorkflowFolderPicker } from "./workflow-folder-picker";
|
|
16
|
+
import type { WorkflowFolderSelection } from "@features/workflow/lib/workflow-folder-selection";
|
|
16
17
|
|
|
17
18
|
interface UpdateWorkflowDialogProps {
|
|
18
19
|
open: boolean;
|
|
@@ -27,11 +28,9 @@ export function UpdateWorkflowDialog({
|
|
|
27
28
|
workflowId,
|
|
28
29
|
workflowName,
|
|
29
30
|
}: UpdateWorkflowDialogProps) {
|
|
30
|
-
const scriptInputRef = useRef<HTMLInputElement>(null);
|
|
31
|
-
const configInputRef = useRef<HTMLInputElement>(null);
|
|
32
|
-
|
|
33
31
|
const [scriptContent, setScriptContent] = useState<string | null>(null);
|
|
34
32
|
const [scriptFileName, setScriptFileName] = useState("");
|
|
33
|
+
const [configFileName, setConfigFileName] = useState<string | null>(null);
|
|
35
34
|
const [configContent, setConfigContent] = useState<Record<
|
|
36
35
|
string,
|
|
37
36
|
unknown
|
|
@@ -42,15 +41,10 @@ export function UpdateWorkflowDialog({
|
|
|
42
41
|
const reset = useCallback(() => {
|
|
43
42
|
setScriptContent(null);
|
|
44
43
|
setScriptFileName("");
|
|
44
|
+
setConfigFileName(null);
|
|
45
45
|
setConfigContent(null);
|
|
46
46
|
setIsUpdating(false);
|
|
47
47
|
setError(null);
|
|
48
|
-
if (scriptInputRef.current) {
|
|
49
|
-
scriptInputRef.current.value = "";
|
|
50
|
-
}
|
|
51
|
-
if (configInputRef.current) {
|
|
52
|
-
configInputRef.current.value = "";
|
|
53
|
-
}
|
|
54
48
|
}, []);
|
|
55
49
|
|
|
56
50
|
const handleOpenChange = useCallback(
|
|
@@ -63,50 +57,26 @@ export function UpdateWorkflowDialog({
|
|
|
63
57
|
[onOpenChange, reset],
|
|
64
58
|
);
|
|
65
59
|
|
|
66
|
-
const
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const reader = new FileReader();
|
|
74
|
-
reader.onload = (e) => {
|
|
75
|
-
const text = e.target?.result;
|
|
76
|
-
if (typeof text === "string") {
|
|
77
|
-
setScriptContent(text);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
reader.readAsText(file);
|
|
81
|
-
},
|
|
82
|
-
[],
|
|
83
|
-
);
|
|
60
|
+
const handleSelect = useCallback((selection: WorkflowFolderSelection) => {
|
|
61
|
+
setError(null);
|
|
62
|
+
setScriptContent(selection.scriptContent);
|
|
63
|
+
setScriptFileName(selection.scriptName);
|
|
64
|
+
setConfigFileName(selection.configName);
|
|
65
|
+
setConfigContent(selection.configContent);
|
|
66
|
+
}, []);
|
|
84
67
|
|
|
85
|
-
const
|
|
86
|
-
(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
const parsed = JSON.parse(text) as Record<string, unknown>;
|
|
99
|
-
setConfigContent(parsed);
|
|
100
|
-
setError(null);
|
|
101
|
-
} catch {
|
|
102
|
-
setError("config.json is not valid JSON.");
|
|
103
|
-
setConfigContent(null);
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
reader.readAsText(file);
|
|
107
|
-
},
|
|
108
|
-
[],
|
|
109
|
-
);
|
|
68
|
+
const handleSelectionError = useCallback((message: string) => {
|
|
69
|
+
setScriptContent(null);
|
|
70
|
+
setScriptFileName("");
|
|
71
|
+
setConfigFileName(null);
|
|
72
|
+
setConfigContent(null);
|
|
73
|
+
setError(message);
|
|
74
|
+
toast({
|
|
75
|
+
title: "Couldn't use that folder",
|
|
76
|
+
description: message,
|
|
77
|
+
variant: "destructive",
|
|
78
|
+
});
|
|
79
|
+
}, []);
|
|
110
80
|
|
|
111
81
|
const handleUpdate = useCallback(async () => {
|
|
112
82
|
if (!scriptContent) {
|
|
@@ -149,35 +119,21 @@ export function UpdateWorkflowDialog({
|
|
|
149
119
|
<DialogHeader>
|
|
150
120
|
<DialogTitle>Update Workflow</DialogTitle>
|
|
151
121
|
<DialogDescription>
|
|
152
|
-
|
|
153
|
-
version of “{workflowName}”.
|
|
122
|
+
Select a folder with a new Python script and optional JSON config to
|
|
123
|
+
create a new version of “{workflowName}”.
|
|
154
124
|
</DialogDescription>
|
|
155
125
|
</DialogHeader>
|
|
156
126
|
<div className="grid gap-4 py-4">
|
|
157
127
|
<div className="space-y-1.5">
|
|
158
|
-
<Label htmlFor="update-
|
|
159
|
-
Workflow
|
|
128
|
+
<Label htmlFor="update-folder">
|
|
129
|
+
Workflow Folder <span className="text-destructive">*</span>
|
|
160
130
|
</Label>
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
disabled={isUpdating}
|
|
168
|
-
/>
|
|
169
|
-
{scriptFileName && (
|
|
170
|
-
<p className="text-xs text-muted-foreground">{scriptFileName}</p>
|
|
171
|
-
)}
|
|
172
|
-
</div>
|
|
173
|
-
<div className="space-y-1.5">
|
|
174
|
-
<Label htmlFor="update-config">Config (optional)</Label>
|
|
175
|
-
<Input
|
|
176
|
-
id="update-config"
|
|
177
|
-
ref={configInputRef}
|
|
178
|
-
type="file"
|
|
179
|
-
accept=".json"
|
|
180
|
-
onChange={handleConfigFileChange}
|
|
131
|
+
<WorkflowFolderPicker
|
|
132
|
+
idPrefix="update"
|
|
133
|
+
scriptName={scriptFileName}
|
|
134
|
+
configName={configFileName}
|
|
135
|
+
onSelect={handleSelect}
|
|
136
|
+
onError={handleSelectionError}
|
|
181
137
|
disabled={isUpdating}
|
|
182
138
|
/>
|
|
183
139
|
</div>
|