@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.
- package/.github/workflows/build.yml +6 -5
- package/.github/workflows/coverage.yml +80 -0
- package/CHANGELOG.md +32 -0
- package/README.md +6 -0
- package/check-coverage.js +133 -0
- package/demo/components/alert/example.html +71 -0
- package/demo/components/button/example.html +167 -0
- package/demo/{chart → components/chart}/example.html +3 -3
- package/demo/components/chart/horizontal-demo.html +160 -0
- package/demo/components/checkbox/example.html +68 -0
- package/demo/components/compose/example.html +69 -0
- package/demo/components/datepicker/example.html +3 -3
- package/demo/components/datepicker/range-picker-demo.html +2 -2
- package/demo/{dialog → components/dialog}/example.html +3 -3
- package/demo/components/dropdown/example.html +95 -0
- package/demo/{flow → components/flow}/example.html +1 -1
- package/demo/{misc → components/misc}/example.html +3 -3
- package/demo/components/progress/example.html +62 -0
- package/demo/components/select/drag-and-drop.html +162 -0
- package/demo/components/select/example.html +76 -0
- package/demo/components/select/multi.html +72 -0
- package/demo/components/slider/example.html +55 -0
- package/demo/{sortable-list → components/sortable-list}/example.html +3 -3
- package/demo/components/tabs/example.html +91 -0
- package/demo/{textinput → components/textinput}/completion.html +3 -3
- package/demo/components/textinput/example.html +141 -0
- package/demo/{webchat → components/webchat}/example.html +3 -3
- package/demo/data/flows/sample-flow.json +107 -100
- package/demo/index.html +21 -21
- package/demo/static/css/styles.css +253 -0
- package/demo/sticky-note-demo.html +88 -85
- package/demo/styles.css +24 -0
- package/dist/locales/es.js +5 -5
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fr.js +5 -5
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/locale-codes.js +2 -11
- package/dist/locales/locale-codes.js.map +1 -1
- package/dist/locales/pt.js +5 -5
- package/dist/locales/pt.js.map +1 -1
- package/dist/temba-components.js +893 -476
- package/dist/temba-components.js.map +1 -1
- package/generate-coverage-badge.sh +69 -0
- package/out-tsc/src/{vectoricon/index.js → Icons.js} +1 -1
- package/out-tsc/src/Icons.js.map +1 -0
- package/out-tsc/src/display/Alert.js.map +1 -0
- package/out-tsc/src/display/Anchor.js.map +1 -0
- package/out-tsc/src/display/Button.js.map +1 -0
- package/out-tsc/src/{charcount → display}/CharCount.js +159 -2
- package/out-tsc/src/display/CharCount.js.map +1 -0
- package/out-tsc/src/display/Chat.js.map +1 -0
- package/out-tsc/src/display/ContactName.js.map +1 -0
- package/out-tsc/src/display/ContactUrn.js.map +1 -0
- package/out-tsc/src/display/Dropdown.js.map +1 -0
- package/out-tsc/src/{vectoricon/VectorIcon.js → display/Icon.js} +2 -2
- package/out-tsc/src/display/Icon.js.map +1 -0
- package/out-tsc/src/display/Label.js.map +1 -0
- package/out-tsc/src/{leafletmap → display}/LeafletMap.js +16 -1
- package/out-tsc/src/display/LeafletMap.js.map +1 -0
- package/out-tsc/src/display/Lightbox.js.map +1 -0
- package/out-tsc/src/{loading → display}/Loading.js.map +1 -1
- package/out-tsc/src/{options → display}/Options.js.map +1 -1
- package/out-tsc/src/display/ProgressBar.js.map +1 -0
- package/out-tsc/src/display/TembaDate.js.map +1 -0
- package/out-tsc/src/display/TembaUser.js.map +1 -0
- package/out-tsc/src/display/Thumbnail.js.map +1 -0
- package/out-tsc/src/{tip → display}/Tip.js +1 -2
- package/out-tsc/src/display/Tip.js.map +1 -0
- package/out-tsc/src/display/Toast.js.map +1 -0
- package/out-tsc/src/display/sms/gsmsplitter.js.map +1 -0
- package/out-tsc/src/display/sms/gsmvalidator.js.map +1 -0
- package/out-tsc/src/display/sms/index.js.map +1 -0
- package/out-tsc/src/display/sms/unicodesplitter.js.map +1 -0
- package/out-tsc/src/events.js +2 -0
- package/out-tsc/src/events.js.map +1 -0
- package/out-tsc/src/excellent/ExcellentParser.js.map +1 -0
- package/out-tsc/src/excellent/helpers.js.map +1 -0
- package/out-tsc/src/flow/Editor.js +533 -140
- package/out-tsc/src/flow/Editor.js.map +1 -1
- package/out-tsc/src/flow/EditorNode.js +287 -20
- package/out-tsc/src/flow/EditorNode.js.map +1 -1
- package/out-tsc/src/flow/Plumber.js +154 -74
- package/out-tsc/src/flow/Plumber.js.map +1 -1
- package/out-tsc/src/flow/StickyNote.js +153 -9
- package/out-tsc/src/flow/StickyNote.js.map +1 -1
- package/out-tsc/src/flow/config.js +88 -18
- package/out-tsc/src/flow/config.js.map +1 -1
- package/out-tsc/src/flow/render.js +327 -10
- package/out-tsc/src/flow/render.js.map +1 -1
- package/out-tsc/src/{checkbox → form}/Checkbox.js +2 -2
- package/out-tsc/src/form/Checkbox.js.map +1 -0
- package/out-tsc/src/{colorpicker → form}/ColorPicker.js +1 -1
- package/out-tsc/src/form/ColorPicker.js.map +1 -0
- package/out-tsc/src/{completion → form}/Completion.js +2 -2
- package/out-tsc/src/form/Completion.js.map +1 -0
- package/out-tsc/src/{compose → form}/Compose.js +1 -1
- package/out-tsc/src/form/Compose.js.map +1 -0
- package/out-tsc/src/{contactsearch → form}/ContactSearch.js +2 -2
- package/out-tsc/src/form/ContactSearch.js.map +1 -0
- package/out-tsc/src/form/CroppieCSS.js.map +1 -0
- package/out-tsc/src/{datepicker → form}/DatePicker.js +1 -1
- package/out-tsc/src/form/DatePicker.js.map +1 -0
- package/out-tsc/src/{FormElement.js → form/FormElement.js} +1 -1
- package/out-tsc/src/form/FormElement.js.map +1 -0
- package/out-tsc/src/form/FormField.js.map +1 -0
- package/out-tsc/src/{imagepicker → form}/ImagePicker.js +2 -2
- package/out-tsc/src/form/ImagePicker.js.map +1 -0
- package/out-tsc/src/{mediapicker → form}/MediaPicker.js +1 -1
- package/out-tsc/src/form/MediaPicker.js.map +1 -0
- package/out-tsc/src/{datepicker → form}/RangePicker.js +3 -2
- package/out-tsc/src/form/RangePicker.js.map +1 -0
- package/out-tsc/src/{slider → form}/TembaSlider.js +1 -1
- package/out-tsc/src/form/TembaSlider.js.map +1 -0
- package/out-tsc/src/{templates → form}/TemplateEditor.js +1 -1
- package/out-tsc/src/form/TemplateEditor.js.map +1 -0
- package/out-tsc/src/{textinput → form}/TextInput.js +3 -3
- package/out-tsc/src/form/TextInput.js.map +1 -0
- package/out-tsc/src/{omnibox → form/select}/Omnibox.js +2 -2
- package/out-tsc/src/form/select/Omnibox.js.map +1 -0
- package/out-tsc/src/{select → form/select}/PopupSelect.js +1 -1
- package/out-tsc/src/form/select/PopupSelect.js.map +1 -0
- package/out-tsc/src/{select → form/select}/Select.js +86 -87
- package/out-tsc/src/form/select/Select.js.map +1 -0
- package/out-tsc/src/{select → form/select}/UserSelect.js +1 -1
- package/out-tsc/src/form/select/UserSelect.js.map +1 -0
- package/out-tsc/src/{select → form/select}/WorkspaceSelect.js +1 -1
- package/out-tsc/src/form/select/WorkspaceSelect.js.map +1 -0
- package/out-tsc/src/interfaces.js +1 -0
- package/out-tsc/src/interfaces.js.map +1 -1
- package/out-tsc/src/layout/Dialog.js.map +1 -0
- package/out-tsc/src/layout/Mask.js.map +1 -0
- package/out-tsc/src/{dialog → layout}/Modax.js.map +1 -1
- package/out-tsc/src/layout/Resizer.js.map +1 -0
- package/out-tsc/src/layout/Tab.js.map +1 -0
- package/out-tsc/src/layout/TabPane.js.map +1 -0
- package/out-tsc/src/list/NotificationList.js +1 -1
- package/out-tsc/src/list/NotificationList.js.map +1 -1
- package/out-tsc/src/list/RunList.js +1 -1
- package/out-tsc/src/list/RunList.js.map +1 -1
- package/out-tsc/src/list/ShortcutList.js.map +1 -1
- package/out-tsc/src/list/TembaMenu.js +1 -1
- package/out-tsc/src/list/TembaMenu.js.map +1 -1
- package/out-tsc/src/list/TicketList.js +1 -1
- package/out-tsc/src/list/TicketList.js.map +1 -1
- package/out-tsc/src/{aliaseditor → live}/AliasEditor.js +1 -1
- package/out-tsc/src/live/AliasEditor.js.map +1 -0
- package/out-tsc/src/{contacts → live}/ContactBadges.js +1 -1
- package/out-tsc/src/live/ContactBadges.js.map +1 -0
- package/out-tsc/src/{contacts → live}/ContactChat.js +79 -3
- package/out-tsc/src/live/ContactChat.js.map +1 -0
- package/out-tsc/src/{contacts → live}/ContactDetails.js +1 -1
- package/out-tsc/src/live/ContactDetails.js.map +1 -0
- package/out-tsc/src/{contacts → live}/ContactFieldEditor.js +2 -2
- package/out-tsc/src/live/ContactFieldEditor.js.map +1 -0
- package/out-tsc/src/live/ContactFields.js.map +1 -0
- package/out-tsc/src/live/ContactNameFetch.js.map +1 -0
- package/out-tsc/src/{contacts → live}/ContactNotepad.js +1 -1
- package/out-tsc/src/{contacts → live}/ContactNotepad.js.map +1 -1
- package/out-tsc/src/{contacts → live}/ContactPending.js +1 -1
- package/out-tsc/src/live/ContactPending.js.map +1 -0
- package/out-tsc/src/live/ContactStoreElement.js.map +1 -0
- package/out-tsc/src/live/FieldManager.js.map +1 -0
- package/out-tsc/src/live/StartProgress.js.map +1 -0
- package/out-tsc/src/{chart → live}/TembaChart.js +5 -1
- package/out-tsc/src/live/TembaChart.js.map +1 -0
- package/out-tsc/src/locales/es.js +5 -5
- package/out-tsc/src/locales/es.js.map +1 -1
- package/out-tsc/src/locales/fr.js +5 -5
- package/out-tsc/src/locales/fr.js.map +1 -1
- package/out-tsc/src/locales/locale-codes.js +2 -11
- package/out-tsc/src/locales/locale-codes.js.map +1 -1
- package/out-tsc/src/locales/pt.js +5 -5
- package/out-tsc/src/locales/pt.js.map +1 -1
- package/out-tsc/src/store/AppState.js +54 -24
- package/out-tsc/src/store/AppState.js.map +1 -1
- package/out-tsc/src/store/Store.js +1 -1
- package/out-tsc/src/store/Store.js.map +1 -1
- package/out-tsc/src/{utils/index.js → utils.js} +22 -1
- package/out-tsc/src/utils.js.map +1 -0
- package/out-tsc/src/webchat/WebChat.js +1 -1
- package/out-tsc/src/webchat/WebChat.js.map +1 -1
- package/out-tsc/temba-components.js +2 -2
- package/out-tsc/temba-components.js.map +1 -1
- package/out-tsc/temba-modules.js +54 -54
- package/out-tsc/temba-modules.js.map +1 -1
- package/out-tsc/temba-webchat.js +2 -2
- package/out-tsc/temba-webchat.js.map +1 -1
- package/out-tsc/test/temba-alert.test.js +1 -1
- package/out-tsc/test/temba-alert.test.js.map +1 -1
- package/out-tsc/test/temba-appstate-language.test.js +90 -0
- package/out-tsc/test/temba-appstate-language.test.js.map +1 -1
- package/out-tsc/test/temba-charcount.test.js.map +1 -1
- package/out-tsc/test/temba-chart.test.js +1 -1
- package/out-tsc/test/temba-chart.test.js.map +1 -1
- package/out-tsc/test/temba-checkbox.test.js.map +1 -1
- package/out-tsc/test/temba-color-picker.test.js +1 -1
- package/out-tsc/test/temba-color-picker.test.js.map +1 -1
- package/out-tsc/test/temba-completion.test.js +1 -1
- package/out-tsc/test/temba-completion.test.js.map +1 -1
- package/out-tsc/test/temba-compose.test.js +1 -1
- package/out-tsc/test/temba-compose.test.js.map +1 -1
- package/out-tsc/test/temba-contact-badges.test.js +1 -1
- package/out-tsc/test/temba-contact-badges.test.js.map +1 -1
- package/out-tsc/test/temba-contact-chat.test.js +3 -1
- package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
- package/out-tsc/test/temba-contact-details.test.js +1 -1
- package/out-tsc/test/temba-contact-details.test.js.map +1 -1
- package/out-tsc/test/temba-contact-fields.test.js +1 -1
- package/out-tsc/test/temba-contact-fields.test.js.map +1 -1
- package/out-tsc/test/temba-contact-search.test.js +1 -1
- package/out-tsc/test/temba-contact-search.test.js.map +1 -1
- package/out-tsc/test/temba-date.test.js +5 -1
- package/out-tsc/test/temba-date.test.js.map +1 -1
- package/out-tsc/test/temba-datepicker.test.js +1 -1
- package/out-tsc/test/temba-datepicker.test.js.map +1 -1
- package/out-tsc/test/temba-dialog.test.js +1 -1
- package/out-tsc/test/temba-dialog.test.js.map +1 -1
- package/out-tsc/test/temba-dropdown.test.js +1 -1
- package/out-tsc/test/temba-dropdown.test.js.map +1 -1
- package/out-tsc/test/temba-excellent-helpers.test.js +316 -0
- package/out-tsc/test/temba-excellent-helpers.test.js.map +1 -0
- package/out-tsc/test/temba-field-manager.test.js.map +1 -1
- package/out-tsc/test/temba-flow-editor-node.test.js +414 -1
- package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -1
- package/out-tsc/test/temba-flow-editor.test.js +185 -0
- package/out-tsc/test/temba-flow-editor.test.js.map +1 -1
- package/out-tsc/test/temba-flow-plumber-connections.test.js +113 -0
- package/out-tsc/test/temba-flow-plumber-connections.test.js.map +1 -0
- package/out-tsc/test/temba-flow-plumber.test.js +73 -93
- package/out-tsc/test/temba-flow-plumber.test.js.map +1 -1
- package/out-tsc/test/temba-flow-render.test.js +624 -1
- package/out-tsc/test/temba-flow-render.test.js.map +1 -1
- package/out-tsc/test/temba-flow-self-routing.test.js +172 -0
- package/out-tsc/test/temba-flow-self-routing.test.js.map +1 -0
- package/out-tsc/test/temba-formfield.test.js.map +1 -1
- package/out-tsc/test/temba-icon.test.js +1 -1
- package/out-tsc/test/temba-icon.test.js.map +1 -1
- package/out-tsc/test/temba-integration-markdown.test.js.map +1 -1
- package/out-tsc/test/temba-label.test.js +1 -1
- package/out-tsc/test/temba-label.test.js.map +1 -1
- package/out-tsc/test/temba-lightbox.test.js +1 -1
- package/out-tsc/test/temba-lightbox.test.js.map +1 -1
- package/out-tsc/test/temba-markdown.test.js +127 -0
- package/out-tsc/test/temba-markdown.test.js.map +1 -0
- package/out-tsc/test/temba-menu.test.js +1 -1
- package/out-tsc/test/temba-menu.test.js.map +1 -1
- package/out-tsc/test/temba-modax.test.js +1 -1
- package/out-tsc/test/temba-modax.test.js.map +1 -1
- package/out-tsc/test/temba-modules.test.js +47 -0
- package/out-tsc/test/temba-modules.test.js.map +1 -0
- package/out-tsc/test/temba-omnibox.test.js +1 -1
- package/out-tsc/test/temba-omnibox.test.js.map +1 -1
- package/out-tsc/test/temba-options.test.js.map +1 -1
- package/out-tsc/test/temba-range-picker.test.js +9 -2
- package/out-tsc/test/temba-range-picker.test.js.map +1 -1
- package/out-tsc/test/temba-rapid-element.test.js +273 -0
- package/out-tsc/test/temba-rapid-element.test.js.map +1 -0
- package/out-tsc/test/temba-resize-element.test.js +85 -0
- package/out-tsc/test/temba-resize-element.test.js.map +1 -0
- package/out-tsc/test/temba-select.test.js +2 -2
- package/out-tsc/test/temba-select.test.js.map +1 -1
- package/out-tsc/test/temba-slider.test.js.map +1 -1
- package/out-tsc/test/temba-sticky-note.test.js +194 -0
- package/out-tsc/test/temba-sticky-note.test.js.map +1 -0
- package/out-tsc/test/temba-template-editor.test.js.map +1 -1
- package/out-tsc/test/temba-textinput.test.js +1 -1
- package/out-tsc/test/temba-textinput.test.js.map +1 -1
- package/out-tsc/test/temba-tip.test.js +1 -1
- package/out-tsc/test/temba-tip.test.js.map +1 -1
- package/out-tsc/test/temba-toast.test.js +1 -1
- package/out-tsc/test/temba-toast.test.js.map +1 -1
- package/out-tsc/test/temba-utils-index.test.js +1 -1
- package/out-tsc/test/temba-utils-index.test.js.map +1 -1
- package/out-tsc/test/temba-utils-uuid.test.js +38 -0
- package/out-tsc/test/temba-utils-uuid.test.js.map +1 -0
- package/out-tsc/test/temba-webchat.test.js +28 -12
- package/out-tsc/test/temba-webchat.test.js.map +1 -1
- package/out-tsc/test/utils.test.js +2 -6
- package/out-tsc/test/utils.test.js.map +1 -1
- package/package.json +18 -9
- package/rollup.components.mjs +1 -1
- package/screenshots/truth/datepicker/range-picker-all.png +0 -0
- package/screenshots/truth/datepicker/range-picker-button-states.png +0 -0
- package/screenshots/truth/datepicker/range-picker-default.png +0 -0
- package/screenshots/truth/datepicker/range-picker-editing-start.png +0 -0
- package/screenshots/truth/datepicker/range-picker-initial-values.png +0 -0
- package/screenshots/truth/datepicker/range-picker-week.png +0 -0
- package/screenshots/truth/datepicker/range-picker-year.png +0 -0
- package/screenshots/truth/sticky-note/blue-color.png +0 -0
- package/screenshots/truth/sticky-note/blue.png +0 -0
- package/screenshots/truth/sticky-note/color-picker-expanded.png +0 -0
- package/screenshots/truth/sticky-note/default.png +0 -0
- package/screenshots/truth/sticky-note/gray-color.png +0 -0
- package/screenshots/truth/sticky-note/gray.png +0 -0
- package/screenshots/truth/sticky-note/green-color.png +0 -0
- package/screenshots/truth/sticky-note/green.png +0 -0
- package/screenshots/truth/sticky-note/pink-color.png +0 -0
- package/screenshots/truth/sticky-note/pink.png +0 -0
- package/screenshots/truth/sticky-note/yellow-color.png +0 -0
- package/screenshots/truth/sticky-note/yellow.png +0 -0
- package/src/{charcount → display}/CharCount.ts +164 -2
- package/src/{vectoricon/VectorIcon.ts → display/Icon.ts} +1 -1
- package/src/{leafletmap → display}/LeafletMap.ts +19 -1
- package/src/{thumbnail → display}/Thumbnail.ts +1 -1
- package/src/{tip → display}/Tip.ts +1 -2
- package/src/{contacts/events.ts → events.ts} +1 -64
- package/src/flow/Editor.ts +655 -165
- package/src/flow/EditorNode.ts +337 -22
- package/src/flow/Plumber.ts +186 -79
- package/src/flow/StickyNote.ts +165 -9
- package/src/flow/config.ts +114 -18
- package/src/flow/render.ts +398 -11
- package/src/{checkbox → form}/Checkbox.ts +2 -2
- package/src/{colorpicker → form}/ColorPicker.ts +2 -2
- package/src/{completion → form}/Completion.ts +3 -3
- package/src/{compose → form}/Compose.ts +7 -7
- package/src/{contactsearch → form}/ContactSearch.ts +6 -6
- package/src/{datepicker → form}/DatePicker.ts +1 -1
- package/src/{FormElement.ts → form/FormElement.ts} +1 -1
- package/src/{imagepicker → form}/ImagePicker.ts +2 -2
- package/src/{mediapicker → form}/MediaPicker.ts +1 -1
- package/src/{datepicker → form}/RangePicker.ts +3 -2
- package/src/{slider → form}/TembaSlider.ts +1 -1
- package/src/{templates → form}/TemplateEditor.ts +2 -2
- package/src/{textinput → form}/TextInput.ts +5 -5
- package/src/{omnibox → form/select}/Omnibox.ts +2 -2
- package/src/{select → form/select}/PopupSelect.ts +1 -1
- package/src/{select → form/select}/Select.ts +124 -126
- package/src/{select → form/select}/UserSelect.ts +1 -1
- package/src/{select → form/select}/WorkspaceSelect.ts +1 -1
- package/src/interfaces.ts +2 -1
- package/src/{dialog → layout}/Dialog.ts +1 -1
- package/src/list/NotificationList.ts +2 -2
- package/src/list/RunList.ts +3 -3
- package/src/list/ShortcutList.ts +1 -1
- package/src/list/TembaMenu.ts +2 -2
- package/src/list/TicketList.ts +1 -1
- package/src/{aliaseditor → live}/AliasEditor.ts +3 -3
- package/src/{contacts → live}/ContactBadges.ts +1 -1
- package/src/{contacts → live}/ContactChat.ts +118 -8
- package/src/{contacts → live}/ContactDetails.ts +1 -1
- package/src/{contacts → live}/ContactFieldEditor.ts +4 -4
- package/src/{contacts → live}/ContactFields.ts +1 -1
- package/src/{contacts → live}/ContactNotepad.ts +1 -1
- package/src/{contacts → live}/ContactPending.ts +1 -1
- package/src/{chart → live}/TembaChart.ts +5 -2
- package/src/locales/es.ts +13 -18
- package/src/locales/fr.ts +13 -18
- package/src/locales/locale-codes.ts +2 -11
- package/src/locales/pt.ts +13 -18
- package/src/store/AppState.ts +75 -29
- package/src/store/Store.ts +1 -1
- package/src/store/flow-definition.d.ts +125 -0
- package/src/{utils/index.ts → utils.ts} +26 -10
- package/src/webchat/WebChat.ts +1 -1
- package/static/css/temba-components.css +1 -0
- package/svg.js +1 -4
- package/temba-components.ts +2 -2
- package/temba-modules.ts +54 -54
- package/temba-webchat.ts +2 -2
- package/test/temba-alert.test.ts +1 -1
- package/test/temba-appstate-language.test.ts +108 -0
- package/test/temba-charcount.test.ts +1 -1
- package/test/temba-chart.test.ts +1 -1
- package/test/temba-checkbox.test.ts +1 -1
- package/test/temba-color-picker.test.ts +1 -1
- package/test/temba-completion.test.ts +1 -1
- package/test/temba-compose.test.ts +1 -1
- package/test/temba-contact-badges.test.ts +1 -1
- package/test/temba-contact-chat.test.ts +6 -4
- package/test/temba-contact-details.test.ts +1 -1
- package/test/temba-contact-fields.test.ts +1 -1
- package/test/temba-contact-search.test.ts +2 -2
- package/test/temba-date.test.ts +8 -3
- package/test/temba-datepicker.test.ts +1 -1
- package/test/temba-dialog.test.ts +1 -1
- package/test/temba-dropdown.test.ts +1 -1
- package/test/temba-excellent-helpers.test.ts +417 -0
- package/test/temba-field-manager.test.ts +2 -2
- package/test/temba-flow-editor-node.test.ts +536 -1
- package/test/temba-flow-editor.test.ts +224 -0
- package/test/temba-flow-editor.test.ts.backup +563 -0
- package/test/temba-flow-plumber-connections.test.ts +142 -0
- package/test/temba-flow-plumber.test.ts +83 -120
- package/test/temba-flow-render.test.ts +787 -4
- package/test/temba-flow-self-routing.test.ts +215 -0
- package/test/temba-formfield.test.ts +1 -1
- package/test/temba-icon.test.ts +1 -1
- package/test/temba-integration-markdown.test.ts +1 -1
- package/test/temba-label.test.ts +1 -1
- package/test/temba-lightbox.test.ts +1 -1
- package/test/temba-markdown.test.ts +162 -0
- package/test/temba-menu.test.ts +1 -1
- package/test/temba-modax.test.ts +2 -2
- package/test/temba-modules.test.ts +56 -0
- package/test/temba-omnibox.test.ts +1 -1
- package/test/temba-options.test.ts +1 -1
- package/test/temba-range-picker.test.ts +17 -2
- package/test/temba-rapid-element.test.ts +341 -0
- package/test/temba-resize-element.test.ts +104 -0
- package/test/temba-select.test.ts +2 -2
- package/test/temba-slider.test.ts +1 -1
- package/test/temba-sticky-note.test.ts +281 -0
- package/test/temba-template-editor.test.ts +1 -1
- package/test/temba-textinput.test.ts +1 -1
- package/test/temba-tip.test.ts +1 -1
- package/test/temba-toast.test.ts +1 -1
- package/test/temba-utils-index.test.ts +1 -1
- package/test/temba-utils-index.test.ts.backup +1737 -0
- package/test/temba-utils-uuid.test.ts +48 -0
- package/test/temba-webchat.test.ts +30 -12
- package/test/utils.test.ts +5 -9
- package/web-dev-server.config.mjs +1 -1
- package/demo/alert/example.html +0 -65
- package/demo/button/example.html +0 -71
- package/demo/chart/horizontal-demo.html +0 -81
- package/demo/checkbox/example.html +0 -72
- package/demo/compose/example.html +0 -72
- package/demo/dropdown/example.html +0 -99
- package/demo/progress/example.html +0 -59
- package/demo/select/drag-and-drop.html +0 -142
- package/demo/select/example.html +0 -82
- package/demo/select/multi.html +0 -73
- package/demo/slider/example.html +0 -59
- package/demo/tabs/example.html +0 -91
- package/demo/textinput/example.html +0 -61
- package/out-tsc/src/FormElement.js.map +0 -1
- package/out-tsc/src/alert/Alert.js.map +0 -1
- package/out-tsc/src/aliaseditor/AliasEditor.js.map +0 -1
- package/out-tsc/src/anchor/Anchor.js.map +0 -1
- package/out-tsc/src/button/Button.js.map +0 -1
- package/out-tsc/src/charcount/CharCount.js.map +0 -1
- package/out-tsc/src/charcount/helpers.js +0 -159
- package/out-tsc/src/charcount/helpers.js.map +0 -1
- package/out-tsc/src/chart/TembaChart.js.map +0 -1
- package/out-tsc/src/chat/Chat.js.map +0 -1
- package/out-tsc/src/checkbox/Checkbox.js.map +0 -1
- package/out-tsc/src/colorpicker/ColorPicker.js.map +0 -1
- package/out-tsc/src/completion/Completion.js.map +0 -1
- package/out-tsc/src/completion/ExcellentParser.js.map +0 -1
- package/out-tsc/src/completion/helpers.js.map +0 -1
- package/out-tsc/src/compose/Compose.js.map +0 -1
- package/out-tsc/src/contacts/ContactBadges.js.map +0 -1
- package/out-tsc/src/contacts/ContactChat.js.map +0 -1
- package/out-tsc/src/contacts/ContactDetails.js.map +0 -1
- package/out-tsc/src/contacts/ContactFieldEditor.js.map +0 -1
- package/out-tsc/src/contacts/ContactFields.js.map +0 -1
- package/out-tsc/src/contacts/ContactName.js.map +0 -1
- package/out-tsc/src/contacts/ContactNameFetch.js.map +0 -1
- package/out-tsc/src/contacts/ContactPending.js.map +0 -1
- package/out-tsc/src/contacts/ContactStoreElement.js.map +0 -1
- package/out-tsc/src/contacts/ContactUrn.js.map +0 -1
- package/out-tsc/src/contacts/events.js +0 -65
- package/out-tsc/src/contacts/events.js.map +0 -1
- package/out-tsc/src/contacts/helpers.js +0 -77
- package/out-tsc/src/contacts/helpers.js.map +0 -1
- package/out-tsc/src/contactsearch/ContactSearch.js.map +0 -1
- package/out-tsc/src/date/TembaDate.js.map +0 -1
- package/out-tsc/src/datepicker/DatePicker.js.map +0 -1
- package/out-tsc/src/datepicker/RangePicker.js.map +0 -1
- package/out-tsc/src/dialog/Dialog.js.map +0 -1
- package/out-tsc/src/dropdown/Dropdown.js.map +0 -1
- package/out-tsc/src/fields/FieldManager.js.map +0 -1
- package/out-tsc/src/formfield/FormField.js.map +0 -1
- package/out-tsc/src/imagepicker/CroppieCSS.js.map +0 -1
- package/out-tsc/src/imagepicker/ImagePicker.js.map +0 -1
- package/out-tsc/src/label/Label.js.map +0 -1
- package/out-tsc/src/leafletmap/LeafletMap.js.map +0 -1
- package/out-tsc/src/leafletmap/helpers.js +0 -17
- package/out-tsc/src/leafletmap/helpers.js.map +0 -1
- package/out-tsc/src/lightbox/Lightbox.js.map +0 -1
- package/out-tsc/src/mask/Mask.js.map +0 -1
- package/out-tsc/src/mediapicker/MediaPicker.js.map +0 -1
- package/out-tsc/src/omnibox/Omnibox.js.map +0 -1
- package/out-tsc/src/options/helpers.js +0 -28
- package/out-tsc/src/options/helpers.js.map +0 -1
- package/out-tsc/src/progress/ProgressBar.js.map +0 -1
- package/out-tsc/src/progress/StartProgress.js.map +0 -1
- package/out-tsc/src/resizer/Resizer.js.map +0 -1
- package/out-tsc/src/select/PopupSelect.js.map +0 -1
- package/out-tsc/src/select/Select.js.map +0 -1
- package/out-tsc/src/select/UserSelect.js.map +0 -1
- package/out-tsc/src/select/WorkspaceSelect.js.map +0 -1
- package/out-tsc/src/select/helpers.js +0 -1
- package/out-tsc/src/select/helpers.js.map +0 -1
- package/out-tsc/src/shadowless/Shadowless.js +0 -33
- package/out-tsc/src/shadowless/Shadowless.js.map +0 -1
- package/out-tsc/src/slider/TembaSlider.js.map +0 -1
- package/out-tsc/src/sms/gsmsplitter.js.map +0 -1
- package/out-tsc/src/sms/gsmvalidator.js.map +0 -1
- package/out-tsc/src/sms/index.js.map +0 -1
- package/out-tsc/src/sms/unicodesplitter.js.map +0 -1
- package/out-tsc/src/tabpane/Tab.js.map +0 -1
- package/out-tsc/src/tabpane/TabPane.js.map +0 -1
- package/out-tsc/src/templates/TemplateEditor.js.map +0 -1
- package/out-tsc/src/textinput/TextInput.js.map +0 -1
- package/out-tsc/src/textinput/helpers.js +0 -12
- package/out-tsc/src/textinput/helpers.js.map +0 -1
- package/out-tsc/src/thumbnail/Thumbnail.js.map +0 -1
- package/out-tsc/src/tip/Tip.js.map +0 -1
- package/out-tsc/src/tip/helpers.js +0 -7
- package/out-tsc/src/tip/helpers.js.map +0 -1
- package/out-tsc/src/toast/Toast.js.map +0 -1
- package/out-tsc/src/user/TembaUser.js.map +0 -1
- package/out-tsc/src/utils/index.js.map +0 -1
- package/out-tsc/src/vectoricon/VectorIcon.js.map +0 -1
- package/out-tsc/src/vectoricon/index.js.map +0 -1
- package/src/charcount/helpers.ts +0 -162
- package/src/contacts/helpers.ts +0 -103
- package/src/leafletmap/helpers.ts +0 -18
- package/src/options/helpers.ts +0 -37
- package/src/select/helpers.ts +0 -0
- package/src/shadowless/Shadowless.ts +0 -32
- package/src/textinput/helpers.ts +0 -11
- package/src/tip/helpers.ts +0 -7
- /package/out-tsc/src/{alert → display}/Alert.js +0 -0
- /package/out-tsc/src/{anchor → display}/Anchor.js +0 -0
- /package/out-tsc/src/{button → display}/Button.js +0 -0
- /package/out-tsc/src/{chat → display}/Chat.js +0 -0
- /package/out-tsc/src/{contacts → display}/ContactName.js +0 -0
- /package/out-tsc/src/{contacts → display}/ContactUrn.js +0 -0
- /package/out-tsc/src/{dropdown → display}/Dropdown.js +0 -0
- /package/out-tsc/src/{label → display}/Label.js +0 -0
- /package/out-tsc/src/{lightbox → display}/Lightbox.js +0 -0
- /package/out-tsc/src/{loading → display}/Loading.js +0 -0
- /package/out-tsc/src/{options → display}/Options.js +0 -0
- /package/out-tsc/src/{progress → display}/ProgressBar.js +0 -0
- /package/out-tsc/src/{date → display}/TembaDate.js +0 -0
- /package/out-tsc/src/{user → display}/TembaUser.js +0 -0
- /package/out-tsc/src/{thumbnail → display}/Thumbnail.js +0 -0
- /package/out-tsc/src/{toast → display}/Toast.js +0 -0
- /package/out-tsc/src/{sms → display/sms}/gsmsplitter.js +0 -0
- /package/out-tsc/src/{sms → display/sms}/gsmvalidator.js +0 -0
- /package/out-tsc/src/{sms → display/sms}/index.js +0 -0
- /package/out-tsc/src/{sms → display/sms}/unicodesplitter.js +0 -0
- /package/out-tsc/src/{completion → excellent}/ExcellentParser.js +0 -0
- /package/out-tsc/src/{completion → excellent}/helpers.js +0 -0
- /package/out-tsc/src/{imagepicker → form}/CroppieCSS.js +0 -0
- /package/out-tsc/src/{formfield → form}/FormField.js +0 -0
- /package/out-tsc/src/{dialog → layout}/Dialog.js +0 -0
- /package/out-tsc/src/{mask → layout}/Mask.js +0 -0
- /package/out-tsc/src/{dialog → layout}/Modax.js +0 -0
- /package/out-tsc/src/{resizer → layout}/Resizer.js +0 -0
- /package/out-tsc/src/{tabpane → layout}/Tab.js +0 -0
- /package/out-tsc/src/{tabpane → layout}/TabPane.js +0 -0
- /package/out-tsc/src/{contacts → live}/ContactFields.js +0 -0
- /package/out-tsc/src/{contacts → live}/ContactNameFetch.js +0 -0
- /package/out-tsc/src/{contacts → live}/ContactStoreElement.js +0 -0
- /package/out-tsc/src/{fields → live}/FieldManager.js +0 -0
- /package/out-tsc/src/{progress → live}/StartProgress.js +0 -0
- /package/src/{vectoricon/index.ts → Icons.ts} +0 -0
- /package/src/{alert → display}/Alert.ts +0 -0
- /package/src/{anchor → display}/Anchor.ts +0 -0
- /package/src/{button → display}/Button.ts +0 -0
- /package/src/{chat → display}/Chat.ts +0 -0
- /package/src/{contacts → display}/ContactName.ts +0 -0
- /package/src/{contacts → display}/ContactUrn.ts +0 -0
- /package/src/{dropdown → display}/Dropdown.ts +0 -0
- /package/src/{label → display}/Label.ts +0 -0
- /package/src/{lightbox → display}/Lightbox.ts +0 -0
- /package/src/{loading → display}/Loading.ts +0 -0
- /package/src/{options → display}/Options.ts +0 -0
- /package/src/{progress → display}/ProgressBar.ts +0 -0
- /package/src/{date → display}/TembaDate.ts +0 -0
- /package/src/{user → display}/TembaUser.ts +0 -0
- /package/src/{toast → display}/Toast.ts +0 -0
- /package/src/{sms → display/sms}/gsmsplitter.ts +0 -0
- /package/src/{sms → display/sms}/gsmvalidator.ts +0 -0
- /package/src/{sms → display/sms}/index.ts +0 -0
- /package/src/{sms → display/sms}/unicodesplitter.ts +0 -0
- /package/src/{completion → excellent}/ExcellentParser.ts +0 -0
- /package/src/{completion → excellent}/helpers.ts +0 -0
- /package/src/{imagepicker → form}/CroppieCSS.ts +0 -0
- /package/src/{formfield → form}/FormField.ts +0 -0
- /package/src/{mask → layout}/Mask.ts +0 -0
- /package/src/{dialog → layout}/Modax.ts +0 -0
- /package/src/{resizer → layout}/Resizer.ts +0 -0
- /package/src/{tabpane → layout}/Tab.ts +0 -0
- /package/src/{tabpane → layout}/TabPane.ts +0 -0
- /package/src/{contacts → live}/ContactNameFetch.ts +0 -0
- /package/src/{contacts → live}/ContactStoreElement.ts +0 -0
- /package/src/{fields → live}/FieldManager.ts +0 -0
- /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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
});
|
package/test/utils.test.ts
CHANGED
|
@@ -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 {
|
|
14
|
-
import { Select, SelectOption } from '../src/select/Select';
|
|
15
|
-
import { Options } from '../src/
|
|
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/
|
|
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
|
-
|
|
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.`,
|
package/demo/alert/example.html
DELETED
|
@@ -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>
|
package/demo/button/example.html
DELETED
|
@@ -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>
|