@nyaruka/temba-components 0.129.2 → 0.129.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/.github/workflows/build.yml +6 -5
  2. package/.github/workflows/coverage.yml +80 -0
  3. package/CHANGELOG.md +22 -0
  4. package/README.md +6 -0
  5. package/check-coverage.js +133 -0
  6. package/demo/data/flows/sample-flow.json +107 -100
  7. package/dist/temba-components.js +893 -476
  8. package/dist/temba-components.js.map +1 -1
  9. package/generate-coverage-badge.sh +69 -0
  10. package/out-tsc/src/{vectoricon/index.js → Icons.js} +1 -1
  11. package/out-tsc/src/Icons.js.map +1 -0
  12. package/out-tsc/src/display/Alert.js.map +1 -0
  13. package/out-tsc/src/display/Anchor.js.map +1 -0
  14. package/out-tsc/src/display/Button.js.map +1 -0
  15. package/out-tsc/src/{charcount → display}/CharCount.js +159 -2
  16. package/out-tsc/src/display/CharCount.js.map +1 -0
  17. package/out-tsc/src/display/Chat.js.map +1 -0
  18. package/out-tsc/src/display/ContactName.js.map +1 -0
  19. package/out-tsc/src/display/ContactUrn.js.map +1 -0
  20. package/out-tsc/src/display/Dropdown.js.map +1 -0
  21. package/out-tsc/src/{vectoricon/VectorIcon.js → display/Icon.js} +2 -2
  22. package/out-tsc/src/display/Icon.js.map +1 -0
  23. package/out-tsc/src/display/Label.js.map +1 -0
  24. package/out-tsc/src/{leafletmap → display}/LeafletMap.js +16 -1
  25. package/out-tsc/src/display/LeafletMap.js.map +1 -0
  26. package/out-tsc/src/display/Lightbox.js.map +1 -0
  27. package/out-tsc/src/{loading → display}/Loading.js.map +1 -1
  28. package/out-tsc/src/{options → display}/Options.js.map +1 -1
  29. package/out-tsc/src/display/ProgressBar.js.map +1 -0
  30. package/out-tsc/src/display/TembaDate.js.map +1 -0
  31. package/out-tsc/src/display/TembaUser.js.map +1 -0
  32. package/out-tsc/src/display/Thumbnail.js.map +1 -0
  33. package/out-tsc/src/{tip → display}/Tip.js +1 -2
  34. package/out-tsc/src/display/Tip.js.map +1 -0
  35. package/out-tsc/src/display/Toast.js.map +1 -0
  36. package/out-tsc/src/display/sms/gsmsplitter.js.map +1 -0
  37. package/out-tsc/src/display/sms/gsmvalidator.js.map +1 -0
  38. package/out-tsc/src/display/sms/index.js.map +1 -0
  39. package/out-tsc/src/display/sms/unicodesplitter.js.map +1 -0
  40. package/out-tsc/src/events.js +2 -0
  41. package/out-tsc/src/events.js.map +1 -0
  42. package/out-tsc/src/excellent/ExcellentParser.js.map +1 -0
  43. package/out-tsc/src/excellent/helpers.js.map +1 -0
  44. package/out-tsc/src/flow/Editor.js +533 -140
  45. package/out-tsc/src/flow/Editor.js.map +1 -1
  46. package/out-tsc/src/flow/EditorNode.js +287 -20
  47. package/out-tsc/src/flow/EditorNode.js.map +1 -1
  48. package/out-tsc/src/flow/Plumber.js +154 -74
  49. package/out-tsc/src/flow/Plumber.js.map +1 -1
  50. package/out-tsc/src/flow/StickyNote.js +153 -9
  51. package/out-tsc/src/flow/StickyNote.js.map +1 -1
  52. package/out-tsc/src/flow/config.js +88 -18
  53. package/out-tsc/src/flow/config.js.map +1 -1
  54. package/out-tsc/src/flow/render.js +327 -10
  55. package/out-tsc/src/flow/render.js.map +1 -1
  56. package/out-tsc/src/{checkbox → form}/Checkbox.js +2 -2
  57. package/out-tsc/src/form/Checkbox.js.map +1 -0
  58. package/out-tsc/src/{colorpicker → form}/ColorPicker.js +1 -1
  59. package/out-tsc/src/form/ColorPicker.js.map +1 -0
  60. package/out-tsc/src/{completion → form}/Completion.js +2 -2
  61. package/out-tsc/src/form/Completion.js.map +1 -0
  62. package/out-tsc/src/{compose → form}/Compose.js +1 -1
  63. package/out-tsc/src/form/Compose.js.map +1 -0
  64. package/out-tsc/src/{contactsearch → form}/ContactSearch.js +2 -2
  65. package/out-tsc/src/form/ContactSearch.js.map +1 -0
  66. package/out-tsc/src/form/CroppieCSS.js.map +1 -0
  67. package/out-tsc/src/{datepicker → form}/DatePicker.js +1 -1
  68. package/out-tsc/src/form/DatePicker.js.map +1 -0
  69. package/out-tsc/src/{FormElement.js → form/FormElement.js} +1 -1
  70. package/out-tsc/src/form/FormElement.js.map +1 -0
  71. package/out-tsc/src/form/FormField.js.map +1 -0
  72. package/out-tsc/src/{imagepicker → form}/ImagePicker.js +2 -2
  73. package/out-tsc/src/form/ImagePicker.js.map +1 -0
  74. package/out-tsc/src/{mediapicker → form}/MediaPicker.js +1 -1
  75. package/out-tsc/src/form/MediaPicker.js.map +1 -0
  76. package/out-tsc/src/form/RangePicker.js.map +1 -0
  77. package/out-tsc/src/{slider → form}/TembaSlider.js +1 -1
  78. package/out-tsc/src/form/TembaSlider.js.map +1 -0
  79. package/out-tsc/src/{templates → form}/TemplateEditor.js +1 -1
  80. package/out-tsc/src/form/TemplateEditor.js.map +1 -0
  81. package/out-tsc/src/{textinput → form}/TextInput.js +3 -3
  82. package/out-tsc/src/form/TextInput.js.map +1 -0
  83. package/out-tsc/src/{omnibox → form/select}/Omnibox.js +2 -2
  84. package/out-tsc/src/form/select/Omnibox.js.map +1 -0
  85. package/out-tsc/src/{select → form/select}/PopupSelect.js +1 -1
  86. package/out-tsc/src/form/select/PopupSelect.js.map +1 -0
  87. package/out-tsc/src/{select → form/select}/Select.js +86 -87
  88. package/out-tsc/src/form/select/Select.js.map +1 -0
  89. package/out-tsc/src/{select → form/select}/UserSelect.js +1 -1
  90. package/out-tsc/src/form/select/UserSelect.js.map +1 -0
  91. package/out-tsc/src/{select → form/select}/WorkspaceSelect.js +1 -1
  92. package/out-tsc/src/form/select/WorkspaceSelect.js.map +1 -0
  93. package/out-tsc/src/interfaces.js +1 -0
  94. package/out-tsc/src/interfaces.js.map +1 -1
  95. package/out-tsc/src/layout/Dialog.js.map +1 -0
  96. package/out-tsc/src/layout/Mask.js.map +1 -0
  97. package/out-tsc/src/{dialog → layout}/Modax.js.map +1 -1
  98. package/out-tsc/src/layout/Resizer.js.map +1 -0
  99. package/out-tsc/src/layout/Tab.js.map +1 -0
  100. package/out-tsc/src/layout/TabPane.js.map +1 -0
  101. package/out-tsc/src/list/NotificationList.js +1 -1
  102. package/out-tsc/src/list/NotificationList.js.map +1 -1
  103. package/out-tsc/src/list/RunList.js +1 -1
  104. package/out-tsc/src/list/RunList.js.map +1 -1
  105. package/out-tsc/src/list/ShortcutList.js.map +1 -1
  106. package/out-tsc/src/list/TembaMenu.js +1 -1
  107. package/out-tsc/src/list/TembaMenu.js.map +1 -1
  108. package/out-tsc/src/list/TicketList.js +1 -1
  109. package/out-tsc/src/list/TicketList.js.map +1 -1
  110. package/out-tsc/src/{aliaseditor → live}/AliasEditor.js +1 -1
  111. package/out-tsc/src/live/AliasEditor.js.map +1 -0
  112. package/out-tsc/src/{contacts → live}/ContactBadges.js +1 -1
  113. package/out-tsc/src/live/ContactBadges.js.map +1 -0
  114. package/out-tsc/src/{contacts → live}/ContactChat.js +79 -3
  115. package/out-tsc/src/live/ContactChat.js.map +1 -0
  116. package/out-tsc/src/{contacts → live}/ContactDetails.js +1 -1
  117. package/out-tsc/src/live/ContactDetails.js.map +1 -0
  118. package/out-tsc/src/{contacts → live}/ContactFieldEditor.js +2 -2
  119. package/out-tsc/src/live/ContactFieldEditor.js.map +1 -0
  120. package/out-tsc/src/live/ContactFields.js.map +1 -0
  121. package/out-tsc/src/live/ContactNameFetch.js.map +1 -0
  122. package/out-tsc/src/{contacts → live}/ContactNotepad.js +1 -1
  123. package/out-tsc/src/{contacts → live}/ContactNotepad.js.map +1 -1
  124. package/out-tsc/src/{contacts → live}/ContactPending.js +1 -1
  125. package/out-tsc/src/live/ContactPending.js.map +1 -0
  126. package/out-tsc/src/live/ContactStoreElement.js.map +1 -0
  127. package/out-tsc/src/live/FieldManager.js.map +1 -0
  128. package/out-tsc/src/live/StartProgress.js.map +1 -0
  129. package/out-tsc/src/live/TembaChart.js.map +1 -0
  130. package/out-tsc/src/store/AppState.js +54 -24
  131. package/out-tsc/src/store/AppState.js.map +1 -1
  132. package/out-tsc/src/store/Store.js +1 -1
  133. package/out-tsc/src/store/Store.js.map +1 -1
  134. package/out-tsc/src/{utils/index.js → utils.js} +22 -1
  135. package/out-tsc/src/utils.js.map +1 -0
  136. package/out-tsc/src/webchat/WebChat.js +1 -1
  137. package/out-tsc/src/webchat/WebChat.js.map +1 -1
  138. package/out-tsc/temba-components.js +2 -2
  139. package/out-tsc/temba-components.js.map +1 -1
  140. package/out-tsc/temba-modules.js +54 -54
  141. package/out-tsc/temba-modules.js.map +1 -1
  142. package/out-tsc/temba-webchat.js +2 -2
  143. package/out-tsc/temba-webchat.js.map +1 -1
  144. package/out-tsc/test/temba-alert.test.js +1 -1
  145. package/out-tsc/test/temba-alert.test.js.map +1 -1
  146. package/out-tsc/test/temba-appstate-language.test.js +90 -0
  147. package/out-tsc/test/temba-appstate-language.test.js.map +1 -1
  148. package/out-tsc/test/temba-charcount.test.js.map +1 -1
  149. package/out-tsc/test/temba-chart.test.js +1 -1
  150. package/out-tsc/test/temba-chart.test.js.map +1 -1
  151. package/out-tsc/test/temba-checkbox.test.js.map +1 -1
  152. package/out-tsc/test/temba-color-picker.test.js +1 -1
  153. package/out-tsc/test/temba-color-picker.test.js.map +1 -1
  154. package/out-tsc/test/temba-completion.test.js +1 -1
  155. package/out-tsc/test/temba-completion.test.js.map +1 -1
  156. package/out-tsc/test/temba-compose.test.js +1 -1
  157. package/out-tsc/test/temba-compose.test.js.map +1 -1
  158. package/out-tsc/test/temba-contact-badges.test.js +1 -1
  159. package/out-tsc/test/temba-contact-badges.test.js.map +1 -1
  160. package/out-tsc/test/temba-contact-chat.test.js +3 -1
  161. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  162. package/out-tsc/test/temba-contact-details.test.js +1 -1
  163. package/out-tsc/test/temba-contact-details.test.js.map +1 -1
  164. package/out-tsc/test/temba-contact-fields.test.js +1 -1
  165. package/out-tsc/test/temba-contact-fields.test.js.map +1 -1
  166. package/out-tsc/test/temba-contact-search.test.js +1 -1
  167. package/out-tsc/test/temba-contact-search.test.js.map +1 -1
  168. package/out-tsc/test/temba-date.test.js +5 -1
  169. package/out-tsc/test/temba-date.test.js.map +1 -1
  170. package/out-tsc/test/temba-datepicker.test.js +1 -1
  171. package/out-tsc/test/temba-datepicker.test.js.map +1 -1
  172. package/out-tsc/test/temba-dialog.test.js +1 -1
  173. package/out-tsc/test/temba-dialog.test.js.map +1 -1
  174. package/out-tsc/test/temba-dropdown.test.js +1 -1
  175. package/out-tsc/test/temba-dropdown.test.js.map +1 -1
  176. package/out-tsc/test/temba-excellent-helpers.test.js +316 -0
  177. package/out-tsc/test/temba-excellent-helpers.test.js.map +1 -0
  178. package/out-tsc/test/temba-field-manager.test.js.map +1 -1
  179. package/out-tsc/test/temba-flow-editor-node.test.js +414 -1
  180. package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -1
  181. package/out-tsc/test/temba-flow-editor.test.js +185 -0
  182. package/out-tsc/test/temba-flow-editor.test.js.map +1 -1
  183. package/out-tsc/test/temba-flow-plumber-connections.test.js +113 -0
  184. package/out-tsc/test/temba-flow-plumber-connections.test.js.map +1 -0
  185. package/out-tsc/test/temba-flow-plumber.test.js +73 -93
  186. package/out-tsc/test/temba-flow-plumber.test.js.map +1 -1
  187. package/out-tsc/test/temba-flow-render.test.js +624 -1
  188. package/out-tsc/test/temba-flow-render.test.js.map +1 -1
  189. package/out-tsc/test/temba-flow-self-routing.test.js +172 -0
  190. package/out-tsc/test/temba-flow-self-routing.test.js.map +1 -0
  191. package/out-tsc/test/temba-formfield.test.js.map +1 -1
  192. package/out-tsc/test/temba-icon.test.js +1 -1
  193. package/out-tsc/test/temba-icon.test.js.map +1 -1
  194. package/out-tsc/test/temba-integration-markdown.test.js.map +1 -1
  195. package/out-tsc/test/temba-label.test.js +1 -1
  196. package/out-tsc/test/temba-label.test.js.map +1 -1
  197. package/out-tsc/test/temba-lightbox.test.js +1 -1
  198. package/out-tsc/test/temba-lightbox.test.js.map +1 -1
  199. package/out-tsc/test/temba-markdown.test.js +127 -0
  200. package/out-tsc/test/temba-markdown.test.js.map +1 -0
  201. package/out-tsc/test/temba-menu.test.js +1 -1
  202. package/out-tsc/test/temba-menu.test.js.map +1 -1
  203. package/out-tsc/test/temba-modax.test.js +1 -1
  204. package/out-tsc/test/temba-modax.test.js.map +1 -1
  205. package/out-tsc/test/temba-modules.test.js +47 -0
  206. package/out-tsc/test/temba-modules.test.js.map +1 -0
  207. package/out-tsc/test/temba-omnibox.test.js +1 -1
  208. package/out-tsc/test/temba-omnibox.test.js.map +1 -1
  209. package/out-tsc/test/temba-options.test.js.map +1 -1
  210. package/out-tsc/test/temba-range-picker.test.js +9 -2
  211. package/out-tsc/test/temba-range-picker.test.js.map +1 -1
  212. package/out-tsc/test/temba-rapid-element.test.js +273 -0
  213. package/out-tsc/test/temba-rapid-element.test.js.map +1 -0
  214. package/out-tsc/test/temba-resize-element.test.js +85 -0
  215. package/out-tsc/test/temba-resize-element.test.js.map +1 -0
  216. package/out-tsc/test/temba-select.test.js +2 -2
  217. package/out-tsc/test/temba-select.test.js.map +1 -1
  218. package/out-tsc/test/temba-slider.test.js.map +1 -1
  219. package/out-tsc/test/temba-sticky-note.test.js +194 -0
  220. package/out-tsc/test/temba-sticky-note.test.js.map +1 -0
  221. package/out-tsc/test/temba-template-editor.test.js.map +1 -1
  222. package/out-tsc/test/temba-textinput.test.js +1 -1
  223. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  224. package/out-tsc/test/temba-tip.test.js +1 -1
  225. package/out-tsc/test/temba-tip.test.js.map +1 -1
  226. package/out-tsc/test/temba-toast.test.js +1 -1
  227. package/out-tsc/test/temba-toast.test.js.map +1 -1
  228. package/out-tsc/test/temba-utils-index.test.js +1 -1
  229. package/out-tsc/test/temba-utils-index.test.js.map +1 -1
  230. package/out-tsc/test/temba-utils-uuid.test.js +38 -0
  231. package/out-tsc/test/temba-utils-uuid.test.js.map +1 -0
  232. package/out-tsc/test/temba-webchat.test.js +28 -12
  233. package/out-tsc/test/temba-webchat.test.js.map +1 -1
  234. package/out-tsc/test/utils.test.js +2 -6
  235. package/out-tsc/test/utils.test.js.map +1 -1
  236. package/package.json +18 -9
  237. package/rollup.components.mjs +1 -1
  238. package/screenshots/truth/datepicker/range-picker-all.png +0 -0
  239. package/screenshots/truth/datepicker/range-picker-button-states.png +0 -0
  240. package/screenshots/truth/datepicker/range-picker-default.png +0 -0
  241. package/screenshots/truth/datepicker/range-picker-editing-start.png +0 -0
  242. package/screenshots/truth/datepicker/range-picker-initial-values.png +0 -0
  243. package/screenshots/truth/datepicker/range-picker-week.png +0 -0
  244. package/screenshots/truth/datepicker/range-picker-year.png +0 -0
  245. package/screenshots/truth/sticky-note/blue-color.png +0 -0
  246. package/screenshots/truth/sticky-note/blue.png +0 -0
  247. package/screenshots/truth/sticky-note/color-picker-expanded.png +0 -0
  248. package/screenshots/truth/sticky-note/default.png +0 -0
  249. package/screenshots/truth/sticky-note/gray-color.png +0 -0
  250. package/screenshots/truth/sticky-note/gray.png +0 -0
  251. package/screenshots/truth/sticky-note/green-color.png +0 -0
  252. package/screenshots/truth/sticky-note/green.png +0 -0
  253. package/screenshots/truth/sticky-note/pink-color.png +0 -0
  254. package/screenshots/truth/sticky-note/pink.png +0 -0
  255. package/screenshots/truth/sticky-note/yellow-color.png +0 -0
  256. package/screenshots/truth/sticky-note/yellow.png +0 -0
  257. package/src/{charcount → display}/CharCount.ts +164 -2
  258. package/src/{vectoricon/VectorIcon.ts → display/Icon.ts} +1 -1
  259. package/src/{leafletmap → display}/LeafletMap.ts +19 -1
  260. package/src/{thumbnail → display}/Thumbnail.ts +1 -1
  261. package/src/{tip → display}/Tip.ts +1 -2
  262. package/src/{contacts/events.ts → events.ts} +1 -64
  263. package/src/flow/Editor.ts +655 -165
  264. package/src/flow/EditorNode.ts +337 -22
  265. package/src/flow/Plumber.ts +186 -79
  266. package/src/flow/StickyNote.ts +165 -9
  267. package/src/flow/config.ts +114 -18
  268. package/src/flow/render.ts +398 -11
  269. package/src/{checkbox → form}/Checkbox.ts +2 -2
  270. package/src/{colorpicker → form}/ColorPicker.ts +2 -2
  271. package/src/{completion → form}/Completion.ts +3 -3
  272. package/src/{compose → form}/Compose.ts +7 -7
  273. package/src/{contactsearch → form}/ContactSearch.ts +6 -6
  274. package/src/{datepicker → form}/DatePicker.ts +1 -1
  275. package/src/{FormElement.ts → form/FormElement.ts} +1 -1
  276. package/src/{imagepicker → form}/ImagePicker.ts +2 -2
  277. package/src/{mediapicker → form}/MediaPicker.ts +1 -1
  278. package/src/{slider → form}/TembaSlider.ts +1 -1
  279. package/src/{templates → form}/TemplateEditor.ts +2 -2
  280. package/src/{textinput → form}/TextInput.ts +5 -5
  281. package/src/{omnibox → form/select}/Omnibox.ts +2 -2
  282. package/src/{select → form/select}/PopupSelect.ts +1 -1
  283. package/src/{select → form/select}/Select.ts +124 -126
  284. package/src/{select → form/select}/UserSelect.ts +1 -1
  285. package/src/{select → form/select}/WorkspaceSelect.ts +1 -1
  286. package/src/interfaces.ts +2 -1
  287. package/src/{dialog → layout}/Dialog.ts +1 -1
  288. package/src/list/NotificationList.ts +2 -2
  289. package/src/list/RunList.ts +3 -3
  290. package/src/list/ShortcutList.ts +1 -1
  291. package/src/list/TembaMenu.ts +2 -2
  292. package/src/list/TicketList.ts +1 -1
  293. package/src/{aliaseditor → live}/AliasEditor.ts +3 -3
  294. package/src/{contacts → live}/ContactBadges.ts +1 -1
  295. package/src/{contacts → live}/ContactChat.ts +118 -8
  296. package/src/{contacts → live}/ContactDetails.ts +1 -1
  297. package/src/{contacts → live}/ContactFieldEditor.ts +4 -4
  298. package/src/{contacts → live}/ContactFields.ts +1 -1
  299. package/src/{contacts → live}/ContactNotepad.ts +1 -1
  300. package/src/{contacts → live}/ContactPending.ts +1 -1
  301. package/src/{chart → live}/TembaChart.ts +1 -1
  302. package/src/store/AppState.ts +75 -29
  303. package/src/store/Store.ts +1 -1
  304. package/src/store/flow-definition.d.ts +125 -0
  305. package/src/{utils/index.ts → utils.ts} +26 -10
  306. package/src/webchat/WebChat.ts +1 -1
  307. package/static/css/temba-components.css +1 -0
  308. package/svg.js +1 -4
  309. package/temba-components.ts +2 -2
  310. package/temba-modules.ts +54 -54
  311. package/temba-webchat.ts +2 -2
  312. package/test/temba-alert.test.ts +1 -1
  313. package/test/temba-appstate-language.test.ts +108 -0
  314. package/test/temba-charcount.test.ts +1 -1
  315. package/test/temba-chart.test.ts +1 -1
  316. package/test/temba-checkbox.test.ts +1 -1
  317. package/test/temba-color-picker.test.ts +1 -1
  318. package/test/temba-completion.test.ts +1 -1
  319. package/test/temba-compose.test.ts +1 -1
  320. package/test/temba-contact-badges.test.ts +1 -1
  321. package/test/temba-contact-chat.test.ts +6 -4
  322. package/test/temba-contact-details.test.ts +1 -1
  323. package/test/temba-contact-fields.test.ts +1 -1
  324. package/test/temba-contact-search.test.ts +2 -2
  325. package/test/temba-date.test.ts +8 -3
  326. package/test/temba-datepicker.test.ts +1 -1
  327. package/test/temba-dialog.test.ts +1 -1
  328. package/test/temba-dropdown.test.ts +1 -1
  329. package/test/temba-excellent-helpers.test.ts +417 -0
  330. package/test/temba-field-manager.test.ts +2 -2
  331. package/test/temba-flow-editor-node.test.ts +536 -1
  332. package/test/temba-flow-editor.test.ts +224 -0
  333. package/test/temba-flow-editor.test.ts.backup +563 -0
  334. package/test/temba-flow-plumber-connections.test.ts +142 -0
  335. package/test/temba-flow-plumber.test.ts +83 -120
  336. package/test/temba-flow-render.test.ts +787 -4
  337. package/test/temba-flow-self-routing.test.ts +215 -0
  338. package/test/temba-formfield.test.ts +1 -1
  339. package/test/temba-icon.test.ts +1 -1
  340. package/test/temba-integration-markdown.test.ts +1 -1
  341. package/test/temba-label.test.ts +1 -1
  342. package/test/temba-lightbox.test.ts +1 -1
  343. package/test/temba-markdown.test.ts +162 -0
  344. package/test/temba-menu.test.ts +1 -1
  345. package/test/temba-modax.test.ts +2 -2
  346. package/test/temba-modules.test.ts +56 -0
  347. package/test/temba-omnibox.test.ts +1 -1
  348. package/test/temba-options.test.ts +1 -1
  349. package/test/temba-range-picker.test.ts +17 -2
  350. package/test/temba-rapid-element.test.ts +341 -0
  351. package/test/temba-resize-element.test.ts +104 -0
  352. package/test/temba-select.test.ts +2 -2
  353. package/test/temba-slider.test.ts +1 -1
  354. package/test/temba-sticky-note.test.ts +281 -0
  355. package/test/temba-template-editor.test.ts +1 -1
  356. package/test/temba-textinput.test.ts +1 -1
  357. package/test/temba-tip.test.ts +1 -1
  358. package/test/temba-toast.test.ts +1 -1
  359. package/test/temba-utils-index.test.ts +1 -1
  360. package/test/temba-utils-index.test.ts.backup +1737 -0
  361. package/test/temba-utils-uuid.test.ts +48 -0
  362. package/test/temba-webchat.test.ts +30 -12
  363. package/test/utils.test.ts +5 -9
  364. package/web-dev-server.config.mjs +1 -1
  365. package/out-tsc/src/FormElement.js.map +0 -1
  366. package/out-tsc/src/alert/Alert.js.map +0 -1
  367. package/out-tsc/src/aliaseditor/AliasEditor.js.map +0 -1
  368. package/out-tsc/src/anchor/Anchor.js.map +0 -1
  369. package/out-tsc/src/button/Button.js.map +0 -1
  370. package/out-tsc/src/charcount/CharCount.js.map +0 -1
  371. package/out-tsc/src/charcount/helpers.js +0 -159
  372. package/out-tsc/src/charcount/helpers.js.map +0 -1
  373. package/out-tsc/src/chart/TembaChart.js.map +0 -1
  374. package/out-tsc/src/chat/Chat.js.map +0 -1
  375. package/out-tsc/src/checkbox/Checkbox.js.map +0 -1
  376. package/out-tsc/src/colorpicker/ColorPicker.js.map +0 -1
  377. package/out-tsc/src/completion/Completion.js.map +0 -1
  378. package/out-tsc/src/completion/ExcellentParser.js.map +0 -1
  379. package/out-tsc/src/completion/helpers.js.map +0 -1
  380. package/out-tsc/src/compose/Compose.js.map +0 -1
  381. package/out-tsc/src/contacts/ContactBadges.js.map +0 -1
  382. package/out-tsc/src/contacts/ContactChat.js.map +0 -1
  383. package/out-tsc/src/contacts/ContactDetails.js.map +0 -1
  384. package/out-tsc/src/contacts/ContactFieldEditor.js.map +0 -1
  385. package/out-tsc/src/contacts/ContactFields.js.map +0 -1
  386. package/out-tsc/src/contacts/ContactName.js.map +0 -1
  387. package/out-tsc/src/contacts/ContactNameFetch.js.map +0 -1
  388. package/out-tsc/src/contacts/ContactPending.js.map +0 -1
  389. package/out-tsc/src/contacts/ContactStoreElement.js.map +0 -1
  390. package/out-tsc/src/contacts/ContactUrn.js.map +0 -1
  391. package/out-tsc/src/contacts/events.js +0 -65
  392. package/out-tsc/src/contacts/events.js.map +0 -1
  393. package/out-tsc/src/contacts/helpers.js +0 -77
  394. package/out-tsc/src/contacts/helpers.js.map +0 -1
  395. package/out-tsc/src/contactsearch/ContactSearch.js.map +0 -1
  396. package/out-tsc/src/date/TembaDate.js.map +0 -1
  397. package/out-tsc/src/datepicker/DatePicker.js.map +0 -1
  398. package/out-tsc/src/datepicker/RangePicker.js.map +0 -1
  399. package/out-tsc/src/dialog/Dialog.js.map +0 -1
  400. package/out-tsc/src/dropdown/Dropdown.js.map +0 -1
  401. package/out-tsc/src/fields/FieldManager.js.map +0 -1
  402. package/out-tsc/src/formfield/FormField.js.map +0 -1
  403. package/out-tsc/src/imagepicker/CroppieCSS.js.map +0 -1
  404. package/out-tsc/src/imagepicker/ImagePicker.js.map +0 -1
  405. package/out-tsc/src/label/Label.js.map +0 -1
  406. package/out-tsc/src/leafletmap/LeafletMap.js.map +0 -1
  407. package/out-tsc/src/leafletmap/helpers.js +0 -17
  408. package/out-tsc/src/leafletmap/helpers.js.map +0 -1
  409. package/out-tsc/src/lightbox/Lightbox.js.map +0 -1
  410. package/out-tsc/src/mask/Mask.js.map +0 -1
  411. package/out-tsc/src/mediapicker/MediaPicker.js.map +0 -1
  412. package/out-tsc/src/omnibox/Omnibox.js.map +0 -1
  413. package/out-tsc/src/options/helpers.js +0 -28
  414. package/out-tsc/src/options/helpers.js.map +0 -1
  415. package/out-tsc/src/progress/ProgressBar.js.map +0 -1
  416. package/out-tsc/src/progress/StartProgress.js.map +0 -1
  417. package/out-tsc/src/resizer/Resizer.js.map +0 -1
  418. package/out-tsc/src/select/PopupSelect.js.map +0 -1
  419. package/out-tsc/src/select/Select.js.map +0 -1
  420. package/out-tsc/src/select/UserSelect.js.map +0 -1
  421. package/out-tsc/src/select/WorkspaceSelect.js.map +0 -1
  422. package/out-tsc/src/select/helpers.js +0 -1
  423. package/out-tsc/src/select/helpers.js.map +0 -1
  424. package/out-tsc/src/shadowless/Shadowless.js +0 -33
  425. package/out-tsc/src/shadowless/Shadowless.js.map +0 -1
  426. package/out-tsc/src/slider/TembaSlider.js.map +0 -1
  427. package/out-tsc/src/sms/gsmsplitter.js.map +0 -1
  428. package/out-tsc/src/sms/gsmvalidator.js.map +0 -1
  429. package/out-tsc/src/sms/index.js.map +0 -1
  430. package/out-tsc/src/sms/unicodesplitter.js.map +0 -1
  431. package/out-tsc/src/tabpane/Tab.js.map +0 -1
  432. package/out-tsc/src/tabpane/TabPane.js.map +0 -1
  433. package/out-tsc/src/templates/TemplateEditor.js.map +0 -1
  434. package/out-tsc/src/textinput/TextInput.js.map +0 -1
  435. package/out-tsc/src/textinput/helpers.js +0 -12
  436. package/out-tsc/src/textinput/helpers.js.map +0 -1
  437. package/out-tsc/src/thumbnail/Thumbnail.js.map +0 -1
  438. package/out-tsc/src/tip/Tip.js.map +0 -1
  439. package/out-tsc/src/tip/helpers.js +0 -7
  440. package/out-tsc/src/tip/helpers.js.map +0 -1
  441. package/out-tsc/src/toast/Toast.js.map +0 -1
  442. package/out-tsc/src/user/TembaUser.js.map +0 -1
  443. package/out-tsc/src/utils/index.js.map +0 -1
  444. package/out-tsc/src/vectoricon/VectorIcon.js.map +0 -1
  445. package/out-tsc/src/vectoricon/index.js.map +0 -1
  446. package/src/charcount/helpers.ts +0 -162
  447. package/src/contacts/helpers.ts +0 -103
  448. package/src/leafletmap/helpers.ts +0 -18
  449. package/src/options/helpers.ts +0 -37
  450. package/src/select/helpers.ts +0 -0
  451. package/src/shadowless/Shadowless.ts +0 -32
  452. package/src/textinput/helpers.ts +0 -11
  453. package/src/tip/helpers.ts +0 -7
  454. /package/out-tsc/src/{alert → display}/Alert.js +0 -0
  455. /package/out-tsc/src/{anchor → display}/Anchor.js +0 -0
  456. /package/out-tsc/src/{button → display}/Button.js +0 -0
  457. /package/out-tsc/src/{chat → display}/Chat.js +0 -0
  458. /package/out-tsc/src/{contacts → display}/ContactName.js +0 -0
  459. /package/out-tsc/src/{contacts → display}/ContactUrn.js +0 -0
  460. /package/out-tsc/src/{dropdown → display}/Dropdown.js +0 -0
  461. /package/out-tsc/src/{label → display}/Label.js +0 -0
  462. /package/out-tsc/src/{lightbox → display}/Lightbox.js +0 -0
  463. /package/out-tsc/src/{loading → display}/Loading.js +0 -0
  464. /package/out-tsc/src/{options → display}/Options.js +0 -0
  465. /package/out-tsc/src/{progress → display}/ProgressBar.js +0 -0
  466. /package/out-tsc/src/{date → display}/TembaDate.js +0 -0
  467. /package/out-tsc/src/{user → display}/TembaUser.js +0 -0
  468. /package/out-tsc/src/{thumbnail → display}/Thumbnail.js +0 -0
  469. /package/out-tsc/src/{toast → display}/Toast.js +0 -0
  470. /package/out-tsc/src/{sms → display/sms}/gsmsplitter.js +0 -0
  471. /package/out-tsc/src/{sms → display/sms}/gsmvalidator.js +0 -0
  472. /package/out-tsc/src/{sms → display/sms}/index.js +0 -0
  473. /package/out-tsc/src/{sms → display/sms}/unicodesplitter.js +0 -0
  474. /package/out-tsc/src/{completion → excellent}/ExcellentParser.js +0 -0
  475. /package/out-tsc/src/{completion → excellent}/helpers.js +0 -0
  476. /package/out-tsc/src/{imagepicker → form}/CroppieCSS.js +0 -0
  477. /package/out-tsc/src/{formfield → form}/FormField.js +0 -0
  478. /package/out-tsc/src/{datepicker → form}/RangePicker.js +0 -0
  479. /package/out-tsc/src/{dialog → layout}/Dialog.js +0 -0
  480. /package/out-tsc/src/{mask → layout}/Mask.js +0 -0
  481. /package/out-tsc/src/{dialog → layout}/Modax.js +0 -0
  482. /package/out-tsc/src/{resizer → layout}/Resizer.js +0 -0
  483. /package/out-tsc/src/{tabpane → layout}/Tab.js +0 -0
  484. /package/out-tsc/src/{tabpane → layout}/TabPane.js +0 -0
  485. /package/out-tsc/src/{contacts → live}/ContactFields.js +0 -0
  486. /package/out-tsc/src/{contacts → live}/ContactNameFetch.js +0 -0
  487. /package/out-tsc/src/{contacts → live}/ContactStoreElement.js +0 -0
  488. /package/out-tsc/src/{fields → live}/FieldManager.js +0 -0
  489. /package/out-tsc/src/{progress → live}/StartProgress.js +0 -0
  490. /package/out-tsc/src/{chart → live}/TembaChart.js +0 -0
  491. /package/src/{vectoricon/index.ts → Icons.ts} +0 -0
  492. /package/src/{alert → display}/Alert.ts +0 -0
  493. /package/src/{anchor → display}/Anchor.ts +0 -0
  494. /package/src/{button → display}/Button.ts +0 -0
  495. /package/src/{chat → display}/Chat.ts +0 -0
  496. /package/src/{contacts → display}/ContactName.ts +0 -0
  497. /package/src/{contacts → display}/ContactUrn.ts +0 -0
  498. /package/src/{dropdown → display}/Dropdown.ts +0 -0
  499. /package/src/{label → display}/Label.ts +0 -0
  500. /package/src/{lightbox → display}/Lightbox.ts +0 -0
  501. /package/src/{loading → display}/Loading.ts +0 -0
  502. /package/src/{options → display}/Options.ts +0 -0
  503. /package/src/{progress → display}/ProgressBar.ts +0 -0
  504. /package/src/{date → display}/TembaDate.ts +0 -0
  505. /package/src/{user → display}/TembaUser.ts +0 -0
  506. /package/src/{toast → display}/Toast.ts +0 -0
  507. /package/src/{sms → display/sms}/gsmsplitter.ts +0 -0
  508. /package/src/{sms → display/sms}/gsmvalidator.ts +0 -0
  509. /package/src/{sms → display/sms}/index.ts +0 -0
  510. /package/src/{sms → display/sms}/unicodesplitter.ts +0 -0
  511. /package/src/{completion → excellent}/ExcellentParser.ts +0 -0
  512. /package/src/{completion → excellent}/helpers.ts +0 -0
  513. /package/src/{imagepicker → form}/CroppieCSS.ts +0 -0
  514. /package/src/{formfield → form}/FormField.ts +0 -0
  515. /package/src/{datepicker → form}/RangePicker.ts +0 -0
  516. /package/src/{mask → layout}/Mask.ts +0 -0
  517. /package/src/{dialog → layout}/Modax.ts +0 -0
  518. /package/src/{resizer → layout}/Resizer.ts +0 -0
  519. /package/src/{tabpane → layout}/Tab.ts +0 -0
  520. /package/src/{tabpane → layout}/TabPane.ts +0 -0
  521. /package/src/{contacts → live}/ContactNameFetch.ts +0 -0
  522. /package/src/{contacts → live}/ContactStoreElement.ts +0 -0
  523. /package/src/{fields → live}/FieldManager.ts +0 -0
  524. /package/src/{progress → live}/StartProgress.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../../src/dropdown/Dropdown.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,MAAM,OAAO,QAAS,SAAQ,YAAY;IACxC,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgFT,CAAC;IACJ,CAAC;IAuBD;QACE,KAAK,EAAE,CAAC;QArBV,SAAI,GAAG,KAAK,CAAC;QAGb,YAAO,GAAG,IAAI,CAAC;QAGf,cAAS,GAAG,CAAC,CAAC;QAGd,WAAM,GAAG,EAAE,CAAC;QAGZ,SAAI,GAAG,KAAK,CAAC;QAGb,kBAAa,GAAG,EAAE,CAAC;QAGnB,eAAU,GAAG,EAAE,CAAC;QAId,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAKO,gBAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAC5C,WAAW,CACM,CAAC;QAEpB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEO,UAAU,CAAC,KAAiB;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAoB,CAAC;QAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAC5C,WAAW,CACM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAElB,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,iBAAmC;QAChD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEjC,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEM,iBAAiB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAC5C,WAAW,CACM,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAmB,CAAC;QAExE,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACxD,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAElD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG;gBACpB,MAAM,EAAE,2BAA2B;gBACnC,SAAS,EAAE,OAAO;aACnB,CAAC;YAEF,qCAAqC;YACrC,IAAI,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7C,aAAa,CAAC,MAAM,CAAC;oBACnB,YAAY,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC9B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YAED,mCAAmC;YACnC,IAAI,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC/C,aAAa,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;gBACvE,aAAa,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;gBACvC,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YAED,iEAAiE;YACjE,iEAAiE;YACjE,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;YAC/D,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;gBACtC,SAAS,GAAG,EAAE,CAAC;YACjB,CAAC;YAED,MAAM,UAAU,GAAG;gBACjB,IAAI,EAAE,SAAS,GAAG,IAAI;gBACtB,WAAW,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI;gBAClC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;aACjC,CAAC;YAEF,IAAI,QAAQ,EAAE,CAAC;gBACb,+BAA+B;gBAC/B,UAAU,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC;gBAE3C,6CAA6C;gBAC7C,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACrD,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,OAAO,CAAC;oBACjB,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;gBACxD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEM,mBAAmB,CAAC,KAAiB;QAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,IAAI;YACT,CAAC,CAAC,IAAI,CAAA,qBAAqB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM;YACxD,CAAC,CAAC,IAAI;;;yBAGW,UAAU,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;;;;;mBAKS,IAAI,CAAC,mBAAmB;;;mBAGxB,UAAU,CAAC;YAClB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;kBACM,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;;;qCAGT,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;KAMzD,CAAC;IACJ,CAAC;CACF;AA/MC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sCACf;AAGb;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yCACb;AAGf;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CACb;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACf;AAGZ;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sCACf;AAGb;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;+CAC1B;AAGnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;4CAC7B","sourcesContent":["import { css, html, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { RapidElement } from '../RapidElement';\nimport { getClasses } from '../utils';\nimport { CustomEventType } from '../interfaces';\n\nimport { styleMap } from 'lit-html/directives/style-map.js';\n\nexport class Dropdown extends RapidElement {\n static get styles() {\n return css`\n :host {\n }\n\n .wrapper {\n position: relative;\n }\n\n .toggle {\n cursor: pointer;\n }\n\n .dropdown-wrapper {\n position: relative;\n overflow: auto;\n }\n\n .dropdown:focus {\n }\n\n .dropdown.dormant {\n height: 0;\n overflow: hidden;\n }\n\n .dropdown {\n position: fixed;\n z-index: 2;\n padding: 0;\n opacity: 0;\n border-radius: calc(var(--curvature) * 1.5);\n background: #fff;\n transition: all calc(0.8 * var(--transition-speed)) var(--bounce);\n user-select: none;\n margin-top: 0px;\n margin-left: 0px;\n box-shadow: var(--dropdown-shadow);\n }\n\n .dropdown:focus {\n outline: none;\n }\n\n .arrow {\n content: '';\n width: 0px;\n height: 0;\n z-index: 10;\n position: absolute;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n }\n\n .open .dropdown {\n opacity: 1;\n transform: translateY(0.5em) scale(1);\n }\n\n .mask {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n opacity: 0.5;\n transition: opacity var(--transition-speed) ease-in-out;\n pointer-events: none;\n z-index: 1;\n }\n\n .mask.open {\n opacity: 1;\n pointer-events: auto;\n }\n\n .right {\n right: 0;\n }\n `;\n }\n\n @property({ type: Boolean })\n open = false;\n\n @property({ type: Boolean })\n dormant = true;\n\n @property({ type: Number })\n arrowSize = 8;\n\n @property({ type: Number })\n margin = 10;\n\n @property({ type: Boolean })\n mask = false;\n\n @property({ type: Object, attribute: false })\n dropdownStyle = {};\n\n @property({ type: Object, attribute: false })\n arrowStyle = {};\n\n constructor() {\n super();\n this.calculatePosition = this.calculatePosition.bind(this);\n }\n\n private activeFocus: any;\n private blurHandler: any;\n\n private resetBlurHandler() {\n const dropdown = this.shadowRoot.querySelector(\n '.dropdown'\n ) as HTMLDivElement;\n\n if (this.activeFocus) {\n this.activeFocus.removeEventListener('blur', this.blurHandler);\n }\n\n this.activeFocus = dropdown;\n this.blurHandler = this.handleBlur.bind(this);\n this.activeFocus.addEventListener('blur', this.blurHandler);\n }\n\n private handleBlur(event: FocusEvent) {\n const newTarget = event.relatedTarget as any;\n\n if (this.contains(newTarget)) {\n newTarget.addEventListener('blur', this.blurHandler);\n this.activeFocus = newTarget;\n } else {\n this.closeDropdown();\n }\n }\n\n private openDropdown() {\n this.open = true;\n this.dormant = false;\n this.resetBlurHandler();\n\n const dropdown = this.shadowRoot.querySelector(\n '.dropdown'\n ) as HTMLDivElement;\n dropdown.focus();\n dropdown.click();\n\n this.fireCustomEvent(CustomEventType.Opened);\n }\n\n private closeDropdown() {\n this.activeFocus.removeEventListener('blur', this.blurHandler);\n this.open = false;\n\n window.setTimeout(() => {\n this.dormant = true;\n }, 250);\n\n this.blur();\n }\n\n public updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n\n if (changedProperties.has('open')) {\n this.dropdownStyle = {};\n }\n\n if (changedProperties.has('dropdownStyle')) {\n if (Object.keys(this.dropdownStyle).length === 0) {\n this.calculatePosition();\n }\n }\n }\n\n public calculatePosition() {\n const dropdown = this.shadowRoot.querySelector(\n '.dropdown'\n ) as HTMLDivElement;\n const toggle = this.querySelector('*[slot=\"toggle\"]');\n\n const arrow = this.shadowRoot.querySelector('.arrow') as HTMLDivElement;\n\n let bumpedUp = false;\n let bumpedLeft = false;\n\n if (dropdown && toggle) {\n const dropdownBounds = dropdown.getBoundingClientRect();\n const toggleBounds = toggle.getBoundingClientRect();\n const arrowBounds = arrow.getBoundingClientRect();\n\n if (!toggle) {\n return;\n }\n\n const dropdownStyle = {\n border: '1px solid rgba(0,0,0,0.1)',\n marginTop: '0.5em'\n };\n\n // if off the the right, bump it left\n if (dropdownBounds.right > window.innerWidth) {\n dropdownStyle['left'] =\n toggleBounds.right - dropdownBounds.width + 'px';\n delete dropdownStyle['right'];\n bumpedLeft = true;\n }\n\n // if off to the bottom, bump it up\n if (dropdownBounds.bottom > window.innerHeight) {\n dropdownStyle['top'] = toggleBounds.top - dropdownBounds.height + 'px';\n dropdownStyle['margin-top'] = '-0.5em';\n bumpedUp = true;\n }\n\n // if our arrow is aligned with the left of the dropdown, scootch\n // the dropdown left a pinch so our arrow still overlaps properly\n let arrowLeft = toggleBounds.width / 2 - arrowBounds.width / 2;\n if (arrowLeft <= 0) {\n dropdownStyle['marginLeft'] = '-10px';\n arrowLeft = 10;\n }\n\n const arrowStyle = {\n left: arrowLeft + 'px',\n borderWidth: this.arrowSize + 'px',\n top: '-' + this.arrowSize + 'px'\n };\n\n if (bumpedUp) {\n // rotate our arrow 180 degrees\n arrowStyle['transform'] = 'rotate(180deg)';\n\n // and place it at the bottom of the dropdown\n arrowStyle['top'] = 'auto';\n arrowStyle['bottom'] = '-' + this.arrowSize + 'px';\n }\n\n if (bumpedLeft) {\n arrowStyle['right'] =\n toggleBounds.width / 2 - arrowBounds.width / 2 + 'px';\n delete arrowStyle['left'];\n }\n\n this.arrowStyle = arrowStyle;\n this.dropdownStyle = dropdownStyle;\n }\n this.requestUpdate();\n }\n\n public handleToggleClicked(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.open && this.dormant) {\n this.openDropdown();\n }\n }\n\n public render(): TemplateResult {\n return html`\n ${this.mask\n ? html`<div class=\"mask ${this.open ? 'open' : ''}\" />`\n : null}\n\n <div\n class=\"wrapper ${getClasses({\n open: this.open\n })}\"\n >\n <slot\n name=\"toggle\"\n class=\"toggle\"\n @click=${this.handleToggleClicked}\n ></slot>\n <div\n class=\"${getClasses({\n dropdown: true,\n dormant: this.dormant\n })}\"\n style=${styleMap(this.dropdownStyle)}\n tabindex=\"0\"\n >\n <div class=\"arrow\" style=${styleMap(this.arrowStyle)}></div>\n <div class=\"dropdown-wrapper\">\n <slot name=\"dropdown\" tabindex=\"1\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FieldManager.js","sourceRoot":"","sources":["../../../src/fields/FieldManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, PropertyValueMap, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ContactField, CustomEventType } from '../interfaces';\n\nimport { SortableList } from '../list/SortableList';\nimport { EndpointMonitorElement } from '../store/EndpointMonitorElement';\nimport { postJSON } from '../utils';\n\nconst TYPE_NAMES = {\n text: 'Text',\n numeric: 'Number',\n number: 'Number',\n datetime: 'Date & Time',\n state: 'State',\n ward: 'Ward',\n district: 'District'\n};\n\nconst matches = (field: ContactField, query: string): boolean => {\n if (!query) {\n return true;\n }\n const search = (\n field.label +\n field.key +\n TYPE_NAMES[field.value_type]\n ).toLowerCase();\n if (search.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n};\n\nexport class FieldManager extends EndpointMonitorElement {\n static get styles() {\n return css`\n :host {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n min-height: 0px;\n }\n\n .featured,\n .other-fields {\n background: #fff;\n border-radius: var(--curvature);\n box-shadow: var(--shadow);\n margin-bottom: 1em;\n display: flex;\n flex-direction: column;\n }\n\n .featured {\n max-height: 40%;\n }\n\n .other-fields {\n flex-grow: 2;\n min-height: 0px;\n margin-bottom: 0px;\n }\n\n temba-textinput {\n margin-bottom: 1em;\n }\n\n .scroll-box {\n overflow-y: auto;\n flex-grow: 1;\n flex-direction: column;\n display: flex;\n }\n\n .header temba-icon {\n margin-right: 0.5em;\n }\n\n .label {\n flex-grow: 1;\n }\n\n .header {\n padding: 0.5em 1em;\n display: flex;\n align-items: flex-start;\n border-bottom: 1px solid var(--color-widget-border);\n }\n\n .featured-field {\n user-select: none;\n }\n\n temba-sortable-list {\n padding: 0.5em 0em;\n width: 100%;\n overflow-y: auto;\n }\n\n .scroll-box {\n padding: 0.5em 0em;\n }\n\n temba-icon[name='usages']:hover {\n --icon-color: var(--color-link-primary);\n }\n\n .field:hover temba-icon[name='delete_small'] {\n opacity: 1 !important;\n cursor: pointer !important;\n pointer-events: all !important;\n }\n\n temba-icon[name='delete_small']:hover {\n --icon-color: var(--color-link-primary);\n }\n\n .field {\n border: 1px solid transparent;\n margin: 0 0.5em;\n border-radius: var(--curvature);\n }\n\n .featured:not(.dragging) temba-sortable-list .field:hover {\n cursor: move;\n border-color: #e6e6e6;\n background: #fcfcfc;\n }\n `;\n }\n\n @property({ type: String, attribute: 'priority-endpoint' })\n priorityEndpoint: string;\n\n @property({ type: Object, attribute: false })\n featuredFields: ContactField[];\n\n @property({ type: Object, attribute: false })\n otherFieldKeys: string[] = [];\n\n @property({ type: String })\n query = '';\n\n protected firstUpdated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.firstUpdated(_changedProperties);\n this.url = this.store.fieldsEndpoint;\n }\n\n private filterFields() {\n const filteredKeys = this.store.getFieldKeys().filter((key) => {\n const field = this.store.getContactField(key);\n if (field.featured) {\n return false;\n }\n return matches(field, this.query);\n });\n\n // sort by the label instead of the key\n filteredKeys.sort((a, b) => {\n return this.store\n .getContactField(a)\n .label.localeCompare(this.store.getContactField(b).label);\n });\n\n const featured: ContactField[] = [];\n this.store.getFeaturedFields().forEach((field) => {\n if (matches(field, this.query)) {\n featured.push(field);\n }\n });\n\n this.otherFieldKeys = filteredKeys;\n this.featuredFields = featured;\n }\n\n protected updated(\n properties: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.update(properties);\n if (properties.has('data')) {\n this.filterFields();\n } else if (properties.has('query')) {\n this.filterFields();\n }\n }\n\n private handleOrderChanged(event) {\n // Apply the reordering immediately - the SortableList now provides accurate indexes\n const [fromIdx, toIdx] = event.detail.swap;\n\n const temp = this.featuredFields[fromIdx];\n this.featuredFields.splice(fromIdx, 1);\n this.featuredFields.splice(toIdx, 0, temp);\n this.requestUpdate();\n\n // Save the new order to the server\n const list = event.currentTarget as SortableList;\n setTimeout(() => {\n postJSON(\n this.priorityEndpoint,\n list\n .getIds()\n .reverse()\n .reduce((map, key, idx) => {\n map[key] = idx;\n return map;\n }, {})\n ).then(() => {\n this.store.refreshFields();\n });\n }, 0);\n }\n\n private handleFieldAction(event: MouseEvent) {\n const ele = event.target as HTMLDivElement;\n const key = ele.dataset.key;\n const action = ele.dataset.action;\n this.fireCustomEvent(CustomEventType.Selection, { key, action });\n }\n\n private handleSearch(event) {\n this.query = (event.target.value || '').trim();\n }\n\n private hasUsages(field: ContactField): boolean {\n return (\n field.usages.campaign_events + field.usages.flows + field.usages.groups >\n 0\n );\n }\n\n private renderField(field: ContactField) {\n return html`\n <div\n class=\"field sortable\"\n id=\"${field.key}\"\n style=\"\n display: flex; \n flex-direction: row; \n align-items: center;\n padding: 0.25em 1em;\"\n @click=${(e: MouseEvent) => {\n const ele = e.currentTarget as HTMLDivElement;\n const key = ele.dataset.key;\n const action = ele.dataset.action;\n this.fireCustomEvent(CustomEventType.Selection, { key, action });\n }}\n >\n <div\n style=\"display: flex; min-width: 200px; width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-right: 2em\"\n >\n <span\n @click=${this.handleFieldAction}\n data-key=${field.key}\n data-action=\"update\"\n style=\"color: var(--color-link-primary); cursor:pointer;\"\n >\n ${field.label}\n </span>\n ${this.hasUsages(field)\n ? html`\n <temba-icon\n size=\"0.8\"\n style=\"color: #ccc; margin-left: 0.7em;\"\n name=\"usages\"\n data-key=${field.key}\n data-action=\"usages\"\n @click=${this.handleFieldAction}\n clickable\n ></temba-icon>\n `\n : null}\n <div class=\"flex-grow:1\"></div>\n </div>\n <div\n style=\"flex-grow:1; font-family: Roboto Mono, monospace; font-size:0.8em;\"\n >\n @fields.${field.key}\n </div>\n <div>${TYPE_NAMES[field.value_type]}</div>\n <temba-icon\n style=\"pointer-events:none;color:#ccc;margin-left:0.3em;margin-right:-0.5em;opacity:0\"\n name=\"delete_small\"\n data-key=${field.key}\n data-action=\"delete\"\n @click=${this.handleFieldAction}\n ></temba-icon>\n </div>\n `;\n }\n\n public render(): TemplateResult {\n if (!this.featuredFields) {\n return null;\n }\n\n return html`\n <temba-textinput\n id=\"search\"\n placeholder=\"Search\"\n @change=${this.handleSearch}\n clearable\n value=${this.query}\n ></temba-textinput>\n\n ${this.featuredFields.length > 0\n ? html`\n <div class=\"featured\">\n <div class=\"header\">\n <temba-icon name=\"featured\"></temba-icon>\n <div class=\"label\">Featured</div>\n </div>\n ${this.query\n ? html`\n <div class=\"scroll-box\">\n ${this.featuredFields.map((field) =>\n this.renderField(field)\n )}\n </div>\n `\n : html`\n <temba-sortable-list\n @temba-order-changed=${this.handleOrderChanged}\n >\n ${this.featuredFields.map((field) =>\n this.renderField(field)\n )}\n </temba-sortable-list>\n `}\n </div>\n `\n : null}\n\n <div class=\"other-fields\">\n <div class=\"header\">\n <temba-icon name=\"fields\"></temba-icon>\n <div class=\"label\">Everything Else</div>\n </div>\n <div class=\"scroll-box\">\n ${this.otherFieldKeys.map((field) =>\n this.renderField(this.store.getContactField(field))\n )}\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormField.js","sourceRoot":"","sources":["../../../src/formfield/FormField.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, css, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { renderMarkdown } from '../markdown';\n\n/**\n * A small wrapper to display labels and help text in a smartmin style.\n * This exists so we can display things consistently before restyling.\n */\nexport class FormField extends LitElement {\n static get styles() {\n return css`\n :host {\n font-family: var(--font-family);\n }\n\n label {\n margin-bottom: 5px;\n margin-left: 4px;\n display: block;\n font-weight: 400;\n font-size: var(--label-size);\n letter-spacing: 0.05em;\n line-height: normal;\n color: #777;\n }\n\n .help-text {\n font-size: var(--help-text-size);\n line-height: normal;\n color: var(--color-text-help);\n margin-left: var(--help-text-margin-left);\n margin-top: -16px;\n opacity: 0;\n transition: opacity ease-in-out 100ms, margin-top ease-in-out 200ms;\n pointer-events: none;\n }\n\n .help-text.help-always {\n opacity: 1;\n margin-top: 6px;\n margin-left: var(--help-text-margin-left);\n }\n\n .field:focus-within .help-text {\n margin-top: 6px;\n opacity: 1;\n }\n\n .alert-error {\n background: rgba(255, 181, 181, 0.17);\n border: none;\n border-left: 0px solid var(--color-error);\n color: var(--color-error);\n padding: 10px;\n margin: 15px 0px;\n border-radius: var(--curvature);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1),\n 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n }\n\n .disabled {\n opacity: var(--disabled-opacity) !important;\n pointer-events: none !important;\n }\n `;\n }\n\n @property({ type: Boolean, attribute: 'hide_label' })\n hideLabel = false;\n\n @property({ type: Boolean, attribute: 'widget_only' })\n widgetOnly = false;\n\n @property({ type: Array, attribute: false })\n errors: string[] = [];\n\n @property({ type: Boolean })\n hideErrors = false;\n\n @property({ type: String, attribute: 'help_text' })\n helpText = '';\n\n @property({ type: Boolean, attribute: 'help_always' })\n helpAlways = true;\n\n @property({ type: String })\n label = '';\n\n @property({ type: String })\n name = '';\n\n @property({ type: Boolean })\n disabled = false;\n\n public render(): TemplateResult {\n const errors = !this.hideErrors\n ? (this.errors || []).map((error: string) => {\n return html`\n <div class=\"alert-error\">${renderMarkdown(error)}</div>\n `;\n })\n : [];\n\n if (this.widgetOnly) {\n return html`\n <div class=\"${this.disabled ? 'disabled' : ''}\"><slot></slot></div>\n ${errors}\n `;\n }\n\n return html`\n <div class=\"field ${this.disabled ? 'disabled' : ''}\">\n ${!!this.name && !this.hideLabel && !!this.label\n ? html`\n <label class=\"control-label\" for=\"${this.name}\"\n >${this.label}</label\n >\n `\n : null}\n <div class=\"widget\">\n <slot></slot>\n </div>\n ${this.helpText && this.helpText !== 'None'\n ? html`\n <div class=\"help-text ${this.helpAlways ? 'help-always' : null}\">\n ${this.helpText}\n </div>\n `\n : null}\n ${errors}\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CroppieCSS.js","sourceRoot":"","sources":["../../../src/imagepicker/CroppieCSS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2P5B,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const CroppieCSS = css`\n .croppie-container {\n width: 100%;\n height: 100%;\n }\n\n .croppie-container .cr-image {\n z-index: -1;\n position: absolute;\n top: 0;\n left: 0;\n transform-origin: 0 0;\n max-height: none;\n max-width: none;\n }\n\n .croppie-container .cr-boundary {\n position: relative;\n overflow: hidden;\n margin: 0 auto;\n z-index: 1;\n width: 100%;\n height: 100%;\n }\n\n .croppie-container .cr-viewport,\n .croppie-container .cr-resizer {\n position: absolute;\n border: 2px solid #fff;\n margin: auto;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n box-shadow: 0 0 2000px 2000px rgba(0, 0, 0, 0.5);\n z-index: 0;\n }\n\n .croppie-container .cr-resizer {\n z-index: 2;\n box-shadow: none;\n pointer-events: none;\n }\n\n .croppie-container .cr-resizer-vertical,\n .croppie-container .cr-resizer-horisontal {\n position: absolute;\n pointer-events: all;\n }\n\n .croppie-container .cr-resizer-vertical::after,\n .croppie-container .cr-resizer-horisontal::after {\n display: block;\n position: absolute;\n box-sizing: border-box;\n border: 1px solid black;\n background: #fff;\n width: 10px;\n height: 10px;\n content: '';\n }\n\n .croppie-container .cr-resizer-vertical {\n bottom: -5px;\n cursor: row-resize;\n width: 100%;\n height: 10px;\n }\n\n .croppie-container .cr-resizer-vertical::after {\n left: 50%;\n margin-left: -5px;\n }\n\n .croppie-container .cr-resizer-horisontal {\n right: -5px;\n cursor: col-resize;\n width: 10px;\n height: 100%;\n }\n\n .croppie-container .cr-resizer-horisontal::after {\n top: 50%;\n margin-top: -5px;\n }\n\n .croppie-container .cr-original-image {\n display: none;\n }\n\n .croppie-container .cr-vp-circle {\n border-radius: 50%;\n }\n\n .croppie-container .cr-overlay {\n z-index: 1;\n position: absolute;\n cursor: move;\n touch-action: none;\n }\n\n .croppie-container .cr-slider-wrap {\n width: 75%;\n margin: 15px auto;\n text-align: center;\n }\n\n .croppie-result {\n position: relative;\n overflow: hidden;\n }\n\n .croppie-result img {\n position: absolute;\n }\n\n .croppie-container .cr-image,\n .croppie-container .cr-overlay,\n .croppie-container .cr-viewport {\n -webkit-transform: translateZ(0);\n -moz-transform: translateZ(0);\n -ms-transform: translateZ(0);\n transform: translateZ(0);\n }\n\n /*************************************/\n /***** STYLING RANGE INPUT ***********/\n /*************************************/\n /*http://brennaobrien.com/blog/2014/05/style-input-type-range-in-every-browser.html */\n /*************************************/\n\n .cr-slider {\n -webkit-appearance: none;\n /*removes default webkit styles*/\n /*border: 1px solid white; */ /*fix for FF unable to apply focus style bug */\n width: 300px;\n /*required for proper track sizing in FF*/\n max-width: 100%;\n padding-top: 8px;\n padding-bottom: 8px;\n background-color: transparent;\n }\n\n .cr-slider::-webkit-slider-runnable-track {\n width: 100%;\n height: 3px;\n background: rgba(0, 0, 0, 0.5);\n border: 0;\n border-radius: 3px;\n }\n\n .cr-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n border: none;\n height: 16px;\n width: 16px;\n border-radius: 50%;\n background: #ddd;\n margin-top: -6px;\n }\n\n .cr-slider:focus {\n outline: none;\n }\n /*\n.cr-slider:focus::-webkit-slider-runnable-track {\nbackground: #ccc;\n}\n*/\n\n .cr-slider::-moz-range-track {\n width: 100%;\n height: 3px;\n background: rgba(0, 0, 0, 0.5);\n border: 0;\n border-radius: 3px;\n }\n\n .cr-slider::-moz-range-thumb {\n border: none;\n height: 16px;\n width: 16px;\n border-radius: 50%;\n background: #ddd;\n margin-top: -6px;\n }\n\n /*hide the outline behind the border*/\n .cr-slider:-moz-focusring {\n outline: 1px solid white;\n outline-offset: -1px;\n }\n\n .cr-slider::-ms-track {\n width: 100%;\n height: 5px;\n background: transparent;\n /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\n border-color: transparent; /*leave room for the larger thumb to overflow with a transparent border */\n border-width: 6px 0;\n color: transparent; /*remove default tick marks*/\n }\n .cr-slider::-ms-fill-lower {\n background: rgba(0, 0, 0, 0.5);\n border-radius: 10px;\n }\n .cr-slider::-ms-fill-upper {\n background: rgba(0, 0, 0, 0.5);\n border-radius: 10px;\n }\n .cr-slider::-ms-thumb {\n border: none;\n height: 16px;\n width: 16px;\n border-radius: 50%;\n background: #ddd;\n margin-top: 1px;\n }\n .cr-slider:focus::-ms-fill-lower {\n background: rgba(0, 0, 0, 0.5);\n }\n .cr-slider:focus::-ms-fill-upper {\n background: rgba(0, 0, 0, 0.5);\n }\n /*******************************************/\n\n /***********************************/\n /* Rotation Tools */\n /***********************************/\n .cr-rotate-controls {\n position: absolute;\n bottom: 5px;\n left: 5px;\n z-index: 1;\n }\n .cr-rotate-controls button {\n border: 0;\n background: none;\n }\n .cr-rotate-controls i:before {\n display: inline-block;\n font-style: normal;\n font-weight: 900;\n font-size: 22px;\n }\n .cr-rotate-l i:before {\n content: '↺';\n }\n .cr-rotate-r i:before {\n content: '↻';\n }\n`;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImagePicker.js","sourceRoot":"","sources":["../../../src/imagepicker/ImagePicker.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-this-alias */\nimport { html, css, PropertyValueMap } from 'lit';\nimport { CroppieCSS } from './CroppieCSS';\nimport { property } from 'lit/decorators.js';\nimport { Icon } from '../vectoricon';\nimport { FormElement } from '../FormElement';\n\nexport class ImagePicker extends FormElement {\n static styles = css`\n ${CroppieCSS}\n\n .croppie {\n max-width: 400px;\n border: 0px solid #ccc;\n border-radius: 0.5em;\n overflow: hidden;\n background: #fff;\n margin-top: -20%;\n box-shadow: 0 0 15px 5px rgba(0, 0, 0, 0.1);\n }\n\n .croppie .controls {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: center;\n position: absolute;\n z-index: 1;\n width: 400px;\n margin-top: -42px;\n }\n\n .toggle {\n height: 110px;\n width: 110px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .circle .toggle {\n border-radius: 50%;\n }\n\n .toggle.set {\n box-shadow: rgba(0, 0, 0, 0.1) 0px 3px 7px 0px,\n rgba(0, 0, 0, 0.2) 0px 1px 2px 0px, inset 0 0 0 5px rgba(0, 0, 0, 0.1);\n }\n\n .toggle.set:hover {\n box-shadow: rgba(0, 0, 0, 0.1) 0px 3px 7px 0px,\n rgba(0, 0, 0, 0.2) 0px 1px 2px 0px, inset 0 0 0 5px rgba(0, 0, 0, 0.2);\n }\n\n .toggle temba-icon {\n color: rgba(0, 0, 0, 0.2);\n padding: 5px;\n }\n\n toggle:hover temba-icon {\n color: rgba(0, 0, 0, 0.8);\n }\n\n .toggle.set temba-icon {\n border-radius: 50%;\n margin-right: -90%;\n margin-bottom: -50%;\n background: rgba(240, 240, 240, 1);\n box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 2px 0px;\n }\n\n .toggle.set:hover temba-icon {\n background: #fff;\n color: var(--color-primary-dark);\n }\n\n .circle .toggle.set temba-icon {\n margin-right: -70%;\n margin-bottom: -70%;\n }\n\n .hidden {\n display: none;\n }\n\n .controls temba-icon {\n margin: 0em 0.75em;\n background: rgba(255, 255, 255, 0.8);\n border-radius: 50%;\n padding: 6px;\n transition: all 0.1s ease-in-out;\n }\n\n .controls {\n pointer-events: none;\n display: flex;\n }\n\n .controls temba-icon {\n pointer-events: all;\n }\n\n .controls temba-icon.close {\n color: rgba(0, 0, 0, 0.2);\n background: rgba(255, 255, 255, 0.2);\n }\n\n .controls temba-icon.submit {\n color: rgba(0, 0, 0, 0.2);\n box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.1);\n }\n\n .controls temba-icon:hover {\n color: white;\n cursor: pointer;\n background: var(--color-primary-dark);\n }\n `;\n\n @property({ type: String })\n tempImage: string;\n\n @property({ type: String })\n url: string;\n\n @property({ type: String })\n shape = 'square';\n\n @property({ type: Boolean, attribute: false })\n showCroppie = false;\n\n uploadReader = new FileReader();\n croppie: any;\n\n protected firstUpdated(\n changed: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.firstUpdated(changed);\n const picker = this;\n\n this.uploadReader.onload = function () {\n picker.launchCroppie(picker.uploadReader.result as any);\n };\n }\n\n public updated(changed: Map<string, any>): void {\n super.updated(changed);\n if (changed.has('url')) {\n this.setAttribute('url', this.url);\n }\n }\n\n private closeCroppie() {\n this.showCroppie = false;\n const wrapper = this.shadowRoot.querySelector('.croppie .embed');\n if (wrapper.firstChild) {\n wrapper.removeChild(wrapper.firstChild);\n }\n }\n\n private launchCroppie(url: string) {\n const wrapper = this.shadowRoot.querySelector('.croppie .embed');\n if (wrapper.firstChild) {\n wrapper.removeChild(wrapper.firstChild);\n }\n this.showCroppie = true;\n const ele = document.createElement('div');\n wrapper.appendChild(ele);\n\n const Croppie = (window as any).Croppie;\n this.croppie = new Croppie(ele, {\n enableExif: true,\n viewport: {\n width: 300,\n height: 300,\n type: this.shape\n },\n boundary: {\n width: 400,\n height: 400\n }\n });\n\n this.croppie.bind({ url });\n }\n\n private saveResult() {\n const picker = this;\n this.croppie\n .result({\n type: 'blob',\n size: 'viewport',\n format: 'webp',\n quality: 1,\n circle: false\n })\n .then(function (resp: any) {\n const blob = resp;\n picker.url = URL.createObjectURL(blob);\n\n // const blob = dataURItoBlob(resp);\n const fd = new FormData();\n fd.append(picker.name, blob, 'filename.webp');\n\n picker.value = fd;\n picker.closeCroppie();\n });\n }\n\n private handleToggleClicked() {\n const fileInput = this.shadowRoot.querySelector('#file');\n (fileInput as any).click();\n }\n\n private handleFileChanged(e: Event) {\n const input = e.target as any;\n if (input.files.length > 0) {\n this.uploadReader.readAsDataURL(input.files[0]);\n }\n input.value = '';\n }\n\n protected render() {\n return html`\n <div class=\"wrapper ${this.shape} ${this.label ? 'label' : ''}\">\n <temba-field\n name=${this.name}\n label=${this.label}\n .helpText=${this.helpText}\n .errors=${this.errors}\n .widgetOnly=${this.widgetOnly}\n .helpAlways=${true}\n ?disabled=${this.disabled}\n >\n <input class='hidden' type=\"file\" accept=\"image/*\" capture=\"camera\" id=\"file\" name=\"file\" @change=${\n this.handleFileChanged\n }/>\n <div class='toggle ${this.url ? 'set' : ''} ${\n this.showCroppie ? 'hidden' : ''\n }' @click=${this.handleToggleClicked} style=\"background: ${\n this.url\n ? `url('${this.url}') center / contain no-repeat`\n : 'rgba(0, 0, 0, 0.1)'\n }\">\n <temba-icon name=${Icon.upload_image} size=\"1.5\"></temba-icon>\n </div>\n \n <temba-mask ?show=${this.showCroppie} class=\"${\n this.showCroppie ? 'editing' : ''\n }\">\n <div class='croppie'>\n <div class='embed'></div>\n <div class='controls'>\n <temba-icon class=\"close\" size=\"1\" name=${Icon.close} @click=${\n this.closeCroppie\n }></temba-icon>\n <div style=\"flex-grow:1\"></div>\n <temba-icon class=\"submit\" size=\"1\" name=${Icon.submit} @click=${\n this.saveResult\n }></temba-icon>\n </div>\n </temba-mask>\n </temba-field>\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/label/Label.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkB,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,UAAU;IAC3C,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0ET,CAAC;IACJ,CAAC;IAgCM,MAAM;QACX,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACrC,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAA;;uBAEQ,UAAU,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;gBACM,QAAQ,CAAC,UAAU,CAAC;;;YAGxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA,oBAAoB,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI;;;;KAIhE,CAAC;IACJ,CAAC;CACF;AA7DC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wCACT;AAGnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sCACX;AAGjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wCACT;AAGnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uCACV;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qCACZ;AAGhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;mCACd;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qCACZ;AAGhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mCACd;AAGb;IADC,QAAQ,EAAE;8CACa;AAGxB;IADC,QAAQ,EAAE;wCACO","sourcesContent":["import { LitElement, TemplateResult, html, css } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { getClasses } from '../utils';\nimport { styleMap } from 'lit-html/directives/style-map.js';\n\nexport default class Label extends LitElement {\n static get styles() {\n return css`\n :host {\n display: inline-block;\n }\n\n slot {\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n\n .mask {\n padding: 3px 8px;\n border-radius: 12px;\n display: flex;\n }\n\n temba-icon {\n margin-right: 0.3em;\n padding-bottom: 0.1em;\n }\n\n .label.clickable .mask:hover {\n background: var(--color-background-hover, rgb(0, 0, 0, 0.05));\n }\n\n .label {\n font-size: 0.8em;\n font-weight: 400;\n border-radius: 12px;\n box-shadow: var(--widget-shadow, 0 0.04em 0.08em rgba(0, 0, 0, 0.15));\n background: var(--color-overlay-light);\n color: var(--color-overlay-light-text);\n --icon-color: var(--color-overlay-light-text);\n text-shadow: none;\n }\n\n .danger {\n background: tomato;\n color: #fff;\n --icon-color: #fff;\n }\n\n .primary {\n background: var(--color-primary-dark);\n color: var(--color-text-light);\n --icon-color: var(--color-text-light);\n }\n\n .secondary {\n background: var(--color-secondary-dark);\n color: var(--color-text-light);\n --icon-color: var(--color-text-light);\n }\n\n .tertiary {\n background: var(--color-tertiary);\n color: var(--color-text-light);\n --icon-color: var(--color-text-light);\n }\n\n .dark {\n background: var(--color-overlay-dark);\n text-shadow: none;\n }\n\n .clickable {\n cursor: pointer;\n }\n\n .shadow {\n box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.1);\n }\n `;\n }\n\n @property({ type: Boolean })\n clickable: boolean;\n\n @property({ type: Boolean })\n primary: boolean;\n\n @property({ type: Boolean })\n secondary: boolean;\n\n @property({ type: Boolean })\n tertiary: boolean;\n\n @property({ type: Boolean })\n danger: boolean;\n\n @property({ type: Boolean })\n dark: boolean;\n\n @property({ type: Boolean })\n shadow: boolean;\n\n @property({ type: String })\n icon: string;\n\n @property()\n backgroundColor: string;\n\n @property()\n textColor: string;\n\n public render(): TemplateResult {\n const labelStyle = {};\n\n if (this.backgroundColor) {\n labelStyle['background'] = this.backgroundColor;\n }\n\n if (this.textColor) {\n labelStyle['color'] = this.textColor;\n labelStyle['--icon-color'] = this.textColor;\n }\n\n return html`\n <div\n class=\"label ${getClasses({\n clickable: this.clickable,\n primary: this.primary,\n secondary: this.secondary,\n tertiary: this.tertiary,\n shadow: this.shadow,\n danger: this.danger,\n dark: this.dark\n })}\"\n style=${styleMap(labelStyle)}\n >\n <div class=\"mask\">\n ${this.icon ? html`<temba-icon name=${this.icon} />` : null}\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LeafletMap.js","sourceRoot":"","sources":["../../../src/leafletmap/LeafletMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { Feature, Geometry } from 'geojson';\nimport {\n GeoJSON,\n geoJSON,\n LeafletEvent,\n LeafletMouseEvent,\n Map as RenderedMap,\n map as createMap,\n Path\n} from 'leaflet';\nimport { css, html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport { FeatureProperties } from '../interfaces';\nimport { getUrl, WebResponse } from '../utils';\nimport { highlightedFeature, normalFeature, visibleStyle } from './helpers';\n\nexport class LeafletMap extends LitElement {\n static get styles() {\n return css`\n :host {\n display: block;\n padding: 0px;\n }\n\n #alias-map {\n top: 0px;\n height: 100%;\n }\n\n .leaflet-container {\n background: transparent;\n }\n\n .path {\n position: absolute;\n color: #666;\n }\n\n .path > .step {\n display: inline-block;\n font-size: 12px;\n margin-left: 5px;\n }\n\n .path > .step.hovered {\n color: #999;\n }\n\n .path > .step.linked {\n text-decoration: underline;\n color: var(--color-link-primary);\n cursor: pointer;\n }\n `;\n }\n\n @property()\n feature: FeatureProperties;\n\n @property()\n osmId = '';\n\n @property()\n endpoint = '';\n\n @property()\n onFeatureClicked: (feature: FeatureProperties) => void;\n\n @property()\n hovered: FeatureProperties = null;\n\n @property()\n path: FeatureProperties[] = [];\n\n renderedMap: RenderedMap = null;\n states: GeoJSON<any> = null;\n\n constructor() {\n super();\n }\n\n private getRenderRoot(): DocumentFragment {\n return this.renderRoot as DocumentFragment;\n }\n\n private getEndpoint(): string {\n return this.endpoint + (!this.endpoint.endsWith('/') ? '/' : '');\n }\n\n paths: { [osmId: string]: Path } = {};\n lastHovered: Path = null;\n\n private refreshMap(): void {\n const onEachFeature = (feature: Feature<Geometry, any>, path: Path) => {\n this.paths[feature.properties.osm_id] = path;\n\n path.on({\n click: (event: LeafletMouseEvent) => {\n const feature: FeatureProperties = event.target.feature.properties;\n if (feature.osm_id !== this.path[this.path.length - 1].osm_id) {\n const orig = event.originalEvent;\n\n orig.stopPropagation();\n orig.preventDefault();\n\n if (this.onFeatureClicked) {\n this.onFeatureClicked(feature);\n }\n\n this.hovered = null;\n this.path.push(feature);\n this.osmId = feature.osm_id;\n this.refreshMap();\n }\n },\n mouseover: (event: LeafletEvent) => {\n const feature: FeatureProperties = event.target.feature.properties;\n if (feature.osm_id !== this.path[this.path.length - 1].osm_id) {\n event.target.setStyle(highlightedFeature);\n this.hovered = feature;\n }\n },\n mouseout: (event: LeafletEvent) => {\n event.target.setStyle(normalFeature);\n this.hovered = null;\n }\n });\n };\n\n getUrl(this.getEndpoint() + 'geometry/' + this.osmId + '/').then(\n (response: WebResponse) => {\n if (this.states) {\n this.renderedMap.removeLayer(this.states);\n }\n\n const data = response.json;\n if (this.path.length === 0) {\n this.path = [\n {\n name: data.name,\n osm_id: this.osmId,\n level: 0\n }\n ];\n }\n\n this.states = geoJSON(data.geometry, {\n style: visibleStyle,\n onEachFeature\n });\n this.renderedMap.fitBounds(this.states.getBounds(), {});\n this.states.addTo(this.renderedMap);\n }\n );\n }\n\n public updated(changedProperties: Map<string, any>) {\n if (changedProperties.has('hovered')) {\n if (this.lastHovered) {\n this.lastHovered.setStyle(normalFeature);\n }\n\n if (this.hovered) {\n const layer = this.paths[this.hovered.osm_id];\n this.lastHovered = layer;\n if (layer) {\n layer.setStyle(highlightedFeature);\n }\n }\n }\n\n if (changedProperties.has('feature') && this.feature) {\n this.hovered = null;\n if (\n this.path.length === 0 ||\n this.path[this.path.length - 1].osm_id !== this.feature.osm_id\n ) {\n this.path.push(this.feature);\n }\n }\n\n if (changedProperties.has('osmId')) {\n const path: FeatureProperties[] = [];\n for (const feature of this.path) {\n path.push(feature);\n if (feature.osm_id === this.osmId) {\n if (this.onFeatureClicked) {\n this.onFeatureClicked(feature);\n }\n break;\n }\n }\n\n this.path = path;\n\n this.refreshMap();\n }\n }\n\n public firstUpdated(changedProperties: any) {\n const mapElement = this.getRenderRoot().getElementById('alias-map');\n this.renderedMap = createMap(mapElement, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false\n }).setView([0, 1], 4);\n this.renderedMap.dragging.disable();\n this.renderedMap.doubleClickZoom.disable();\n\n this.refreshMap();\n super.firstUpdated(changedProperties);\n }\n\n private handleClickedBreadcrumb(e: MouseEvent): void {\n this.osmId = (e.currentTarget as HTMLElement).getAttribute('data-osmid');\n const path: FeatureProperties[] = [];\n for (const feature of this.path) {\n path.push(feature);\n if (feature.osm_id === this.osmId) {\n if (this.onFeatureClicked) {\n this.onFeatureClicked(feature);\n }\n break;\n }\n }\n\n this.path = path;\n this.refreshMap();\n }\n\n render() {\n if (!this.osmId) {\n return html`<div>No osm map id</div>`;\n }\n\n return html`\n <link\n rel=\"stylesheet\"\n href=\"https://unpkg.com/leaflet@1.5.1/dist/leaflet.css\"\n />\n <div id=\"alias-map\"></div>\n `;\n }\n}\n"]}
@@ -1,17 +0,0 @@
1
- export const normalFeature = {
2
- weight: 1,
3
- opacity: 1,
4
- color: 'white',
5
- fillOpacity: 0.7,
6
- fillColor: '#2387ca'
7
- };
8
- export const highlightedFeature = {
9
- weight: 3,
10
- color: 'white',
11
- fillOpacity: 1,
12
- fillColor: '#2387ca'
13
- };
14
- export const visibleStyle = () => {
15
- return normalFeature;
16
- };
17
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/leafletmap/helpers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC","sourcesContent":["export const normalFeature = {\n weight: 1,\n opacity: 1,\n color: 'white',\n fillOpacity: 0.7,\n fillColor: '#2387ca'\n};\n\nexport const highlightedFeature = {\n weight: 3,\n color: 'white',\n fillOpacity: 1,\n fillColor: '#2387ca'\n};\n\nexport const visibleStyle = () => {\n return normalFeature;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../../src/lightbox/Lightbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, PropertyValueMap } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { RapidElement } from '../RapidElement';\nimport { getClasses } from '../utils';\nimport { styleMap } from 'lit-html/directives/style-map.js';\n\n/**\n * This component relies on a bit of sleight of hand magic\n * to achieve it's effect. As such, it requires the use of\n * computed animation times and window.setTimeout().\n */\nexport class Lightbox extends RapidElement {\n static get styles() {\n return css`\n :host {\n z-index: 10000;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n .mask {\n display: flex;\n opacity: 0;\n background: rgba(0, 0, 0, 0.5);\n position: absolute;\n height: 100svh;\n width: 100svw;\n pointer-events: none;\n }\n\n .zoom .mask {\n opacity: 1;\n pointer-events: auto;\n }\n\n .matte {\n position: absolute;\n transform: translate(400, 400) scale(3, 3);\n border-radius: 2%;\n overflow: hidden;\n box-shadow: 0 0 12px 3px rgba(0, 0, 0, 0.15);\n }\n\n .download {\n background: rgba(0, 0, 0, 0.5);\n position: absolute;\n display:flex;\n align-items:center;\n color:#fff;\n padding:0.5em;\n border-radius:var(--curvature);\n background:rgba(0,0,0,0.5);\n }\n\n }\n `;\n }\n\n @property({ type: Number })\n animationTime = 300;\n\n @property({ type: Boolean })\n show = false;\n\n @property({ type: Boolean })\n zoom = false;\n\n @property({ type: Number })\n zoomPct = 0.9;\n\n private ele: HTMLElement;\n private left: number;\n private top: number;\n private height: number;\n private width: number;\n private scale = 1;\n private xTrans = 0;\n private yTrans = 0;\n\n protected updated(\n changed: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n if (changed.has('show') && this.show) {\n window.setTimeout(() => {\n this.zoom = true;\n }, 0);\n }\n\n if (changed.has('zoom') && !this.zoom && this.show) {\n window.setTimeout(() => {\n this.show = false;\n }, this.animationTime);\n }\n }\n\n public showElement(ele: HTMLElement) {\n // size our matte according to the ele's boundaries\n const bounds = ele.getBoundingClientRect();\n this.ele = ele.cloneNode() as HTMLElement;\n (this.ele as any).zoom = true;\n\n this.left = bounds.left;\n this.top = bounds.top;\n this.width = bounds.width;\n this.height = bounds.height;\n\n this.xTrans = 0;\n this.yTrans = 0;\n this.scale = 1;\n\n let desiredWidth = this.width;\n let desiredHeight = this.height;\n let desiredScale = this.scale;\n\n const maxHeight = window.innerHeight * this.zoomPct;\n const maxWidth = window.innerWidth * this.zoomPct;\n\n // if the width fits, constrain by height\n if (this.width * (maxHeight / this.height) < maxWidth) {\n desiredHeight = window.innerHeight * this.zoomPct;\n desiredScale = desiredHeight / this.height;\n desiredWidth = this.width * desiredScale;\n } else {\n desiredWidth = window.innerWidth * this.zoomPct;\n desiredScale = desiredWidth / this.width;\n desiredHeight = this.height * desiredScale;\n }\n\n const xGrowth = (desiredWidth - this.width) / 2;\n const xDest = (window.innerWidth - desiredWidth) / 2;\n this.xTrans = xDest - this.left + xGrowth;\n\n const yGrowth = (desiredHeight - this.height) / 2;\n const yDest = (window.innerHeight - desiredHeight) / 2;\n this.yTrans = yDest - this.top + yGrowth;\n\n this.scale = desiredScale;\n this.show = true;\n }\n\n public handleClick() {\n this.zoom = false;\n }\n\n public render() {\n const styles = {\n transition: `transform ${this.animationTime}ms ease, box-shadow ${this.animationTime}ms ease`\n };\n\n if (this.show) {\n styles['left'] = this.left + 'px';\n styles['top'] = this.top + 'px';\n styles['width'] = this.width + 'px';\n }\n\n if (this.zoom) {\n styles[\n 'transform'\n ] = `translate(${this.xTrans}px, ${this.yTrans}px) scale(${this.scale}, ${this.scale})`;\n }\n\n return html`\n <div\n class=${getClasses({\n container: true,\n show: this.show,\n zoom: this.zoom\n })}\n @click=${this.handleClick}\n >\n <div\n class=${getClasses({ mask: true })}\n style=\"transition: all ${this.animationTime}ms; ease\"\n ></div>\n <div class=${getClasses({ matte: true })} style=${styleMap(styles)}>\n ${this.show ? html`${this.ele}` : null}\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Mask.js","sourceRoot":"","sources":["../../../src/mask/Mask.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,OAAO,IAAK,SAAQ,UAAU;IAApC;;QAqBE,SAAI,GAAG,KAAK,CAAC;IAOf,CAAC;IALC,MAAM;QACJ,OAAO,IAAI,CAAA,sBAAsB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;;WAEjD,CAAC;IACV,CAAC;;AA1BM,WAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBlB,AAjBY,CAiBX;AAGF;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kCACf","sourcesContent":["import { LitElement, css, html } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nexport class Mask extends LitElement {\n static styles = css`\n .mask {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.6);\n display: none;\n align-items: center;\n justify-content: center;\n }\n\n .show {\n display: flex;\n }\n `;\n\n @property({ type: Boolean })\n show = false;\n\n render() {\n return html` <div class=\"mask ${this.show ? 'show' : ''}\">\n <slot></slot>\n </div>`;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaPicker.js","sourceRoot":"","sources":["../../../src/mediapicker/MediaPicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, css, html } from 'lit';\nimport { RapidElement } from '../RapidElement';\nimport { property } from 'lit/decorators.js';\nimport { Attachment, CustomEventType } from '../interfaces';\nimport { Icon } from '../vectoricon';\nimport {\n DEFAULT_MEDIA_ENDPOINT,\n WebResponse,\n getClasses,\n postFormData\n} from '../utils';\n\nconst verifyAccept = (type: string, accept: string): boolean => {\n if (accept) {\n const allowed = accept.split(',').map((x) => x.trim());\n return (\n allowed.includes(type) || allowed.includes(type.split('/')[0] + '/*')\n );\n }\n return true;\n};\n\nexport class MediaPicker extends RapidElement {\n static get styles() {\n return css`\n .drop-mask {\n border-radius: var(--curvature-widget);\n transition: opacity ease-in-out var(--transition-speed);\n }\n\n .highlight .drop-mask {\n background: rgba(210, 243, 184, 0.8);\n }\n\n .drop-mask > div {\n margin: auto;\n border-radius: var(--curvature-widget);\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n }\n\n .attachments {\n }\n\n .attachments-list {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n padding: 0.2em;\n align-items: center;\n }\n\n .attachment-item {\n padding: 0.4em;\n padding-top: 1em;\n }\n\n .attachment-item.error {\n background: #fff;\n color: rgba(250, 0, 0, 0.75);\n padding: 0.2em;\n margin: 0.3em 0.5em;\n border-radius: var(--curvature);\n display: block;\n }\n\n .remove-item {\n --icon-color: #ccc;\n background: #fff;\n border-radius: 99%;\n transition: transform 200ms linear;\n transform: scale(0);\n display: block;\n margin-bottom: -24px;\n margin-left: 10px;\n width: 1em;\n height: 1em;\n }\n\n .attachment-item:hover .remove-item {\n transform: scale(1);\n }\n\n .remove-item:hover {\n --icon-color: #333;\n cursor: pointer;\n }\n\n .attachment-name {\n align-self: center;\n font-size: 12px;\n padding: 2px 8px;\n }\n\n #upload-input {\n display: none;\n }\n\n .upload-label {\n display: flex;\n align-items: center;\n }\n\n .upload-icon {\n color: rgb(102, 102, 102);\n }\n\n .add-attachment {\n padding: 1em;\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: var(--curvature);\n color: #aaa;\n margin: 0.5em;\n }\n\n .add-attachment:hover {\n background-color: rgba(0, 0, 0, 0.07);\n cursor: pointer;\n }\n `;\n }\n\n @property({ type: String, attribute: false })\n endpoint = DEFAULT_MEDIA_ENDPOINT;\n\n @property({ type: Boolean })\n pendingDrop: boolean;\n\n @property({ type: String })\n icon = Icon.add;\n\n @property({ type: String })\n accept = ''; //e.g. \".xls,.xlsx\"\n\n @property({ type: Number })\n max = 3;\n\n @property({ type: Array })\n attachments: Attachment[] = [];\n\n @property({ type: Boolean, attribute: false })\n uploading: boolean;\n\n public updated(changes: Map<string, any>): void {\n super.updated(changes);\n if (changes.has('attachments')) {\n // wait one cycle to fire change for tests\n setTimeout(() => {\n this.dispatchEvent(new Event('change'));\n }, 0);\n }\n\n if (changes.has('uploading')) {\n this.dispatchEvent(\n new CustomEvent(CustomEventType.Loading, {\n detail: { loading: this.uploading }\n })\n );\n }\n }\n\n private getAcceptableFiles(evt: DragEvent): File[] {\n const dt = evt.dataTransfer;\n if (dt) {\n const files = [...dt.files];\n return files.filter((file) => verifyAccept(file.type, this.accept));\n }\n }\n\n private handleDragEnter(evt: DragEvent): void {\n this.highlight(evt);\n }\n\n private handleDragOver(evt: DragEvent): void {\n this.highlight(evt);\n }\n\n private handleDragLeave(evt: DragEvent): void {\n this.unhighlight(evt);\n }\n\n private handleDrop(evt: DragEvent): void {\n this.unhighlight(evt);\n if (this.canAcceptAttachments()) {\n this.uploadFiles(this.getAcceptableFiles(evt));\n }\n }\n\n public canAcceptAttachments() {\n return this.attachments.length < this.max;\n }\n\n private highlight(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n if (this.canAcceptAttachments()) {\n this.pendingDrop = true;\n }\n }\n\n private unhighlight(evt: DragEvent): void {\n evt.preventDefault();\n evt.stopPropagation();\n this.pendingDrop = false;\n }\n\n private addCurrentAttachment(attachmentToAdd: any) {\n this.attachments.push(attachmentToAdd);\n this.requestUpdate('attachments');\n }\n\n private removeCurrentAttachment(attachmentToRemove: any) {\n this.attachments = this.attachments.filter(\n (currentAttachment) => currentAttachment !== attachmentToRemove\n );\n this.requestUpdate('attachments');\n }\n\n private handleRemoveFileClicked(evt: Event): void {\n const target = evt.target as HTMLDivElement;\n const currentAttachmentToRemove = this.attachments.find(\n ({ url }) => url === target.id\n );\n if (currentAttachmentToRemove) {\n this.removeCurrentAttachment(currentAttachmentToRemove);\n }\n }\n\n private handleUploadFileInputChanged(evt: Event): void {\n const target = evt.target as HTMLInputElement;\n const files = target.files;\n this.uploadFiles([...files]);\n }\n\n public uploadFiles(files: File[]): void {\n let filesToUpload = [];\n\n //remove duplicate files that have already been uploaded\n filesToUpload = files.filter((file) => {\n // check our file type against accepts\n if (this.accept) {\n if (!verifyAccept(file.type, this.accept)) {\n return false;\n }\n }\n\n const index = this.attachments.findIndex(\n (value) => value.filename === file.name && value.size === file.size\n );\n if (index === -1) {\n return file;\n }\n });\n\n filesToUpload.map((fileToUpload) => {\n this.uploadFile(fileToUpload);\n });\n }\n\n private uploadFile(file: File): void {\n this.uploading = true;\n\n const url = this.endpoint;\n const payload = new FormData();\n payload.append('file', file);\n postFormData(url, payload)\n .then((response: WebResponse) => {\n if (this.attachments.length < this.max) {\n const attachment = response.json as Attachment;\n if (attachment) {\n this.addCurrentAttachment(attachment);\n }\n }\n })\n .catch((error: WebResponse) => {\n let uploadError = '';\n if (error.status === 400) {\n uploadError = error.json.file[0];\n } else {\n uploadError = 'Server failure';\n }\n console.error(uploadError);\n })\n .finally(() => {\n this.uploading = false;\n });\n }\n\n private renderUploader(): TemplateResult {\n if (this.uploading) {\n return html`<temba-loading units=\"3\" size=\"12\"></temba-loading>`;\n } else {\n return this.attachments.length < this.max\n ? html`<input\n type=\"file\"\n id=\"upload-input\"\n ?multiple=${this.max > 1}\n accept=\"${this.accept}\"\n @change=\"${this.handleUploadFileInputChanged}\"\n />\n <label\n id=\"upload-label\"\n class=\"actions-left upload-label\"\n for=\"upload-input\"\n >\n <div class=\"add-attachment\">\n <temba-icon name=\"${this.icon}\" size=\"1.5\"></temba-icon>\n </div>\n </label>`\n : null;\n }\n }\n\n public render(): TemplateResult {\n return html` <div\n class=${getClasses({ container: true, highlight: this.pendingDrop })}\n @dragenter=\"${this.handleDragEnter}\"\n @dragover=\"${this.handleDragOver}\"\n @dragleave=\"${this.handleDragLeave}\"\n @drop=\"${this.handleDrop}\"\n >\n <div class=\"drop-mask\">\n <div class=\"attachments-list\">\n ${this.attachments.map((validAttachment) => {\n return html`<div class=\"attachment-item\">\n <temba-icon\n class=\"remove-item\"\n @click=\"${this.handleRemoveFileClicked}\"\n id=\"${validAttachment.url}\"\n name=\"${Icon.delete_small}\"\n ></temba-icon>\n <temba-thumbnail\n attachment=\"${validAttachment.content_type}:${validAttachment.url}\"\n ></temba-thumbnail>\n </div>`;\n })}\n ${this.renderUploader()}\n </div>\n </div>\n </div>`;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Omnibox.js","sourceRoot":"","sources":["../../../src/omnibox/Omnibox.ts"],"names":[],"mappings":"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","sourcesContent":["import { TemplateResult, html, PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { Select, SelectOption } from '../select/Select';\nimport { Icon } from '../vectoricon';\n\nenum OmniType {\n Group = 'group',\n Contact = 'contact'\n}\n\nexport interface OmniOption extends SelectOption {\n id: string;\n name: string;\n type: OmniType;\n urn?: string;\n count?: number;\n contact?: string;\n scheme?: string;\n}\n\nconst postNameStyle = {\n color: 'var(--color-text-dark)',\n padding: '0px 6px',\n fontSize: '12px'\n};\n\nexport class Omnibox extends Select<OmniOption> {\n @property({ type: String })\n valueKey = 'uuid';\n\n @property({ type: Boolean })\n groups = false;\n\n @property({ type: Boolean })\n contacts = false;\n\n @property({ type: String })\n placeholder = 'Select recipients';\n\n @property({ type: Boolean })\n multi = true;\n\n @property({ type: Boolean })\n searchable = true;\n\n @property({ type: Boolean })\n searchOnFocus = true;\n\n @property({ type: Boolean })\n queryParam = 'search';\n\n public update(changes: PropertyValues): void {\n super.update(changes);\n\n if (\n (changes.has('groups') || changes.has('contacts')) &&\n (this.groups || this.contacts)\n ) {\n let types = '&types=';\n if (this.groups) {\n types += 'g';\n }\n\n if (this.contacts) {\n types += 'c';\n }\n\n this.endpoint = this.endpoint + types;\n }\n }\n\n /** An option in the drop down */\n public renderOptionDefault(option: OmniOption): TemplateResult {\n return html`\n <div style=\"display:flex;\">\n <div style=\"margin-right: 8px\">${this.getIcon(option)}</div>\n <div style=\"flex: 1\">${option.name}</div>\n <div\n style=\"background: rgba(50, 50, 50, 0.15); margin-left: 5px; display: flex; align-items: center; border-radius: 4px\"\n >\n ${this.getPostName(option)}\n </div>\n </div>\n `;\n }\n\n private getPostName(option: OmniOption): TemplateResult {\n const style = { ...postNameStyle };\n\n if (option.urn && option.type === OmniType.Contact) {\n if (option.urn !== option.name) {\n return html`<div style=${styleMap(style)}>${option.urn}</div>`;\n }\n }\n\n if (option.type === OmniType.Group) {\n return html`\n <div style=${styleMap(style)}>${option.count.toLocaleString()}</div>\n `;\n }\n\n return null;\n }\n\n /** Selection in the multi-select select box */\n public renderSelectedItemDefault(option: OmniOption): TemplateResult {\n return html`\n <div\n style=\"flex:1 1 auto; text-overflow:ellipsis; overflow:hidden; white-space:nowrap; display: flex; align-items: stretch; color: var(--color-text-dark); font-size: 12px;\"\n >\n <div style=\"align-self: center; padding: 0px 7px; color: #bbb\">\n ${this.getIcon(option)}\n </div>\n <div\n class=\"name\"\n style=\"align-self: center; padding: 0px; font-size: 12px;\"\n >\n ${option.name}\n </div>\n <div\n style=\"background: rgba(100, 100, 100, 0.05); border-left: 1px solid rgba(100, 100, 100, 0.1); margin-left: 12px; display: flex; align-items: center\"\n >\n ${this.getPostName(option)}\n </div>\n </div>\n `;\n }\n\n private getIcon(option: OmniOption): TemplateResult {\n if (option.type === OmniType.Group) {\n return html`<temba-icon name=\"${Icon.group}\"></temba-icon>`;\n }\n\n if (option.type === OmniType.Contact) {\n return html`<temba-icon name=\"${Icon.contact}\"></temba-icon>`;\n }\n }\n}\n"]}
@@ -1,28 +0,0 @@
1
- export const getScrollParent = (element) => {
2
- if (!element) {
3
- return window;
4
- }
5
- let style = getComputedStyle(element);
6
- const excludeStaticParent = style.position === 'absolute';
7
- const overflowRegex = /(auto|scroll)/;
8
- if (style.position === 'fixed') {
9
- return window;
10
- }
11
- let parent = element.parentElement;
12
- while (parent) {
13
- if (parent.tagName === 'BODY') {
14
- break;
15
- }
16
- style = getComputedStyle(parent);
17
- if (excludeStaticParent && style.position === 'static') {
18
- parent = parent.parentElement;
19
- continue;
20
- }
21
- if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) {
22
- return parent;
23
- }
24
- parent = parent.parentElement;
25
- }
26
- return window;
27
- };
28
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/options/helpers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,EAAE;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC;IAC1D,MAAM,aAAa,GAAG,eAAe,CAAC;IAEtC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAEnC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM;QACR,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,mBAAmB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IACE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EACtE,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","sourcesContent":["export const getScrollParent = (element: HTMLElement) => {\n if (!element) {\n return window;\n }\n let style = getComputedStyle(element);\n const excludeStaticParent = style.position === 'absolute';\n const overflowRegex = /(auto|scroll)/;\n\n if (style.position === 'fixed') {\n return window;\n }\n\n let parent = element.parentElement;\n\n while (parent) {\n if (parent.tagName === 'BODY') {\n break;\n }\n\n style = getComputedStyle(parent);\n\n if (excludeStaticParent && style.position === 'static') {\n parent = parent.parentElement;\n continue;\n }\n\n if (\n overflowRegex.test(style.overflow + style.overflowY + style.overflowX)\n ) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return window;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../src/progress/ProgressBar.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, PropertyValueMap, TemplateResult } from 'lit';\nimport { RapidElement } from '../RapidElement';\nimport { property } from 'lit/decorators.js';\n\nexport class ProgressBar extends RapidElement {\n static styles = css`\n .wrapper {\n display: flex;\n box-sizing: content-box;\n background: #f1f1f1;\n border-radius: var(--curvature);\n box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n min-height: 1.5rem;\n }\n\n .message {\n padding: 0 0.5rem;\n color: rgba(0, 0, 0, 0.4);\n white-space: nowrap;\n }\n\n .meter {\n flex-grow: 1;\n display: flex;\n box-sizing: content-box;\n position: relative;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n padding: 4px;\n min-height: 6px;\n }\n .meter > span {\n display: block;\n height: 100%;\n border-radius: calc(var(--curvature) * 0.8);\n background-color: var(--color-primary-dark);\n background-image: linear-gradient(\n center bottom,\n rgb(43, 194, 83) 37%,\n rgb(84, 240, 83) 69%\n );\n\n position: relative;\n overflow: hidden;\n }\n\n .meter > span:after,\n .animate > span > span {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-image: linear-gradient(\n -45deg,\n rgba(255, 255, 255, 0.2) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.2) 50%,\n rgba(255, 255, 255, 0.2) 75%,\n transparent 75%,\n transparent\n );\n z-index: 1;\n background-size: 50px 50px;\n animation: move 8s linear infinite;\n border-top-right-radius: var(--curvature);\n border-bottom-right-radius: var(--curvature);\n border-top-left-radius: var(--curvature);\n border-bottom-left-radius: var(--curvature);\n overflow: hidden;\n }\n\n .animate > span:after {\n display: none;\n }\n\n @keyframes move {\n 0% {\n background-position: 0 0;\n }\n 100% {\n background-position: 50px 50px;\n }\n }\n\n .meter .complete {\n transition: flex-basis 2s;\n }\n\n .meter .incomplete {\n flex-grow: 1;\n }\n\n .etc {\n display: flex;\n flex-direction: row;\n background: rgba(0, 0, 0, 0.07);\n font-weight: bold;\n white-space: nowrap;\n color: rgba(0, 0, 0, 0.5);\n align-self: center;\n padding: 0px 6px;\n align-self: stretch;\n align-items: center;\n }\n\n .etc > div {\n font-size: 0.7em;\n }\n\n .wrapper *::last-child {\n border-top-right-radius: var(--curvature);\n border-bottom-right-radius: var(--curvature);\n overflow: hidden;\n }\n\n .meter.done > span:after,\n .done .animate > span > span {\n display: none;\n }\n\n .meter.done > span {\n background: rgb(var(--success-rgb));\n }\n `;\n\n @property({ type: Number })\n total = 100;\n\n @property({ type: Number })\n current = 0;\n\n @property({ type: Number })\n pct = 0;\n\n @property({ type: Boolean })\n done = false;\n\n @property({ type: String })\n eta: string;\n\n @property({ type: String, attribute: false })\n estimatedCompletionDate: Date;\n\n @property({ type: Boolean })\n showEstimatedCompletion = false;\n\n @property({ type: Boolean })\n showPercentage = false;\n\n @property({ type: String })\n message: string;\n\n public updated(\n changes: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n if (changes.has('eta') && this.eta) {\n this.estimatedCompletionDate = new Date(this.eta);\n this.showEstimatedCompletion = this.estimatedCompletionDate > new Date();\n }\n\n if (changes.has('current')) {\n const pct = Math.floor(Math.min((this.current / this.total) * 100, 100));\n if (Number.isNaN(pct)) {\n this.showPercentage = false;\n } else {\n this.pct = pct;\n this.showPercentage = true;\n }\n\n this.done = this.pct >= 100;\n }\n }\n\n public render(): TemplateResult {\n return html`<div class=\"wrapper ${this.done ? 'complete' : ''}\">\n <div class=\"meter ${this.done ? 'done' : ''}\">\n ${this.message\n ? html`<div class=\"message\">${this.message}</div>`\n : null}\n <span class=\"complete\" style=\"flex-basis: ${this.pct}%\"></span>\n <div class=\"incomplete\"></div>\n </div>\n\n ${this.showPercentage || this.showEstimatedCompletion\n ? html`<div class=\"etc\">\n <div>\n ${this.estimatedCompletionDate &&\n this.showEstimatedCompletion &&\n !this.done\n ? html`<temba-date\n value=\"${this.estimatedCompletionDate.toISOString()}\"\n display=\"countdown\"\n ></temba-date>`\n : html`${this.pct}%`}\n </div>\n </div>`\n : null}\n\n <slot></slot>\n </div>`;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StartProgress.js","sourceRoot":"","sources":["../../../src/progress/StartProgress.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, PropertyValueMap, TemplateResult } from 'lit';\nimport { RapidElement } from '../RapidElement';\nimport { property } from 'lit/decorators.js';\nimport { fetchResults, showModax } from '../utils';\n\nexport class StartProgress extends RapidElement {\n static styles = css`\n temba-icon[name='close'] {\n cursor: pointer;\n margin: 0 4px;\n }\n\n temba-icon[name='close']:hover {\n color: var(--color-primary-dark);\n }\n `;\n @property({ type: String })\n id: string;\n\n @property({ type: Number })\n current: number;\n\n @property({ type: Number })\n total: number;\n\n @property({ type: Number })\n refreshes: number = 0;\n\n @property({ type: String })\n eta: string;\n\n @property({ type: Boolean })\n complete = false;\n\n @property({ type: Boolean })\n running = false;\n\n @property({ type: String })\n message: string;\n\n @property({ type: String })\n statusEndpoint: string;\n\n @property({ type: String })\n interruptTitle: string;\n\n @property({ type: String })\n interruptEndpoint: string;\n\n public updated(\n changes: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.updated(changes);\n if (changes.has('id')) {\n this.refresh();\n }\n\n // Useful for simulating progress\n /*\n if (changes.has('current')) {\n this.requestUpdate();\n setTimeout(() => {\n this.current = this.current + 100000;\n this.complete = this.current >= this.total;\n this.message = null;\n\n if (this.complete) {\n this.scheduleRemoval();\n }\n }, 5000);\n }*/\n }\n\n public interruptStart(): void {\n showModax(this.interruptTitle, this.interruptEndpoint);\n }\n\n public refresh(): void {\n fetchResults(this.statusEndpoint, this.getHeaders()).then((data: any) => {\n if (data.length > 0) {\n this.refreshes++;\n const start = data[0];\n\n this.current = start.progress.current;\n this.total = start.progress.total;\n\n this.complete =\n start.status == 'Completed' ||\n start.status == 'Failed' ||\n start.status == 'Interrupted';\n\n this.running = start.status === 'Started';\n\n if (start.status === 'Pending') {\n this.message = 'Preparing to start..';\n } else if (start.status === 'Queued') {\n this.message = 'Waiting..';\n } else {\n this.message = null;\n }\n\n if (start.status === 'Started') {\n const elapsed =\n new Date().getTime() - new Date(start.modified_on).getTime();\n const rate = this.current / elapsed;\n\n // only calculate eta if the rate is actually reasonable\n if (rate > 0.1) {\n const eta = new Date(\n new Date().getTime() + (this.total - this.current) / rate\n );\n // Don't bother with estimates months out\n const nextMonth = new Date();\n nextMonth.setMonth(nextMonth.getMonth() + 2);\n if (eta > nextMonth) {\n this.eta = null;\n } else {\n this.eta = eta.toISOString();\n }\n }\n }\n\n if (!this.complete && this.current < this.total) {\n // refresh with a backoff up to 1 minute\n setTimeout(() => {\n this.refresh();\n }, Math.min(1000 * this.refreshes, 60000));\n }\n\n if (this.complete) {\n this.scheduleRemoval();\n }\n }\n });\n }\n\n public scheduleRemoval(): void {\n setTimeout(() => {\n this.remove();\n }, 5000);\n }\n\n public render(): TemplateResult {\n return html`<temba-progress\n total=${this.total}\n current=${this.current}\n eta=${this.eta}\n message=${this.message}\n >\n ${this.running && this.interruptTitle && this.interruptEndpoint\n ? html`<temba-icon\n name=\"close\"\n @click=${this.interruptStart}\n ></temba-icon>`\n : null}\n </temba-progress>`;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Resizer.js","sourceRoot":"","sources":["../../../src/resizer/Resizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyValueMap, css, html } from 'lit';\nimport { getClasses } from '../utils';\nimport { property } from 'lit/decorators.js';\nimport { CustomEventType } from '../interfaces';\nimport { ResizeElement } from '../ResizeElement';\n\nexport class Resizer extends ResizeElement {\n static styles = css`\n :host {\n display: block;\n position: relative;\n width: var(--box-width, 200px);\n --resizer-handle-size: 15px;\n }\n\n .resizer {\n position: absolute;\n right: calc(var(--resizer-handle-size) * -1);\n height: 100%;\n cursor: col-resize;\n padding: 0 calc(var(--resizer-handle-size) / 2);\n z-index: 1;\n }\n\n .resizer-handle {\n position: relative;\n width: 4px;\n background: rgba(0, 0, 0, 0);\n height: 100%;\n }\n\n .resizer:hover .resizer-handle {\n background: rgba(0, 0, 0, 0.05);\n width: 3px;\n margin-right: -1px;\n }\n\n .resizing .resizer-handle {\n background: rgba(0, 0, 0, 0.1) !important;\n width: 3px;\n margin-right: -1px;\n }\n\n slot {\n margin-right: var(--resizer-handle-size);\n background: red;\n }\n `;\n\n initialX: number;\n boxWidth: number;\n\n @property({ type: Number })\n minWidth = 200;\n\n @property({ type: Number })\n maxWidth = 2000;\n\n @property({ type: Boolean })\n resizing = false;\n\n @property({ type: Number })\n currentWidth: number;\n\n constructor() {\n super();\n this.startResize = this.startResize.bind(this);\n this.resize = this.resize.bind(this);\n this.stopResize = this.stopResize.bind(this);\n }\n\n protected updated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>\n ): void {\n super.updated(_changedProperties);\n if (_changedProperties.has('currentWidth')) {\n this.style.setProperty('--box-width', `${this.currentWidth}px`);\n }\n }\n\n public setWidth(width: number) {\n const newWidth = Math.min(Math.max(width, this.minWidth), this.maxWidth);\n this.currentWidth = newWidth;\n }\n\n startResize(e: MouseEvent) {\n this.initialX = e.x;\n this.boxWidth = this.offsetWidth;\n document.body.style.userSelect = 'none';\n this.resizing = true;\n window.addEventListener('mousemove', this.resize);\n window.addEventListener('mouseup', this.stopResize);\n this.requestUpdate();\n }\n\n resize(event: MouseEvent) {\n const dx = event.x - this.initialX;\n this.setWidth(this.boxWidth + dx);\n }\n\n stopResize() {\n document.body.style.userSelect = 'initial';\n window.removeEventListener('mousemove', this.resize);\n window.removeEventListener('mouseup', this.stopResize);\n this.requestUpdate();\n this.resizing = false;\n\n this.fireCustomEvent(CustomEventType.Resized, { width: this.currentWidth });\n }\n\n render() {\n return html`\n <div\n class=${getClasses({ resizer: true, resizing: this.resizing })}\n @mousedown=\"${this.startResize}\"\n >\n <div class=${getClasses({ 'resizer-handle': true })}></div>\n </div>\n <slot></slot>\n `;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PopupSelect.js","sourceRoot":"","sources":["../../../src/select/PopupSelect.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,OAAO,WAAY,SAAQ,YAAY;IAA7C;;QAqBE,gBAAW,GAAW,EAAE,CAAC;QAGzB,aAAQ,GAAW,EAAE,CAAC;IAwBxB,CAAC;IAtBS,YAAY;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;;;;;;4BAMa,IAAI,CAAC,WAAW;yBACnB,IAAI,CAAC,QAAQ;;;wBAGd,IAAI,CAAC,YAAY;;;;;KAKpC,CAAC;IACJ,CAAC;;AA9Ca,kBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;GAiBzB,AAjBmB,CAiBlB;AAGF;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDACF;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACL","sourcesContent":["import { css, html } from 'lit';\nimport { RapidElement } from '../RapidElement';\nimport { property } from 'lit/decorators.js';\n\nexport class PopupSelect extends RapidElement {\n public static styles = css`\n :host {\n }\n\n .dropdown {\n background: #fff;\n border-radius: 0.5em;\n padding: 0.15em;\n border-radius: var(--curvature);\n }\n\n temba-select {\n width: 250px;\n display: block;\n --color-widget-border: transparent;\n --widget-box-shadow: none;\n }\n `;\n\n @property({ type: String })\n placeholder: string = '';\n\n @property({ type: String })\n endpoint: string = '';\n\n private handleChange() {\n this.blur();\n }\n\n public render() {\n return html`\n <div>\n <temba-dropdown>\n <div slot=\"toggle\"><slot name=\"toggle\"></slot></div>\n <div class=\"dropdown\" slot=\"dropdown\">\n <temba-select\n placeholder=${this.placeholder}\n endpoint=${this.endpoint}\n clearable\n searchable\n @change=${this.handleChange}\n ></temba-select>\n </div>\n </temba-dropdown>\n </div>\n `;\n }\n}\n"]}