@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
|
@@ -2,6 +2,9 @@ name: 'build'
|
|
|
2
2
|
|
|
3
3
|
on: [push]
|
|
4
4
|
|
|
5
|
+
permissions:
|
|
6
|
+
contents: write
|
|
7
|
+
|
|
5
8
|
jobs:
|
|
6
9
|
build:
|
|
7
10
|
runs-on: ubuntu-latest
|
|
@@ -12,6 +15,9 @@ jobs:
|
|
|
12
15
|
timezoneLinux: 'UTC'
|
|
13
16
|
- name: Checkout (GitHub)
|
|
14
17
|
uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
20
|
+
fetch-depth: 0
|
|
15
21
|
- run: docker network create --driver bridge textit_default
|
|
16
22
|
- name: Build and run dev container task
|
|
17
23
|
uses: devcontainers/ci@v0.3
|
|
@@ -28,8 +34,3 @@ jobs:
|
|
|
28
34
|
name: screenshots
|
|
29
35
|
path: screenshots/
|
|
30
36
|
|
|
31
|
-
- name: Upload coverage to Codecov
|
|
32
|
-
uses: codecov/codecov-action@v4
|
|
33
|
-
with:
|
|
34
|
-
token: ${{secrets.CODECOV_TOKEN}}
|
|
35
|
-
files: coverage/lcov.info
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
name: 'Update Coverage Reports'
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
coverage:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Set Timezone
|
|
15
|
+
uses: szenius/set-timezone@v2.0
|
|
16
|
+
with:
|
|
17
|
+
timezoneLinux: 'UTC'
|
|
18
|
+
|
|
19
|
+
- name: Checkout (GitHub)
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
|
|
25
|
+
- run: docker network create --driver bridge textit_default
|
|
26
|
+
|
|
27
|
+
- name: Build and run tests with coverage
|
|
28
|
+
uses: devcontainers/ci@v0.3
|
|
29
|
+
with:
|
|
30
|
+
runCmd: yarn validate && ./generate-coverage-badge.sh
|
|
31
|
+
push: never
|
|
32
|
+
env: |
|
|
33
|
+
CI=true
|
|
34
|
+
|
|
35
|
+
- name: Copy coverage to temp
|
|
36
|
+
run: |
|
|
37
|
+
mkdir -p /tmp/coverage-copy
|
|
38
|
+
cp -r coverage /tmp/coverage-copy/
|
|
39
|
+
|
|
40
|
+
- name: Deploy coverage to coverage branch
|
|
41
|
+
run: |
|
|
42
|
+
git config --local user.email "action@github.com"
|
|
43
|
+
git config --local user.name "GitHub Action"
|
|
44
|
+
|
|
45
|
+
# Remove any coverage directory to avoid ambiguity with branch name
|
|
46
|
+
rm -rf coverage
|
|
47
|
+
|
|
48
|
+
# Create or checkout coverage branch
|
|
49
|
+
if git show-ref --verify --quiet refs/remotes/origin/coverage; then
|
|
50
|
+
git fetch origin coverage
|
|
51
|
+
git checkout coverage
|
|
52
|
+
else
|
|
53
|
+
git checkout --orphan coverage
|
|
54
|
+
git rm -rf . || true
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Copy coverage report files from temp directly to root
|
|
58
|
+
cp -r /tmp/coverage-copy/coverage/lcov-report/* ./
|
|
59
|
+
rm -rf /tmp/coverage-copy
|
|
60
|
+
|
|
61
|
+
# Create .nojekyll for GitHub Pages
|
|
62
|
+
touch .nojekyll
|
|
63
|
+
|
|
64
|
+
# Create .gitignore to exclude build byproducts from coverage branch
|
|
65
|
+
echo "# Ignore build artifacts and local byproducts in coverage branch" > .gitignore
|
|
66
|
+
echo "dist/" >> .gitignore
|
|
67
|
+
echo "node_modules/" >> .gitignore
|
|
68
|
+
echo "out-tsc/" >> .gitignore
|
|
69
|
+
echo "screenshots/test/" >> .gitignore
|
|
70
|
+
echo "static/svg/work/" >> .gitignore
|
|
71
|
+
echo "# Add more patterns as needed" >> .gitignore
|
|
72
|
+
|
|
73
|
+
# Add all files
|
|
74
|
+
git add .
|
|
75
|
+
|
|
76
|
+
# Commit if there are changes
|
|
77
|
+
if ! git diff --staged --quiet; then
|
|
78
|
+
git commit -m "Update coverage reports [skip ci] - $(date)"
|
|
79
|
+
git push origin coverage
|
|
80
|
+
fi
|
package/CHANGELOG.md
CHANGED
|
@@ -4,8 +4,40 @@ All notable changes to this project will be documented in this file. Dates are d
|
|
|
4
4
|
|
|
5
5
|
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
|
6
6
|
|
|
7
|
+
#### [v0.129.3](https://github.com/nyaruka/temba-components/compare/v0.129.2...v0.129.3)
|
|
8
|
+
|
|
9
|
+
- Don't attempt to show select items if loading [`#634`](https://github.com/nyaruka/temba-components/pull/634)
|
|
10
|
+
- Fix sticky selection intersection [`#633`](https://github.com/nyaruka/temba-components/pull/633)
|
|
11
|
+
- Flow Editor: Add missing action descriptions for flow rendering [`#632`](https://github.com/nyaruka/temba-components/pull/632)
|
|
12
|
+
- Flow Editor: Implement action removal with confirmation UI [`#628`](https://github.com/nyaruka/temba-components/pull/628)
|
|
13
|
+
- This functionally works great even though it does a tiny bit of DOM manipulation. I think for performance reasons, it actually is appropriate in this case. [`#626`](https://github.com/nyaruka/temba-components/pull/626)
|
|
14
|
+
- Implement double-click to create sticky notes on Flow Editor canvas [`#622`](https://github.com/nyaruka/temba-components/pull/622)
|
|
15
|
+
- Add color picker functionality to sticky notes [`#624`](https://github.com/nyaruka/temba-components/pull/624)
|
|
16
|
+
- Fix snapping, background grid [`#620`](https://github.com/nyaruka/temba-components/pull/620)
|
|
17
|
+
- Implement multi-node selection functionality in Flow Editor [`#613`](https://github.com/nyaruka/temba-components/pull/613)
|
|
18
|
+
- Fix install warnings [`#616`](https://github.com/nyaruka/temba-components/pull/616)
|
|
19
|
+
- Fail build if coverage drops below 80% and add text-based coverage report [`#605`](https://github.com/nyaruka/temba-components/pull/605)
|
|
20
|
+
- Store coverage reports in repository and deploy to GitHub Pages [`#603`](https://github.com/nyaruka/temba-components/pull/603)
|
|
21
|
+
- Improve test coverage from 75.62% to 76.22% and add comprehensive tests for core utilities [`#600`](https://github.com/nyaruka/temba-components/pull/600)
|
|
22
|
+
- Remove component dedicated folders [`#599`](https://github.com/nyaruka/temba-components/pull/599)
|
|
23
|
+
- Add comprehensive action rendering functions for flow editor [`e65bb5f`](https://github.com/nyaruka/temba-components/commit/e65bb5ff1cd2070f256f985e8671e631584c971b)
|
|
24
|
+
- Implement action removal functionality with initial tests [`8476a36`](https://github.com/nyaruka/temba-components/commit/8476a3650e9eb2b1fa8de81fd25120deccc7eac0)
|
|
25
|
+
- Implement action removal functionality with initial tests [`4f15d10`](https://github.com/nyaruka/temba-components/commit/4f15d1063c0937543965375976a3649388c7d3e0)
|
|
26
|
+
|
|
27
|
+
#### [v0.129.2](https://github.com/nyaruka/temba-components/compare/v0.129.1...v0.129.2)
|
|
28
|
+
|
|
29
|
+
> 26 June 2025
|
|
30
|
+
|
|
31
|
+
- Add option for chart to not fetch until a window is provided [`#596`](https://github.com/nyaruka/temba-components/pull/596)
|
|
32
|
+
- Standardize component documentation structure and remove inline styles [`#595`](https://github.com/nyaruka/temba-components/pull/595)
|
|
33
|
+
- Fix demo links for styles and module import [`5c06b5a`](https://github.com/nyaruka/temba-components/commit/5c06b5a58118450d330d0a0370b0e0a5a3a40d58)
|
|
34
|
+
- Standardize sticky-note-demo.html and horizontal-demo.html documentation [`36ad3c1`](https://github.com/nyaruka/temba-components/commit/36ad3c14a23c4419a7f0ed32c613cdc53b3737a7)
|
|
35
|
+
- Move all component demos under demo/components directory [`dd2e778`](https://github.com/nyaruka/temba-components/commit/dd2e7787c9114912bc746bcb5fe2341db0ae2e0f)
|
|
36
|
+
|
|
7
37
|
#### [v0.129.1](https://github.com/nyaruka/temba-components/compare/v0.129.0...v0.129.1)
|
|
8
38
|
|
|
39
|
+
> 25 June 2025
|
|
40
|
+
|
|
9
41
|
- Fix formatting for range dates [`#590`](https://github.com/nyaruka/temba-components/pull/590)
|
|
10
42
|
|
|
11
43
|
#### [v0.129.0](https://github.com/nyaruka/temba-components/compare/v0.128.0...v0.129.0)
|
package/README.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# temba-components
|
|
2
|
+
|
|
3
|
+
[](https://nyaruka.github.io/temba-components/)
|
|
4
|
+
|
|
5
|
+
Coverage reports are automatically generated and deployed to [GitHub Pages](https://nyaruka.github.io/temba-components/) from the `coverage` branch after each merge to main.
|
|
6
|
+
|
|
1
7
|
temba-components is a suite of ui widgets used by various RapidPro projects.
|
|
2
8
|
|
|
3
9
|
Some of the components:
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const COVERAGE_THRESHOLD = 80;
|
|
7
|
+
const LCOV_FILE = path.join(__dirname, 'coverage', 'lcov.info');
|
|
8
|
+
|
|
9
|
+
function parseLcovInfo(lcovPath) {
|
|
10
|
+
if (!fs.existsSync(lcovPath)) {
|
|
11
|
+
console.error('❌ Coverage file not found:', lcovPath);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const lcovData = fs.readFileSync(lcovPath, 'utf8');
|
|
16
|
+
const lines = lcovData.split('\n');
|
|
17
|
+
|
|
18
|
+
let totalLines = 0;
|
|
19
|
+
let hitLines = 0;
|
|
20
|
+
let totalFunctions = 0;
|
|
21
|
+
let hitFunctions = 0;
|
|
22
|
+
let totalBranches = 0;
|
|
23
|
+
let hitBranches = 0;
|
|
24
|
+
|
|
25
|
+
lines.forEach((line) => {
|
|
26
|
+
if (line.startsWith('LF:')) {
|
|
27
|
+
totalLines += parseInt(line.substring(3));
|
|
28
|
+
} else if (line.startsWith('LH:')) {
|
|
29
|
+
hitLines += parseInt(line.substring(3));
|
|
30
|
+
} else if (line.startsWith('FNF:')) {
|
|
31
|
+
totalFunctions += parseInt(line.substring(4));
|
|
32
|
+
} else if (line.startsWith('FNH:')) {
|
|
33
|
+
hitFunctions += parseInt(line.substring(4));
|
|
34
|
+
} else if (line.startsWith('BRF:')) {
|
|
35
|
+
totalBranches += parseInt(line.substring(4));
|
|
36
|
+
} else if (line.startsWith('BRH:')) {
|
|
37
|
+
hitBranches += parseInt(line.substring(4));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
lines: {
|
|
43
|
+
total: totalLines,
|
|
44
|
+
hit: hitLines,
|
|
45
|
+
percentage: totalLines > 0 ? (hitLines / totalLines) * 100 : 0
|
|
46
|
+
},
|
|
47
|
+
functions: {
|
|
48
|
+
total: totalFunctions,
|
|
49
|
+
hit: hitFunctions,
|
|
50
|
+
percentage: totalFunctions > 0 ? (hitFunctions / totalFunctions) * 100 : 0
|
|
51
|
+
},
|
|
52
|
+
branches: {
|
|
53
|
+
total: totalBranches,
|
|
54
|
+
hit: hitBranches,
|
|
55
|
+
percentage: totalBranches > 0 ? (hitBranches / totalBranches) * 100 : 0
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function displayCoverageReport(coverage) {
|
|
61
|
+
console.log('\n📊 Coverage Report');
|
|
62
|
+
console.log('==================');
|
|
63
|
+
console.log(
|
|
64
|
+
`Lines: ${coverage.lines.hit}/${
|
|
65
|
+
coverage.lines.total
|
|
66
|
+
} (${coverage.lines.percentage.toFixed(2)}%)`
|
|
67
|
+
);
|
|
68
|
+
console.log(
|
|
69
|
+
`Functions: ${coverage.functions.hit}/${
|
|
70
|
+
coverage.functions.total
|
|
71
|
+
} (${coverage.functions.percentage.toFixed(2)}%)`
|
|
72
|
+
);
|
|
73
|
+
console.log(
|
|
74
|
+
`Branches: ${coverage.branches.hit}/${
|
|
75
|
+
coverage.branches.total
|
|
76
|
+
} (${coverage.branches.percentage.toFixed(2)}%)`
|
|
77
|
+
);
|
|
78
|
+
console.log('==================');
|
|
79
|
+
|
|
80
|
+
// Use statement coverage (lines) as the metric for build success/failure
|
|
81
|
+
const statementCoverage = coverage.lines.percentage;
|
|
82
|
+
|
|
83
|
+
if (statementCoverage >= COVERAGE_THRESHOLD) {
|
|
84
|
+
console.log(
|
|
85
|
+
`✅ Statement Coverage: ${statementCoverage.toFixed(
|
|
86
|
+
2
|
|
87
|
+
)}% (above ${COVERAGE_THRESHOLD}% threshold)`
|
|
88
|
+
);
|
|
89
|
+
} else {
|
|
90
|
+
console.log(
|
|
91
|
+
`❌ Statement Coverage: ${statementCoverage.toFixed(
|
|
92
|
+
2
|
|
93
|
+
)}% (below ${COVERAGE_THRESHOLD}% threshold)`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return statementCoverage;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function main() {
|
|
101
|
+
try {
|
|
102
|
+
const coverage = parseLcovInfo(LCOV_FILE);
|
|
103
|
+
const statementCoverage = displayCoverageReport(coverage);
|
|
104
|
+
|
|
105
|
+
if (statementCoverage < COVERAGE_THRESHOLD) {
|
|
106
|
+
console.log(
|
|
107
|
+
`\n💥 Build failed: Statement coverage ${statementCoverage.toFixed(
|
|
108
|
+
2
|
|
109
|
+
)}% is below the required ${COVERAGE_THRESHOLD}% threshold.`
|
|
110
|
+
);
|
|
111
|
+
console.log(
|
|
112
|
+
`📈 Increase coverage by ${(
|
|
113
|
+
COVERAGE_THRESHOLD - statementCoverage
|
|
114
|
+
).toFixed(2)}% to pass the build.`
|
|
115
|
+
);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
} else {
|
|
118
|
+
console.log(
|
|
119
|
+
`\n🎉 Build passed: Statement coverage meets the ${COVERAGE_THRESHOLD}% threshold!`
|
|
120
|
+
);
|
|
121
|
+
process.exit(0);
|
|
122
|
+
}
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.error('❌ Error checking coverage:', error.message);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (require.main === module) {
|
|
130
|
+
main();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
module.exports = { parseLcovInfo, displayCoverageReport, COVERAGE_THRESHOLD };
|
|
@@ -0,0 +1,71 @@
|
|
|
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 href="/demo/static/css/styles.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<h1>Alert Examples</h1>
|
|
19
|
+
<p><a href="/demo/index.html">← Back to main demo</a></p>
|
|
20
|
+
|
|
21
|
+
<div class="example">
|
|
22
|
+
<h3>Basic Alert</h3>
|
|
23
|
+
<p>A simple alert component</p>
|
|
24
|
+
<temba-alert>This is a basic alert message.</temba-alert>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="example">
|
|
28
|
+
<h3>Success Alert</h3>
|
|
29
|
+
<p>An alert for successful actions</p>
|
|
30
|
+
<temba-alert level="success"
|
|
31
|
+
>Your changes have been saved successfully!</temba-alert
|
|
32
|
+
>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div class="example">
|
|
36
|
+
<h3>Warning Alert</h3>
|
|
37
|
+
<p>An alert for warning messages</p>
|
|
38
|
+
<temba-alert level="warning"
|
|
39
|
+
>Please review your input before proceeding.</temba-alert
|
|
40
|
+
>
|
|
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"
|
|
47
|
+
>An error occurred while processing your request.</temba-alert
|
|
48
|
+
>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<div class="example">
|
|
52
|
+
<h3>Info Alert</h3>
|
|
53
|
+
<p>An alert for informational messages</p>
|
|
54
|
+
<temba-alert level="info"
|
|
55
|
+
>This feature is currently in beta testing.</temba-alert
|
|
56
|
+
>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div class="example">
|
|
60
|
+
<h3>Dismissible Alert</h3>
|
|
61
|
+
<p>An alert that can be closed</p>
|
|
62
|
+
<temba-alert dismissible
|
|
63
|
+
>This alert can be dismissed by clicking the X button.</temba-alert
|
|
64
|
+
>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<script type="module">
|
|
68
|
+
import '/out-tsc/temba-modules.js';
|
|
69
|
+
</script>
|
|
70
|
+
</body>
|
|
71
|
+
</html>
|
|
@@ -0,0 +1,167 @@
|
|
|
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="/demo/static/css/styles.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
<link href="/demo/static/css/prism.css" rel="stylesheet" />
|
|
17
|
+
<script type="module" src="/demo/static/js/prism-loader.js"></script>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<h1>Button Examples</h1>
|
|
21
|
+
<p><a href="/demo/index.html">← Back to main demo</a></p>
|
|
22
|
+
|
|
23
|
+
<table class="attr-table">
|
|
24
|
+
<thead>
|
|
25
|
+
<tr>
|
|
26
|
+
<th>Attribute</th>
|
|
27
|
+
<th>Description</th>
|
|
28
|
+
<th>Default</th>
|
|
29
|
+
</tr>
|
|
30
|
+
</thead>
|
|
31
|
+
<tbody>
|
|
32
|
+
<tr>
|
|
33
|
+
<td>name</td>
|
|
34
|
+
<td>Text displayed on the button</td>
|
|
35
|
+
<td>None (required)</td>
|
|
36
|
+
</tr>
|
|
37
|
+
<tr>
|
|
38
|
+
<td>primary</td>
|
|
39
|
+
<td>Applies primary button styling</td>
|
|
40
|
+
<td>false</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td>secondary</td>
|
|
44
|
+
<td>Applies secondary button styling</td>
|
|
45
|
+
<td>false</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>attention</td>
|
|
49
|
+
<td>Applies attention-grabbing styling</td>
|
|
50
|
+
<td>false</td>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr>
|
|
53
|
+
<td>destructive</td>
|
|
54
|
+
<td>Applies destructive action styling (red)</td>
|
|
55
|
+
<td>false</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<tr>
|
|
58
|
+
<td>light</td>
|
|
59
|
+
<td>Applies light button styling</td>
|
|
60
|
+
<td>false</td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr>
|
|
63
|
+
<td>disabled</td>
|
|
64
|
+
<td>Disables the button and prevents interaction</td>
|
|
65
|
+
<td>false</td>
|
|
66
|
+
</tr>
|
|
67
|
+
<tr>
|
|
68
|
+
<td>submitting</td>
|
|
69
|
+
<td>Shows loading state during form submission</td>
|
|
70
|
+
<td>false</td>
|
|
71
|
+
</tr>
|
|
72
|
+
<tr>
|
|
73
|
+
<td>small</td>
|
|
74
|
+
<td>Applies smaller button size</td>
|
|
75
|
+
<td>false</td>
|
|
76
|
+
</tr>
|
|
77
|
+
<tr>
|
|
78
|
+
<td>lined</td>
|
|
79
|
+
<td>Applies outlined button styling</td>
|
|
80
|
+
<td>false</td>
|
|
81
|
+
</tr>
|
|
82
|
+
<tr>
|
|
83
|
+
<td>href</td>
|
|
84
|
+
<td>URL to navigate to when clicked (makes button a link)</td>
|
|
85
|
+
<td>None</td>
|
|
86
|
+
</tr>
|
|
87
|
+
<tr>
|
|
88
|
+
<td>icon</td>
|
|
89
|
+
<td>Icon name to display alongside button text</td>
|
|
90
|
+
<td>None</td>
|
|
91
|
+
</tr>
|
|
92
|
+
</tbody>
|
|
93
|
+
</table>
|
|
94
|
+
|
|
95
|
+
<div class="example">
|
|
96
|
+
<h3>Basic Button</h3>
|
|
97
|
+
<p>A simple button component</p>
|
|
98
|
+
<pre
|
|
99
|
+
class="example-html"
|
|
100
|
+
><code class="language-markup"><temba-button name="Click Me"></temba-button></code></pre>
|
|
101
|
+
<temba-button name="Click Me"></temba-button>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div class="example">
|
|
105
|
+
<h3>Primary Button</h3>
|
|
106
|
+
<p>A primary styled button</p>
|
|
107
|
+
<pre
|
|
108
|
+
class="example-html"
|
|
109
|
+
><code class="language-markup"><temba-button primary name="Primary Action"></temba-button></code></pre>
|
|
110
|
+
<temba-button primary name="Primary Action"></temba-button>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<div class="example">
|
|
114
|
+
<h3>Secondary Button</h3>
|
|
115
|
+
<p>A secondary styled button</p>
|
|
116
|
+
<pre
|
|
117
|
+
class="example-html"
|
|
118
|
+
><code class="language-markup"><temba-button secondary name="Secondary Action"></temba-button></code></pre>
|
|
119
|
+
<temba-button secondary name="Secondary Action"></temba-button>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div class="example">
|
|
123
|
+
<h3>Small Button</h3>
|
|
124
|
+
<p>A smaller button variant</p>
|
|
125
|
+
<pre
|
|
126
|
+
class="example-html"
|
|
127
|
+
><code class="language-markup"><temba-button small name="Small Button"></temba-button></code></pre>
|
|
128
|
+
<temba-button small name="Small Button"></temba-button>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="example">
|
|
132
|
+
<h3>Disabled Button</h3>
|
|
133
|
+
<p>A button that cannot be clicked</p>
|
|
134
|
+
<pre
|
|
135
|
+
class="example-html"
|
|
136
|
+
><code class="language-markup"><temba-button disabled name="Disabled Button"></temba-button></code></pre>
|
|
137
|
+
<temba-button disabled name="Disabled Button"></temba-button>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<div class="example">
|
|
141
|
+
<h3>Multiple Buttons</h3>
|
|
142
|
+
<p>Several buttons in a row with proper constraints</p>
|
|
143
|
+
<pre
|
|
144
|
+
class="example-html"
|
|
145
|
+
><code class="language-markup"><div class="button-group">
|
|
146
|
+
<div><temba-button name="Save"></temba-button></div>
|
|
147
|
+
<div><temba-button secondary name="Cancel"></temba-button></div>
|
|
148
|
+
<div><temba-button primary name="Submit"></temba-button></div>
|
|
149
|
+
</div></code></pre>
|
|
150
|
+
<div class="button-group">
|
|
151
|
+
<div>
|
|
152
|
+
<temba-button name="Save"></temba-button>
|
|
153
|
+
</div>
|
|
154
|
+
<div>
|
|
155
|
+
<temba-button secondary name="Cancel"></temba-button>
|
|
156
|
+
</div>
|
|
157
|
+
<div>
|
|
158
|
+
<temba-button primary name="Submit"></temba-button>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<script type="module">
|
|
164
|
+
import '/out-tsc/temba-modules.js';
|
|
165
|
+
</script>
|
|
166
|
+
</body>
|
|
167
|
+
</html>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
href="https://fonts.googleapis.com/css?family=Roboto+Mono:300|Roboto:300,400,500"
|
|
13
13
|
rel="stylesheet"
|
|
14
14
|
/>
|
|
15
|
-
<link href="
|
|
15
|
+
<link href="/demo/static/css/styles.css" rel="stylesheet" type="text/css" />
|
|
16
16
|
<style>
|
|
17
17
|
.palette {
|
|
18
18
|
display: flex;
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<body>
|
|
46
46
|
<temba-store></temba-store>
|
|
47
47
|
<h1>Chart Examples</h1>
|
|
48
|
-
<p><a href="
|
|
48
|
+
<p><a href="/demo/index.html">← Back to main demo</a></p>
|
|
49
49
|
|
|
50
50
|
<div class="example">
|
|
51
51
|
<h3>Summation Chart</h3>
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
</div>
|
|
388
388
|
|
|
389
389
|
<script type="module">
|
|
390
|
-
import '
|
|
390
|
+
import '/out-tsc/temba-modules.js';
|
|
391
391
|
</script>
|
|
392
392
|
</body>
|
|
393
393
|
</html>
|