@burdenoff/fluidgrids-fe-sdk 2026.922.13 → 2026.923.2
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/ExecutionDetailPage-BD7CS4KL.js +12 -0
- package/dist/{ExecutionDetailPage-OSDL7NDT.js.map → ExecutionDetailPage-BD7CS4KL.js.map} +1 -1
- package/dist/ExecutionsListPage-VOGSLA7T.js +11 -0
- package/dist/{ExecutionsListPage-AATDFFIH.js.map → ExecutionsListPage-VOGSLA7T.js.map} +1 -1
- package/dist/{WorkflowBuilder-D7RKU4UK.js → WorkflowBuilder-WLJBVVHS.js} +8 -8
- package/dist/{WorkflowBuilder-D7RKU4UK.js.map → WorkflowBuilder-WLJBVVHS.js.map} +1 -1
- package/dist/{WorkflowsList-JHM7Q5HE.js → WorkflowsList-QREUMT55.js} +6 -6
- package/dist/{WorkflowsList-JHM7Q5HE.js.map → WorkflowsList-QREUMT55.js.map} +1 -1
- package/dist/{chunk-5IAMVAGX.js → chunk-4C6UYNC5.js} +43 -5
- package/dist/chunk-4C6UYNC5.js.map +1 -0
- package/dist/chunk-5A7GP6O7.js +729 -0
- package/dist/chunk-5A7GP6O7.js.map +1 -0
- package/dist/{chunk-MTWEYC2W.js → chunk-5PZDLMC4.js} +4 -4
- package/dist/{chunk-MTWEYC2W.js.map → chunk-5PZDLMC4.js.map} +1 -1
- package/dist/chunk-FKOUPL6Z.js +753 -0
- package/dist/chunk-FKOUPL6Z.js.map +1 -0
- package/dist/{chunk-EUZZLC3N.js → chunk-HNVWIVJH.js} +202 -6
- package/dist/chunk-HNVWIVJH.js.map +1 -0
- package/dist/{chunk-PTGKDQ5K.js → chunk-LH2YML5F.js} +8 -2
- package/dist/chunk-LH2YML5F.js.map +1 -0
- package/dist/chunk-NK32XOQN.js +248 -0
- package/dist/chunk-NK32XOQN.js.map +1 -0
- package/dist/{chunk-CVVNQCFM.js → chunk-Q4RPP67K.js} +4 -4
- package/dist/{chunk-CVVNQCFM.js.map → chunk-Q4RPP67K.js.map} +1 -1
- package/dist/{chunk-UNW4I442.js → chunk-Q7RJYGQK.js} +3 -3
- package/dist/{chunk-UNW4I442.js.map → chunk-Q7RJYGQK.js.map} +1 -1
- package/dist/{chunk-RJQJAN6J.js → chunk-TEZV7I6A.js} +4 -4
- package/dist/{chunk-RJQJAN6J.js.map → chunk-TEZV7I6A.js.map} +1 -1
- package/dist/{chunk-XQYAM47Y.js → chunk-TOHTP3BT.js} +4 -4
- package/dist/{chunk-XQYAM47Y.js.map → chunk-TOHTP3BT.js.map} +1 -1
- package/dist/{chunk-IPVHC2DM.js → chunk-TVLE7GNH.js} +374 -7
- package/dist/chunk-TVLE7GNH.js.map +1 -0
- package/dist/{chunk-ISS73LG3.js → chunk-VPWQN7KV.js} +3 -3
- package/dist/{chunk-ISS73LG3.js.map → chunk-VPWQN7KV.js.map} +1 -1
- package/dist/{chunk-R6JFXZXN.js → chunk-VTPBYPDV.js} +47 -5
- package/dist/chunk-VTPBYPDV.js.map +1 -0
- package/dist/{chunk-GWRX2T3K.js → chunk-XF7QA3QT.js} +417 -155
- package/dist/chunk-XF7QA3QT.js.map +1 -0
- package/dist/executions.js +7 -6
- package/dist/history.js +4 -4
- package/dist/index.d.ts +71 -1
- package/dist/index.js +26 -23
- package/dist/index.js.map +1 -1
- package/dist/nodes.js +2 -2
- package/dist/observability-5ShR4Phm.d.ts +134 -0
- package/dist/observability.d.ts +2 -0
- package/dist/observability.js +8 -0
- package/dist/observability.js.map +1 -0
- package/dist/settings.js +5 -1
- package/dist/templates.js +6 -6
- package/dist/workflow-builder.js +7 -7
- package/dist/workflows-list.js +4 -4
- package/package.json +5 -1
- package/dist/ExecutionDetailPage-OSDL7NDT.js +0 -11
- package/dist/ExecutionsListPage-AATDFFIH.js +0 -10
- package/dist/chunk-5IAMVAGX.js.map +0 -1
- package/dist/chunk-EUZZLC3N.js.map +0 -1
- package/dist/chunk-GWRX2T3K.js.map +0 -1
- package/dist/chunk-IPVHC2DM.js.map +0 -1
- package/dist/chunk-PTGKDQ5K.js.map +0 -1
- package/dist/chunk-R6JFXZXN.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/SharePopup.tsx","../src/builder/components/ui/card-workflow.tsx","../src/pages/WorkflowsList.tsx"],"names":["useState","toast","jsxs","jsx","Button","useNavigate","uuidv4","Icon","cn"],"mappings":";;;;;;;;;;;;;;;;;;AAYe,SAAR,UAAA,CAA4B;AAAA,EACjC,GAAA,GAAM,OAAO,QAAA,CAAS,IAAA;AAAA,EACtB,QAAA,GAAW,CAAA,EAAG,MAAA,CAAO,oBAAoB,CAAA,uDAAA;AAC3C,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,GAAG,CAAA;AACtC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,GAAG,CAAA;AACxC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA2B,MAAM,CAAA;AAEnE,EAAA,MAAM,YAAY,CAAA,aAAA,EAAgB,QAAQ,CAAA,SAAA,EAAY,KAAK,aAAa,MAAM,CAAA,WAAA,CAAA;AAE9E,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,OAAA,KAAoB;AACzD,IAAA,SAAA,CAAU,SAAA,CAAU,UAAU,IAAI,CAAA;AAClC,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,QAAO,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA,EAC/D,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,0BAC3B,MAAA,EAAA,EAAK,SAAA,EAAU,WACb,QAAA,EAAA,EAAA,CAAG,4CAAA,EAA8C,OAAO,CAAA,EAC3D;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iEAAA;AAAA,MACV,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAE9B,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,6CAAA;AAAA,UACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAElC,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAG,SAAA,EAAU,uBAAA,EACX,QAAA,EAAA,EAAA,CAAG,wCAAA,EAA0C,OAAO,CAAA,EACvD,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,QAAA,EAAA,MAAA,EAErE;AAAA,aAAA,EACF,CAAA;AAAA,4BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,SAAA,KAAc,MAAA,GAAS,SAAA,GAAY,SAAA;AAAA,kBAC5C,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,MAAM,YAAA,CAAa,MAAM,CAAA;AAAA,kBAEjC,QAAA,EAAA,EAAA,CAAG,iDAAiD,YAAY;AAAA;AAAA,eACnE;AAAA,8BACA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,SAAA,KAAc,OAAA,GAAU,SAAA,GAAY,SAAA;AAAA,kBAC7C,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,MAAM,YAAA,CAAa,OAAO,CAAA;AAAA,kBAElC,QAAA,EAAA,EAAA,CAAG,6CAA6C,OAAO;AAAA;AAAA;AAC1D,aAAA,EACF,CAAA;AAAA,YAEC,SAAA,KAAc,MAAA,oBACb,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAQ,IAAA;AAAA,kBACR,KAAA,EAAO,GAAA;AAAA,kBACP,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BACA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,IAAA;AAAA,kBACL,SAAS,MACP,eAAA;AAAA,oBACE,GAAA;AAAA,oBACA,EAAA;AAAA,sBACE,kDAAA;AAAA,sBACA;AAAA;AACF,mBACF;AAAA,kBAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC5B,aAAA,EACF,CAAA;AAAA,YAGD,SAAA,KAAc,OAAA,oBACb,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,WAAM,SAAA,EAAU,qBAAA,EACd,QAAA,EAAA,EAAA,CAAG,6CAAA,EAA+C,OAAO,CAAA,EAC5D,CAAA;AAAA,kCACA,GAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,KAAA,EAAO,KAAA;AAAA,sBACP,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,sBAChD,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF,CAAA;AAAA,qCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,WAAM,SAAA,EAAU,qBAAA,EACd,QAAA,EAAA,EAAA,CAAG,8CAAA,EAAgD,QAAQ,CAAA,EAC9D,CAAA;AAAA,kCACA,GAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,KAAA,EAAO,MAAA;AAAA,sBACP,QAAA,EAAU,CAAC,CAAA,KAAM,SAAA,CAAU,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,sBACjD,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,mCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,OAAA,EAAA,EAAM,WAAU,qBAAA,EACd,QAAA,EAAA,EAAA;AAAA,kBACC,iDAAA;AAAA,kBACA;AAAA,iBACF,EACF,CAAA;AAAA,gCACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,QAAA,EAAQ,IAAA;AAAA,sBACR,KAAA,EAAO,SAAA;AAAA,sBACP,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,IAAA;AAAA,sBACL,SAAA,EAAU,+CAAA;AAAA,sBACV,SAAS,MACP,eAAA;AAAA,wBACE,SAAA;AAAA,wBACA,EAAA;AAAA,0BACE,mDAAA;AAAA,0BACA;AAAA;AACF,uBACF;AAAA,sBAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC5B,iBAAA,EACF;AAAA,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ;ACvGA,IAAM,aAAA,GAAqE;AAAA,EACzE,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,UAAU,wBAAA,EAAyB;AAAA,EAC5D,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,wBAAA,EAAyB;AAAA,EAClE,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AAGA,SAAS,aAAa,GAAA,EAAsB;AAC1C,EAAA,IAAI,CAAC,KAAK,OAAO,QAAA;AACjB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,EAAE,OAAA,EAAQ;AACnC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,QAAA;AAC/B,EAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAA,CAAO,KAAK,GAAA,EAAI,GAAI,QAAQ,GAAM,CAAA;AACpD,EAAA,IAAI,IAAA,GAAO,GAAG,OAAO,UAAA;AACrB,EAAA,IAAI,IAAA,GAAO,EAAA,EAAI,OAAO,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA;AAChC,EAAA,IAAI,GAAA,GAAM,EAAA,EAAI,OAAO,CAAA,EAAG,GAAG,CAAA,KAAA,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,EAAE,CAAA;AAChC,EAAA,IAAI,IAAA,GAAO,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA;AAC5B,EAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS;AAAA,IACtC,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACP,CAAA,CAAE,MAAA,CAAO,IAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC1B;AAEO,IAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,gBAAgB,YAAA,CAAa,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,aAAa,CAAA;AACjE,EAAA,MAAM,EAAE,iBAAA,EAAmB,yBAAA,EAA0B,GACnD,oBAAA,EAAqB;AACvB,EAAA,MAAM,EAAE,cAAA,EAAgB,sBAAA,EAAuB,GAAI,iBAAA,EAAkB;AACrE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAElE,EAAA,eAAe,uBAAA,GAA0B;AACvC,IAAA,IAAI;AAEF,MAAA,aAAA,EAAc;AAEd,MAAA,MAAM,SAAS,MAAM,yBAAA;AAAA,QACnB,QAAA,CAAS,YAAA;AAAA,QACT,QAAA,CAAS,OAAA;AAAA,QACT;AAAA,UACE,gBAAgB,CAAA,EAAG,QAAA,CAAS,YAAY,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA;AAAA;AAC7D,OACF;AAEA,MAAA,IAAI,MAAA,EAAQ,OAAA,IAAW,MAAA,CAAO,QAAA,EAAU;AACtC,QAAA,QAAA;AAAA,UACE,eAAe,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,OAAO,CAAA;AAAA,SACvE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,IAAW,8BAA8B,CAAA;AAAA,MACnE;AAAA,IACF,SAAS,KAAA,EAAO;AAId,MAAA,MAAM,KAAA,GAAQ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,MAAA;AACrD,MAAA,IAAI,qBAAA,CAAsB,KAAK,CAAA,IAAK,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAChE,QAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAClD,MAAAC,KAAAA,CAAM,KAAA;AAAA,QACJ,CAAA,EAAG,EAAA,CAAG,qDAAA,EAAuD,6BAA6B,CAAC,CAAA,CAAA,EAAI,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OACvJ;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,uBAAuB,YAA2B;AACtD,IAAA,IAAI,CAAC,SAAS,YAAA,EAAc;AAC1B,MAAA,OAAA,CAAQ,MAAM,oCAAoC,CAAA;AAClD,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AAEF,MAAA,MAAM,OAAA,GAAU,MAAM,sBAAA,CAAuB,QAAA,CAAS,YAAY,CAAA;AAClE,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,MAC3B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAK,CAAA;AAC/C,MAAAA,KAAAA,CAAM,KAAA;AAAA,QACJ,CAAA,EAAG,EAAA,CAAG,kDAAA,EAAoD,0BAA0B,CAAC,CAAA,CAAA,EAAI,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OACjJ;AAAA,IACF,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,CAAS,cAAA,GAAiB,QAAA,CAAS,YAAA,GAAe,GAAA,GAAM,SAAS,OAAO,CAAA;AAAA,EAC1E,CAAA;AAOA,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAwC;AAC/D,IAAA,MAAM,KAAK,CAAA,CAAE,MAAA;AACb,IAAA,IAAI,EAAA,CAAG,OAAA,CAAQ,2CAA2C,CAAA,EAAG;AAC7D,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,aACJ,aAAA,CAAc,QAAA,CAAS,MAAA,IAAU,OAAO,KAAK,aAAA,CAAc,KAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,SAAS,UAAA,GAC1B,IAAI,KAAK,QAAA,CAAS,UAAU,CAAA,CAAE,cAAA,EAAe,GAC7C,MAAA;AAEJ,EAAA,uBACEC,KAAC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV,YAAA,EAAY,GAAG,EAAA,CAAG,uDAAA,EAAyD,eAAe,CAAC,CAAA,CAAA,EAAI,SAAS,IAAI,CAAA,CAAA;AAAA,QAC5G,OAAA,EAAS,eAAA;AAAA,QACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IACE,CAAA,CAAE,WAAW,CAAA,CAAE,aAAA,KACd,EAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,GAAA,CAAA,EAChC;AACA,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,YAAA,EAAa;AAAA,UACf;AAAA,QACF,CAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,iGAAA;AAAA,UACA,4FAAA;AAAA,UACA;AAAA,SACF;AAAA,QAGA,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iHAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,gCAAA,EAAiC,SAAA,EAAU,QAAA,EAAS,CAAA,EACjE,CAAA;AAAA,4BACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,gCAAAC,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uDAAA,EACX,oBAAU,IAAA,EACb,CAAA;AAAA,gCACAD,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8IAAA,EACd,QAAA,EAAA;AAAA,kCAAAC,GAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,UAAA,CAAW,QAAQ;AAAA;AAAA,mBAC5D;AAAA,kBACC,UAAA,CAAW;AAAA,iBAAA,EACd;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8DAAA,EACV,mBAAS,WAAA,IACR,EAAA;AAAA,gBACE,+CAAA;AAAA,gBACA;AAAA,eACF,EACJ,CAAA;AAAA,cACC,QAAA,CAAS,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,qBACvCD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,wBAC9BC,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAI,GAAA,CAAI,EAAA;AAAA,oBACR,OAAO,GAAA,CAAI,KAAA;AAAA,oBACX,OAAO,GAAA,CAAI,KAAA;AAAA,oBACX,IAAA,EAAK;AAAA,mBAAA;AAAA,kBAJA,GAAA,CAAI;AAAA,iBAMZ,CAAA;AAAA,gBACA,QAAA,CAAS,KAAK,MAAA,GAAS,CAAA,oBACtBD,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mCAAA,EAAoC,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAChD,QAAA,CAAS,KAAK,MAAA,GAAS;AAAA,iBAAA,EAC3B;AAAA,eAAA,EAEJ;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,qEAAA;AAAA,gBACV,KAAA,EAAO,YAAA;AAAA,gBAEP,QAAA,EAAA;AAAA,kCAAAC,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,mBAAA,EAAoB,WAAU,mBAAA,EAAoB,CAAA;AAAA,kCAC7DD,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,oBAAA,EAAA,CAAG,iDAAiD,SAAS,CAAA;AAAA,oBAAG,GAAA;AAAA,oBAChE,YAAA,CAAa,SAAS,UAAU;AAAA,mBAAA,EACnC,CAAA;AAAA,kCACAC,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,QAAO,QAAA,EAAA,MAAA,EAAC,CAAA;AAAA,kCAC1BD,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,QAAA,CAAS,OAAA;AAAA,oBACT,QAAA,CAAS,KAAA,GAAQ,CAAA,EAAA,EAAK,QAAA,CAAS,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,mBAAA,EAC7C,CAAA;AAAA,kBACC,QAAA,CAAS,kBAAkB,QAAA,CAAS,cAAA,GAAiB,oBACpDA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,QAAA,EAAA;AAAA,oBAAA,OAAA;AAAA,oBACtB,QAAA,CAAS,cAAA;AAAA,oBAAgB,GAAA;AAAA,oBAC3B,EAAA;AAAA,sBACC,gDAAA;AAAA,sBACA;AAAA;AACF,mBAAA,EACF,CAAA,GACE;AAAA;AAAA;AAAA,aACN;AAAA,4BAEAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yHAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAC,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,kBAACC,MAAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,SAAA,EAAU,QAAA;AAAA,oBACV,OAAA,EAAS,YAAA;AAAA,oBACT,YAAA,EAAY,EAAA;AAAA,sBACV,8CAAA;AAAA,sBACA;AAAA,qBACF;AAAA,oBAEA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,WAAU,QAAA,EAAS;AAAA;AAAA,iBAC9C,EACF,CAAA;AAAA,gCACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,KAAA,EACnB,QAAA,kBAAAA,IAAC,GAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,kBACC,8CAAA;AAAA,kBACA;AAAA,mBAEJ,CAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,8BACAD,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAC,IAAC,cAAA,EAAA,EAAe,OAAA,EAAO,MACrB,QAAA,kBAAAA,GAAAA,CAAC,UACC,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,GAAA,EAAK,GAAG,MAAA,CAAO,oBAAoB,kBAAkB,QAAA,CAAS,YAAY,CAAA,CAAA,EAAI,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,oBAC9F,QAAA,EAAU,GAAG,MAAA,CAAO,oBAAoB,kBAAkB,QAAA,CAAS,YAAY,CAAA,CAAA,EAAI,QAAA,CAAS,OAAO,CAAA;AAAA;AAAA,mBAEvG,CAAA,EACF,CAAA;AAAA,gCACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,KAAA,EACnB,QAAA,kBAAAA,IAAC,GAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,kBACC,+CAAA;AAAA,kBACA;AAAA,mBAEJ,CAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,GAAAA;AAAA,gBAAC,iBAAA;AAAA,gBAAA;AAAA,kBACC,YAAY,sBAAA,CAAuB,eAAA;AAAA,kBAEnC,QAAA,kBAAAD,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAC,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,sBAACC,MAAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,OAAA;AAAA,wBACR,IAAA,EAAK,MAAA;AAAA,wBACL,SAAA,EAAU,QAAA;AAAA,wBACV,OAAA,EAAS,MAAM,uBAAA,EAAwB;AAAA,wBACvC,YAAA,EAAY,EAAA;AAAA,0BACV,mDAAA;AAAA,0BACA;AAAA,yBACF;AAAA,wBAEA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,WAAU,QAAA,EAAS;AAAA;AAAA,qBAC9C,EACF,CAAA;AAAA,oCACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,KAAA,EACnB,QAAA,kBAAAA,IAAC,GAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,sBACC,mDAAA;AAAA,sBACA;AAAA,uBAEJ,CAAA,EACF;AAAA,mBAAA,EACF;AAAA;AAAA,eACF;AAAA,8BACAA,GAAAA;AAAA,gBAAC,iBAAA;AAAA,gBAAA;AAAA,kBACC,YAAY,sBAAA,CAAuB,eAAA;AAAA,kBAEnC,QAAA,kBAAAD,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAC,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,sBAACC,MAAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,OAAA;AAAA,wBACR,IAAA,EAAK,MAAA;AAAA,wBACL,SAAA,EAAU,0FAAA;AAAA,wBACV,OAAA,EAAS,MAAM,mBAAA,CAAoB,IAAI,CAAA;AAAA,wBACvC,YAAA,EAAY,EAAA;AAAA,0BACV,gDAAA;AAAA,0BACA;AAAA,yBACF;AAAA,wBAEA,0BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,cAAA,EAAe,WAAU,QAAA,EAAS;AAAA;AAAA,qBAC/C,EACF,CAAA;AAAA,oCACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,KAAA,EACnB,QAAA,kBAAAA,IAAC,GAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,sBACC,gDAAA;AAAA,sBACA;AAAA,uBAEJ,CAAA,EACF;AAAA,mBAAA,EACF;AAAA;AAAA;AACF,aAAA,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBAEAA,IAAC,WAAA,EAAA,EAAY,IAAA,EAAM,kBAAkB,YAAA,EAAc,mBAAA,EACjD,QAAA,kBAAAD,IAAAA,CAAC,kBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,IAAC,gBAAA,EAAA,EACE,QAAA,EAAA,EAAA;AAAA,UACC,mDAAA;AAAA,UACA;AAAA,SACF,EACF,CAAA;AAAA,wBACAD,KAAC,sBAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,EAAA;AAAA,YACC,+DAAA;AAAA,YACA;AAAA,WACF;AAAA,UAAG,GAAA;AAAA,UAAI,GAAA;AAAA,UACA,QAAA,CAAS,IAAA;AAAA,UAAK,GAAA;AAAA,UAAO,GAAA;AAAA,UAC3B,EAAA;AAAA,YACC,+DAAA;AAAA,YACA;AAAA;AACF,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,IAAC,iBAAA,EAAA,EAAkB,QAAA,EAAU,YAC1B,QAAA,EAAA,EAAA,CAAG,8CAAA,EAAgD,QAAQ,CAAA,EAC9D,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,oBAAA;AAAA,YACT,QAAA,EAAU,UAAA;AAAA,YACV,SAAA,EAAU,oEAAA;AAAA,YAET,QAAA,EAAA,UAAA,GACG,EAAA;AAAA,cACE,gDAAA;AAAA,cACA;AAAA,aACF,GACA,EAAA,CAAG,8CAAA,EAAgD,QAAQ;AAAA;AAAA;AACjE,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAEAA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,kBAAA;AAAA,QACN,YAAA,EAAc,qBAAA;AAAA,QACd,WAAW,MAAM;AACf,UAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,UAAA,QAAA,CAAS,UAAU,CAAA;AAAA,QACrB;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ,CAAA;AChaA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,OAAO,OAAA;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAO,EAAA,CAAG,uCAAA,EAAyC,QAAQ;AAAA,OAC7D;AAAA,MACA;AAAA,QACE,KAAA,EAAO,OAAA;AAAA,QACP,KAAA,EAAO,EAAA,CAAG,sCAAA,EAAwC,OAAO;AAAA,OAC3D;AAAA,MACA;AAAA,QACE,KAAA,EAAO,UAAA;AAAA,QACP,KAAA,EAAO,EAAA,CAAG,yCAAA,EAA2C,UAAU;AAAA,OACjE;AAAA,MACA;AAAA,QACE,KAAA,EAAO,YAAA;AAAA,QACP,KAAA,EAAO,EAAA,CAAG,2CAAA,EAA6C,YAAY;AAAA;AACrE,KACF;AAAA,IACA,CAAC,EAAE;AAAA,GACL;AACF;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,iCAAA,EAAkC,CAAA;AAAA,sBACtDA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC;AAAA,KAAA,EACzD,CAAA;AAAA,oBACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,uCAAA,EAAwC,CAAA;AAAA,sBAC5DA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,sBACpDA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC;AAAA,KAAA,EACtD;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAWE,WAAAA,EAAY;AAC7B,EAAA,MAAM,iBAAiB,gBAAA,EAAiB;AACxC,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,OAAO,SAAA,EAAW,OAAA,KAC5C,sBAAA,CAAuB;AAAA,IACrB,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACb,CAAA;AAEH,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIL,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAG9D,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAY,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,IAAU,OAAO,CAAC,CAAA;AACtE,IAAA,OAAO,cAAA,CAAe,OAAO,CAAC,CAAA,KAAM,KAAK,GAAA,CAAI,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,EACvD,CAAA,EAAG,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AAK9B,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAA2C;AAC5D,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,KAAA,MAAW,KAAK,SAAA,CAAU,CAAA,CAAE,WAAW,CAAA,IAAK,EAAC,EAAG;AAC9C,QAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,EAAG;AACtB,UAAA,IAAA,CAAK,GAAA,CAAI,EAAE,KAAA,EAAO;AAAA,YAChB,IAAI,CAAA,CAAE,KAAA;AAAA,YACN,KAAA,EACE,EAAE,OAAA,EAAS,KAAA,IACX,EAAE,OAAA,EAAS,GAAA,IACX,EAAA,CAAG,2CAAA,EAA6C,KAAK;AAAA,WACxD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,EACzE,CAAA,EAAG,CAAC,SAAA,EAAW,SAAA,EAAW,EAAE,CAAC,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAM;AAC7B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACpC,IAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM;AAC7B,MAAA,IAAI,YAAA,IAAA,CAAiB,CAAA,CAAE,MAAA,IAAU,OAAA,MAAa,cAAc,OAAO,KAAA;AAGnE,MAAA,IACE,SAAA,IACA,CAAA,CAAE,SAAA,CAAU,CAAA,CAAE,WAAW,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,SAAS,CAAA;AAEnE,QAAA,OAAO,KAAA;AACT,MAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,MAAA,OAAO,CAAC,EAAE,IAAA,EAAM,CAAA,CAAE,aAAa,CAAA,CAAE,KAAK,CAAA,CACnC,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,CAAA,KAAM,QAAQ,CAAA,CAChD,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACH,GAAG,CAAC,SAAA,EAAW,QAAQ,YAAA,EAAc,SAAA,EAAW,SAAS,CAAC,CAAA;AAE1D,EAAA,MAAM,+BACJG,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,YAAY,sBAAA,CAAuB,eAAA;AAAA,MACnC,aAAA,EAAe,EAAA;AAAA,QACb,8CAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAD,IAAAA;AAAA,QAACE,MAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAU,mCAAA;AAAA,UACV,SAAS,MAAM,QAAA,CAAS,CAAA,YAAA,EAAeE,EAAA,EAAQ,CAAA,GAAA,CAAK,CAAA;AAAA,UACpD,WAAA,EAAU,wBAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAH,IAACI,IAAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,WAAU,gCAAA,EAAiC,CAAA;AAAA,YACnE,EAAA,CAAG,yCAAyC,iBAAiB;AAAA;AAAA;AAAA;AAChE;AAAA,GACF;AAGF,EAAA;AAAA;AAAA;AAAA,oBAGEJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DACd,QAAA,kBAAAD,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uCAAA;AAAA,QACV,WAAA,EAAU,yBAAA;AAAA,QAGV,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kDAAA;AAAA,cACV,WAAA,EAAU,wBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,oCAAAC,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCACX,QAAA,EAAA,EAAA,CAAG,gCAAA,EAAkC,WAAW,CAAA,EACnD,CAAA;AAAA,oBACC,CAAC,OAAA,IAAW,CAAC,KAAA,oBACZA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,SAAA,EAAU,WAAA,EAClC,QAAA,EAAA,SAAA,CAAU,MAAA,EACb;AAAA,mBAAA,EAEJ,CAAA;AAAA,kCACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACV,QAAA,EAAA,EAAA;AAAA,oBACC,mCAAA;AAAA,oBACA;AAAA,mBACF,EACF;AAAA,iBAAA,EACF,CAAA;AAAA,gBACC;AAAA;AAAA;AAAA,WACH;AAAA,UAGC,CAAC,OAAA,IAAW,CAAC,SAAS,SAAA,CAAU,MAAA,GAAS,qBACxCD,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mCAAA;AAAA,cACV,WAAA,EAAU,yBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,kCAAAC,GAAAA;AAAA,oBAACI,IAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,eAAA;AAAA,sBACL,SAAA,EAAU;AAAA;AAAA,mBACZ;AAAA,kCACAJ,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAO,MAAA;AAAA,sBACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,sBACzC,WAAA,EAAa,EAAA;AAAA,wBACX,4CAAA;AAAA,wBACA;AAAA,uBACF;AAAA,sBACA,YAAA,EAAY,EAAA;AAAA,wBACV,0CAAA;AAAA,wBACA;AAAA,uBACF;AAAA,sBACA,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF,CAAA;AAAA,gBACC,gBAAgB,MAAA,GAAS,CAAA,oBACxBD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EACb,QAAA,EAAA;AAAA,kCAAAC,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,sBACnC,SAAA,EAAWK,EAAAA;AAAA,wBACT,qEAAA;AAAA,wBACA,YAAA,KAAiB,OACb,uDAAA,GACA;AAAA,uBACN;AAAA,sBAEC,QAAA,EAAA,EAAA,CAAG,4CAA4C,KAAK;AAAA;AAAA,mBACvD;AAAA,kBACC,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,qBACpBL,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBAEC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAS,MACP,eAAA;AAAA,wBAAgB,CAAC,GAAA,KACf,GAAA,KAAQ,CAAA,CAAE,KAAA,GAAQ,OAAO,CAAA,CAAE;AAAA,uBAC7B;AAAA,sBAEF,SAAA,EAAWK,EAAAA;AAAA,wBACT,qEAAA;AAAA,wBACA,YAAA,KAAiB,CAAA,CAAE,KAAA,GACf,uDAAA,GACA;AAAA,uBACN;AAAA,sBAEC,QAAA,EAAA,CAAA,CAAE;AAAA,qBAAA;AAAA,oBAdE,CAAA,CAAE;AAAA,mBAgBV;AAAA,iBAAA,EACH,CAAA;AAAA,gBAED,YAAY,MAAA,GAAS,CAAA,oBACpBN,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EACb,QAAA,EAAA;AAAA,kCAAAC,GAAAA;AAAA,oBAACI,IAAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,iBAAA;AAAA,sBACL,SAAA,EAAU,8BAAA;AAAA,sBACV,aAAA,EAAY;AAAA;AAAA,mBACd;AAAA,kBACC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBJ,GAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBAEC,IAAA,EAAK,QAAA;AAAA,sBACL,OAAA,EAAS,MACP,YAAA,CAAa,CAAC,GAAA,KAAS,QAAQ,CAAA,CAAE,EAAA,GAAK,IAAA,GAAO,CAAA,CAAE,EAAG,CAAA;AAAA,sBAEpD,SAAA,EAAWK,EAAAA;AAAA,wBACT,qEAAA;AAAA,wBACA,SAAA,KAAc,CAAA,CAAE,EAAA,GACZ,uDAAA,GACA;AAAA,uBACN;AAAA,sBAEC,QAAA,EAAA,CAAA,CAAE;AAAA,qBAAA;AAAA,oBAZE,CAAA,CAAE;AAAA,mBAcV;AAAA,iBAAA,EACH;AAAA;AAAA;AAAA,WAEJ;AAAA,UAID,OAAA,mBACCL,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sEAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAE,EAAG,CAAC,GAAG,CAAA,qBAC7BA,GAAAA,CAAC,YAAA,EAAA,EAAA,EAAkB,CAAG,CACvB,CAAA,EACH,CAAA,GACE,wBACFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mGAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,GAAAA;AAAA,cAACI,IAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,wBAAA;AAAA,gBACL,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAL,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,eAAA,EACV,QAAA,EAAA,EAAA;AAAA,gBACC,yCAAA;AAAA,gBACA;AAAA,eACF,EACF,CAAA;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EACV,gBAAM,OAAA,EACT;AAAA,aAAA,EACF,CAAA;AAAA,4BACAD,IAAAA,CAACE,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,OAAA,EAAQ,EACzD,QAAA,EAAA;AAAA,8BAAAD,IAACI,IAAAA,EAAA,EAAK,IAAA,EAAK,gBAAA,EAAiB,WAAU,QAAA,EAAS,CAAA;AAAA,cAC9C,EAAA,CAAG,2CAA2C,WAAW;AAAA,aAAA,EAC5D;AAAA,WAAA,EACF,CAAA,EACF,CAAA,GACE,SAAA,CAAU,MAAA,KAAW,CAAA,mBACvBJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,YAAC,qBAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAa,YAAA;AAAA,cACb,KAAA,EAAO,EAAA;AAAA,gBACL,0CAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,WAAA,EAAa,EAAA;AAAA,gBACX,gDAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,MAAA,EAAQ;AAAA;AAAA,WACV,EACF,CAAA,GACE,QAAA,CAAS,MAAA,KAAW,oBACtBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,GAAAA;AAAA,cAACI,IAAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,eAAA;AAAA,gBACL,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EACV,QAAA,EAAA,EAAA;AAAA,cACC,6CAAA;AAAA,cACA;AAAA,aACF,EACF,CAAA;AAAA,4BACAA,GAAAA;AAAA,cAACC,MAAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,IAAA,EAAK,IAAA;AAAA,gBACL,SAAS,MAAM;AACb,kBAAA,SAAA,CAAU,EAAE,CAAA;AACZ,kBAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,kBAAA,YAAA,CAAa,IAAI,CAAA;AAAA,gBACnB,CAAA;AAAA,gBAEC,QAAA,EAAA,EAAA;AAAA,kBACC,6CAAA;AAAA,kBACA;AAAA;AACF;AAAA;AACF,WAAA,EACF,CAAA,EACF,CAAA,mBAEAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,QAAA,qBACbA,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cAEC,QAAA,EAAU;AAAA,gBACR,IAAI,QAAA,CAAS,EAAA;AAAA,gBACb,cAAc,QAAA,CAAS,WAAA;AAAA,gBACvB,SAAS,QAAA,CAAS,OAAA;AAAA,gBAClB,MAAM,QAAA,CAAS,IAAA;AAAA,gBACf,WAAA,EAAa,SAAS,WAAA,IAAe,MAAA;AAAA,gBACrC,MAAA,EAAQ,SAAS,MAAA,IAAU,MAAA;AAAA,gBAC3B,KAAA,EAAO,SAAS,KAAA,IAAS,MAAA;AAAA,gBACzB,UAAA,EAAY,SAAS,SAAA,IAAa,MAAA;AAAA,gBAClC,UAAA,EAAY,SAAS,SAAA,IAAa,MAAA;AAAA,gBAClC,cAAA,EAAgB,SAAS,aAAA,IAAiB,MAAA;AAAA,gBAC1C,IAAA,EAAA,CAAO,UAAU,QAAA,CAAS,WAAW,KAAK,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,kBACxD,IAAI,CAAA,CAAE,KAAA;AAAA,kBACN,OACE,CAAA,CAAE,OAAA,EAAS,KAAA,IACX,CAAA,CAAE,SAAS,GAAA,IACX,EAAA;AAAA,oBACE,+CAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACF,KAAA,EAAO,CAAA,CAAE,OAAA,EAAS,KAAA,IAAS;AAAA,iBAC7B,CAAE;AAAA,eACJ;AAAA,cACA,eAAA,EAAiB,MAAM,OAAA;AAAQ,aAAA;AAAA,YAxB1B,QAAA,CAAS;AAAA,WA0BjB,CAAA,EACH;AAAA;AAAA;AAAA,KAEJ,EACF;AAAA;AAEJ","file":"chunk-IPVHC2DM.js","sourcesContent":["import { useState } from \"react\";\nimport { Copy, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/ui\";\nimport { config } from \"../config\";\nimport { useTr } from \"../hooks/useTr\";\n\ninterface SharePopupProps {\n url: string;\n embedSrc: string;\n}\n\nexport default function SharePopup({\n url = window.location.href,\n embedSrc = `${config.fluidgridFrontendUrl}/workflow-view/565201ec-e803-4281-ad39-a135c46daa89/1.0`,\n}: SharePopupProps) {\n const tr = useTr();\n const [isOpen, setIsOpen] = useState(false);\n const [width, setWidth] = useState(600);\n const [height, setHeight] = useState(400);\n const [activeTab, setActiveTab] = useState<\"link\" | \"embed\">(\"link\");\n\n const embedCode = `<iframe src=\"${embedSrc}\" width=\"${width}\" height=\"${height}\"></iframe>`;\n\n const copyToClipboard = (text: string, message: string) => {\n navigator.clipboard.writeText(text);\n toast.success(message);\n };\n\n if (!isOpen) {\n return (\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(true)}>\n <Share2 className=\"h-4 w-4\" />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.components.sharePopup.openLabel\", \"Share\")}\n </span>\n </Button>\n );\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n <div\n className=\"bg-card rounded-lg p-6 max-w-md w-full mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex justify-between items-center mb-4\">\n <h2 className=\"text-lg font-semibold\">\n {tr(\"fluidgrids.components.sharePopup.title\", \"Share\")}\n </h2>\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setIsOpen(false)}>\n ×\n </Button>\n </div>\n\n <div className=\"flex gap-2 mb-4\">\n <Button\n variant={activeTab === \"link\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"link\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabShareLink\", \"Share Link\")}\n </Button>\n <Button\n variant={activeTab === \"embed\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => setActiveTab(\"embed\")}\n >\n {tr(\"fluidgrids.components.sharePopup.tabEmbed\", \"Embed\")}\n </Button>\n </div>\n\n {activeTab === \"link\" && (\n <div className=\"flex items-center space-x-2\">\n <input\n readOnly\n value={url}\n className=\"flex-1 h-9 px-3 rounded-md border bg-background text-sm\"\n />\n <Button\n size=\"sm\"\n onClick={() =>\n copyToClipboard(\n url,\n tr(\n \"fluidgrids.components.sharePopup.linkCopiedToast\",\n \"Link copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n )}\n\n {activeTab === \"embed\" && (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.widthLabel\", \"Width\")}\n </label>\n <input\n type=\"number\"\n value={width}\n onChange={(e) => setWidth(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\"fluidgrids.components.sharePopup.heightLabel\", \"Height\")}\n </label>\n <input\n type=\"number\"\n value={height}\n onChange={(e) => setHeight(Number(e.target.value))}\n className=\"w-full h-9 px-3 rounded-md border bg-background text-sm mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">\n {tr(\n \"fluidgrids.components.sharePopup.embedCodeLabel\",\n \"Embed Code\",\n )}\n </label>\n <div className=\"relative mt-1\">\n <input\n readOnly\n value={embedCode}\n className=\"w-full h-9 px-3 pr-12 rounded-md border bg-background text-sm font-mono\"\n />\n <Button\n size=\"sm\"\n className=\"absolute right-1 top-1/2 -translate-y-1/2 h-7\"\n onClick={() =>\n copyToClipboard(\n embedCode,\n tr(\n \"fluidgrids.components.sharePopup.embedCopiedToast\",\n \"Embed code copied to clipboard\",\n ),\n )\n }\n >\n <Copy className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Card,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { TagBadge } from \"@burdenoff/fe-libs/tag\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { isQuotaExhaustedError } from \"@burdenoff/fe-libs/shared/utils\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { useFlowStore } from \"../../stores/flow-store\";\nimport { useNavigate } from \"react-router\";\nimport { config } from \"../../../config\";\nimport SharePopup from \"../../../components/SharePopup\";\nimport {\n useDuplicateWorkflow,\n useDeleteWorkflow,\n} from \"../../../hooks/useWorkflows\";\nimport { SdkPermissionGate } from \"../../../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../../../permissions/constants\";\nimport { QuotaExhaustedDialog } from \"../../../components/shared/QuotaExhaustedDialog\";\nimport { useTr } from \"../../../hooks/useTr\";\n\ninterface WorkflowTagChip {\n id: string;\n label: string;\n color?: string;\n}\n\ninterface WorkflowData {\n id?: string;\n workflow_key: string;\n version: string;\n name: string;\n description?: string;\n status?: string;\n alias?: string;\n updated_at?: string;\n created_at?: string;\n total_versions?: number;\n /** Resolved tag assignments, rendered as read-only chips. */\n tags?: WorkflowTagChip[];\n}\n\n/** Status pill: colored dot + label, calmer than a filled badge. */\nconst STATUS_STYLES: Record<string, { label: string; dotClass: string }> = {\n DRAFT: { label: \"Draft\", dotClass: \"bg-muted-foreground/60\" },\n ACTIVE: {\n label: \"Active\",\n dotClass: \"bg-[var(--color-status-success-text)]\",\n },\n ARCHIVED: { label: \"Archived\", dotClass: \"bg-muted-foreground/30\" },\n DEPRECATED: {\n label: \"Deprecated\",\n dotClass: \"bg-[var(--color-status-error-text)]\",\n },\n};\n\n/** Compact relative timestamp (\"2h ago\"); absolute date beyond a week. */\nfunction relativeTime(iso?: string): string {\n if (!iso) return \"—\";\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) return \"—\";\n const mins = Math.floor((Date.now() - then) / 60_000);\n if (mins < 1) return \"just now\";\n if (mins < 60) return `${mins}m ago`;\n const hrs = Math.floor(mins / 60);\n if (hrs < 24) return `${hrs}h ago`;\n const days = Math.floor(hrs / 24);\n if (days < 7) return `${days}d ago`;\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n }).format(new Date(then));\n}\n\nexport const CardWorkflow = ({\n workflow,\n onUpdateSuccess,\n}: {\n workflow: WorkflowData;\n onUpdateSuccess: () => void;\n}) => {\n const tr = useTr();\n const navigate = useNavigate();\n const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);\n const { duplicateWorkflow: duplicateWorkflowMutation } =\n useDuplicateWorkflow();\n const { deleteWorkflow: deleteWorkflowMutation } = useDeleteWorkflow();\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n const [showQuotaExhausted, setShowQuotaExhausted] = useState(false);\n\n async function handleDuplicateWorkflow() {\n try {\n // Reset the store first to clear any existing state\n resetWorkflow();\n\n const result = await duplicateWorkflowMutation(\n workflow.workflow_key,\n workflow.version,\n {\n newWorkflowKey: `${workflow.workflow_key}_copy_${Date.now()}`,\n },\n );\n\n if (result?.success && result.workflow) {\n navigate(\n `../workflow/${result.workflow.workflowKey}/${result.workflow.version}`,\n );\n } else {\n throw new Error(result?.message || \"Failed to duplicate workflow\");\n }\n } catch (error) {\n // duplicateWorkflowMutation re-throws on failure, preserving the\n // original GraphQL error as `.cause` — check that (not the wrapped\n // message) to detect QUOTA_EXHAUSTED.\n const cause = error instanceof Error ? error.cause : undefined;\n if (isQuotaExhaustedError(cause) || isQuotaExhaustedError(error)) {\n setShowQuotaExhausted(true);\n return;\n }\n console.error(\"Error duplicating workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.duplicateErrorToast\", \"Error duplicating workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n const handleDeleteWorkflow = async (): Promise<void> => {\n if (!workflow.workflow_key) {\n console.error(\"Workflow ID is required to delete.\");\n return;\n }\n setIsDeleting(true);\n try {\n // Omit version to delete ALL versions of this workflow\n const success = await deleteWorkflowMutation(workflow.workflow_key);\n if (success) {\n setShowDeleteDialog(false);\n }\n } catch (error) {\n console.error(\"Error deleting workflow:\", error);\n toast.error(\n `${tr(\"fluidgrids.builder.cardWorkflow.deleteErrorToast\", \"Error deleting workflow:\")} ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n setIsDeleting(false);\n setShowDeleteDialog(false);\n onUpdateSuccess();\n }\n };\n\n const handleOnEdit = () => {\n navigate(\"../workflow/\" + workflow.workflow_key + \"/\" + workflow.version);\n };\n\n /**\n * The whole card opens the builder (n8n-style). Inner controls — action\n * buttons, the share overlay (a non-portaled `fixed` div whose clicks bubble\n * through the card), and the dialog — must not trigger navigation.\n */\n const handleCardClick = (e: React.MouseEvent<HTMLDivElement>) => {\n const el = e.target as HTMLElement;\n if (el.closest(\"button, a, input, [role='dialog'], .fixed\")) return;\n handleOnEdit();\n };\n\n const statusInfo =\n STATUS_STYLES[workflow.status ?? \"DRAFT\"] ?? STATUS_STYLES.DRAFT;\n const updatedExact = workflow.updated_at\n ? new Date(workflow.updated_at).toLocaleString()\n : undefined;\n\n return (\n <TooltipProvider>\n <Card\n role=\"button\"\n tabIndex={0}\n aria-label={`${tr(\"fluidgrids.builder.cardWorkflow.openWorkflowAriaLabel\", \"Open workflow\")} ${workflow.name}`}\n onClick={handleCardClick}\n onKeyDown={(e) => {\n if (\n e.target === e.currentTarget &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n handleOnEdit();\n }\n }}\n className={cn(\n \"group relative flex min-h-44 cursor-pointer flex-col gap-0 rounded-xl border-border bg-card p-0\",\n \"transition-all duration-150 hover:-translate-y-0.5 hover:border-primary/40 hover:shadow-lg\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50\",\n )}\n >\n {/* Header: icon square + name/description + status pill */}\n <div className=\"flex flex-1 items-start gap-3 p-4\">\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-primary/20 bg-primary/10 text-primary\">\n <Icon icon=\"mdi:transit-connection-variant\" className=\"size-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <h3 className=\"truncate font-semibold leading-6 text-card-foreground\">\n {workflow?.name}\n </h3>\n <span className=\"mt-0.5 inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n <span\n className={cn(\"size-1.5 rounded-full\", statusInfo.dotClass)}\n />\n {statusInfo.label}\n </span>\n </div>\n <p className=\"mt-1 line-clamp-2 text-xs leading-snug text-muted-foreground\">\n {workflow.description ||\n tr(\n \"fluidgrids.builder.cardWorkflow.noDescription\",\n \"No description\",\n )}\n </p>\n {workflow.tags && workflow.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap items-center gap-1\">\n {workflow.tags.slice(0, 3).map((tag) => (\n <TagBadge\n key={tag.id}\n id={tag.id}\n label={tag.label}\n color={tag.color}\n size=\"sm\"\n />\n ))}\n {workflow.tags.length > 3 && (\n <span className=\"text-[11px] text-muted-foreground\">\n +{workflow.tags.length - 3}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Footer: metadata + actions (actions brighten on hover/focus) */}\n <div className=\"flex items-center justify-between gap-2 border-t border-border px-4 py-1.5\">\n <div\n className=\"flex min-w-0 items-center gap-1.5 text-[11px] text-muted-foreground\"\n title={updatedExact}\n >\n <Icon icon=\"mdi:clock-outline\" className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {tr(\"fluidgrids.builder.cardWorkflow.updatedPrefix\", \"Updated\")}{\" \"}\n {relativeTime(workflow.updated_at)}\n </span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"shrink-0 font-mono\">\n {workflow.version}\n {workflow.alias ? ` (${workflow.alias})` : \"\"}\n </span>\n {workflow.total_versions && workflow.total_versions > 1 ? (\n <span className=\"shrink-0\">\n · {workflow.total_versions}{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.versionsSuffix\",\n \"versions\",\n )}\n </span>\n ) : null}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-0.5 opacity-60 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={handleOnEdit}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n >\n <Icon icon=\"mynaui:edit\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.editWorkflow\",\n \"Edit workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <SharePopup\n url={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n embedSrc={`${config.fluidgridFrontendUrl}/workflow-view/${workflow.workflow_key}/${workflow.version}`}\n />\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.shareWorkflow\",\n \"Share workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n onClick={() => handleDuplicateWorkflow()}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n >\n <Icon icon=\"mynaui:copy\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.duplicateWorkflow\",\n \"Duplicate workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n <SdkPermissionGate\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_DELETE}\n >\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 text-[var(--color-status-error-text)] hover:text-[var(--color-status-error-text)]\"\n onClick={() => setShowDeleteDialog(true)}\n aria-label={tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n >\n <Icon icon=\"mynaui:trash\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n <p>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteWorkflow\",\n \"Delete workflow\",\n )}\n </p>\n </TooltipContent>\n </Tooltip>\n </SdkPermissionGate>\n </div>\n </div>\n </Card>\n\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogTitle\",\n \"Delete Workflow\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionPrefix\",\n \"Are you sure you want to delete workflow\",\n )}{\" \"}\n "{workflow.name}"{\" \"}\n {tr(\n \"fluidgrids.builder.cardWorkflow.deleteDialogDescriptionSuffix\",\n \"and all its versions? This action cannot be undone.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isDeleting}>\n {tr(\"fluidgrids.builder.cardWorkflow.cancelButton\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleDeleteWorkflow}\n disabled={isDeleting}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isDeleting\n ? tr(\n \"fluidgrids.builder.cardWorkflow.deletingButton\",\n \"Deleting...\",\n )\n : tr(\"fluidgrids.builder.cardWorkflow.deleteButton\", \"Delete\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n <QuotaExhaustedDialog\n open={showQuotaExhausted}\n onOpenChange={setShowQuotaExhausted}\n onUpgrade={() => {\n setShowQuotaExhausted(false);\n navigate(\"/billing\");\n }}\n />\n </TooltipProvider>\n );\n};\n","import { useMemo, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Icon } from \"@iconify/react\";\n\nimport {\n Badge,\n Button,\n IllustratedEmptyState,\n Input,\n Skeleton,\n} from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"@burdenoff/fe-libs/utils\";\nimport { CardWorkflow } from \"../builder/components/ui/card-workflow\";\nimport { useWorkflowDefinitions } from \"../hooks/useWorkflows\";\nimport { useTr } from \"../hooks/useTr\";\nimport { SdkPermissionButton } from \"../permissions/PermissionsBridge\";\nimport { FLUIDGRIDS_PERMISSIONS } from \"../permissions/constants\";\n\nfunction useStatusFilters() {\n const tr = useTr();\n return useMemo(\n () => [\n {\n value: \"ACTIVE\",\n label: tr(\"fluidgrids.workflowsList.statusActive\", \"Active\"),\n },\n {\n value: \"DRAFT\",\n label: tr(\"fluidgrids.workflowsList.statusDraft\", \"Draft\"),\n },\n {\n value: \"ARCHIVED\",\n label: tr(\"fluidgrids.workflowsList.statusArchived\", \"Archived\"),\n },\n {\n value: \"DEPRECATED\",\n label: tr(\"fluidgrids.workflowsList.statusDeprecated\", \"Deprecated\"),\n },\n ],\n [tr],\n );\n}\n\nfunction SkeletonCard() {\n return (\n <div className=\"flex min-h-40 flex-col justify-between rounded-xl border border-border bg-card p-6\">\n <div className=\"space-y-2.5\">\n <Skeleton className=\"h-6 w-2/3 bg-card-foreground/15\" />\n <Skeleton className=\"h-4 w-full bg-card-foreground/10\" />\n </div>\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"mr-4 h-6 w-full bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n <Skeleton className=\"h-6 w-8 bg-card-foreground/10\" />\n </div>\n </div>\n );\n}\n\nexport function WorkflowsList() {\n const tr = useTr();\n const navigate = useNavigate();\n const STATUS_FILTERS = useStatusFilters();\n const { workflows, loading, error, tagsByKey, refetch } =\n useWorkflowDefinitions({\n limit: 100,\n latestOnly: true,\n });\n\n const [search, setSearch] = useState(\"\");\n const [statusFilter, setStatusFilter] = useState<string | null>(null);\n const [tagFilter, setTagFilter] = useState<string | null>(null);\n\n // Only offer chips for statuses that actually occur in this workspace.\n const presentStatuses = useMemo(() => {\n const seen = new Set<string>(workflows.map((w) => w.status ?? \"DRAFT\"));\n return STATUS_FILTERS.filter((s) => seen.has(s.value));\n }, [workflows, STATUS_FILTERS]);\n\n // Tags present across the listed workflows, for the filter chips. Tag ids\n // come from the assignments so the filter works on ids, not labels\n // (two vocabularies can share a label).\n const presentTags = useMemo(() => {\n const byId = new Map<string, { id: string; label: string }>();\n for (const w of workflows) {\n for (const a of tagsByKey[w.workflowKey] ?? []) {\n if (!byId.has(a.tagId)) {\n byId.set(a.tagId, {\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\"fluidgrids.workflowsList.tagFallbackLabel\", \"Tag\"),\n });\n }\n }\n }\n return [...byId.values()].sort((a, b) => a.label.localeCompare(b.label));\n }, [workflows, tagsByKey, tr]);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n return workflows.filter((w) => {\n if (statusFilter && (w.status ?? \"DRAFT\") !== statusFilter) return false;\n // Tags come from the list query's tagAssignments projection; no separate\n // overlay request is needed, avoiding duplicate workflowDefinitions calls.\n if (\n tagFilter &&\n !(tagsByKey[w.workflowKey] ?? []).some((a) => a.tagId === tagFilter)\n )\n return false;\n if (!q) return true;\n return [w.name, w.description, w.alias]\n .filter((v): v is string => typeof v === \"string\")\n .some((v) => v.toLowerCase().includes(q));\n });\n }, [workflows, search, statusFilter, tagFilter, tagsByKey]);\n\n const createButton = (\n <SdkPermissionButton\n permission={FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE}\n deniedTooltip={tr(\n \"fluidgrids.workflowsList.createDeniedTooltip\",\n \"You don't have permission to create workflows\",\n )}\n >\n <Button\n variant=\"default\"\n size=\"default\"\n className=\"font-bold text-primary-foreground\"\n onClick={() => navigate(`../workflow/${uuidv4()}/v1`)}\n data-tour=\"fluidgrids-list-create\"\n >\n <Icon icon=\"mynaui:plus\" className=\"size-5 text-primary-foreground\" />\n {tr(\"fluidgrids.workflowsList.createButton\", \"Create Workflow\")}\n </Button>\n </SdkPermissionButton>\n );\n\n return (\n // min-h-screen (matching the sibling pages) makes short content still fill\n // the viewport, keeping the shell footer below the fold.\n <main className=\"flex min-h-screen w-full flex-col bg-background-primary\">\n <div\n className=\"flex flex-1 flex-col gap-5 p-4 sm:p-6\"\n data-tour=\"fluidgrids-list-results\"\n >\n {/* Page header */}\n <div\n className=\"flex flex-wrap items-start justify-between gap-3\"\n data-tour=\"fluidgrids-list-header\"\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2.5\">\n <h1 className=\"text-2xl font-bold tracking-tight\">\n {tr(\"fluidgrids.workflowsList.title\", \"Workflows\")}\n </h1>\n {!loading && !error && (\n <Badge variant=\"secondary\" className=\"font-mono\">\n {workflows.length}\n </Badge>\n )}\n </div>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {tr(\n \"fluidgrids.workflowsList.subtitle\",\n \"Build, run, and manage your automations. Open a workflow to edit it in the visual builder.\",\n )}\n </p>\n </div>\n {createButton}\n </div>\n\n {/* Toolbar: search + status chips (only useful once something exists) */}\n {!loading && !error && workflows.length > 0 && (\n <div\n className=\"flex flex-wrap items-center gap-3\"\n data-tour=\"fluidgrids-list-toolbar\"\n >\n <div className=\"relative w-full max-w-xs\">\n <Icon\n icon=\"mynaui:search\"\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={tr(\n \"fluidgrids.workflowsList.searchPlaceholder\",\n \"Search workflows…\",\n )}\n aria-label={tr(\n \"fluidgrids.workflowsList.searchAriaLabel\",\n \"Search workflows\",\n )}\n className=\"pl-8\"\n />\n </div>\n {presentStatuses.length > 1 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={() => setStatusFilter(null)}\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === null\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {tr(\"fluidgrids.workflowsList.statusFilterAll\", \"All\")}\n </button>\n {presentStatuses.map((s) => (\n <button\n key={s.value}\n type=\"button\"\n onClick={() =>\n setStatusFilter((cur) =>\n cur === s.value ? null : s.value,\n )\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n statusFilter === s.value\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {s.label}\n </button>\n ))}\n </div>\n )}\n {presentTags.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Icon\n icon=\"mdi:tag-outline\"\n className=\"size-4 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n {presentTags.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n onClick={() =>\n setTagFilter((cur) => (cur === t.id ? null : t.id))\n }\n className={cn(\n \"rounded-full border px-3 py-1 text-xs font-medium transition-colors\",\n tagFilter === t.id\n ? \"border-transparent bg-primary text-primary-foreground\"\n : \"border-border bg-card text-muted-foreground hover:text-foreground\",\n )}\n >\n {t.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Content */}\n {loading ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {Array.from({ length: 6 }, (_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n ) : error ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex max-w-md flex-col items-center gap-3 rounded-xl border border-border bg-card p-8 text-center\">\n <Icon\n icon=\"mynaui:danger-triangle\"\n className=\"size-8 text-destructive\"\n />\n <div>\n <p className=\"font-semibold\">\n {tr(\n \"fluidgrids.workflowsList.loadErrorTitle\",\n \"Couldn't load workflows\",\n )}\n </p>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {error.message}\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\n <Icon icon=\"mynaui:refresh\" className=\"size-4\" />\n {tr(\"fluidgrids.workflowsList.tryAgainButton\", \"Try again\")}\n </Button>\n </div>\n </div>\n ) : workflows.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <IllustratedEmptyState\n illustration=\"onboarding\"\n title={tr(\n \"fluidgrids.workflowsList.emptyStateTitle\",\n \"Create your first workflow\",\n )}\n description={tr(\n \"fluidgrids.workflowsList.emptyStateDescription\",\n \"Workflows automate multi-step processes — sync signups into your CRM, post alerts to Slack, or transform data between apps. Start from a blank canvas or a template.\",\n )}\n action={createButton}\n />\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"grid flex-1 place-items-center\">\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Icon\n icon=\"mynaui:search\"\n className=\"size-8 text-muted-foreground\"\n />\n <p className=\"font-medium\">\n {tr(\n \"fluidgrids.workflowsList.noFilterMatchTitle\",\n \"No workflows match your filters\",\n )}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setSearch(\"\");\n setStatusFilter(null);\n setTagFilter(null);\n }}\n >\n {tr(\n \"fluidgrids.workflowsList.clearFiltersButton\",\n \"Clear filters\",\n )}\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {filtered.map((workflow) => (\n <CardWorkflow\n key={workflow.id}\n workflow={{\n id: workflow.id,\n workflow_key: workflow.workflowKey,\n version: workflow.version,\n name: workflow.name,\n description: workflow.description ?? undefined,\n status: workflow.status ?? undefined,\n alias: workflow.alias ?? undefined,\n updated_at: workflow.updatedAt ?? undefined,\n created_at: workflow.createdAt ?? undefined,\n total_versions: workflow.totalVersions ?? undefined,\n tags: (tagsByKey[workflow.workflowKey] ?? []).map((a) => ({\n id: a.tagId,\n label:\n a.tagInfo?.label ??\n a.tagInfo?.key ??\n tr(\n \"fluidgrids.workflowsList.cardTagFallbackLabel\",\n \"Tag\",\n ),\n color: a.tagInfo?.color ?? undefined,\n })),\n }}\n onUpdateSuccess={() => refetch()}\n />\n ))}\n </div>\n )}\n </div>\n </main>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/settings/pages/SettingsPage.tsx"],"names":[],"mappings":"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","file":"chunk-PTGKDQ5K.js","sourcesContent":["import { useState, useCallback, useEffect, useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useFlowStore } from \"../../../builder/stores/flow-store\";\nimport {\n useWorkflowDefinitionQuery,\n useUpdateWorkflowDefinitionMutation,\n useWorkflowDefinitionsQuery,\n} from \"../../../generated/operations\";\n\n// ============================================================================\n// Per-workflow execution settings (BOFF-7512)\n// ============================================================================\n\n/**\n * Mirrors `IWorkflowConfig` on `wspace-workflow-svc`'s\n * `IWorkflowDefinitionJson.config` (a sibling of `data`, not nested inside\n * it), plus two fields the backend type doesn't have yet: `errorWorkflowKey`\n * and `dataSaving`. Per the ticket, \"if the underlying setting doesn't exist\n * yet, add just the schema field and wire the UI\" — `config` on\n * `definitionJson` is already a free-form JSON blob, so these new keys need\n * no backend schema change to round-trip; nothing downstream reads\n * `dataSaving.saveSuccessExecutions`/`saveFailedExecutions` yet (that's\n * execution-lifecycle work tracked separately), but the value now persists.\n */\ninterface WorkflowExecutionSettings {\n timeout?: number; // seconds\n maxParallelism?: number;\n onError?: \"stop\" | \"continue\" | \"retry\";\n /** Workflow key to run when this workflow's execution fails. */\n errorWorkflowKey?: string;\n dataSaving?: {\n saveSuccessExecutions?: boolean;\n saveFailedExecutions?: boolean;\n };\n}\n\nconst DEFAULT_EXECUTION_SETTINGS: Required<\n Pick<WorkflowExecutionSettings, \"timeout\" | \"maxParallelism\" | \"onError\">\n> = {\n timeout: 300,\n maxParallelism: 5,\n onError: \"stop\",\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_SETTINGS = {\n general: {\n workspaceName: \"Default Workspace\",\n defaultWorkflowPrefix: \"wf\",\n autoSaveDrafts: true,\n },\n execution: {\n defaultTimeoutSeconds: 300,\n maxRetries: 3,\n retryDelaySeconds: 10,\n concurrentExecutionLimit: 5,\n },\n notifications: {\n emailOnSuccess: false,\n emailOnFailure: true,\n webhookOnSuccess: false,\n webhookOnFailure: true,\n },\n api: {\n gatewayUrl: \"/api/v1/workflows\",\n webhookUrlFormat: \"/api/v1/webhooks/workflow/{workflowKey}/trigger\",\n },\n};\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction ReadOnlyBanner() {\n const tr = useTr();\n\n return (\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.readOnlyBanner.message\",\n \"Settings are managed at workspace level. Contact your workspace administrator to change these values.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const tr = useTr();\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n toast.success(\n `${label} ${tr(\"fluidgrids.settings.copyButton.copiedToast\", \"copied to clipboard\")}`,\n );\n } catch {\n toast.error(\n tr(\n \"fluidgrids.settings.copyButton.copyFailedToast\",\n \"Failed to copy to clipboard\",\n ),\n );\n }\n }, [value, label, tr]);\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\"\n >\n <Icon icon=\"mdi:content-copy\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\"fluidgrids.settings.copyButton.copyTooltipPrefix\", \"Copy\")}{\" \"}\n {label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction SettingRow({\n label,\n description,\n children,\n}: {\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4\">\n <div className=\"flex-1 min-w-0\">\n <Label className=\"text-sm font-medium text-text-primary\">{label}</Label>\n {description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ============================================================================\n// Tab Content Components\n// ============================================================================\n\nfunction GeneralTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.general;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workspaceNameLabel\",\n \"Workspace Name\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workspaceNameDescription\",\n \"The name of your workspace\",\n )}\n >\n <Input\n value={settings.workspaceName}\n readOnly\n className=\"w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workflowPrefixLabel\",\n \"Default Workflow Prefix\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workflowPrefixDescription\",\n \"Prefix used when generating new workflow keys\",\n )}\n >\n <Input\n value={settings.defaultWorkflowPrefix}\n readOnly\n className=\"w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.autoSaveDraftsLabel\",\n \"Auto-save Drafts\",\n )}\n description={tr(\n \"fluidgrids.settings.general.autoSaveDraftsDescription\",\n \"Automatically save draft workflows while editing\",\n )}\n >\n <Switch checked={settings.autoSaveDrafts} disabled />\n </SettingRow>\n </div>\n </div>\n );\n}\n\n/**\n * Editable, per-WORKFLOW execution settings (BOFF-7512) — replaces the old\n * global/read-only tab. Resolves the target workflow from (in order) an\n * explicit `workflowKey` prop, the `:id` route param, or the flow store's\n * currently-loaded workflow (set when the user arrived here from the\n * builder). When none of those resolve, falls back to the previous\n * read-only static display rather than a broken/blank editor.\n */\nfunction ExecutionTab({ workflowKey }: Readonly<{ workflowKey?: string }>) {\n const tr = useTr();\n\n const { data, loading, refetch } = useWorkflowDefinitionQuery({\n variables: { workflowKey },\n skip: !workflowKey,\n fetchPolicy: \"cache-and-network\",\n });\n const [updateWorkflowDefinition, { loading: saving }] =\n useUpdateWorkflowDefinitionMutation();\n\n // \"Error workflow\" picker — reuses the same list-workflows query the\n // history/list pages already use (`workflowDefinitions`), latest version\n // per key, excluding the workflow being edited (running itself as its own\n // error handler on every failure risks an infinite loop).\n const { data: otherWorkflowsData, loading: otherWorkflowsLoading } =\n useWorkflowDefinitionsQuery({\n variables: { input: { latestOnly: true, limit: 100 } },\n });\n const errorWorkflowOptions = (\n otherWorkflowsData?.workflowDefinitions?.items ?? []\n ).filter((w) => w.workflowKey !== workflowKey);\n\n const workflow = data?.workflowDefinition;\n const persistedConfig = useMemo(() => {\n const definitionJson = workflow?.definitionJson as\n Record<string, unknown> | undefined;\n const config = definitionJson?.config as\n WorkflowExecutionSettings | undefined;\n return config ?? {};\n }, [workflow?.definitionJson]);\n\n const [form, setForm] = useState<WorkflowExecutionSettings>(persistedConfig);\n // Re-seed the form whenever the fetched workflow (or its persisted config)\n // changes — e.g. on first load, or after switching workflows.\n useEffect(() => setForm(persistedConfig), [persistedConfig]);\n\n const handleSave = useCallback(async () => {\n if (!workflow?.id) return;\n try {\n const definitionJson = {\n ...(workflow.definitionJson as Record<string, unknown>),\n config: form,\n };\n await updateWorkflowDefinition({\n variables: { id: workflow.id, input: { definitionJson } },\n });\n toast.success(\n tr(\n \"fluidgrids.settings.execution.savedToast\",\n \"Execution settings saved\",\n ),\n );\n void refetch();\n } catch (err) {\n toast.error(\n tr(\n \"fluidgrids.settings.execution.saveFailedToast\",\n \"Failed to save settings\",\n ),\n { description: err instanceof Error ? err.message : undefined },\n );\n }\n }, [workflow, form, updateWorkflowDefinition, refetch, tr]);\n\n if (!workflowKey) {\n // No workflow context resolvable — keep the previous static display so\n // the page still renders something useful rather than an empty form.\n // NOT the workspace-level `ReadOnlyBanner` copy: this isn't a policy\n // restriction, just a missing route/store context, so it gets its own\n // message rather than implying \"contact your admin\".\n const settings = DEFAULT_SETTINGS.execution;\n return (\n <div>\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.execution.noWorkflowContextBanner\",\n \"No workflow selected — open Settings from a specific workflow to edit its execution settings.\",\n )}\n </p>\n </div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Default Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.noWorkflowContextDescription\",\n \"Open this page from a specific workflow to edit its execution settings.\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.defaultTimeoutSeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.defaultTimeoutDescription\",\n \"Maximum time this workflow's execution can run (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n value={form.timeout ?? DEFAULT_EXECUTION_SETTINGS.timeout}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n timeout: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[100px] text-right\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.concurrencyLimitLabel\",\n \"Concurrency Limit\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.concurrencyLimitDescription\",\n \"Maximum number of this workflow's executions running simultaneously\",\n )}\n >\n <Input\n type=\"number\"\n min={1}\n value={\n form.maxParallelism ?? DEFAULT_EXECUTION_SETTINGS.maxParallelism\n }\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n maxParallelism: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[80px] text-right\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.onErrorLabel\",\n \"On workflow error\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.onErrorDescription\",\n \"What to do when this workflow's execution fails\",\n )}\n >\n <select\n value={form.onError ?? DEFAULT_EXECUTION_SETTINGS.onError}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n onError: e.target.value as WorkflowExecutionSettings[\"onError\"],\n }))\n }\n disabled={loading}\n className=\"w-[160px] rounded-md border border-border-secondary bg-background-secondary px-2 py-1.5 text-sm text-text-primary\"\n >\n <option value=\"stop\">\n {tr(\"fluidgrids.settings.execution.onErrorStop\", \"Stop\")}\n </option>\n <option value=\"continue\">\n {tr(\"fluidgrids.settings.execution.onErrorContinue\", \"Continue\")}\n </option>\n <option value=\"retry\">\n {tr(\"fluidgrids.settings.execution.onErrorRetry\", \"Retry\")}\n </option>\n </select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.errorWorkflowLabel\",\n \"Error workflow\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.errorWorkflowDescription\",\n \"Workflow key to run when this workflow's execution fails (optional)\",\n )}\n >\n <Select\n value={form.errorWorkflowKey ?? \"__none__\"}\n onValueChange={(val) =>\n setForm((f) => ({\n ...f,\n errorWorkflowKey: val === \"__none__\" ? undefined : val,\n }))\n }\n disabled={loading || otherWorkflowsLoading}\n >\n <SelectTrigger className=\"w-[220px] bg-background-secondary border-border-secondary\">\n <SelectValue\n placeholder={tr(\n \"fluidgrids.settings.execution.errorWorkflowPlaceholder\",\n \"None\",\n )}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">\n {tr(\"fluidgrids.settings.execution.errorWorkflowNone\", \"None\")}\n </SelectItem>\n {errorWorkflowOptions.map((w) => (\n <SelectItem key={w.workflowKey} value={w.workflowKey}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveSuccessLabel\",\n \"Save successful execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveSuccessExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveSuccessExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveFailedLabel\",\n \"Save failed execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveFailedExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveFailedExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n </div>\n <div className=\"mt-4 flex justify-end\">\n <Button onClick={() => void handleSave()} disabled={loading || saving}>\n {saving\n ? tr(\"fluidgrids.settings.execution.saving\", \"Saving…\")\n : tr(\"fluidgrids.settings.execution.save\", \"Save\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction NotificationsTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.notifications;\n\n return (\n <div>\n <ReadOnlyBanner />\n\n {/* Email Notifications */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:email-outline\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.emailSectionTitle\",\n \"Email Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessDescription\",\n \"Send email when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.emailOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnFailureDescription\",\n \"Send email when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.emailOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n\n {/* Webhook Notifications */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:webhook\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.webhookSectionTitle\",\n \"Webhook Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessDescription\",\n \"Send webhook when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.webhookOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureDescription\",\n \"Send webhook when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.webhookOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ApiTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.api;\n\n return (\n <div>\n <div className=\"space-y-4\">\n {/* API Gateway URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon icon=\"mdi:api\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlTitle\",\n \"API Gateway URL\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlDescription\",\n \"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.gatewayUrl}\n </code>\n <CopyButton\n value={settings.gatewayUrl}\n label={tr(\n \"fluidgrids.settings.api.gatewayUrlCopyLabel\",\n \"API Gateway URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Webhook URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:webhook\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlTitle\",\n \"Webhook URL Format\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionPrefix\",\n \"URL format for triggering workflows via webhook. Replace\",\n )}{\" \"}\n <code className=\"text-text-primary\">{\"{workflowKey}\"}</code>{\" \"}\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionSuffix\",\n \"with the actual workflow key.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.webhookUrlFormat}\n </code>\n <CopyButton\n value={settings.webhookUrlFormat}\n label={tr(\n \"fluidgrids.settings.api.webhookUrlCopyLabel\",\n \"Webhook URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Example cURL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:console\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.curlExampleTitle\",\n \"Example: Trigger via cURL\",\n )}\n </h3>\n </div>\n <div className=\"relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <pre className=\"text-xs text-text-primary overflow-x-auto whitespace-pre-wrap\">\n {`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -H \"Authorization: Bearer <token>\" \\\\\n -d '{\"input\": {}}'`}\n </pre>\n <div className=\"absolute top-2 right-2\">\n <CopyButton\n value={`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -H \"Authorization: Bearer <token>\" \\\\\\n -d '{\"input\": {}}'`}\n label={tr(\n \"fluidgrids.settings.api.curlCopyLabel\",\n \"cURL command\",\n )}\n />\n </div>\n </div>\n </CardHeader>\n </Card>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport interface SettingsPageProps {\n /**\n * Explicit workflow key to scope the Execution tab to (BOFF-7512). When\n * omitted, falls back to the `:id`/`:workflowKey` route param (for hosts\n * that mount this page under a per-workflow path), then to the workflow\n * currently loaded in the builder's flow store (for hosts that navigate\n * here from the builder without a route param). If none resolve, the\n * Execution tab falls back to its previous static display.\n */\n workflowKey?: string;\n}\n\nexport function SettingsPage({\n workflowKey: workflowKeyProp,\n}: SettingsPageProps = {}) {\n const tr = useTr();\n const navigate = useNavigate();\n const routeParams = useParams<{ id?: string; workflowKey?: string }>();\n const activeWorkflowKey = useFlowStore((s) => s.workflow.workflowKey);\n const workflowKey =\n workflowKeyProp ||\n routeParams.workflowKey ||\n routeParams.id ||\n activeWorkflowKey ||\n undefined;\n const [activeTab, setActiveTab] = useState(\"general\");\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.settings.page.title\", \"Settings\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.settings.page.subtitle\",\n \"Configure workflow execution and notification preferences\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.settings.page.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"general\" className=\"gap-1.5\">\n <Icon icon=\"mdi:cog\" width={16} />\n {tr(\"fluidgrids.settings.page.generalTab\", \"General\")}\n </TabsTrigger>\n <TabsTrigger value=\"execution\" className=\"gap-1.5\">\n <Icon icon=\"mdi:play-circle\" width={16} />\n {tr(\"fluidgrids.settings.page.executionTab\", \"Execution\")}\n </TabsTrigger>\n <TabsTrigger value=\"notifications\" className=\"gap-1.5\">\n <Icon icon=\"mdi:bell-outline\" width={16} />\n {tr(\"fluidgrids.settings.page.notificationsTab\", \"Notifications\")}\n </TabsTrigger>\n <TabsTrigger value=\"api\" className=\"gap-1.5\">\n <Icon icon=\"mdi:api\" width={16} />\n {tr(\"fluidgrids.settings.page.apiTab\", \"API\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\">\n <GeneralTab />\n </TabsContent>\n <TabsContent value=\"execution\">\n <ExecutionTab workflowKey={workflowKey} />\n </TabsContent>\n <TabsContent value=\"notifications\">\n <NotificationsTab />\n </TabsContent>\n <TabsContent value=\"api\">\n <ApiTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/executions/pages/ExecutionsListPage.tsx"],"names":[],"mappings":"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","file":"chunk-R6JFXZXN.js","sourcesContent":["import { useCallback, useMemo, useRef } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n ExecutionFilters,\n ExecutionStats,\n ExecutionTable,\n ExecutionCards,\n ExecutionTimeline,\n Pagination,\n} from \"../components\";\nimport { useExecutionsStore } from \"../store/executionsStore\";\nimport {\n useExecutionsWithStore,\n useExecutionStats,\n useExecutionActions,\n useAutoRefresh,\n} from \"../hooks/useExecutions\";\nimport { useWorkflowDefinitions } from \"../../../hooks/useWorkflows\";\nimport type { WorkflowRun, RunStatus, ExecutionAction } from \"../types\";\nimport { useTr } from \"../../../hooks/useTr\";\n\nexport function ExecutionsListPage() {\n const tr = useTr();\n const navigate = useNavigate();\n\n // Store state\n const {\n viewMode,\n setViewMode,\n setSelectedExecution,\n selection,\n clearSelection,\n setStatusFilter,\n setWorkflowFilter,\n autoRefresh,\n autoRefreshInterval,\n } = useExecutionsStore();\n\n // Seed the workflow filter from the URL (?workflowKey=...) synchronously —\n // BEFORE useExecutionsWithStore() below reads it — so the first runs query\n // already carries the filter and no stale unfiltered request is fired. Lets\n // \"View Runs\" in the builder open this list scoped to one workflow; arriving\n // without the param (e.g. the sidebar \"Runs\" link) clears any stale filter.\n // Sync only when the URL param actually changes (tracked via a ref) so manual\n // dropdown changes — which update the store but not the URL — aren't reverted.\n const [searchParams] = useSearchParams();\n const workflowKeyParam = searchParams.get(\"workflowKey\") ?? \"\";\n const lastWorkflowKeyParam = useRef<string | null>(null);\n if (lastWorkflowKeyParam.current !== workflowKeyParam) {\n lastWorkflowKeyParam.current = workflowKeyParam;\n if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {\n setWorkflowFilter(workflowKeyParam);\n }\n }\n\n // Data fetching\n const { executions, total, loading, error, refetch } =\n useExecutionsWithStore();\n const {\n stats,\n loading: statsLoading,\n refetch: refetchStats,\n } = useExecutionStats();\n const { workflows } = useWorkflowDefinitions({ limit: 100 });\n const { cancelExecution, pauseExecution, resumeExecution, retryExecution } =\n useExecutionActions();\n\n // Auto-refresh\n useAutoRefresh(\n useCallback(() => {\n refetch();\n refetchStats();\n }, [refetch, refetchStats]),\n autoRefresh,\n autoRefreshInterval,\n );\n\n // Transform stats for component\n const executionStats = useMemo(() => {\n if (!stats) return null;\n return {\n total: stats.runsCountTotal,\n running: stats.runsRunningCount,\n completed: stats.runsCompletedCount,\n failed: stats.runsFailedCount,\n cancelled: stats.runsCancelledCount ?? 0,\n pending: stats.runsPendingCount,\n waiting: stats.runsWaitingCount ?? 0,\n successRate: stats.workflowSuccessRate,\n avgDuration: stats.avgWorkflowExecutionTimeSeconds,\n };\n }, [stats]);\n\n // Transform workflows for filter\n const workflowOptions = useMemo(\n () =>\n workflows.map((w) => ({\n workflowKey: w.workflowKey,\n name: w.name,\n })),\n [workflows],\n );\n\n // workflowKey → name fallback for run rows whose workflow relation is\n // missing (e.g. before the backend include rolled out).\n const workflowNames = useMemo(() => {\n const map: Record<string, string> = {};\n for (const w of workflows) map[w.workflowKey] = w.name;\n return map;\n }, [workflows]);\n\n // Handlers\n const handleRowClick = (execution: WorkflowRun) => {\n setSelectedExecution(execution);\n navigate(`../runs/${execution.id}`);\n };\n\n // Retry starts a NEW run of the same pinned version, from the same trigger\n // node and with the same trigger payload (BOFF-7269). It used to navigate to\n // the run's detail page, which only offers per-node retry, so nothing ran.\n const handleRetry = async (execution: WorkflowRun) => {\n const result = await retryExecution(execution);\n if (!result.ok) {\n toast.error(\n tr(\n \"fluidgrids.executions.executionsList.retryFailed\",\n \"Could not start a new run\",\n ),\n { description: result.message },\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.executions.executionsList.retryStarted\",\n \"New run started\",\n ),\n );\n navigate(`../runs/${result.run.runId}`);\n };\n\n const handleAction = async (\n action: ExecutionAction,\n execution: WorkflowRun,\n ) => {\n switch (action) {\n case \"cancel\":\n await cancelExecution(execution.id);\n break;\n case \"pause\":\n await pauseExecution(execution.id);\n break;\n case \"resume\":\n await resumeExecution(execution.id);\n break;\n case \"retry\":\n await handleRetry(execution);\n break;\n case \"view\":\n navigate(`../runs/${execution.id}`);\n break;\n }\n refetch();\n };\n\n const handleFilterByStatus = (status: RunStatus | \"all\") => {\n setStatusFilter(status);\n };\n\n const handleBulkAction = async (action: \"cancel\" | \"pause\" | \"resume\") => {\n if (selection.runIds.length === 0) return;\n\n const promises = selection.runIds.map((id) => {\n switch (action) {\n case \"cancel\":\n return cancelExecution(id);\n case \"pause\":\n return pauseExecution(id);\n case \"resume\":\n return resumeExecution(id);\n }\n });\n\n const results = await Promise.allSettled(promises);\n const failures = results.filter((r) => r.status === \"rejected\");\n if (failures.length > 0) {\n console.error(\n `Bulk action partially failed: ${failures.length}/${results.length} failed`,\n );\n }\n clearSelection();\n refetch();\n };\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div\n className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\"\n data-tour=\"fluidgrids-runs-header\"\n >\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.executions.executionsList.title\", \"Executions\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.executions.executionsList.subtitle\",\n \"Monitor and manage your workflow runs\",\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n {/* View Mode Toggle */}\n <div className=\"flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1\">\n <button\n onClick={() => setViewMode(\"table\")}\n className={`p-2 rounded ${\n viewMode === \"table\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.tableViewTooltip\",\n \"Table View\",\n )}\n >\n <Icon icon=\"mdi:table\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"cards\")}\n className={`p-2 rounded ${\n viewMode === \"cards\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.cardViewTooltip\",\n \"Card View\",\n )}\n >\n <Icon icon=\"mdi:view-grid\" width={18} />\n </button>\n <button\n onClick={() => setViewMode(\"timeline\")}\n className={`p-2 rounded ${\n viewMode === \"timeline\"\n ? \"bg-background-tertiary text-text-primary\"\n : \"text-text-secondary hover:text-text-primary\"\n }`}\n title={tr(\n \"fluidgrids.executions.executionsList.timelineViewTooltip\",\n \"Timeline View\",\n )}\n >\n <Icon icon=\"mdi:timeline\" width={18} />\n </button>\n </div>\n\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\n \"fluidgrids.executions.executionsList.backToWorkflows\",\n \"Back to Workflows\",\n )}\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-stats\">\n <ExecutionStats\n stats={executionStats}\n loading={statsLoading}\n onFilterByStatus={handleFilterByStatus}\n />\n </div>\n\n {/* Filters */}\n <div className=\"mb-6\" data-tour=\"fluidgrids-runs-filters\">\n <ExecutionFilters workflows={workflowOptions} onRefresh={refetch} />\n </div>\n\n {/* Bulk Actions */}\n {selection.runIds.length > 0 && (\n <div className=\"mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3\">\n <span className=\"text-sm text-text-primary\">\n {selection.runIds.length}{\" \"}\n {selection.runIds.length > 1\n ? tr(\n \"fluidgrids.executions.executionsList.selectionCountPlural\",\n \"executions selected\",\n )\n : tr(\n \"fluidgrids.executions.executionsList.selectionCountSingular\",\n \"execution selected\",\n )}\n </span>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"cancel\")}\n >\n <Icon icon=\"mdi:stop\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkCancelButton\",\n \"Cancel\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"pause\")}\n >\n <Icon icon=\"mdi:pause\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkPauseButton\",\n \"Pause\",\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleBulkAction(\"resume\")}\n >\n <Icon icon=\"mdi:play\" className=\"mr-1\" width={14} />\n {tr(\n \"fluidgrids.executions.executionsList.bulkResumeButton\",\n \"Resume\",\n )}\n </Button>\n </div>\n <button\n onClick={clearSelection}\n className=\"ml-auto text-sm text-text-secondary hover:text-text-primary\"\n >\n {tr(\n \"fluidgrids.executions.executionsList.clearSelection\",\n \"Clear selection\",\n )}\n </button>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg\">\n <div className=\"flex items-center gap-2 text-[var(--color-status-error-text)]\">\n <Icon icon=\"mdi:alert-circle\" width={20} />\n <span className=\"font-medium\">\n {tr(\n \"fluidgrids.executions.executionsList.loadErrorTitle\",\n \"Error loading executions\",\n )}\n </span>\n </div>\n <p className=\"mt-1 text-sm text-[var(--color-status-error-text)]\">\n {error.message}\n </p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={refetch}\n className=\"mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]\"\n >\n {tr(\"fluidgrids.executions.executionsList.retryButton\", \"Retry\")}\n </Button>\n </div>\n )}\n\n {/* Executions View — switches between table, cards, and timeline */}\n {viewMode === \"table\" && (\n <ExecutionTable\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onRowClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"cards\" && (\n <ExecutionCards\n workflowNames={workflowNames}\n executions={executions}\n loading={loading}\n onCardClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n {viewMode === \"timeline\" && (\n <ExecutionTimeline\n executions={executions}\n loading={loading}\n onItemClick={handleRowClick}\n onAction={handleAction}\n />\n )}\n\n {/* Pagination */}\n <Pagination totalItems={total} />\n </div>\n );\n}\n"]}
|