@nyaruka/temba-components 0.131.1 → 0.131.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/.github/workflows/publish.yml +4 -1
  2. package/CHANGELOG.md +61 -1
  3. package/demo/data/flows/food-order.json +2 -2
  4. package/demo/data/flows/sample-flow.json +74 -125
  5. package/dist/static/svg/index.svg +1 -1
  6. package/dist/temba-components.js +1155 -618
  7. package/dist/temba-components.js.map +1 -1
  8. package/out-tsc/src/Icons.js +4 -1
  9. package/out-tsc/src/Icons.js.map +1 -1
  10. package/out-tsc/src/events.js.map +1 -1
  11. package/out-tsc/src/flow/CanvasMenu.js +200 -0
  12. package/out-tsc/src/flow/CanvasMenu.js.map +1 -0
  13. package/out-tsc/src/flow/CanvasNode.js +327 -19
  14. package/out-tsc/src/flow/CanvasNode.js.map +1 -1
  15. package/out-tsc/src/flow/Editor.js +562 -66
  16. package/out-tsc/src/flow/Editor.js.map +1 -1
  17. package/out-tsc/src/flow/NodeEditor.js +240 -93
  18. package/out-tsc/src/flow/NodeEditor.js.map +1 -1
  19. package/out-tsc/src/flow/NodeTypeSelector.js +499 -0
  20. package/out-tsc/src/flow/NodeTypeSelector.js.map +1 -0
  21. package/out-tsc/src/flow/actions/add_contact_groups.js +3 -3
  22. package/out-tsc/src/flow/actions/add_contact_groups.js.map +1 -1
  23. package/out-tsc/src/flow/actions/add_contact_urn.js +62 -4
  24. package/out-tsc/src/flow/actions/add_contact_urn.js.map +1 -1
  25. package/out-tsc/src/flow/actions/add_input_labels.js +3 -3
  26. package/out-tsc/src/flow/actions/add_input_labels.js.map +1 -1
  27. package/out-tsc/src/flow/actions/play_audio.js +2 -2
  28. package/out-tsc/src/flow/actions/play_audio.js.map +1 -1
  29. package/out-tsc/src/flow/actions/remove_contact_groups.js +6 -5
  30. package/out-tsc/src/flow/actions/remove_contact_groups.js.map +1 -1
  31. package/out-tsc/src/flow/actions/request_optin.js +2 -2
  32. package/out-tsc/src/flow/actions/request_optin.js.map +1 -1
  33. package/out-tsc/src/flow/actions/say_msg.js +2 -2
  34. package/out-tsc/src/flow/actions/say_msg.js.map +1 -1
  35. package/out-tsc/src/flow/actions/send_broadcast.js +76 -23
  36. package/out-tsc/src/flow/actions/send_broadcast.js.map +1 -1
  37. package/out-tsc/src/flow/actions/send_email.js +4 -5
  38. package/out-tsc/src/flow/actions/send_email.js.map +1 -1
  39. package/out-tsc/src/flow/actions/send_msg.js +9 -19
  40. package/out-tsc/src/flow/actions/send_msg.js.map +1 -1
  41. package/out-tsc/src/flow/actions/set_contact_channel.js +5 -9
  42. package/out-tsc/src/flow/actions/set_contact_channel.js.map +1 -1
  43. package/out-tsc/src/flow/actions/set_contact_field.js +19 -20
  44. package/out-tsc/src/flow/actions/set_contact_field.js.map +1 -1
  45. package/out-tsc/src/flow/actions/set_contact_language.js +2 -2
  46. package/out-tsc/src/flow/actions/set_contact_language.js.map +1 -1
  47. package/out-tsc/src/flow/actions/set_contact_name.js +2 -12
  48. package/out-tsc/src/flow/actions/set_contact_name.js.map +1 -1
  49. package/out-tsc/src/flow/actions/set_contact_status.js +2 -2
  50. package/out-tsc/src/flow/actions/set_contact_status.js.map +1 -1
  51. package/out-tsc/src/flow/actions/set_run_result.js +3 -3
  52. package/out-tsc/src/flow/actions/set_run_result.js.map +1 -1
  53. package/out-tsc/src/flow/actions/start_session.js +180 -6
  54. package/out-tsc/src/flow/actions/start_session.js.map +1 -1
  55. package/out-tsc/src/flow/config.js +11 -15
  56. package/out-tsc/src/flow/config.js.map +1 -1
  57. package/out-tsc/src/flow/currencies.js +45 -0
  58. package/out-tsc/src/flow/currencies.js.map +1 -0
  59. package/out-tsc/src/flow/nodes/shared-rules.js +257 -0
  60. package/out-tsc/src/flow/nodes/shared-rules.js.map +1 -0
  61. package/out-tsc/src/flow/nodes/shared.js +17 -0
  62. package/out-tsc/src/flow/nodes/shared.js.map +1 -0
  63. package/out-tsc/src/flow/nodes/split_by_airtime.js +205 -5
  64. package/out-tsc/src/flow/nodes/split_by_airtime.js.map +1 -1
  65. package/out-tsc/src/flow/nodes/split_by_contact_field.js +147 -3
  66. package/out-tsc/src/flow/nodes/split_by_contact_field.js.map +1 -1
  67. package/out-tsc/src/flow/nodes/split_by_expression.js +68 -2
  68. package/out-tsc/src/flow/nodes/split_by_expression.js.map +1 -1
  69. package/out-tsc/src/flow/nodes/split_by_groups.js +12 -9
  70. package/out-tsc/src/flow/nodes/split_by_groups.js.map +1 -1
  71. package/out-tsc/src/flow/nodes/split_by_intent.js +7 -0
  72. package/out-tsc/src/flow/nodes/split_by_intent.js.map +1 -0
  73. package/out-tsc/src/flow/nodes/split_by_llm.js +3 -2
  74. package/out-tsc/src/flow/nodes/split_by_llm.js.map +1 -1
  75. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js +2 -2
  76. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js.map +1 -1
  77. package/out-tsc/src/flow/nodes/split_by_random.js +3 -3
  78. package/out-tsc/src/flow/nodes/split_by_random.js.map +1 -1
  79. package/out-tsc/src/flow/nodes/split_by_resthook.js +108 -0
  80. package/out-tsc/src/flow/nodes/split_by_resthook.js.map +1 -0
  81. package/out-tsc/src/flow/nodes/split_by_run_result.js +206 -3
  82. package/out-tsc/src/flow/nodes/split_by_run_result.js.map +1 -1
  83. package/out-tsc/src/flow/nodes/split_by_scheme.js +153 -2
  84. package/out-tsc/src/flow/nodes/split_by_scheme.js.map +1 -1
  85. package/out-tsc/src/flow/nodes/split_by_subflow.js +6 -4
  86. package/out-tsc/src/flow/nodes/split_by_subflow.js.map +1 -1
  87. package/out-tsc/src/flow/nodes/split_by_ticket.js +3 -2
  88. package/out-tsc/src/flow/nodes/split_by_ticket.js.map +1 -1
  89. package/out-tsc/src/flow/nodes/split_by_webhook.js +3 -2
  90. package/out-tsc/src/flow/nodes/split_by_webhook.js.map +1 -1
  91. package/out-tsc/src/flow/nodes/wait_for_audio.js +2 -2
  92. package/out-tsc/src/flow/nodes/wait_for_audio.js.map +1 -1
  93. package/out-tsc/src/flow/nodes/wait_for_digits.js +2 -2
  94. package/out-tsc/src/flow/nodes/wait_for_digits.js.map +1 -1
  95. package/out-tsc/src/flow/nodes/wait_for_image.js +2 -2
  96. package/out-tsc/src/flow/nodes/wait_for_image.js.map +1 -1
  97. package/out-tsc/src/flow/nodes/wait_for_location.js +2 -2
  98. package/out-tsc/src/flow/nodes/wait_for_location.js.map +1 -1
  99. package/out-tsc/src/flow/nodes/wait_for_menu.js +2 -2
  100. package/out-tsc/src/flow/nodes/wait_for_menu.js.map +1 -1
  101. package/out-tsc/src/flow/nodes/wait_for_response.js +32 -567
  102. package/out-tsc/src/flow/nodes/wait_for_response.js.map +1 -1
  103. package/out-tsc/src/flow/nodes/wait_for_video.js +2 -2
  104. package/out-tsc/src/flow/nodes/wait_for_video.js.map +1 -1
  105. package/out-tsc/src/flow/types.js +71 -12
  106. package/out-tsc/src/flow/types.js.map +1 -1
  107. package/out-tsc/src/flow/utils.js +101 -14
  108. package/out-tsc/src/flow/utils.js.map +1 -1
  109. package/out-tsc/src/form/FieldRenderer.js +2 -4
  110. package/out-tsc/src/form/FieldRenderer.js.map +1 -1
  111. package/out-tsc/src/interfaces.js +3 -0
  112. package/out-tsc/src/interfaces.js.map +1 -1
  113. package/out-tsc/src/list/SortableList.js +98 -33
  114. package/out-tsc/src/list/SortableList.js.map +1 -1
  115. package/out-tsc/src/live/ContactChat.js +15 -18
  116. package/out-tsc/src/live/ContactChat.js.map +1 -1
  117. package/out-tsc/src/store/AppState.js +53 -0
  118. package/out-tsc/src/store/AppState.js.map +1 -1
  119. package/out-tsc/src/utils.js +254 -13
  120. package/out-tsc/src/utils.js.map +1 -1
  121. package/out-tsc/temba-modules.js +4 -0
  122. package/out-tsc/temba-modules.js.map +1 -1
  123. package/out-tsc/test/ActionHelper.js +3 -3
  124. package/out-tsc/test/ActionHelper.js.map +1 -1
  125. package/out-tsc/test/NodeHelper.js +6 -3
  126. package/out-tsc/test/NodeHelper.js.map +1 -1
  127. package/out-tsc/test/actions/add_contact_urn.test.js +202 -0
  128. package/out-tsc/test/actions/add_contact_urn.test.js.map +1 -0
  129. package/out-tsc/test/actions/send_broadcast.test.js +148 -0
  130. package/out-tsc/test/actions/send_broadcast.test.js.map +1 -0
  131. package/out-tsc/test/actions/send_email.test.js +17 -23
  132. package/out-tsc/test/actions/send_email.test.js.map +1 -1
  133. package/out-tsc/test/actions/send_msg.test.js +33 -15
  134. package/out-tsc/test/actions/send_msg.test.js.map +1 -1
  135. package/out-tsc/test/actions/start_session.test.js +116 -0
  136. package/out-tsc/test/actions/start_session.test.js.map +1 -0
  137. package/out-tsc/test/nodes/split_by_airtime.test.js +604 -0
  138. package/out-tsc/test/nodes/split_by_airtime.test.js.map +1 -0
  139. package/out-tsc/test/nodes/split_by_contact_field.test.js +387 -0
  140. package/out-tsc/test/nodes/split_by_contact_field.test.js.map +1 -0
  141. package/out-tsc/test/nodes/split_by_expression.test.js +614 -0
  142. package/out-tsc/test/nodes/split_by_expression.test.js.map +1 -0
  143. package/out-tsc/test/nodes/split_by_random.test.js +3 -3
  144. package/out-tsc/test/nodes/split_by_random.test.js.map +1 -1
  145. package/out-tsc/test/nodes/split_by_resthook.test.js +337 -0
  146. package/out-tsc/test/nodes/split_by_resthook.test.js.map +1 -0
  147. package/out-tsc/test/nodes/split_by_run_result.test.js +920 -0
  148. package/out-tsc/test/nodes/split_by_run_result.test.js.map +1 -0
  149. package/out-tsc/test/nodes/split_by_scheme.test.js +399 -0
  150. package/out-tsc/test/nodes/split_by_scheme.test.js.map +1 -0
  151. package/out-tsc/test/nodes/split_by_subflow.test.js +333 -0
  152. package/out-tsc/test/nodes/split_by_subflow.test.js.map +1 -0
  153. package/out-tsc/test/nodes/wait_for_digits.test.js +2 -2
  154. package/out-tsc/test/nodes/wait_for_digits.test.js.map +1 -1
  155. package/out-tsc/test/nodes/wait_for_response.test.js +2 -1
  156. package/out-tsc/test/nodes/wait_for_response.test.js.map +1 -1
  157. package/out-tsc/test/temba-action-drag-between-nodes.test.js +252 -0
  158. package/out-tsc/test/temba-action-drag-between-nodes.test.js.map +1 -0
  159. package/out-tsc/test/temba-canvas-menu.test.js +122 -0
  160. package/out-tsc/test/temba-canvas-menu.test.js.map +1 -0
  161. package/out-tsc/test/temba-flow-editor-node.test.js +85 -2
  162. package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -1
  163. package/out-tsc/test/temba-flow-editor.test.js +7 -8
  164. package/out-tsc/test/temba-flow-editor.test.js.map +1 -1
  165. package/out-tsc/test/temba-node-editor.test.js +3 -1
  166. package/out-tsc/test/temba-node-editor.test.js.map +1 -1
  167. package/out-tsc/test/temba-node-type-selector.test.js +115 -0
  168. package/out-tsc/test/temba-node-type-selector.test.js.map +1 -0
  169. package/out-tsc/test/temba-omnibox.test.js +2 -1
  170. package/out-tsc/test/temba-omnibox.test.js.map +1 -1
  171. package/out-tsc/test/temba-sortable-list.test.js +51 -0
  172. package/out-tsc/test/temba-sortable-list.test.js.map +1 -1
  173. package/out-tsc/test/temba-utils-index.test.js +1 -27
  174. package/out-tsc/test/temba-utils-index.test.js.map +1 -1
  175. package/out-tsc/test/utils.test.js +2 -0
  176. package/out-tsc/test/utils.test.js.map +1 -1
  177. package/package.json +2 -1
  178. package/screenshots/truth/actions/add_contact_groups/editor/descriptive-group-names.png +0 -0
  179. package/screenshots/truth/actions/add_contact_groups/editor/long-group-names.png +0 -0
  180. package/screenshots/truth/actions/add_contact_groups/editor/many-groups.png +0 -0
  181. package/screenshots/truth/actions/add_contact_groups/editor/multiple-groups.png +0 -0
  182. package/screenshots/truth/actions/add_contact_groups/editor/single-group.png +0 -0
  183. package/screenshots/truth/actions/add_contact_groups/render/descriptive-group-names.png +0 -0
  184. package/screenshots/truth/actions/add_contact_groups/render/long-group-names.png +0 -0
  185. package/screenshots/truth/actions/add_contact_groups/render/many-groups.png +0 -0
  186. package/screenshots/truth/actions/add_contact_groups/render/multiple-groups.png +0 -0
  187. package/screenshots/truth/actions/add_contact_groups/render/single-group.png +0 -0
  188. package/screenshots/truth/actions/add_contact_urn/editor/expression-facebook.png +0 -0
  189. package/screenshots/truth/actions/add_contact_urn/editor/expression-phone.png +0 -0
  190. package/screenshots/truth/actions/add_contact_urn/editor/facebook-id.png +0 -0
  191. package/screenshots/truth/actions/add_contact_urn/editor/instagram-handle.png +0 -0
  192. package/screenshots/truth/actions/add_contact_urn/editor/line-id.png +0 -0
  193. package/screenshots/truth/actions/add_contact_urn/editor/phone-number.png +0 -0
  194. package/screenshots/truth/actions/add_contact_urn/editor/telegram-id.png +0 -0
  195. package/screenshots/truth/actions/add_contact_urn/editor/viber-id.png +0 -0
  196. package/screenshots/truth/actions/add_contact_urn/editor/wechat-id.png +0 -0
  197. package/screenshots/truth/actions/add_contact_urn/editor/whatsapp.png +0 -0
  198. package/screenshots/truth/actions/add_contact_urn/render/expression-facebook.png +0 -0
  199. package/screenshots/truth/actions/add_contact_urn/render/expression-phone.png +0 -0
  200. package/screenshots/truth/actions/add_contact_urn/render/facebook-id.png +0 -0
  201. package/screenshots/truth/actions/add_contact_urn/render/instagram-handle.png +0 -0
  202. package/screenshots/truth/actions/add_contact_urn/render/line-id.png +0 -0
  203. package/screenshots/truth/actions/add_contact_urn/render/phone-number.png +0 -0
  204. package/screenshots/truth/actions/add_contact_urn/render/telegram-id.png +0 -0
  205. package/screenshots/truth/actions/add_contact_urn/render/viber-id.png +0 -0
  206. package/screenshots/truth/actions/add_contact_urn/render/wechat-id.png +0 -0
  207. package/screenshots/truth/actions/add_contact_urn/render/whatsapp.png +0 -0
  208. package/screenshots/truth/actions/remove_contact_groups/editor/cleanup-groups.png +0 -0
  209. package/screenshots/truth/actions/remove_contact_groups/editor/long-descriptive-group-names.png +0 -0
  210. package/screenshots/truth/actions/remove_contact_groups/editor/many-groups.png +0 -0
  211. package/screenshots/truth/actions/remove_contact_groups/editor/multiple-groups.png +0 -0
  212. package/screenshots/truth/actions/remove_contact_groups/editor/remove-from-all-groups.png +0 -0
  213. package/screenshots/truth/actions/remove_contact_groups/editor/single-group.png +0 -0
  214. package/screenshots/truth/actions/remove_contact_groups/render/cleanup-groups.png +0 -0
  215. package/screenshots/truth/actions/remove_contact_groups/render/long-descriptive-group-names.png +0 -0
  216. package/screenshots/truth/actions/remove_contact_groups/render/many-groups.png +0 -0
  217. package/screenshots/truth/actions/remove_contact_groups/render/multiple-groups.png +0 -0
  218. package/screenshots/truth/actions/remove_contact_groups/render/remove-from-all-groups.png +0 -0
  219. package/screenshots/truth/actions/remove_contact_groups/render/single-group.png +0 -0
  220. package/screenshots/truth/actions/send_broadcast/editor/contacts-only.png +0 -0
  221. package/screenshots/truth/actions/send_broadcast/editor/groups-and-contacts.png +0 -0
  222. package/screenshots/truth/actions/send_broadcast/editor/groups-only.png +0 -0
  223. package/screenshots/truth/actions/send_broadcast/editor/many-groups.png +0 -0
  224. package/screenshots/truth/actions/send_broadcast/editor/multiline-text.png +0 -0
  225. package/screenshots/truth/actions/send_broadcast/editor/with-attachments.png +0 -0
  226. package/screenshots/truth/actions/send_broadcast/render/contacts-only.png +0 -0
  227. package/screenshots/truth/actions/send_broadcast/render/groups-and-contacts.png +0 -0
  228. package/screenshots/truth/actions/send_broadcast/render/groups-only.png +0 -0
  229. package/screenshots/truth/actions/send_broadcast/render/many-groups.png +0 -0
  230. package/screenshots/truth/actions/send_broadcast/render/multiline-text.png +0 -0
  231. package/screenshots/truth/actions/send_broadcast/render/with-attachments.png +0 -0
  232. package/screenshots/truth/actions/send_email/editor/complex-business-email.png +0 -0
  233. package/screenshots/truth/actions/send_email/editor/empty-body.png +0 -0
  234. package/screenshots/truth/actions/send_email/editor/empty-subject.png +0 -0
  235. package/screenshots/truth/actions/send_email/editor/long-subject.png +0 -0
  236. package/screenshots/truth/actions/send_email/editor/multiline-body.png +0 -0
  237. package/screenshots/truth/actions/send_email/editor/multiple-recipients.png +0 -0
  238. package/screenshots/truth/actions/send_email/editor/simple-email.png +0 -0
  239. package/screenshots/truth/actions/send_email/editor/with-expressions.png +0 -0
  240. package/screenshots/truth/actions/send_email/render/complex-business-email.png +0 -0
  241. package/screenshots/truth/actions/send_email/render/empty-body.png +0 -0
  242. package/screenshots/truth/actions/send_email/render/empty-subject.png +0 -0
  243. package/screenshots/truth/actions/send_email/render/long-subject.png +0 -0
  244. package/screenshots/truth/actions/send_email/render/multiline-body.png +0 -0
  245. package/screenshots/truth/actions/send_email/render/multiple-recipients.png +0 -0
  246. package/screenshots/truth/actions/send_email/render/simple-email.png +0 -0
  247. package/screenshots/truth/actions/send_email/render/with-expressions.png +0 -0
  248. package/screenshots/truth/actions/send_msg/editor/long-quick-replies.png +0 -0
  249. package/screenshots/truth/actions/send_msg/editor/multiline-text-with-replies.png +0 -0
  250. package/screenshots/truth/actions/send_msg/editor/simple-text.png +0 -0
  251. package/screenshots/truth/actions/send_msg/editor/text-with-linebreaks.png +0 -0
  252. package/screenshots/truth/actions/send_msg/editor/text-with-many-quick-replies.png +0 -0
  253. package/screenshots/truth/actions/send_msg/editor/text-with-quick-replies.png +0 -0
  254. package/screenshots/truth/actions/send_msg/editor/text-without-quick-replies.png +0 -0
  255. package/screenshots/truth/actions/send_msg/render/long-quick-replies.png +0 -0
  256. package/screenshots/truth/actions/send_msg/render/multiline-text-with-replies.png +0 -0
  257. package/screenshots/truth/actions/send_msg/render/simple-text.png +0 -0
  258. package/screenshots/truth/actions/send_msg/render/text-with-linebreaks.png +0 -0
  259. package/screenshots/truth/actions/send_msg/render/text-with-many-quick-replies.png +0 -0
  260. package/screenshots/truth/actions/send_msg/render/text-with-quick-replies.png +0 -0
  261. package/screenshots/truth/actions/send_msg/render/text-without-quick-replies.png +0 -0
  262. package/screenshots/truth/actions/start_session/editor/contact-query.png +0 -0
  263. package/screenshots/truth/actions/start_session/editor/contacts-only.png +0 -0
  264. package/screenshots/truth/actions/start_session/editor/create-contact.png +0 -0
  265. package/screenshots/truth/actions/start_session/editor/groups-and-contacts.png +0 -0
  266. package/screenshots/truth/actions/start_session/editor/groups-only.png +0 -0
  267. package/screenshots/truth/actions/start_session/editor/many-recipients.png +0 -0
  268. package/screenshots/truth/actions/start_session/render/contact-query.png +0 -0
  269. package/screenshots/truth/actions/start_session/render/contacts-only.png +0 -0
  270. package/screenshots/truth/actions/start_session/render/create-contact.png +0 -0
  271. package/screenshots/truth/actions/start_session/render/groups-and-contacts.png +0 -0
  272. package/screenshots/truth/actions/start_session/render/groups-only.png +0 -0
  273. package/screenshots/truth/actions/start_session/render/many-recipients.png +0 -0
  274. package/screenshots/truth/canvas-menu/open.png +0 -0
  275. package/screenshots/truth/editor/router.png +0 -0
  276. package/screenshots/truth/editor/wait.png +0 -0
  277. package/screenshots/truth/list/fields-dragging.png +0 -0
  278. package/screenshots/truth/list/sortable-dragging.png +0 -0
  279. package/screenshots/truth/node-type-selector/action-mode.png +0 -0
  280. package/screenshots/truth/node-type-selector/split-mode.png +0 -0
  281. package/screenshots/truth/nodes/split_by_llm/editor/information-extraction.png +0 -0
  282. package/screenshots/truth/nodes/split_by_llm/editor/sentiment-analysis.png +0 -0
  283. package/screenshots/truth/nodes/split_by_llm/editor/summarization.png +0 -0
  284. package/screenshots/truth/nodes/split_by_llm/editor/translation-task.png +0 -0
  285. package/screenshots/truth/nodes/split_by_llm/render/information-extraction.png +0 -0
  286. package/screenshots/truth/nodes/split_by_llm/render/sentiment-analysis.png +0 -0
  287. package/screenshots/truth/nodes/split_by_llm/render/summarization.png +0 -0
  288. package/screenshots/truth/nodes/split_by_llm/render/translation-task.png +0 -0
  289. package/screenshots/truth/nodes/split_by_llm_categorize/editor/basic-categorization.png +0 -0
  290. package/screenshots/truth/nodes/split_by_llm_categorize/editor/custom-input-and-result-name.png +0 -0
  291. package/screenshots/truth/nodes/split_by_llm_categorize/editor/feedback-categorization.png +0 -0
  292. package/screenshots/truth/nodes/split_by_llm_categorize/editor/many-categories.png +0 -0
  293. package/screenshots/truth/nodes/split_by_llm_categorize/editor/minimal-categories.png +0 -0
  294. package/screenshots/truth/nodes/split_by_llm_categorize/render/basic-categorization.png +0 -0
  295. package/screenshots/truth/nodes/split_by_llm_categorize/render/custom-input-and-result-name.png +0 -0
  296. package/screenshots/truth/nodes/split_by_llm_categorize/render/feedback-categorization.png +0 -0
  297. package/screenshots/truth/nodes/split_by_llm_categorize/render/many-categories.png +0 -0
  298. package/screenshots/truth/nodes/split_by_llm_categorize/render/minimal-categories.png +0 -0
  299. package/screenshots/truth/nodes/split_by_random/editor/ab-test-multiple-variants.png +0 -0
  300. package/screenshots/truth/nodes/split_by_random/editor/sampling-split.png +0 -0
  301. package/screenshots/truth/nodes/split_by_random/editor/three-way-split.png +0 -0
  302. package/screenshots/truth/nodes/split_by_random/editor/two-bucket-split.png +0 -0
  303. package/screenshots/truth/nodes/split_by_random/render/ab-test-multiple-variants.png +0 -0
  304. package/screenshots/truth/nodes/split_by_random/render/sampling-split.png +0 -0
  305. package/screenshots/truth/nodes/split_by_random/render/three-way-split.png +0 -0
  306. package/screenshots/truth/nodes/split_by_random/render/two-bucket-split.png +0 -0
  307. package/screenshots/truth/nodes/wait_for_digits/editor/basic-digits-wait.png +0 -0
  308. package/screenshots/truth/nodes/wait_for_digits/editor/phone-number-collection.png +0 -0
  309. package/screenshots/truth/nodes/wait_for_digits/editor/single-digit-with-timeout.png +0 -0
  310. package/screenshots/truth/nodes/wait_for_digits/editor/verification-code.png +0 -0
  311. package/screenshots/truth/nodes/wait_for_digits/render/basic-digits-wait.png +0 -0
  312. package/screenshots/truth/nodes/wait_for_digits/render/phone-number-collection.png +0 -0
  313. package/screenshots/truth/nodes/wait_for_digits/render/single-digit-with-timeout.png +0 -0
  314. package/screenshots/truth/nodes/wait_for_digits/render/verification-code.png +0 -0
  315. package/screenshots/truth/nodes/wait_for_response/editor/basic-wait.png +0 -0
  316. package/screenshots/truth/nodes/wait_for_response/editor/custom-result-name.png +0 -0
  317. package/screenshots/truth/nodes/wait_for_response/editor/no-timeout.png +0 -0
  318. package/screenshots/truth/nodes/wait_for_response/editor/short-timeout.png +0 -0
  319. package/screenshots/truth/nodes/wait_for_response/render/basic-wait.png +0 -0
  320. package/screenshots/truth/nodes/wait_for_response/render/custom-result-name.png +0 -0
  321. package/screenshots/truth/nodes/wait_for_response/render/no-timeout.png +0 -0
  322. package/screenshots/truth/nodes/wait_for_response/render/short-timeout.png +0 -0
  323. package/src/Icons.ts +4 -1
  324. package/src/events.ts +2 -6
  325. package/src/flow/CanvasMenu.ts +217 -0
  326. package/src/flow/CanvasNode.ts +408 -10
  327. package/src/flow/Editor.ts +683 -44
  328. package/src/flow/NodeEditor.ts +304 -125
  329. package/src/flow/NodeTypeSelector.ts +592 -0
  330. package/src/flow/actions/add_contact_groups.ts +4 -4
  331. package/src/flow/actions/add_contact_urn.ts +76 -4
  332. package/src/flow/actions/add_input_labels.ts +4 -4
  333. package/src/flow/actions/play_audio.ts +2 -2
  334. package/src/flow/actions/remove_contact_groups.ts +14 -6
  335. package/src/flow/actions/request_optin.ts +2 -2
  336. package/src/flow/actions/say_msg.ts +2 -2
  337. package/src/flow/actions/send_broadcast.ts +85 -23
  338. package/src/flow/actions/send_email.ts +10 -6
  339. package/src/flow/actions/send_msg.ts +22 -32
  340. package/src/flow/actions/set_contact_channel.ts +5 -11
  341. package/src/flow/actions/set_contact_field.ts +20 -25
  342. package/src/flow/actions/set_contact_language.ts +9 -4
  343. package/src/flow/actions/set_contact_name.ts +3 -15
  344. package/src/flow/actions/set_contact_status.ts +3 -3
  345. package/src/flow/actions/set_run_result.ts +4 -4
  346. package/src/flow/actions/start_session.ts +208 -6
  347. package/src/flow/config.ts +13 -15
  348. package/src/flow/currencies.ts +51 -0
  349. package/src/flow/nodes/shared-rules.ts +301 -0
  350. package/src/flow/nodes/shared.ts +18 -0
  351. package/src/flow/nodes/split_by_airtime.ts +238 -5
  352. package/src/flow/nodes/split_by_contact_field.ts +185 -3
  353. package/src/flow/nodes/split_by_expression.ts +94 -2
  354. package/src/flow/nodes/split_by_groups.ts +15 -10
  355. package/src/flow/nodes/split_by_intent.ts +7 -0
  356. package/src/flow/nodes/split_by_llm.ts +4 -3
  357. package/src/flow/nodes/split_by_llm_categorize.ts +4 -4
  358. package/src/flow/nodes/split_by_random.ts +5 -5
  359. package/src/flow/nodes/split_by_resthook.ts +130 -0
  360. package/src/flow/nodes/split_by_run_result.ts +249 -3
  361. package/src/flow/nodes/split_by_scheme.ts +192 -2
  362. package/src/flow/nodes/split_by_subflow.ts +6 -4
  363. package/src/flow/nodes/split_by_ticket.ts +4 -3
  364. package/src/flow/nodes/split_by_webhook.ts +6 -5
  365. package/src/flow/nodes/wait_for_audio.ts +2 -2
  366. package/src/flow/nodes/wait_for_digits.ts +2 -2
  367. package/src/flow/nodes/wait_for_image.ts +2 -2
  368. package/src/flow/nodes/wait_for_location.ts +2 -2
  369. package/src/flow/nodes/wait_for_menu.ts +2 -2
  370. package/src/flow/nodes/wait_for_response.ts +48 -679
  371. package/src/flow/nodes/wait_for_video.ts +2 -2
  372. package/src/flow/types.ts +109 -23
  373. package/src/flow/utils.ts +108 -14
  374. package/src/form/FieldRenderer.ts +2 -4
  375. package/src/interfaces.ts +3 -0
  376. package/src/list/SortableList.ts +109 -34
  377. package/src/live/ContactChat.ts +15 -18
  378. package/src/store/AppState.ts +69 -0
  379. package/src/store/flow-definition.d.ts +2 -5
  380. package/src/utils.ts +332 -12
  381. package/static/api/channels.json +46 -0
  382. package/static/api/resthooks.json +31 -0
  383. package/static/svg/index.svg +1 -1
  384. package/static/svg/work/traced/lightning-02.svg +1 -0
  385. package/static/svg/work/used/lightning-02.svg +3 -0
  386. package/temba-modules.ts +4 -0
  387. package/test/ActionHelper.ts +3 -3
  388. package/test/NodeHelper.ts +6 -3
  389. package/test/actions/add_contact_urn.test.ts +287 -0
  390. package/test/actions/send_broadcast.test.ts +190 -0
  391. package/test/actions/send_email.test.ts +17 -23
  392. package/test/actions/send_msg.test.ts +39 -15
  393. package/test/actions/start_session.test.ts +151 -0
  394. package/test/nodes/split_by_airtime.test.ts +673 -0
  395. package/test/nodes/split_by_contact_field.test.ts +451 -0
  396. package/test/nodes/split_by_expression.test.ts +751 -0
  397. package/test/nodes/split_by_random.test.ts +3 -3
  398. package/test/nodes/split_by_resthook.test.ts +398 -0
  399. package/test/nodes/split_by_run_result.test.ts +1109 -0
  400. package/test/nodes/split_by_scheme.test.ts +486 -0
  401. package/test/nodes/split_by_subflow.test.ts +381 -0
  402. package/test/nodes/wait_for_digits.test.ts +2 -2
  403. package/test/nodes/wait_for_response.test.ts +2 -1
  404. package/test/temba-action-drag-between-nodes.test.ts +301 -0
  405. package/test/temba-canvas-menu.test.ts +156 -0
  406. package/test/temba-flow-editor-node.test.ts +102 -2
  407. package/test/temba-flow-editor.test.ts +7 -8
  408. package/test/temba-node-editor.test.ts +3 -1
  409. package/test/temba-node-type-selector.test.ts +152 -0
  410. package/test/temba-omnibox.test.ts +2 -1
  411. package/test/temba-sortable-list.test.ts +69 -0
  412. package/test/temba-utils-index.test.ts +0 -35
  413. package/test/utils.test.ts +2 -0
  414. package/test-assets/contacts/history.json +14 -20
  415. package/web-dev-server.config.mjs +3 -1
  416. package/out-tsc/src/flow/actions/call_classifier.js +0 -11
  417. package/out-tsc/src/flow/actions/call_classifier.js.map +0 -1
  418. package/out-tsc/src/flow/actions/call_resthook.js +0 -11
  419. package/out-tsc/src/flow/actions/call_resthook.js.map +0 -1
  420. package/out-tsc/src/flow/actions/split_by_expression_example.js +0 -77
  421. package/out-tsc/src/flow/actions/split_by_expression_example.js.map +0 -1
  422. package/out-tsc/src/flow/actions/transfer_airtime.js +0 -11
  423. package/out-tsc/src/flow/actions/transfer_airtime.js.map +0 -1
  424. package/src/flow/actions/call_classifier.ts +0 -12
  425. package/src/flow/actions/call_resthook.ts +0 -12
  426. package/src/flow/actions/split_by_expression_example.ts +0 -88
  427. package/src/flow/actions/transfer_airtime.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"wait_for_response.test.js","sourceRoot":"","sources":["../../../test/nodes/wait_for_response.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { wait_for_response } from '../../src/flow/nodes/wait_for_response';\nimport { Node } from '../../src/store/flow-definition';\nimport { NodeTest } from '../NodeHelper';\nimport { createOperatorOption } from '../../src/flow/operators';\n\n/**\n * Test suite for the wait_for_response node configuration.\n */\ndescribe('wait_for_response node config', () => {\n const helper = new NodeTest(wait_for_response, 'wait_for_response');\n\n describe('basic properties', () => {\n helper.testBasicProperties();\n\n it('has correct name', () => {\n expect(wait_for_response.name).to.equal('Wait for Response');\n });\n\n it('has correct type', () => {\n expect(wait_for_response.type).to.equal('wait_for_response');\n });\n\n it('has form configuration', () => {\n expect(wait_for_response.form).to.exist;\n expect(wait_for_response.form.result_name).to.exist;\n });\n\n it('has layout configuration', () => {\n expect(wait_for_response.layout).to.exist;\n expect(wait_for_response.layout).to.deep.equal(['rules', 'result_name']);\n });\n });\n\n describe('node scenarios', () => {\n it('renders basic wait', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-1',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-1',\n seconds: 300\n }\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat-1',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-1'\n },\n {\n uuid: 'timeout-cat-1',\n name: 'No Response',\n exit_uuid: 'timeout-exit-1'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-1'\n },\n exits: [\n { uuid: 'all-responses-exit-1', destination_uuid: null },\n { uuid: 'timeout-exit-1', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'basic-wait'\n );\n });\n\n it('renders custom result name', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-2',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-2',\n seconds: 1800\n }\n },\n result_name: 'user_input',\n categories: [\n {\n uuid: 'all-responses-cat-2',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-2'\n },\n {\n uuid: 'timeout-cat-2',\n name: 'No Response',\n exit_uuid: 'timeout-exit-2'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-2'\n },\n exits: [\n { uuid: 'all-responses-exit-2', destination_uuid: null },\n { uuid: 'timeout-exit-2', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'custom-result-name'\n );\n });\n\n it('renders short timeout', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-3',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-3',\n seconds: 60\n }\n },\n result_name: 'quick_response',\n categories: [\n {\n uuid: 'all-responses-cat-3',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-3'\n },\n {\n uuid: 'timeout-cat-3',\n name: 'No Response',\n exit_uuid: 'timeout-exit-3'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-3'\n },\n exits: [\n { uuid: 'all-responses-exit-3', destination_uuid: null },\n { uuid: 'timeout-exit-3', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'short-timeout'\n );\n });\n\n it('renders no timeout', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-4',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg'\n // No timeout specified\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat-4',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-4'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-4'\n },\n exits: [{ uuid: 'all-responses-exit-4', destination_uuid: null }]\n } as Node,\n { type: 'wait_for_response' },\n 'no-timeout'\n );\n });\n });\n\n describe('data transformation', () => {\n it('converts node to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'user_response',\n categories: []\n },\n exits: []\n };\n\n const formData = wait_for_response.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node');\n expect(formData.result_name).to.equal('user_response');\n expect(formData.rules).to.deep.equal([]);\n });\n\n it('converts node with rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'user_response',\n operand: '@input.text',\n categories: [\n {\n uuid: 'red-cat',\n name: 'Red',\n exit_uuid: 'red-exit'\n },\n {\n uuid: 'green-cat',\n name: 'Green',\n exit_uuid: 'green-exit'\n },\n {\n uuid: 'other-cat',\n name: 'Other',\n exit_uuid: 'other-exit'\n }\n ],\n cases: [\n {\n uuid: 'red-case',\n type: 'has_any_word',\n arguments: ['red'],\n category_uuid: 'red-cat'\n },\n {\n uuid: 'green-case',\n type: 'has_phrase',\n arguments: ['green'],\n category_uuid: 'green-cat'\n }\n ]\n },\n exits: [\n { uuid: 'red-exit', destination_uuid: null },\n { uuid: 'green-exit', destination_uuid: null },\n { uuid: 'other-exit', destination_uuid: null }\n ]\n };\n\n const formData = wait_for_response.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node');\n expect(formData.result_name).to.equal('user_response');\n expect(formData.rules).to.have.length(2);\n expect(formData.rules[0]).to.deep.equal({\n operator: createOperatorOption('has_any_word'),\n value1: 'red',\n value2: '',\n category: 'Red'\n });\n expect(formData.rules[1]).to.deep.equal({\n operator: createOperatorOption('has_phrase'),\n value1: 'green',\n value2: '',\n category: 'Green'\n });\n });\n\n it('converts form data to node correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: []\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n });\n\n it('converts form data with rules to node correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: [\n {\n operator: 'has_any_word',\n value1: 'red',\n value2: '',\n category: 'Red'\n },\n {\n operator: 'has_phrase',\n value1: 'blue',\n value2: '',\n category: 'Blue'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n expect(result.router?.operand).to.equal('@input.text');\n expect(result.router?.categories).to.have.length(3); // Red, Blue, Other\n expect(result.router?.cases).to.have.length(2);\n expect(result.exits).to.have.length(3);\n\n // Check categories\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members(['Red', 'Blue', 'Other']);\n\n // Check cases\n const redCase = result.router!.cases.find(\n (c) => c.type === 'has_any_word'\n );\n expect(redCase).to.exist;\n expect(redCase!.arguments).to.deep.equal(['red']);\n\n const blueCase = result.router!.cases.find(\n (c) => c.type === 'has_phrase'\n );\n expect(blueCase).to.exist;\n expect(blueCase!.arguments).to.deep.equal(['blue']);\n });\n\n it('handles default result name', () => {\n const formData = {\n uuid: 'test-node',\n rules: []\n // No result_name specified\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('response');\n });\n\n it('handles operators with no operands correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: [\n {\n operator: 'has_text',\n value: '', // No value needed for has_text\n category: 'Has Text'\n },\n {\n operator: 'has_number',\n value: '', // No value needed for has_number\n category: 'Has Number'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n expect(result.router?.categories).to.have.length(3); // Has Text, Has Number, Other\n expect(result.router?.cases).to.have.length(2);\n expect(result.exits).to.have.length(3);\n\n // Check categories\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Has Text',\n 'Has Number',\n 'Other'\n ]);\n\n // Check cases - should have empty arguments for 0-operand operators\n const hasTextCase = result.router!.cases.find(\n (c) => c.type === 'has_text'\n );\n expect(hasTextCase).to.exist;\n expect(hasTextCase!.arguments).to.deep.equal([]);\n\n const hasNumberCase = result.router!.cases.find(\n (c) => c.type === 'has_number'\n );\n expect(hasNumberCase).to.exist;\n expect(hasNumberCase!.arguments).to.deep.equal([]);\n });\n\n it('preserves timeout categories when adding rules', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n timeout_enabled: true,\n timeout_duration: [{ value: '300', name: '5 minutes' }],\n rules: [\n {\n operator: 'has_text',\n value: 'yes',\n category: 'Positive'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat',\n seconds: 300\n }\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'timeout-cat',\n name: 'No Response',\n exit_uuid: 'timeout-exit'\n }\n ]\n },\n exits: [{ uuid: 'timeout-exit', destination_uuid: null }]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.router?.categories).to.have.length(3); // Positive, No Response, Other\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Positive',\n 'No Response',\n 'Other'\n ]);\n\n // Verify timeout configuration is preserved\n expect(result.router?.wait).to.exist;\n expect(result.router?.wait?.timeout?.category_uuid).to.equal(\n 'timeout-cat'\n );\n });\n\n it('ensures user categories never share UUIDs with system categories', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: 'has_any_word',\n value1: 'hello',\n value2: '',\n category: 'Greeting'\n }\n ]\n };\n\n // Original node with existing system categories\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [\n { uuid: 'system-other-exit', destination_uuid: null },\n { uuid: 'system-all-responses-exit', destination_uuid: null }\n ],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'system-other-uuid',\n name: 'Other',\n exit_uuid: 'system-other-exit'\n },\n {\n uuid: 'system-all-responses-uuid',\n name: 'All Responses',\n exit_uuid: 'system-all-responses-exit'\n }\n ]\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Get all category UUIDs\n const categoryUUIDs = result.router!.categories.map((cat) => cat.uuid);\n const exitUUIDs = result.exits.map((exit) => exit.uuid);\n\n // Find user category (Greeting)\n const userCategory = result.router!.categories.find(\n (cat) => cat.name === 'Greeting'\n );\n const systemOtherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n expect(userCategory).to.exist;\n expect(systemOtherCategory).to.exist;\n\n // Verify that user category UUID is different from any system category UUID\n expect(userCategory!.uuid).to.not.equal('system-other-uuid');\n expect(userCategory!.uuid).to.not.equal('system-all-responses-uuid');\n expect(userCategory!.exit_uuid).to.not.equal('system-other-exit');\n expect(userCategory!.exit_uuid).to.not.equal('system-all-responses-exit');\n\n // Verify all UUIDs are unique\n expect(new Set(categoryUUIDs)).to.have.lengthOf(categoryUUIDs.length);\n expect(new Set(exitUUIDs)).to.have.lengthOf(exitUUIDs.length);\n });\n\n it('removes No Response category when timeout is disabled and no user rules', () => {\n // Start with a node that has timeout enabled and No Response category\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [\n { uuid: 'all-responses-exit', destination_uuid: null },\n { uuid: 'no-response-exit', destination_uuid: null }\n ],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n },\n {\n uuid: 'no-response-cat',\n name: 'No Response',\n exit_uuid: 'no-response-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg',\n timeout: {\n seconds: 300,\n category_uuid: 'no-response-cat'\n }\n }\n }\n };\n\n // Form data with timeout disabled and no user rules\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: false, // Timeout disabled\n timeout_duration: null\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should only have \"All Responses\" category, not \"No Response\"\n expect(result.router?.categories).to.have.length(1);\n expect(result.router?.categories[0].name).to.equal('All Responses');\n expect(result.exits).to.have.length(1);\n expect(result.exits[0].uuid).to.equal('all-responses-exit');\n\n // Should not have timeout configuration\n expect(result.router?.wait?.timeout).to.be.undefined;\n });\n\n it('adds No Response category when timeout is enabled and no user rules', () => {\n // Start with a node that has no timeout and only \"All Responses\"\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [{ uuid: 'all-responses-exit', destination_uuid: null }],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg'\n }\n }\n };\n\n // Form data with timeout enabled and no user rules\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: true, // Timeout enabled\n timeout_duration: { value: '300', name: '5 minutes' }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have both \"All Responses\" and \"No Response\" categories\n expect(result.router?.categories).to.have.length(2);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'All Responses',\n 'No Response'\n ]);\n\n // Should have 2 exits\n expect(result.exits).to.have.length(2);\n\n // Should have timeout configuration\n expect(result.router?.wait?.timeout).to.exist;\n expect(result.router?.wait?.timeout?.seconds).to.equal(300);\n\n // Timeout should point to \"No Response\" category\n const noResponseCategory = result.router!.categories.find(\n (cat) => cat.name === 'No Response'\n );\n expect(result.router?.wait?.timeout?.category_uuid).to.equal(\n noResponseCategory?.uuid\n );\n });\n\n it('handles enabling timeout on node with non-extensible exits array', () => {\n // Create a node with a frozen/sealed exits array to simulate the error condition\n const exitArray = [\n { uuid: 'all-responses-exit', destination_uuid: null }\n ];\n Object.freeze(exitArray); // This makes the array non-extensible\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: exitArray, // This array is now frozen\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg'\n }\n }\n };\n\n // Form data with timeout being enabled (this should trigger the error)\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: true, // Enable timeout (this is the key change)\n timeout_duration: { value: '300', name: '5 minutes' }\n };\n\n // This should not throw an error even with a frozen exits array\n expect(() => {\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify the result is correct\n expect(result.router?.categories).to.have.length(2);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'All Responses',\n 'No Response'\n ]);\n expect(result.exits).to.have.length(2);\n expect(result.router?.wait?.timeout).to.exist;\n }).to.not.throw();\n });\n });\n\n describe('validation', () => {\n it('validates form data correctly with no errors', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: 'yes', category: 'Positive' },\n { operator: 'has_text', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('allows same category names for multiple rules', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: 'yes', category: 'Positive' },\n { operator: 'has_text', value: 'ok', category: 'positive' }, // case insensitive same category\n { operator: 'has_text', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('allows rules with operators that need no values', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: '', category: 'Has Text' },\n { operator: 'has_number', value: '', category: 'Has Number' },\n { operator: 'has_any_word', value: 'hello', category: 'Greeting' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('ignores empty rules in validation', () => {\n const formData = {\n rules: [\n { operator: 'has_phrase', value: 'yes', category: 'Positive' },\n { operator: '', value: '', category: '' }, // empty rule\n { operator: 'has_phrase', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('preserves category UUIDs when names are updated', () => {\n // Create original node with specific UUIDs\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'category-1-uuid',\n name: 'Old Name 1',\n exit_uuid: 'exit-1-uuid'\n },\n {\n uuid: 'category-2-uuid',\n name: 'Old Name 2',\n exit_uuid: 'exit-2-uuid'\n },\n {\n uuid: 'other-category-uuid',\n name: 'Other',\n exit_uuid: 'other-exit-uuid'\n }\n ],\n cases: [\n {\n uuid: 'case-1-uuid',\n type: 'has_phrase',\n arguments: ['yes'],\n category_uuid: 'category-1-uuid'\n },\n {\n uuid: 'case-2-uuid',\n type: 'has_phrase',\n arguments: ['no'],\n category_uuid: 'category-2-uuid'\n }\n ]\n },\n exits: [\n { uuid: 'exit-1-uuid', destination_uuid: null },\n { uuid: 'exit-2-uuid', destination_uuid: null },\n { uuid: 'other-exit-uuid', destination_uuid: null }\n ]\n };\n\n // Update category names but keep same rules in same order\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'New Name 1' // Changed from \"Old Name 1\"\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'New Name 2' // Changed from \"Old Name 2\"\n }\n ]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify that UUIDs are preserved despite name changes\n expect(result.router?.categories).to.have.length(3); // Two rules + Other\n\n const category1 = result.router!.categories.find(\n (cat) => cat.name === 'New Name 1'\n );\n const category2 = result.router!.categories.find(\n (cat) => cat.name === 'New Name 2'\n );\n const otherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n // Verify UUIDs are preserved\n expect(category1?.uuid).to.equal('category-1-uuid');\n expect(category1?.exit_uuid).to.equal('exit-1-uuid');\n\n expect(category2?.uuid).to.equal('category-2-uuid');\n expect(category2?.exit_uuid).to.equal('exit-2-uuid');\n\n expect(otherCategory?.uuid).to.equal('other-category-uuid');\n expect(otherCategory?.exit_uuid).to.equal('other-exit-uuid');\n\n // Verify case UUIDs are also preserved\n const case1 = result.router!.cases.find(\n (c) => c.category_uuid === 'category-1-uuid'\n );\n const case2 = result.router!.cases.find(\n (c) => c.category_uuid === 'category-2-uuid'\n );\n\n expect(case1?.uuid).to.equal('case-1-uuid');\n expect(case2?.uuid).to.equal('case-2-uuid');\n\n // Verify exits are preserved\n expect(result.exits).to.have.length(3);\n expect(result.exits.map((e) => e.uuid)).to.include.members([\n 'exit-1-uuid',\n 'exit-2-uuid',\n 'other-exit-uuid'\n ]);\n });\n\n it('merges rules with same category name into single category', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'Positive'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'ok',\n category: 'Positive' // Same category name\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'Negative'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 categories: Positive, Negative, Other\n expect(result.router?.categories).to.have.length(3);\n\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Positive',\n 'Negative',\n 'Other'\n ]);\n\n // Should have 3 cases but only 2 user categories (+ Other)\n expect(result.router?.cases).to.have.length(3);\n\n // Both \"yes\" and \"ok\" rules should reference the same Positive category\n const positiveCategory = result.router!.categories.find(\n (cat) => cat.name === 'Positive'\n );\n expect(positiveCategory).to.exist;\n\n const positiveCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === positiveCategory!.uuid\n );\n expect(positiveCases).to.have.length(2);\n\n // Verify the cases have the correct arguments\n const yesCase = positiveCases.find((case_) =>\n case_.arguments.includes('yes')\n );\n const okCase = positiveCases.find((case_) =>\n case_.arguments.includes('ok')\n );\n\n expect(yesCase).to.exist;\n expect(okCase).to.exist;\n\n // Should have 3 exits: Positive, Negative, Other\n expect(result.exits).to.have.length(3);\n });\n\n it('preserves category order when merging same category names', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'First'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'maybe',\n category: 'Second'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'ok',\n category: 'First' // Same as first rule\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 categories: First, Second, Other (in that order)\n expect(result.router?.categories).to.have.length(3);\n\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.deep.equal(['First', 'Second', 'Other']);\n\n // First category should have 2 cases (yes and ok)\n const firstCategory = result.router!.categories.find(\n (cat) => cat.name === 'First'\n );\n const firstCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === firstCategory!.uuid\n );\n expect(firstCases).to.have.length(2);\n\n // Second category should have 1 case (maybe)\n const secondCategory = result.router!.categories.find(\n (cat) => cat.name === 'Second'\n );\n const secondCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === secondCategory!.uuid\n );\n expect(secondCases).to.have.length(1);\n });\n\n it('preserves category UUIDs when rules are reordered', () => {\n const originalNode = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch' as const,\n operand: '@input.text',\n categories: [\n {\n uuid: 'yes-category-uuid',\n name: 'Yes',\n exit_uuid: 'yes-exit-uuid'\n },\n {\n uuid: 'no-category-uuid',\n name: 'No',\n exit_uuid: 'no-exit-uuid'\n },\n {\n uuid: 'other-category-uuid',\n name: 'Other',\n exit_uuid: 'other-exit-uuid'\n }\n ],\n cases: [\n {\n uuid: 'yes-case-uuid',\n type: 'has_phrase',\n arguments: ['yes'],\n category_uuid: 'yes-category-uuid'\n },\n {\n uuid: 'no-case-uuid',\n type: 'has_phrase',\n arguments: ['no'],\n category_uuid: 'no-category-uuid'\n }\n ]\n },\n exits: [\n { uuid: 'yes-exit-uuid', destination_uuid: null },\n { uuid: 'no-exit-uuid', destination_uuid: null },\n { uuid: 'other-exit-uuid', destination_uuid: null }\n ]\n };\n\n // Reorder the rules - put \"No\" first, \"Yes\" second\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'No' // This rule was originally second\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'Yes' // This rule was originally first\n }\n ]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify that categories keep their original UUIDs despite reordering\n expect(result.router?.categories).to.have.length(3); // Two rules + Other\n\n const yesCategory = result.router!.categories.find(\n (cat) => cat.name === 'Yes'\n );\n const noCategory = result.router!.categories.find(\n (cat) => cat.name === 'No'\n );\n const otherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n // Categories should preserve their original UUIDs\n expect(yesCategory?.uuid).to.equal('yes-category-uuid');\n expect(yesCategory?.exit_uuid).to.equal('yes-exit-uuid');\n\n expect(noCategory?.uuid).to.equal('no-category-uuid');\n expect(noCategory?.exit_uuid).to.equal('no-exit-uuid');\n\n expect(otherCategory?.uuid).to.equal('other-category-uuid');\n expect(otherCategory?.exit_uuid).to.equal('other-exit-uuid');\n\n // Verify the cases are created in the new order but reference correct categories\n expect(result.router?.cases).to.have.length(2);\n\n const firstCase = result.router!.cases[0];\n const secondCase = result.router!.cases[1];\n\n // First case should be \"no\" and reference the No category\n expect(firstCase.arguments).to.deep.equal(['no']);\n expect(firstCase.category_uuid).to.equal('no-category-uuid');\n\n // Second case should be \"yes\" and reference the Yes category\n expect(secondCase.arguments).to.deep.equal(['yes']);\n expect(secondCase.category_uuid).to.equal('yes-category-uuid');\n });\n\n it('preserves rule order when rules have duplicate categories', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'first',\n category: 'Shared'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'middle',\n category: 'Different'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'last',\n category: 'Shared' // Same as first rule\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 cases in the same order as the input rules\n expect(result.router?.cases).to.have.length(3);\n\n const cases = result.router!.cases;\n\n // First case should be \"first\"\n expect(cases[0].arguments).to.deep.equal(['first']);\n expect(cases[0].type).to.equal('has_phrase');\n\n // Second case should be \"middle\"\n expect(cases[1].arguments).to.deep.equal(['middle']);\n expect(cases[1].type).to.equal('has_phrase');\n\n // Third case should be \"last\"\n expect(cases[2].arguments).to.deep.equal(['last']);\n expect(cases[2].type).to.equal('has_phrase');\n\n // Find the shared category\n const sharedCategory = result.router!.categories.find(\n (cat) => cat.name === 'Shared'\n );\n const differentCategory = result.router!.categories.find(\n (cat) => cat.name === 'Different'\n );\n\n expect(sharedCategory).to.exist;\n expect(differentCategory).to.exist;\n\n // First and third cases should reference the same \"Shared\" category\n expect(cases[0].category_uuid).to.equal(sharedCategory!.uuid);\n expect(cases[2].category_uuid).to.equal(sharedCategory!.uuid);\n\n // Second case should reference the \"Different\" category\n expect(cases[1].category_uuid).to.equal(differentCategory!.uuid);\n\n // Should have 3 categories: Shared, Different, Other\n expect(result.router?.categories).to.have.length(3);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.deep.equal(['Shared', 'Different', 'Other']);\n });\n });\n\n describe('category auto-population', () => {\n it('auto-populates fixed category names for operators with no operands', () => {\n // Test with has_text operator (0 operands)\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n const items = [\n { operator: 'has_text', value1: '', value2: '', category: '' }\n ];\n const result = onItemChange(0, 'operator', 'has_text', items);\n\n expect(result[0].category).to.equal('Has Text');\n });\n\n it('auto-populates category name for single operand operators', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_any_word - should capitalize first letter\n const items = [\n { operator: 'has_any_word', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', 'red', items);\n expect(result[0].category).to.equal('Red');\n\n // Test has_number_lt - should include < symbol\n const items2 = [\n { operator: 'has_number_lt', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', '5', items2);\n expect(result[0].category).to.equal('< 5');\n\n // Test has_number_eq - should include = symbol\n const items3 = [\n { operator: 'has_number_eq', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', '10', items3);\n expect(result[0].category).to.equal('= 10');\n });\n\n it('auto-populates category name for two operand operators', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_number_between - should format as range\n const items = [\n { operator: 'has_number_between', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', '45', items);\n // Should not populate yet (need both values)\n expect(result[0].category).to.equal('');\n\n result = onItemChange(0, 'value2', '85', result);\n expect(result[0].category).to.equal('45 - 85');\n });\n\n it('auto-populates category name for date operators with relative expressions', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_date_gt - should format as \"After today + X days\"\n let items = [\n { operator: 'has_date_gt', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', 'today + 5', items);\n expect(result[0].category).to.equal('After today + 5 days');\n\n // Test has_date_lt with single day - should use \"day\" not \"days\"\n items = [\n { operator: 'has_date_lt', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', 'today + 1', items);\n expect(result[0].category).to.equal('Before today + 1 day');\n\n // Test has_date_eq\n items = [\n { operator: 'has_date_eq', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', 'today - 3', items);\n expect(result[0].category).to.equal('today - 3 days');\n });\n\n it('updates category name when value changes if category matches old default', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with \"red\"\n const items = [\n { operator: 'has_any_word', value1: 'red', value2: '', category: 'Red' }\n ];\n\n // Change to \"blue\" - category should update since it matches old default\n const result = onItemChange(0, 'value1', 'blue', items);\n expect(result[0].category).to.equal('Blue');\n });\n\n it('does not update category name when value changes if user customized it', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with \"red\" but custom category \"Color\"\n const items = [\n {\n operator: 'has_any_word',\n value1: 'red',\n value2: '',\n category: 'Color'\n }\n ];\n\n // Change to \"blue\" - category should NOT update (user customized it)\n const result = onItemChange(0, 'value1', 'blue', items);\n expect(result[0].category).to.equal('Color');\n });\n\n it('updates category when operator changes', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with has_any_word\n const items = [\n {\n operator: 'has_any_word',\n value1: 'test',\n value2: '',\n category: 'Test'\n }\n ];\n\n // Change to has_text (0 operands) - category should update to fixed name\n const result = onItemChange(0, 'operator', 'has_text', items);\n expect(result[0].category).to.equal('Has Text');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"wait_for_response.test.js","sourceRoot":"","sources":["../../../test/nodes/wait_for_response.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { wait_for_response } from '../../src/flow/nodes/wait_for_response';\nimport { Node } from '../../src/store/flow-definition';\nimport { NodeTest } from '../NodeHelper';\nimport { createOperatorOption } from '../../src/flow/operators';\n\n/**\n * Test suite for the wait_for_response node configuration.\n */\ndescribe('wait_for_response node config', () => {\n const helper = new NodeTest(wait_for_response, 'wait_for_response');\n\n describe('basic properties', () => {\n helper.testBasicProperties();\n\n it('has correct name', () => {\n expect(wait_for_response.name).to.equal('Wait for Response');\n });\n\n it('has correct type', () => {\n expect(wait_for_response.type).to.equal('wait_for_response');\n });\n\n it('has form configuration', () => {\n expect(wait_for_response.form).to.exist;\n expect(wait_for_response.form.result_name).to.exist;\n });\n\n it('has layout configuration', () => {\n expect(wait_for_response.layout).to.exist;\n expect(wait_for_response.layout).to.deep.equal(['rules', 'result_name']);\n });\n });\n\n describe('node scenarios', () => {\n it('renders basic wait', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-1',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-1',\n seconds: 300\n }\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat-1',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-1'\n },\n {\n uuid: 'timeout-cat-1',\n name: 'No Response',\n exit_uuid: 'timeout-exit-1'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-1'\n },\n exits: [\n { uuid: 'all-responses-exit-1', destination_uuid: null },\n { uuid: 'timeout-exit-1', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'basic-wait'\n );\n });\n\n it('renders custom result name', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-2',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-2',\n seconds: 1800\n }\n },\n result_name: 'user_input',\n categories: [\n {\n uuid: 'all-responses-cat-2',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-2'\n },\n {\n uuid: 'timeout-cat-2',\n name: 'No Response',\n exit_uuid: 'timeout-exit-2'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-2'\n },\n exits: [\n { uuid: 'all-responses-exit-2', destination_uuid: null },\n { uuid: 'timeout-exit-2', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'custom-result-name'\n );\n });\n\n it('renders short timeout', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-3',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat-3',\n seconds: 60\n }\n },\n result_name: 'quick_response',\n categories: [\n {\n uuid: 'all-responses-cat-3',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-3'\n },\n {\n uuid: 'timeout-cat-3',\n name: 'No Response',\n exit_uuid: 'timeout-exit-3'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-3'\n },\n exits: [\n { uuid: 'all-responses-exit-3', destination_uuid: null },\n { uuid: 'timeout-exit-3', destination_uuid: null }\n ]\n } as Node,\n { type: 'wait_for_response' },\n 'short-timeout'\n );\n });\n\n it('renders no timeout', async () => {\n await helper.testNode(\n {\n uuid: 'test-wait-node-4',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg'\n // No timeout specified\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat-4',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit-4'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat-4'\n },\n exits: [{ uuid: 'all-responses-exit-4', destination_uuid: null }]\n } as Node,\n { type: 'wait_for_response' },\n 'no-timeout'\n );\n });\n });\n\n describe('data transformation', () => {\n it('converts node to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'user_response',\n categories: []\n },\n exits: []\n };\n\n const formData = wait_for_response.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node');\n expect(formData.result_name).to.equal('user_response');\n expect(formData.rules).to.deep.equal([]);\n });\n\n it('converts node with rules to form data correctly', () => {\n const node: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'user_response',\n operand: '@input.text',\n categories: [\n {\n uuid: 'red-cat',\n name: 'Red',\n exit_uuid: 'red-exit'\n },\n {\n uuid: 'green-cat',\n name: 'Green',\n exit_uuid: 'green-exit'\n },\n {\n uuid: 'other-cat',\n name: 'Other',\n exit_uuid: 'other-exit'\n }\n ],\n cases: [\n {\n uuid: 'red-case',\n type: 'has_any_word',\n arguments: ['red'],\n category_uuid: 'red-cat'\n },\n {\n uuid: 'green-case',\n type: 'has_phrase',\n arguments: ['green'],\n category_uuid: 'green-cat'\n }\n ]\n },\n exits: [\n { uuid: 'red-exit', destination_uuid: null },\n { uuid: 'green-exit', destination_uuid: null },\n { uuid: 'other-exit', destination_uuid: null }\n ]\n };\n\n const formData = wait_for_response.toFormData!(node);\n\n expect(formData.uuid).to.equal('test-node');\n expect(formData.result_name).to.equal('user_response');\n expect(formData.rules).to.have.length(2);\n expect(formData.rules[0]).to.deep.equal({\n operator: createOperatorOption('has_any_word'),\n value1: 'red',\n value2: '',\n category: 'Red'\n });\n expect(formData.rules[1]).to.deep.equal({\n operator: createOperatorOption('has_phrase'),\n value1: 'green',\n value2: '',\n category: 'Green'\n });\n });\n\n it('converts form data to node correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: []\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n });\n\n it('converts form data with rules to node correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: [\n {\n operator: 'has_any_word',\n value1: 'red',\n value2: '',\n category: 'Red'\n },\n {\n operator: 'has_phrase',\n value1: 'blue',\n value2: '',\n category: 'Blue'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n expect(result.router?.operand).to.equal('@input.text');\n expect(result.router?.categories).to.have.length(3); // Red, Blue, Other\n expect(result.router?.cases).to.have.length(2);\n expect(result.exits).to.have.length(3);\n\n // Check categories\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members(['Red', 'Blue', 'Other']);\n\n // Check cases\n const redCase = result.router!.cases.find(\n (c) => c.type === 'has_any_word'\n );\n expect(redCase).to.exist;\n expect(redCase!.arguments).to.deep.equal(['red']);\n\n const blueCase = result.router!.cases.find(\n (c) => c.type === 'has_phrase'\n );\n expect(blueCase).to.exist;\n expect(blueCase!.arguments).to.deep.equal(['blue']);\n });\n\n it('handles default result name', () => {\n const formData = {\n uuid: 'test-node',\n rules: []\n // No result_name specified\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n // When no result_name is provided, it should not be set\n expect(result.router?.result_name).to.be.undefined;\n });\n\n it('handles operators with no operands correctly', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'custom_response',\n rules: [\n {\n operator: 'has_text',\n value: '', // No value needed for has_text\n category: 'Has Text'\n },\n {\n operator: 'has_number',\n value: '', // No value needed for has_number\n category: 'Has Number'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: []\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.uuid).to.equal('test-node');\n expect(result.router?.result_name).to.equal('custom_response');\n expect(result.router?.categories).to.have.length(3); // Has Text, Has Number, Other\n expect(result.router?.cases).to.have.length(2);\n expect(result.exits).to.have.length(3);\n\n // Check categories\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Has Text',\n 'Has Number',\n 'Other'\n ]);\n\n // Check cases - should have empty arguments for 0-operand operators\n const hasTextCase = result.router!.cases.find(\n (c) => c.type === 'has_text'\n );\n expect(hasTextCase).to.exist;\n expect(hasTextCase!.arguments).to.deep.equal([]);\n\n const hasNumberCase = result.router!.cases.find(\n (c) => c.type === 'has_number'\n );\n expect(hasNumberCase).to.exist;\n expect(hasNumberCase!.arguments).to.deep.equal([]);\n });\n\n it('preserves timeout categories when adding rules', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n timeout_enabled: true,\n timeout_duration: [{ value: '300', name: '5 minutes' }],\n rules: [\n {\n operator: 'has_text',\n value: 'yes',\n category: 'Positive'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n wait: {\n type: 'msg',\n timeout: {\n category_uuid: 'timeout-cat',\n seconds: 300\n }\n },\n result_name: 'response',\n categories: [\n {\n uuid: 'timeout-cat',\n name: 'No Response',\n exit_uuid: 'timeout-exit'\n }\n ]\n },\n exits: [{ uuid: 'timeout-exit', destination_uuid: null }]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n expect(result.router?.categories).to.have.length(3); // Positive, No Response, Other\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Positive',\n 'No Response',\n 'Other'\n ]);\n\n // Verify timeout configuration is preserved\n expect(result.router?.wait).to.exist;\n expect(result.router?.wait?.timeout?.category_uuid).to.equal(\n 'timeout-cat'\n );\n });\n\n it('ensures user categories never share UUIDs with system categories', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: 'has_any_word',\n value1: 'hello',\n value2: '',\n category: 'Greeting'\n }\n ]\n };\n\n // Original node with existing system categories\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [\n { uuid: 'system-other-exit', destination_uuid: null },\n { uuid: 'system-all-responses-exit', destination_uuid: null }\n ],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'system-other-uuid',\n name: 'Other',\n exit_uuid: 'system-other-exit'\n },\n {\n uuid: 'system-all-responses-uuid',\n name: 'All Responses',\n exit_uuid: 'system-all-responses-exit'\n }\n ]\n }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Get all category UUIDs\n const categoryUUIDs = result.router!.categories.map((cat) => cat.uuid);\n const exitUUIDs = result.exits.map((exit) => exit.uuid);\n\n // Find user category (Greeting)\n const userCategory = result.router!.categories.find(\n (cat) => cat.name === 'Greeting'\n );\n const systemOtherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n expect(userCategory).to.exist;\n expect(systemOtherCategory).to.exist;\n\n // Verify that user category UUID is different from any system category UUID\n expect(userCategory!.uuid).to.not.equal('system-other-uuid');\n expect(userCategory!.uuid).to.not.equal('system-all-responses-uuid');\n expect(userCategory!.exit_uuid).to.not.equal('system-other-exit');\n expect(userCategory!.exit_uuid).to.not.equal('system-all-responses-exit');\n\n // Verify all UUIDs are unique\n expect(new Set(categoryUUIDs)).to.have.lengthOf(categoryUUIDs.length);\n expect(new Set(exitUUIDs)).to.have.lengthOf(exitUUIDs.length);\n });\n\n it('removes No Response category when timeout is disabled and no user rules', () => {\n // Start with a node that has timeout enabled and No Response category\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [\n { uuid: 'all-responses-exit', destination_uuid: null },\n { uuid: 'no-response-exit', destination_uuid: null }\n ],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n },\n {\n uuid: 'no-response-cat',\n name: 'No Response',\n exit_uuid: 'no-response-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg',\n timeout: {\n seconds: 300,\n category_uuid: 'no-response-cat'\n }\n }\n }\n };\n\n // Form data with timeout disabled and no user rules\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: false, // Timeout disabled\n timeout_duration: null\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should only have \"All Responses\" category, not \"No Response\"\n expect(result.router?.categories).to.have.length(1);\n expect(result.router?.categories[0].name).to.equal('All Responses');\n expect(result.exits).to.have.length(1);\n expect(result.exits[0].uuid).to.equal('all-responses-exit');\n\n // Should not have timeout configuration\n expect(result.router?.wait?.timeout).to.be.undefined;\n });\n\n it('adds No Response category when timeout is enabled and no user rules', () => {\n // Start with a node that has no timeout and only \"All Responses\"\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: [{ uuid: 'all-responses-exit', destination_uuid: null }],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg'\n }\n }\n };\n\n // Form data with timeout enabled and no user rules\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: true, // Timeout enabled\n timeout_duration: { value: '300', name: '5 minutes' }\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have both \"All Responses\" and \"No Response\" categories\n expect(result.router?.categories).to.have.length(2);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'All Responses',\n 'No Response'\n ]);\n\n // Should have 2 exits\n expect(result.exits).to.have.length(2);\n\n // Should have timeout configuration\n expect(result.router?.wait?.timeout).to.exist;\n expect(result.router?.wait?.timeout?.seconds).to.equal(300);\n\n // Timeout should point to \"No Response\" category\n const noResponseCategory = result.router!.categories.find(\n (cat) => cat.name === 'No Response'\n );\n expect(result.router?.wait?.timeout?.category_uuid).to.equal(\n noResponseCategory?.uuid\n );\n });\n\n it('handles enabling timeout on node with non-extensible exits array', () => {\n // Create a node with a frozen/sealed exits array to simulate the error condition\n const exitArray = [\n { uuid: 'all-responses-exit', destination_uuid: null }\n ];\n Object.freeze(exitArray); // This makes the array non-extensible\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n exits: exitArray, // This array is now frozen\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'all-responses-cat',\n name: 'All Responses',\n exit_uuid: 'all-responses-exit'\n }\n ],\n cases: [],\n operand: '@input.text',\n default_category_uuid: 'all-responses-cat',\n wait: {\n type: 'msg'\n }\n }\n };\n\n // Form data with timeout being enabled (this should trigger the error)\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [], // No user rules\n timeout_enabled: true, // Enable timeout (this is the key change)\n timeout_duration: { value: '300', name: '5 minutes' }\n };\n\n // This should not throw an error even with a frozen exits array\n expect(() => {\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify the result is correct\n expect(result.router?.categories).to.have.length(2);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'All Responses',\n 'No Response'\n ]);\n expect(result.exits).to.have.length(2);\n expect(result.router?.wait?.timeout).to.exist;\n }).to.not.throw();\n });\n });\n\n describe('validation', () => {\n it('validates form data correctly with no errors', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: 'yes', category: 'Positive' },\n { operator: 'has_text', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('allows same category names for multiple rules', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: 'yes', category: 'Positive' },\n { operator: 'has_text', value: 'ok', category: 'positive' }, // case insensitive same category\n { operator: 'has_text', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('allows rules with operators that need no values', () => {\n const formData = {\n rules: [\n { operator: 'has_text', value: '', category: 'Has Text' },\n { operator: 'has_number', value: '', category: 'Has Number' },\n { operator: 'has_any_word', value: 'hello', category: 'Greeting' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('ignores empty rules in validation', () => {\n const formData = {\n rules: [\n { operator: 'has_phrase', value: 'yes', category: 'Positive' },\n { operator: '', value: '', category: '' }, // empty rule\n { operator: 'has_phrase', value: 'no', category: 'Negative' }\n ]\n };\n\n const validation = wait_for_response.validate!(formData);\n expect(validation.valid).to.be.true;\n expect(validation.errors).to.be.empty;\n });\n\n it('preserves category UUIDs when names are updated', () => {\n // Create original node with specific UUIDs\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [\n {\n uuid: 'category-1-uuid',\n name: 'Old Name 1',\n exit_uuid: 'exit-1-uuid'\n },\n {\n uuid: 'category-2-uuid',\n name: 'Old Name 2',\n exit_uuid: 'exit-2-uuid'\n },\n {\n uuid: 'other-category-uuid',\n name: 'Other',\n exit_uuid: 'other-exit-uuid'\n }\n ],\n cases: [\n {\n uuid: 'case-1-uuid',\n type: 'has_phrase',\n arguments: ['yes'],\n category_uuid: 'category-1-uuid'\n },\n {\n uuid: 'case-2-uuid',\n type: 'has_phrase',\n arguments: ['no'],\n category_uuid: 'category-2-uuid'\n }\n ]\n },\n exits: [\n { uuid: 'exit-1-uuid', destination_uuid: null },\n { uuid: 'exit-2-uuid', destination_uuid: null },\n { uuid: 'other-exit-uuid', destination_uuid: null }\n ]\n };\n\n // Update category names but keep same rules in same order\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'New Name 1' // Changed from \"Old Name 1\"\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'New Name 2' // Changed from \"Old Name 2\"\n }\n ]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify that UUIDs are preserved despite name changes\n expect(result.router?.categories).to.have.length(3); // Two rules + Other\n\n const category1 = result.router!.categories.find(\n (cat) => cat.name === 'New Name 1'\n );\n const category2 = result.router!.categories.find(\n (cat) => cat.name === 'New Name 2'\n );\n const otherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n // Verify UUIDs are preserved\n expect(category1?.uuid).to.equal('category-1-uuid');\n expect(category1?.exit_uuid).to.equal('exit-1-uuid');\n\n expect(category2?.uuid).to.equal('category-2-uuid');\n expect(category2?.exit_uuid).to.equal('exit-2-uuid');\n\n expect(otherCategory?.uuid).to.equal('other-category-uuid');\n expect(otherCategory?.exit_uuid).to.equal('other-exit-uuid');\n\n // Verify case UUIDs are also preserved\n const case1 = result.router!.cases.find(\n (c) => c.category_uuid === 'category-1-uuid'\n );\n const case2 = result.router!.cases.find(\n (c) => c.category_uuid === 'category-2-uuid'\n );\n\n expect(case1?.uuid).to.equal('case-1-uuid');\n expect(case2?.uuid).to.equal('case-2-uuid');\n\n // Verify exits are preserved\n expect(result.exits).to.have.length(3);\n expect(result.exits.map((e) => e.uuid)).to.include.members([\n 'exit-1-uuid',\n 'exit-2-uuid',\n 'other-exit-uuid'\n ]);\n });\n\n it('merges rules with same category name into single category', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'Positive'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'ok',\n category: 'Positive' // Same category name\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'Negative'\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 categories: Positive, Negative, Other\n expect(result.router?.categories).to.have.length(3);\n\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.include.members([\n 'Positive',\n 'Negative',\n 'Other'\n ]);\n\n // Should have 3 cases but only 2 user categories (+ Other)\n expect(result.router?.cases).to.have.length(3);\n\n // Both \"yes\" and \"ok\" rules should reference the same Positive category\n const positiveCategory = result.router!.categories.find(\n (cat) => cat.name === 'Positive'\n );\n expect(positiveCategory).to.exist;\n\n const positiveCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === positiveCategory!.uuid\n );\n expect(positiveCases).to.have.length(2);\n\n // Verify the cases have the correct arguments\n const yesCase = positiveCases.find((case_) =>\n case_.arguments.includes('yes')\n );\n const okCase = positiveCases.find((case_) =>\n case_.arguments.includes('ok')\n );\n\n expect(yesCase).to.exist;\n expect(okCase).to.exist;\n\n // Should have 3 exits: Positive, Negative, Other\n expect(result.exits).to.have.length(3);\n });\n\n it('preserves category order when merging same category names', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'First'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'maybe',\n category: 'Second'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'ok',\n category: 'First' // Same as first rule\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 categories: First, Second, Other (in that order)\n expect(result.router?.categories).to.have.length(3);\n\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.deep.equal(['First', 'Second', 'Other']);\n\n // First category should have 2 cases (yes and ok)\n const firstCategory = result.router!.categories.find(\n (cat) => cat.name === 'First'\n );\n const firstCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === firstCategory!.uuid\n );\n expect(firstCases).to.have.length(2);\n\n // Second category should have 1 case (maybe)\n const secondCategory = result.router!.categories.find(\n (cat) => cat.name === 'Second'\n );\n const secondCases = result.router!.cases.filter(\n (case_) => case_.category_uuid === secondCategory!.uuid\n );\n expect(secondCases).to.have.length(1);\n });\n\n it('preserves category UUIDs when rules are reordered', () => {\n const originalNode = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch' as const,\n operand: '@input.text',\n categories: [\n {\n uuid: 'yes-category-uuid',\n name: 'Yes',\n exit_uuid: 'yes-exit-uuid'\n },\n {\n uuid: 'no-category-uuid',\n name: 'No',\n exit_uuid: 'no-exit-uuid'\n },\n {\n uuid: 'other-category-uuid',\n name: 'Other',\n exit_uuid: 'other-exit-uuid'\n }\n ],\n cases: [\n {\n uuid: 'yes-case-uuid',\n type: 'has_phrase',\n arguments: ['yes'],\n category_uuid: 'yes-category-uuid'\n },\n {\n uuid: 'no-case-uuid',\n type: 'has_phrase',\n arguments: ['no'],\n category_uuid: 'no-category-uuid'\n }\n ]\n },\n exits: [\n { uuid: 'yes-exit-uuid', destination_uuid: null },\n { uuid: 'no-exit-uuid', destination_uuid: null },\n { uuid: 'other-exit-uuid', destination_uuid: null }\n ]\n };\n\n // Reorder the rules - put \"No\" first, \"Yes\" second\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'no',\n category: 'No' // This rule was originally second\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'yes',\n category: 'Yes' // This rule was originally first\n }\n ]\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Verify that categories keep their original UUIDs despite reordering\n expect(result.router?.categories).to.have.length(3); // Two rules + Other\n\n const yesCategory = result.router!.categories.find(\n (cat) => cat.name === 'Yes'\n );\n const noCategory = result.router!.categories.find(\n (cat) => cat.name === 'No'\n );\n const otherCategory = result.router!.categories.find(\n (cat) => cat.name === 'Other'\n );\n\n // Categories should preserve their original UUIDs\n expect(yesCategory?.uuid).to.equal('yes-category-uuid');\n expect(yesCategory?.exit_uuid).to.equal('yes-exit-uuid');\n\n expect(noCategory?.uuid).to.equal('no-category-uuid');\n expect(noCategory?.exit_uuid).to.equal('no-exit-uuid');\n\n expect(otherCategory?.uuid).to.equal('other-category-uuid');\n expect(otherCategory?.exit_uuid).to.equal('other-exit-uuid');\n\n // Verify the cases are created in the new order but reference correct categories\n expect(result.router?.cases).to.have.length(2);\n\n const firstCase = result.router!.cases[0];\n const secondCase = result.router!.cases[1];\n\n // First case should be \"no\" and reference the No category\n expect(firstCase.arguments).to.deep.equal(['no']);\n expect(firstCase.category_uuid).to.equal('no-category-uuid');\n\n // Second case should be \"yes\" and reference the Yes category\n expect(secondCase.arguments).to.deep.equal(['yes']);\n expect(secondCase.category_uuid).to.equal('yes-category-uuid');\n });\n\n it('preserves rule order when rules have duplicate categories', () => {\n const formData = {\n uuid: 'test-node',\n result_name: 'response',\n rules: [\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'first',\n category: 'Shared'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'middle',\n category: 'Different'\n },\n {\n operator: { value: 'has_phrase', name: 'contains phrase' },\n value1: 'last',\n category: 'Shared' // Same as first rule\n }\n ]\n };\n\n const originalNode: Node = {\n uuid: 'test-node',\n actions: [],\n router: {\n type: 'switch',\n result_name: 'response',\n categories: [],\n cases: []\n },\n exits: []\n };\n\n const result = wait_for_response.fromFormData!(formData, originalNode);\n\n // Should have 3 cases in the same order as the input rules\n expect(result.router?.cases).to.have.length(3);\n\n const cases = result.router!.cases;\n\n // First case should be \"first\"\n expect(cases[0].arguments).to.deep.equal(['first']);\n expect(cases[0].type).to.equal('has_phrase');\n\n // Second case should be \"middle\"\n expect(cases[1].arguments).to.deep.equal(['middle']);\n expect(cases[1].type).to.equal('has_phrase');\n\n // Third case should be \"last\"\n expect(cases[2].arguments).to.deep.equal(['last']);\n expect(cases[2].type).to.equal('has_phrase');\n\n // Find the shared category\n const sharedCategory = result.router!.categories.find(\n (cat) => cat.name === 'Shared'\n );\n const differentCategory = result.router!.categories.find(\n (cat) => cat.name === 'Different'\n );\n\n expect(sharedCategory).to.exist;\n expect(differentCategory).to.exist;\n\n // First and third cases should reference the same \"Shared\" category\n expect(cases[0].category_uuid).to.equal(sharedCategory!.uuid);\n expect(cases[2].category_uuid).to.equal(sharedCategory!.uuid);\n\n // Second case should reference the \"Different\" category\n expect(cases[1].category_uuid).to.equal(differentCategory!.uuid);\n\n // Should have 3 categories: Shared, Different, Other\n expect(result.router?.categories).to.have.length(3);\n const categoryNames = result.router!.categories.map((cat) => cat.name);\n expect(categoryNames).to.deep.equal(['Shared', 'Different', 'Other']);\n });\n });\n\n describe('category auto-population', () => {\n it('auto-populates fixed category names for operators with no operands', () => {\n // Test with has_text operator (0 operands)\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n const items = [\n { operator: 'has_text', value1: '', value2: '', category: '' }\n ];\n const result = onItemChange(0, 'operator', 'has_text', items);\n\n expect(result[0].category).to.equal('Has Text');\n });\n\n it('auto-populates category name for single operand operators', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_any_word - should capitalize first letter\n const items = [\n { operator: 'has_any_word', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', 'red', items);\n expect(result[0].category).to.equal('Red');\n\n // Test has_number_lt - should include < symbol\n const items2 = [\n { operator: 'has_number_lt', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', '5', items2);\n expect(result[0].category).to.equal('< 5');\n\n // Test has_number_eq - should include = symbol\n const items3 = [\n { operator: 'has_number_eq', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', '10', items3);\n expect(result[0].category).to.equal('= 10');\n });\n\n it('auto-populates category name for two operand operators', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_number_between - should format as range\n const items = [\n { operator: 'has_number_between', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', '45', items);\n // Should not populate yet (need both values)\n expect(result[0].category).to.equal('');\n\n result = onItemChange(0, 'value2', '85', result);\n expect(result[0].category).to.equal('45 - 85');\n });\n\n it('auto-populates category name for date operators with relative expressions', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Test has_date_gt - should format as \"After today + X days\"\n let items = [\n { operator: 'has_date_gt', value1: '', value2: '', category: '' }\n ];\n let result = onItemChange(0, 'value1', 'today + 5', items);\n expect(result[0].category).to.equal('After today + 5 days');\n\n // Test has_date_lt with single day - should use \"day\" not \"days\"\n items = [\n { operator: 'has_date_lt', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', 'today + 1', items);\n expect(result[0].category).to.equal('Before today + 1 day');\n\n // Test has_date_eq\n items = [\n { operator: 'has_date_eq', value1: '', value2: '', category: '' }\n ];\n result = onItemChange(0, 'value1', 'today - 3', items);\n expect(result[0].category).to.equal('today - 3 days');\n });\n\n it('updates category name when value changes if category matches old default', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with \"red\"\n const items = [\n { operator: 'has_any_word', value1: 'red', value2: '', category: 'Red' }\n ];\n\n // Change to \"blue\" - category should update since it matches old default\n const result = onItemChange(0, 'value1', 'blue', items);\n expect(result[0].category).to.equal('Blue');\n });\n\n it('does not update category name when value changes if user customized it', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with \"red\" but custom category \"Color\"\n const items = [\n {\n operator: 'has_any_word',\n value1: 'red',\n value2: '',\n category: 'Color'\n }\n ];\n\n // Change to \"blue\" - category should NOT update (user customized it)\n const result = onItemChange(0, 'value1', 'blue', items);\n expect(result[0].category).to.equal('Color');\n });\n\n it('updates category when operator changes', () => {\n const rulesConfig = wait_for_response.form.rules as any;\n const onItemChange = rulesConfig.onItemChange;\n\n // Start with has_any_word\n const items = [\n {\n operator: 'has_any_word',\n value1: 'test',\n value2: '',\n category: 'Test'\n }\n ];\n\n // Change to has_text (0 operands) - category should update to fixed name\n const result = onItemChange(0, 'operator', 'has_text', items);\n expect(result[0].category).to.equal('Has Text');\n });\n });\n});\n"]}