@elqnt/workflow 2.0.0 → 2.0.5
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/chunk-H24IF5AA.js +307 -0
- package/dist/chunk-H24IF5AA.js.map +1 -0
- package/dist/{chunk-CZAV6SMB.mjs → chunk-YCEGKVXP.mjs} +3 -1
- package/dist/chunk-YCEGKVXP.mjs.map +1 -0
- package/dist/{index-BDCA9Cs7.d.mts → index-B4xiOlL7.d.mts} +3 -8
- package/dist/{index-BDCA9Cs7.d.ts → index-B4xiOlL7.d.ts} +3 -8
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -1
- package/dist/index.mjs.map +1 -1
- package/dist/models/index.d.mts +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.js +4 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/index.mjs +3 -1
- package/package.json +1 -1
- package/dist/chunk-CZAV6SMB.mjs.map +0 -1
- package/dist/chunk-GYLRUX77.js +0 -305
- package/dist/chunk-GYLRUX77.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/eloquent-packages/eloquent-packages/packages/workflow/dist/index.js","../components/dynamic-schema-form.tsx","../components/schema-builder.tsx","../store/workflow-definition-slice.ts","../store/workflow-instance-slice.ts","../schema/schemas.ts"],"names":[],"mappings":"AAAA,6rBAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACA;ACrJA,8BAAkC;AAuQtB,+CAAA;AAzIL,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,MAAA,EAAQ,CAAC,CAAA;AAAA,EACT,QAAA;AAAA,EACA,SAAA,EAAW,KAAA;AAAA,EACX,KAAA,EAAO,CAAC,CAAA;AAAA,EACR,UAAA;AAAA,EACA,UAAA,EAAY,CAAC,CAAA;AAAA,EACb,mBAAA,EAAqB;AACvB,CAAA,EAA2B;AACzB,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,EAAA,EAAI,6BAAA;AAAA,oBAChD,IAAI,GAAA,CAAI;AAAA,EACV,CAAA;AACA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,EAAA,EAAI,6BAAA;AAAA,oBACpD,IAAI,G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;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACa,UAAA;AACH,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACiB,IAAA;AACP,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACK,UAAA;AACP,UAAA;AACC,UAAA;AACS,QAAA;AACpB,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACM,UAAA;AACG,QAAA;AACpB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACS,QAAA;AACpB,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACkB,QAAA;AACpB,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,UAAA;AACkB,QAAA;AACpB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACO,QAAA;AACpB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACO,QAAA;AACpB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACO,QAAA;AACpB,QAAA;AACO,UAAA;AACG,UAAA;AACC,UAAA;AACS,QAAA;AACpB,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACU,UAAA;AACZ,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACI,UAAA;AACN,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACI,UAAA;AACN,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACO,UAAA;AACT,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACO,MAAA;AACD,QAAA;AACG,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACM,UAAA;AACJ,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACA,QAAA;AACb,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACM,UAAA;AACP,YAAA;AACN,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACL,UAAA;AACG,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACiB,IAAA;AACP,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACsB,IAAA;AACZ,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,IAAA;AACX,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACa,IAAA;AACH,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,YAAA;AACC,YAAA;AACM,cAAA;AACG,gBAAA;AACL,gBAAA;AACC,cAAA;AACX,cAAA;AACM,gBAAA;AACI,gBAAA;AACC,cAAA;AACX,cAAA;AACQ,gBAAA;AACE,gBAAA;AACC,cAAA;AACX,cAAA;AACU,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACU,UAAA;AACA,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACH,UAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACG,UAAA;AACL,UAAA;AACC,YAAA;AACC,UAAA;AACV,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACK,UAAA;AACP,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACS,IAAA;AACC,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACa,UAAA;AACH,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC0B,IAAA;AAChB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACF,UAAA;AACA,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACM,YAAA;AACG,cAAA;AACL,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC6B,IAAA;AACnB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC0B,IAAA;AAChB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACJ,UAAA;AACE,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACY,IAAA;AACF,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,QAAA;AACiB,UAAA;AACP,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACW,IAAA;AACD,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,YAAA;AACM,cAAA;AACH,gBAAA;AACC,gBAAA;AACC,gBAAA;AACM,cAAA;AACjB,cAAA;AACY,gBAAA;AACF,gBAAA;AACC,gBAAA;AACD,kBAAA;AACN,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACF,cAAA;AACF,cAAA;AACS,gBAAA;AACC,gBAAA;AACC,gBAAA;AACM,cAAA;AACjB,YAAA;AACF,YAAA;AACY,cAAA;AACV,cAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACH,YAAA;AACN,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,YAAA;AACM,cAAA;AACC,gBAAA;AACH,gBAAA;AACC,gBAAA;AACD,kBAAA;AACN,kBAAA;AACA,gBAAA;AACF,cAAA;AACF,cAAA;AACM,gBAAA;AACI,gBAAA;AACC,cAAA;AACX,cAAA;AACU,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,YAAA;AACF,YAAA;AACY,cAAA;AACV,cAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACO,UAAA;AACT,QAAA;AACV,QAAA;AACa,UAAA;AACH,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACe,IAAA;AACL,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACH,UAAA;AACC,UAAA;AACC,UAAA;AACA,YAAA;AACC,YAAA;AACM,cAAA;AACF,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,cAAA;AACS,gBAAA;AACC,gBAAA;AACC,cAAA;AACX,YAAA;AACF,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACM,YAAA;AACC,cAAA;AACH,cAAA;AACC,cAAA;AACA,gBAAA;AACC,cAAA;AACV,YAAA;AACF,YAAA;AACe,cAAA;AACL,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACa,cAAA;AACH,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACS,cAAA;AACC,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACM,YAAA;AACC,cAAA;AACH,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACM,YAAA;AACJ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACO,UAAA;AACT,UAAA;AACC,UAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACoB,IAAA;AACV,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACG,UAAA;AACL,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACe,UAA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CA,IAAA;AACA,EAAA;AACX,EAAA;AACS,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACS,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACU,IAAA;AACC,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACW,IAAA;AACA,IAAA;AACA,EAAA;AAEb;AAKO;AAA8D,EAAA;AAC1D,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACQ,IAAA;AACG,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACU,IAAA;AACC,IAAA;AACA,EAAA;AACX,EAAA;AACgB,IAAA;AACL,IAAA;AACA,EAAA;AAEb;ALgrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/eloquent-packages/eloquent-packages/packages/workflow/dist/index.js","sourcesContent":[null,"\"use client\";\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { useState, useMemo } from \"react\";\n\n// UI Components - these will be imported from the app's components\n// We use a render props pattern to allow apps to provide their own UI components\nexport interface DynamicSchemaFormUIComponents {\n Input: React.ComponentType<{\n type?: string;\n value: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n min?: number;\n max?: number;\n step?: string | number;\n }>;\n Label: React.ComponentType<{\n htmlFor?: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Textarea: React.ComponentType<{\n value: any;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n disabled?: boolean;\n rows?: number;\n className?: string;\n placeholder?: string;\n }>;\n Checkbox: React.ComponentType<{\n id?: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n disabled?: boolean;\n }>;\n Select: React.ComponentType<{\n value: string;\n onValueChange: (value: string) => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n SelectTrigger: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n SelectValue: React.ComponentType<{\n placeholder?: string;\n }>;\n SelectContent: React.ComponentType<{\n children: React.ReactNode;\n }>;\n SelectItem: React.ComponentType<{\n value: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Button: React.ComponentType<{\n type?: \"button\" | \"submit\" | \"reset\";\n variant?: string;\n size?: string;\n className?: string;\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n Card: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n // Icons\n PlusIcon: React.ComponentType<{ className?: string }>;\n TrashIcon: React.ComponentType<{ className?: string }>;\n ChevronDownIcon: React.ComponentType<{ className?: string }>;\n ChevronRightIcon: React.ComponentType<{ className?: string }>;\n VariableIcon?: React.ComponentType<{ className?: string }>;\n CheckIcon?: React.ComponentType<{ className?: string }>;\n EditIcon?: React.ComponentType<{ className?: string }>;\n // Popover components for variable picker (optional)\n Popover?: React.ComponentType<{ open?: boolean; onOpenChange?: (open: boolean) => void; children: React.ReactNode }>;\n PopoverTrigger?: React.ComponentType<{ asChild?: boolean; children: React.ReactNode }>;\n PopoverContent?: React.ComponentType<{ className?: string; align?: \"start\" | \"center\" | \"end\"; children: React.ReactNode }>;\n // Dialog components for rich text editor (optional)\n Dialog?: React.ComponentType<{ open?: boolean; onOpenChange?: (open: boolean) => void; children: React.ReactNode }>;\n DialogContent?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogHeader?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogTitle?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogFooter?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n // ScrollArea for variable picker in dialog\n ScrollArea?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n // MarkdownEditor for richtext fields\n MarkdownEditor?: React.ComponentType<{\n content: string;\n onChange: (markdown: string) => void;\n placeholder?: string;\n className?: string;\n readOnly?: boolean;\n minHeight?: string;\n variables?: Array<{ name: string; path: string; title?: string }>;\n }>;\n // Utility\n cn: (...classes: (string | undefined | null | false)[]) => string;\n}\n\n/**\n * Variable definition for workflow variables\n */\nexport interface WorkflowVariable {\n name: string;\n type: string; // JSON Schema type: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n title?: string;\n path: string; // Full path like \"variables.customerEmail\" or \"input.recordId\"\n}\n\nexport interface DynamicSchemaFormProps {\n schema: JSONSchema;\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n path?: string[];\n components: DynamicSchemaFormUIComponents;\n /** Workflow variables available for selection */\n variables?: WorkflowVariable[];\n /** Whether to show variable picker buttons */\n showVariablePicker?: boolean;\n}\n\nexport function DynamicSchemaForm({\n schema,\n value = {},\n onChange,\n disabled = false,\n path = [],\n components,\n variables = [],\n showVariablePicker = false,\n}: DynamicSchemaFormProps) {\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(\n new Set()\n );\n const [openVariablePickers, setOpenVariablePickers] = useState<Set<string>>(\n new Set()\n );\n const [openRichTextDialogs, setOpenRichTextDialogs] = useState<Set<string>>(\n new Set()\n );\n const [richTextDraftValues, setRichTextDraftValues] = useState<Record<string, string>>({});\n\n const {\n Input,\n Label,\n Textarea,\n Checkbox,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n Button,\n Card,\n PlusIcon,\n TrashIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n VariableIcon,\n CheckIcon,\n EditIcon,\n Popover,\n PopoverTrigger,\n PopoverContent,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n ScrollArea,\n MarkdownEditor,\n cn,\n } = components;\n\n // Check if a value is a variable reference (e.g., \"{{variables.email}}\")\n const isVariableReference = (val: any): boolean => {\n return typeof val === \"string\" && val.startsWith(\"{{\") && val.endsWith(\"}}\");\n };\n\n // Get variables that match a specific JSON Schema type\n const getMatchingVariables = (fieldType: string | undefined): WorkflowVariable[] => {\n if (!fieldType) return variables;\n\n // Type compatibility mapping\n const compatibleTypes: Record<string, string[]> = {\n string: [\"string\"],\n number: [\"number\", \"integer\"],\n integer: [\"number\", \"integer\"],\n boolean: [\"boolean\"],\n object: [\"object\"],\n array: [\"array\"],\n };\n\n const compatible = compatibleTypes[fieldType] || [fieldType];\n return variables.filter((v) => compatible.includes(v.type));\n };\n\n // Toggle variable picker for a field\n const toggleVariablePicker = (fieldPath: string) => {\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n if (next.has(fieldPath)) {\n next.delete(fieldPath);\n } else {\n next.add(fieldPath);\n }\n return next;\n });\n };\n\n // Render a variable picker button for a field\n const renderVariablePicker = (\n fieldName: string,\n fieldType: string | undefined,\n fieldPath: string,\n onSelect: (variablePath: string) => void\n ) => {\n // Don't render if showVariablePicker is false\n if (!showVariablePicker) {\n return null;\n }\n\n // Need at least VariableIcon and Popover components to render\n if (!VariableIcon || !Popover || !PopoverTrigger || !PopoverContent) {\n return null;\n }\n\n const matchingVars = getMatchingVariables(fieldType);\n const isOpen = openVariablePickers.has(fieldPath);\n const currentValue = value[fieldName];\n const isVariable = isVariableReference(currentValue);\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={(open) => {\n if (open) {\n setOpenVariablePickers((prev) => new Set(prev).add(fieldPath));\n } else {\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }\n }}\n >\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"h-8 px-2 shrink-0\",\n isVariable && \"border-primary text-primary\"\n )}\n disabled={disabled}\n >\n <VariableIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-56 p-1\" align=\"end\">\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1.5\">\n Select Variable ({fieldType || \"any\"})\n </div>\n <div className=\"max-h-48 overflow-y-auto\">\n {matchingVars.length === 0 ? (\n <div className=\"px-2 py-3 text-xs text-muted-foreground text-center\">\n No variables available.\n <br />\n <span className=\"text-[10px]\">\n Add variables in Workflow Settings → Variables\n </span>\n </div>\n ) : (\n matchingVars.map((variable) => {\n const varRef = `{{${variable.path}}}`;\n const isSelected = currentValue === varRef;\n return (\n <button\n key={variable.path}\n type=\"button\"\n className={cn(\n \"w-full text-left px-2 py-1.5 text-xs rounded hover:bg-accent flex items-center justify-between\",\n isSelected && \"bg-accent\"\n )}\n onClick={() => {\n onSelect(varRef);\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n <div>\n <div className=\"font-medium\">{variable.title || variable.name}</div>\n <div className=\"text-[10px] text-muted-foreground font-mono\">\n {variable.path}\n </div>\n </div>\n {isSelected && CheckIcon && <CheckIcon className=\"h-3 w-3\" />}\n </button>\n );\n })\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n };\n\n const toggleSection = (key: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n return next;\n });\n };\n\n const handleFieldChange = (fieldName: string, fieldValue: any) => {\n onChange({\n ...value,\n [fieldName]: fieldValue,\n });\n };\n\n const renderField = (\n fieldSchema: JSONSchema,\n fieldName: string,\n fieldValue: any\n ) => {\n const fieldPath = [...path, fieldName].join(\".\");\n const isRequired = schema.required?.includes(fieldName);\n\n // Handle enum (dropdown)\n if (fieldSchema.enum) {\n const labels =\n (fieldSchema as any)[\"x-enumLabels\"] || fieldSchema.enum;\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Select\n value={fieldValue || \"\"}\n onValueChange={(v) => handleFieldChange(fieldName, v)}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue\n placeholder={`Select ${fieldSchema.title || fieldName}`}\n />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option: any, idx: number) => (\n <SelectItem key={option} value={option} className=\"text-xs\">\n {labels[idx] || option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Handle nested objects\n if (fieldSchema.type === \"object\" && fieldSchema.properties) {\n const isCollapsed = collapsedSections.has(fieldPath);\n return (\n <div key={fieldPath} className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => toggleSection(fieldPath)}\n className=\"flex items-center gap-1 text-xs font-medium text-gray-700 hover:text-gray-900\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"h-3 w-3\" />\n ) : (\n <ChevronDownIcon className=\"h-3 w-3\" />\n )}\n {fieldSchema.title || fieldName}\n </button>\n {!isCollapsed && (\n <Card className=\"p-3 bg-gray-50/50\">\n <DynamicSchemaForm\n schema={fieldSchema}\n value={fieldValue || {}}\n onChange={(v) => handleFieldChange(fieldName, v)}\n disabled={disabled}\n path={[...path, fieldName]}\n components={components}\n variables={variables}\n showVariablePicker={showVariablePicker}\n />\n </Card>\n )}\n </div>\n );\n }\n\n // Handle arrays\n if (fieldSchema.type === \"array\" && fieldSchema.items) {\n const arrayValue = Array.isArray(fieldValue) ? fieldValue : [];\n const itemSchema = fieldSchema.items as JSONSchema;\n\n return (\n <div key={fieldPath} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 text-xs px-2\"\n onClick={() => {\n const newItem = itemSchema.type === \"object\" ? {} : \"\";\n handleFieldChange(fieldName, [...arrayValue, newItem]);\n }}\n disabled={disabled}\n >\n <PlusIcon className=\"h-3 w-3 mr-1\" />\n Add\n </Button>\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n <div className=\"space-y-2\">\n {arrayValue.map((item: any, index: number) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n {itemSchema.type === \"object\" ? (\n <Card className=\"p-2 bg-gray-50/50\">\n <DynamicSchemaForm\n schema={itemSchema}\n value={item}\n onChange={(v) => {\n const newArray = [...arrayValue];\n newArray[index] = v;\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n path={[...path, fieldName, String(index)]}\n components={components}\n variables={variables}\n showVariablePicker={showVariablePicker}\n />\n </Card>\n ) : (\n <Input\n value={item || \"\"}\n onChange={(e) => {\n const newArray = [...arrayValue];\n newArray[index] = e.target.value;\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n className=\"h-8 text-xs\"\n />\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-red-500 hover:text-red-700\"\n onClick={() => {\n const newArray = arrayValue.filter(\n (_: any, i: number) => i !== index\n );\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n >\n <TrashIcon className=\"h-3 w-3\" />\n </Button>\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n // Handle boolean\n if (fieldSchema.type === \"boolean\") {\n return (\n <div key={fieldPath} className=\"flex items-center space-x-2\">\n <Checkbox\n id={fieldPath}\n checked={!!fieldValue}\n onCheckedChange={(checked) => handleFieldChange(fieldName, checked)}\n disabled={disabled}\n />\n <Label htmlFor={fieldPath} className=\"text-xs font-normal\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {fieldSchema.description && (\n <span className=\"text-[10px] text-muted-foreground ml-2\">\n ({fieldSchema.description})\n </span>\n )}\n </div>\n );\n }\n\n // Handle number/integer\n if (fieldSchema.type === \"number\" || fieldSchema.type === \"integer\") {\n const isVarValue = isVariableReference(fieldValue);\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <Input\n type={isVarValue ? \"text\" : \"number\"}\n value={fieldValue ?? \"\"}\n onChange={(e) => {\n if (isVariableReference(e.target.value)) {\n handleFieldChange(fieldName, e.target.value);\n } else {\n const val =\n e.target.value === \"\" ? undefined : Number(e.target.value);\n handleFieldChange(fieldName, val);\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n step={fieldSchema.type === \"integer\" ? 1 : \"any\"}\n disabled={disabled}\n className={cn(\"h-8 text-xs flex-1\", isVarValue && \"font-mono text-primary\")}\n />\n {renderVariablePicker(fieldName, fieldSchema.type, fieldPath, (varPath) =>\n handleFieldChange(fieldName, varPath)\n )}\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Handle string with format\n if (fieldSchema.type === \"string\") {\n // Rich text editor - opens in dialog\n if (fieldSchema.format === \"richtext\") {\n const isDialogOpen = openRichTextDialogs.has(fieldPath);\n const draftValue = richTextDraftValues[fieldPath] ?? fieldValue ?? \"\";\n const previewText = (fieldValue || \"\").replace(/<[^>]*>/g, \"\").slice(0, 50);\n const matchingVars = getMatchingVariables(\"string\");\n\n // Check if Dialog components are available\n if (!Dialog || !DialogContent || !DialogHeader || !DialogTitle || !DialogFooter) {\n // Fallback to regular textarea if Dialog not provided\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n <Textarea\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n rows={3}\n className=\"text-xs\"\n placeholder={fieldSchema.description}\n />\n </div>\n );\n }\n\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <div className=\"flex-1 min-w-0 px-2 py-1.5 bg-muted/50 rounded text-xs text-muted-foreground truncate border\">\n {previewText || <span className=\"italic\">Click edit to add content...</span>}\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 px-2 shrink-0\"\n onClick={() => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: fieldValue || \"\" }));\n setOpenRichTextDialogs((prev) => new Set(prev).add(fieldPath));\n }}\n disabled={disabled}\n >\n {EditIcon ? <EditIcon className=\"h-3.5 w-3.5\" /> : \"Edit\"}\n </Button>\n </div>\n\n <Dialog\n open={isDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }\n }}\n >\n <DialogContent className=\"max-w-3xl max-h-[85vh] flex flex-col\">\n <DialogHeader>\n <DialogTitle>Edit {fieldSchema.title || fieldName}</DialogTitle>\n </DialogHeader>\n <div className=\"flex-1 overflow-hidden flex flex-col min-h-0\">\n {MarkdownEditor ? (\n <MarkdownEditor\n content={draftValue}\n onChange={(value) => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: value }));\n }}\n placeholder=\"Enter content... Use {{variables.name}} for dynamic values\"\n minHeight=\"300px\"\n variables={showVariablePicker ? matchingVars : []}\n />\n ) : (\n <>\n <Textarea\n value={draftValue}\n onChange={(e) => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: e.target.value }));\n }}\n rows={12}\n className=\"flex-1 text-sm font-mono resize-none\"\n placeholder=\"Enter content... Use {{variables.name}} for dynamic values\"\n />\n\n {/* Variable picker in dialog (fallback when no MarkdownEditor) */}\n {showVariablePicker && matchingVars.length > 0 && (\n <div className=\"border rounded-md p-2 bg-muted/30 mt-3\">\n <p className=\"text-xs font-medium mb-2\">Insert Variable:</p>\n <div className=\"flex flex-wrap gap-1\">\n {matchingVars.map((variable) => (\n <Button\n key={variable.path}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 text-xs px-2\"\n onClick={() => {\n const varRef = `{{${variable.path}}}`;\n setRichTextDraftValues((prev) => ({\n ...prev,\n [fieldPath]: (prev[fieldPath] || \"\") + varRef,\n }));\n }}\n >\n {variable.title || variable.name}\n </Button>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n onClick={() => {\n handleFieldChange(fieldName, draftValue);\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n Save\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n }\n\n // Multiline / textarea\n if (\n fieldSchema.format === \"multiline\" ||\n fieldSchema.format === \"textarea\"\n ) {\n const isVarValue = isVariableReference(fieldValue);\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n <Textarea\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n rows={3}\n className={cn(\"text-xs\", isVarValue && \"font-mono text-primary\")}\n placeholder={fieldSchema.description}\n />\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Regular string input\n const inputType =\n fieldSchema.format === \"email\"\n ? \"email\"\n : fieldSchema.format === \"uri\" || fieldSchema.format === \"url\"\n ? \"url\"\n : fieldSchema.format === \"password\"\n ? \"password\"\n : \"text\";\n\n const isVarValue = isVariableReference(fieldValue);\n\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <Input\n type={inputType}\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n className={cn(\"h-8 text-xs flex-1\", isVarValue && \"font-mono text-primary\")}\n placeholder={fieldSchema.description}\n />\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Fallback for unknown types\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Input\n value={\n typeof fieldValue === \"object\"\n ? JSON.stringify(fieldValue)\n : fieldValue || \"\"\n }\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value);\n handleFieldChange(fieldName, parsed);\n } catch {\n handleFieldChange(fieldName, e.target.value);\n }\n }}\n disabled={disabled}\n className=\"h-8 text-xs font-mono\"\n />\n <p className=\"text-[10px] text-muted-foreground\">\n Type: {fieldSchema.type || \"unknown\"}\n </p>\n </div>\n );\n };\n\n // Render root object properties\n if (schema.type === \"object\" && schema.properties) {\n const sortedProperties = Object.entries(schema.properties).sort(\n ([, a], [, b]) => {\n const orderA = (a as any)[\"x-displayOrder\"] ?? 999;\n const orderB = (b as any)[\"x-displayOrder\"] ?? 999;\n return orderA - orderB;\n }\n );\n\n return (\n <div className=\"space-y-3\">\n {sortedProperties.map(([fieldName, fieldSchema]) =>\n renderField(fieldSchema as JSONSchema, fieldName, value[fieldName])\n )}\n </div>\n );\n }\n\n // If schema is not an object with properties, show message\n return (\n <p className=\"text-xs text-muted-foreground text-center py-4\">\n No configuration required for this node.\n </p>\n );\n}\n","\"use client\";\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { useState } from \"react\";\n\n// UI Components interface - same pattern as DynamicSchemaForm\nexport interface SchemaBuilderUIComponents {\n Input: React.ComponentType<{\n value: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n }>;\n Label: React.ComponentType<{\n htmlFor?: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Checkbox: React.ComponentType<{\n id?: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n disabled?: boolean;\n }>;\n Select: React.ComponentType<{\n value: string;\n onValueChange: (value: string) => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n SelectTrigger: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n SelectValue: React.ComponentType<{\n placeholder?: string;\n }>;\n SelectContent: React.ComponentType<{\n children: React.ReactNode;\n }>;\n SelectItem: React.ComponentType<{\n value: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Button: React.ComponentType<{\n type?: \"button\" | \"submit\" | \"reset\";\n variant?: string;\n size?: string;\n className?: string;\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n Card: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n // Icons\n PlusIcon: React.ComponentType<{ className?: string }>;\n TrashIcon: React.ComponentType<{ className?: string }>;\n GripVerticalIcon: React.ComponentType<{ className?: string }>;\n ChevronDownIcon: React.ComponentType<{ className?: string }>;\n ChevronRightIcon: React.ComponentType<{ className?: string }>;\n // Utility\n cn: (...classes: (string | undefined | null | false)[]) => string;\n}\n\nexport interface SchemaBuilderProps {\n schema: JSONSchema;\n onChange: (schema: JSONSchema) => void;\n disabled?: boolean;\n components: SchemaBuilderUIComponents;\n}\n\ninterface FieldDefinition {\n name: string;\n type: string;\n title: string;\n description: string;\n required: boolean;\n format?: string;\n enum?: string[];\n items?: { type: string };\n}\n\nconst FIELD_TYPES = [\n { value: \"string\", label: \"Text\" },\n { value: \"number\", label: \"Number\" },\n { value: \"integer\", label: \"Integer\" },\n { value: \"boolean\", label: \"Boolean\" },\n { value: \"array\", label: \"Array\" },\n { value: \"object\", label: \"Object\" },\n];\n\nconst STRING_FORMATS = [\n { value: \"plain\", label: \"Plain Text\" },\n { value: \"email\", label: \"Email\" },\n { value: \"uri\", label: \"URL\" },\n { value: \"date\", label: \"Date\" },\n { value: \"date-time\", label: \"Date & Time\" },\n { value: \"multiline\", label: \"Multiline Text\" },\n];\n\nexport function SchemaBuilder({\n schema,\n onChange,\n disabled = false,\n components,\n}: SchemaBuilderProps) {\n const [expandedFields, setExpandedFields] = useState<Set<string>>(new Set());\n\n const {\n Input,\n Label,\n Checkbox,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n Button,\n Card,\n PlusIcon,\n TrashIcon,\n GripVerticalIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n } = components;\n\n // Convert schema to field definitions\n const getFieldsFromSchema = (): FieldDefinition[] => {\n if (!schema?.properties) return [];\n\n return Object.entries(schema.properties).map(([name, prop]) => {\n const fieldSchema = prop as JSONSchema;\n return {\n name,\n type: fieldSchema.type || \"string\",\n title: fieldSchema.title || name,\n description: fieldSchema.description || \"\",\n required: schema.required?.includes(name) || false,\n format: fieldSchema.format,\n enum: fieldSchema.enum,\n items: fieldSchema.items as { type: string } | undefined,\n };\n });\n };\n\n const fields = getFieldsFromSchema();\n\n // Convert field definitions back to schema\n const updateSchema = (newFields: FieldDefinition[]) => {\n const properties: Record<string, JSONSchema> = {};\n const required: string[] = [];\n\n newFields.forEach((field) => {\n if (!field.name) return;\n\n const fieldSchema: JSONSchema = {\n type: field.type,\n title: field.title || field.name,\n };\n\n if (field.description) {\n fieldSchema.description = field.description;\n }\n\n if (field.format && field.format !== \"plain\") {\n fieldSchema.format = field.format;\n }\n\n if (field.enum && field.enum.length > 0) {\n fieldSchema.enum = field.enum;\n }\n\n if (field.type === \"array\" && field.items) {\n fieldSchema.items = field.items;\n }\n\n properties[field.name] = fieldSchema;\n\n if (field.required) {\n required.push(field.name);\n }\n });\n\n onChange({\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n });\n };\n\n const addField = () => {\n const newFieldName = `field_${fields.length + 1}`;\n const newFields: FieldDefinition[] = [\n ...fields,\n {\n name: newFieldName,\n type: \"string\",\n title: \"\",\n description: \"\",\n required: false,\n },\n ];\n updateSchema(newFields);\n setExpandedFields((prev) => new Set([...prev, newFieldName]));\n };\n\n const updateField = (index: number, updates: Partial<FieldDefinition>) => {\n const newFields = [...fields];\n newFields[index] = { ...newFields[index], ...updates };\n updateSchema(newFields);\n };\n\n const removeField = (index: number) => {\n const newFields = fields.filter((_, i) => i !== index);\n updateSchema(newFields);\n };\n\n const toggleExpand = (name: string) => {\n setExpandedFields((prev) => {\n const next = new Set(prev);\n if (next.has(name)) {\n next.delete(name);\n } else {\n next.add(name);\n }\n return next;\n });\n };\n\n return (\n <div className=\"space-y-2\">\n {fields.length === 0 ? (\n <p className=\"text-xs text-muted-foreground italic py-3\">\n No fields defined. Click "Add Field" to create one.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {fields.map((field, index) => {\n const isExpanded = expandedFields.has(field.name);\n return (\n <Card key={index} className=\"p-3 bg-gray-50/50\">\n {/* Field Header Row 1: Name and Delete */}\n <div className=\"flex items-center gap-2 mb-2\">\n <GripVerticalIcon className=\"h-4 w-4 text-gray-300 flex-shrink-0 cursor-grab\" />\n\n <button\n type=\"button\"\n onClick={() => toggleExpand(field.name)}\n className=\"flex-shrink-0 p-1 hover:bg-gray-200 rounded\"\n >\n {isExpanded ? (\n <ChevronDownIcon className=\"h-4 w-4 text-gray-500\" />\n ) : (\n <ChevronRightIcon className=\"h-4 w-4 text-gray-500\" />\n )}\n </button>\n\n {/* Field Name */}\n <div className=\"flex-1\">\n <Input\n value={field.name}\n onChange={(e) => {\n const oldName = field.name;\n const newName = e.target.value\n .toLowerCase()\n .replace(/\\s+/g, \"_\")\n .replace(/[^a-z0-9_]/g, \"\");\n updateField(index, { name: newName });\n if (expandedFields.has(oldName)) {\n setExpandedFields((prev) => {\n const next = new Set(prev);\n next.delete(oldName);\n next.add(newName);\n return next;\n });\n }\n }}\n placeholder=\"field_name\"\n className=\"h-9 text-sm font-mono\"\n disabled={disabled}\n />\n </div>\n\n {/* Delete button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 text-red-500 hover:text-red-700 hover:bg-red-50 flex-shrink-0\"\n onClick={() => removeField(index)}\n disabled={disabled}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Field Header Row 2: Type and Required */}\n <div className=\"flex items-center gap-3 pl-10\">\n {/* Field Type */}\n <div className=\"flex-1\">\n <Select\n value={field.type}\n onValueChange={(v) => updateField(index, { type: v })}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FIELD_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Required checkbox */}\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <Checkbox\n id={`required-${index}`}\n checked={field.required}\n onCheckedChange={(checked) =>\n updateField(index, { required: !!checked })\n }\n disabled={disabled}\n />\n <Label\n htmlFor={`required-${index}`}\n className=\"text-sm text-muted-foreground\"\n >\n Required\n </Label>\n </div>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && (\n <div className=\"mt-3 pt-3 border-t space-y-3 pl-10\">\n {/* Title */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Display Title\n </Label>\n <Input\n value={field.title}\n onChange={(e) =>\n updateField(index, { title: e.target.value })\n }\n placeholder=\"Human readable title\"\n className=\"h-9 text-sm\"\n disabled={disabled}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Description\n </Label>\n <Input\n value={field.description}\n onChange={(e) =>\n updateField(index, { description: e.target.value })\n }\n placeholder=\"Help text for this field\"\n className=\"h-9 text-sm\"\n disabled={disabled}\n />\n </div>\n\n {/* String Format */}\n {field.type === \"string\" && (\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Format\n </Label>\n <Select\n value={field.format || \"plain\"}\n onValueChange={(v) =>\n updateField(index, { format: v })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STRING_FORMATS.map((format) => (\n <SelectItem key={format.value} value={format.value}>\n {format.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Array Item Type */}\n {field.type === \"array\" && (\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Item Type\n </Label>\n <Select\n value={field.items?.type || \"string\"}\n onValueChange={(v) =>\n updateField(index, { items: { type: v } })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FIELD_TYPES.filter((t) => t.value !== \"array\").map(\n (type) => (\n <SelectItem key={type.value} value={type.value}>\n {type.label}\n </SelectItem>\n )\n )}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Enum Options (for dropdowns) */}\n {field.type === \"string\" && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">\n Dropdown Options (optional)\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => {\n const currentEnum = field.enum || [];\n updateField(index, {\n enum: [\n ...currentEnum,\n `option_${currentEnum.length + 1}`,\n ],\n });\n }}\n disabled={disabled}\n >\n <PlusIcon className=\"h-3 w-3 mr-1\" />\n Add Option\n </Button>\n </div>\n {field.enum && field.enum.length > 0 && (\n <div className=\"space-y-2\">\n {field.enum.map((option, optIdx) => (\n <div key={optIdx} className=\"flex items-center gap-2\">\n <Input\n value={option}\n onChange={(e) => {\n const newEnum = [...(field.enum || [])];\n newEnum[optIdx] = e.target.value;\n updateField(index, { enum: newEnum });\n }}\n placeholder={`Option ${optIdx + 1}`}\n className=\"h-8 text-sm flex-1\"\n disabled={disabled}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-red-400 hover:text-red-600\"\n onClick={() => {\n const newEnum = (field.enum || []).filter(\n (_, i) => i !== optIdx\n );\n updateField(index, {\n enum:\n newEnum.length > 0 ? newEnum : undefined,\n });\n }}\n disabled={disabled}\n >\n <TrashIcon className=\"h-3 w-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </Card>\n );\n })}\n </div>\n )}\n\n {/* Add Field Button */}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full h-9 text-sm\"\n onClick={addField}\n disabled={disabled}\n >\n <PlusIcon className=\"h-4 w-4 mr-2\" />\n Add Field\n </Button>\n </div>\n );\n}\n","// workflow-definition-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { WorkflowDefinition } from \"../models\";\n\nexport interface WorkflowDefinitionState {\n definitions: Record<string, WorkflowDefinition>;\n selectedDefinition?: WorkflowDefinition;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface WorkflowDefinitionSelector {\n workflowDefinition: WorkflowDefinitionState;\n}\n\nconst initialState: WorkflowDefinitionState = {\n definitions: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst workflowDefinitionSlice = createSlice({\n name: \"workflowDefinition\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setDefinitions: (state, action: PayloadAction<WorkflowDefinition[]>) => {\n state.definitions = action.payload.reduce(\n (acc, def) => {\n if (def.id) {\n acc[def.id] = def;\n }\n return acc;\n },\n {} as Record<string, WorkflowDefinition>\n );\n },\n addDefinition: (state, action: PayloadAction<WorkflowDefinition>) => {\n const definition = action.payload;\n if (definition.id) {\n state.definitions[definition.id] = definition;\n }\n },\n updateDefinition: (state, action: PayloadAction<WorkflowDefinition>) => {\n const definition = action.payload;\n if (definition.id) {\n state.definitions[definition.id] = definition;\n }\n if (state.selectedDefinition?.id === definition.id) {\n state.selectedDefinition = definition;\n }\n },\n removeDefinition: (state, action: PayloadAction<string>) => {\n delete state.definitions[action.payload];\n if (state.selectedDefinition?.id === action.payload) {\n state.selectedDefinition = undefined;\n }\n },\n setSelectedDefinition: (\n state,\n action: PayloadAction<WorkflowDefinition | undefined>\n ) => {\n state.selectedDefinition = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setDefinitions,\n addDefinition,\n updateDefinition,\n removeDefinition,\n setSelectedDefinition,\n} = workflowDefinitionSlice.actions;\n\nexport const workflowDefinitionReducer = workflowDefinitionSlice.reducer;","// workflow-instance-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { WorkflowInstance } from \"../models\";\n\nexport interface WorkflowInstanceState {\n instances: Record<string, WorkflowInstance>;\n selectedInstance?: WorkflowInstance;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface WorkflowInstanceSelector {\n workflowInstance: WorkflowInstanceState;\n}\n\nconst initialState: WorkflowInstanceState = {\n instances: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst workflowInstanceSlice = createSlice({\n name: \"workflowInstance\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setInstances: (state, action: PayloadAction<WorkflowInstance[]>) => {\n state.instances = action.payload.reduce(\n (acc, inst) => {\n if (inst.id) {\n acc[inst.id] = inst;\n }\n return acc;\n },\n {} as Record<string, WorkflowInstance>\n );\n },\n updateInstance: (state, action: PayloadAction<WorkflowInstance>) => {\n const instance = action.payload;\n if (instance.id) {\n state.instances[instance.id] = instance;\n }\n if (state.selectedInstance?.id === instance.id) {\n state.selectedInstance = instance;\n }\n },\n setSelectedInstance: (\n state,\n action: PayloadAction<WorkflowInstance | undefined>\n ) => {\n state.selectedInstance = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setInstances,\n updateInstance,\n setSelectedInstance,\n} = workflowInstanceSlice.actions;\n\nexport const workflowInstanceReducer = workflowInstanceSlice.reducer;","// Generated file - DO NOT EDIT\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { NodeType, NodeDefinition, EdgeTypeDefinition, WorkflowTypeDefinition } from \"../models/workflow\";\n\n// Type-safe NodeSubType union (generated from Go NodeDefinitions)\nexport type NodeSubTypeTS = \"actionAIClassify\" | \"actionAIExtractData\" | \"actionAISummarize\" | \"actionApiCall\" | \"actionAssignSLAPolicy\" | \"actionCreateEntityRecord\" | \"actionDeleteEntityRecord\" | \"actionDocumentExtraction\" | \"actionNatsRequest\" | \"actionQueryEntityRecords\" | \"actionSendEmail\" | \"actionSendSMS\" | \"actionSetVariables\" | \"actionUpdateEntityRecord\" | \"agentChat\" | \"agentCustomResponse\" | \"agentIntentDetector\" | \"agentKnowledgeGraph\" | \"agentOpenTicket\" | \"agentStructuredOutput\" | \"agentTransferToHuman\" | \"delay\" | \"humanActionApproval\" | \"humanActionAssignment\" | \"humanActionDataEntry\" | \"humanActionReview\" | \"integrationCreateEvent\" | \"integrationGetDriveFile\" | \"integrationSearchCalendar\" | \"integrationSearchDrive\" | \"integrationSearchEmails\" | \"integrationSendEmail\" | \"logicFor\" | \"logicIf\" | \"logicSwitch\" | \"triggerCalendarEvent\" | \"triggerDriveFileChanged\" | \"triggerEmailReceived\" | \"triggerEntityRecordCreated\" | \"triggerEntityRecordDeleted\" | \"triggerEntityRecordUpdated\" | \"triggerEscalation\" | \"triggerSLABreach\" | \"triggerSLAWarning\" | \"triggerSchedule\" | \"triggerStart\" | \"triggerWebhookReceived\";\n\nexport interface NodeSubTypeInfo {\n value: string;\n label: string;\n icon: string;\n description: string;\n}\n\nexport const nodeDefinitions: Record<string, NodeDefinition> = {\n \"actionAIClassify\": {\n \"type\": \"agent\",\n \"subType\": \"actionAIClassify\",\n \"label\": \"AI Classify\",\n \"icon\": \"Tags\",\n \"description\": \"Classify content into categories using AI\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Classify\",\n \"properties\": {\n \"categories\": {\n \"type\": \"array\",\n \"title\": \"Categories\",\n \"description\": \"List of possible categories\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"format\": \"multiline\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Additional Instructions\",\n \"format\": \"multiline\"\n },\n \"multiLabel\": {\n \"type\": \"boolean\",\n \"title\": \"Allow Multiple Labels\",\n \"description\": \"Can content belong to multiple categories?\",\n \"default\": false\n }\n },\n \"required\": [\n \"content\",\n \"categories\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"categories\": {\n \"type\": \"array\",\n \"title\": \"Categories\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"category\": {\n \"type\": \"string\",\n \"title\": \"Primary Category\"\n },\n \"confidence\": {\n \"type\": \"number\",\n \"title\": \"Confidence\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n \"reasoning\": {\n \"type\": \"string\",\n \"title\": \"Reasoning\"\n }\n }\n }\n },\n \"actionAIExtractData\": {\n \"type\": \"agent\",\n \"subType\": \"actionAIExtractData\",\n \"label\": \"AI Extract Data\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract structured data from unstructured content\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Extract Data\",\n \"properties\": {\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"format\": \"multiline\"\n },\n \"extractionSchema\": {\n \"type\": \"object\",\n \"title\": \"Extraction Schema\",\n \"description\": \"JSON Schema defining what to extract\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"content\",\n \"extractionSchema\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"description\": \"Extracted data matching the schema\"\n }\n },\n \"actionAISummarize\": {\n \"type\": \"agent\",\n \"subType\": \"actionAISummarize\",\n \"label\": \"AI Summarize\",\n \"icon\": \"FileText\",\n \"description\": \"Summarize text content using AI\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Summarize\",\n \"properties\": {\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"description\": \"Text to summarize (supports {{variables}})\",\n \"format\": \"multiline\"\n },\n \"focusOn\": {\n \"type\": \"string\",\n \"title\": \"Focus On\",\n \"description\": \"Optional: specific aspects to focus on\"\n },\n \"maxLength\": {\n \"type\": \"integer\",\n \"title\": \"Max Length (words)\",\n \"minimum\": 10,\n \"maximum\": 1000\n },\n \"style\": {\n \"type\": \"string\",\n \"title\": \"Style\",\n \"default\": \"brief\",\n \"enum\": [\n \"brief\",\n \"detailed\",\n \"bullet_points\",\n \"executive\"\n ],\n \"x-enumLabels\": [\n \"Brief (1-2 sentences)\",\n \"Detailed\",\n \"Bullet Points\",\n \"Executive Summary\"\n ]\n }\n },\n \"required\": [\n \"content\",\n \"style\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyPoints\": {\n \"type\": \"array\",\n \"title\": \"Key Points\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"summary\": {\n \"type\": \"string\",\n \"title\": \"Summary\"\n },\n \"wordCount\": {\n \"type\": \"integer\",\n \"title\": \"Word Count\"\n }\n }\n }\n },\n \"actionApiCall\": {\n \"type\": \"action\",\n \"subType\": \"actionApiCall\",\n \"label\": \"API Call\",\n \"icon\": \"Globe\",\n \"description\": \"Make HTTP API requests\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"API Call\",\n \"properties\": {\n \"authorization\": {\n \"type\": \"string\",\n \"title\": \"Authorization\",\n \"x-displayOrder\": 5\n },\n \"callbackTimeout\": {\n \"type\": \"integer\",\n \"title\": \"Callback Timeout (ms)\",\n \"description\": \"For async mode only\",\n \"x-displayOrder\": 9\n },\n \"headers\": {\n \"type\": \"object\",\n \"title\": \"Headers\",\n \"x-displayOrder\": 4\n },\n \"method\": {\n \"type\": \"string\",\n \"title\": \"HTTP Method\",\n \"enum\": [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\"\n ],\n \"x-displayOrder\": 3\n },\n \"mode\": {\n \"type\": \"string\",\n \"title\": \"Mode\",\n \"enum\": [\n \"sync\",\n \"async\"\n ],\n \"x-enumLabels\": [\n \"Synchronous\",\n \"Asynchronous (Callback)\"\n ],\n \"x-displayOrder\": 1\n },\n \"retryCount\": {\n \"type\": \"integer\",\n \"title\": \"Retry Count\",\n \"minimum\": 0,\n \"maximum\": 5,\n \"x-displayOrder\": 7\n },\n \"retryDelay\": {\n \"type\": \"integer\",\n \"title\": \"Retry Delay (ms)\",\n \"minimum\": 100,\n \"x-displayOrder\": 8\n },\n \"timeout\": {\n \"type\": \"integer\",\n \"title\": \"Timeout (ms)\",\n \"minimum\": 1000,\n \"maximum\": 300000,\n \"x-displayOrder\": 6\n },\n \"url\": {\n \"type\": \"string\",\n \"title\": \"URL\",\n \"x-displayOrder\": 2\n }\n },\n \"required\": [\n \"url\",\n \"method\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionAssignSLAPolicy\": {\n \"type\": \"action\",\n \"subType\": \"actionAssignSLAPolicy\",\n \"label\": \"Assign SLA Policy\",\n \"icon\": \"Clock\",\n \"description\": \"Assign an SLA policy to a record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Assign SLA Policy\",\n \"properties\": {\n \"entityRecordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Entity Record ID\"\n },\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"Policy ID\"\n }\n },\n \"required\": [\n \"policyId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"assignmentId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"actionCreateEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionCreateEntityRecord\",\n \"label\": \"Create Entity Record\",\n \"icon\": \"FilePlus\",\n \"description\": \"Create a new entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Create Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"fields\": {\n \"type\": \"object\",\n \"title\": \"Field Values\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"recordId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"actionDeleteEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionDeleteEntityRecord\",\n \"label\": \"Delete Entity Record\",\n \"icon\": \"FileX\",\n \"description\": \"Delete an entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Delete Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"recordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Record ID Expression\"\n }\n },\n \"required\": [\n \"entityName\",\n \"recordIdExpr\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"deleted\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionDocumentExtraction\": {\n \"type\": \"action\",\n \"subType\": \"actionDocumentExtraction\",\n \"label\": \"Document Extraction\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract data from documents using AI\",\n \"category\": \"Data Processing\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Document Extraction\",\n \"properties\": {\n \"documentType\": {\n \"type\": \"string\",\n \"title\": \"Document Type\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"instructions\",\n \"documentType\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"fileUrl\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionNatsRequest\": {\n \"type\": \"action\",\n \"subType\": \"actionNatsRequest\",\n \"label\": \"NATS Request\",\n \"icon\": \"Send\",\n \"description\": \"Execute a NATS request-reply call with dynamic subject routing\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"NATS Request\",\n \"properties\": {\n \"actionTypeField\": {\n \"type\": \"string\",\n \"title\": \"Action Type Field\",\n \"description\": \"Dot-notation path to get action type from input (e.g., \\\"human_review.selectedAction.type\\\")\"\n },\n \"payloadTemplate\": {\n \"type\": \"object\",\n \"title\": \"Payload Template\",\n \"description\": \"JSON payload with {{variable}} interpolation\"\n },\n \"subjectMapping\": {\n \"type\": \"object\",\n \"title\": \"Subject Mapping\",\n \"description\": \"Map action types to NATS subjects (e.g., {\\\"reply\\\": \\\"hub.integration.email.send\\\"})\"\n },\n \"timeoutSeconds\": {\n \"type\": \"integer\",\n \"title\": \"Timeout (seconds)\",\n \"default\": 30,\n \"minimum\": 1,\n \"maximum\": 300\n }\n }\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"NATS Subject\",\n \"description\": \"Direct NATS subject (alternative to subjectMapping)\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"description\": \"Response from NATS service\",\n \"properties\": {\n \"_actionType\": {\n \"type\": \"string\",\n \"title\": \"Action Type\",\n \"description\": \"The action type that was used (if subjectMapping was used)\"\n },\n \"_executedSubject\": {\n \"type\": \"string\",\n \"title\": \"Executed Subject\",\n \"description\": \"The NATS subject that was called\"\n }\n }\n }\n },\n \"actionQueryEntityRecords\": {\n \"type\": \"action\",\n \"subType\": \"actionQueryEntityRecords\",\n \"label\": \"Query Entity Records\",\n \"icon\": \"Search\",\n \"description\": \"Query entity records with filters\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Query Entity Records\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\",\n \"description\": \"Name of the entity to query\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\",\n \"description\": \"Field filters (e.g., {\\\"status\\\": \\\"open\\\"})\"\n },\n \"page\": {\n \"type\": \"integer\",\n \"title\": \"Page\",\n \"description\": \"Page number (default: 1)\",\n \"minimum\": 1\n },\n \"pageSize\": {\n \"type\": \"integer\",\n \"title\": \"Page Size\",\n \"description\": \"Records per page (default: 10)\",\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"sortBy\": {\n \"type\": \"string\",\n \"title\": \"Sort By\",\n \"description\": \"Field to sort by\"\n },\n \"sortOrder\": {\n \"type\": \"integer\",\n \"title\": \"Sort Order\",\n \"description\": \"1 for ascending, -1 for descending\",\n \"enum\": [\n 1,\n -1\n ]\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"page\": {\n \"type\": \"integer\",\n \"title\": \"Current Page\"\n },\n \"pageSize\": {\n \"type\": \"integer\",\n \"title\": \"Page Size\"\n },\n \"records\": {\n \"type\": \"array\",\n \"title\": \"Records\",\n \"description\": \"Array of matching entity records\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"totalCount\": {\n \"type\": \"integer\",\n \"title\": \"Total Count\",\n \"description\": \"Total number of matching records\"\n },\n \"totalPages\": {\n \"type\": \"integer\",\n \"title\": \"Total Pages\"\n }\n }\n }\n },\n \"actionSendEmail\": {\n \"type\": \"action\",\n \"subType\": \"actionSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Mail\",\n \"description\": \"Send an email notification\",\n \"category\": \"Communication\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send Email\",\n \"properties\": {\n \"bcc\": {\n \"type\": \"string\",\n \"title\": \"BCC\"\n },\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\",\n \"format\": \"multiline\"\n },\n \"cc\": {\n \"type\": \"string\",\n \"title\": \"CC\"\n },\n \"from\": {\n \"type\": \"string\",\n \"title\": \"From\",\n \"description\": \"Sender email address (must be verified in SES)\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"template\": {\n \"type\": \"string\",\n \"title\": \"Template\",\n \"enum\": [\n \"welcome\",\n \"notification\",\n \"confirmation\",\n \"custom\"\n ],\n \"x-enumLabels\": [\n \"Welcome Email\",\n \"Notification\",\n \"Confirmation\",\n \"Custom\"\n ]\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n },\n \"required\": [\n \"from\",\n \"to\",\n \"subject\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"emailSent\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionSendSMS\": {\n \"type\": \"action\",\n \"subType\": \"actionSendSMS\",\n \"label\": \"Send SMS\",\n \"icon\": \"Smartphone\",\n \"description\": \"Send an SMS message\",\n \"category\": \"Communication\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send SMS\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Message\",\n \"format\": \"multiline\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"Phone Number\"\n }\n },\n \"required\": [\n \"to\",\n \"message\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"smsSent\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionSetVariables\": {\n \"type\": \"action\",\n \"subType\": \"actionSetVariables\",\n \"label\": \"Set Variables\",\n \"icon\": \"Variable\",\n \"description\": \"Set workflow variables\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Set Variables\"\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionUpdateEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionUpdateEntityRecord\",\n \"label\": \"Update Entity Record\",\n \"icon\": \"FileEdit\",\n \"description\": \"Update an existing entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Update Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"fields\": {\n \"type\": \"object\",\n \"title\": \"Field Updates\"\n },\n \"recordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Record ID Expression\"\n }\n },\n \"required\": [\n \"entityName\",\n \"recordIdExpr\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"updated\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"agentChat\": {\n \"type\": \"agent\",\n \"subType\": \"agentChat\",\n \"label\": \"Chat\",\n \"icon\": \"MessageSquare\",\n \"description\": \"AI chat interaction\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Chat\",\n \"properties\": {\n \"maxTokens\": {\n \"type\": \"integer\",\n \"title\": \"Max Tokens\",\n \"minimum\": 1,\n \"maximum\": 4096\n },\n \"model\": {\n \"type\": \"string\",\n \"title\": \"Model\",\n \"enum\": [\n \"gpt-4\",\n \"gpt-4-turbo\",\n \"gpt-3.5-turbo\",\n \"claude-3-opus\",\n \"claude-3-sonnet\"\n ],\n \"x-enumLabels\": [\n \"GPT-4\",\n \"GPT-4 Turbo\",\n \"GPT-3.5 Turbo\",\n \"Claude 3 Opus\",\n \"Claude 3 Sonnet\"\n ]\n },\n \"systemPrompt\": {\n \"type\": \"string\",\n \"title\": \"System Prompt\",\n \"format\": \"multiline\"\n },\n \"temperature\": {\n \"type\": \"number\",\n \"title\": \"Temperature\",\n \"minimum\": 0,\n \"maximum\": 2\n }\n },\n \"required\": [\n \"systemPrompt\",\n \"model\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentCustomResponse\": {\n \"type\": \"agent\",\n \"subType\": \"agentCustomResponse\",\n \"label\": \"Custom Response\",\n \"icon\": \"MessageCircle\",\n \"description\": \"Send a custom response message\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Custom Response\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Response Message\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"message\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"agentIntentDetector\": {\n \"type\": \"agent\",\n \"subType\": \"agentIntentDetector\",\n \"label\": \"Intent Detector\",\n \"icon\": \"Target\",\n \"description\": \"Detect user intent from message\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Intent Detector\",\n \"properties\": {\n \"intents\": {\n \"type\": \"array\",\n \"title\": \"Intents\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"ID\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n }\n }\n }\n }\n },\n \"required\": [\n \"intents\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"confidence\": {\n \"type\": \"number\"\n },\n \"intent\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentKnowledgeGraph\": {\n \"type\": \"agent\",\n \"subType\": \"agentKnowledgeGraph\",\n \"label\": \"Knowledge Graph\",\n \"icon\": \"Network\",\n \"description\": \"Query knowledge graph for information\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Knowledge Graph\",\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"title\": \"Fields\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"label\": {\n \"type\": \"string\",\n \"title\": \"Label\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"kg_response\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n }\n },\n \"agentOpenTicket\": {\n \"type\": \"agent\",\n \"subType\": \"agentOpenTicket\",\n \"label\": \"Open Ticket\",\n \"icon\": \"Ticket\",\n \"description\": \"Create a support ticket\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Open Ticket\",\n \"properties\": {\n \"priority\": {\n \"type\": \"string\",\n \"title\": \"Priority\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"urgent\"\n ]\n },\n \"ticketType\": {\n \"type\": \"string\",\n \"title\": \"Ticket Type\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"ticketId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentStructuredOutput\": {\n \"type\": \"agent\",\n \"subType\": \"agentStructuredOutput\",\n \"label\": \"Structured Output\",\n \"icon\": \"Brain\",\n \"description\": \"AI-powered structured data extraction\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Structured Output\",\n \"properties\": {\n \"inputTemplate\": {\n \"type\": \"string\",\n \"title\": \"Input Template\",\n \"format\": \"multiline\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n },\n \"model\": {\n \"type\": \"string\",\n \"title\": \"Model\"\n },\n \"systemPrompt\": {\n \"type\": \"string\",\n \"title\": \"System Prompt\",\n \"format\": \"multiline\"\n },\n \"temperature\": {\n \"type\": \"number\",\n \"title\": \"Temperature\",\n \"minimum\": 0,\n \"maximum\": 2\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"agentTransferToHuman\": {\n \"type\": \"agent\",\n \"subType\": \"agentTransferToHuman\",\n \"label\": \"Transfer to Human\",\n \"icon\": \"UserCheck\",\n \"description\": \"Transfer conversation to human agent\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Transfer to Human\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Transfer Message\",\n \"format\": \"multiline\"\n },\n \"queueId\": {\n \"type\": \"string\",\n \"title\": \"Queue ID\"\n }\n },\n \"required\": [\n \"message\",\n \"queueId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"delay\": {\n \"type\": \"delay\",\n \"subType\": \"delay\",\n \"label\": \"Delay\",\n \"icon\": \"Clock\",\n \"description\": \"Wait for a specified duration\",\n \"category\": \"Time \\u0026 Scheduling\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Delay\",\n \"properties\": {\n \"duration\": {\n \"type\": \"integer\",\n \"title\": \"Duration\",\n \"minimum\": 1\n },\n \"unit\": {\n \"type\": \"string\",\n \"title\": \"Unit\",\n \"enum\": [\n \"seconds\",\n \"minutes\",\n \"hours\",\n \"days\"\n ],\n \"x-enumLabels\": [\n \"Seconds\",\n \"Minutes\",\n \"Hours\",\n \"Days\"\n ]\n }\n },\n \"required\": [\n \"duration\",\n \"unit\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionApproval\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionApproval\",\n \"label\": \"Approval\",\n \"icon\": \"CheckCircle\",\n \"description\": \"Request human approval\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Approval\",\n \"properties\": {\n \"allowEdit\": {\n \"type\": \"boolean\",\n \"title\": \"Allow Edit\"\n },\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"decision\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"humanActionAssignment\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionAssignment\",\n \"label\": \"Task Assignment\",\n \"icon\": \"UserPlus\",\n \"description\": \"Assign a task to a user\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Task Assignment\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"priority\": {\n \"type\": \"string\",\n \"title\": \"Priority\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"urgent\"\n ],\n \"x-enumLabels\": [\n \"Low\",\n \"Medium\",\n \"High\",\n \"Urgent\"\n ]\n },\n \"taskDescription\": {\n \"type\": \"string\",\n \"title\": \"Task Description\",\n \"format\": \"multiline\"\n },\n \"taskTitle\": {\n \"type\": \"string\",\n \"title\": \"Task Title\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionDataEntry\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionDataEntry\",\n \"label\": \"Data Entry\",\n \"icon\": \"FormInput\",\n \"description\": \"Request human data entry\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Data Entry\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"formSchema\": {\n \"type\": \"object\",\n \"title\": \"Form Schema\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionReview\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionReview\",\n \"label\": \"Review\",\n \"icon\": \"Eye\",\n \"description\": \"Request human review\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Review\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"editableFields\": {\n \"type\": \"array\",\n \"title\": \"Editable Fields\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"decision\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"integrationCreateEvent\": {\n \"type\": \"integration\",\n \"subType\": \"integrationCreateEvent\",\n \"label\": \"Create Calendar Event\",\n \"icon\": \"CalendarPlus\",\n \"description\": \"Create event in user's calendar\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Create Calendar Event\",\n \"properties\": {\n \"attendees\": {\n \"type\": \"string\",\n \"title\": \"Attendees\",\n \"description\": \"Comma-separated email addresses\"\n },\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\",\n \"format\": \"multiline\"\n },\n \"endTime\": {\n \"type\": \"string\",\n \"title\": \"End Time\",\n \"format\": \"date-time\"\n },\n \"location\": {\n \"type\": \"string\",\n \"title\": \"Location\"\n },\n \"sendInvites\": {\n \"type\": \"boolean\",\n \"title\": \"Send Calendar Invites\",\n \"default\": true\n },\n \"startTime\": {\n \"type\": \"string\",\n \"title\": \"Start Time\",\n \"format\": \"date-time\"\n },\n \"title\": {\n \"type\": \"string\",\n \"title\": \"Title\"\n }\n },\n \"required\": [\n \"title\",\n \"startTime\",\n \"endTime\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"created\": {\n \"type\": \"boolean\",\n \"title\": \"Created\"\n },\n \"eventId\": {\n \"type\": \"string\",\n \"title\": \"Event ID\"\n },\n \"eventUrl\": {\n \"type\": \"string\",\n \"title\": \"Event URL\"\n }\n }\n }\n },\n \"integrationGetDriveFile\": {\n \"type\": \"integration\",\n \"subType\": \"integrationGetDriveFile\",\n \"label\": \"Get Drive File\",\n \"icon\": \"File\",\n \"description\": \"Get details of a specific file\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Get Drive File\",\n \"properties\": {\n \"fileId\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n }\n },\n \"required\": [\n \"fileId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"file\": {\n \"type\": \"object\",\n \"properties\": {\n \"downloadUrl\": {\n \"type\": \"string\",\n \"title\": \"Download URL\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"MIME Type\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"size\": {\n \"type\": \"integer\",\n \"title\": \"Size (bytes)\"\n },\n \"webLink\": {\n \"type\": \"string\",\n \"title\": \"Web Link\"\n }\n }\n }\n }\n }\n },\n \"integrationSearchCalendar\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchCalendar\",\n \"label\": \"Search Calendar\",\n \"icon\": \"CalendarSearch\",\n \"description\": \"Search calendar events\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Calendar\",\n \"properties\": {\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Search in event titles and descriptions\"\n },\n \"timeMax\": {\n \"type\": \"string\",\n \"title\": \"End Date\",\n \"description\": \"Search events before this date\",\n \"format\": \"date-time\"\n },\n \"timeMin\": {\n \"type\": \"string\",\n \"title\": \"Start Date\",\n \"description\": \"Search events after this date\",\n \"format\": \"date-time\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"events\": {\n \"type\": \"array\",\n \"title\": \"Events\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSearchDrive\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchDrive\",\n \"label\": \"Search Drive\",\n \"icon\": \"FolderSearch\",\n \"description\": \"Search files in user's Drive\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Drive\",\n \"properties\": {\n \"folderId\": {\n \"type\": \"string\",\n \"title\": \"Folder ID\",\n \"description\": \"Search in specific folder\"\n },\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"File Type\",\n \"enum\": [\n \"\",\n \"document\",\n \"spreadsheet\",\n \"presentation\",\n \"pdf\",\n \"image\",\n \"folder\"\n ],\n \"x-enumLabels\": [\n \"Any\",\n \"Documents\",\n \"Spreadsheets\",\n \"Presentations\",\n \"PDFs\",\n \"Images\",\n \"Folders\"\n ]\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Search in file names and content\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"files\": {\n \"type\": \"array\",\n \"title\": \"Files\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSearchEmails\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchEmails\",\n \"label\": \"Search Emails\",\n \"icon\": \"MailSearch\",\n \"description\": \"Search user's emails\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Emails\",\n \"properties\": {\n \"dateRange\": {\n \"type\": \"string\",\n \"title\": \"Date Range\",\n \"enum\": [\n \"1d\",\n \"7d\",\n \"30d\",\n \"90d\",\n \"all\"\n ],\n \"x-enumLabels\": [\n \"Last 24 hours\",\n \"Last 7 days\",\n \"Last 30 days\",\n \"Last 90 days\",\n \"All time\"\n ]\n },\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Gmail/Outlook search query\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"emails\": {\n \"type\": \"array\",\n \"title\": \"Emails\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSendEmail\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Send\",\n \"description\": \"Send email via user's connected account\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send Email\",\n \"properties\": {\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\",\n \"format\": \"multiline\"\n },\n \"bodyType\": {\n \"type\": \"string\",\n \"title\": \"Body Type\",\n \"default\": \"text\",\n \"enum\": [\n \"text\",\n \"html\"\n ],\n \"x-enumLabels\": [\n \"Plain Text\",\n \"HTML\"\n ]\n },\n \"cc\": {\n \"type\": \"string\",\n \"title\": \"CC\"\n },\n \"replyToMessageId\": {\n \"type\": \"string\",\n \"title\": \"Reply To Message ID\",\n \"description\": \"Optional: message ID to reply to\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n },\n \"required\": [\n \"to\",\n \"subject\",\n \"body\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"messageId\": {\n \"type\": \"string\",\n \"title\": \"Message ID\"\n },\n \"sent\": {\n \"type\": \"boolean\",\n \"title\": \"Sent\"\n }\n }\n }\n },\n \"logicFor\": {\n \"type\": \"logic\",\n \"subType\": \"logicFor\",\n \"label\": \"Loop\",\n \"icon\": \"Repeat\",\n \"description\": \"Iterate over a collection\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Loop\",\n \"properties\": {\n \"collection\": {\n \"type\": \"string\",\n \"title\": \"Collection Expression\"\n },\n \"indexVariable\": {\n \"type\": \"string\",\n \"title\": \"Index Variable Name\"\n },\n \"itemVariable\": {\n \"type\": \"string\",\n \"title\": \"Item Variable Name\"\n },\n \"maxIterations\": {\n \"type\": \"integer\",\n \"title\": \"Max Iterations\",\n \"minimum\": 1,\n \"maximum\": 10000\n }\n },\n \"required\": [\n \"collection\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"logicIf\": {\n \"type\": \"logic\",\n \"subType\": \"logicIf\",\n \"label\": \"If Condition\",\n \"icon\": \"GitBranch\",\n \"description\": \"Conditional branching based on variables\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"If Condition Configuration\",\n \"properties\": {\n \"conditions\": {\n \"type\": \"array\",\n \"title\": \"Conditions\",\n \"description\": \"Define conditions to evaluate against workflow variables\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"field\": {\n \"type\": \"string\",\n \"title\": \"Variable\",\n \"description\": \"Variable path (e.g., emailSent, user.role)\"\n },\n \"operator\": {\n \"type\": \"string\",\n \"title\": \"Operator\",\n \"enum\": [\n \"eq\",\n \"neq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"isEmpty\",\n \"isNotEmpty\"\n ]\n },\n \"value\": {\n \"type\": \"string\",\n \"title\": \"Value\",\n \"description\": \"Value to compare against\"\n }\n },\n \"required\": [\n \"field\",\n \"operator\"\n ]\n }\n },\n \"defaultPath\": {\n \"type\": \"string\",\n \"title\": \"Default Path ID\",\n \"description\": \"Path to use if no condition matches\"\n },\n \"expression\": {\n \"type\": \"string\",\n \"title\": \"Advanced Expression\",\n \"description\": \"JavaScript expression for complex conditions (e.g., amount \\u003e 1000 \\u0026\\u0026 status === 'approved')\",\n \"format\": \"multiline\"\n },\n \"logic\": {\n \"type\": \"string\",\n \"title\": \"Logic\",\n \"description\": \"How to combine multiple conditions\",\n \"default\": \"and\",\n \"enum\": [\n \"and\",\n \"or\"\n ]\n },\n \"paths\": {\n \"type\": \"array\",\n \"title\": \"Paths\",\n \"description\": \"Define target nodes for true/false outcomes\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"condition\": {\n \"type\": \"string\",\n \"title\": \"Condition\",\n \"enum\": [\n \"true\",\n \"false\"\n ]\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Path ID\"\n },\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n }\n },\n \"required\": [\n \"id\",\n \"condition\"\n ]\n }\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"conditionResult\": {\n \"type\": \"boolean\"\n },\n \"pathTaken\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"logicSwitch\": {\n \"type\": \"logic\",\n \"subType\": \"logicSwitch\",\n \"label\": \"Switch\",\n \"icon\": \"GitMerge\",\n \"description\": \"Multi-way branching based on value\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Switch\",\n \"properties\": {\n \"cases\": {\n \"type\": \"array\",\n \"title\": \"Cases\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n },\n \"value\": {\n \"type\": \"string\",\n \"title\": \"Value\"\n }\n }\n }\n },\n \"expression\": {\n \"type\": \"string\",\n \"title\": \"Switch Expression\"\n }\n },\n \"required\": [\n \"expression\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerCalendarEvent\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerCalendarEvent\",\n \"label\": \"Calendar Event\",\n \"icon\": \"CalendarClock\",\n \"description\": \"Trigger before or when calendar events occur\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Calendar Trigger\",\n \"properties\": {\n \"leadTime\": {\n \"type\": \"integer\",\n \"title\": \"Minutes Before\",\n \"description\": \"For reminder triggers\",\n \"default\": 30,\n \"minimum\": 5,\n \"maximum\": 1440\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Google Calendar\",\n \"Outlook Calendar\"\n ]\n },\n \"triggerType\": {\n \"type\": \"string\",\n \"title\": \"Trigger When\",\n \"enum\": [\n \"reminder\",\n \"event_start\",\n \"event_created\"\n ],\n \"x-enumLabels\": [\n \"Before Event (Reminder)\",\n \"Event Starts\",\n \"Event Created\"\n ]\n }\n },\n \"required\": [\n \"provider\",\n \"triggerType\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"object\",\n \"properties\": {\n \"attendees\": {\n \"type\": \"array\",\n \"title\": \"Attendees\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"endTime\": {\n \"type\": \"string\",\n \"title\": \"End Time\",\n \"format\": \"date-time\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Event ID\"\n },\n \"location\": {\n \"type\": \"string\",\n \"title\": \"Location\"\n },\n \"startTime\": {\n \"type\": \"string\",\n \"title\": \"Start Time\",\n \"format\": \"date-time\"\n },\n \"title\": {\n \"type\": \"string\",\n \"title\": \"Title\"\n }\n }\n }\n }\n }\n },\n \"triggerDriveFileChanged\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerDriveFileChanged\",\n \"label\": \"File Changed\",\n \"icon\": \"FolderSync\",\n \"description\": \"Trigger when files are added or modified in Drive\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Drive Trigger\",\n \"properties\": {\n \"changeType\": {\n \"type\": \"string\",\n \"title\": \"Change Type\",\n \"enum\": [\n \"created\",\n \"modified\",\n \"any\"\n ],\n \"x-enumLabels\": [\n \"File Created\",\n \"File Modified\",\n \"Any Change\"\n ]\n },\n \"fileTypes\": {\n \"type\": \"array\",\n \"title\": \"File Types\",\n \"description\": \"Filter by extension (e.g., pdf, docx)\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"folderId\": {\n \"type\": \"string\",\n \"title\": \"Folder ID\",\n \"description\": \"Watch specific folder (leave empty for all)\"\n },\n \"pollInterval\": {\n \"type\": \"integer\",\n \"title\": \"Poll Interval (minutes)\",\n \"default\": 10,\n \"minimum\": 5\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Google Drive\",\n \"OneDrive\"\n ]\n }\n },\n \"required\": [\n \"provider\",\n \"changeType\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"file\": {\n \"type\": \"object\",\n \"properties\": {\n \"createdAt\": {\n \"type\": \"string\",\n \"title\": \"Created At\",\n \"format\": \"date-time\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"MIME Type\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"size\": {\n \"type\": \"integer\",\n \"title\": \"Size (bytes)\"\n },\n \"webLink\": {\n \"type\": \"string\",\n \"title\": \"Web Link\"\n }\n }\n }\n }\n }\n },\n \"triggerEmailReceived\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEmailReceived\",\n \"label\": \"Email Received\",\n \"icon\": \"Mail\",\n \"description\": \"Trigger when a new email matches filters\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Email Trigger\",\n \"properties\": {\n \"fromFilter\": {\n \"type\": \"string\",\n \"title\": \"From (contains)\",\n \"description\": \"Filter by sender email or name\"\n },\n \"hasAttachment\": {\n \"type\": \"boolean\",\n \"title\": \"Has Attachment\"\n },\n \"isUnread\": {\n \"type\": \"boolean\",\n \"title\": \"Unread Only\",\n \"default\": true\n },\n \"labelFilter\": {\n \"type\": \"string\",\n \"title\": \"Label/Folder\",\n \"description\": \"Gmail label or Outlook folder\"\n },\n \"pollInterval\": {\n \"type\": \"integer\",\n \"title\": \"Poll Interval (minutes)\",\n \"default\": 5,\n \"minimum\": 1,\n \"maximum\": 60\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Gmail\",\n \"Outlook\"\n ]\n },\n \"subjectFilter\": {\n \"type\": \"string\",\n \"title\": \"Subject (contains)\"\n }\n },\n \"required\": [\n \"provider\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"email\": {\n \"type\": \"object\",\n \"properties\": {\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\"\n },\n \"date\": {\n \"type\": \"string\",\n \"title\": \"Date\",\n \"format\": \"date-time\"\n },\n \"from\": {\n \"type\": \"string\",\n \"title\": \"From\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Email ID\"\n },\n \"snippet\": {\n \"type\": \"string\",\n \"title\": \"Snippet\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n }\n }\n }\n }\n },\n \"triggerEntityRecordCreated\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordCreated\",\n \"label\": \"Entity Record Created\",\n \"icon\": \"Plus\",\n \"description\": \"Triggers when a new entity record is created\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Created\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The created entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEntityRecordDeleted\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordDeleted\",\n \"label\": \"Entity Record Deleted\",\n \"icon\": \"Trash\",\n \"description\": \"Triggers when an entity record is deleted\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Deleted\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The deleted entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEntityRecordUpdated\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordUpdated\",\n \"label\": \"Entity Record Updated\",\n \"icon\": \"Pencil\",\n \"description\": \"Triggers when an entity record is updated\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Updated\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\"\n },\n \"watchFields\": {\n \"type\": \"array\",\n \"title\": \"Watch Fields\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The updated entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEscalation\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEscalation\",\n \"label\": \"Escalation\",\n \"icon\": \"ArrowUpRight\",\n \"description\": \"Triggers when an escalation occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Escalation\",\n \"properties\": {\n \"escalationLevel\": {\n \"type\": \"integer\",\n \"title\": \"Escalation Level\",\n \"minimum\": 1\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSLABreach\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSLABreach\",\n \"label\": \"SLA Breach\",\n \"icon\": \"TriangleAlert\",\n \"description\": \"Triggers when an SLA breach occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"SLA Breach\",\n \"properties\": {\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"SLA Policy ID\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSLAWarning\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSLAWarning\",\n \"label\": \"SLA Warning\",\n \"icon\": \"Timer\",\n \"description\": \"Triggers when an SLA warning occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"SLA Warning\",\n \"properties\": {\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"SLA Policy ID\"\n },\n \"warningThreshold\": {\n \"type\": \"number\",\n \"title\": \"Warning Threshold (%)\",\n \"minimum\": 0,\n \"maximum\": 100\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSchedule\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSchedule\",\n \"label\": \"Schedule\",\n \"icon\": \"Calendar\",\n \"description\": \"Trigger workflow on a schedule (cron expression)\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Schedule Trigger\",\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"schedule\": {\n \"type\": \"string\",\n \"title\": \"Cron Expression\",\n \"description\": \"e.g., '0 9 * * MON-FRI' for weekdays at 9am\"\n },\n \"timezone\": {\n \"type\": \"string\",\n \"title\": \"Timezone\",\n \"default\": \"UTC\",\n \"enum\": [\n \"UTC\",\n \"America/New_York\",\n \"America/Chicago\",\n \"America/Denver\",\n \"America/Los_Angeles\",\n \"Europe/London\",\n \"Europe/Paris\",\n \"Asia/Tokyo\"\n ],\n \"x-enumLabels\": [\n \"UTC\",\n \"Eastern Time\",\n \"Central Time\",\n \"Mountain Time\",\n \"Pacific Time\",\n \"London\",\n \"Paris\",\n \"Tokyo\"\n ]\n }\n },\n \"required\": [\n \"schedule\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"schedule\": {\n \"type\": \"string\",\n \"title\": \"Schedule\"\n },\n \"triggeredAt\": {\n \"type\": \"string\",\n \"title\": \"Triggered At\",\n \"format\": \"date-time\"\n }\n }\n }\n },\n \"triggerStart\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerStart\",\n \"label\": \"Start\",\n \"icon\": \"Play\",\n \"description\": \"Workflow entry point - receives input and sets variables\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\"\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerWebhookReceived\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerWebhookReceived\",\n \"label\": \"Webhook\",\n \"icon\": \"Webhook\",\n \"description\": \"Triggers when a webhook is received\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Webhook Trigger\",\n \"properties\": {\n \"method\": {\n \"type\": \"string\",\n \"title\": \"HTTP Method\",\n \"enum\": [\n \"POST\",\n \"GET\",\n \"PUT\"\n ]\n },\n \"secret\": {\n \"type\": \"string\",\n \"title\": \"Secret\",\n \"format\": \"password\"\n },\n \"webhookPath\": {\n \"type\": \"string\",\n \"title\": \"Webhook Path\"\n }\n },\n \"required\": [\n \"webhookPath\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n }\n} as const;\n\n// Helper to get just the config schemas (for backwards compatibility)\nexport const nodeSchemas: Record<string, JSONSchema> = Object.fromEntries(\n Object.entries(nodeDefinitions).map(([key, def]) => [key, def.config])\n);\n\n// Grouped subtypes for backwards compatibility with existing frontend code\nexport const TriggerNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"triggerCalendarEvent\": {\n \"value\": \"triggerCalendarEvent\",\n \"label\": \"Calendar Event\",\n \"icon\": \"CalendarClock\",\n \"description\": \"Trigger before or when calendar events occur\"\n },\n \"triggerDriveFileChanged\": {\n \"value\": \"triggerDriveFileChanged\",\n \"label\": \"File Changed\",\n \"icon\": \"FolderSync\",\n \"description\": \"Trigger when files are added or modified in Drive\"\n },\n \"triggerEmailReceived\": {\n \"value\": \"triggerEmailReceived\",\n \"label\": \"Email Received\",\n \"icon\": \"Mail\",\n \"description\": \"Trigger when a new email matches filters\"\n },\n \"triggerEntityRecordCreated\": {\n \"value\": \"triggerEntityRecordCreated\",\n \"label\": \"Entity Record Created\",\n \"icon\": \"Plus\",\n \"description\": \"Triggers when a new entity record is created\"\n },\n \"triggerEntityRecordDeleted\": {\n \"value\": \"triggerEntityRecordDeleted\",\n \"label\": \"Entity Record Deleted\",\n \"icon\": \"Trash\",\n \"description\": \"Triggers when an entity record is deleted\"\n },\n \"triggerEntityRecordUpdated\": {\n \"value\": \"triggerEntityRecordUpdated\",\n \"label\": \"Entity Record Updated\",\n \"icon\": \"Pencil\",\n \"description\": \"Triggers when an entity record is updated\"\n },\n \"triggerEscalation\": {\n \"value\": \"triggerEscalation\",\n \"label\": \"Escalation\",\n \"icon\": \"ArrowUpRight\",\n \"description\": \"Triggers when an escalation occurs\"\n },\n \"triggerSLABreach\": {\n \"value\": \"triggerSLABreach\",\n \"label\": \"SLA Breach\",\n \"icon\": \"TriangleAlert\",\n \"description\": \"Triggers when an SLA breach occurs\"\n },\n \"triggerSLAWarning\": {\n \"value\": \"triggerSLAWarning\",\n \"label\": \"SLA Warning\",\n \"icon\": \"Timer\",\n \"description\": \"Triggers when an SLA warning occurs\"\n },\n \"triggerSchedule\": {\n \"value\": \"triggerSchedule\",\n \"label\": \"Schedule\",\n \"icon\": \"Calendar\",\n \"description\": \"Trigger workflow on a schedule (cron expression)\"\n },\n \"triggerStart\": {\n \"value\": \"triggerStart\",\n \"label\": \"Start\",\n \"icon\": \"Play\",\n \"description\": \"Workflow entry point - receives input and sets variables\"\n },\n \"triggerWebhookReceived\": {\n \"value\": \"triggerWebhookReceived\",\n \"label\": \"Webhook\",\n \"icon\": \"Webhook\",\n \"description\": \"Triggers when a webhook is received\"\n }\n} as const;\nexport const HumanActionNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"humanActionApproval\": {\n \"value\": \"humanActionApproval\",\n \"label\": \"Approval\",\n \"icon\": \"CheckCircle\",\n \"description\": \"Request human approval\"\n },\n \"humanActionAssignment\": {\n \"value\": \"humanActionAssignment\",\n \"label\": \"Task Assignment\",\n \"icon\": \"UserPlus\",\n \"description\": \"Assign a task to a user\"\n },\n \"humanActionDataEntry\": {\n \"value\": \"humanActionDataEntry\",\n \"label\": \"Data Entry\",\n \"icon\": \"FormInput\",\n \"description\": \"Request human data entry\"\n },\n \"humanActionReview\": {\n \"value\": \"humanActionReview\",\n \"label\": \"Review\",\n \"icon\": \"Eye\",\n \"description\": \"Request human review\"\n }\n} as const;\nexport const AgentNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"actionAIClassify\": {\n \"value\": \"actionAIClassify\",\n \"label\": \"AI Classify\",\n \"icon\": \"Tags\",\n \"description\": \"Classify content into categories using AI\"\n },\n \"actionAIExtractData\": {\n \"value\": \"actionAIExtractData\",\n \"label\": \"AI Extract Data\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract structured data from unstructured content\"\n },\n \"actionAISummarize\": {\n \"value\": \"actionAISummarize\",\n \"label\": \"AI Summarize\",\n \"icon\": \"FileText\",\n \"description\": \"Summarize text content using AI\"\n },\n \"agentChat\": {\n \"value\": \"agentChat\",\n \"label\": \"Chat\",\n \"icon\": \"MessageSquare\",\n \"description\": \"AI chat interaction\"\n },\n \"agentCustomResponse\": {\n \"value\": \"agentCustomResponse\",\n \"label\": \"Custom Response\",\n \"icon\": \"MessageCircle\",\n \"description\": \"Send a custom response message\"\n },\n \"agentIntentDetector\": {\n \"value\": \"agentIntentDetector\",\n \"label\": \"Intent Detector\",\n \"icon\": \"Target\",\n \"description\": \"Detect user intent from message\"\n },\n \"agentKnowledgeGraph\": {\n \"value\": \"agentKnowledgeGraph\",\n \"label\": \"Knowledge Graph\",\n \"icon\": \"Network\",\n \"description\": \"Query knowledge graph for information\"\n },\n \"agentOpenTicket\": {\n \"value\": \"agentOpenTicket\",\n \"label\": \"Open Ticket\",\n \"icon\": \"Ticket\",\n \"description\": \"Create a support ticket\"\n },\n \"agentStructuredOutput\": {\n \"value\": \"agentStructuredOutput\",\n \"label\": \"Structured Output\",\n \"icon\": \"Brain\",\n \"description\": \"AI-powered structured data extraction\"\n },\n \"agentTransferToHuman\": {\n \"value\": \"agentTransferToHuman\",\n \"label\": \"Transfer to Human\",\n \"icon\": \"UserCheck\",\n \"description\": \"Transfer conversation to human agent\"\n }\n} as const;\nexport const ActionNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"actionApiCall\": {\n \"value\": \"actionApiCall\",\n \"label\": \"API Call\",\n \"icon\": \"Globe\",\n \"description\": \"Make HTTP API requests\"\n },\n \"actionAssignSLAPolicy\": {\n \"value\": \"actionAssignSLAPolicy\",\n \"label\": \"Assign SLA Policy\",\n \"icon\": \"Clock\",\n \"description\": \"Assign an SLA policy to a record\"\n },\n \"actionCreateEntityRecord\": {\n \"value\": \"actionCreateEntityRecord\",\n \"label\": \"Create Entity Record\",\n \"icon\": \"FilePlus\",\n \"description\": \"Create a new entity record\"\n },\n \"actionDeleteEntityRecord\": {\n \"value\": \"actionDeleteEntityRecord\",\n \"label\": \"Delete Entity Record\",\n \"icon\": \"FileX\",\n \"description\": \"Delete an entity record\"\n },\n \"actionDocumentExtraction\": {\n \"value\": \"actionDocumentExtraction\",\n \"label\": \"Document Extraction\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract data from documents using AI\"\n },\n \"actionNatsRequest\": {\n \"value\": \"actionNatsRequest\",\n \"label\": \"NATS Request\",\n \"icon\": \"Send\",\n \"description\": \"Execute a NATS request-reply call with dynamic subject routing\"\n },\n \"actionQueryEntityRecords\": {\n \"value\": \"actionQueryEntityRecords\",\n \"label\": \"Query Entity Records\",\n \"icon\": \"Search\",\n \"description\": \"Query entity records with filters\"\n },\n \"actionSendEmail\": {\n \"value\": \"actionSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Mail\",\n \"description\": \"Send an email notification\"\n },\n \"actionSendSMS\": {\n \"value\": \"actionSendSMS\",\n \"label\": \"Send SMS\",\n \"icon\": \"Smartphone\",\n \"description\": \"Send an SMS message\"\n },\n \"actionSetVariables\": {\n \"value\": \"actionSetVariables\",\n \"label\": \"Set Variables\",\n \"icon\": \"Variable\",\n \"description\": \"Set workflow variables\"\n },\n \"actionUpdateEntityRecord\": {\n \"value\": \"actionUpdateEntityRecord\",\n \"label\": \"Update Entity Record\",\n \"icon\": \"FileEdit\",\n \"description\": \"Update an existing entity record\"\n }\n} as const;\nexport const LogicNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"logicFor\": {\n \"value\": \"logicFor\",\n \"label\": \"Loop\",\n \"icon\": \"Repeat\",\n \"description\": \"Iterate over a collection\"\n },\n \"logicIf\": {\n \"value\": \"logicIf\",\n \"label\": \"If Condition\",\n \"icon\": \"GitBranch\",\n \"description\": \"Conditional branching based on variables\"\n },\n \"logicSwitch\": {\n \"value\": \"logicSwitch\",\n \"label\": \"Switch\",\n \"icon\": \"GitMerge\",\n \"description\": \"Multi-way branching based on value\"\n }\n} as const;\nexport const DelayNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"delay\": {\n \"value\": \"delay\",\n \"label\": \"Delay\",\n \"icon\": \"Clock\",\n \"description\": \"Wait for a specified duration\"\n }\n} as const;\nexport const ParallelNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\n\n// Empty placeholders for node types not yet defined in Go\nexport const DataNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const TimerNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const LoopNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const AccountingNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\n\n// Type aliases for backwards compatibility\nexport type TriggerNodeSubType = keyof typeof TriggerNodeSubTypes;\nexport type HumanActionNodeSubType = keyof typeof HumanActionNodeSubTypes;\nexport type AgentNodeSubType = keyof typeof AgentNodeSubTypes;\nexport type ActionNodeSubType = keyof typeof ActionNodeSubTypes;\nexport type LogicNodeSubType = keyof typeof LogicNodeSubTypes;\nexport type DelayNodeSubType = keyof typeof DelayNodeSubTypes;\nexport type DataNodeSubType = keyof typeof DataNodeSubTypes;\nexport type TimerNodeSubType = keyof typeof TimerNodeSubTypes;\nexport type LoopNodeSubType = keyof typeof LoopNodeSubTypes;\nexport type ParallelNodeSubType = keyof typeof ParallelNodeSubTypes;\nexport type AccountingNodeSubType = keyof typeof AccountingNodeSubTypes;\n\nexport type WorkflowNodeSubTypeTS =\n | TriggerNodeSubType\n | HumanActionNodeSubType\n | AgentNodeSubType\n | ActionNodeSubType\n | LogicNodeSubType\n | DelayNodeSubType\n | DataNodeSubType\n | TimerNodeSubType\n | LoopNodeSubType\n | ParallelNodeSubType\n | AccountingNodeSubType;\n\n// WorkflowNodeTypes constant for backwards compatibility\nexport const WorkflowNodeTypes = {\n trigger: { value: 'trigger', label: 'Trigger', category: 'Triggers' },\n humanAction: { value: 'humanAction', label: 'Human Action', category: 'User Interaction' },\n agent: { value: 'agent', label: 'Agent', category: 'Automation' },\n action: { value: 'action', label: 'Action', category: 'Automation' },\n logic: { value: 'logic', label: 'Logic', category: 'Flow Control' },\n data: { value: 'data', label: 'Data', category: 'Data Processing' },\n integration: { value: 'integration', label: 'Integration', category: 'Integration' },\n timer: { value: 'timer', label: 'Timer', category: 'Time & Scheduling' },\n loop: { value: 'loop', label: 'Loop', category: 'Flow Control' },\n parallel: { value: 'parallel', label: 'Parallel', category: 'Flow Control' },\n delay: { value: 'delay', label: 'Delay', category: 'Flow Control' },\n subflow: { value: 'subflow', label: 'Subflow', category: 'Flow Control' },\n custom: { value: 'custom', label: 'Custom', category: 'Custom' },\n documentExtraction: { value: 'documentExtraction', label: 'Document Extraction', category: 'Data Processing' },\n apiCall: { value: 'apiCall', label: 'API Call', category: 'Integration' },\n accounting: { value: 'accounting', label: 'Accounting', category: 'Accounting' },\n} as const;\n\nexport type WorkflowNodeTypeTS = keyof typeof WorkflowNodeTypes;\nexport type WorkflowNodeTypeOptionTS = typeof WorkflowNodeTypes[WorkflowNodeTypeTS];\n\nexport type NodeCategory =\n | \"Triggers\"\n | \"User Interaction\"\n | \"Automation\"\n | \"Integration\"\n | \"Flow Control\"\n | \"Data Processing\"\n | \"Time & Scheduling\"\n | \"Custom\"\n | \"Document Processing\"\n | \"API Integration\"\n | \"Accounting\";\n\n// Edge type definitions (generated from Go)\nexport const WorkflowEdgeTypes: Record<string, EdgeTypeDefinition> = {\n \"compensation\": {\n \"value\": \"compensation\",\n \"label\": \"Compensation\"\n },\n \"conditional\": {\n \"value\": \"conditional\",\n \"label\": \"Conditional\"\n },\n \"default\": {\n \"value\": \"default\",\n \"label\": \"Default\"\n },\n \"error\": {\n \"value\": \"error\",\n \"label\": \"Error\"\n },\n \"loopBack\": {\n \"value\": \"loopBack\",\n \"label\": \"Loop Back\"\n },\n \"merge\": {\n \"value\": \"merge\",\n \"label\": \"Merge\"\n },\n \"normal\": {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n \"parallel\": {\n \"value\": \"parallel\",\n \"label\": \"Parallel\"\n },\n \"timeout\": {\n \"value\": \"timeout\",\n \"label\": \"Timeout\"\n }\n} as const;\nexport type WorkflowEdgeTypeTS = keyof typeof WorkflowEdgeTypes;\nexport type WorkflowEdgeTypeOptionTS = typeof WorkflowEdgeTypes[WorkflowEdgeTypeTS];\n\n// Workflow type definitions (generated from Go)\nexport const WorkflowTypes: Record<string, WorkflowTypeDefinition> = {\n \"agent\": {\n \"value\": \"agent\",\n \"label\": \"Agent\"\n },\n \"chat\": {\n \"value\": \"chat\",\n \"label\": \"Chat\"\n },\n \"document\": {\n \"value\": \"document\",\n \"label\": \"Document\"\n },\n \"entity\": {\n \"value\": \"entity\",\n \"label\": \"Entity\"\n },\n \"productivity\": {\n \"value\": \"productivity\",\n \"label\": \"Productivity\"\n }\n} as const;\nexport type WorkflowTypeTS = keyof typeof WorkflowTypes;\nexport type WorkflowTypeOptionTS = typeof WorkflowTypes[WorkflowTypeTS];\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/eloquent-packages/eloquent-packages/packages/workflow/dist/index.js","../components/dynamic-schema-form.tsx","../components/schema-builder.tsx","../store/workflow-definition-slice.ts","../store/workflow-instance-slice.ts","../schema/schemas.ts"],"names":[],"mappings":"AAAA,6rBAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACA;ACtJA,8BAAkC;AAuQtB,+CAAA;AAzIL,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,MAAA,EAAQ,CAAC,CAAA;AAAA,EACT,QAAA;AAAA,EACA,SAAA,EAAW,KAAA;AAAA,EACX,KAAA,EAAO,CAAC,CAAA;AAAA,EACR,UAAA;AAAA,EACA,UAAA,EAAY,CAAC,CAAA;AAAA,EACb,mBAAA,EAAqB;AACvB,CAAA,EAA2B;AACzB,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,EAAA,EAAI,6BAAA;AAAA,oBAChD,IAAI,GAAA,CAAI;AAAA,EACV,CAAA;AACA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,EAAA,EAAI,6BAAA;AAAA,oBACpD,I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,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACa,UAAA;AACH,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACiB,IAAA;AACP,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACK,UAAA;AACP,UAAA;AACC,UAAA;AACS,QAAA;AACpB,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACM,UAAA;AACG,QAAA;AACpB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACS,QAAA;AACpB,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACkB,QAAA;AACpB,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,UAAA;AACkB,QAAA;AACpB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACO,QAAA;AACpB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACO,QAAA;AACpB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACO,QAAA;AACpB,QAAA;AACO,UAAA;AACG,UAAA;AACC,UAAA;AACS,QAAA;AACpB,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACU,UAAA;AACZ,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACI,UAAA;AACN,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACI,UAAA;AACN,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACO,UAAA;AACT,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACO,MAAA;AACD,QAAA;AACG,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACM,UAAA;AACJ,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACA,QAAA;AACb,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACM,UAAA;AACP,YAAA;AACN,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACL,UAAA;AACG,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACiB,IAAA;AACP,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACsB,IAAA;AACZ,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,IAAA;AACX,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AAC4B,IAAA;AAClB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACa,IAAA;AACH,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACA,YAAA;AACC,YAAA;AACM,cAAA;AACG,gBAAA;AACL,gBAAA;AACC,cAAA;AACX,cAAA;AACM,gBAAA;AACI,gBAAA;AACC,cAAA;AACX,cAAA;AACQ,gBAAA;AACE,gBAAA;AACC,cAAA;AACX,cAAA;AACU,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACD,UAAA;AACD,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACU,UAAA;AACA,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACH,UAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACG,UAAA;AACL,UAAA;AACC,YAAA;AACC,UAAA;AACV,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACK,UAAA;AACP,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACD,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACS,IAAA;AACC,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACQ,UAAA;AACE,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACuB,IAAA;AACb,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACyB,IAAA;AACf,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACmB,UAAA;AACT,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACa,UAAA;AACH,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACkB,UAAA;AACR,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACC,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC0B,IAAA;AAChB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACD,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACF,UAAA;AACA,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACM,YAAA;AACG,cAAA;AACL,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC6B,IAAA;AACnB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACW,UAAA;AACD,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC0B,IAAA;AAChB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACC,UAAA;AACH,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACF,UAAA;AACA,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACJ,UAAA;AACE,UAAA;AACC,UAAA;AACC,QAAA;AACZ,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACM,UAAA;AACI,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACC,UAAA;AACH,UAAA;AACC,QAAA;AACX,QAAA;AACQ,UAAA;AACE,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACY,IAAA;AACF,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,QAAA;AACgB,UAAA;AACN,UAAA;AACC,QAAA;AACX,QAAA;AACiB,UAAA;AACP,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACW,IAAA;AACD,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,YAAA;AACM,cAAA;AACH,gBAAA;AACC,gBAAA;AACC,gBAAA;AACM,cAAA;AACjB,cAAA;AACY,gBAAA;AACF,gBAAA;AACC,gBAAA;AACD,kBAAA;AACN,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,gBAAA;AACF,cAAA;AACF,cAAA;AACS,gBAAA;AACC,gBAAA;AACC,gBAAA;AACM,cAAA;AACjB,YAAA;AACF,YAAA;AACY,cAAA;AACV,cAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACc,UAAA;AACJ,UAAA;AACC,UAAA;AACM,UAAA;AACL,QAAA;AACZ,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACH,YAAA;AACN,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACS,UAAA;AACC,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,YAAA;AACM,cAAA;AACC,gBAAA;AACH,gBAAA;AACC,gBAAA;AACD,kBAAA;AACN,kBAAA;AACA,gBAAA;AACF,cAAA;AACF,cAAA;AACM,gBAAA;AACI,gBAAA;AACC,cAAA;AACX,cAAA;AACU,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,YAAA;AACF,YAAA;AACY,cAAA;AACV,cAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACO,UAAA;AACT,QAAA;AACV,QAAA;AACa,UAAA;AACH,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACe,IAAA;AACL,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACH,UAAA;AACC,UAAA;AACC,UAAA;AACA,YAAA;AACC,YAAA;AACM,cAAA;AACF,gBAAA;AACA,gBAAA;AACC,cAAA;AACX,cAAA;AACS,gBAAA;AACC,gBAAA;AACC,cAAA;AACX,YAAA;AACF,UAAA;AACF,QAAA;AACF,QAAA;AACc,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,UAAA;AACM,UAAA;AACJ,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACM,YAAA;AACC,cAAA;AACH,cAAA;AACC,cAAA;AACA,gBAAA;AACC,cAAA;AACV,YAAA;AACF,YAAA;AACe,cAAA;AACL,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACa,cAAA;AACH,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACS,cAAA;AACC,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC2B,IAAA;AACjB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACa,UAAA;AACH,UAAA;AACC,UAAA;AACM,UAAA;AACN,YAAA;AACC,UAAA;AACV,QAAA;AACF,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,QAAA;AACA,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACJ,UAAA;AACE,UAAA;AACM,YAAA;AACC,cAAA;AACH,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACY,cAAA;AACF,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACwB,IAAA;AACd,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,QAAA;AACb,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACgB,UAAA;AACN,UAAA;AACC,UAAA;AACE,UAAA;AACA,UAAA;AACA,QAAA;AACb,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACD,YAAA;AACN,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,UAAA;AACF,QAAA;AACF,QAAA;AACiB,UAAA;AACP,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACH,UAAA;AACC,UAAA;AACM,YAAA;AACJ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACQ,cAAA;AACE,cAAA;AACC,cAAA;AACC,YAAA;AACZ,YAAA;AACQ,cAAA;AACE,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,YAAA;AACW,cAAA;AACD,cAAA;AACC,YAAA;AACX,YAAA;AACM,cAAA;AACI,cAAA;AACC,YAAA;AACX,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AAC8B,IAAA;AACpB,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACW,UAAA;AACD,UAAA;AACC,QAAA;AACX,QAAA;AACe,UAAA;AACL,UAAA;AACC,UAAA;AACA,YAAA;AACC,UAAA;AACV,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,MAAA;AACM,QAAA;AACE,UAAA;AACJ,QAAA;AACV,QAAA;AACkB,UAAA;AACR,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACE,UAAA;AACJ,UAAA;AACC,QAAA;AACX,QAAA;AACkB,UAAA;AACR,UAAA;AACC,QAAA;AACX,QAAA;AACU,UAAA;AACA,UAAA;AACC,UAAA;AACM,QAAA;AACjB,MAAA;AACF,IAAA;AACF,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACO,UAAA;AACT,UAAA;AACC,UAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACoB,IAAA;AACV,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACqB,IAAA;AACX,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AACoB,UAAA;AACV,UAAA;AACC,UAAA;AACE,UAAA;AACA,QAAA;AACb,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,IAAA;AACV,EAAA;AACF,EAAA;AACmB,IAAA;AACT,IAAA;AACG,IAAA;AACF,IAAA;AACD,IAAA;AACO,IAAA;AACH,IAAA;AACF,MAAA;AACA,MAAA;AACC,MAAA;AACK,QAAA;AACG,UAAA;AACL,UAAA;AACC,QAAA;AACX,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACM,QAAA;AACjB,QAAA;AACY,UAAA;AACF,UAAA;AACC,UAAA;AACE,UAAA;AACH,YAAA;AACN,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,UAAA;AACgB,YAAA;AACd,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,MAAA;AACY,QAAA;AACV,MAAA;AACF,IAAA;AACF,IAAA;AACS,MAAA;AACC,IAAA;AACV,IAAA;AACU,MAAA;AACA,MAAA;AACM,QAAA;AACA,UAAA;AACF,UAAA;AACC,QAAA;AACX,QAAA;AAC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AA;AACA,IAAA;AACA,EAAA;AACX,EAAA;AACS,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACS,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACU,IAAA;AACC,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACW,IAAA;AACA,IAAA;AACA,EAAA;AAEb;AAKO;AAA8D,EAAA;AAC1D,IAAA;AACE,IAAA;AACA,EAAA;AACX,EAAA;AACQ,IAAA;AACG,IAAA;AACA,EAAA;AACX,EAAA;AACY,IAAA;AACD,IAAA;AACA,EAAA;AACX,EAAA;AACU,IAAA;AACC,IAAA;AACA,EAAA;AACX,EAAA;AACgB,IAAA;AACL,IAAA;AACA,EAAA;AAEb;ALirCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/eloquent-packages/eloquent-packages/packages/workflow/dist/index.js","sourcesContent":[null,"\"use client\";\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { useState, useMemo } from \"react\";\n\n// UI Components - these will be imported from the app's components\n// We use a render props pattern to allow apps to provide their own UI components\nexport interface DynamicSchemaFormUIComponents {\n Input: React.ComponentType<{\n type?: string;\n value: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n min?: number;\n max?: number;\n step?: string | number;\n }>;\n Label: React.ComponentType<{\n htmlFor?: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Textarea: React.ComponentType<{\n value: any;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n disabled?: boolean;\n rows?: number;\n className?: string;\n placeholder?: string;\n }>;\n Checkbox: React.ComponentType<{\n id?: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n disabled?: boolean;\n }>;\n Select: React.ComponentType<{\n value: string;\n onValueChange: (value: string) => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n SelectTrigger: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n SelectValue: React.ComponentType<{\n placeholder?: string;\n }>;\n SelectContent: React.ComponentType<{\n children: React.ReactNode;\n }>;\n SelectItem: React.ComponentType<{\n value: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Button: React.ComponentType<{\n type?: \"button\" | \"submit\" | \"reset\";\n variant?: string;\n size?: string;\n className?: string;\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n Card: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n // Icons\n PlusIcon: React.ComponentType<{ className?: string }>;\n TrashIcon: React.ComponentType<{ className?: string }>;\n ChevronDownIcon: React.ComponentType<{ className?: string }>;\n ChevronRightIcon: React.ComponentType<{ className?: string }>;\n VariableIcon?: React.ComponentType<{ className?: string }>;\n CheckIcon?: React.ComponentType<{ className?: string }>;\n EditIcon?: React.ComponentType<{ className?: string }>;\n // Popover components for variable picker (optional)\n Popover?: React.ComponentType<{ open?: boolean; onOpenChange?: (open: boolean) => void; children: React.ReactNode }>;\n PopoverTrigger?: React.ComponentType<{ asChild?: boolean; children: React.ReactNode }>;\n PopoverContent?: React.ComponentType<{ className?: string; align?: \"start\" | \"center\" | \"end\"; children: React.ReactNode }>;\n // Dialog components for rich text editor (optional)\n Dialog?: React.ComponentType<{ open?: boolean; onOpenChange?: (open: boolean) => void; children: React.ReactNode }>;\n DialogContent?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogHeader?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogTitle?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n DialogFooter?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n // ScrollArea for variable picker in dialog\n ScrollArea?: React.ComponentType<{ className?: string; children: React.ReactNode }>;\n // MarkdownEditor for richtext fields\n MarkdownEditor?: React.ComponentType<{\n content: string;\n onChange: (markdown: string) => void;\n placeholder?: string;\n className?: string;\n readOnly?: boolean;\n minHeight?: string;\n variables?: Array<{ name: string; path: string; title?: string }>;\n }>;\n // Utility\n cn: (...classes: (string | undefined | null | false)[]) => string;\n}\n\n/**\n * Variable definition for workflow variables\n */\nexport interface WorkflowVariable {\n name: string;\n type: string; // JSON Schema type: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n title?: string;\n path: string; // Full path like \"variables.customerEmail\" or \"input.recordId\"\n}\n\nexport interface DynamicSchemaFormProps {\n schema: JSONSchema;\n value: any;\n onChange: (value: any) => void;\n disabled?: boolean;\n path?: string[];\n components: DynamicSchemaFormUIComponents;\n /** Workflow variables available for selection */\n variables?: WorkflowVariable[];\n /** Whether to show variable picker buttons */\n showVariablePicker?: boolean;\n}\n\nexport function DynamicSchemaForm({\n schema,\n value = {},\n onChange,\n disabled = false,\n path = [],\n components,\n variables = [],\n showVariablePicker = false,\n}: DynamicSchemaFormProps) {\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(\n new Set()\n );\n const [openVariablePickers, setOpenVariablePickers] = useState<Set<string>>(\n new Set()\n );\n const [openRichTextDialogs, setOpenRichTextDialogs] = useState<Set<string>>(\n new Set()\n );\n const [richTextDraftValues, setRichTextDraftValues] = useState<Record<string, string>>({});\n\n const {\n Input,\n Label,\n Textarea,\n Checkbox,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n Button,\n Card,\n PlusIcon,\n TrashIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n VariableIcon,\n CheckIcon,\n EditIcon,\n Popover,\n PopoverTrigger,\n PopoverContent,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n ScrollArea,\n MarkdownEditor,\n cn,\n } = components;\n\n // Check if a value is a variable reference (e.g., \"{{variables.email}}\")\n const isVariableReference = (val: any): boolean => {\n return typeof val === \"string\" && val.startsWith(\"{{\") && val.endsWith(\"}}\");\n };\n\n // Get variables that match a specific JSON Schema type\n const getMatchingVariables = (fieldType: string | undefined): WorkflowVariable[] => {\n if (!fieldType) return variables;\n\n // Type compatibility mapping\n const compatibleTypes: Record<string, string[]> = {\n string: [\"string\"],\n number: [\"number\", \"integer\"],\n integer: [\"number\", \"integer\"],\n boolean: [\"boolean\"],\n object: [\"object\"],\n array: [\"array\"],\n };\n\n const compatible = compatibleTypes[fieldType] || [fieldType];\n return variables.filter((v) => compatible.includes(v.type));\n };\n\n // Toggle variable picker for a field\n const toggleVariablePicker = (fieldPath: string) => {\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n if (next.has(fieldPath)) {\n next.delete(fieldPath);\n } else {\n next.add(fieldPath);\n }\n return next;\n });\n };\n\n // Render a variable picker button for a field\n const renderVariablePicker = (\n fieldName: string,\n fieldType: string | undefined,\n fieldPath: string,\n onSelect: (variablePath: string) => void\n ) => {\n // Don't render if showVariablePicker is false\n if (!showVariablePicker) {\n return null;\n }\n\n // Need at least VariableIcon and Popover components to render\n if (!VariableIcon || !Popover || !PopoverTrigger || !PopoverContent) {\n return null;\n }\n\n const matchingVars = getMatchingVariables(fieldType);\n const isOpen = openVariablePickers.has(fieldPath);\n const currentValue = value[fieldName];\n const isVariable = isVariableReference(currentValue);\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={(open) => {\n if (open) {\n setOpenVariablePickers((prev) => new Set(prev).add(fieldPath));\n } else {\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }\n }}\n >\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"h-8 px-2 shrink-0\",\n isVariable && \"border-primary text-primary\"\n )}\n disabled={disabled}\n >\n <VariableIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-56 p-1\" align=\"end\">\n <div className=\"text-xs font-medium text-muted-foreground px-2 py-1.5\">\n Select Variable ({fieldType || \"any\"})\n </div>\n <div className=\"max-h-48 overflow-y-auto\">\n {matchingVars.length === 0 ? (\n <div className=\"px-2 py-3 text-xs text-muted-foreground text-center\">\n No variables available.\n <br />\n <span className=\"text-[10px]\">\n Add variables in Workflow Settings → Variables\n </span>\n </div>\n ) : (\n matchingVars.map((variable) => {\n const varRef = `{{${variable.path}}}`;\n const isSelected = currentValue === varRef;\n return (\n <button\n key={variable.path}\n type=\"button\"\n className={cn(\n \"w-full text-left px-2 py-1.5 text-xs rounded hover:bg-accent flex items-center justify-between\",\n isSelected && \"bg-accent\"\n )}\n onClick={() => {\n onSelect(varRef);\n setOpenVariablePickers((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n <div>\n <div className=\"font-medium\">{variable.title || variable.name}</div>\n <div className=\"text-[10px] text-muted-foreground font-mono\">\n {variable.path}\n </div>\n </div>\n {isSelected && CheckIcon && <CheckIcon className=\"h-3 w-3\" />}\n </button>\n );\n })\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n };\n\n const toggleSection = (key: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n return next;\n });\n };\n\n const handleFieldChange = (fieldName: string, fieldValue: any) => {\n onChange({\n ...value,\n [fieldName]: fieldValue,\n });\n };\n\n const renderField = (\n fieldSchema: JSONSchema,\n fieldName: string,\n fieldValue: any\n ) => {\n const fieldPath = [...path, fieldName].join(\".\");\n const isRequired = schema.required?.includes(fieldName);\n\n // Handle enum (dropdown)\n if (fieldSchema.enum) {\n const labels =\n (fieldSchema as any)[\"x-enumLabels\"] || fieldSchema.enum;\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Select\n value={fieldValue || \"\"}\n onValueChange={(v) => handleFieldChange(fieldName, v)}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue\n placeholder={`Select ${fieldSchema.title || fieldName}`}\n />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option: any, idx: number) => (\n <SelectItem key={option} value={option} className=\"text-xs\">\n {labels[idx] || option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Handle nested objects\n if (fieldSchema.type === \"object\" && fieldSchema.properties) {\n const isCollapsed = collapsedSections.has(fieldPath);\n return (\n <div key={fieldPath} className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => toggleSection(fieldPath)}\n className=\"flex items-center gap-1 text-xs font-medium text-gray-700 hover:text-gray-900\"\n >\n {isCollapsed ? (\n <ChevronRightIcon className=\"h-3 w-3\" />\n ) : (\n <ChevronDownIcon className=\"h-3 w-3\" />\n )}\n {fieldSchema.title || fieldName}\n </button>\n {!isCollapsed && (\n <Card className=\"p-3 bg-gray-50/50\">\n <DynamicSchemaForm\n schema={fieldSchema}\n value={fieldValue || {}}\n onChange={(v) => handleFieldChange(fieldName, v)}\n disabled={disabled}\n path={[...path, fieldName]}\n components={components}\n variables={variables}\n showVariablePicker={showVariablePicker}\n />\n </Card>\n )}\n </div>\n );\n }\n\n // Handle arrays\n if (fieldSchema.type === \"array\" && fieldSchema.items) {\n const arrayValue = Array.isArray(fieldValue) ? fieldValue : [];\n const itemSchema = fieldSchema.items as JSONSchema;\n\n return (\n <div key={fieldPath} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 text-xs px-2\"\n onClick={() => {\n const newItem = itemSchema.type === \"object\" ? {} : \"\";\n handleFieldChange(fieldName, [...arrayValue, newItem]);\n }}\n disabled={disabled}\n >\n <PlusIcon className=\"h-3 w-3 mr-1\" />\n Add\n </Button>\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n <div className=\"space-y-2\">\n {arrayValue.map((item: any, index: number) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n {itemSchema.type === \"object\" ? (\n <Card className=\"p-2 bg-gray-50/50\">\n <DynamicSchemaForm\n schema={itemSchema}\n value={item}\n onChange={(v) => {\n const newArray = [...arrayValue];\n newArray[index] = v;\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n path={[...path, fieldName, String(index)]}\n components={components}\n variables={variables}\n showVariablePicker={showVariablePicker}\n />\n </Card>\n ) : (\n <Input\n value={item || \"\"}\n onChange={(e) => {\n const newArray = [...arrayValue];\n newArray[index] = e.target.value;\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n className=\"h-8 text-xs\"\n />\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-red-500 hover:text-red-700\"\n onClick={() => {\n const newArray = arrayValue.filter(\n (_: any, i: number) => i !== index\n );\n handleFieldChange(fieldName, newArray);\n }}\n disabled={disabled}\n >\n <TrashIcon className=\"h-3 w-3\" />\n </Button>\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n // Handle boolean\n if (fieldSchema.type === \"boolean\") {\n return (\n <div key={fieldPath} className=\"flex items-center space-x-2\">\n <Checkbox\n id={fieldPath}\n checked={!!fieldValue}\n onCheckedChange={(checked) => handleFieldChange(fieldName, checked)}\n disabled={disabled}\n />\n <Label htmlFor={fieldPath} className=\"text-xs font-normal\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {fieldSchema.description && (\n <span className=\"text-[10px] text-muted-foreground ml-2\">\n ({fieldSchema.description})\n </span>\n )}\n </div>\n );\n }\n\n // Handle number/integer\n if (fieldSchema.type === \"number\" || fieldSchema.type === \"integer\") {\n const isVarValue = isVariableReference(fieldValue);\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <Input\n type={isVarValue ? \"text\" : \"number\"}\n value={fieldValue ?? \"\"}\n onChange={(e) => {\n if (isVariableReference(e.target.value)) {\n handleFieldChange(fieldName, e.target.value);\n } else {\n const val =\n e.target.value === \"\" ? undefined : Number(e.target.value);\n handleFieldChange(fieldName, val);\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n step={fieldSchema.type === \"integer\" ? 1 : \"any\"}\n disabled={disabled}\n className={cn(\"h-8 text-xs flex-1\", isVarValue && \"font-mono text-primary\")}\n />\n {renderVariablePicker(fieldName, fieldSchema.type, fieldPath, (varPath) =>\n handleFieldChange(fieldName, varPath)\n )}\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Handle string with format\n if (fieldSchema.type === \"string\") {\n // Rich text editor - opens in dialog\n if (fieldSchema.format === \"richtext\") {\n const isDialogOpen = openRichTextDialogs.has(fieldPath);\n const draftValue = richTextDraftValues[fieldPath] ?? fieldValue ?? \"\";\n const previewText = (fieldValue || \"\").replace(/<[^>]*>/g, \"\").slice(0, 50);\n const matchingVars = getMatchingVariables(\"string\");\n\n // Check if Dialog components are available\n if (!Dialog || !DialogContent || !DialogHeader || !DialogTitle || !DialogFooter) {\n // Fallback to regular textarea if Dialog not provided\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n <Textarea\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n rows={3}\n className=\"text-xs\"\n placeholder={fieldSchema.description}\n />\n </div>\n );\n }\n\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <div className=\"flex-1 min-w-0 px-2 py-1.5 bg-muted/50 rounded text-xs text-muted-foreground truncate border\">\n {previewText || <span className=\"italic\">Click edit to add content...</span>}\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 px-2 shrink-0\"\n onClick={() => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: fieldValue || \"\" }));\n setOpenRichTextDialogs((prev) => new Set(prev).add(fieldPath));\n }}\n disabled={disabled}\n >\n {EditIcon ? <EditIcon className=\"h-3.5 w-3.5\" /> : \"Edit\"}\n </Button>\n </div>\n\n <Dialog\n open={isDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }\n }}\n >\n <DialogContent className=\"max-w-3xl max-h-[85vh] flex flex-col\">\n <DialogHeader>\n <DialogTitle>Edit {fieldSchema.title || fieldName}</DialogTitle>\n </DialogHeader>\n <div className=\"flex-1 overflow-hidden flex flex-col min-h-0\">\n {MarkdownEditor ? (\n <MarkdownEditor\n content={draftValue}\n onChange={(value) => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: value }));\n }}\n placeholder=\"Enter content... Use {{variables.name}} for dynamic values\"\n minHeight=\"300px\"\n variables={showVariablePicker ? matchingVars : []}\n />\n ) : (\n <>\n <Textarea\n value={draftValue}\n onChange={(e) => {\n setRichTextDraftValues((prev) => ({ ...prev, [fieldPath]: e.target.value }));\n }}\n rows={12}\n className=\"flex-1 text-sm font-mono resize-none\"\n placeholder=\"Enter content... Use {{variables.name}} for dynamic values\"\n />\n\n {/* Variable picker in dialog (fallback when no MarkdownEditor) */}\n {showVariablePicker && matchingVars.length > 0 && (\n <div className=\"border rounded-md p-2 bg-muted/30 mt-3\">\n <p className=\"text-xs font-medium mb-2\">Insert Variable:</p>\n <div className=\"flex flex-wrap gap-1\">\n {matchingVars.map((variable) => (\n <Button\n key={variable.path}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 text-xs px-2\"\n onClick={() => {\n const varRef = `{{${variable.path}}}`;\n setRichTextDraftValues((prev) => ({\n ...prev,\n [fieldPath]: (prev[fieldPath] || \"\") + varRef,\n }));\n }}\n >\n {variable.title || variable.name}\n </Button>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n onClick={() => {\n handleFieldChange(fieldName, draftValue);\n setOpenRichTextDialogs((prev) => {\n const next = new Set(prev);\n next.delete(fieldPath);\n return next;\n });\n }}\n >\n Save\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n }\n\n // Multiline / textarea\n if (\n fieldSchema.format === \"multiline\" ||\n fieldSchema.format === \"textarea\"\n ) {\n const isVarValue = isVariableReference(fieldValue);\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n <Textarea\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n rows={3}\n className={cn(\"text-xs\", isVarValue && \"font-mono text-primary\")}\n placeholder={fieldSchema.description}\n />\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Regular string input\n const inputType =\n fieldSchema.format === \"email\"\n ? \"email\"\n : fieldSchema.format === \"uri\" || fieldSchema.format === \"url\"\n ? \"url\"\n : fieldSchema.format === \"password\"\n ? \"password\"\n : \"text\";\n\n const isVarValue = isVariableReference(fieldValue);\n\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <div className=\"flex gap-1.5\">\n <Input\n type={inputType}\n value={fieldValue || \"\"}\n onChange={(e) => handleFieldChange(fieldName, e.target.value)}\n disabled={disabled}\n className={cn(\"h-8 text-xs flex-1\", isVarValue && \"font-mono text-primary\")}\n placeholder={fieldSchema.description}\n />\n {renderVariablePicker(fieldName, \"string\", fieldPath, (varPath) =>\n handleFieldChange(fieldName, (fieldValue || \"\") + varPath)\n )}\n </div>\n {fieldSchema.description && (\n <p className=\"text-[10px] text-muted-foreground\">\n {fieldSchema.description}\n </p>\n )}\n </div>\n );\n }\n\n // Fallback for unknown types\n return (\n <div key={fieldPath} className=\"space-y-1.5\">\n <Label className=\"text-xs font-medium\">\n {fieldSchema.title || fieldName}\n {isRequired && <span className=\"text-red-500 ml-0.5\">*</span>}\n </Label>\n <Input\n value={\n typeof fieldValue === \"object\"\n ? JSON.stringify(fieldValue)\n : fieldValue || \"\"\n }\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value);\n handleFieldChange(fieldName, parsed);\n } catch {\n handleFieldChange(fieldName, e.target.value);\n }\n }}\n disabled={disabled}\n className=\"h-8 text-xs font-mono\"\n />\n <p className=\"text-[10px] text-muted-foreground\">\n Type: {fieldSchema.type || \"unknown\"}\n </p>\n </div>\n );\n };\n\n // Render root object properties\n if (schema.type === \"object\" && schema.properties) {\n const sortedProperties = Object.entries(schema.properties).sort(\n ([, a], [, b]) => {\n const orderA = (a as any)[\"x-displayOrder\"] ?? 999;\n const orderB = (b as any)[\"x-displayOrder\"] ?? 999;\n return orderA - orderB;\n }\n );\n\n return (\n <div className=\"space-y-3\">\n {sortedProperties.map(([fieldName, fieldSchema]) =>\n renderField(fieldSchema as JSONSchema, fieldName, value[fieldName])\n )}\n </div>\n );\n }\n\n // If schema is not an object with properties, show message\n return (\n <p className=\"text-xs text-muted-foreground text-center py-4\">\n No configuration required for this node.\n </p>\n );\n}\n","\"use client\";\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { useState } from \"react\";\n\n// UI Components interface - same pattern as DynamicSchemaForm\nexport interface SchemaBuilderUIComponents {\n Input: React.ComponentType<{\n value: any;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n className?: string;\n placeholder?: string;\n }>;\n Label: React.ComponentType<{\n htmlFor?: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Checkbox: React.ComponentType<{\n id?: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n disabled?: boolean;\n }>;\n Select: React.ComponentType<{\n value: string;\n onValueChange: (value: string) => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n SelectTrigger: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n SelectValue: React.ComponentType<{\n placeholder?: string;\n }>;\n SelectContent: React.ComponentType<{\n children: React.ReactNode;\n }>;\n SelectItem: React.ComponentType<{\n value: string;\n className?: string;\n children: React.ReactNode;\n }>;\n Button: React.ComponentType<{\n type?: \"button\" | \"submit\" | \"reset\";\n variant?: string;\n size?: string;\n className?: string;\n onClick?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n }>;\n Card: React.ComponentType<{\n className?: string;\n children: React.ReactNode;\n }>;\n // Icons\n PlusIcon: React.ComponentType<{ className?: string }>;\n TrashIcon: React.ComponentType<{ className?: string }>;\n GripVerticalIcon: React.ComponentType<{ className?: string }>;\n ChevronDownIcon: React.ComponentType<{ className?: string }>;\n ChevronRightIcon: React.ComponentType<{ className?: string }>;\n // Utility\n cn: (...classes: (string | undefined | null | false)[]) => string;\n}\n\nexport interface SchemaBuilderProps {\n schema: JSONSchema;\n onChange: (schema: JSONSchema) => void;\n disabled?: boolean;\n components: SchemaBuilderUIComponents;\n}\n\ninterface FieldDefinition {\n name: string;\n type: string;\n title: string;\n description: string;\n required: boolean;\n format?: string;\n enum?: string[];\n items?: { type: string };\n}\n\nconst FIELD_TYPES = [\n { value: \"string\", label: \"Text\" },\n { value: \"number\", label: \"Number\" },\n { value: \"integer\", label: \"Integer\" },\n { value: \"boolean\", label: \"Boolean\" },\n { value: \"array\", label: \"Array\" },\n { value: \"object\", label: \"Object\" },\n];\n\nconst STRING_FORMATS = [\n { value: \"plain\", label: \"Plain Text\" },\n { value: \"email\", label: \"Email\" },\n { value: \"uri\", label: \"URL\" },\n { value: \"date\", label: \"Date\" },\n { value: \"date-time\", label: \"Date & Time\" },\n { value: \"multiline\", label: \"Multiline Text\" },\n];\n\nexport function SchemaBuilder({\n schema,\n onChange,\n disabled = false,\n components,\n}: SchemaBuilderProps) {\n const [expandedFields, setExpandedFields] = useState<Set<string>>(new Set());\n\n const {\n Input,\n Label,\n Checkbox,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n Button,\n Card,\n PlusIcon,\n TrashIcon,\n GripVerticalIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n } = components;\n\n // Convert schema to field definitions\n const getFieldsFromSchema = (): FieldDefinition[] => {\n if (!schema?.properties) return [];\n\n return Object.entries(schema.properties).map(([name, prop]) => {\n const fieldSchema = prop as JSONSchema;\n return {\n name,\n type: fieldSchema.type || \"string\",\n title: fieldSchema.title || name,\n description: fieldSchema.description || \"\",\n required: schema.required?.includes(name) || false,\n format: fieldSchema.format,\n enum: fieldSchema.enum,\n items: fieldSchema.items as { type: string } | undefined,\n };\n });\n };\n\n const fields = getFieldsFromSchema();\n\n // Convert field definitions back to schema\n const updateSchema = (newFields: FieldDefinition[]) => {\n const properties: Record<string, JSONSchema> = {};\n const required: string[] = [];\n\n newFields.forEach((field) => {\n if (!field.name) return;\n\n const fieldSchema: JSONSchema = {\n type: field.type,\n title: field.title || field.name,\n };\n\n if (field.description) {\n fieldSchema.description = field.description;\n }\n\n if (field.format && field.format !== \"plain\") {\n fieldSchema.format = field.format;\n }\n\n if (field.enum && field.enum.length > 0) {\n fieldSchema.enum = field.enum;\n }\n\n if (field.type === \"array\" && field.items) {\n fieldSchema.items = field.items;\n }\n\n properties[field.name] = fieldSchema;\n\n if (field.required) {\n required.push(field.name);\n }\n });\n\n onChange({\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n });\n };\n\n const addField = () => {\n const newFieldName = `field_${fields.length + 1}`;\n const newFields: FieldDefinition[] = [\n ...fields,\n {\n name: newFieldName,\n type: \"string\",\n title: \"\",\n description: \"\",\n required: false,\n },\n ];\n updateSchema(newFields);\n setExpandedFields((prev) => new Set([...prev, newFieldName]));\n };\n\n const updateField = (index: number, updates: Partial<FieldDefinition>) => {\n const newFields = [...fields];\n newFields[index] = { ...newFields[index], ...updates };\n updateSchema(newFields);\n };\n\n const removeField = (index: number) => {\n const newFields = fields.filter((_, i) => i !== index);\n updateSchema(newFields);\n };\n\n const toggleExpand = (name: string) => {\n setExpandedFields((prev) => {\n const next = new Set(prev);\n if (next.has(name)) {\n next.delete(name);\n } else {\n next.add(name);\n }\n return next;\n });\n };\n\n return (\n <div className=\"space-y-2\">\n {fields.length === 0 ? (\n <p className=\"text-xs text-muted-foreground italic py-3\">\n No fields defined. Click "Add Field" to create one.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {fields.map((field, index) => {\n const isExpanded = expandedFields.has(field.name);\n return (\n <Card key={index} className=\"p-3 bg-gray-50/50\">\n {/* Field Header Row 1: Name and Delete */}\n <div className=\"flex items-center gap-2 mb-2\">\n <GripVerticalIcon className=\"h-4 w-4 text-gray-300 flex-shrink-0 cursor-grab\" />\n\n <button\n type=\"button\"\n onClick={() => toggleExpand(field.name)}\n className=\"flex-shrink-0 p-1 hover:bg-gray-200 rounded\"\n >\n {isExpanded ? (\n <ChevronDownIcon className=\"h-4 w-4 text-gray-500\" />\n ) : (\n <ChevronRightIcon className=\"h-4 w-4 text-gray-500\" />\n )}\n </button>\n\n {/* Field Name */}\n <div className=\"flex-1\">\n <Input\n value={field.name}\n onChange={(e) => {\n const oldName = field.name;\n const newName = e.target.value\n .toLowerCase()\n .replace(/\\s+/g, \"_\")\n .replace(/[^a-z0-9_]/g, \"\");\n updateField(index, { name: newName });\n if (expandedFields.has(oldName)) {\n setExpandedFields((prev) => {\n const next = new Set(prev);\n next.delete(oldName);\n next.add(newName);\n return next;\n });\n }\n }}\n placeholder=\"field_name\"\n className=\"h-9 text-sm font-mono\"\n disabled={disabled}\n />\n </div>\n\n {/* Delete button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0 text-red-500 hover:text-red-700 hover:bg-red-50 flex-shrink-0\"\n onClick={() => removeField(index)}\n disabled={disabled}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Field Header Row 2: Type and Required */}\n <div className=\"flex items-center gap-3 pl-10\">\n {/* Field Type */}\n <div className=\"flex-1\">\n <Select\n value={field.type}\n onValueChange={(v) => updateField(index, { type: v })}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FIELD_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Required checkbox */}\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <Checkbox\n id={`required-${index}`}\n checked={field.required}\n onCheckedChange={(checked) =>\n updateField(index, { required: !!checked })\n }\n disabled={disabled}\n />\n <Label\n htmlFor={`required-${index}`}\n className=\"text-sm text-muted-foreground\"\n >\n Required\n </Label>\n </div>\n </div>\n\n {/* Expanded Details */}\n {isExpanded && (\n <div className=\"mt-3 pt-3 border-t space-y-3 pl-10\">\n {/* Title */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Display Title\n </Label>\n <Input\n value={field.title}\n onChange={(e) =>\n updateField(index, { title: e.target.value })\n }\n placeholder=\"Human readable title\"\n className=\"h-9 text-sm\"\n disabled={disabled}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Description\n </Label>\n <Input\n value={field.description}\n onChange={(e) =>\n updateField(index, { description: e.target.value })\n }\n placeholder=\"Help text for this field\"\n className=\"h-9 text-sm\"\n disabled={disabled}\n />\n </div>\n\n {/* String Format */}\n {field.type === \"string\" && (\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Format\n </Label>\n <Select\n value={field.format || \"plain\"}\n onValueChange={(v) =>\n updateField(index, { format: v })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STRING_FORMATS.map((format) => (\n <SelectItem key={format.value} value={format.value}>\n {format.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Array Item Type */}\n {field.type === \"array\" && (\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">\n Item Type\n </Label>\n <Select\n value={field.items?.type || \"string\"}\n onValueChange={(v) =>\n updateField(index, { items: { type: v } })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FIELD_TYPES.filter((t) => t.value !== \"array\").map(\n (type) => (\n <SelectItem key={type.value} value={type.value}>\n {type.label}\n </SelectItem>\n )\n )}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Enum Options (for dropdowns) */}\n {field.type === \"string\" && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">\n Dropdown Options (optional)\n </Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => {\n const currentEnum = field.enum || [];\n updateField(index, {\n enum: [\n ...currentEnum,\n `option_${currentEnum.length + 1}`,\n ],\n });\n }}\n disabled={disabled}\n >\n <PlusIcon className=\"h-3 w-3 mr-1\" />\n Add Option\n </Button>\n </div>\n {field.enum && field.enum.length > 0 && (\n <div className=\"space-y-2\">\n {field.enum.map((option, optIdx) => (\n <div key={optIdx} className=\"flex items-center gap-2\">\n <Input\n value={option}\n onChange={(e) => {\n const newEnum = [...(field.enum || [])];\n newEnum[optIdx] = e.target.value;\n updateField(index, { enum: newEnum });\n }}\n placeholder={`Option ${optIdx + 1}`}\n className=\"h-8 text-sm flex-1\"\n disabled={disabled}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-red-400 hover:text-red-600\"\n onClick={() => {\n const newEnum = (field.enum || []).filter(\n (_, i) => i !== optIdx\n );\n updateField(index, {\n enum:\n newEnum.length > 0 ? newEnum : undefined,\n });\n }}\n disabled={disabled}\n >\n <TrashIcon className=\"h-3 w-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </Card>\n );\n })}\n </div>\n )}\n\n {/* Add Field Button */}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full h-9 text-sm\"\n onClick={addField}\n disabled={disabled}\n >\n <PlusIcon className=\"h-4 w-4 mr-2\" />\n Add Field\n </Button>\n </div>\n );\n}\n","// workflow-definition-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { WorkflowDefinition } from \"../models\";\n\nexport interface WorkflowDefinitionState {\n definitions: Record<string, WorkflowDefinition>;\n selectedDefinition?: WorkflowDefinition;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface WorkflowDefinitionSelector {\n workflowDefinition: WorkflowDefinitionState;\n}\n\nconst initialState: WorkflowDefinitionState = {\n definitions: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst workflowDefinitionSlice = createSlice({\n name: \"workflowDefinition\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setDefinitions: (state, action: PayloadAction<WorkflowDefinition[]>) => {\n state.definitions = action.payload.reduce(\n (acc, def) => {\n if (def.id) {\n acc[def.id] = def;\n }\n return acc;\n },\n {} as Record<string, WorkflowDefinition>\n );\n },\n addDefinition: (state, action: PayloadAction<WorkflowDefinition>) => {\n const definition = action.payload;\n if (definition.id) {\n state.definitions[definition.id] = definition;\n }\n },\n updateDefinition: (state, action: PayloadAction<WorkflowDefinition>) => {\n const definition = action.payload;\n if (definition.id) {\n state.definitions[definition.id] = definition;\n }\n if (state.selectedDefinition?.id === definition.id) {\n state.selectedDefinition = definition;\n }\n },\n removeDefinition: (state, action: PayloadAction<string>) => {\n delete state.definitions[action.payload];\n if (state.selectedDefinition?.id === action.payload) {\n state.selectedDefinition = undefined;\n }\n },\n setSelectedDefinition: (\n state,\n action: PayloadAction<WorkflowDefinition | undefined>\n ) => {\n state.selectedDefinition = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setDefinitions,\n addDefinition,\n updateDefinition,\n removeDefinition,\n setSelectedDefinition,\n} = workflowDefinitionSlice.actions;\n\nexport const workflowDefinitionReducer = workflowDefinitionSlice.reducer;","// workflow-instance-slice.ts\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { WorkflowInstance } from \"../models\";\n\nexport interface WorkflowInstanceState {\n instances: Record<string, WorkflowInstance>;\n selectedInstance?: WorkflowInstance;\n isLoading: boolean;\n error?: string;\n loadingStates: Record<string, boolean>;\n}\n\nexport interface WorkflowInstanceSelector {\n workflowInstance: WorkflowInstanceState;\n}\n\nconst initialState: WorkflowInstanceState = {\n instances: {},\n isLoading: false,\n loadingStates: {},\n};\n\nconst workflowInstanceSlice = createSlice({\n name: \"workflowInstance\",\n initialState,\n reducers: {\n setLoading: (state, action: PayloadAction<boolean>) => {\n state.isLoading = action.payload;\n },\n setOperationLoading: (\n state,\n action: PayloadAction<{ operation: string; loading: boolean }>\n ) => {\n state.loadingStates[action.payload.operation] = action.payload.loading;\n },\n setError: (state, action: PayloadAction<string | undefined>) => {\n state.error = action.payload;\n },\n setInstances: (state, action: PayloadAction<WorkflowInstance[]>) => {\n state.instances = action.payload.reduce(\n (acc, inst) => {\n if (inst.id) {\n acc[inst.id] = inst;\n }\n return acc;\n },\n {} as Record<string, WorkflowInstance>\n );\n },\n updateInstance: (state, action: PayloadAction<WorkflowInstance>) => {\n const instance = action.payload;\n if (instance.id) {\n state.instances[instance.id] = instance;\n }\n if (state.selectedInstance?.id === instance.id) {\n state.selectedInstance = instance;\n }\n },\n setSelectedInstance: (\n state,\n action: PayloadAction<WorkflowInstance | undefined>\n ) => {\n state.selectedInstance = action.payload;\n },\n },\n});\n\nexport const {\n setLoading,\n setOperationLoading,\n setError,\n setInstances,\n updateInstance,\n setSelectedInstance,\n} = workflowInstanceSlice.actions;\n\nexport const workflowInstanceReducer = workflowInstanceSlice.reducer;","// Generated file - DO NOT EDIT\n\nimport { JSONSchema } from \"@elqnt/types\";\nimport { NodeType, NodeDefinition, EdgeTypeDefinition, WorkflowTypeDefinition } from \"../models/workflow\";\n\n// Type-safe NodeSubType union (generated from Go NodeDefinitions)\nexport type NodeSubTypeTS = \"actionAIClassify\" | \"actionAIExtractData\" | \"actionAISummarize\" | \"actionApiCall\" | \"actionAssignSLAPolicy\" | \"actionCreateEntityRecord\" | \"actionDeleteEntityRecord\" | \"actionDocumentExtraction\" | \"actionNatsRequest\" | \"actionQueryEntityRecords\" | \"actionSendEmail\" | \"actionSendSMS\" | \"actionSetVariables\" | \"actionUpdateEntityRecord\" | \"agentChat\" | \"agentCustomResponse\" | \"agentIntentDetector\" | \"agentKnowledgeGraph\" | \"agentOpenTicket\" | \"agentStructuredOutput\" | \"agentTransferToHuman\" | \"delay\" | \"humanActionApproval\" | \"humanActionAssignment\" | \"humanActionDataEntry\" | \"humanActionReview\" | \"integrationCreateEvent\" | \"integrationGetDriveFile\" | \"integrationSearchCalendar\" | \"integrationSearchDrive\" | \"integrationSearchEmails\" | \"integrationSendEmail\" | \"logicFor\" | \"logicIf\" | \"logicSwitch\" | \"triggerCalendarEvent\" | \"triggerDriveFileChanged\" | \"triggerEmailReceived\" | \"triggerEntityRecordCreated\" | \"triggerEntityRecordDeleted\" | \"triggerEntityRecordUpdated\" | \"triggerEscalation\" | \"triggerSLABreach\" | \"triggerSLAWarning\" | \"triggerSchedule\" | \"triggerStart\" | \"triggerWebhookReceived\";\n\nexport interface NodeSubTypeInfo {\n value: string;\n label: string;\n icon: string;\n description: string;\n}\n\nexport const nodeDefinitions: Record<string, NodeDefinition> = {\n \"actionAIClassify\": {\n \"type\": \"agent\",\n \"subType\": \"actionAIClassify\",\n \"label\": \"AI Classify\",\n \"icon\": \"Tags\",\n \"description\": \"Classify content into categories using AI\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Classify\",\n \"properties\": {\n \"categories\": {\n \"type\": \"array\",\n \"title\": \"Categories\",\n \"description\": \"List of possible categories\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"format\": \"multiline\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Additional Instructions\",\n \"format\": \"multiline\"\n },\n \"multiLabel\": {\n \"type\": \"boolean\",\n \"title\": \"Allow Multiple Labels\",\n \"description\": \"Can content belong to multiple categories?\",\n \"default\": false\n }\n },\n \"required\": [\n \"content\",\n \"categories\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"categories\": {\n \"type\": \"array\",\n \"title\": \"Categories\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"category\": {\n \"type\": \"string\",\n \"title\": \"Primary Category\"\n },\n \"confidence\": {\n \"type\": \"number\",\n \"title\": \"Confidence\",\n \"minimum\": 0,\n \"maximum\": 1\n },\n \"reasoning\": {\n \"type\": \"string\",\n \"title\": \"Reasoning\"\n }\n }\n }\n },\n \"actionAIExtractData\": {\n \"type\": \"agent\",\n \"subType\": \"actionAIExtractData\",\n \"label\": \"AI Extract Data\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract structured data from unstructured content\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Extract Data\",\n \"properties\": {\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"format\": \"multiline\"\n },\n \"extractionSchema\": {\n \"type\": \"object\",\n \"title\": \"Extraction Schema\",\n \"description\": \"JSON Schema defining what to extract\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"content\",\n \"extractionSchema\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"description\": \"Extracted data matching the schema\"\n }\n },\n \"actionAISummarize\": {\n \"type\": \"agent\",\n \"subType\": \"actionAISummarize\",\n \"label\": \"AI Summarize\",\n \"icon\": \"FileText\",\n \"description\": \"Summarize text content using AI\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"AI Summarize\",\n \"properties\": {\n \"content\": {\n \"type\": \"string\",\n \"title\": \"Content\",\n \"description\": \"Text to summarize (supports {{variables}})\",\n \"format\": \"multiline\"\n },\n \"focusOn\": {\n \"type\": \"string\",\n \"title\": \"Focus On\",\n \"description\": \"Optional: specific aspects to focus on\"\n },\n \"maxLength\": {\n \"type\": \"integer\",\n \"title\": \"Max Length (words)\",\n \"minimum\": 10,\n \"maximum\": 1000\n },\n \"style\": {\n \"type\": \"string\",\n \"title\": \"Style\",\n \"default\": \"brief\",\n \"enum\": [\n \"brief\",\n \"detailed\",\n \"bullet_points\",\n \"executive\"\n ],\n \"x-enumLabels\": [\n \"Brief (1-2 sentences)\",\n \"Detailed\",\n \"Bullet Points\",\n \"Executive Summary\"\n ]\n }\n },\n \"required\": [\n \"content\",\n \"style\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"keyPoints\": {\n \"type\": \"array\",\n \"title\": \"Key Points\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"summary\": {\n \"type\": \"string\",\n \"title\": \"Summary\"\n },\n \"wordCount\": {\n \"type\": \"integer\",\n \"title\": \"Word Count\"\n }\n }\n }\n },\n \"actionApiCall\": {\n \"type\": \"action\",\n \"subType\": \"actionApiCall\",\n \"label\": \"API Call\",\n \"icon\": \"Globe\",\n \"description\": \"Make HTTP API requests\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"API Call\",\n \"properties\": {\n \"authorization\": {\n \"type\": \"string\",\n \"title\": \"Authorization\",\n \"x-displayOrder\": 5\n },\n \"callbackTimeout\": {\n \"type\": \"integer\",\n \"title\": \"Callback Timeout (ms)\",\n \"description\": \"For async mode only\",\n \"x-displayOrder\": 9\n },\n \"headers\": {\n \"type\": \"object\",\n \"title\": \"Headers\",\n \"x-displayOrder\": 4\n },\n \"method\": {\n \"type\": \"string\",\n \"title\": \"HTTP Method\",\n \"enum\": [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\"\n ],\n \"x-displayOrder\": 3\n },\n \"mode\": {\n \"type\": \"string\",\n \"title\": \"Mode\",\n \"enum\": [\n \"sync\",\n \"async\"\n ],\n \"x-enumLabels\": [\n \"Synchronous\",\n \"Asynchronous (Callback)\"\n ],\n \"x-displayOrder\": 1\n },\n \"retryCount\": {\n \"type\": \"integer\",\n \"title\": \"Retry Count\",\n \"minimum\": 0,\n \"maximum\": 5,\n \"x-displayOrder\": 7\n },\n \"retryDelay\": {\n \"type\": \"integer\",\n \"title\": \"Retry Delay (ms)\",\n \"minimum\": 100,\n \"x-displayOrder\": 8\n },\n \"timeout\": {\n \"type\": \"integer\",\n \"title\": \"Timeout (ms)\",\n \"minimum\": 1000,\n \"maximum\": 300000,\n \"x-displayOrder\": 6\n },\n \"url\": {\n \"type\": \"string\",\n \"title\": \"URL\",\n \"x-displayOrder\": 2\n }\n },\n \"required\": [\n \"url\",\n \"method\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionAssignSLAPolicy\": {\n \"type\": \"action\",\n \"subType\": \"actionAssignSLAPolicy\",\n \"label\": \"Assign SLA Policy\",\n \"icon\": \"Clock\",\n \"description\": \"Assign an SLA policy to a record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Assign SLA Policy\",\n \"properties\": {\n \"entityRecordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Entity Record ID\"\n },\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"Policy ID\"\n }\n },\n \"required\": [\n \"policyId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"assignmentId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"actionCreateEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionCreateEntityRecord\",\n \"label\": \"Create Entity Record\",\n \"icon\": \"FilePlus\",\n \"description\": \"Create a new entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Create Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"fields\": {\n \"type\": \"object\",\n \"title\": \"Field Values\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"recordId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"actionDeleteEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionDeleteEntityRecord\",\n \"label\": \"Delete Entity Record\",\n \"icon\": \"FileX\",\n \"description\": \"Delete an entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Delete Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"recordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Record ID Expression\"\n }\n },\n \"required\": [\n \"entityName\",\n \"recordIdExpr\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"deleted\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionDocumentExtraction\": {\n \"type\": \"action\",\n \"subType\": \"actionDocumentExtraction\",\n \"label\": \"Document Extraction\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract data from documents using AI\",\n \"category\": \"Data Processing\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Document Extraction\",\n \"properties\": {\n \"documentType\": {\n \"type\": \"string\",\n \"title\": \"Document Type\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"instructions\",\n \"documentType\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"fileUrl\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionNatsRequest\": {\n \"type\": \"action\",\n \"subType\": \"actionNatsRequest\",\n \"label\": \"NATS Request\",\n \"icon\": \"Send\",\n \"description\": \"Execute a NATS request-reply call with dynamic subject routing\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"NATS Request\",\n \"properties\": {\n \"actionTypeField\": {\n \"type\": \"string\",\n \"title\": \"Action Type Field\",\n \"description\": \"Dot-notation path to get action type from input (e.g., \\\"human_review.selectedAction.type\\\")\"\n },\n \"payloadTemplate\": {\n \"type\": \"object\",\n \"title\": \"Payload Template\",\n \"description\": \"JSON payload with {{variable}} interpolation\"\n },\n \"subjectMapping\": {\n \"type\": \"object\",\n \"title\": \"Subject Mapping\",\n \"description\": \"Map action types to NATS subjects (e.g., {\\\"reply\\\": \\\"hub.integration.email.send\\\"})\"\n },\n \"timeoutSeconds\": {\n \"type\": \"integer\",\n \"title\": \"Timeout (seconds)\",\n \"default\": 30,\n \"minimum\": 1,\n \"maximum\": 300\n }\n }\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"NATS Subject\",\n \"description\": \"Direct NATS subject (alternative to subjectMapping)\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"description\": \"Response from NATS service\",\n \"properties\": {\n \"_actionType\": {\n \"type\": \"string\",\n \"title\": \"Action Type\",\n \"description\": \"The action type that was used (if subjectMapping was used)\"\n },\n \"_executedSubject\": {\n \"type\": \"string\",\n \"title\": \"Executed Subject\",\n \"description\": \"The NATS subject that was called\"\n }\n }\n }\n },\n \"actionQueryEntityRecords\": {\n \"type\": \"action\",\n \"subType\": \"actionQueryEntityRecords\",\n \"label\": \"Query Entity Records\",\n \"icon\": \"Search\",\n \"description\": \"Query entity records with filters\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Query Entity Records\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\",\n \"description\": \"Name of the entity to query\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\",\n \"description\": \"Field filters (e.g., {\\\"status\\\": \\\"open\\\"})\"\n },\n \"page\": {\n \"type\": \"integer\",\n \"title\": \"Page\",\n \"description\": \"Page number (default: 1)\",\n \"minimum\": 1\n },\n \"pageSize\": {\n \"type\": \"integer\",\n \"title\": \"Page Size\",\n \"description\": \"Records per page (default: 10)\",\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"sortBy\": {\n \"type\": \"string\",\n \"title\": \"Sort By\",\n \"description\": \"Field to sort by\"\n },\n \"sortOrder\": {\n \"type\": \"integer\",\n \"title\": \"Sort Order\",\n \"description\": \"1 for ascending, -1 for descending\",\n \"enum\": [\n 1,\n -1\n ]\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"page\": {\n \"type\": \"integer\",\n \"title\": \"Current Page\"\n },\n \"pageSize\": {\n \"type\": \"integer\",\n \"title\": \"Page Size\"\n },\n \"records\": {\n \"type\": \"array\",\n \"title\": \"Records\",\n \"description\": \"Array of matching entity records\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"totalCount\": {\n \"type\": \"integer\",\n \"title\": \"Total Count\",\n \"description\": \"Total number of matching records\"\n },\n \"totalPages\": {\n \"type\": \"integer\",\n \"title\": \"Total Pages\"\n }\n }\n }\n },\n \"actionSendEmail\": {\n \"type\": \"action\",\n \"subType\": \"actionSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Mail\",\n \"description\": \"Send an email notification\",\n \"category\": \"Communication\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send Email\",\n \"properties\": {\n \"bcc\": {\n \"type\": \"string\",\n \"title\": \"BCC\"\n },\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\",\n \"format\": \"multiline\"\n },\n \"cc\": {\n \"type\": \"string\",\n \"title\": \"CC\"\n },\n \"from\": {\n \"type\": \"string\",\n \"title\": \"From\",\n \"description\": \"Sender email address (must be verified in SES)\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"template\": {\n \"type\": \"string\",\n \"title\": \"Template\",\n \"enum\": [\n \"welcome\",\n \"notification\",\n \"confirmation\",\n \"custom\"\n ],\n \"x-enumLabels\": [\n \"Welcome Email\",\n \"Notification\",\n \"Confirmation\",\n \"Custom\"\n ]\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n },\n \"required\": [\n \"from\",\n \"to\",\n \"subject\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"emailSent\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionSendSMS\": {\n \"type\": \"action\",\n \"subType\": \"actionSendSMS\",\n \"label\": \"Send SMS\",\n \"icon\": \"Smartphone\",\n \"description\": \"Send an SMS message\",\n \"category\": \"Communication\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send SMS\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Message\",\n \"format\": \"multiline\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"Phone Number\"\n }\n },\n \"required\": [\n \"to\",\n \"message\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"smsSent\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"actionSetVariables\": {\n \"type\": \"action\",\n \"subType\": \"actionSetVariables\",\n \"label\": \"Set Variables\",\n \"icon\": \"Variable\",\n \"description\": \"Set workflow variables\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Set Variables\"\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"actionUpdateEntityRecord\": {\n \"type\": \"action\",\n \"subType\": \"actionUpdateEntityRecord\",\n \"label\": \"Update Entity Record\",\n \"icon\": \"FileEdit\",\n \"description\": \"Update an existing entity record\",\n \"category\": \"Data Operations\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Update Entity Record\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"fields\": {\n \"type\": \"object\",\n \"title\": \"Field Updates\"\n },\n \"recordIdExpr\": {\n \"type\": \"string\",\n \"title\": \"Record ID Expression\"\n }\n },\n \"required\": [\n \"entityName\",\n \"recordIdExpr\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"updated\": {\n \"type\": \"boolean\"\n }\n }\n }\n },\n \"agentChat\": {\n \"type\": \"agent\",\n \"subType\": \"agentChat\",\n \"label\": \"Chat\",\n \"icon\": \"MessageSquare\",\n \"description\": \"AI chat interaction\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Chat\",\n \"properties\": {\n \"maxTokens\": {\n \"type\": \"integer\",\n \"title\": \"Max Tokens\",\n \"minimum\": 1,\n \"maximum\": 4096\n },\n \"model\": {\n \"type\": \"string\",\n \"title\": \"Model\",\n \"enum\": [\n \"gpt-4\",\n \"gpt-4-turbo\",\n \"gpt-3.5-turbo\",\n \"claude-3-opus\",\n \"claude-3-sonnet\"\n ],\n \"x-enumLabels\": [\n \"GPT-4\",\n \"GPT-4 Turbo\",\n \"GPT-3.5 Turbo\",\n \"Claude 3 Opus\",\n \"Claude 3 Sonnet\"\n ]\n },\n \"systemPrompt\": {\n \"type\": \"string\",\n \"title\": \"System Prompt\",\n \"format\": \"multiline\"\n },\n \"temperature\": {\n \"type\": \"number\",\n \"title\": \"Temperature\",\n \"minimum\": 0,\n \"maximum\": 2\n }\n },\n \"required\": [\n \"systemPrompt\",\n \"model\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentCustomResponse\": {\n \"type\": \"agent\",\n \"subType\": \"agentCustomResponse\",\n \"label\": \"Custom Response\",\n \"icon\": \"MessageCircle\",\n \"description\": \"Send a custom response message\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Custom Response\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Response Message\",\n \"format\": \"multiline\"\n }\n },\n \"required\": [\n \"message\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"agentIntentDetector\": {\n \"type\": \"agent\",\n \"subType\": \"agentIntentDetector\",\n \"label\": \"Intent Detector\",\n \"icon\": \"Target\",\n \"description\": \"Detect user intent from message\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Intent Detector\",\n \"properties\": {\n \"intents\": {\n \"type\": \"array\",\n \"title\": \"Intents\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"ID\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n }\n }\n }\n }\n },\n \"required\": [\n \"intents\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"confidence\": {\n \"type\": \"number\"\n },\n \"intent\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentKnowledgeGraph\": {\n \"type\": \"agent\",\n \"subType\": \"agentKnowledgeGraph\",\n \"label\": \"Knowledge Graph\",\n \"icon\": \"Network\",\n \"description\": \"Query knowledge graph for information\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Knowledge Graph\",\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"title\": \"Fields\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"label\": {\n \"type\": \"string\",\n \"title\": \"Label\"\n }\n },\n \"required\": [\n \"label\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"kg_response\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n }\n },\n \"agentOpenTicket\": {\n \"type\": \"agent\",\n \"subType\": \"agentOpenTicket\",\n \"label\": \"Open Ticket\",\n \"icon\": \"Ticket\",\n \"description\": \"Create a support ticket\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Open Ticket\",\n \"properties\": {\n \"priority\": {\n \"type\": \"string\",\n \"title\": \"Priority\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"urgent\"\n ]\n },\n \"ticketType\": {\n \"type\": \"string\",\n \"title\": \"Ticket Type\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"ticketId\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"agentStructuredOutput\": {\n \"type\": \"agent\",\n \"subType\": \"agentStructuredOutput\",\n \"label\": \"Structured Output\",\n \"icon\": \"Brain\",\n \"description\": \"AI-powered structured data extraction\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Structured Output\",\n \"properties\": {\n \"inputTemplate\": {\n \"type\": \"string\",\n \"title\": \"Input Template\",\n \"format\": \"multiline\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n },\n \"model\": {\n \"type\": \"string\",\n \"title\": \"Model\"\n },\n \"systemPrompt\": {\n \"type\": \"string\",\n \"title\": \"System Prompt\",\n \"format\": \"multiline\"\n },\n \"temperature\": {\n \"type\": \"number\",\n \"title\": \"Temperature\",\n \"minimum\": 0,\n \"maximum\": 2\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"agentTransferToHuman\": {\n \"type\": \"agent\",\n \"subType\": \"agentTransferToHuman\",\n \"label\": \"Transfer to Human\",\n \"icon\": \"UserCheck\",\n \"description\": \"Transfer conversation to human agent\",\n \"category\": \"AI \\u0026 Automation\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Transfer to Human\",\n \"properties\": {\n \"message\": {\n \"type\": \"string\",\n \"title\": \"Transfer Message\",\n \"format\": \"multiline\"\n },\n \"queueId\": {\n \"type\": \"string\",\n \"title\": \"Queue ID\"\n }\n },\n \"required\": [\n \"message\",\n \"queueId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"delay\": {\n \"type\": \"delay\",\n \"subType\": \"delay\",\n \"label\": \"Delay\",\n \"icon\": \"Clock\",\n \"description\": \"Wait for a specified duration\",\n \"category\": \"Time \\u0026 Scheduling\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Delay\",\n \"properties\": {\n \"duration\": {\n \"type\": \"integer\",\n \"title\": \"Duration\",\n \"minimum\": 1\n },\n \"unit\": {\n \"type\": \"string\",\n \"title\": \"Unit\",\n \"enum\": [\n \"seconds\",\n \"minutes\",\n \"hours\",\n \"days\"\n ],\n \"x-enumLabels\": [\n \"Seconds\",\n \"Minutes\",\n \"Hours\",\n \"Days\"\n ]\n }\n },\n \"required\": [\n \"duration\",\n \"unit\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionApproval\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionApproval\",\n \"label\": \"Approval\",\n \"icon\": \"CheckCircle\",\n \"description\": \"Request human approval\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Approval\",\n \"properties\": {\n \"allowEdit\": {\n \"type\": \"boolean\",\n \"title\": \"Allow Edit\"\n },\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"decision\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"humanActionAssignment\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionAssignment\",\n \"label\": \"Task Assignment\",\n \"icon\": \"UserPlus\",\n \"description\": \"Assign a task to a user\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Task Assignment\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"priority\": {\n \"type\": \"string\",\n \"title\": \"Priority\",\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"urgent\"\n ],\n \"x-enumLabels\": [\n \"Low\",\n \"Medium\",\n \"High\",\n \"Urgent\"\n ]\n },\n \"taskDescription\": {\n \"type\": \"string\",\n \"title\": \"Task Description\",\n \"format\": \"multiline\"\n },\n \"taskTitle\": {\n \"type\": \"string\",\n \"title\": \"Task Title\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionDataEntry\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionDataEntry\",\n \"label\": \"Data Entry\",\n \"icon\": \"FormInput\",\n \"description\": \"Request human data entry\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Data Entry\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"formSchema\": {\n \"type\": \"object\",\n \"title\": \"Form Schema\"\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"humanActionReview\": {\n \"type\": \"humanAction\",\n \"subType\": \"humanActionReview\",\n \"label\": \"Review\",\n \"icon\": \"Eye\",\n \"description\": \"Request human review\",\n \"category\": \"User Interaction\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Review\",\n \"properties\": {\n \"assignTo\": {\n \"type\": \"string\",\n \"title\": \"Assign To\"\n },\n \"dueInHours\": {\n \"type\": \"integer\",\n \"title\": \"Due In (Hours)\",\n \"minimum\": 1\n },\n \"editableFields\": {\n \"type\": \"array\",\n \"title\": \"Editable Fields\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"instructions\": {\n \"type\": \"string\",\n \"title\": \"Instructions\",\n \"format\": \"multiline\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"decision\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"integrationCreateEvent\": {\n \"type\": \"integration\",\n \"subType\": \"integrationCreateEvent\",\n \"label\": \"Create Calendar Event\",\n \"icon\": \"CalendarPlus\",\n \"description\": \"Create event in user's calendar\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Create Calendar Event\",\n \"properties\": {\n \"attendees\": {\n \"type\": \"string\",\n \"title\": \"Attendees\",\n \"description\": \"Comma-separated email addresses\"\n },\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\",\n \"format\": \"multiline\"\n },\n \"endTime\": {\n \"type\": \"string\",\n \"title\": \"End Time\",\n \"format\": \"date-time\"\n },\n \"location\": {\n \"type\": \"string\",\n \"title\": \"Location\"\n },\n \"sendInvites\": {\n \"type\": \"boolean\",\n \"title\": \"Send Calendar Invites\",\n \"default\": true\n },\n \"startTime\": {\n \"type\": \"string\",\n \"title\": \"Start Time\",\n \"format\": \"date-time\"\n },\n \"title\": {\n \"type\": \"string\",\n \"title\": \"Title\"\n }\n },\n \"required\": [\n \"title\",\n \"startTime\",\n \"endTime\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"created\": {\n \"type\": \"boolean\",\n \"title\": \"Created\"\n },\n \"eventId\": {\n \"type\": \"string\",\n \"title\": \"Event ID\"\n },\n \"eventUrl\": {\n \"type\": \"string\",\n \"title\": \"Event URL\"\n }\n }\n }\n },\n \"integrationGetDriveFile\": {\n \"type\": \"integration\",\n \"subType\": \"integrationGetDriveFile\",\n \"label\": \"Get Drive File\",\n \"icon\": \"File\",\n \"description\": \"Get details of a specific file\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Get Drive File\",\n \"properties\": {\n \"fileId\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n }\n },\n \"required\": [\n \"fileId\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"file\": {\n \"type\": \"object\",\n \"properties\": {\n \"downloadUrl\": {\n \"type\": \"string\",\n \"title\": \"Download URL\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"MIME Type\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"size\": {\n \"type\": \"integer\",\n \"title\": \"Size (bytes)\"\n },\n \"webLink\": {\n \"type\": \"string\",\n \"title\": \"Web Link\"\n }\n }\n }\n }\n }\n },\n \"integrationSearchCalendar\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchCalendar\",\n \"label\": \"Search Calendar\",\n \"icon\": \"CalendarSearch\",\n \"description\": \"Search calendar events\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Calendar\",\n \"properties\": {\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Search in event titles and descriptions\"\n },\n \"timeMax\": {\n \"type\": \"string\",\n \"title\": \"End Date\",\n \"description\": \"Search events before this date\",\n \"format\": \"date-time\"\n },\n \"timeMin\": {\n \"type\": \"string\",\n \"title\": \"Start Date\",\n \"description\": \"Search events after this date\",\n \"format\": \"date-time\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"events\": {\n \"type\": \"array\",\n \"title\": \"Events\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSearchDrive\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchDrive\",\n \"label\": \"Search Drive\",\n \"icon\": \"FolderSearch\",\n \"description\": \"Search files in user's Drive\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Drive\",\n \"properties\": {\n \"folderId\": {\n \"type\": \"string\",\n \"title\": \"Folder ID\",\n \"description\": \"Search in specific folder\"\n },\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"File Type\",\n \"enum\": [\n \"\",\n \"document\",\n \"spreadsheet\",\n \"presentation\",\n \"pdf\",\n \"image\",\n \"folder\"\n ],\n \"x-enumLabels\": [\n \"Any\",\n \"Documents\",\n \"Spreadsheets\",\n \"Presentations\",\n \"PDFs\",\n \"Images\",\n \"Folders\"\n ]\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Search in file names and content\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"files\": {\n \"type\": \"array\",\n \"title\": \"Files\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSearchEmails\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSearchEmails\",\n \"label\": \"Search Emails\",\n \"icon\": \"MailSearch\",\n \"description\": \"Search user's emails\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Search Emails\",\n \"properties\": {\n \"dateRange\": {\n \"type\": \"string\",\n \"title\": \"Date Range\",\n \"enum\": [\n \"1d\",\n \"7d\",\n \"30d\",\n \"90d\",\n \"all\"\n ],\n \"x-enumLabels\": [\n \"Last 24 hours\",\n \"Last 7 days\",\n \"Last 30 days\",\n \"Last 90 days\",\n \"All time\"\n ]\n },\n \"maxResults\": {\n \"type\": \"integer\",\n \"title\": \"Max Results\",\n \"default\": 20,\n \"minimum\": 1,\n \"maximum\": 100\n },\n \"query\": {\n \"type\": \"string\",\n \"title\": \"Search Query\",\n \"description\": \"Gmail/Outlook search query\"\n }\n },\n \"required\": [\n \"query\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"emails\": {\n \"type\": \"array\",\n \"title\": \"Emails\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"total\": {\n \"type\": \"integer\",\n \"title\": \"Total\"\n }\n }\n }\n },\n \"integrationSendEmail\": {\n \"type\": \"integration\",\n \"subType\": \"integrationSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Send\",\n \"description\": \"Send email via user's connected account\",\n \"category\": \"Integration\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Send Email\",\n \"properties\": {\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\",\n \"format\": \"multiline\"\n },\n \"bodyType\": {\n \"type\": \"string\",\n \"title\": \"Body Type\",\n \"default\": \"text\",\n \"enum\": [\n \"text\",\n \"html\"\n ],\n \"x-enumLabels\": [\n \"Plain Text\",\n \"HTML\"\n ]\n },\n \"cc\": {\n \"type\": \"string\",\n \"title\": \"CC\"\n },\n \"replyToMessageId\": {\n \"type\": \"string\",\n \"title\": \"Reply To Message ID\",\n \"description\": \"Optional: message ID to reply to\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n },\n \"required\": [\n \"to\",\n \"subject\",\n \"body\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"messageId\": {\n \"type\": \"string\",\n \"title\": \"Message ID\"\n },\n \"sent\": {\n \"type\": \"boolean\",\n \"title\": \"Sent\"\n }\n }\n }\n },\n \"logicFor\": {\n \"type\": \"logic\",\n \"subType\": \"logicFor\",\n \"label\": \"Loop\",\n \"icon\": \"Repeat\",\n \"description\": \"Iterate over a collection\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Loop\",\n \"properties\": {\n \"collection\": {\n \"type\": \"string\",\n \"title\": \"Collection Expression\"\n },\n \"indexVariable\": {\n \"type\": \"string\",\n \"title\": \"Index Variable Name\"\n },\n \"itemVariable\": {\n \"type\": \"string\",\n \"title\": \"Item Variable Name\"\n },\n \"maxIterations\": {\n \"type\": \"integer\",\n \"title\": \"Max Iterations\",\n \"minimum\": 1,\n \"maximum\": 10000\n }\n },\n \"required\": [\n \"collection\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"logicIf\": {\n \"type\": \"logic\",\n \"subType\": \"logicIf\",\n \"label\": \"If Condition\",\n \"icon\": \"GitBranch\",\n \"description\": \"Conditional branching based on variables\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"If Condition Configuration\",\n \"properties\": {\n \"conditions\": {\n \"type\": \"array\",\n \"title\": \"Conditions\",\n \"description\": \"Define conditions to evaluate against workflow variables\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"field\": {\n \"type\": \"string\",\n \"title\": \"Variable\",\n \"description\": \"Variable path (e.g., emailSent, user.role)\"\n },\n \"operator\": {\n \"type\": \"string\",\n \"title\": \"Operator\",\n \"enum\": [\n \"eq\",\n \"neq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"contains\",\n \"startsWith\",\n \"endsWith\",\n \"isEmpty\",\n \"isNotEmpty\"\n ]\n },\n \"value\": {\n \"type\": \"string\",\n \"title\": \"Value\",\n \"description\": \"Value to compare against\"\n }\n },\n \"required\": [\n \"field\",\n \"operator\"\n ]\n }\n },\n \"defaultPath\": {\n \"type\": \"string\",\n \"title\": \"Default Path ID\",\n \"description\": \"Path to use if no condition matches\"\n },\n \"expression\": {\n \"type\": \"string\",\n \"title\": \"Advanced Expression\",\n \"description\": \"JavaScript expression for complex conditions (e.g., amount \\u003e 1000 \\u0026\\u0026 status === 'approved')\",\n \"format\": \"multiline\"\n },\n \"logic\": {\n \"type\": \"string\",\n \"title\": \"Logic\",\n \"description\": \"How to combine multiple conditions\",\n \"default\": \"and\",\n \"enum\": [\n \"and\",\n \"or\"\n ]\n },\n \"paths\": {\n \"type\": \"array\",\n \"title\": \"Paths\",\n \"description\": \"Define target nodes for true/false outcomes\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"condition\": {\n \"type\": \"string\",\n \"title\": \"Condition\",\n \"enum\": [\n \"true\",\n \"false\"\n ]\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Path ID\"\n },\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n }\n },\n \"required\": [\n \"id\",\n \"condition\"\n ]\n }\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"conditionResult\": {\n \"type\": \"boolean\"\n },\n \"pathTaken\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"logicSwitch\": {\n \"type\": \"logic\",\n \"subType\": \"logicSwitch\",\n \"label\": \"Switch\",\n \"icon\": \"GitMerge\",\n \"description\": \"Multi-way branching based on value\",\n \"category\": \"Flow Control\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Switch\",\n \"properties\": {\n \"cases\": {\n \"type\": \"array\",\n \"title\": \"Cases\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"nodeId\": {\n \"type\": \"string\",\n \"title\": \"Target Node ID\"\n },\n \"value\": {\n \"type\": \"string\",\n \"title\": \"Value\"\n }\n }\n }\n },\n \"expression\": {\n \"type\": \"string\",\n \"title\": \"Switch Expression\"\n }\n },\n \"required\": [\n \"expression\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerCalendarEvent\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerCalendarEvent\",\n \"label\": \"Calendar Event\",\n \"icon\": \"CalendarClock\",\n \"description\": \"Trigger before or when calendar events occur\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Calendar Trigger\",\n \"properties\": {\n \"leadTime\": {\n \"type\": \"integer\",\n \"title\": \"Minutes Before\",\n \"description\": \"For reminder triggers\",\n \"default\": 30,\n \"minimum\": 5,\n \"maximum\": 1440\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Google Calendar\",\n \"Outlook Calendar\"\n ]\n },\n \"triggerType\": {\n \"type\": \"string\",\n \"title\": \"Trigger When\",\n \"enum\": [\n \"reminder\",\n \"event_start\",\n \"event_created\"\n ],\n \"x-enumLabels\": [\n \"Before Event (Reminder)\",\n \"Event Starts\",\n \"Event Created\"\n ]\n }\n },\n \"required\": [\n \"provider\",\n \"triggerType\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"event\": {\n \"type\": \"object\",\n \"properties\": {\n \"attendees\": {\n \"type\": \"array\",\n \"title\": \"Attendees\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"endTime\": {\n \"type\": \"string\",\n \"title\": \"End Time\",\n \"format\": \"date-time\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Event ID\"\n },\n \"location\": {\n \"type\": \"string\",\n \"title\": \"Location\"\n },\n \"startTime\": {\n \"type\": \"string\",\n \"title\": \"Start Time\",\n \"format\": \"date-time\"\n },\n \"title\": {\n \"type\": \"string\",\n \"title\": \"Title\"\n }\n }\n }\n }\n }\n },\n \"triggerDriveFileChanged\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerDriveFileChanged\",\n \"label\": \"File Changed\",\n \"icon\": \"FolderSync\",\n \"description\": \"Trigger when files are added or modified in Drive\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Drive Trigger\",\n \"properties\": {\n \"changeType\": {\n \"type\": \"string\",\n \"title\": \"Change Type\",\n \"enum\": [\n \"created\",\n \"modified\",\n \"any\"\n ],\n \"x-enumLabels\": [\n \"File Created\",\n \"File Modified\",\n \"Any Change\"\n ]\n },\n \"fileTypes\": {\n \"type\": \"array\",\n \"title\": \"File Types\",\n \"description\": \"Filter by extension (e.g., pdf, docx)\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"folderId\": {\n \"type\": \"string\",\n \"title\": \"Folder ID\",\n \"description\": \"Watch specific folder (leave empty for all)\"\n },\n \"pollInterval\": {\n \"type\": \"integer\",\n \"title\": \"Poll Interval (minutes)\",\n \"default\": 10,\n \"minimum\": 5\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Google Drive\",\n \"OneDrive\"\n ]\n }\n },\n \"required\": [\n \"provider\",\n \"changeType\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"file\": {\n \"type\": \"object\",\n \"properties\": {\n \"createdAt\": {\n \"type\": \"string\",\n \"title\": \"Created At\",\n \"format\": \"date-time\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"File ID\"\n },\n \"mimeType\": {\n \"type\": \"string\",\n \"title\": \"MIME Type\"\n },\n \"name\": {\n \"type\": \"string\",\n \"title\": \"Name\"\n },\n \"size\": {\n \"type\": \"integer\",\n \"title\": \"Size (bytes)\"\n },\n \"webLink\": {\n \"type\": \"string\",\n \"title\": \"Web Link\"\n }\n }\n }\n }\n }\n },\n \"triggerEmailReceived\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEmailReceived\",\n \"label\": \"Email Received\",\n \"icon\": \"Mail\",\n \"description\": \"Trigger when a new email matches filters\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Email Trigger\",\n \"properties\": {\n \"fromFilter\": {\n \"type\": \"string\",\n \"title\": \"From (contains)\",\n \"description\": \"Filter by sender email or name\"\n },\n \"hasAttachment\": {\n \"type\": \"boolean\",\n \"title\": \"Has Attachment\"\n },\n \"isUnread\": {\n \"type\": \"boolean\",\n \"title\": \"Unread Only\",\n \"default\": true\n },\n \"labelFilter\": {\n \"type\": \"string\",\n \"title\": \"Label/Folder\",\n \"description\": \"Gmail label or Outlook folder\"\n },\n \"pollInterval\": {\n \"type\": \"integer\",\n \"title\": \"Poll Interval (minutes)\",\n \"default\": 5,\n \"minimum\": 1,\n \"maximum\": 60\n },\n \"provider\": {\n \"type\": \"string\",\n \"title\": \"Provider\",\n \"enum\": [\n \"google\",\n \"microsoft\"\n ],\n \"x-enumLabels\": [\n \"Gmail\",\n \"Outlook\"\n ]\n },\n \"subjectFilter\": {\n \"type\": \"string\",\n \"title\": \"Subject (contains)\"\n }\n },\n \"required\": [\n \"provider\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"email\": {\n \"type\": \"object\",\n \"properties\": {\n \"body\": {\n \"type\": \"string\",\n \"title\": \"Body\"\n },\n \"date\": {\n \"type\": \"string\",\n \"title\": \"Date\",\n \"format\": \"date-time\"\n },\n \"from\": {\n \"type\": \"string\",\n \"title\": \"From\"\n },\n \"id\": {\n \"type\": \"string\",\n \"title\": \"Email ID\"\n },\n \"snippet\": {\n \"type\": \"string\",\n \"title\": \"Snippet\"\n },\n \"subject\": {\n \"type\": \"string\",\n \"title\": \"Subject\"\n },\n \"to\": {\n \"type\": \"string\",\n \"title\": \"To\"\n }\n }\n }\n }\n }\n },\n \"triggerEntityRecordCreated\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordCreated\",\n \"label\": \"Entity Record Created\",\n \"icon\": \"Plus\",\n \"description\": \"Triggers when a new entity record is created\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Created\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The created entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEntityRecordDeleted\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordDeleted\",\n \"label\": \"Entity Record Deleted\",\n \"icon\": \"Trash\",\n \"description\": \"Triggers when an entity record is deleted\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Deleted\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The deleted entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEntityRecordUpdated\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEntityRecordUpdated\",\n \"label\": \"Entity Record Updated\",\n \"icon\": \"Pencil\",\n \"description\": \"Triggers when an entity record is updated\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Entity Record Updated\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"filters\": {\n \"type\": \"object\",\n \"title\": \"Filters\"\n },\n \"watchFields\": {\n \"type\": \"array\",\n \"title\": \"Watch Fields\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"entityName\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\"\n },\n \"entityRecordId\": {\n \"type\": \"string\"\n }\n }\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"entityName\": {\n \"type\": \"string\",\n \"title\": \"Entity Name\"\n },\n \"entityRecordId\": {\n \"type\": \"string\",\n \"title\": \"Record ID\"\n },\n \"record\": {\n \"type\": \"object\",\n \"title\": \"Entity Record\",\n \"description\": \"The updated entity record (fields vary by entity type)\"\n }\n }\n }\n },\n \"triggerEscalation\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerEscalation\",\n \"label\": \"Escalation\",\n \"icon\": \"ArrowUpRight\",\n \"description\": \"Triggers when an escalation occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Escalation\",\n \"properties\": {\n \"escalationLevel\": {\n \"type\": \"integer\",\n \"title\": \"Escalation Level\",\n \"minimum\": 1\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSLABreach\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSLABreach\",\n \"label\": \"SLA Breach\",\n \"icon\": \"TriangleAlert\",\n \"description\": \"Triggers when an SLA breach occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"SLA Breach\",\n \"properties\": {\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"SLA Policy ID\"\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSLAWarning\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSLAWarning\",\n \"label\": \"SLA Warning\",\n \"icon\": \"Timer\",\n \"description\": \"Triggers when an SLA warning occurs\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"SLA Warning\",\n \"properties\": {\n \"policyId\": {\n \"type\": \"string\",\n \"title\": \"SLA Policy ID\"\n },\n \"warningThreshold\": {\n \"type\": \"number\",\n \"title\": \"Warning Threshold (%)\",\n \"minimum\": 0,\n \"maximum\": 100\n }\n }\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerSchedule\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerSchedule\",\n \"label\": \"Schedule\",\n \"icon\": \"Calendar\",\n \"description\": \"Trigger workflow on a schedule (cron expression)\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Schedule Trigger\",\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"title\": \"Description\"\n },\n \"schedule\": {\n \"type\": \"string\",\n \"title\": \"Cron Expression\",\n \"description\": \"e.g., '0 9 * * MON-FRI' for weekdays at 9am\"\n },\n \"timezone\": {\n \"type\": \"string\",\n \"title\": \"Timezone\",\n \"default\": \"UTC\",\n \"enum\": [\n \"UTC\",\n \"America/New_York\",\n \"America/Chicago\",\n \"America/Denver\",\n \"America/Los_Angeles\",\n \"Europe/London\",\n \"Europe/Paris\",\n \"Asia/Tokyo\"\n ],\n \"x-enumLabels\": [\n \"UTC\",\n \"Eastern Time\",\n \"Central Time\",\n \"Mountain Time\",\n \"Pacific Time\",\n \"London\",\n \"Paris\",\n \"Tokyo\"\n ]\n }\n },\n \"required\": [\n \"schedule\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\",\n \"properties\": {\n \"schedule\": {\n \"type\": \"string\",\n \"title\": \"Schedule\"\n },\n \"triggeredAt\": {\n \"type\": \"string\",\n \"title\": \"Triggered At\",\n \"format\": \"date-time\"\n }\n }\n }\n },\n \"triggerStart\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerStart\",\n \"label\": \"Start\",\n \"icon\": \"Play\",\n \"description\": \"Workflow entry point - receives input and sets variables\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\"\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n },\n \"triggerWebhookReceived\": {\n \"type\": \"trigger\",\n \"subType\": \"triggerWebhookReceived\",\n \"label\": \"Webhook\",\n \"icon\": \"Webhook\",\n \"description\": \"Triggers when a webhook is received\",\n \"category\": \"Triggers\",\n \"config\": {\n \"type\": \"object\",\n \"title\": \"Webhook Trigger\",\n \"properties\": {\n \"method\": {\n \"type\": \"string\",\n \"title\": \"HTTP Method\",\n \"enum\": [\n \"POST\",\n \"GET\",\n \"PUT\"\n ]\n },\n \"secret\": {\n \"type\": \"string\",\n \"title\": \"Secret\",\n \"format\": \"password\"\n },\n \"webhookPath\": {\n \"type\": \"string\",\n \"title\": \"Webhook Path\"\n }\n },\n \"required\": [\n \"webhookPath\"\n ]\n },\n \"input\": {\n \"type\": \"object\"\n },\n \"output\": {\n \"type\": \"object\"\n }\n }\n} as const;\n\n// Helper to get just the config schemas (for backwards compatibility)\nexport const nodeSchemas: Record<string, JSONSchema> = Object.fromEntries(\n Object.entries(nodeDefinitions).map(([key, def]) => [key, def.config])\n);\n\n// Grouped subtypes for backwards compatibility with existing frontend code\nexport const TriggerNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"triggerCalendarEvent\": {\n \"value\": \"triggerCalendarEvent\",\n \"label\": \"Calendar Event\",\n \"icon\": \"CalendarClock\",\n \"description\": \"Trigger before or when calendar events occur\"\n },\n \"triggerDriveFileChanged\": {\n \"value\": \"triggerDriveFileChanged\",\n \"label\": \"File Changed\",\n \"icon\": \"FolderSync\",\n \"description\": \"Trigger when files are added or modified in Drive\"\n },\n \"triggerEmailReceived\": {\n \"value\": \"triggerEmailReceived\",\n \"label\": \"Email Received\",\n \"icon\": \"Mail\",\n \"description\": \"Trigger when a new email matches filters\"\n },\n \"triggerEntityRecordCreated\": {\n \"value\": \"triggerEntityRecordCreated\",\n \"label\": \"Entity Record Created\",\n \"icon\": \"Plus\",\n \"description\": \"Triggers when a new entity record is created\"\n },\n \"triggerEntityRecordDeleted\": {\n \"value\": \"triggerEntityRecordDeleted\",\n \"label\": \"Entity Record Deleted\",\n \"icon\": \"Trash\",\n \"description\": \"Triggers when an entity record is deleted\"\n },\n \"triggerEntityRecordUpdated\": {\n \"value\": \"triggerEntityRecordUpdated\",\n \"label\": \"Entity Record Updated\",\n \"icon\": \"Pencil\",\n \"description\": \"Triggers when an entity record is updated\"\n },\n \"triggerEscalation\": {\n \"value\": \"triggerEscalation\",\n \"label\": \"Escalation\",\n \"icon\": \"ArrowUpRight\",\n \"description\": \"Triggers when an escalation occurs\"\n },\n \"triggerSLABreach\": {\n \"value\": \"triggerSLABreach\",\n \"label\": \"SLA Breach\",\n \"icon\": \"TriangleAlert\",\n \"description\": \"Triggers when an SLA breach occurs\"\n },\n \"triggerSLAWarning\": {\n \"value\": \"triggerSLAWarning\",\n \"label\": \"SLA Warning\",\n \"icon\": \"Timer\",\n \"description\": \"Triggers when an SLA warning occurs\"\n },\n \"triggerSchedule\": {\n \"value\": \"triggerSchedule\",\n \"label\": \"Schedule\",\n \"icon\": \"Calendar\",\n \"description\": \"Trigger workflow on a schedule (cron expression)\"\n },\n \"triggerStart\": {\n \"value\": \"triggerStart\",\n \"label\": \"Start\",\n \"icon\": \"Play\",\n \"description\": \"Workflow entry point - receives input and sets variables\"\n },\n \"triggerWebhookReceived\": {\n \"value\": \"triggerWebhookReceived\",\n \"label\": \"Webhook\",\n \"icon\": \"Webhook\",\n \"description\": \"Triggers when a webhook is received\"\n }\n} as const;\nexport const HumanActionNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"humanActionApproval\": {\n \"value\": \"humanActionApproval\",\n \"label\": \"Approval\",\n \"icon\": \"CheckCircle\",\n \"description\": \"Request human approval\"\n },\n \"humanActionAssignment\": {\n \"value\": \"humanActionAssignment\",\n \"label\": \"Task Assignment\",\n \"icon\": \"UserPlus\",\n \"description\": \"Assign a task to a user\"\n },\n \"humanActionDataEntry\": {\n \"value\": \"humanActionDataEntry\",\n \"label\": \"Data Entry\",\n \"icon\": \"FormInput\",\n \"description\": \"Request human data entry\"\n },\n \"humanActionReview\": {\n \"value\": \"humanActionReview\",\n \"label\": \"Review\",\n \"icon\": \"Eye\",\n \"description\": \"Request human review\"\n }\n} as const;\nexport const AgentNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"actionAIClassify\": {\n \"value\": \"actionAIClassify\",\n \"label\": \"AI Classify\",\n \"icon\": \"Tags\",\n \"description\": \"Classify content into categories using AI\"\n },\n \"actionAIExtractData\": {\n \"value\": \"actionAIExtractData\",\n \"label\": \"AI Extract Data\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract structured data from unstructured content\"\n },\n \"actionAISummarize\": {\n \"value\": \"actionAISummarize\",\n \"label\": \"AI Summarize\",\n \"icon\": \"FileText\",\n \"description\": \"Summarize text content using AI\"\n },\n \"agentChat\": {\n \"value\": \"agentChat\",\n \"label\": \"Chat\",\n \"icon\": \"MessageSquare\",\n \"description\": \"AI chat interaction\"\n },\n \"agentCustomResponse\": {\n \"value\": \"agentCustomResponse\",\n \"label\": \"Custom Response\",\n \"icon\": \"MessageCircle\",\n \"description\": \"Send a custom response message\"\n },\n \"agentIntentDetector\": {\n \"value\": \"agentIntentDetector\",\n \"label\": \"Intent Detector\",\n \"icon\": \"Target\",\n \"description\": \"Detect user intent from message\"\n },\n \"agentKnowledgeGraph\": {\n \"value\": \"agentKnowledgeGraph\",\n \"label\": \"Knowledge Graph\",\n \"icon\": \"Network\",\n \"description\": \"Query knowledge graph for information\"\n },\n \"agentOpenTicket\": {\n \"value\": \"agentOpenTicket\",\n \"label\": \"Open Ticket\",\n \"icon\": \"Ticket\",\n \"description\": \"Create a support ticket\"\n },\n \"agentStructuredOutput\": {\n \"value\": \"agentStructuredOutput\",\n \"label\": \"Structured Output\",\n \"icon\": \"Brain\",\n \"description\": \"AI-powered structured data extraction\"\n },\n \"agentTransferToHuman\": {\n \"value\": \"agentTransferToHuman\",\n \"label\": \"Transfer to Human\",\n \"icon\": \"UserCheck\",\n \"description\": \"Transfer conversation to human agent\"\n }\n} as const;\nexport const ActionNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"actionApiCall\": {\n \"value\": \"actionApiCall\",\n \"label\": \"API Call\",\n \"icon\": \"Globe\",\n \"description\": \"Make HTTP API requests\"\n },\n \"actionAssignSLAPolicy\": {\n \"value\": \"actionAssignSLAPolicy\",\n \"label\": \"Assign SLA Policy\",\n \"icon\": \"Clock\",\n \"description\": \"Assign an SLA policy to a record\"\n },\n \"actionCreateEntityRecord\": {\n \"value\": \"actionCreateEntityRecord\",\n \"label\": \"Create Entity Record\",\n \"icon\": \"FilePlus\",\n \"description\": \"Create a new entity record\"\n },\n \"actionDeleteEntityRecord\": {\n \"value\": \"actionDeleteEntityRecord\",\n \"label\": \"Delete Entity Record\",\n \"icon\": \"FileX\",\n \"description\": \"Delete an entity record\"\n },\n \"actionDocumentExtraction\": {\n \"value\": \"actionDocumentExtraction\",\n \"label\": \"Document Extraction\",\n \"icon\": \"FileSearch\",\n \"description\": \"Extract data from documents using AI\"\n },\n \"actionNatsRequest\": {\n \"value\": \"actionNatsRequest\",\n \"label\": \"NATS Request\",\n \"icon\": \"Send\",\n \"description\": \"Execute a NATS request-reply call with dynamic subject routing\"\n },\n \"actionQueryEntityRecords\": {\n \"value\": \"actionQueryEntityRecords\",\n \"label\": \"Query Entity Records\",\n \"icon\": \"Search\",\n \"description\": \"Query entity records with filters\"\n },\n \"actionSendEmail\": {\n \"value\": \"actionSendEmail\",\n \"label\": \"Send Email\",\n \"icon\": \"Mail\",\n \"description\": \"Send an email notification\"\n },\n \"actionSendSMS\": {\n \"value\": \"actionSendSMS\",\n \"label\": \"Send SMS\",\n \"icon\": \"Smartphone\",\n \"description\": \"Send an SMS message\"\n },\n \"actionSetVariables\": {\n \"value\": \"actionSetVariables\",\n \"label\": \"Set Variables\",\n \"icon\": \"Variable\",\n \"description\": \"Set workflow variables\"\n },\n \"actionUpdateEntityRecord\": {\n \"value\": \"actionUpdateEntityRecord\",\n \"label\": \"Update Entity Record\",\n \"icon\": \"FileEdit\",\n \"description\": \"Update an existing entity record\"\n }\n} as const;\nexport const LogicNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"logicFor\": {\n \"value\": \"logicFor\",\n \"label\": \"Loop\",\n \"icon\": \"Repeat\",\n \"description\": \"Iterate over a collection\"\n },\n \"logicIf\": {\n \"value\": \"logicIf\",\n \"label\": \"If Condition\",\n \"icon\": \"GitBranch\",\n \"description\": \"Conditional branching based on variables\"\n },\n \"logicSwitch\": {\n \"value\": \"logicSwitch\",\n \"label\": \"Switch\",\n \"icon\": \"GitMerge\",\n \"description\": \"Multi-way branching based on value\"\n }\n} as const;\nexport const DelayNodeSubTypes: Record<string, NodeSubTypeInfo> = {\n \"delay\": {\n \"value\": \"delay\",\n \"label\": \"Delay\",\n \"icon\": \"Clock\",\n \"description\": \"Wait for a specified duration\"\n }\n} as const;\nexport const ParallelNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\n\n// Empty placeholders for node types not yet defined in Go\nexport const DataNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const TimerNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const LoopNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\nexport const AccountingNodeSubTypes: Record<string, NodeSubTypeInfo> = {} as const;\n\n// Type aliases for backwards compatibility\nexport type TriggerNodeSubType = keyof typeof TriggerNodeSubTypes;\nexport type HumanActionNodeSubType = keyof typeof HumanActionNodeSubTypes;\nexport type AgentNodeSubType = keyof typeof AgentNodeSubTypes;\nexport type ActionNodeSubType = keyof typeof ActionNodeSubTypes;\nexport type LogicNodeSubType = keyof typeof LogicNodeSubTypes;\nexport type DelayNodeSubType = keyof typeof DelayNodeSubTypes;\nexport type DataNodeSubType = keyof typeof DataNodeSubTypes;\nexport type TimerNodeSubType = keyof typeof TimerNodeSubTypes;\nexport type LoopNodeSubType = keyof typeof LoopNodeSubTypes;\nexport type ParallelNodeSubType = keyof typeof ParallelNodeSubTypes;\nexport type AccountingNodeSubType = keyof typeof AccountingNodeSubTypes;\n\nexport type WorkflowNodeSubTypeTS =\n | TriggerNodeSubType\n | HumanActionNodeSubType\n | AgentNodeSubType\n | ActionNodeSubType\n | LogicNodeSubType\n | DelayNodeSubType\n | DataNodeSubType\n | TimerNodeSubType\n | LoopNodeSubType\n | ParallelNodeSubType\n | AccountingNodeSubType;\n\n// WorkflowNodeTypes constant for backwards compatibility\nexport const WorkflowNodeTypes = {\n trigger: { value: 'trigger', label: 'Trigger', category: 'Triggers' },\n humanAction: { value: 'humanAction', label: 'Human Action', category: 'User Interaction' },\n agent: { value: 'agent', label: 'Agent', category: 'Automation' },\n action: { value: 'action', label: 'Action', category: 'Automation' },\n logic: { value: 'logic', label: 'Logic', category: 'Flow Control' },\n data: { value: 'data', label: 'Data', category: 'Data Processing' },\n integration: { value: 'integration', label: 'Integration', category: 'Integration' },\n timer: { value: 'timer', label: 'Timer', category: 'Time & Scheduling' },\n loop: { value: 'loop', label: 'Loop', category: 'Flow Control' },\n parallel: { value: 'parallel', label: 'Parallel', category: 'Flow Control' },\n delay: { value: 'delay', label: 'Delay', category: 'Flow Control' },\n subflow: { value: 'subflow', label: 'Subflow', category: 'Flow Control' },\n custom: { value: 'custom', label: 'Custom', category: 'Custom' },\n documentExtraction: { value: 'documentExtraction', label: 'Document Extraction', category: 'Data Processing' },\n apiCall: { value: 'apiCall', label: 'API Call', category: 'Integration' },\n accounting: { value: 'accounting', label: 'Accounting', category: 'Accounting' },\n} as const;\n\nexport type WorkflowNodeTypeTS = keyof typeof WorkflowNodeTypes;\nexport type WorkflowNodeTypeOptionTS = typeof WorkflowNodeTypes[WorkflowNodeTypeTS];\n\nexport type NodeCategory =\n | \"Triggers\"\n | \"User Interaction\"\n | \"Automation\"\n | \"Integration\"\n | \"Flow Control\"\n | \"Data Processing\"\n | \"Time & Scheduling\"\n | \"Custom\"\n | \"Document Processing\"\n | \"API Integration\"\n | \"Accounting\";\n\n// Edge type definitions (generated from Go)\nexport const WorkflowEdgeTypes: Record<string, EdgeTypeDefinition> = {\n \"compensation\": {\n \"value\": \"compensation\",\n \"label\": \"Compensation\"\n },\n \"conditional\": {\n \"value\": \"conditional\",\n \"label\": \"Conditional\"\n },\n \"default\": {\n \"value\": \"default\",\n \"label\": \"Default\"\n },\n \"error\": {\n \"value\": \"error\",\n \"label\": \"Error\"\n },\n \"loopBack\": {\n \"value\": \"loopBack\",\n \"label\": \"Loop Back\"\n },\n \"merge\": {\n \"value\": \"merge\",\n \"label\": \"Merge\"\n },\n \"normal\": {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n \"parallel\": {\n \"value\": \"parallel\",\n \"label\": \"Parallel\"\n },\n \"timeout\": {\n \"value\": \"timeout\",\n \"label\": \"Timeout\"\n }\n} as const;\nexport type WorkflowEdgeTypeTS = keyof typeof WorkflowEdgeTypes;\nexport type WorkflowEdgeTypeOptionTS = typeof WorkflowEdgeTypes[WorkflowEdgeTypeTS];\n\n// Workflow type definitions (generated from Go)\nexport const WorkflowTypes: Record<string, WorkflowTypeDefinition> = {\n \"agent\": {\n \"value\": \"agent\",\n \"label\": \"Agent\"\n },\n \"chat\": {\n \"value\": \"chat\",\n \"label\": \"Chat\"\n },\n \"document\": {\n \"value\": \"document\",\n \"label\": \"Document\"\n },\n \"entity\": {\n \"value\": \"entity\",\n \"label\": \"Entity\"\n },\n \"productivity\": {\n \"value\": \"productivity\",\n \"label\": \"Productivity\"\n }\n} as const;\nexport type WorkflowTypeTS = keyof typeof WorkflowTypes;\nexport type WorkflowTypeOptionTS = typeof WorkflowTypes[WorkflowTypeTS];\n"]}
|