orcheo-studio 0.24.5 → 0.24.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.bumpversion.cfg +1 -1
  2. package/dist/assets/{arc-C-7b0zH4.js → arc-D2-yXHYr.js} +1 -1
  3. package/dist/assets/{architectureDiagram-VXUJARFQ-Ciy8lV6J.js → architectureDiagram-VXUJARFQ-T90TGA7h.js} +1 -1
  4. package/dist/assets/{blockDiagram-VD42YOAC-dC88adQ_.js → blockDiagram-VD42YOAC-DD-sctie.js} +1 -1
  5. package/dist/assets/{c4Diagram-YG6GDRKO-BiHVvXEu.js → c4Diagram-YG6GDRKO-CMFh9ow5.js} +1 -1
  6. package/dist/assets/channel-BHDMf1UK.js +1 -0
  7. package/dist/assets/{chunk-4BX2VUAB-C6V7Huup.js → chunk-4BX2VUAB-CxEXc54f.js} +1 -1
  8. package/dist/assets/{chunk-55IACEB6-DRmZnlbz.js → chunk-55IACEB6-Cu79bwG9.js} +1 -1
  9. package/dist/assets/{chunk-B4BG7PRW-DwV5xRJr.js → chunk-B4BG7PRW-B9kTs9bC.js} +1 -1
  10. package/dist/assets/{chunk-DI55MBZ5-BHsUZ0IJ.js → chunk-DI55MBZ5-C4vlj7YJ.js} +1 -1
  11. package/dist/assets/{chunk-FMBD7UC4-6Q-Lz0AM.js → chunk-FMBD7UC4-BAbI4xA2.js} +1 -1
  12. package/dist/assets/{chunk-QN33PNHL-BFy_ml8O.js → chunk-QN33PNHL-Byawnjwi.js} +1 -1
  13. package/dist/assets/{chunk-QZHKN3VN-C1fN91FN.js → chunk-QZHKN3VN-X9swQQ1H.js} +1 -1
  14. package/dist/assets/{chunk-TZMSLE5B-FLRSQ_Fi.js → chunk-TZMSLE5B-qdHYq1mZ.js} +1 -1
  15. package/dist/assets/classDiagram-2ON5EDUG-CmzZyWnG.js +1 -0
  16. package/dist/assets/classDiagram-v2-WZHVMYZB-CmzZyWnG.js +1 -0
  17. package/dist/assets/clone-BCqfTdPh.js +1 -0
  18. package/dist/assets/{cose-bilkent-S5V4N54A-BSWP1X1D.js → cose-bilkent-S5V4N54A-DxP3F1r-.js} +1 -1
  19. package/dist/assets/{dagre-6UL2VRFP-CYoZFlcz.js → dagre-6UL2VRFP-JZzCnaiy.js} +1 -1
  20. package/dist/assets/{diagram-PSM6KHXK-B8RGX0YL.js → diagram-PSM6KHXK-xDDV3S5Y.js} +1 -1
  21. package/dist/assets/{diagram-QEK2KX5R-ChWXJ8p_.js → diagram-QEK2KX5R-GQ6mbBr_.js} +1 -1
  22. package/dist/assets/{diagram-S2PKOQOG-Dwic0Fjn.js → diagram-S2PKOQOG-CuoOnnN6.js} +1 -1
  23. package/dist/assets/{erDiagram-Q2GNP2WA-0NSDB0DX.js → erDiagram-Q2GNP2WA-CFMLhasi.js} +1 -1
  24. package/dist/assets/{flowDiagram-NV44I4VS-DEoGWs9L.js → flowDiagram-NV44I4VS-Dfz2XZo7.js} +1 -1
  25. package/dist/assets/{ganttDiagram-JELNMOA3-DqzV4S6l.js → ganttDiagram-JELNMOA3-Bv566-v-.js} +1 -1
  26. package/dist/assets/{gitGraphDiagram-V2S2FVAM-B-EIQM_H.js → gitGraphDiagram-V2S2FVAM-Bp0dgH1E.js} +1 -1
  27. package/dist/assets/{graph-Ha1DTJNG.js → graph-Dkgmy-o1.js} +1 -1
  28. package/dist/assets/index-BoHYiVT1.js +810 -0
  29. package/dist/assets/index-CES1mKJf.css +1 -0
  30. package/dist/assets/{infoDiagram-HS3SLOUP-C4_vpEkn.js → infoDiagram-HS3SLOUP-CoZX6U-w.js} +1 -1
  31. package/dist/assets/{isUndefined-DkuoqItu.js → isUndefined-DFmulv-o.js} +1 -1
  32. package/dist/assets/{journeyDiagram-XKPGCS4Q-BxY4e6OZ.js → journeyDiagram-XKPGCS4Q-CI7nMgKu.js} +1 -1
  33. package/dist/assets/{kanban-definition-3W4ZIXB7-BTX3_Q7O.js → kanban-definition-3W4ZIXB7-CyVNs44-.js} +1 -1
  34. package/dist/assets/{layout-Dt1W0fl0.js → layout-DZqvH5JV.js} +1 -1
  35. package/dist/assets/{linear-CjywSMUX.js → linear-CiLQWbi5.js} +1 -1
  36. package/dist/assets/{min-Dblq6bty.js → min-CmXn2PCy.js} +1 -1
  37. package/dist/assets/{mindmap-definition-VGOIOE7T-C5P7bAFm.js → mindmap-definition-VGOIOE7T-B_F2Nu7b.js} +1 -1
  38. package/dist/assets/{pieDiagram-ADFJNKIX-BSMylwok.js → pieDiagram-ADFJNKIX-BJvzYaii.js} +1 -1
  39. package/dist/assets/{quadrantDiagram-AYHSOK5B-C74B7bqa.js → quadrantDiagram-AYHSOK5B-Cqk76fvz.js} +1 -1
  40. package/dist/assets/{requirementDiagram-UZGBJVZJ-CvPzL8Le.js → requirementDiagram-UZGBJVZJ-vGfLRbYk.js} +1 -1
  41. package/dist/assets/{sankeyDiagram-TZEHDZUN-BFHm6g6t.js → sankeyDiagram-TZEHDZUN-CregXq64.js} +1 -1
  42. package/dist/assets/{sequenceDiagram-WL72ISMW-e74mJ0xk.js → sequenceDiagram-WL72ISMW-DNrzmFke.js} +1 -1
  43. package/dist/assets/{stateDiagram-FKZM4ZOC-VLQxNVA7.js → stateDiagram-FKZM4ZOC-gdr8ZncR.js} +1 -1
  44. package/dist/assets/stateDiagram-v2-4FDKWEC3-BbOMPcrN.js +1 -0
  45. package/dist/assets/{timeline-definition-IT6M3QCI-oveNP_QD.js → timeline-definition-IT6M3QCI-CdtbG32P.js} +1 -1
  46. package/dist/assets/{treemap-GDKQZRPO-Cowimd29.js → treemap-GDKQZRPO-uMGJkzE9.js} +1 -1
  47. package/dist/assets/{xychartDiagram-PRI3JC2R-CP9Fm_aO.js → xychartDiagram-PRI3JC2R-BsBFf9PQ.js} +1 -1
  48. package/dist/favicon.ico +0 -0
  49. package/dist/index.html +8 -2
  50. package/dist/orcheo-mark.png +0 -0
  51. package/index.html +6 -0
  52. package/package.json +1 -1
  53. package/public/favicon.ico +0 -0
  54. package/public/orcheo-mark.png +0 -0
  55. package/src/design-system/ui/button.tsx +2 -2
  56. package/src/features/account/components/settings/appearance-settings-tab.tsx +1 -1
  57. package/src/features/account/pages/profile/components/profile-general-tab.tsx +1 -1
  58. package/src/features/auth/pages/login.tsx +1 -1
  59. package/src/features/auth/pages/verify.tsx +1 -1
  60. package/src/features/chatkit/components/public-chat-error-boundary.tsx +1 -1
  61. package/src/features/chatkit/components/public-chat-widget.tsx +2 -3
  62. package/src/features/chatkit/lib/chatkit-theme.ts +3 -2
  63. package/src/features/chatkit/pages/public-chat.tsx +17 -15
  64. package/src/features/shared/components/top-navigation/studio-brand.tsx +1 -1
  65. package/src/features/shared/components/workspace-bootstrap-gate.tsx +4 -4
  66. package/src/features/workflow/components/dialogs/credential-access-badge.tsx +2 -2
  67. package/src/features/workflow/components/dialogs/credential-status-badge.tsx +2 -2
  68. package/src/features/workflow/components/dialogs/credentials-table.tsx +1 -1
  69. package/src/features/workflow/components/dialogs/update-workflow-dialog.tsx +34 -78
  70. package/src/features/workflow/components/dialogs/upload-workflow-dialog.tsx +40 -136
  71. package/src/features/workflow/components/dialogs/workflow-folder-picker.tsx +178 -0
  72. package/src/features/workflow/components/panels/workflow-diff-dialog.tsx +5 -5
  73. package/src/features/workflow/components/panels/workflow-history-table.tsx +3 -4
  74. package/src/features/workflow/components/trace/agent-prism/theme/theme.css +74 -74
  75. package/src/features/workflow/lib/mermaid-renderer.ts +86 -2
  76. package/src/features/workflow/lib/workflow-folder-selection.ts +239 -0
  77. package/src/features/workflow/pages/workflow/components/settings-tab-content.tsx +24 -9
  78. package/src/features/workflow/pages/workflow/components/workflow-tab-content.tsx +8 -5
  79. package/src/features/workflow/pages/workflow-gallery/workflow-card.tsx +16 -16
  80. package/src/index.css +126 -59
  81. package/tailwind.config.js +50 -2
  82. package/dist/assets/channel-pJdT5i-M.js +0 -1
  83. package/dist/assets/classDiagram-2ON5EDUG-CNT-EGNU.js +0 -1
  84. package/dist/assets/classDiagram-v2-WZHVMYZB-CNT-EGNU.js +0 -1
  85. package/dist/assets/clone-BCi0j082.js +0 -1
  86. package/dist/assets/index-DTxvVcXp.js +0 -795
  87. package/dist/assets/index-Df4jFRhd.css +0 -1
  88. package/dist/assets/stateDiagram-v2-4FDKWEC3-Bbpq2t6B.js +0 -1
  89. package/dist/orcheo.png +0 -0
  90. package/public/orcheo.png +0 -0
@@ -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-DTxvVcXp.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CjywSMUX.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)+`:
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-BoHYiVT1.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CiLQWbi5.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/favicon.ico CHANGED
Binary file
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-DTxvVcXp.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-Df4jFRhd.css">
14
+ <script type="module" crossorigin src="/assets/index-BoHYiVT1.js"></script>
15
+ <link rel="stylesheet" crossorigin href="/assets/index-CES1mKJf.css">
10
16
  </head>
11
17
  <body>
12
18
  <div id="root"></div>
Binary file
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "orcheo-studio",
3
3
  "private": false,
4
- "version": "0.24.5",
4
+ "version": "0.24.7",
5
5
  "type": "module",
6
6
  "description": "Orcheo UI for Orcheo workflow orchestration platform",
7
7
  "keywords": [
Binary file
Binary file
@@ -5,12 +5,12 @@ import { cva, type VariantProps } from "class-variance-authority";
5
5
  import { cn } from "../../lib/utils";
6
6
 
7
7
  const buttonVariants = cva(
8
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
8
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
9
9
  {
10
10
  variants: {
11
11
  variant: {
12
12
  default:
13
- "bg-primary text-primary-foreground shadow hover:bg-primary/90",
13
+ "bg-primary text-primary-foreground shadow-primary-sheen 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-[#ebd3a6] p-6 text-foreground">
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-[#ebd3a6] p-6 text-foreground">
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-red-500/40 bg-red-500/10 p-6 text-red-100">
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-slate-200/70 bg-white",
224
- "shadow-[0_25px_80px_rgba(15,23,42,0.12)]",
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: 220,
11
+ hue: 42,
11
12
  tint: 6,
12
13
  shade: scheme === "dark" ? -1 : -4,
13
14
  },
14
15
  accent: {
15
- primary: scheme === "dark" ? "#f1f5f9" : "#0f172a",
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-slate-200/80 bg-white/70 p-6 text-slate-900 shadow-sm dark:border-slate-800/60 dark:bg-slate-950/40 dark:text-white">
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-slate-600 dark:text-slate-300">
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-amber-500/50 bg-amber-500/[0.08] text-amber-100">
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-amber-400/60 text-amber-100"
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-red-500/40 bg-red-500/10 p-6 text-center">
264
- <p className="font-medium text-red-100">{chatError.message}</p>
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-white/90 p-6 shadow-sm dark:bg-slate-950/80">
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-slate-900 dark:text-white">
318
+ <p className="text-3xl font-semibold text-foreground">
317
319
  Chat with “{currentWorkflowName}”
318
320
  </p>
319
- <p className="text-base text-slate-600 dark:text-slate-300">
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-slate-500 dark:text-slate-400">
326
+ <div className="flex flex-wrap gap-2 text-xs text-muted-foreground">
325
327
  {workflowState.workflow.handle && (
326
- <code className="rounded bg-slate-100 px-2 py-1 dark:bg-slate-900">
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-slate-100 px-2 py-1 dark:bg-slate-900">
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-white text-slate-900 dark:bg-slate-950 dark:text-white">
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-slate-200 bg-white/90 px-1 py-1 shadow-[inset_0_-1px_4px_rgba(15,23,42,0.12)] backdrop-blur-sm dark:border-slate-800 dark:bg-slate-950/70",
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-slate-400 transition-all hover:bg-transparent hover:text-slate-900 dark:text-slate-400 dark:hover:text-white data-[state=on]:border-slate-900/20 data-[state=on]:bg-slate-900 data-[state=on]:text-white data-[state=on]:shadow-[0_4px_12px_rgba(15,23,42,0.3)] dark:data-[state=on]:border-white/30 dark:data-[state=on]:bg-white dark:data-[state=on]:text-slate-900"
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-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.2em] text-amber-700 shadow-none dark:text-amber-300"
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-slate-100 text-foreground dark:bg-slate-950">
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-slate-100 text-foreground dark:bg-slate-950">
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-slate-100 via-slate-200 to-slate-100 dark:from-slate-950 dark:via-slate-900/80 dark:to-black"
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(148, 163, 184, 0.2), transparent 45%), radial-gradient(circle at 80% 30%, rgba(56, 189, 248, 0.25), transparent 50%), radial-gradient(circle at 50% 80%, rgba(45, 212, 191, 0.2), transparent 55%)",
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="bg-blue-100 text-blue-800 border-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:border-blue-800"
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="bg-purple-100 text-purple-800 border-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:border-purple-800"
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 bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-300 dark:border-emerald-800"
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 bg-red-100 text-red-800 border-red-200 dark:bg-red-900/30 dark:text-red-400 dark:border-red-800"
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-emerald-600 hover:text-emerald-700",
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, useRef, useState } from "react";
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 handleScriptFileChange = useCallback(
67
- (event: React.ChangeEvent<HTMLInputElement>) => {
68
- const file = event.target.files?.[0];
69
- if (!file) {
70
- return;
71
- }
72
- setScriptFileName(file.name);
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 handleConfigFileChange = useCallback(
86
- (event: React.ChangeEvent<HTMLInputElement>) => {
87
- const file = event.target.files?.[0];
88
- if (!file) {
89
- return;
90
- }
91
- const reader = new FileReader();
92
- reader.onload = (e) => {
93
- const text = e.target?.result;
94
- if (typeof text !== "string") {
95
- return;
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
- Upload a new Python script and optional JSON config to create a new
153
- version of &ldquo;{workflowName}&rdquo;.
122
+ Select a folder with a new Python script and optional JSON config to
123
+ create a new version of &ldquo;{workflowName}&rdquo;.
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-script">
159
- Workflow Script <span className="text-destructive">*</span>
128
+ <Label htmlFor="update-folder">
129
+ Workflow Folder <span className="text-destructive">*</span>
160
130
  </Label>
161
- <Input
162
- id="update-script"
163
- ref={scriptInputRef}
164
- type="file"
165
- accept=".py"
166
- onChange={handleScriptFileChange}
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>