@nyaruka/temba-components 0.140.0 → 0.141.0

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 (284) hide show
  1. package/.lintstagedrc.js +10 -0
  2. package/CHANGELOG.md +15 -0
  3. package/dist/locales/es.js +5 -5
  4. package/dist/locales/es.js.map +1 -1
  5. package/dist/locales/fr.js +5 -5
  6. package/dist/locales/fr.js.map +1 -1
  7. package/dist/locales/locale-codes.js +11 -2
  8. package/dist/locales/locale-codes.js.map +1 -1
  9. package/dist/locales/pt.js +5 -5
  10. package/dist/locales/pt.js.map +1 -1
  11. package/dist/temba-components.js +189 -91
  12. package/dist/temba-components.js.map +1 -1
  13. package/out-tsc/src/display/FloatingTab.js +1 -1
  14. package/out-tsc/src/display/FloatingTab.js.map +1 -1
  15. package/out-tsc/src/flow/CanvasNode.js +1 -1
  16. package/out-tsc/src/flow/CanvasNode.js.map +1 -1
  17. package/out-tsc/src/flow/Editor.js +228 -42
  18. package/out-tsc/src/flow/Editor.js.map +1 -1
  19. package/out-tsc/src/flow/Plumber.js +61 -14
  20. package/out-tsc/src/flow/Plumber.js.map +1 -1
  21. package/out-tsc/src/flow/actions/add_contact_groups.js +4 -1
  22. package/out-tsc/src/flow/actions/add_contact_groups.js.map +1 -1
  23. package/out-tsc/src/flow/actions/add_input_labels.js +4 -1
  24. package/out-tsc/src/flow/actions/add_input_labels.js.map +1 -1
  25. package/out-tsc/src/flow/actions/remove_contact_groups.js +6 -1
  26. package/out-tsc/src/flow/actions/remove_contact_groups.js.map +1 -1
  27. package/out-tsc/src/flow/actions/send_broadcast.js +6 -2
  28. package/out-tsc/src/flow/actions/send_broadcast.js.map +1 -1
  29. package/out-tsc/src/flow/actions/set_contact_channel.js +13 -0
  30. package/out-tsc/src/flow/actions/set_contact_channel.js.map +1 -1
  31. package/out-tsc/src/flow/actions/set_contact_status.js +7 -5
  32. package/out-tsc/src/flow/actions/set_contact_status.js.map +1 -1
  33. package/out-tsc/src/flow/actions/start_session.js +10 -3
  34. package/out-tsc/src/flow/actions/start_session.js.map +1 -1
  35. package/out-tsc/src/flow/nodes/split_by_contact_field.js +18 -5
  36. package/out-tsc/src/flow/nodes/split_by_contact_field.js.map +1 -1
  37. package/out-tsc/src/flow/nodes/split_by_expression.js +1 -1
  38. package/out-tsc/src/flow/nodes/split_by_expression.js.map +1 -1
  39. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js +0 -1
  40. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js.map +1 -1
  41. package/out-tsc/src/flow/nodes/split_by_random.js +0 -1
  42. package/out-tsc/src/flow/nodes/split_by_random.js.map +1 -1
  43. package/out-tsc/src/flow/nodes/split_by_run_result.js +10 -4
  44. package/out-tsc/src/flow/nodes/split_by_run_result.js.map +1 -1
  45. package/out-tsc/src/flow/nodes/wait_for_digits.js +1 -1
  46. package/out-tsc/src/flow/nodes/wait_for_digits.js.map +1 -1
  47. package/out-tsc/src/flow/nodes/wait_for_response.js +1 -1
  48. package/out-tsc/src/flow/nodes/wait_for_response.js.map +1 -1
  49. package/out-tsc/src/form/FieldRenderer.js +7 -0
  50. package/out-tsc/src/form/FieldRenderer.js.map +1 -1
  51. package/out-tsc/src/layout/Dialog.js +0 -1
  52. package/out-tsc/src/layout/Dialog.js.map +1 -1
  53. package/out-tsc/src/layout/Modax.js +20 -2
  54. package/out-tsc/src/layout/Modax.js.map +1 -1
  55. package/out-tsc/src/list/ContentMenu.js +14 -1
  56. package/out-tsc/src/list/ContentMenu.js.map +1 -1
  57. package/out-tsc/src/live/TembaChart.js.map +1 -1
  58. package/out-tsc/src/locales/es.js +5 -5
  59. package/out-tsc/src/locales/es.js.map +1 -1
  60. package/out-tsc/src/locales/fr.js +5 -5
  61. package/out-tsc/src/locales/fr.js.map +1 -1
  62. package/out-tsc/src/locales/locale-codes.js +11 -2
  63. package/out-tsc/src/locales/locale-codes.js.map +1 -1
  64. package/out-tsc/src/locales/pt.js +5 -5
  65. package/out-tsc/src/locales/pt.js.map +1 -1
  66. package/out-tsc/src/simulator/Simulator.js +11 -0
  67. package/out-tsc/src/simulator/Simulator.js.map +1 -1
  68. package/out-tsc/src/store/AppState.js +13 -0
  69. package/out-tsc/src/store/AppState.js.map +1 -1
  70. package/out-tsc/test/actions/add_contact_groups.test.js +35 -0
  71. package/out-tsc/test/actions/add_contact_groups.test.js.map +1 -1
  72. package/out-tsc/test/actions/add_input_labels.test.js +53 -0
  73. package/out-tsc/test/actions/add_input_labels.test.js.map +1 -0
  74. package/out-tsc/test/actions/enter_flow.test.js +71 -0
  75. package/out-tsc/test/actions/enter_flow.test.js.map +1 -0
  76. package/out-tsc/test/actions/remove_contact_groups.test.js +24 -0
  77. package/out-tsc/test/actions/remove_contact_groups.test.js.map +1 -1
  78. package/out-tsc/test/actions/send_broadcast.test.js +41 -0
  79. package/out-tsc/test/actions/send_broadcast.test.js.map +1 -1
  80. package/out-tsc/test/actions/set_contact_channel.test.js +67 -0
  81. package/out-tsc/test/actions/set_contact_channel.test.js.map +1 -0
  82. package/out-tsc/test/actions/set_contact_field.test.js +52 -0
  83. package/out-tsc/test/actions/set_contact_field.test.js.map +1 -0
  84. package/out-tsc/test/actions/set_contact_language.test.js +39 -0
  85. package/out-tsc/test/actions/set_contact_language.test.js.map +1 -0
  86. package/out-tsc/test/actions/set_contact_name.test.js +28 -0
  87. package/out-tsc/test/actions/set_contact_name.test.js.map +1 -0
  88. package/out-tsc/test/actions/set_contact_status.test.js +44 -0
  89. package/out-tsc/test/actions/set_contact_status.test.js.map +1 -0
  90. package/out-tsc/test/actions/set_run_result.test.js +47 -0
  91. package/out-tsc/test/actions/set_run_result.test.js.map +1 -0
  92. package/out-tsc/test/actions/start_session.test.js +76 -0
  93. package/out-tsc/test/actions/start_session.test.js.map +1 -1
  94. package/out-tsc/test/nodes/split_by_contact_field.test.js +50 -0
  95. package/out-tsc/test/nodes/split_by_contact_field.test.js.map +1 -1
  96. package/out-tsc/test/nodes/split_by_run_result.test.js +82 -0
  97. package/out-tsc/test/nodes/split_by_run_result.test.js.map +1 -1
  98. package/out-tsc/test/nodes/split_by_ticket.test.js +139 -0
  99. package/out-tsc/test/nodes/split_by_ticket.test.js.map +1 -0
  100. package/out-tsc/test/nodes/split_by_webhook.test.js +111 -0
  101. package/out-tsc/test/nodes/split_by_webhook.test.js.map +1 -0
  102. package/out-tsc/test/temba-flow-editor.test.js +187 -0
  103. package/out-tsc/test/temba-flow-editor.test.js.map +1 -1
  104. package/out-tsc/test/temba-flow-plumber.test.js +19 -0
  105. package/out-tsc/test/temba-flow-plumber.test.js.map +1 -1
  106. package/out-tsc/test/temba-select.test.js +4 -1
  107. package/out-tsc/test/temba-select.test.js.map +1 -1
  108. package/out-tsc/test/utils.test.js +4 -2
  109. package/out-tsc/test/utils.test.js.map +1 -1
  110. package/package.json +3 -9
  111. package/screenshots/truth/actions/add_contact_groups/render/descriptive-group-names.png +0 -0
  112. package/screenshots/truth/actions/add_contact_groups/render/long-group-names.png +0 -0
  113. package/screenshots/truth/actions/add_contact_groups/render/many-groups.png +0 -0
  114. package/screenshots/truth/actions/add_contact_groups/render/multiple-groups.png +0 -0
  115. package/screenshots/truth/actions/add_contact_groups/render/single-group.png +0 -0
  116. package/screenshots/truth/actions/add_contact_urn/render/expression-facebook.png +0 -0
  117. package/screenshots/truth/actions/add_contact_urn/render/expression-phone.png +0 -0
  118. package/screenshots/truth/actions/add_contact_urn/render/facebook-id.png +0 -0
  119. package/screenshots/truth/actions/add_contact_urn/render/instagram-handle.png +0 -0
  120. package/screenshots/truth/actions/add_contact_urn/render/line-id.png +0 -0
  121. package/screenshots/truth/actions/add_contact_urn/render/phone-number.png +0 -0
  122. package/screenshots/truth/actions/add_contact_urn/render/telegram-id.png +0 -0
  123. package/screenshots/truth/actions/add_contact_urn/render/viber-id.png +0 -0
  124. package/screenshots/truth/actions/add_contact_urn/render/wechat-id.png +0 -0
  125. package/screenshots/truth/actions/add_contact_urn/render/whatsapp.png +0 -0
  126. package/screenshots/truth/actions/add_input_labels/editor/multiple-labels.png +0 -0
  127. package/screenshots/truth/actions/add_input_labels/editor/single-label.png +0 -0
  128. package/screenshots/truth/actions/add_input_labels/render/multiple-labels.png +0 -0
  129. package/screenshots/truth/actions/add_input_labels/render/single-label.png +0 -0
  130. package/screenshots/truth/actions/enter_flow/editor/basic-flow.png +0 -0
  131. package/screenshots/truth/actions/enter_flow/editor/long-flow-name.png +0 -0
  132. package/screenshots/truth/actions/enter_flow/render/basic-flow.png +0 -0
  133. package/screenshots/truth/actions/enter_flow/render/long-flow-name.png +0 -0
  134. package/screenshots/truth/actions/play_audio/render/expression-url.png +0 -0
  135. package/screenshots/truth/actions/play_audio/render/static-url.png +0 -0
  136. package/screenshots/truth/actions/remove_contact_groups/render/cleanup-groups.png +0 -0
  137. package/screenshots/truth/actions/remove_contact_groups/render/long-descriptive-group-names.png +0 -0
  138. package/screenshots/truth/actions/remove_contact_groups/render/many-groups.png +0 -0
  139. package/screenshots/truth/actions/remove_contact_groups/render/multiple-groups.png +0 -0
  140. package/screenshots/truth/actions/remove_contact_groups/render/remove-from-all-groups.png +0 -0
  141. package/screenshots/truth/actions/remove_contact_groups/render/single-group.png +0 -0
  142. package/screenshots/truth/actions/say_msg/render/multiline-text.png +0 -0
  143. package/screenshots/truth/actions/say_msg/render/simple-text.png +0 -0
  144. package/screenshots/truth/actions/say_msg/render/text-with-audio-url.png +0 -0
  145. package/screenshots/truth/actions/send_broadcast/render/contacts-only.png +0 -0
  146. package/screenshots/truth/actions/send_broadcast/render/groups-and-contacts.png +0 -0
  147. package/screenshots/truth/actions/send_broadcast/render/groups-only.png +0 -0
  148. package/screenshots/truth/actions/send_broadcast/render/many-groups.png +0 -0
  149. package/screenshots/truth/actions/send_broadcast/render/multiline-text.png +0 -0
  150. package/screenshots/truth/actions/send_email/render/complex-business-email.png +0 -0
  151. package/screenshots/truth/actions/send_email/render/empty-body.png +0 -0
  152. package/screenshots/truth/actions/send_email/render/empty-subject.png +0 -0
  153. package/screenshots/truth/actions/send_email/render/long-subject.png +0 -0
  154. package/screenshots/truth/actions/send_email/render/multiline-body.png +0 -0
  155. package/screenshots/truth/actions/send_email/render/multiple-recipients.png +0 -0
  156. package/screenshots/truth/actions/send_email/render/simple-email.png +0 -0
  157. package/screenshots/truth/actions/send_email/render/with-expressions.png +0 -0
  158. package/screenshots/truth/actions/send_msg/render/long-quick-replies.png +0 -0
  159. package/screenshots/truth/actions/send_msg/render/multiline-text-with-replies.png +0 -0
  160. package/screenshots/truth/actions/send_msg/render/simple-text.png +0 -0
  161. package/screenshots/truth/actions/send_msg/render/text-with-linebreaks.png +0 -0
  162. package/screenshots/truth/actions/send_msg/render/text-with-many-quick-replies.png +0 -0
  163. package/screenshots/truth/actions/send_msg/render/text-with-quick-replies.png +0 -0
  164. package/screenshots/truth/actions/send_msg/render/text-without-quick-replies.png +0 -0
  165. package/screenshots/truth/actions/set_contact_channel/editor/sms-channel.png +0 -0
  166. package/screenshots/truth/actions/set_contact_channel/editor/whatsapp-channel.png +0 -0
  167. package/screenshots/truth/actions/set_contact_channel/render/sms-channel.png +0 -0
  168. package/screenshots/truth/actions/set_contact_channel/render/whatsapp-channel.png +0 -0
  169. package/screenshots/truth/actions/set_contact_field/editor/clear-value.png +0 -0
  170. package/screenshots/truth/actions/set_contact_field/editor/set-value.png +0 -0
  171. package/screenshots/truth/actions/set_contact_field/render/clear-value.png +0 -0
  172. package/screenshots/truth/actions/set_contact_field/render/set-value.png +0 -0
  173. package/screenshots/truth/actions/set_contact_language/editor/english.png +0 -0
  174. package/screenshots/truth/actions/set_contact_language/editor/french.png +0 -0
  175. package/screenshots/truth/actions/set_contact_language/render/english.png +0 -0
  176. package/screenshots/truth/actions/set_contact_language/render/french.png +0 -0
  177. package/screenshots/truth/actions/set_contact_name/editor/expression-name.png +0 -0
  178. package/screenshots/truth/actions/set_contact_name/editor/static-name.png +0 -0
  179. package/screenshots/truth/actions/set_contact_name/render/expression-name.png +0 -0
  180. package/screenshots/truth/actions/set_contact_name/render/static-name.png +0 -0
  181. package/screenshots/truth/actions/set_contact_status/editor/active.png +0 -0
  182. package/screenshots/truth/actions/set_contact_status/editor/archived.png +0 -0
  183. package/screenshots/truth/actions/set_contact_status/editor/blocked.png +0 -0
  184. package/screenshots/truth/actions/set_contact_status/render/active.png +0 -0
  185. package/screenshots/truth/actions/set_contact_status/render/archived.png +0 -0
  186. package/screenshots/truth/actions/set_contact_status/render/blocked.png +0 -0
  187. package/screenshots/truth/actions/set_run_result/editor/expression-value.png +0 -0
  188. package/screenshots/truth/actions/set_run_result/editor/with-category.png +0 -0
  189. package/screenshots/truth/actions/set_run_result/render/expression-value.png +0 -0
  190. package/screenshots/truth/actions/set_run_result/render/with-category.png +0 -0
  191. package/screenshots/truth/actions/start_session/render/contact-query.png +0 -0
  192. package/screenshots/truth/actions/start_session/render/contacts-only.png +0 -0
  193. package/screenshots/truth/actions/start_session/render/create-contact.png +0 -0
  194. package/screenshots/truth/actions/start_session/render/groups-and-contacts.png +0 -0
  195. package/screenshots/truth/actions/start_session/render/groups-only.png +0 -0
  196. package/screenshots/truth/actions/start_session/render/many-recipients.png +0 -0
  197. package/screenshots/truth/editor/wait.png +0 -0
  198. package/screenshots/truth/nodes/split_by_llm/render/information-extraction.png +0 -0
  199. package/screenshots/truth/nodes/split_by_llm/render/sentiment-analysis.png +0 -0
  200. package/screenshots/truth/nodes/split_by_llm/render/summarization.png +0 -0
  201. package/screenshots/truth/nodes/split_by_llm/render/translation-task.png +0 -0
  202. package/screenshots/truth/nodes/split_by_llm_categorize/editor/basic-categorization.png +0 -0
  203. package/screenshots/truth/nodes/split_by_llm_categorize/editor/custom-input-and-result-name.png +0 -0
  204. package/screenshots/truth/nodes/split_by_llm_categorize/editor/feedback-categorization.png +0 -0
  205. package/screenshots/truth/nodes/split_by_llm_categorize/editor/many-categories.png +0 -0
  206. package/screenshots/truth/nodes/split_by_llm_categorize/editor/minimal-categories.png +0 -0
  207. package/screenshots/truth/nodes/split_by_llm_categorize/render/basic-categorization.png +0 -0
  208. package/screenshots/truth/nodes/split_by_llm_categorize/render/custom-input-and-result-name.png +0 -0
  209. package/screenshots/truth/nodes/split_by_llm_categorize/render/feedback-categorization.png +0 -0
  210. package/screenshots/truth/nodes/split_by_llm_categorize/render/many-categories.png +0 -0
  211. package/screenshots/truth/nodes/split_by_llm_categorize/render/minimal-categories.png +0 -0
  212. package/screenshots/truth/nodes/split_by_random/editor/ab-test-multiple-variants.png +0 -0
  213. package/screenshots/truth/nodes/split_by_random/editor/sampling-split.png +0 -0
  214. package/screenshots/truth/nodes/split_by_random/editor/three-way-split.png +0 -0
  215. package/screenshots/truth/nodes/split_by_random/editor/two-bucket-split.png +0 -0
  216. package/screenshots/truth/nodes/split_by_random/render/ab-test-multiple-variants.png +0 -0
  217. package/screenshots/truth/nodes/split_by_random/render/sampling-split.png +0 -0
  218. package/screenshots/truth/nodes/split_by_random/render/three-way-split.png +0 -0
  219. package/screenshots/truth/nodes/split_by_random/render/two-bucket-split.png +0 -0
  220. package/screenshots/truth/nodes/wait_for_audio/render/basic-audio-wait.png +0 -0
  221. package/screenshots/truth/nodes/wait_for_dial/render/basic-dial.png +0 -0
  222. package/screenshots/truth/nodes/wait_for_dial/render/dial-with-limits.png +0 -0
  223. package/screenshots/truth/nodes/wait_for_digits/editor/basic-digits-wait.png +0 -0
  224. package/screenshots/truth/nodes/wait_for_digits/editor/digits-with-rules.png +0 -0
  225. package/screenshots/truth/nodes/wait_for_digits/render/basic-digits-wait.png +0 -0
  226. package/screenshots/truth/nodes/wait_for_digits/render/digits-with-rules.png +0 -0
  227. package/screenshots/truth/nodes/wait_for_menu/render/menu-with-digits.png +0 -0
  228. package/screenshots/truth/nodes/wait_for_response/editor/basic-wait.png +0 -0
  229. package/screenshots/truth/nodes/wait_for_response/editor/custom-result-name.png +0 -0
  230. package/screenshots/truth/nodes/wait_for_response/editor/no-timeout.png +0 -0
  231. package/screenshots/truth/nodes/wait_for_response/editor/short-timeout.png +0 -0
  232. package/screenshots/truth/nodes/wait_for_response/render/basic-wait.png +0 -0
  233. package/screenshots/truth/nodes/wait_for_response/render/custom-result-name.png +0 -0
  234. package/screenshots/truth/nodes/wait_for_response/render/no-timeout.png +0 -0
  235. package/screenshots/truth/nodes/wait_for_response/render/short-timeout.png +0 -0
  236. package/src/display/FloatingTab.ts +1 -1
  237. package/src/flow/CanvasNode.ts +1 -1
  238. package/src/flow/Editor.ts +285 -87
  239. package/src/flow/Plumber.ts +89 -14
  240. package/src/flow/actions/add_contact_groups.ts +4 -1
  241. package/src/flow/actions/add_input_labels.ts +4 -1
  242. package/src/flow/actions/remove_contact_groups.ts +6 -1
  243. package/src/flow/actions/send_broadcast.ts +6 -2
  244. package/src/flow/actions/set_contact_channel.ts +13 -1
  245. package/src/flow/actions/set_contact_status.ts +7 -5
  246. package/src/flow/actions/start_session.ts +10 -3
  247. package/src/flow/nodes/split_by_contact_field.ts +16 -5
  248. package/src/flow/nodes/split_by_expression.ts +1 -1
  249. package/src/flow/nodes/split_by_llm_categorize.ts +0 -1
  250. package/src/flow/nodes/split_by_random.ts +0 -1
  251. package/src/flow/nodes/split_by_run_result.ts +10 -4
  252. package/src/flow/nodes/wait_for_digits.ts +2 -1
  253. package/src/flow/nodes/wait_for_response.ts +1 -1
  254. package/src/form/FieldRenderer.ts +7 -0
  255. package/src/layout/Dialog.ts +0 -1
  256. package/src/layout/Modax.ts +19 -2
  257. package/src/list/ContentMenu.ts +15 -1
  258. package/src/live/TembaChart.ts +1 -1
  259. package/src/locales/es.ts +18 -13
  260. package/src/locales/fr.ts +18 -13
  261. package/src/locales/locale-codes.ts +11 -2
  262. package/src/locales/pt.ts +18 -13
  263. package/src/simulator/Simulator.ts +12 -0
  264. package/src/store/AppState.ts +15 -0
  265. package/test/actions/add_contact_groups.test.ts +38 -0
  266. package/test/actions/add_input_labels.test.ts +67 -0
  267. package/test/actions/enter_flow.test.ts +88 -0
  268. package/test/actions/remove_contact_groups.test.ts +29 -0
  269. package/test/actions/send_broadcast.test.ts +44 -0
  270. package/test/actions/set_contact_channel.test.ts +88 -0
  271. package/test/actions/set_contact_field.test.ts +68 -0
  272. package/test/actions/set_contact_language.test.ts +55 -0
  273. package/test/actions/set_contact_name.test.ts +39 -0
  274. package/test/actions/set_contact_status.test.ts +64 -0
  275. package/test/actions/set_run_result.test.ts +61 -0
  276. package/test/actions/start_session.test.ts +82 -0
  277. package/test/nodes/split_by_contact_field.test.ts +59 -0
  278. package/test/nodes/split_by_run_result.test.ts +100 -0
  279. package/test/nodes/split_by_ticket.test.ts +157 -0
  280. package/test/nodes/split_by_webhook.test.ts +131 -0
  281. package/test/temba-flow-editor.test.ts +240 -0
  282. package/test/temba-flow-plumber.test.ts +62 -0
  283. package/test/temba-select.test.ts +6 -1
  284. package/test/utils.test.ts +4 -2
@@ -0,0 +1,10 @@
1
+ module.exports = {
2
+ '*.ts': (files) => {
3
+ const filtered = files.filter((f) => !f.includes('/locales/'));
4
+ if (filtered.length === 0) return [];
5
+ return [
6
+ `prettier --config .prettierrc --write ${filtered.join(' ')}`,
7
+ `eslint ${filtered.join(' ')}`
8
+ ];
9
+ }
10
+ };
package/CHANGELOG.md CHANGED
@@ -4,8 +4,23 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ #### [v0.141.0](https://github.com/nyaruka/temba-components/compare/v0.140.0...v0.141.0)
8
+
9
+ - Clear flow definition and activity when editor is unloaded [`#835`](https://github.com/nyaruka/temba-components/pull/835)
10
+ - Add introductory text before rules in wait for response [`#834`](https://github.com/nyaruka/temba-components/pull/834)
11
+ - Center first step menu and improve X button spacing [`#833`](https://github.com/nyaruka/temba-components/pull/833)
12
+ - Add save feedback to flow editor [`#828`](https://github.com/nyaruka/temba-components/pull/828)
13
+ - Fix flaky temba-select endpoint search test [`#832`](https://github.com/nyaruka/temba-components/pull/832)
14
+ - Exclude auto-generated locale files from linting during pre-commit [`#831`](https://github.com/nyaruka/temba-components/pull/831)
15
+ - Stagger horizontal path segments for sibling connections [`#827`](https://github.com/nyaruka/temba-components/pull/827)
16
+ - Fix metadata leakage and add round-trip tests [`#826`](https://github.com/nyaruka/temba-components/pull/826)
17
+ - Add spring-from-origin animation for ContentMenu dialogs [`#829`](https://github.com/nyaruka/temba-components/pull/829)
18
+ - Add empty flow treatment with UI prompt and improve tab visibility management [`#830`](https://github.com/nyaruka/temba-components/pull/830)
19
+
7
20
  #### [v0.140.0](https://github.com/nyaruka/temba-components/compare/v0.139.0...v0.140.0)
8
21
 
22
+ > 24 February 2026
23
+
9
24
  - Add voice flow support with new nodes and actions [`#825`](https://github.com/nyaruka/temba-components/pull/825)
10
25
  - Add support for displaying flow validation issues visually on canvas and in node editor [`#821`](https://github.com/nyaruka/temba-components/pull/821)
11
26
  - Add spring-from-origin animation for node editor dialog [`#822`](https://github.com/nyaruka/temba-components/pull/822)
@@ -3,10 +3,10 @@
3
3
  /* eslint-disable no-irregular-whitespace */
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  export const templates = {
6
- scf1453991c986b25: `Tab para completar, enter para seleccionar`,
7
- s73b4d70c02f4b4e0: `No options`,
8
- s8f02e3a18ffc083a: `Are not currently in a flow`,
9
- s638236250662c6b3: `Have sent a message in the last`,
10
- s4788ee206c4570c7: `Have not started this flow in the last 90 days`
6
+ 'scf1453991c986b25': `Tab para completar, enter para seleccionar`,
7
+ 's73b4d70c02f4b4e0': `No options`,
8
+ 's8f02e3a18ffc083a': `Are not currently in a flow`,
9
+ 's638236250662c6b3': `Have sent a message in the last`,
10
+ 's4788ee206c4570c7': `Have not started this flow in the last 90 days`,
11
11
  };
12
12
  //# sourceMappingURL=es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"es.js","sourceRoot":"","sources":["../../../src/locales/es.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,gDAAgD;AAEhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iBAAiB,EAAE,4CAA4C;IAC/D,iBAAiB,EAAE,YAAY;IAC/B,iBAAiB,EAAE,6BAA6B;IAChD,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,gDAAgD;CACpE,CAAC","sourcesContent":["// Do not modify this file by hand!\n// Re-generate this file by running lit-localize\n\n/* eslint-disable no-irregular-whitespace */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const templates = {\n scf1453991c986b25: `Tab para completar, enter para seleccionar`,\n s73b4d70c02f4b4e0: `No options`,\n s8f02e3a18ffc083a: `Are not currently in a flow`,\n s638236250662c6b3: `Have sent a message in the last`,\n s4788ee206c4570c7: `Have not started this flow in the last 90 days`\n};\n"]}
1
+ {"version":3,"file":"es.js","sourceRoot":"","sources":["../../../src/locales/es.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,4CAA4C;IACvE,mBAAmB,EAAE,YAAY;IACjC,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;CAChE,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 'scf1453991c986b25': `Tab para completar, enter para seleccionar`,\n's73b4d70c02f4b4e0': `No options`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n };\n "]}
@@ -3,10 +3,10 @@
3
3
  /* eslint-disable no-irregular-whitespace */
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  export const templates = {
6
- s73b4d70c02f4b4e0: `No options`,
7
- scf1453991c986b25: `Tab to complete, enter to select`,
8
- s8f02e3a18ffc083a: `Are not currently in a flow`,
9
- s638236250662c6b3: `Have sent a message in the last`,
10
- s4788ee206c4570c7: `Have not started this flow in the last 90 days`
6
+ 's73b4d70c02f4b4e0': `No options`,
7
+ 'scf1453991c986b25': `Tab to complete, enter to select`,
8
+ 's8f02e3a18ffc083a': `Are not currently in a flow`,
9
+ 's638236250662c6b3': `Have sent a message in the last`,
10
+ 's4788ee206c4570c7': `Have not started this flow in the last 90 days`,
11
11
  };
12
12
  //# sourceMappingURL=fr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/locales/fr.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,gDAAgD;AAEhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iBAAiB,EAAE,YAAY;IAC/B,iBAAiB,EAAE,kCAAkC;IACrD,iBAAiB,EAAE,6BAA6B;IAChD,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,gDAAgD;CACpE,CAAC","sourcesContent":["// Do not modify this file by hand!\n// Re-generate this file by running lit-localize\n\n/* eslint-disable no-irregular-whitespace */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const templates = {\n s73b4d70c02f4b4e0: `No options`,\n scf1453991c986b25: `Tab to complete, enter to select`,\n s8f02e3a18ffc083a: `Are not currently in a flow`,\n s638236250662c6b3: `Have sent a message in the last`,\n s4788ee206c4570c7: `Have not started this flow in the last 90 days`\n};\n"]}
1
+ {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/locales/fr.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;CAChE,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n };\n "]}
@@ -8,9 +8,18 @@ export const sourceLocale = `en`;
8
8
  * The other locale codes that this application is localized into. Sorted
9
9
  * lexicographically.
10
10
  */
11
- export const targetLocales = [`es`, `fr`, `pt`];
11
+ export const targetLocales = [
12
+ `es`,
13
+ `fr`,
14
+ `pt`,
15
+ ];
12
16
  /**
13
17
  * All valid project locale codes. Sorted lexicographically.
14
18
  */
15
- export const allLocales = [`en`, `es`, `fr`, `pt`];
19
+ export const allLocales = [
20
+ `en`,
21
+ `es`,
22
+ `fr`,
23
+ `pt`,
24
+ ];
16
25
  //# sourceMappingURL=locale-codes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-codes.js","sourceRoot":"","sources":["../../../src/locales/locale-codes.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC","sourcesContent":["// Do not modify this file by hand!\n// Re-generate this file by running lit-localize.\n\n/**\n * The locale code that templates in this source code are written in.\n */\nexport const sourceLocale = `en`;\n\n/**\n * The other locale codes that this application is localized into. Sorted\n * lexicographically.\n */\nexport const targetLocales = [`es`, `fr`, `pt`] as const;\n\n/**\n * All valid project locale codes. Sorted lexicographically.\n */\nexport const allLocales = [`en`, `es`, `fr`, `pt`] as const;\n"]}
1
+ {"version":3,"file":"locale-codes.js","sourceRoot":"","sources":["../../../src/locales/locale-codes.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC","sourcesContent":["// Do not modify this file by hand!\n// Re-generate this file by running lit-localize.\n\n/**\n * The locale code that templates in this source code are written in.\n */\nexport const sourceLocale = `en`;\n\n/**\n * The other locale codes that this application is localized into. Sorted\n * lexicographically.\n */\nexport const targetLocales = [\n `es`,\n `fr`,\n `pt`,\n] as const;\n\n/**\n * All valid project locale codes. Sorted lexicographically.\n */\nexport const allLocales = [\n `en`,\n `es`,\n `fr`,\n `pt`,\n] as const;\n"]}
@@ -3,10 +3,10 @@
3
3
  /* eslint-disable no-irregular-whitespace */
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  export const templates = {
6
- s73b4d70c02f4b4e0: `No options`,
7
- scf1453991c986b25: `Tab to complete, enter to select`,
8
- s8f02e3a18ffc083a: `Are not currently in a flow`,
9
- s638236250662c6b3: `Have sent a message in the last`,
10
- s4788ee206c4570c7: `Have not started this flow in the last 90 days`
6
+ 's73b4d70c02f4b4e0': `No options`,
7
+ 'scf1453991c986b25': `Tab to complete, enter to select`,
8
+ 's8f02e3a18ffc083a': `Are not currently in a flow`,
9
+ 's638236250662c6b3': `Have sent a message in the last`,
10
+ 's4788ee206c4570c7': `Have not started this flow in the last 90 days`,
11
11
  };
12
12
  //# sourceMappingURL=pt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pt.js","sourceRoot":"","sources":["../../../src/locales/pt.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,gDAAgD;AAEhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iBAAiB,EAAE,YAAY;IAC/B,iBAAiB,EAAE,kCAAkC;IACrD,iBAAiB,EAAE,6BAA6B;IAChD,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,gDAAgD;CACpE,CAAC","sourcesContent":["// Do not modify this file by hand!\n// Re-generate this file by running lit-localize\n\n/* eslint-disable no-irregular-whitespace */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const templates = {\n s73b4d70c02f4b4e0: `No options`,\n scf1453991c986b25: `Tab to complete, enter to select`,\n s8f02e3a18ffc083a: `Are not currently in a flow`,\n s638236250662c6b3: `Have sent a message in the last`,\n s4788ee206c4570c7: `Have not started this flow in the last 90 days`\n};\n"]}
1
+ {"version":3,"file":"pt.js","sourceRoot":"","sources":["../../../src/locales/pt.ts"],"names":[],"mappings":"AACI,mCAAmC;AACnC,gDAAgD;AAKhD,4CAA4C;AAC5C,uDAAuD;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,YAAY;IACvC,mBAAmB,EAAE,kCAAkC;IACvD,mBAAmB,EAAE,6BAA6B;IAClD,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gDAAgD;CAChE,CAAC","sourcesContent":["\n // Do not modify this file by hand!\n // Re-generate this file by running lit-localize\n\n \n \n\n /* eslint-disable no-irregular-whitespace */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n export const templates = {\n 's73b4d70c02f4b4e0': `No options`,\n'scf1453991c986b25': `Tab to complete, enter to select`,\n's8f02e3a18ffc083a': `Are not currently in a flow`,\n's638236250662c6b3': `Have sent a message in the last`,\n's4788ee206c4570c7': `Have not started this flow in the last 90 days`,\n };\n "]}