@nyaruka/temba-components 0.129.1 → 0.129.3

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 (583) hide show
  1. package/.github/workflows/build.yml +6 -5
  2. package/.github/workflows/coverage.yml +80 -0
  3. package/CHANGELOG.md +32 -0
  4. package/README.md +6 -0
  5. package/check-coverage.js +133 -0
  6. package/demo/components/alert/example.html +71 -0
  7. package/demo/components/button/example.html +167 -0
  8. package/demo/{chart → components/chart}/example.html +3 -3
  9. package/demo/components/chart/horizontal-demo.html +160 -0
  10. package/demo/components/checkbox/example.html +68 -0
  11. package/demo/components/compose/example.html +69 -0
  12. package/demo/components/datepicker/example.html +3 -3
  13. package/demo/components/datepicker/range-picker-demo.html +2 -2
  14. package/demo/{dialog → components/dialog}/example.html +3 -3
  15. package/demo/components/dropdown/example.html +95 -0
  16. package/demo/{flow → components/flow}/example.html +1 -1
  17. package/demo/{misc → components/misc}/example.html +3 -3
  18. package/demo/components/progress/example.html +62 -0
  19. package/demo/components/select/drag-and-drop.html +162 -0
  20. package/demo/components/select/example.html +76 -0
  21. package/demo/components/select/multi.html +72 -0
  22. package/demo/components/slider/example.html +55 -0
  23. package/demo/{sortable-list → components/sortable-list}/example.html +3 -3
  24. package/demo/components/tabs/example.html +91 -0
  25. package/demo/{textinput → components/textinput}/completion.html +3 -3
  26. package/demo/components/textinput/example.html +141 -0
  27. package/demo/{webchat → components/webchat}/example.html +3 -3
  28. package/demo/data/flows/sample-flow.json +107 -100
  29. package/demo/index.html +21 -21
  30. package/demo/static/css/styles.css +253 -0
  31. package/demo/sticky-note-demo.html +88 -85
  32. package/demo/styles.css +24 -0
  33. package/dist/locales/es.js +5 -5
  34. package/dist/locales/es.js.map +1 -1
  35. package/dist/locales/fr.js +5 -5
  36. package/dist/locales/fr.js.map +1 -1
  37. package/dist/locales/locale-codes.js +2 -11
  38. package/dist/locales/locale-codes.js.map +1 -1
  39. package/dist/locales/pt.js +5 -5
  40. package/dist/locales/pt.js.map +1 -1
  41. package/dist/temba-components.js +893 -476
  42. package/dist/temba-components.js.map +1 -1
  43. package/generate-coverage-badge.sh +69 -0
  44. package/out-tsc/src/{vectoricon/index.js → Icons.js} +1 -1
  45. package/out-tsc/src/Icons.js.map +1 -0
  46. package/out-tsc/src/display/Alert.js.map +1 -0
  47. package/out-tsc/src/display/Anchor.js.map +1 -0
  48. package/out-tsc/src/display/Button.js.map +1 -0
  49. package/out-tsc/src/{charcount → display}/CharCount.js +159 -2
  50. package/out-tsc/src/display/CharCount.js.map +1 -0
  51. package/out-tsc/src/display/Chat.js.map +1 -0
  52. package/out-tsc/src/display/ContactName.js.map +1 -0
  53. package/out-tsc/src/display/ContactUrn.js.map +1 -0
  54. package/out-tsc/src/display/Dropdown.js.map +1 -0
  55. package/out-tsc/src/{vectoricon/VectorIcon.js → display/Icon.js} +2 -2
  56. package/out-tsc/src/display/Icon.js.map +1 -0
  57. package/out-tsc/src/display/Label.js.map +1 -0
  58. package/out-tsc/src/{leafletmap → display}/LeafletMap.js +16 -1
  59. package/out-tsc/src/display/LeafletMap.js.map +1 -0
  60. package/out-tsc/src/display/Lightbox.js.map +1 -0
  61. package/out-tsc/src/{loading → display}/Loading.js.map +1 -1
  62. package/out-tsc/src/{options → display}/Options.js.map +1 -1
  63. package/out-tsc/src/display/ProgressBar.js.map +1 -0
  64. package/out-tsc/src/display/TembaDate.js.map +1 -0
  65. package/out-tsc/src/display/TembaUser.js.map +1 -0
  66. package/out-tsc/src/display/Thumbnail.js.map +1 -0
  67. package/out-tsc/src/{tip → display}/Tip.js +1 -2
  68. package/out-tsc/src/display/Tip.js.map +1 -0
  69. package/out-tsc/src/display/Toast.js.map +1 -0
  70. package/out-tsc/src/display/sms/gsmsplitter.js.map +1 -0
  71. package/out-tsc/src/display/sms/gsmvalidator.js.map +1 -0
  72. package/out-tsc/src/display/sms/index.js.map +1 -0
  73. package/out-tsc/src/display/sms/unicodesplitter.js.map +1 -0
  74. package/out-tsc/src/events.js +2 -0
  75. package/out-tsc/src/events.js.map +1 -0
  76. package/out-tsc/src/excellent/ExcellentParser.js.map +1 -0
  77. package/out-tsc/src/excellent/helpers.js.map +1 -0
  78. package/out-tsc/src/flow/Editor.js +533 -140
  79. package/out-tsc/src/flow/Editor.js.map +1 -1
  80. package/out-tsc/src/flow/EditorNode.js +287 -20
  81. package/out-tsc/src/flow/EditorNode.js.map +1 -1
  82. package/out-tsc/src/flow/Plumber.js +154 -74
  83. package/out-tsc/src/flow/Plumber.js.map +1 -1
  84. package/out-tsc/src/flow/StickyNote.js +153 -9
  85. package/out-tsc/src/flow/StickyNote.js.map +1 -1
  86. package/out-tsc/src/flow/config.js +88 -18
  87. package/out-tsc/src/flow/config.js.map +1 -1
  88. package/out-tsc/src/flow/render.js +327 -10
  89. package/out-tsc/src/flow/render.js.map +1 -1
  90. package/out-tsc/src/{checkbox → form}/Checkbox.js +2 -2
  91. package/out-tsc/src/form/Checkbox.js.map +1 -0
  92. package/out-tsc/src/{colorpicker → form}/ColorPicker.js +1 -1
  93. package/out-tsc/src/form/ColorPicker.js.map +1 -0
  94. package/out-tsc/src/{completion → form}/Completion.js +2 -2
  95. package/out-tsc/src/form/Completion.js.map +1 -0
  96. package/out-tsc/src/{compose → form}/Compose.js +1 -1
  97. package/out-tsc/src/form/Compose.js.map +1 -0
  98. package/out-tsc/src/{contactsearch → form}/ContactSearch.js +2 -2
  99. package/out-tsc/src/form/ContactSearch.js.map +1 -0
  100. package/out-tsc/src/form/CroppieCSS.js.map +1 -0
  101. package/out-tsc/src/{datepicker → form}/DatePicker.js +1 -1
  102. package/out-tsc/src/form/DatePicker.js.map +1 -0
  103. package/out-tsc/src/{FormElement.js → form/FormElement.js} +1 -1
  104. package/out-tsc/src/form/FormElement.js.map +1 -0
  105. package/out-tsc/src/form/FormField.js.map +1 -0
  106. package/out-tsc/src/{imagepicker → form}/ImagePicker.js +2 -2
  107. package/out-tsc/src/form/ImagePicker.js.map +1 -0
  108. package/out-tsc/src/{mediapicker → form}/MediaPicker.js +1 -1
  109. package/out-tsc/src/form/MediaPicker.js.map +1 -0
  110. package/out-tsc/src/{datepicker → form}/RangePicker.js +3 -2
  111. package/out-tsc/src/form/RangePicker.js.map +1 -0
  112. package/out-tsc/src/{slider → form}/TembaSlider.js +1 -1
  113. package/out-tsc/src/form/TembaSlider.js.map +1 -0
  114. package/out-tsc/src/{templates → form}/TemplateEditor.js +1 -1
  115. package/out-tsc/src/form/TemplateEditor.js.map +1 -0
  116. package/out-tsc/src/{textinput → form}/TextInput.js +3 -3
  117. package/out-tsc/src/form/TextInput.js.map +1 -0
  118. package/out-tsc/src/{omnibox → form/select}/Omnibox.js +2 -2
  119. package/out-tsc/src/form/select/Omnibox.js.map +1 -0
  120. package/out-tsc/src/{select → form/select}/PopupSelect.js +1 -1
  121. package/out-tsc/src/form/select/PopupSelect.js.map +1 -0
  122. package/out-tsc/src/{select → form/select}/Select.js +86 -87
  123. package/out-tsc/src/form/select/Select.js.map +1 -0
  124. package/out-tsc/src/{select → form/select}/UserSelect.js +1 -1
  125. package/out-tsc/src/form/select/UserSelect.js.map +1 -0
  126. package/out-tsc/src/{select → form/select}/WorkspaceSelect.js +1 -1
  127. package/out-tsc/src/form/select/WorkspaceSelect.js.map +1 -0
  128. package/out-tsc/src/interfaces.js +1 -0
  129. package/out-tsc/src/interfaces.js.map +1 -1
  130. package/out-tsc/src/layout/Dialog.js.map +1 -0
  131. package/out-tsc/src/layout/Mask.js.map +1 -0
  132. package/out-tsc/src/{dialog → layout}/Modax.js.map +1 -1
  133. package/out-tsc/src/layout/Resizer.js.map +1 -0
  134. package/out-tsc/src/layout/Tab.js.map +1 -0
  135. package/out-tsc/src/layout/TabPane.js.map +1 -0
  136. package/out-tsc/src/list/NotificationList.js +1 -1
  137. package/out-tsc/src/list/NotificationList.js.map +1 -1
  138. package/out-tsc/src/list/RunList.js +1 -1
  139. package/out-tsc/src/list/RunList.js.map +1 -1
  140. package/out-tsc/src/list/ShortcutList.js.map +1 -1
  141. package/out-tsc/src/list/TembaMenu.js +1 -1
  142. package/out-tsc/src/list/TembaMenu.js.map +1 -1
  143. package/out-tsc/src/list/TicketList.js +1 -1
  144. package/out-tsc/src/list/TicketList.js.map +1 -1
  145. package/out-tsc/src/{aliaseditor → live}/AliasEditor.js +1 -1
  146. package/out-tsc/src/live/AliasEditor.js.map +1 -0
  147. package/out-tsc/src/{contacts → live}/ContactBadges.js +1 -1
  148. package/out-tsc/src/live/ContactBadges.js.map +1 -0
  149. package/out-tsc/src/{contacts → live}/ContactChat.js +79 -3
  150. package/out-tsc/src/live/ContactChat.js.map +1 -0
  151. package/out-tsc/src/{contacts → live}/ContactDetails.js +1 -1
  152. package/out-tsc/src/live/ContactDetails.js.map +1 -0
  153. package/out-tsc/src/{contacts → live}/ContactFieldEditor.js +2 -2
  154. package/out-tsc/src/live/ContactFieldEditor.js.map +1 -0
  155. package/out-tsc/src/live/ContactFields.js.map +1 -0
  156. package/out-tsc/src/live/ContactNameFetch.js.map +1 -0
  157. package/out-tsc/src/{contacts → live}/ContactNotepad.js +1 -1
  158. package/out-tsc/src/{contacts → live}/ContactNotepad.js.map +1 -1
  159. package/out-tsc/src/{contacts → live}/ContactPending.js +1 -1
  160. package/out-tsc/src/live/ContactPending.js.map +1 -0
  161. package/out-tsc/src/live/ContactStoreElement.js.map +1 -0
  162. package/out-tsc/src/live/FieldManager.js.map +1 -0
  163. package/out-tsc/src/live/StartProgress.js.map +1 -0
  164. package/out-tsc/src/{chart → live}/TembaChart.js +5 -1
  165. package/out-tsc/src/live/TembaChart.js.map +1 -0
  166. package/out-tsc/src/locales/es.js +5 -5
  167. package/out-tsc/src/locales/es.js.map +1 -1
  168. package/out-tsc/src/locales/fr.js +5 -5
  169. package/out-tsc/src/locales/fr.js.map +1 -1
  170. package/out-tsc/src/locales/locale-codes.js +2 -11
  171. package/out-tsc/src/locales/locale-codes.js.map +1 -1
  172. package/out-tsc/src/locales/pt.js +5 -5
  173. package/out-tsc/src/locales/pt.js.map +1 -1
  174. package/out-tsc/src/store/AppState.js +54 -24
  175. package/out-tsc/src/store/AppState.js.map +1 -1
  176. package/out-tsc/src/store/Store.js +1 -1
  177. package/out-tsc/src/store/Store.js.map +1 -1
  178. package/out-tsc/src/{utils/index.js → utils.js} +22 -1
  179. package/out-tsc/src/utils.js.map +1 -0
  180. package/out-tsc/src/webchat/WebChat.js +1 -1
  181. package/out-tsc/src/webchat/WebChat.js.map +1 -1
  182. package/out-tsc/temba-components.js +2 -2
  183. package/out-tsc/temba-components.js.map +1 -1
  184. package/out-tsc/temba-modules.js +54 -54
  185. package/out-tsc/temba-modules.js.map +1 -1
  186. package/out-tsc/temba-webchat.js +2 -2
  187. package/out-tsc/temba-webchat.js.map +1 -1
  188. package/out-tsc/test/temba-alert.test.js +1 -1
  189. package/out-tsc/test/temba-alert.test.js.map +1 -1
  190. package/out-tsc/test/temba-appstate-language.test.js +90 -0
  191. package/out-tsc/test/temba-appstate-language.test.js.map +1 -1
  192. package/out-tsc/test/temba-charcount.test.js.map +1 -1
  193. package/out-tsc/test/temba-chart.test.js +1 -1
  194. package/out-tsc/test/temba-chart.test.js.map +1 -1
  195. package/out-tsc/test/temba-checkbox.test.js.map +1 -1
  196. package/out-tsc/test/temba-color-picker.test.js +1 -1
  197. package/out-tsc/test/temba-color-picker.test.js.map +1 -1
  198. package/out-tsc/test/temba-completion.test.js +1 -1
  199. package/out-tsc/test/temba-completion.test.js.map +1 -1
  200. package/out-tsc/test/temba-compose.test.js +1 -1
  201. package/out-tsc/test/temba-compose.test.js.map +1 -1
  202. package/out-tsc/test/temba-contact-badges.test.js +1 -1
  203. package/out-tsc/test/temba-contact-badges.test.js.map +1 -1
  204. package/out-tsc/test/temba-contact-chat.test.js +3 -1
  205. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  206. package/out-tsc/test/temba-contact-details.test.js +1 -1
  207. package/out-tsc/test/temba-contact-details.test.js.map +1 -1
  208. package/out-tsc/test/temba-contact-fields.test.js +1 -1
  209. package/out-tsc/test/temba-contact-fields.test.js.map +1 -1
  210. package/out-tsc/test/temba-contact-search.test.js +1 -1
  211. package/out-tsc/test/temba-contact-search.test.js.map +1 -1
  212. package/out-tsc/test/temba-date.test.js +5 -1
  213. package/out-tsc/test/temba-date.test.js.map +1 -1
  214. package/out-tsc/test/temba-datepicker.test.js +1 -1
  215. package/out-tsc/test/temba-datepicker.test.js.map +1 -1
  216. package/out-tsc/test/temba-dialog.test.js +1 -1
  217. package/out-tsc/test/temba-dialog.test.js.map +1 -1
  218. package/out-tsc/test/temba-dropdown.test.js +1 -1
  219. package/out-tsc/test/temba-dropdown.test.js.map +1 -1
  220. package/out-tsc/test/temba-excellent-helpers.test.js +316 -0
  221. package/out-tsc/test/temba-excellent-helpers.test.js.map +1 -0
  222. package/out-tsc/test/temba-field-manager.test.js.map +1 -1
  223. package/out-tsc/test/temba-flow-editor-node.test.js +414 -1
  224. package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -1
  225. package/out-tsc/test/temba-flow-editor.test.js +185 -0
  226. package/out-tsc/test/temba-flow-editor.test.js.map +1 -1
  227. package/out-tsc/test/temba-flow-plumber-connections.test.js +113 -0
  228. package/out-tsc/test/temba-flow-plumber-connections.test.js.map +1 -0
  229. package/out-tsc/test/temba-flow-plumber.test.js +73 -93
  230. package/out-tsc/test/temba-flow-plumber.test.js.map +1 -1
  231. package/out-tsc/test/temba-flow-render.test.js +624 -1
  232. package/out-tsc/test/temba-flow-render.test.js.map +1 -1
  233. package/out-tsc/test/temba-flow-self-routing.test.js +172 -0
  234. package/out-tsc/test/temba-flow-self-routing.test.js.map +1 -0
  235. package/out-tsc/test/temba-formfield.test.js.map +1 -1
  236. package/out-tsc/test/temba-icon.test.js +1 -1
  237. package/out-tsc/test/temba-icon.test.js.map +1 -1
  238. package/out-tsc/test/temba-integration-markdown.test.js.map +1 -1
  239. package/out-tsc/test/temba-label.test.js +1 -1
  240. package/out-tsc/test/temba-label.test.js.map +1 -1
  241. package/out-tsc/test/temba-lightbox.test.js +1 -1
  242. package/out-tsc/test/temba-lightbox.test.js.map +1 -1
  243. package/out-tsc/test/temba-markdown.test.js +127 -0
  244. package/out-tsc/test/temba-markdown.test.js.map +1 -0
  245. package/out-tsc/test/temba-menu.test.js +1 -1
  246. package/out-tsc/test/temba-menu.test.js.map +1 -1
  247. package/out-tsc/test/temba-modax.test.js +1 -1
  248. package/out-tsc/test/temba-modax.test.js.map +1 -1
  249. package/out-tsc/test/temba-modules.test.js +47 -0
  250. package/out-tsc/test/temba-modules.test.js.map +1 -0
  251. package/out-tsc/test/temba-omnibox.test.js +1 -1
  252. package/out-tsc/test/temba-omnibox.test.js.map +1 -1
  253. package/out-tsc/test/temba-options.test.js.map +1 -1
  254. package/out-tsc/test/temba-range-picker.test.js +9 -2
  255. package/out-tsc/test/temba-range-picker.test.js.map +1 -1
  256. package/out-tsc/test/temba-rapid-element.test.js +273 -0
  257. package/out-tsc/test/temba-rapid-element.test.js.map +1 -0
  258. package/out-tsc/test/temba-resize-element.test.js +85 -0
  259. package/out-tsc/test/temba-resize-element.test.js.map +1 -0
  260. package/out-tsc/test/temba-select.test.js +2 -2
  261. package/out-tsc/test/temba-select.test.js.map +1 -1
  262. package/out-tsc/test/temba-slider.test.js.map +1 -1
  263. package/out-tsc/test/temba-sticky-note.test.js +194 -0
  264. package/out-tsc/test/temba-sticky-note.test.js.map +1 -0
  265. package/out-tsc/test/temba-template-editor.test.js.map +1 -1
  266. package/out-tsc/test/temba-textinput.test.js +1 -1
  267. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  268. package/out-tsc/test/temba-tip.test.js +1 -1
  269. package/out-tsc/test/temba-tip.test.js.map +1 -1
  270. package/out-tsc/test/temba-toast.test.js +1 -1
  271. package/out-tsc/test/temba-toast.test.js.map +1 -1
  272. package/out-tsc/test/temba-utils-index.test.js +1 -1
  273. package/out-tsc/test/temba-utils-index.test.js.map +1 -1
  274. package/out-tsc/test/temba-utils-uuid.test.js +38 -0
  275. package/out-tsc/test/temba-utils-uuid.test.js.map +1 -0
  276. package/out-tsc/test/temba-webchat.test.js +28 -12
  277. package/out-tsc/test/temba-webchat.test.js.map +1 -1
  278. package/out-tsc/test/utils.test.js +2 -6
  279. package/out-tsc/test/utils.test.js.map +1 -1
  280. package/package.json +18 -9
  281. package/rollup.components.mjs +1 -1
  282. package/screenshots/truth/datepicker/range-picker-all.png +0 -0
  283. package/screenshots/truth/datepicker/range-picker-button-states.png +0 -0
  284. package/screenshots/truth/datepicker/range-picker-default.png +0 -0
  285. package/screenshots/truth/datepicker/range-picker-editing-start.png +0 -0
  286. package/screenshots/truth/datepicker/range-picker-initial-values.png +0 -0
  287. package/screenshots/truth/datepicker/range-picker-week.png +0 -0
  288. package/screenshots/truth/datepicker/range-picker-year.png +0 -0
  289. package/screenshots/truth/sticky-note/blue-color.png +0 -0
  290. package/screenshots/truth/sticky-note/blue.png +0 -0
  291. package/screenshots/truth/sticky-note/color-picker-expanded.png +0 -0
  292. package/screenshots/truth/sticky-note/default.png +0 -0
  293. package/screenshots/truth/sticky-note/gray-color.png +0 -0
  294. package/screenshots/truth/sticky-note/gray.png +0 -0
  295. package/screenshots/truth/sticky-note/green-color.png +0 -0
  296. package/screenshots/truth/sticky-note/green.png +0 -0
  297. package/screenshots/truth/sticky-note/pink-color.png +0 -0
  298. package/screenshots/truth/sticky-note/pink.png +0 -0
  299. package/screenshots/truth/sticky-note/yellow-color.png +0 -0
  300. package/screenshots/truth/sticky-note/yellow.png +0 -0
  301. package/src/{charcount → display}/CharCount.ts +164 -2
  302. package/src/{vectoricon/VectorIcon.ts → display/Icon.ts} +1 -1
  303. package/src/{leafletmap → display}/LeafletMap.ts +19 -1
  304. package/src/{thumbnail → display}/Thumbnail.ts +1 -1
  305. package/src/{tip → display}/Tip.ts +1 -2
  306. package/src/{contacts/events.ts → events.ts} +1 -64
  307. package/src/flow/Editor.ts +655 -165
  308. package/src/flow/EditorNode.ts +337 -22
  309. package/src/flow/Plumber.ts +186 -79
  310. package/src/flow/StickyNote.ts +165 -9
  311. package/src/flow/config.ts +114 -18
  312. package/src/flow/render.ts +398 -11
  313. package/src/{checkbox → form}/Checkbox.ts +2 -2
  314. package/src/{colorpicker → form}/ColorPicker.ts +2 -2
  315. package/src/{completion → form}/Completion.ts +3 -3
  316. package/src/{compose → form}/Compose.ts +7 -7
  317. package/src/{contactsearch → form}/ContactSearch.ts +6 -6
  318. package/src/{datepicker → form}/DatePicker.ts +1 -1
  319. package/src/{FormElement.ts → form/FormElement.ts} +1 -1
  320. package/src/{imagepicker → form}/ImagePicker.ts +2 -2
  321. package/src/{mediapicker → form}/MediaPicker.ts +1 -1
  322. package/src/{datepicker → form}/RangePicker.ts +3 -2
  323. package/src/{slider → form}/TembaSlider.ts +1 -1
  324. package/src/{templates → form}/TemplateEditor.ts +2 -2
  325. package/src/{textinput → form}/TextInput.ts +5 -5
  326. package/src/{omnibox → form/select}/Omnibox.ts +2 -2
  327. package/src/{select → form/select}/PopupSelect.ts +1 -1
  328. package/src/{select → form/select}/Select.ts +124 -126
  329. package/src/{select → form/select}/UserSelect.ts +1 -1
  330. package/src/{select → form/select}/WorkspaceSelect.ts +1 -1
  331. package/src/interfaces.ts +2 -1
  332. package/src/{dialog → layout}/Dialog.ts +1 -1
  333. package/src/list/NotificationList.ts +2 -2
  334. package/src/list/RunList.ts +3 -3
  335. package/src/list/ShortcutList.ts +1 -1
  336. package/src/list/TembaMenu.ts +2 -2
  337. package/src/list/TicketList.ts +1 -1
  338. package/src/{aliaseditor → live}/AliasEditor.ts +3 -3
  339. package/src/{contacts → live}/ContactBadges.ts +1 -1
  340. package/src/{contacts → live}/ContactChat.ts +118 -8
  341. package/src/{contacts → live}/ContactDetails.ts +1 -1
  342. package/src/{contacts → live}/ContactFieldEditor.ts +4 -4
  343. package/src/{contacts → live}/ContactFields.ts +1 -1
  344. package/src/{contacts → live}/ContactNotepad.ts +1 -1
  345. package/src/{contacts → live}/ContactPending.ts +1 -1
  346. package/src/{chart → live}/TembaChart.ts +5 -2
  347. package/src/locales/es.ts +13 -18
  348. package/src/locales/fr.ts +13 -18
  349. package/src/locales/locale-codes.ts +2 -11
  350. package/src/locales/pt.ts +13 -18
  351. package/src/store/AppState.ts +75 -29
  352. package/src/store/Store.ts +1 -1
  353. package/src/store/flow-definition.d.ts +125 -0
  354. package/src/{utils/index.ts → utils.ts} +26 -10
  355. package/src/webchat/WebChat.ts +1 -1
  356. package/static/css/temba-components.css +1 -0
  357. package/svg.js +1 -4
  358. package/temba-components.ts +2 -2
  359. package/temba-modules.ts +54 -54
  360. package/temba-webchat.ts +2 -2
  361. package/test/temba-alert.test.ts +1 -1
  362. package/test/temba-appstate-language.test.ts +108 -0
  363. package/test/temba-charcount.test.ts +1 -1
  364. package/test/temba-chart.test.ts +1 -1
  365. package/test/temba-checkbox.test.ts +1 -1
  366. package/test/temba-color-picker.test.ts +1 -1
  367. package/test/temba-completion.test.ts +1 -1
  368. package/test/temba-compose.test.ts +1 -1
  369. package/test/temba-contact-badges.test.ts +1 -1
  370. package/test/temba-contact-chat.test.ts +6 -4
  371. package/test/temba-contact-details.test.ts +1 -1
  372. package/test/temba-contact-fields.test.ts +1 -1
  373. package/test/temba-contact-search.test.ts +2 -2
  374. package/test/temba-date.test.ts +8 -3
  375. package/test/temba-datepicker.test.ts +1 -1
  376. package/test/temba-dialog.test.ts +1 -1
  377. package/test/temba-dropdown.test.ts +1 -1
  378. package/test/temba-excellent-helpers.test.ts +417 -0
  379. package/test/temba-field-manager.test.ts +2 -2
  380. package/test/temba-flow-editor-node.test.ts +536 -1
  381. package/test/temba-flow-editor.test.ts +224 -0
  382. package/test/temba-flow-editor.test.ts.backup +563 -0
  383. package/test/temba-flow-plumber-connections.test.ts +142 -0
  384. package/test/temba-flow-plumber.test.ts +83 -120
  385. package/test/temba-flow-render.test.ts +787 -4
  386. package/test/temba-flow-self-routing.test.ts +215 -0
  387. package/test/temba-formfield.test.ts +1 -1
  388. package/test/temba-icon.test.ts +1 -1
  389. package/test/temba-integration-markdown.test.ts +1 -1
  390. package/test/temba-label.test.ts +1 -1
  391. package/test/temba-lightbox.test.ts +1 -1
  392. package/test/temba-markdown.test.ts +162 -0
  393. package/test/temba-menu.test.ts +1 -1
  394. package/test/temba-modax.test.ts +2 -2
  395. package/test/temba-modules.test.ts +56 -0
  396. package/test/temba-omnibox.test.ts +1 -1
  397. package/test/temba-options.test.ts +1 -1
  398. package/test/temba-range-picker.test.ts +17 -2
  399. package/test/temba-rapid-element.test.ts +341 -0
  400. package/test/temba-resize-element.test.ts +104 -0
  401. package/test/temba-select.test.ts +2 -2
  402. package/test/temba-slider.test.ts +1 -1
  403. package/test/temba-sticky-note.test.ts +281 -0
  404. package/test/temba-template-editor.test.ts +1 -1
  405. package/test/temba-textinput.test.ts +1 -1
  406. package/test/temba-tip.test.ts +1 -1
  407. package/test/temba-toast.test.ts +1 -1
  408. package/test/temba-utils-index.test.ts +1 -1
  409. package/test/temba-utils-index.test.ts.backup +1737 -0
  410. package/test/temba-utils-uuid.test.ts +48 -0
  411. package/test/temba-webchat.test.ts +30 -12
  412. package/test/utils.test.ts +5 -9
  413. package/web-dev-server.config.mjs +1 -1
  414. package/demo/alert/example.html +0 -65
  415. package/demo/button/example.html +0 -71
  416. package/demo/chart/horizontal-demo.html +0 -81
  417. package/demo/checkbox/example.html +0 -72
  418. package/demo/compose/example.html +0 -72
  419. package/demo/dropdown/example.html +0 -99
  420. package/demo/progress/example.html +0 -59
  421. package/demo/select/drag-and-drop.html +0 -142
  422. package/demo/select/example.html +0 -82
  423. package/demo/select/multi.html +0 -73
  424. package/demo/slider/example.html +0 -59
  425. package/demo/tabs/example.html +0 -91
  426. package/demo/textinput/example.html +0 -61
  427. package/out-tsc/src/FormElement.js.map +0 -1
  428. package/out-tsc/src/alert/Alert.js.map +0 -1
  429. package/out-tsc/src/aliaseditor/AliasEditor.js.map +0 -1
  430. package/out-tsc/src/anchor/Anchor.js.map +0 -1
  431. package/out-tsc/src/button/Button.js.map +0 -1
  432. package/out-tsc/src/charcount/CharCount.js.map +0 -1
  433. package/out-tsc/src/charcount/helpers.js +0 -159
  434. package/out-tsc/src/charcount/helpers.js.map +0 -1
  435. package/out-tsc/src/chart/TembaChart.js.map +0 -1
  436. package/out-tsc/src/chat/Chat.js.map +0 -1
  437. package/out-tsc/src/checkbox/Checkbox.js.map +0 -1
  438. package/out-tsc/src/colorpicker/ColorPicker.js.map +0 -1
  439. package/out-tsc/src/completion/Completion.js.map +0 -1
  440. package/out-tsc/src/completion/ExcellentParser.js.map +0 -1
  441. package/out-tsc/src/completion/helpers.js.map +0 -1
  442. package/out-tsc/src/compose/Compose.js.map +0 -1
  443. package/out-tsc/src/contacts/ContactBadges.js.map +0 -1
  444. package/out-tsc/src/contacts/ContactChat.js.map +0 -1
  445. package/out-tsc/src/contacts/ContactDetails.js.map +0 -1
  446. package/out-tsc/src/contacts/ContactFieldEditor.js.map +0 -1
  447. package/out-tsc/src/contacts/ContactFields.js.map +0 -1
  448. package/out-tsc/src/contacts/ContactName.js.map +0 -1
  449. package/out-tsc/src/contacts/ContactNameFetch.js.map +0 -1
  450. package/out-tsc/src/contacts/ContactPending.js.map +0 -1
  451. package/out-tsc/src/contacts/ContactStoreElement.js.map +0 -1
  452. package/out-tsc/src/contacts/ContactUrn.js.map +0 -1
  453. package/out-tsc/src/contacts/events.js +0 -65
  454. package/out-tsc/src/contacts/events.js.map +0 -1
  455. package/out-tsc/src/contacts/helpers.js +0 -77
  456. package/out-tsc/src/contacts/helpers.js.map +0 -1
  457. package/out-tsc/src/contactsearch/ContactSearch.js.map +0 -1
  458. package/out-tsc/src/date/TembaDate.js.map +0 -1
  459. package/out-tsc/src/datepicker/DatePicker.js.map +0 -1
  460. package/out-tsc/src/datepicker/RangePicker.js.map +0 -1
  461. package/out-tsc/src/dialog/Dialog.js.map +0 -1
  462. package/out-tsc/src/dropdown/Dropdown.js.map +0 -1
  463. package/out-tsc/src/fields/FieldManager.js.map +0 -1
  464. package/out-tsc/src/formfield/FormField.js.map +0 -1
  465. package/out-tsc/src/imagepicker/CroppieCSS.js.map +0 -1
  466. package/out-tsc/src/imagepicker/ImagePicker.js.map +0 -1
  467. package/out-tsc/src/label/Label.js.map +0 -1
  468. package/out-tsc/src/leafletmap/LeafletMap.js.map +0 -1
  469. package/out-tsc/src/leafletmap/helpers.js +0 -17
  470. package/out-tsc/src/leafletmap/helpers.js.map +0 -1
  471. package/out-tsc/src/lightbox/Lightbox.js.map +0 -1
  472. package/out-tsc/src/mask/Mask.js.map +0 -1
  473. package/out-tsc/src/mediapicker/MediaPicker.js.map +0 -1
  474. package/out-tsc/src/omnibox/Omnibox.js.map +0 -1
  475. package/out-tsc/src/options/helpers.js +0 -28
  476. package/out-tsc/src/options/helpers.js.map +0 -1
  477. package/out-tsc/src/progress/ProgressBar.js.map +0 -1
  478. package/out-tsc/src/progress/StartProgress.js.map +0 -1
  479. package/out-tsc/src/resizer/Resizer.js.map +0 -1
  480. package/out-tsc/src/select/PopupSelect.js.map +0 -1
  481. package/out-tsc/src/select/Select.js.map +0 -1
  482. package/out-tsc/src/select/UserSelect.js.map +0 -1
  483. package/out-tsc/src/select/WorkspaceSelect.js.map +0 -1
  484. package/out-tsc/src/select/helpers.js +0 -1
  485. package/out-tsc/src/select/helpers.js.map +0 -1
  486. package/out-tsc/src/shadowless/Shadowless.js +0 -33
  487. package/out-tsc/src/shadowless/Shadowless.js.map +0 -1
  488. package/out-tsc/src/slider/TembaSlider.js.map +0 -1
  489. package/out-tsc/src/sms/gsmsplitter.js.map +0 -1
  490. package/out-tsc/src/sms/gsmvalidator.js.map +0 -1
  491. package/out-tsc/src/sms/index.js.map +0 -1
  492. package/out-tsc/src/sms/unicodesplitter.js.map +0 -1
  493. package/out-tsc/src/tabpane/Tab.js.map +0 -1
  494. package/out-tsc/src/tabpane/TabPane.js.map +0 -1
  495. package/out-tsc/src/templates/TemplateEditor.js.map +0 -1
  496. package/out-tsc/src/textinput/TextInput.js.map +0 -1
  497. package/out-tsc/src/textinput/helpers.js +0 -12
  498. package/out-tsc/src/textinput/helpers.js.map +0 -1
  499. package/out-tsc/src/thumbnail/Thumbnail.js.map +0 -1
  500. package/out-tsc/src/tip/Tip.js.map +0 -1
  501. package/out-tsc/src/tip/helpers.js +0 -7
  502. package/out-tsc/src/tip/helpers.js.map +0 -1
  503. package/out-tsc/src/toast/Toast.js.map +0 -1
  504. package/out-tsc/src/user/TembaUser.js.map +0 -1
  505. package/out-tsc/src/utils/index.js.map +0 -1
  506. package/out-tsc/src/vectoricon/VectorIcon.js.map +0 -1
  507. package/out-tsc/src/vectoricon/index.js.map +0 -1
  508. package/src/charcount/helpers.ts +0 -162
  509. package/src/contacts/helpers.ts +0 -103
  510. package/src/leafletmap/helpers.ts +0 -18
  511. package/src/options/helpers.ts +0 -37
  512. package/src/select/helpers.ts +0 -0
  513. package/src/shadowless/Shadowless.ts +0 -32
  514. package/src/textinput/helpers.ts +0 -11
  515. package/src/tip/helpers.ts +0 -7
  516. /package/out-tsc/src/{alert → display}/Alert.js +0 -0
  517. /package/out-tsc/src/{anchor → display}/Anchor.js +0 -0
  518. /package/out-tsc/src/{button → display}/Button.js +0 -0
  519. /package/out-tsc/src/{chat → display}/Chat.js +0 -0
  520. /package/out-tsc/src/{contacts → display}/ContactName.js +0 -0
  521. /package/out-tsc/src/{contacts → display}/ContactUrn.js +0 -0
  522. /package/out-tsc/src/{dropdown → display}/Dropdown.js +0 -0
  523. /package/out-tsc/src/{label → display}/Label.js +0 -0
  524. /package/out-tsc/src/{lightbox → display}/Lightbox.js +0 -0
  525. /package/out-tsc/src/{loading → display}/Loading.js +0 -0
  526. /package/out-tsc/src/{options → display}/Options.js +0 -0
  527. /package/out-tsc/src/{progress → display}/ProgressBar.js +0 -0
  528. /package/out-tsc/src/{date → display}/TembaDate.js +0 -0
  529. /package/out-tsc/src/{user → display}/TembaUser.js +0 -0
  530. /package/out-tsc/src/{thumbnail → display}/Thumbnail.js +0 -0
  531. /package/out-tsc/src/{toast → display}/Toast.js +0 -0
  532. /package/out-tsc/src/{sms → display/sms}/gsmsplitter.js +0 -0
  533. /package/out-tsc/src/{sms → display/sms}/gsmvalidator.js +0 -0
  534. /package/out-tsc/src/{sms → display/sms}/index.js +0 -0
  535. /package/out-tsc/src/{sms → display/sms}/unicodesplitter.js +0 -0
  536. /package/out-tsc/src/{completion → excellent}/ExcellentParser.js +0 -0
  537. /package/out-tsc/src/{completion → excellent}/helpers.js +0 -0
  538. /package/out-tsc/src/{imagepicker → form}/CroppieCSS.js +0 -0
  539. /package/out-tsc/src/{formfield → form}/FormField.js +0 -0
  540. /package/out-tsc/src/{dialog → layout}/Dialog.js +0 -0
  541. /package/out-tsc/src/{mask → layout}/Mask.js +0 -0
  542. /package/out-tsc/src/{dialog → layout}/Modax.js +0 -0
  543. /package/out-tsc/src/{resizer → layout}/Resizer.js +0 -0
  544. /package/out-tsc/src/{tabpane → layout}/Tab.js +0 -0
  545. /package/out-tsc/src/{tabpane → layout}/TabPane.js +0 -0
  546. /package/out-tsc/src/{contacts → live}/ContactFields.js +0 -0
  547. /package/out-tsc/src/{contacts → live}/ContactNameFetch.js +0 -0
  548. /package/out-tsc/src/{contacts → live}/ContactStoreElement.js +0 -0
  549. /package/out-tsc/src/{fields → live}/FieldManager.js +0 -0
  550. /package/out-tsc/src/{progress → live}/StartProgress.js +0 -0
  551. /package/src/{vectoricon/index.ts → Icons.ts} +0 -0
  552. /package/src/{alert → display}/Alert.ts +0 -0
  553. /package/src/{anchor → display}/Anchor.ts +0 -0
  554. /package/src/{button → display}/Button.ts +0 -0
  555. /package/src/{chat → display}/Chat.ts +0 -0
  556. /package/src/{contacts → display}/ContactName.ts +0 -0
  557. /package/src/{contacts → display}/ContactUrn.ts +0 -0
  558. /package/src/{dropdown → display}/Dropdown.ts +0 -0
  559. /package/src/{label → display}/Label.ts +0 -0
  560. /package/src/{lightbox → display}/Lightbox.ts +0 -0
  561. /package/src/{loading → display}/Loading.ts +0 -0
  562. /package/src/{options → display}/Options.ts +0 -0
  563. /package/src/{progress → display}/ProgressBar.ts +0 -0
  564. /package/src/{date → display}/TembaDate.ts +0 -0
  565. /package/src/{user → display}/TembaUser.ts +0 -0
  566. /package/src/{toast → display}/Toast.ts +0 -0
  567. /package/src/{sms → display/sms}/gsmsplitter.ts +0 -0
  568. /package/src/{sms → display/sms}/gsmvalidator.ts +0 -0
  569. /package/src/{sms → display/sms}/index.ts +0 -0
  570. /package/src/{sms → display/sms}/unicodesplitter.ts +0 -0
  571. /package/src/{completion → excellent}/ExcellentParser.ts +0 -0
  572. /package/src/{completion → excellent}/helpers.ts +0 -0
  573. /package/src/{imagepicker → form}/CroppieCSS.ts +0 -0
  574. /package/src/{formfield → form}/FormField.ts +0 -0
  575. /package/src/{mask → layout}/Mask.ts +0 -0
  576. /package/src/{dialog → layout}/Modax.ts +0 -0
  577. /package/src/{resizer → layout}/Resizer.ts +0 -0
  578. /package/src/{tabpane → layout}/Tab.ts +0 -0
  579. /package/src/{tabpane → layout}/TabPane.ts +0 -0
  580. /package/src/{contacts → live}/ContactNameFetch.ts +0 -0
  581. /package/src/{contacts → live}/ContactStoreElement.ts +0 -0
  582. /package/src/{fields → live}/FieldManager.ts +0 -0
  583. /package/src/{progress → live}/StartProgress.ts +0 -0
@@ -0,0 +1,48 @@
1
+ import { assert } from '@open-wc/testing';
2
+ import { generateUUID } from '../src/utils';
3
+
4
+ describe('UUID Generation', () => {
5
+ it('generates a valid UUID v4 format', () => {
6
+ const uuid = generateUUID();
7
+
8
+ // Check that it's a string
9
+ assert.isString(uuid);
10
+
11
+ // Check UUID v4 format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
12
+ const uuidPattern =
13
+ /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
14
+ assert.match(uuid, uuidPattern, 'Should match UUID v4 format');
15
+
16
+ // Check length
17
+ assert.equal(uuid.length, 36);
18
+
19
+ // Check that it contains hyphens in the right places
20
+ assert.equal(uuid[8], '-');
21
+ assert.equal(uuid[13], '-');
22
+ assert.equal(uuid[18], '-');
23
+ assert.equal(uuid[23], '-');
24
+ });
25
+
26
+ it('generates unique UUIDs', () => {
27
+ const uuid1 = generateUUID();
28
+ const uuid2 = generateUUID();
29
+ const uuid3 = generateUUID();
30
+
31
+ // All should be different
32
+ assert.notEqual(uuid1, uuid2);
33
+ assert.notEqual(uuid2, uuid3);
34
+ assert.notEqual(uuid1, uuid3);
35
+ });
36
+
37
+ it('generates many unique UUIDs', () => {
38
+ const uuids = new Set();
39
+ const count = 1000;
40
+
41
+ for (let i = 0; i < count; i++) {
42
+ uuids.add(generateUUID());
43
+ }
44
+
45
+ // All should be unique
46
+ assert.equal(uuids.size, count, 'All generated UUIDs should be unique');
47
+ });
48
+ });
@@ -10,7 +10,6 @@ import {
10
10
  import { expect, assert } from '@open-wc/testing';
11
11
 
12
12
  let clock: any;
13
- mockNow('2021-03-31T00:31:00.000-00:00');
14
13
 
15
14
  const TAG = 'temba-webchat';
16
15
 
@@ -35,12 +34,11 @@ class MockWebSocket {
35
34
  this.url = url;
36
35
  // Only auto-open if enabled
37
36
  if (this.autoOpen) {
38
- setTimeout(() => {
39
- this.readyState = 1; // OPEN
40
- if (this.onopen) {
41
- this.onopen(new Event('open'));
42
- }
43
- }, 0);
37
+ // Use synchronous execution instead of setTimeout to avoid clock advancing issues
38
+ this.readyState = 1; // OPEN
39
+ if (this.onopen) {
40
+ this.onopen(new Event('open'));
41
+ }
44
42
  }
45
43
  }
46
44
 
@@ -85,8 +83,11 @@ describe('temba-webchat', () => {
85
83
  let mockWebSocket: MockWebSocket;
86
84
  let webSocketStub: SinonStub;
87
85
  let cookieStub: SinonStub;
86
+ let mockedNow: SinonStub;
88
87
 
89
88
  beforeEach(() => {
89
+ mockedNow = mockNow('2021-03-31T00:31:00.000-00:00');
90
+
90
91
  // Mock WebSocket
91
92
  originalWebSocket = window.WebSocket;
92
93
  webSocketStub = stub(window, 'WebSocket').callsFake((url: string) => {
@@ -98,13 +99,18 @@ describe('temba-webchat', () => {
98
99
  // Mock document.cookie
99
100
  cookieStub = stub(document, 'cookie').value('');
100
101
 
101
- clock = useFakeTimers();
102
+ // Use fake timers but with a shorter timeout to avoid test hanging
103
+ clock = useFakeTimers({
104
+ shouldAdvanceTime: true,
105
+ advanceTimeDelta: 10
106
+ });
102
107
  });
103
108
 
104
109
  afterEach(() => {
105
110
  clock.restore();
106
111
  webSocketStub.restore();
107
112
  cookieStub.restore();
113
+ mockedNow.restore();
108
114
  window.WebSocket = originalWebSocket;
109
115
  });
110
116
 
@@ -185,6 +191,7 @@ describe('temba-webchat', () => {
185
191
 
186
192
  await mouseClickElement(toggleElement);
187
193
  await webChat.updateComplete;
194
+ clock.tick(50);
188
195
 
189
196
  // Now it should be open and connecting
190
197
  expect(webChat.open).to.equal(true);
@@ -235,12 +242,14 @@ describe('temba-webchat', () => {
235
242
 
236
243
  await mouseClickElement(toggleElement);
237
244
  await webChat.updateComplete;
245
+ clock.tick(50);
238
246
 
239
247
  expect(webChat.open).to.equal(true);
240
248
 
241
249
  // Click toggle again
242
250
  await mouseClickElement(toggleElement);
243
251
  await webChat.updateComplete;
252
+ clock.tick(50);
244
253
 
245
254
  expect(webChat.open).to.equal(false);
246
255
  });
@@ -288,6 +297,7 @@ describe('temba-webchat', () => {
288
297
  // Open chat - this should trigger socket connection
289
298
  webChat.open = true;
290
299
  await webChat.updateComplete;
300
+ clock.tick(50);
291
301
 
292
302
  expect(webChat.status).to.equal('connecting');
293
303
  expect(webSocketStub.called).to.be.true;
@@ -296,6 +306,7 @@ describe('temba-webchat', () => {
296
306
  // Now simulate the socket opening
297
307
  mockWebSocket.manualOpen();
298
308
  await webChat.updateComplete;
309
+ clock.tick(50);
299
310
 
300
311
  expect(webChat.status).to.equal('connected');
301
312
  });
@@ -329,7 +340,7 @@ describe('temba-webchat', () => {
329
340
 
330
341
  webChat.open = true;
331
342
  await webChat.updateComplete;
332
- await clock.tick(0);
343
+ clock.tick(50);
333
344
 
334
345
  expect(mockWebSocket.url).to.equal(
335
346
  'wss://localhost.textit.com/wc/connect/my-channel/'
@@ -344,7 +355,7 @@ describe('temba-webchat', () => {
344
355
 
345
356
  webChat.open = true;
346
357
  await webChat.updateComplete;
347
- await clock.tick(0);
358
+ clock.tick(50);
348
359
 
349
360
  expect(mockWebSocket.url).to.equal(
350
361
  'wss://localhost.textit.com/wc/connect/my-channel/?chat_id=chat-123'
@@ -358,9 +369,13 @@ describe('temba-webchat', () => {
358
369
 
359
370
  webChat.open = true;
360
371
  await webChat.updateComplete;
361
- await clock.tick(0);
362
372
 
363
- expect(mockWebSocket.sentMessages).to.have.length(1);
373
+ // Manually open the socket to trigger the start_chat command
374
+ mockWebSocket.manualOpen();
375
+ await webChat.updateComplete;
376
+ clock.tick(100);
377
+
378
+ expect(mockWebSocket.sentMessages.length).to.be.at.least(1);
364
379
  const sentMessage = JSON.parse(mockWebSocket.sentMessages[0]);
365
380
  expect(sentMessage.type).to.equal('start_chat');
366
381
  });
@@ -379,6 +394,7 @@ describe('temba-webchat', () => {
379
394
 
380
395
  mockWebSocket.manualOpen();
381
396
  await webChat.updateComplete;
397
+ clock.tick(50);
382
398
 
383
399
  const sentMessage = JSON.parse(mockWebSocket.sentMessages[0]);
384
400
  expect(sentMessage.type).to.equal('start_chat');
@@ -393,11 +409,13 @@ describe('temba-webchat', () => {
393
409
 
394
410
  webChat.open = true;
395
411
  await webChat.updateComplete;
412
+ clock.tick(50);
396
413
 
397
414
  expect(webChat.status).to.equal('connecting');
398
415
 
399
416
  mockWebSocket.close();
400
417
  await webChat.updateComplete;
418
+ clock.tick(50);
401
419
 
402
420
  expect(webChat.status).to.equal('disconnected');
403
421
  });
@@ -10,11 +10,11 @@ interface Clip {
10
10
  import { expect, fixture, html, assert, waitUntil } from '@open-wc/testing';
11
11
  import MouseHelper from './MouseHelper';
12
12
  import { Store } from '../src/store/Store';
13
- import { replace, stub } from 'sinon';
14
- import { Select, SelectOption } from '../src/select/Select';
15
- import { Options } from '../src/options/Options';
13
+ import { stub } from 'sinon';
14
+ import { Select, SelectOption } from '../src/form/select/Select';
15
+ import { Options } from '../src/display/Options';
16
16
  import { Attachment } from '../src/interfaces';
17
- import { Compose } from '../src/compose/Compose';
17
+ import { Compose } from '../src/form/Compose';
18
18
 
19
19
  export interface CodeMock {
20
20
  endpoint: RegExp;
@@ -297,11 +297,7 @@ export const loadStore = async () => {
297
297
  };
298
298
 
299
299
  export const mockNow = (isodate: string) => {
300
- const now = DateTime.fromISO(isodate);
301
- // mock the current time
302
- replace(DateTime, 'now', () => {
303
- return now;
304
- });
300
+ return stub(DateTime, 'now').returns(DateTime.fromISO(isodate));
305
301
  };
306
302
 
307
303
  export const getOptions = (select: Select<SelectOption>): Options => {
@@ -30,7 +30,7 @@ export default {
30
30
  path.resolve(`./demo/data/flows/${uuid}.json`),
31
31
  JSON.stringify({ definition: JSON.parse(body) }, null, 2)
32
32
  );
33
- console.log(`Flow ${uuid} saved successfully.`);
33
+ // console.log(`Flow ${uuid} saved successfully.`);
34
34
  context.body = {
35
35
  status: 'success',
36
36
  message: `Flow ${uuid} saved successfully.`,
@@ -1,65 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title>Alert Examples</title>
6
- <link
7
- href="/static/css/temba-components.css"
8
- rel="stylesheet"
9
- type="text/css"
10
- />
11
- <link
12
- href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
- rel="stylesheet"
14
- />
15
- <link
16
- href="../styles.css"
17
- rel="stylesheet"
18
- type="text/css"
19
- />
20
- </head>
21
- <body>
22
- <h1>Alert Examples</h1>
23
- <p><a href="../index.html">← Back to main demo</a></p>
24
-
25
- <div class="example">
26
- <h3>Basic Alert</h3>
27
- <p>A simple alert component</p>
28
- <temba-alert>This is a basic alert message.</temba-alert>
29
- </div>
30
-
31
- <div class="example">
32
- <h3>Success Alert</h3>
33
- <p>An alert for successful actions</p>
34
- <temba-alert level="success">Your changes have been saved successfully!</temba-alert>
35
- </div>
36
-
37
- <div class="example">
38
- <h3>Warning Alert</h3>
39
- <p>An alert for warning messages</p>
40
- <temba-alert level="warning">Please review your input before proceeding.</temba-alert>
41
- </div>
42
-
43
- <div class="example">
44
- <h3>Error Alert</h3>
45
- <p>An alert for error messages</p>
46
- <temba-alert level="error">An error occurred while processing your request.</temba-alert>
47
- </div>
48
-
49
- <div class="example">
50
- <h3>Info Alert</h3>
51
- <p>An alert for informational messages</p>
52
- <temba-alert level="info">This feature is currently in beta testing.</temba-alert>
53
- </div>
54
-
55
- <div class="example">
56
- <h3>Dismissible Alert</h3>
57
- <p>An alert that can be closed</p>
58
- <temba-alert dismissible>This alert can be dismissed by clicking the X button.</temba-alert>
59
- </div>
60
-
61
- <script type="module">
62
- import '../../out-tsc/temba-modules.js';
63
- </script>
64
- </body>
65
- </html>
@@ -1,71 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title>Button Examples</title>
6
- <link
7
- href="/static/css/temba-components.css"
8
- rel="stylesheet"
9
- type="text/css"
10
- />
11
- <link
12
- href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
- rel="stylesheet"
14
- />
15
- <link href="../styles.css" rel="stylesheet" type="text/css" />
16
- </head>
17
- <body>
18
- <h1>Button Examples</h1>
19
- <p><a href="../index.html">← Back to main demo</a></p>
20
-
21
- <div class="example">
22
- <h3>Basic Button</h3>
23
- <p>A simple button component</p>
24
- <temba-button name="Click Me"></temba-button>
25
- </div>
26
-
27
- <div class="example">
28
- <h3>Primary Button</h3>
29
- <p>A primary styled button</p>
30
- <temba-button primary name="Primary Action"></temba-button>
31
- </div>
32
-
33
- <div class="example">
34
- <h3>Secondary Button</h3>
35
- <p>A secondary styled button</p>
36
- <temba-button secondary name="Secondary Action"></temba-button>
37
- </div>
38
-
39
- <div class="example">
40
- <h3>Small Button</h3>
41
- <p>A smaller button variant</p>
42
- <temba-button small name="Small Button"></temba-button>
43
- </div>
44
-
45
- <div class="example">
46
- <h3>Disabled Button</h3>
47
- <p>A button that cannot be clicked</p>
48
- <temba-button disabled name="Disabled Button"></temba-button>
49
- </div>
50
-
51
- <div class="example">
52
- <h3>Multiple Buttons</h3>
53
- <p>Several buttons in a row with proper constraints</p>
54
- <div style="display: flex; gap: 10px; flex-wrap: wrap; max-width: 400px">
55
- <div style="flex: 0 0 auto; max-width: 100px">
56
- <temba-button name="Save"></temba-button>
57
- </div>
58
- <div style="flex: 0 0 auto; max-width: 100px">
59
- <temba-button secondary name="Cancel"></temba-button>
60
- </div>
61
- <div style="flex: 0 0 auto; max-width: 100px">
62
- <temba-button primary name="Submit"></temba-button>
63
- </div>
64
- </div>
65
- </div>
66
-
67
- <script type="module">
68
- import '../../out-tsc/temba-modules.js';
69
- </script>
70
- </body>
71
- </html>
@@ -1,81 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Horizontal Chart Demo</title>
7
-
8
- <link rel="stylesheet" href="../styles.css" />
9
- </head>
10
- <body>
11
- <div class="demo-container">
12
- <h1>Horizontal Bar Chart Demo</h1>
13
-
14
- <div class="demo-section">
15
- <h2>Regular Vertical Bar Chart</h2>
16
- <temba-chart
17
- type="bar"
18
- header="Monthly Sales (Vertical)"
19
- style="height: 300px; display: block"
20
- ></temba-chart>
21
- </div>
22
-
23
- <div class="demo-section">
24
- <h2>Horizontal Bar Chart</h2>
25
- <temba-chart
26
- type="bar"
27
- horizontal
28
- header="Monthly Sales (Horizontal)"
29
- style="height: 300px; display: block"
30
- ></temba-chart>
31
- </div>
32
-
33
- <div class="demo-section">
34
- <h2>Horizontal Bar Chart with Percentages</h2>
35
- <temba-chart
36
- type="bar"
37
- horizontal
38
- percent
39
- header="Monthly Sales with Percentages (Horizontal)"
40
- style="height: 300px; display: block"
41
- ></temba-chart>
42
- </div>
43
- </div>
44
-
45
- <script>
46
- // Sample data for the charts
47
- const sampleData = {
48
- labels: ['January', 'February', 'March', 'April', 'May', 'June'],
49
- datasets: [
50
- {
51
- label: 'Product A',
52
- data: [65, 59, 80, 81, 56, 55],
53
- backgroundColor: 'rgba(54, 162, 235, 0.6)',
54
- borderColor: 'rgba(54, 162, 235, 1)',
55
- borderWidth: 1
56
- },
57
- {
58
- label: 'Product B',
59
- data: [28, 48, 40, 19, 86, 27],
60
- backgroundColor: 'rgba(255, 99, 132, 0.6)',
61
- borderColor: 'rgba(255, 99, 132, 1)',
62
- borderWidth: 1
63
- }
64
- ]
65
- };
66
-
67
- // Wait for the DOM to be ready and charts to be defined
68
- document.addEventListener('DOMContentLoaded', () => {
69
- setTimeout(() => {
70
- const charts = document.querySelectorAll('temba-chart');
71
- charts.forEach((chart) => {
72
- chart.data = sampleData;
73
- });
74
- }, 100);
75
- });
76
- </script>
77
- <script type="module">
78
- import '../../out-tsc/temba-modules.js';
79
- </script>
80
- </body>
81
- </html>
@@ -1,72 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title>Checkbox Examples</title>
6
- <link
7
- href="/static/css/temba-components.css"
8
- rel="stylesheet"
9
- type="text/css"
10
- />
11
- <link
12
- href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
- rel="stylesheet"
14
- />
15
- <link
16
- href="../styles.css"
17
- rel="stylesheet"
18
- type="text/css"
19
- />
20
- </head>
21
- <body>
22
- <h1>Checkbox Examples</h1>
23
- <p><a href="../index.html">← Back to main demo</a></p>
24
-
25
- <div class="example">
26
- <h3>Basic Checkbox</h3>
27
- <p>A simple checkbox component</p>
28
- <temba-checkbox label="Check this out" checked></temba-checkbox>
29
- </div>
30
-
31
- <div class="example">
32
- <h3>Unchecked Checkbox</h3>
33
- <p>A checkbox that starts unchecked</p>
34
- <temba-checkbox label="This is not checked"></temba-checkbox>
35
- </div>
36
-
37
- <div class="example">
38
- <h3>Checkbox with Help Text</h3>
39
- <p>A checkbox with additional help text</p>
40
- <temba-checkbox
41
- name="schedule"
42
- label="Schedule for later delivery"
43
- help_text="This is something you should think long and hard about"
44
- ></temba-checkbox>
45
- </div>
46
-
47
- <div class="example">
48
- <h3>Disabled Checkbox</h3>
49
- <p>A checkbox that cannot be changed</p>
50
- <temba-checkbox
51
- name="disabled"
52
- label="You can't check this one"
53
- help_text="It is disabled, don't click it"
54
- disabled
55
- ></temba-checkbox>
56
- </div>
57
-
58
- <div class="example">
59
- <h3>Multiple Checkboxes</h3>
60
- <p>Several checkboxes in a row</p>
61
- <div style="display: flex; flex-wrap: wrap; gap: 20px;">
62
- <temba-checkbox label="Option 1" checked></temba-checkbox>
63
- <temba-checkbox label="Option 2"></temba-checkbox>
64
- <temba-checkbox label="Option 3" checked></temba-checkbox>
65
- </div>
66
- </div>
67
-
68
- <script type="module">
69
- import '../../out-tsc/temba-modules.js';
70
- </script>
71
- </body>
72
- </html>
@@ -1,72 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en-GB">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title>Compose Examples</title>
6
- <link
7
- href="/static/css/temba-components.css"
8
- rel="stylesheet"
9
- type="text/css"
10
- />
11
- <link
12
- href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
13
- rel="stylesheet"
14
- />
15
- <link
16
- href="../styles.css"
17
- rel="stylesheet"
18
- type="text/css"
19
- />
20
- </head>
21
- <body>
22
- <h1>Compose Examples</h1>
23
- <p><a href="../index.html">← Back to main demo</a></p>
24
-
25
- <div class="example">
26
- <h3>Basic Compose</h3>
27
- <p>A simple compose component for text input</p>
28
- <temba-compose placeholder="Type your message here..."></temba-compose>
29
- </div>
30
-
31
- <div class="example">
32
- <h3>Compose with Counter</h3>
33
- <p>A compose component with character counting</p>
34
- <temba-compose
35
- placeholder="Enter your message (max 160 characters)..."
36
- counter
37
- maxlength="160">
38
- </temba-compose>
39
- </div>
40
-
41
- <div class="example">
42
- <h3>Compose with Attachments</h3>
43
- <p>A compose component that supports file attachments</p>
44
- <temba-compose
45
- placeholder="Write your message and attach files..."
46
- attachments>
47
- </temba-compose>
48
- </div>
49
-
50
- <div class="example">
51
- <h3>Rich Text Compose</h3>
52
- <p>A compose component with rich text formatting</p>
53
- <temba-compose
54
- placeholder="Format your text with rich editing..."
55
- rich-text>
56
- </temba-compose>
57
- </div>
58
-
59
- <div class="example">
60
- <h3>Multi-line Compose</h3>
61
- <p>A compose component with multiple lines</p>
62
- <temba-compose
63
- placeholder="Enter a longer message..."
64
- rows="4">
65
- </temba-compose>
66
- </div>
67
-
68
- <script type="module">
69
- import '../../out-tsc/temba-modules.js';
70
- </script>
71
- </body>
72
- </html>