@nyaruka/temba-components 0.86.0 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/.eslintrc.js +3 -3
  2. package/.prettierrc +6 -0
  3. package/.storybook/main.js +3 -3
  4. package/.storybook/preview.js +2 -2
  5. package/CHANGELOG.md +14 -0
  6. package/CreateIncludesPlugin.js +2 -2
  7. package/demo/index.html +1 -0
  8. package/dist/locales/es.js +1 -1
  9. package/dist/locales/es.js.map +1 -1
  10. package/dist/locales/fr.js +1 -1
  11. package/dist/locales/fr.js.map +1 -1
  12. package/dist/locales/pt.js +1 -1
  13. package/dist/locales/pt.js.map +1 -1
  14. package/dist/temba-components.js +296 -277
  15. package/dist/temba-components.js.map +1 -1
  16. package/out-tsc/src/RapidElement.js +3 -3
  17. package/out-tsc/src/RapidElement.js.map +1 -1
  18. package/out-tsc/src/ResizeElement.js +2 -2
  19. package/out-tsc/src/ResizeElement.js.map +1 -1
  20. package/out-tsc/src/aliaseditor/AliasEditor.js +1 -1
  21. package/out-tsc/src/aliaseditor/AliasEditor.js.map +1 -1
  22. package/out-tsc/src/button/Button.js +1 -1
  23. package/out-tsc/src/button/Button.js.map +1 -1
  24. package/out-tsc/src/charcount/helpers.js +1 -1
  25. package/out-tsc/src/charcount/helpers.js.map +1 -1
  26. package/out-tsc/src/colorpicker/ColorPicker.js +4 -4
  27. package/out-tsc/src/colorpicker/ColorPicker.js.map +1 -1
  28. package/out-tsc/src/completion/Completion.js +2 -2
  29. package/out-tsc/src/completion/Completion.js.map +1 -1
  30. package/out-tsc/src/completion/ExcellentParser.js +1 -1
  31. package/out-tsc/src/completion/ExcellentParser.js.map +1 -1
  32. package/out-tsc/src/completion/helpers.js +8 -8
  33. package/out-tsc/src/completion/helpers.js.map +1 -1
  34. package/out-tsc/src/compose/Compose.js +14 -14
  35. package/out-tsc/src/compose/Compose.js.map +1 -1
  36. package/out-tsc/src/contacts/ContactBadges.js +2 -2
  37. package/out-tsc/src/contacts/ContactBadges.js.map +1 -1
  38. package/out-tsc/src/contacts/ContactChat.js +4 -4
  39. package/out-tsc/src/contacts/ContactChat.js.map +1 -1
  40. package/out-tsc/src/contacts/ContactDetails.js +4 -4
  41. package/out-tsc/src/contacts/ContactDetails.js.map +1 -1
  42. package/out-tsc/src/contacts/ContactFieldEditor.js +3 -3
  43. package/out-tsc/src/contacts/ContactFieldEditor.js.map +1 -1
  44. package/out-tsc/src/contacts/ContactFields.js +2 -2
  45. package/out-tsc/src/contacts/ContactFields.js.map +1 -1
  46. package/out-tsc/src/contacts/ContactHistory.js +21 -19
  47. package/out-tsc/src/contacts/ContactHistory.js.map +1 -1
  48. package/out-tsc/src/contacts/ContactPending.js +4 -4
  49. package/out-tsc/src/contacts/ContactPending.js.map +1 -1
  50. package/out-tsc/src/contacts/ContactTickets.js +8 -8
  51. package/out-tsc/src/contacts/ContactTickets.js.map +1 -1
  52. package/out-tsc/src/contacts/events.js +2 -2
  53. package/out-tsc/src/contacts/events.js.map +1 -1
  54. package/out-tsc/src/contacts/helpers.js +2 -2
  55. package/out-tsc/src/contacts/helpers.js.map +1 -1
  56. package/out-tsc/src/contactsearch/ContactSearch.js +7 -7
  57. package/out-tsc/src/contactsearch/ContactSearch.js.map +1 -1
  58. package/out-tsc/src/date/TembaDate.js +1 -1
  59. package/out-tsc/src/date/TembaDate.js.map +1 -1
  60. package/out-tsc/src/datepicker/DatePicker.js +1 -1
  61. package/out-tsc/src/datepicker/DatePicker.js.map +1 -1
  62. package/out-tsc/src/dialog/Dialog.js +5 -5
  63. package/out-tsc/src/dialog/Dialog.js.map +1 -1
  64. package/out-tsc/src/dialog/Modax.js +8 -8
  65. package/out-tsc/src/dialog/Modax.js.map +1 -1
  66. package/out-tsc/src/dropdown/Dropdown.js +1 -1
  67. package/out-tsc/src/dropdown/Dropdown.js.map +1 -1
  68. package/out-tsc/src/fields/FieldManager.js +6 -6
  69. package/out-tsc/src/fields/FieldManager.js.map +1 -1
  70. package/out-tsc/src/imagepicker/ImagePicker.js +4 -4
  71. package/out-tsc/src/imagepicker/ImagePicker.js.map +1 -1
  72. package/out-tsc/src/interfaces.js.map +1 -1
  73. package/out-tsc/src/label/Label.js +1 -1
  74. package/out-tsc/src/label/Label.js.map +1 -1
  75. package/out-tsc/src/leafletmap/LeafletMap.js +6 -6
  76. package/out-tsc/src/leafletmap/LeafletMap.js.map +1 -1
  77. package/out-tsc/src/leafletmap/helpers.js +2 -2
  78. package/out-tsc/src/leafletmap/helpers.js.map +1 -1
  79. package/out-tsc/src/lightbox/Lightbox.js +2 -2
  80. package/out-tsc/src/lightbox/Lightbox.js.map +1 -1
  81. package/out-tsc/src/list/ContentMenu.js +8 -8
  82. package/out-tsc/src/list/ContentMenu.js.map +1 -1
  83. package/out-tsc/src/list/NotificationList.js +7 -3
  84. package/out-tsc/src/list/NotificationList.js.map +1 -1
  85. package/out-tsc/src/list/RunList.js +1 -1
  86. package/out-tsc/src/list/RunList.js.map +1 -1
  87. package/out-tsc/src/list/SortableList.js +6 -6
  88. package/out-tsc/src/list/SortableList.js.map +1 -1
  89. package/out-tsc/src/list/TembaList.js +5 -5
  90. package/out-tsc/src/list/TembaList.js.map +1 -1
  91. package/out-tsc/src/list/TembaMenu.js +22 -22
  92. package/out-tsc/src/list/TembaMenu.js.map +1 -1
  93. package/out-tsc/src/loading/Loading.js +1 -1
  94. package/out-tsc/src/loading/Loading.js.map +1 -1
  95. package/out-tsc/src/locales/es.js +1 -1
  96. package/out-tsc/src/locales/es.js.map +1 -1
  97. package/out-tsc/src/locales/fr.js +1 -1
  98. package/out-tsc/src/locales/fr.js.map +1 -1
  99. package/out-tsc/src/locales/pt.js +1 -1
  100. package/out-tsc/src/locales/pt.js.map +1 -1
  101. package/out-tsc/src/omnibox/Omnibox.js +1 -1
  102. package/out-tsc/src/omnibox/Omnibox.js.map +1 -1
  103. package/out-tsc/src/options/Options.js +9 -9
  104. package/out-tsc/src/options/Options.js.map +1 -1
  105. package/out-tsc/src/remote/Remote.js +1 -1
  106. package/out-tsc/src/remote/Remote.js.map +1 -1
  107. package/out-tsc/src/select/Select.js +18 -18
  108. package/out-tsc/src/select/Select.js.map +1 -1
  109. package/out-tsc/src/sms/gsmsplitter.js +8 -8
  110. package/out-tsc/src/sms/gsmsplitter.js.map +1 -1
  111. package/out-tsc/src/sms/gsmvalidator.js +1 -1
  112. package/out-tsc/src/sms/gsmvalidator.js.map +1 -1
  113. package/out-tsc/src/sms/index.js +2 -2
  114. package/out-tsc/src/sms/index.js.map +1 -1
  115. package/out-tsc/src/sms/unicodesplitter.js +8 -8
  116. package/out-tsc/src/sms/unicodesplitter.js.map +1 -1
  117. package/out-tsc/src/store/Store.js +10 -10
  118. package/out-tsc/src/store/Store.js.map +1 -1
  119. package/out-tsc/src/store/StoreElement.js +2 -2
  120. package/out-tsc/src/store/StoreElement.js.map +1 -1
  121. package/out-tsc/src/tabpane/TabPane.js +4 -4
  122. package/out-tsc/src/tabpane/TabPane.js.map +1 -1
  123. package/out-tsc/src/templates/TemplateEditor.js +9 -9
  124. package/out-tsc/src/templates/TemplateEditor.js.map +1 -1
  125. package/out-tsc/src/textinput/TextInput.js +1 -1
  126. package/out-tsc/src/textinput/TextInput.js.map +1 -1
  127. package/out-tsc/src/thumbnail/Thumbnail.js +5 -5
  128. package/out-tsc/src/thumbnail/Thumbnail.js.map +1 -1
  129. package/out-tsc/src/tip/Tip.js +3 -3
  130. package/out-tsc/src/tip/Tip.js.map +1 -1
  131. package/out-tsc/src/utils/index.js +21 -21
  132. package/out-tsc/src/utils/index.js.map +1 -1
  133. package/out-tsc/src/vectoricon/VectorIcon.js +2 -2
  134. package/out-tsc/src/vectoricon/VectorIcon.js.map +1 -1
  135. package/out-tsc/src/vectoricon/index.js +2 -0
  136. package/out-tsc/src/vectoricon/index.js.map +1 -1
  137. package/out-tsc/src/webchat/WebChat.js +234 -81
  138. package/out-tsc/src/webchat/WebChat.js.map +1 -1
  139. package/out-tsc/src/webchat/assets.js +2 -0
  140. package/out-tsc/src/webchat/assets.js.map +1 -0
  141. package/out-tsc/src/webchat/index.js.map +1 -1
  142. package/out-tsc/test/temba-alert.test.js +1 -1
  143. package/out-tsc/test/temba-alert.test.js.map +1 -1
  144. package/out-tsc/test/temba-checkbox.test.js.map +1 -1
  145. package/out-tsc/test/temba-color-picker.test.js +4 -4
  146. package/out-tsc/test/temba-color-picker.test.js.map +1 -1
  147. package/out-tsc/test/temba-compose.test.js +50 -54
  148. package/out-tsc/test/temba-compose.test.js.map +1 -1
  149. package/out-tsc/test/temba-contact-badges.test.js +2 -2
  150. package/out-tsc/test/temba-contact-badges.test.js.map +1 -1
  151. package/out-tsc/test/temba-contact-chat.test.js +25 -38
  152. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  153. package/out-tsc/test/temba-contact-details.test.js +2 -2
  154. package/out-tsc/test/temba-contact-details.test.js.map +1 -1
  155. package/out-tsc/test/temba-contact-fields.test.js +4 -4
  156. package/out-tsc/test/temba-contact-fields.test.js.map +1 -1
  157. package/out-tsc/test/temba-contact-history.test.js +3 -3
  158. package/out-tsc/test/temba-contact-history.test.js.map +1 -1
  159. package/out-tsc/test/temba-contact-search.test.js +7 -7
  160. package/out-tsc/test/temba-contact-search.test.js.map +1 -1
  161. package/out-tsc/test/temba-contact-tickets.test.js +3 -3
  162. package/out-tsc/test/temba-contact-tickets.test.js.map +1 -1
  163. package/out-tsc/test/temba-content-menu.test.js +7 -7
  164. package/out-tsc/test/temba-content-menu.test.js.map +1 -1
  165. package/out-tsc/test/temba-date.test.js +3 -3
  166. package/out-tsc/test/temba-date.test.js.map +1 -1
  167. package/out-tsc/test/temba-datepicker.test.js +1 -1
  168. package/out-tsc/test/temba-datepicker.test.js.map +1 -1
  169. package/out-tsc/test/temba-field-manager.test.js +1 -3
  170. package/out-tsc/test/temba-field-manager.test.js.map +1 -1
  171. package/out-tsc/test/temba-label.test.js +6 -6
  172. package/out-tsc/test/temba-label.test.js.map +1 -1
  173. package/out-tsc/test/temba-lightbox.test.js +2 -2
  174. package/out-tsc/test/temba-lightbox.test.js.map +1 -1
  175. package/out-tsc/test/temba-list.test.js +6 -6
  176. package/out-tsc/test/temba-list.test.js.map +1 -1
  177. package/out-tsc/test/temba-menu.test.js +4 -5
  178. package/out-tsc/test/temba-menu.test.js.map +1 -1
  179. package/out-tsc/test/temba-modax.test.js +3 -3
  180. package/out-tsc/test/temba-modax.test.js.map +1 -1
  181. package/out-tsc/test/temba-options.test.js +1 -1
  182. package/out-tsc/test/temba-options.test.js.map +1 -1
  183. package/out-tsc/test/temba-select.test.js +17 -17
  184. package/out-tsc/test/temba-select.test.js.map +1 -1
  185. package/out-tsc/test/temba-sortable-list.test.js +1 -1
  186. package/out-tsc/test/temba-sortable-list.test.js.map +1 -1
  187. package/out-tsc/test/temba-textinput.test.js +2 -2
  188. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  189. package/out-tsc/test/temba-tip.test.js +4 -4
  190. package/out-tsc/test/temba-tip.test.js.map +1 -1
  191. package/out-tsc/test/utils.test.js +8 -8
  192. package/out-tsc/test/utils.test.js.map +1 -1
  193. package/package.json +6 -15
  194. package/src/RapidElement.ts +3 -3
  195. package/src/ResizeElement.ts +2 -2
  196. package/src/aliaseditor/AliasEditor.ts +1 -2
  197. package/src/button/Button.ts +1 -1
  198. package/src/charcount/helpers.ts +1 -1
  199. package/src/colorpicker/ColorPicker.ts +4 -4
  200. package/src/completion/Completion.ts +2 -2
  201. package/src/completion/ExcellentParser.ts +1 -1
  202. package/src/completion/helpers.ts +9 -9
  203. package/src/compose/Compose.ts +18 -16
  204. package/src/contacts/ContactBadges.ts +2 -2
  205. package/src/contacts/ContactChat.ts +4 -4
  206. package/src/contacts/ContactDetails.ts +4 -4
  207. package/src/contacts/ContactFieldEditor.ts +4 -4
  208. package/src/contacts/ContactFields.ts +2 -2
  209. package/src/contacts/ContactHistory.ts +25 -22
  210. package/src/contacts/ContactPending.ts +4 -4
  211. package/src/contacts/ContactTickets.ts +9 -9
  212. package/src/contacts/events.ts +3 -3
  213. package/src/contacts/helpers.ts +2 -2
  214. package/src/contactsearch/ContactSearch.ts +9 -9
  215. package/src/date/TembaDate.ts +1 -1
  216. package/src/datepicker/DatePicker.ts +1 -1
  217. package/src/dialog/Dialog.ts +6 -6
  218. package/src/dialog/Modax.ts +8 -8
  219. package/src/dropdown/Dropdown.ts +1 -2
  220. package/src/emojis.json +1882 -1
  221. package/src/fields/FieldManager.ts +6 -7
  222. package/src/imagepicker/ImagePicker.ts +4 -4
  223. package/src/interfaces.ts +4 -4
  224. package/src/label/Label.ts +1 -1
  225. package/src/leafletmap/LeafletMap.ts +6 -6
  226. package/src/leafletmap/helpers.ts +2 -2
  227. package/src/lightbox/Lightbox.ts +2 -2
  228. package/src/list/ContentMenu.ts +9 -9
  229. package/src/list/NotificationList.ts +7 -3
  230. package/src/list/RunList.ts +1 -1
  231. package/src/list/SortableList.ts +6 -6
  232. package/src/list/TembaList.ts +5 -5
  233. package/src/list/TembaMenu.ts +23 -23
  234. package/src/loading/Loading.ts +1 -1
  235. package/src/locales/es.ts +1 -1
  236. package/src/locales/fr.ts +1 -1
  237. package/src/locales/pt.ts +1 -1
  238. package/src/omnibox/Omnibox.ts +2 -2
  239. package/src/options/Options.ts +9 -9
  240. package/src/remote/Remote.ts +1 -1
  241. package/src/select/Select.ts +19 -19
  242. package/src/sms/gsmsplitter.ts +8 -8
  243. package/src/sms/gsmvalidator.ts +1 -1
  244. package/src/sms/index.ts +2 -2
  245. package/src/sms/unicodesplitter.ts +8 -8
  246. package/src/store/Store.ts +10 -10
  247. package/src/store/StoreElement.ts +2 -2
  248. package/src/tabpane/TabPane.ts +4 -4
  249. package/src/templates/TemplateEditor.ts +9 -9
  250. package/src/textinput/TextInput.ts +2 -2
  251. package/src/thumbnail/Thumbnail.ts +5 -5
  252. package/src/tip/Tip.ts +3 -3
  253. package/src/utils/index.ts +24 -24
  254. package/src/vectoricon/VectorIcon.ts +2 -2
  255. package/src/vectoricon/index.ts +3 -1
  256. package/src/webchat/WebChat.ts +272 -87
  257. package/src/webchat/assets.ts +2 -0
  258. package/src/webchat/index.ts +1 -1
  259. package/svg.js +28 -29
  260. package/test/temba-alert.test.ts +1 -1
  261. package/test/temba-checkbox.test.ts +1 -1
  262. package/test/temba-color-picker.test.ts +4 -4
  263. package/test/temba-compose.test.ts +50 -55
  264. package/test/temba-contact-badges.test.ts +2 -2
  265. package/test/temba-contact-chat.test.ts +26 -46
  266. package/test/temba-contact-details.test.ts +2 -8
  267. package/test/temba-contact-fields.test.ts +4 -11
  268. package/test/temba-contact-history.test.ts +3 -3
  269. package/test/temba-contact-search.test.ts +7 -13
  270. package/test/temba-contact-tickets.test.ts +3 -3
  271. package/test/temba-content-menu.test.ts +7 -7
  272. package/test/temba-date.test.ts +3 -3
  273. package/test/temba-datepicker.test.ts +1 -1
  274. package/test/temba-field-manager.test.ts +1 -4
  275. package/test/temba-label.test.ts +6 -6
  276. package/test/temba-lightbox.test.ts +2 -2
  277. package/test/temba-list.test.ts +6 -6
  278. package/test/temba-menu.test.ts +4 -5
  279. package/test/temba-modax.test.ts +3 -3
  280. package/test/temba-options.test.ts +1 -1
  281. package/test/temba-select.test.ts +17 -17
  282. package/test/temba-sortable-list.test.ts +1 -1
  283. package/test/temba-textinput.test.ts +2 -2
  284. package/test/temba-tip.test.ts +5 -5
  285. package/test/utils.test.ts +8 -9
@@ -11,7 +11,7 @@ const getList = async (attrs = {}) => {
11
11
  if (!list.endpoint) {
12
12
  return list;
13
13
  }
14
- return new Promise(resolve => {
14
+ return new Promise((resolve) => {
15
15
  list.addEventListener(CustomEventType.FetchComplete, async () => {
16
16
  resolve(list);
17
17
  }, { once: true });
@@ -35,16 +35,16 @@ describe('temba-list', () => {
35
35
  });
36
36
  it('renders with endpoint', async () => {
37
37
  const list = await getList({
38
- endpoint: '/test-assets/list/temba-list.json',
38
+ endpoint: '/test-assets/list/temba-list.json'
39
39
  });
40
40
  expect(list.items.length).to.equal(4);
41
41
  await assertScreenshot('list/items', getClip(list));
42
42
  });
43
43
  it('fires change event on cursor change', async () => {
44
44
  const list = await getList({
45
- endpoint: '/test-assets/list/temba-list.json',
45
+ endpoint: '/test-assets/list/temba-list.json'
46
46
  });
47
- const changeTest = new Promise(resolve => {
47
+ const changeTest = new Promise((resolve) => {
48
48
  list.addEventListener('change', () => {
49
49
  resolve();
50
50
  });
@@ -55,12 +55,12 @@ describe('temba-list', () => {
55
55
  });
56
56
  it('fires change when first element changes after fetch', async () => {
57
57
  const list = await getList({
58
- endpoint: '/test-assets/list/temba-list.json',
58
+ endpoint: '/test-assets/list/temba-list.json'
59
59
  });
60
60
  // spy on change event
61
61
  const changeEvent = sinon.spy();
62
62
  list.addEventListener('change', changeEvent);
63
- const refreshTest = new Promise(resolve => {
63
+ const refreshTest = new Promise((resolve) => {
64
64
  list.addEventListener(CustomEventType.FetchComplete, () => {
65
65
  resolve();
66
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"temba-list.test.js","sourceRoot":"","sources":["../../test/temba-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, expect } from '@open-wc/testing';\nimport * as sinon from 'sinon';\nimport { useFakeTimers } from 'sinon';\nimport { CustomEventType } from '../src/interfaces';\nimport { TembaList } from '../src/list/TembaList';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\n\nlet clock: any;\n\nconst TAG = 'temba-list';\nconst getList = async (attrs: any = {}) => {\n const list = (await getComponent(TAG, attrs)) as TembaList;\n\n if (!list.endpoint) {\n return list;\n }\n\n return new Promise<TembaList>(resolve => {\n list.addEventListener(\n CustomEventType.FetchComplete,\n async () => {\n resolve(list);\n },\n { once: true }\n );\n });\n};\n\ndescribe('temba-list', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const list: TembaList = await getList();\n assert.instanceOf(list, TembaList);\n expect(list.items.length).to.equal(0);\n });\n\n it('shows empty list with bad endpoint', async () => {\n const list: TembaList = await getList({ endpoint: 'expected-404.json' });\n expect(list.items.length).to.equal(0);\n });\n\n it('renders with endpoint', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json',\n });\n expect(list.items.length).to.equal(4);\n await assertScreenshot('list/items', getClip(list));\n });\n\n it('fires change event on cursor change', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json',\n });\n\n const changeTest = new Promise<void>(resolve => {\n list.addEventListener('change', () => {\n resolve();\n });\n });\n\n list.cursorIndex = 1;\n\n await changeTest;\n await assertScreenshot('list/items-selected', getClip(list));\n });\n\n it('fires change when first element changes after fetch', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json',\n });\n\n // spy on change event\n const changeEvent = sinon.spy();\n list.addEventListener('change', changeEvent);\n\n const refreshTest = new Promise<void>(resolve => {\n list.addEventListener(CustomEventType.FetchComplete, () => {\n resolve();\n });\n });\n\n list.endpoint = '/test-assets/list/temba-list-shorter.json';\n await refreshTest;\n\n assert(changeEvent.called, 'change event not fired');\n await assertScreenshot('list/items-updated', getClip(list));\n });\n});\n"]}
1
+ {"version":3,"file":"temba-list.test.js","sourceRoot":"","sources":["../../test/temba-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, expect } from '@open-wc/testing';\nimport * as sinon from 'sinon';\nimport { useFakeTimers } from 'sinon';\nimport { CustomEventType } from '../src/interfaces';\nimport { TembaList } from '../src/list/TembaList';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\n\nlet clock: any;\n\nconst TAG = 'temba-list';\nconst getList = async (attrs: any = {}) => {\n const list = (await getComponent(TAG, attrs)) as TembaList;\n\n if (!list.endpoint) {\n return list;\n }\n\n return new Promise<TembaList>((resolve) => {\n list.addEventListener(\n CustomEventType.FetchComplete,\n async () => {\n resolve(list);\n },\n { once: true }\n );\n });\n};\n\ndescribe('temba-list', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const list: TembaList = await getList();\n assert.instanceOf(list, TembaList);\n expect(list.items.length).to.equal(0);\n });\n\n it('shows empty list with bad endpoint', async () => {\n const list: TembaList = await getList({ endpoint: 'expected-404.json' });\n expect(list.items.length).to.equal(0);\n });\n\n it('renders with endpoint', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json'\n });\n expect(list.items.length).to.equal(4);\n await assertScreenshot('list/items', getClip(list));\n });\n\n it('fires change event on cursor change', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json'\n });\n\n const changeTest = new Promise<void>((resolve) => {\n list.addEventListener('change', () => {\n resolve();\n });\n });\n\n list.cursorIndex = 1;\n\n await changeTest;\n await assertScreenshot('list/items-selected', getClip(list));\n });\n\n it('fires change when first element changes after fetch', async () => {\n const list: TembaList = await getList({\n endpoint: '/test-assets/list/temba-list.json'\n });\n\n // spy on change event\n const changeEvent = sinon.spy();\n list.addEventListener('change', changeEvent);\n\n const refreshTest = new Promise<void>((resolve) => {\n list.addEventListener(CustomEventType.FetchComplete, () => {\n resolve();\n });\n });\n\n list.endpoint = '/test-assets/list/temba-list-shorter.json';\n await refreshTest;\n\n assert(changeEvent.called, 'change event not fired');\n await assertScreenshot('list/items-updated', getClip(list));\n });\n});\n"]}
@@ -9,7 +9,6 @@ const getMenu = async (attrs = {}, width = 0) => {
9
9
  await menu.httpComplete;
10
10
  return menu;
11
11
  };
12
- const IDX_CHOOSER = 0;
13
12
  const IDX_TASKS = 1;
14
13
  const IDX_SCHEDULE = 2;
15
14
  describe('temba-menu', () => {
@@ -20,14 +19,14 @@ describe('temba-menu', () => {
20
19
  });
21
20
  it('renders with endpoint', async () => {
22
21
  const menu = await getMenu({
23
- endpoint: '/test-assets/menu/menu-root.json',
22
+ endpoint: '/test-assets/menu/menu-root.json'
24
23
  });
25
24
  expect(menu.root.items.length).to.equal(3);
26
25
  await assertScreenshot('menu/menu-root', getClip(menu));
27
26
  });
28
27
  it('supports submenu', async () => {
29
28
  const menu = await getMenu({
30
- endpoint: '/test-assets/menu/menu-root.json',
29
+ endpoint: '/test-assets/menu/menu-root.json'
31
30
  });
32
31
  // click our tasks
33
32
  menu.getDiv('#menu-tasks').click();
@@ -41,7 +40,7 @@ describe('temba-menu', () => {
41
40
  // setting focus just shows the selection, it does
42
41
  // not trigger events such as loading or dispatching
43
42
  const menu = await getMenu({
44
- endpoint: '/test-assets/menu/menu-root.json',
43
+ endpoint: '/test-assets/menu/menu-root.json'
45
44
  });
46
45
  // click our tasks
47
46
  menu.getDiv('#menu-tasks').click();
@@ -63,7 +62,7 @@ describe('temba-menu', () => {
63
62
  it('refreshes', async () => {
64
63
  // the menu should refresh along the selection path without destroying state
65
64
  const menu = await getMenu({
66
- endpoint: '/test-assets/menu/menu-root.json',
65
+ endpoint: '/test-assets/menu/menu-root.json'
67
66
  });
68
67
  // click our tasks
69
68
  menu.getDiv('#menu-tasks').click();
@@ -1 +1 @@
1
- {"version":3,"file":"temba-menu.test.js","sourceRoot":"","sources":["../../test/temba-menu.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, expect } from '@open-wc/testing';\n\nimport { TembaMenu } from '../src/list/TembaMenu';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\nimport { extractInitials } from '../src/utils/index';\n\nconst TAG = 'temba-menu';\nconst getMenu = async (attrs: any = {}, width = 0) => {\n const menu = (await getComponent(\n TAG,\n attrs,\n '',\n width,\n 0,\n 'display:inline-block'\n )) as TembaMenu;\n\n // wait for the fetch\n await menu.httpComplete;\n\n return menu;\n};\n\nconst IDX_CHOOSER = 0;\nconst IDX_TASKS = 1;\nconst IDX_SCHEDULE = 2;\n\ndescribe('temba-menu', () => {\n it('can be created', async () => {\n const list: TembaMenu = await getMenu();\n assert.instanceOf(list, TembaMenu);\n expect(list.root).is.undefined;\n });\n\n it('renders with endpoint', async () => {\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json',\n });\n\n expect(menu.root.items.length).to.equal(3);\n await assertScreenshot('menu/menu-root', getClip(menu));\n });\n\n it('supports submenu', async () => {\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json',\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n await menu.httpComplete;\n menu.requestUpdate();\n // await menu.updateComplete;\n\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-submenu', getClip(menu));\n });\n\n it('sets focus', async () => {\n // setting focus just shows the selection, it does\n // not trigger events such as loading or dispatching\n\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json',\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n await menu.httpComplete;\n\n // now set the focus manually\n menu.setFocusedItem('schedule');\n\n // setting focus does NOT fetch items\n expect(menu.root.items[IDX_SCHEDULE].items).to.equal(undefined);\n\n // now load the items explicitly\n menu.getDiv('#menu-schedule').click();\n await menu.httpComplete;\n expect(menu.root.items[IDX_SCHEDULE].items.length).to.equal(3);\n\n await assertScreenshot('menu/menu-focused-with items', getClip(menu));\n\n menu.setFocusedItem('tasks');\n await assertScreenshot('menu/menu-tasks', getClip(menu));\n\n menu.setFocusedItem('tasks/todo');\n await assertScreenshot('menu/menu-tasks-nextup', getClip(menu));\n });\n\n it('refreshes', async () => {\n // the menu should refresh along the selection path without destroying state\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json',\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n menu.requestUpdate();\n await menu.httpComplete;\n // await menu.updateComplete;\n\n // now click on the todo\n menu.getDiv('#menu-todo').click();\n menu.requestUpdate();\n // await menu.updateComplete;\n\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-refresh-1', getClip(menu));\n\n // now refresh!\n menu.refresh();\n await menu.httpComplete;\n\n // we should still have our task items\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-refresh-2', getClip(menu));\n });\n});\n\ndescribe('avatars', () => {\n it('can generate initials from text', async () => {\n assert.equal(extractInitials(''), '?');\n assert.equal(extractInitials('~~'), '?');\n assert.equal(extractInitials('X'), 'X');\n assert.equal(extractInitials('鸡'), '鸡');\n assert.equal(extractInitials('Acme'), 'AC');\n assert.equal(extractInitials('Cool Flows'), 'CF');\n assert.equal(extractInitials('Very Cool Flows'), 'VC');\n assert.equal(extractInitials('1Password'), '1P');\n assert.equal(extractInitials('تدفقات باردة'), 'تب');\n assert.equal(extractInitials('U-Report'), 'UR');\n assert.equal(extractInitials('U-Report Nigeria'), 'UN');\n assert.equal(extractInitials('al-Jazeera'), 'AJ');\n assert.equal(extractInitials('al-Jazeera News'), 'AN');\n assert.equal(extractInitials('UNICEF - Ireland'), 'UI');\n assert.equal(extractInitials('Dave & Busters'), 'DB');\n assert.equal(extractInitials('Dave and Busters'), 'DB');\n });\n});\n"]}
1
+ {"version":3,"file":"temba-menu.test.js","sourceRoot":"","sources":["../../test/temba-menu.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC;AACzB,MAAM,OAAO,GAAG,KAAK,EAAE,QAAa,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,CAAC,MAAM,YAAY,CAC9B,GAAG,EACH,KAAK,EACL,EAAE,EACF,KAAK,EACL,CAAC,EACD,sBAAsB,CACvB,CAAc,CAAC;IAEhB,qBAAqB;IACrB,MAAM,IAAI,CAAC,YAAY,CAAC;IAExB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,IAAI,GAAc,MAAM,OAAO,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,IAAI,GAAc,MAAM,OAAO,CAAC;YACpC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,IAAI,GAAc,MAAM,OAAO,CAAC;YACpC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,YAAY,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,6BAA6B;QAE7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC1B,kDAAkD;QAClD,oDAAoD;QAEpD,MAAM,IAAI,GAAc,MAAM,OAAO,CAAC;YACpC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,YAAY,CAAC;QAExB,6BAA6B;QAC7B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEhC,qCAAqC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEhE,gCAAgC;QAChC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,YAAY,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,gBAAgB,CAAC,8BAA8B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAClC,MAAM,gBAAgB,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACzB,4EAA4E;QAC5E,MAAM,IAAI,GAAc,MAAM,OAAO,CAAC;YACpC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,YAAY,CAAC;QACxB,6BAA6B;QAE7B,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,6BAA6B;QAE7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,gBAAgB,CAAC,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7D,eAAe;QACf,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,YAAY,CAAC;QAExB,sCAAsC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,gBAAgB,CAAC,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { assert, expect } from '@open-wc/testing';\n\nimport { TembaMenu } from '../src/list/TembaMenu';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\nimport { extractInitials } from '../src/utils/index';\n\nconst TAG = 'temba-menu';\nconst getMenu = async (attrs: any = {}, width = 0) => {\n const menu = (await getComponent(\n TAG,\n attrs,\n '',\n width,\n 0,\n 'display:inline-block'\n )) as TembaMenu;\n\n // wait for the fetch\n await menu.httpComplete;\n\n return menu;\n};\n\nconst IDX_TASKS = 1;\nconst IDX_SCHEDULE = 2;\n\ndescribe('temba-menu', () => {\n it('can be created', async () => {\n const list: TembaMenu = await getMenu();\n assert.instanceOf(list, TembaMenu);\n expect(list.root).is.undefined;\n });\n\n it('renders with endpoint', async () => {\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json'\n });\n\n expect(menu.root.items.length).to.equal(3);\n await assertScreenshot('menu/menu-root', getClip(menu));\n });\n\n it('supports submenu', async () => {\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json'\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n await menu.httpComplete;\n menu.requestUpdate();\n // await menu.updateComplete;\n\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-submenu', getClip(menu));\n });\n\n it('sets focus', async () => {\n // setting focus just shows the selection, it does\n // not trigger events such as loading or dispatching\n\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json'\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n await menu.httpComplete;\n\n // now set the focus manually\n menu.setFocusedItem('schedule');\n\n // setting focus does NOT fetch items\n expect(menu.root.items[IDX_SCHEDULE].items).to.equal(undefined);\n\n // now load the items explicitly\n menu.getDiv('#menu-schedule').click();\n await menu.httpComplete;\n expect(menu.root.items[IDX_SCHEDULE].items.length).to.equal(3);\n\n await assertScreenshot('menu/menu-focused-with items', getClip(menu));\n\n menu.setFocusedItem('tasks');\n await assertScreenshot('menu/menu-tasks', getClip(menu));\n\n menu.setFocusedItem('tasks/todo');\n await assertScreenshot('menu/menu-tasks-nextup', getClip(menu));\n });\n\n it('refreshes', async () => {\n // the menu should refresh along the selection path without destroying state\n const menu: TembaMenu = await getMenu({\n endpoint: '/test-assets/menu/menu-root.json'\n });\n\n // click our tasks\n menu.getDiv('#menu-tasks').click();\n menu.requestUpdate();\n await menu.httpComplete;\n // await menu.updateComplete;\n\n // now click on the todo\n menu.getDiv('#menu-todo').click();\n menu.requestUpdate();\n // await menu.updateComplete;\n\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-refresh-1', getClip(menu));\n\n // now refresh!\n menu.refresh();\n await menu.httpComplete;\n\n // we should still have our task items\n expect(menu.root.items[IDX_TASKS].items.length).to.equal(3);\n await assertScreenshot('menu/menu-refresh-2', getClip(menu));\n });\n});\n\ndescribe('avatars', () => {\n it('can generate initials from text', async () => {\n assert.equal(extractInitials(''), '?');\n assert.equal(extractInitials('~~'), '?');\n assert.equal(extractInitials('X'), 'X');\n assert.equal(extractInitials('鸡'), '鸡');\n assert.equal(extractInitials('Acme'), 'AC');\n assert.equal(extractInitials('Cool Flows'), 'CF');\n assert.equal(extractInitials('Very Cool Flows'), 'VC');\n assert.equal(extractInitials('1Password'), '1P');\n assert.equal(extractInitials('تدفقات باردة'), 'تب');\n assert.equal(extractInitials('U-Report'), 'UR');\n assert.equal(extractInitials('U-Report Nigeria'), 'UN');\n assert.equal(extractInitials('al-Jazeera'), 'AJ');\n assert.equal(extractInitials('al-Jazeera News'), 'AN');\n assert.equal(extractInitials('UNICEF - Ireland'), 'UI');\n assert.equal(extractInitials('Dave & Busters'), 'DB');\n assert.equal(extractInitials('Dave and Busters'), 'DB');\n });\n});\n"]}
@@ -17,7 +17,7 @@ const getButtons = (modax, type = null) => {
17
17
  .shadowRoot.querySelectorAll(type ? `temba-button[${type}='']` : 'temba-button');
18
18
  };
19
19
  const open = async (modax) => {
20
- return new Promise((resolve, reject) => {
20
+ return new Promise((resolve) => {
21
21
  modax.addEventListener(CustomEventType.Loaded, async (event) => {
22
22
  await clock.runAll();
23
23
  resolve(event.detail);
@@ -106,9 +106,9 @@ describe('temba-modax', () => {
106
106
  expect(primary.name).equals('Save Everything');
107
107
  // click the submit button
108
108
  mockPOST(/\/test-assets\/modax\/form\.html/, 'arst', {
109
- 'Temba-Success': 'hide',
109
+ 'Temba-Success': 'hide'
110
110
  });
111
- const hideTest = new Promise(resolve => {
111
+ const hideTest = new Promise((resolve) => {
112
112
  modax.addEventListener(CustomEventType.Submitted, () => {
113
113
  expect(modax.open).equals(false, 'Modal still visible');
114
114
  resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"temba-modax.test.js","sourceRoot":"","sources":["../../test/temba-modax.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { useFakeTimers } from 'sinon';\nimport { Button } from '../src/button/Button';\nimport { Modax } from '../src/dialog/Modax';\nimport { CustomEventType } from '../src/interfaces';\nimport { assertScreenshot, getClip, mockPOST } from './utils.test';\n\nlet clock: any;\n\nconst getModaxHTML = (endpoint: string): string => {\n return `\n <temba-modax header=\"Hello Modax\" endpoint=\"${endpoint}\">\n <div>Open Me</div>\n </temba-modax>\n `;\n};\n\nconst getButtons = (modax: Modax, type: string = null) => {\n return modax.shadowRoot\n .querySelector('temba-dialog')\n .shadowRoot.querySelectorAll(\n type ? `temba-button[${type}='']` : 'temba-button'\n );\n};\n\nconst open = async (modax: Modax) => {\n return new Promise((resolve: any, reject: any) => {\n modax.addEventListener(\n CustomEventType.Loaded,\n async (event: CustomEvent) => {\n await clock.runAll();\n resolve(event.detail);\n }\n );\n\n modax.addEventListener(\n CustomEventType.Redirected,\n async (event: CustomEvent) => {\n await clock.runAll();\n resolve(event.detail);\n }\n );\n\n modax.open = true;\n });\n};\n\nconst clickPrimary = async (modax: Modax) => {\n const buttons = getButtons(modax);\n\n if (buttons.length > 0) {\n let primary = buttons[0] as Button;\n\n if (buttons.length > 1) {\n // look for our primary flag\n buttons.forEach((button: Button) => {\n if (button.primary) {\n primary = button;\n }\n });\n }\n\n expect(primary).not.equals(undefined, 'Missing primary button');\n primary.click();\n }\n};\n\nconst getDialogClip = (modax: Modax) => {\n const dialog = modax.shadowRoot.querySelector('temba-dialog');\n return getClip(\n dialog.shadowRoot.querySelector('.dialog-container') as HTMLElement\n );\n};\n\ndescribe('temba-modax', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n assert.instanceOf(modax, Modax);\n });\n\n it('opens', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n\n await open(modax);\n expect(modax.open).equals(true);\n\n // Now our body should have our endpoint text\n expect(modax.getBody().innerHTML).to.contain('Hello World');\n\n await assertScreenshot('modax/simple', getDialogClip(modax));\n });\n\n it('fetches forms', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/form.html')\n );\n expect(modax.open).to.equal(false);\n await open(modax);\n\n expect(modax.open).to.equal(true);\n\n expect(modax.buttons[1].name).to.equal('Save Everything');\n expect(modax.buttons[0].name).to.equal('Cancel');\n\n await assertScreenshot('modax/form', getDialogClip(modax));\n });\n\n it('reverts primary name on reuse', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n\n // await click('temba-modax');\n await open(modax);\n expect(modax.open).equals(true);\n\n // should only have one button, okay\n let buttons = getButtons(modax);\n expect(buttons.length).equals(1);\n\n // close our dialog\n await clickPrimary(modax);\n expect(modax.open).equals(false);\n\n // now fetch form from the same modax\n modax.endpoint = '/test-assets/modax/form.html';\n await open(modax);\n expect(modax.open).equals(true);\n\n // now we should have two buttons, 'Save Everything' and 'Cancel'\n buttons = getButtons(modax);\n expect(buttons.length).equals(2);\n\n // secondary should be Cancel, not Ok\n const secondary = getButtons(modax, 'secondary')[0] as Button;\n expect(secondary.name).equals('Cancel');\n });\n\n it('closes after redirect', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/form.html')\n );\n\n await open(modax);\n const primary = getButtons(modax, 'primary')[0] as Button;\n expect(primary.name).equals('Save Everything');\n\n // click the submit button\n mockPOST(/\\/test-assets\\/modax\\/form\\.html/, 'arst', {\n 'Temba-Success': 'hide',\n });\n\n const hideTest = new Promise<void>(resolve => {\n modax.addEventListener(CustomEventType.Submitted, () => {\n expect(modax.open).equals(false, 'Modal still visible');\n resolve();\n });\n });\n\n await clickPrimary(modax);\n await clock.runAllAsync();\n await hideTest;\n });\n});\n"]}
1
+ {"version":3,"file":"temba-modax.test.js","sourceRoot":"","sources":["../../test/temba-modax.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { useFakeTimers } from 'sinon';\nimport { Button } from '../src/button/Button';\nimport { Modax } from '../src/dialog/Modax';\nimport { CustomEventType } from '../src/interfaces';\nimport { assertScreenshot, getClip, mockPOST } from './utils.test';\n\nlet clock: any;\n\nconst getModaxHTML = (endpoint: string): string => {\n return `\n <temba-modax header=\"Hello Modax\" endpoint=\"${endpoint}\">\n <div>Open Me</div>\n </temba-modax>\n `;\n};\n\nconst getButtons = (modax: Modax, type: string = null) => {\n return modax.shadowRoot\n .querySelector('temba-dialog')\n .shadowRoot.querySelectorAll(\n type ? `temba-button[${type}='']` : 'temba-button'\n );\n};\n\nconst open = async (modax: Modax) => {\n return new Promise((resolve: any) => {\n modax.addEventListener(\n CustomEventType.Loaded,\n async (event: CustomEvent) => {\n await clock.runAll();\n resolve(event.detail);\n }\n );\n\n modax.addEventListener(\n CustomEventType.Redirected,\n async (event: CustomEvent) => {\n await clock.runAll();\n resolve(event.detail);\n }\n );\n\n modax.open = true;\n });\n};\n\nconst clickPrimary = async (modax: Modax) => {\n const buttons = getButtons(modax);\n\n if (buttons.length > 0) {\n let primary = buttons[0] as Button;\n\n if (buttons.length > 1) {\n // look for our primary flag\n buttons.forEach((button: Button) => {\n if (button.primary) {\n primary = button;\n }\n });\n }\n\n expect(primary).not.equals(undefined, 'Missing primary button');\n primary.click();\n }\n};\n\nconst getDialogClip = (modax: Modax) => {\n const dialog = modax.shadowRoot.querySelector('temba-dialog');\n return getClip(\n dialog.shadowRoot.querySelector('.dialog-container') as HTMLElement\n );\n};\n\ndescribe('temba-modax', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n assert.instanceOf(modax, Modax);\n });\n\n it('opens', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n\n await open(modax);\n expect(modax.open).equals(true);\n\n // Now our body should have our endpoint text\n expect(modax.getBody().innerHTML).to.contain('Hello World');\n\n await assertScreenshot('modax/simple', getDialogClip(modax));\n });\n\n it('fetches forms', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/form.html')\n );\n expect(modax.open).to.equal(false);\n await open(modax);\n\n expect(modax.open).to.equal(true);\n\n expect(modax.buttons[1].name).to.equal('Save Everything');\n expect(modax.buttons[0].name).to.equal('Cancel');\n\n await assertScreenshot('modax/form', getDialogClip(modax));\n });\n\n it('reverts primary name on reuse', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/hello.html')\n );\n\n // await click('temba-modax');\n await open(modax);\n expect(modax.open).equals(true);\n\n // should only have one button, okay\n let buttons = getButtons(modax);\n expect(buttons.length).equals(1);\n\n // close our dialog\n await clickPrimary(modax);\n expect(modax.open).equals(false);\n\n // now fetch form from the same modax\n modax.endpoint = '/test-assets/modax/form.html';\n await open(modax);\n expect(modax.open).equals(true);\n\n // now we should have two buttons, 'Save Everything' and 'Cancel'\n buttons = getButtons(modax);\n expect(buttons.length).equals(2);\n\n // secondary should be Cancel, not Ok\n const secondary = getButtons(modax, 'secondary')[0] as Button;\n expect(secondary.name).equals('Cancel');\n });\n\n it('closes after redirect', async () => {\n const modax: Modax = await fixture(\n getModaxHTML('/test-assets/modax/form.html')\n );\n\n await open(modax);\n const primary = getButtons(modax, 'primary')[0] as Button;\n expect(primary.name).equals('Save Everything');\n\n // click the submit button\n mockPOST(/\\/test-assets\\/modax\\/form\\.html/, 'arst', {\n 'Temba-Success': 'hide'\n });\n\n const hideTest = new Promise<void>((resolve) => {\n modax.addEventListener(CustomEventType.Submitted, () => {\n expect(modax.open).equals(false, 'Modal still visible');\n resolve();\n });\n });\n\n await clickPrimary(modax);\n await clock.runAllAsync();\n await hideTest;\n });\n});\n"]}
@@ -3,7 +3,7 @@ import { assertScreenshot, getClip, getHTML } from './utils.test';
3
3
  const colors = [
4
4
  { name: 'Red', value: '0' },
5
5
  { name: 'Green', value: '1' },
6
- { name: 'Blue', value: '2' },
6
+ { name: 'Blue', value: '2' }
7
7
  ];
8
8
  export const getOptionsHTML = (attrs = {}) => {
9
9
  return getHTML('temba-options', attrs);
@@ -1 +1 @@
1
- {"version":3,"file":"temba-options.test.js","sourceRoot":"","sources":["../../test/temba-options.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,MAAM,GAAG;IACb,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAa,EAAE,EAAU,EAAE;IACxD,OAAO,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAY,CAAC;AACzD,CAAC,CAAC;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,GAAY,MAAM,aAAa,CAC1C,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;QACzB,MAAM,OAAO,CAAC,cAAc,CAAC;QAC7B,MAAM,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { fixture } from '@open-wc/testing';\nimport { Options } from '../src/options/Options';\nimport { assertScreenshot, getClip, getHTML } from './utils.test';\n\nconst colors = [\n { name: 'Red', value: '0' },\n { name: 'Green', value: '1' },\n { name: 'Blue', value: '2' },\n];\n\nexport const getOptionsHTML = (attrs: any = {}): string => {\n return getHTML('temba-options', attrs);\n};\n\nexport const createOptions = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n return (await fixture(def, { parentNode })) as Options;\n};\n\ndescribe('temba-options-screenshots', () => {\n it('renders block mode', async () => {\n const options: Options = await createOptions(\n getOptionsHTML({ block: true, visible: true })\n );\n options.options = colors;\n await options.updateComplete;\n await assertScreenshot('options/block', getClip(options));\n });\n});\n"]}
1
+ {"version":3,"file":"temba-options.test.js","sourceRoot":"","sources":["../../test/temba-options.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,MAAM,GAAG;IACb,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAa,EAAE,EAAU,EAAE;IACxD,OAAO,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAY,CAAC;AACzD,CAAC,CAAC;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,GAAY,MAAM,aAAa,CAC1C,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;QACzB,MAAM,OAAO,CAAC,cAAc,CAAC;QAC7B,MAAM,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { fixture } from '@open-wc/testing';\nimport { Options } from '../src/options/Options';\nimport { assertScreenshot, getClip, getHTML } from './utils.test';\n\nconst colors = [\n { name: 'Red', value: '0' },\n { name: 'Green', value: '1' },\n { name: 'Blue', value: '2' }\n];\n\nexport const getOptionsHTML = (attrs: any = {}): string => {\n return getHTML('temba-options', attrs);\n};\n\nexport const createOptions = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n return (await fixture(def, { parentNode })) as Options;\n};\n\ndescribe('temba-options-screenshots', () => {\n it('renders block mode', async () => {\n const options: Options = await createOptions(\n getOptionsHTML({ block: true, visible: true })\n );\n options.options = colors;\n await options.updateComplete;\n await assertScreenshot('options/block', getClip(options));\n });\n});\n"]}
@@ -2,13 +2,13 @@ import { fixture, expect, assert } from '@open-wc/testing';
2
2
  import { useFakeTimers } from 'sinon';
3
3
  import { Options } from '../src/options/Options';
4
4
  import { Select } from '../src/select/Select';
5
- import { assertScreenshot, checkTimers, getClip, loadStore, } from './utils.test';
5
+ import { assertScreenshot, checkTimers, getClip, loadStore } from './utils.test';
6
6
  import { CustomEventType } from '../src/interfaces';
7
7
  let clock;
8
8
  const colors = [
9
9
  { name: 'Red', value: '0' },
10
10
  { name: 'Green', value: '1' },
11
- { name: 'Blue', value: '2' },
11
+ { name: 'Blue', value: '2' }
12
12
  ];
13
13
  export const createSelect = async (def) => {
14
14
  const parentNode = document.createElement('div');
@@ -25,7 +25,7 @@ export const open = async (select) => {
25
25
  await clock.runAll();
26
26
  return select;
27
27
  }
28
- const promise = new Promise(resolve => {
28
+ const promise = new Promise((resolve) => {
29
29
  select.addEventListener(CustomEventType.FetchComplete, async () => {
30
30
  await clock.runAll();
31
31
  resolve(select);
@@ -60,7 +60,7 @@ export const getSelectHTML = (options = colors, attrs = { placeholder: 'Select a
60
60
  .map((name) => `${name}='${attrs[name]}'`)
61
61
  .join(' ')}>
62
62
  ${options
63
- .map(option => `<temba-option name="${option.name}" value="${option.value}"></temba-option>`)
63
+ .map((option) => `<temba-option name="${option.name}" value="${option.value}"></temba-option>`)
64
64
  .join('')}
65
65
  </temba-select>`;
66
66
  return selectHTML;
@@ -76,7 +76,7 @@ const getClipWithOptions = (select) => {
76
76
  y,
77
77
  x,
78
78
  width: Math.max(selectClip.right, optionsClip.right) - x,
79
- height: Math.max(selectClip.bottom, optionsClip.bottom) - y,
79
+ height: Math.max(selectClip.bottom, optionsClip.bottom) - y
80
80
  };
81
81
  return combinedClip;
82
82
  }
@@ -194,7 +194,7 @@ describe('temba-select', () => {
194
194
  it('can load from an endpoint', async () => {
195
195
  const select = await createSelect(getSelectHTML([], {
196
196
  placeholder: 'Select a color',
197
- endpoint: '/test-assets/select/colors.json',
197
+ endpoint: '/test-assets/select/colors.json'
198
198
  }));
199
199
  await open(select);
200
200
  await assertScreenshot('select/remote-options', getClipWithOptions(select));
@@ -204,7 +204,7 @@ describe('temba-select', () => {
204
204
  const select = await createSelect(getSelectHTML([], {
205
205
  placeholder: 'Select a color',
206
206
  endpoint: '/test-assets/select/colors.json',
207
- searchable: true,
207
+ searchable: true
208
208
  }));
209
209
  await typeInto('temba-select', 're', false);
210
210
  await open(select);
@@ -215,7 +215,7 @@ describe('temba-select', () => {
215
215
  const select = await createSelect(getSelectHTML([], {
216
216
  placeholder: 'Select a group',
217
217
  endpoint: '/test-assets/select/groups.json',
218
- valueKey: 'uuid',
218
+ valueKey: 'uuid'
219
219
  }));
220
220
  await open(select);
221
221
  // should have all three pages visible right away
@@ -226,7 +226,7 @@ describe('temba-select', () => {
226
226
  placeholder: 'Select a group',
227
227
  endpoint: '/test-assets/select/groups.json',
228
228
  valueKey: 'uuid',
229
- searchable: true,
229
+ searchable: true
230
230
  }));
231
231
  // wait for updates from fetching three pages
232
232
  await open(select);
@@ -246,7 +246,7 @@ describe('temba-select', () => {
246
246
  const select = await createSelect(getSelectHTML([], {
247
247
  endpoint: '/colors.json',
248
248
  searchable: true,
249
- expressions: 'session',
249
+ expressions: 'session'
250
250
  }));
251
251
  await typeInto('temba-select', 'Hi there @contact', false);
252
252
  await open(select);
@@ -265,7 +265,7 @@ describe('temba-select', () => {
265
265
  it('should look the same with search enabled', async () => {
266
266
  const select = await createSelect(getSelectHTML(colors, {
267
267
  placeholder: 'Select a color',
268
- searchable: true,
268
+ searchable: true
269
269
  }));
270
270
  await assertScreenshot('select/search-enabled', getClipWithOptions(select));
271
271
  });
@@ -287,7 +287,7 @@ describe('temba-select', () => {
287
287
  const select = await createSelect(getSelectHTML(colors, {
288
288
  placeholder: 'Select a color',
289
289
  searchable: true,
290
- multi: true,
290
+ multi: true
291
291
  }));
292
292
  // select the first option
293
293
  await openAndClick(select, 0);
@@ -304,7 +304,7 @@ describe('temba-select', () => {
304
304
  const select = await createSelect(getSelectHTML(colors, {
305
305
  placeholder: 'Select a color',
306
306
  searchable: true,
307
- expressions: 'session',
307
+ expressions: 'session'
308
308
  }));
309
309
  await typeInto('temba-select', 'look at @(max(m', false);
310
310
  await open(select);
@@ -314,11 +314,11 @@ describe('temba-select', () => {
314
314
  const options = [
315
315
  {
316
316
  name: 'this_is_a_long_selection_to_make_sure_it_truncates',
317
- value: '0',
318
- },
317
+ value: '0'
318
+ }
319
319
  ];
320
320
  const select = await createSelect(getSelectHTML(options, {
321
- value: '0',
321
+ value: '0'
322
322
  }));
323
323
  await assertScreenshot('select/truncated-selection', getClipWithOptions(select));
324
324
  });
@@ -328,7 +328,7 @@ describe('temba-select', () => {
328
328
  multi: true,
329
329
  placeholder: 'Select a color',
330
330
  searchable: true,
331
- expressions: 'session',
331
+ expressions: 'session'
332
332
  }));
333
333
  await typeInto('temba-select', '@con', false);
334
334
  await openAndClick(select, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"temba-select.test.js","sourceRoot":"","sources":["../../test/temba-select.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,IAAI,KAAU,CAAC;AAEf,MAAM,MAAM,GAAG;IACb,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAElD,MAAM,MAAM,GAAW,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,MAAM,MAAM,CAAC,cAAc,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;QAC5C,MAAM,CAAC,gBAAgB,CACrB,eAAe,CAAC,aAAa,EAC7B,KAAK,IAAI,EAAE;YACT,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5B,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE;IACrC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAoB,CAAC,KAAK,EAAE,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAW,EAAE;IACpD,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAC7C,uBAAuB,KAAK,IAAI,CACf,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,OAAO,CAAC,cAAc,CAAC;IAC7B,MAAM,MAAM,CAAC,cAAc,CAAC;IAC5B,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAErB,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;IAClE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,UAAiB,MAAM,EACvB,QAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,EACrD,EAAE;IACV,MAAM,UAAU,GAAG;kBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SAC/B,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACjD,IAAI,CAAC,GAAG,CAAC;MACR,OAAO;SACN,GAAG,CACF,MAAM,CAAC,EAAE,CACP,uBAAuB,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,KAAK,mBAAmB,CAChF;SACA,IAAI,CAAC,EAAE,CAAC;kBACG,CAAC;IACjB,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAC7C,wBAAwB,CACd,CAAC;IAEb,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG;YACnB,CAAC;YACD,CAAC;YACD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;YACxD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;SAC5D,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC;QACT,KAAK,GAAG,aAAa,EAAE,CAAC;QAExB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC;QACR,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,+BAA+B,CAAC,CAAC;QACnE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC1C,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CACtD,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,gBAAgB,CAAC,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACtE,CAAC;QAEF,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvC,oCAAoC;QACpC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,gBAAgB,CAAC,iCAAiC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,gBAAgB,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEpC,gCAAgC;QAChC,MAAM,CAAC,MAAM,CACX,OAAO,CAAC,UAAU;aACf,aAAa,CAAC,oBAAoB,CAAC;aACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC9B,CAAC;QAEF,MAAM,gBAAgB,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,0BAA0B;QAC1B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEzC,0BAA0B;YAC1B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEtD,MAAM,gBAAgB,CACpB,wBAAwB,EACxB,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;YAEF,2BAA2B;YAC3B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhD,+EAA+E;YAC/E,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9C,gFAAgF;YAChF,MAAM,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9C,MAAM,gBAAgB,CACpB,6BAA6B,EAC7B,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;YAEF,8CAA8C;YAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACtE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEzC,gCAAgC;YAChC,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9B,4CAA4C;YAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAExD,MAAM,gBAAgB,CACpB,uBAAuB,EACvB,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,EAAE,EAAE;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,iCAAiC;aAC5C,CAAC,CACH,CAAC;YAEF,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,gBAAgB,CACpB,uBAAuB,EACvB,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,EAAE,EAAE;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,iCAAiC;gBAC3C,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9C,MAAM,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,EAAE,EAAE;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,iCAAiC;gBAC3C,QAAQ,EAAE,MAAM;aACjB,CAAC,CACH,CAAC;YAEF,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnB,iDAAiD;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,EAAE,EAAE;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,iCAAiC;gBAC3C,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAC;YAEF,6CAA6C;YAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAE/C,mBAAmB;YACnB,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtB,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAE/C,oEAAoE;YACpE,iBAAiB;YACjB,sBAAsB;YACtB,kDAAkD;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,SAAS,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,EAAE,EAAE;gBAChB,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,SAAS;aACvB,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,CAAC,cAAc,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,gBAAgB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAC3C,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAElD,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE9C,MAAM,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAEtE,KAAK,CAAC,MAAM,CAAC,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE;gBACpB,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAC;YACF,MAAM,gBAAgB,CACpB,uBAAuB,EACvB,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;YAEF,0BAA0B;YAC1B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,gBAAgB,CACpB,wBAAwB,EACxB,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;YAEF,0BAA0B;YAC1B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9B,6BAA6B;YAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,MAAM,gBAAgB,CACpB,8BAA8B,EAC9B,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE;gBACpB,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CACH,CAAC;YAEF,0BAA0B;YAC1B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnB,gFAAgF;YAChF,MAAM,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnB,2EAA2E;YAC3E,MAAM,gBAAgB,CACpB,gCAAgC,EAChC,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,SAAS,EAAE,CAAC;YAElB,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE;gBACpB,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,SAAS;aACvB,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,CAAC,cAAc,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnB,MAAM,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,OAAO,GAAG;gBACd;oBACE,IAAI,EAAE,oDAAoD;oBAC1D,KAAK,EAAE,GAAG;iBACX;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,OAAO,EAAE;gBACrB,KAAK,EAAE,GAAG;aACX,CAAC,CACH,CAAC;YAEF,MAAM,gBAAgB,CACpB,4BAA4B,EAC5B,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,SAAS,EAAE,CAAC;YAElB,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,aAAa,CAAC,MAAM,EAAE;gBACpB,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,gBAAgB;gBAC7B,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,SAAS;aACvB,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,gBAAgB,CACpB,4BAA4B,EAC5B,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { useFakeTimers } from 'sinon';\nimport { Options } from '../src/options/Options';\nimport { Select } from '../src/select/Select';\nimport {\n assertScreenshot,\n checkTimers,\n getClip,\n loadStore,\n} from './utils.test';\nimport { CustomEventType } from '../src/interfaces';\n\nlet clock: any;\n\nconst colors = [\n { name: 'Red', value: '0' },\n { name: 'Green', value: '1' },\n { name: 'Blue', value: '2' },\n];\n\nexport const createSelect = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n\n const select: Select = await fixture(def, { parentNode });\n clock.runAll();\n await select.updateComplete;\n return select;\n};\n\nexport const open = async (select: Select) => {\n if (!select.endpoint) {\n await click('temba-select');\n await clock.runAll();\n await clock.runAll();\n return select;\n }\n\n const promise = new Promise<Select>(resolve => {\n select.addEventListener(\n CustomEventType.FetchComplete,\n async () => {\n await clock.runAll();\n resolve(select);\n },\n { once: true }\n );\n });\n\n await click('temba-select');\n await clock.runAll();\n\n return promise;\n};\n\nexport const clear = (select: Select) => {\n (select.shadowRoot.querySelector('.clear-button') as HTMLDivElement).click();\n};\n\nexport const getOptions = (select: Select): Options => {\n return select.shadowRoot.querySelector('temba-options[visible]');\n};\n\nexport const clickOption = async (select: Select, index: number) => {\n const options = getOptions(select);\n const option = options.shadowRoot.querySelector(\n `[data-option-index=\"${index}\"]`\n ) as HTMLDivElement;\n option.click();\n await options.updateComplete;\n await select.updateComplete;\n await clock.runAll();\n\n checkTimers(clock);\n};\n\nexport const openAndClick = async (select: Select, index: number) => {\n await open(select);\n await clickOption(select, index);\n};\n\nexport const getSelectHTML = (\n options: any[] = colors,\n attrs: any = { placeholder: 'Select a color', name: 'color' }\n): string => {\n const selectHTML = `\n <temba-select ${Object.keys(attrs)\n .map((name: string) => `${name}='${attrs[name]}'`)\n .join(' ')}>\n ${options\n .map(\n option =>\n `<temba-option name=\"${option.name}\" value=\"${option.value}\"></temba-option>`\n )\n .join('')}\n </temba-select>`;\n return selectHTML;\n};\n\nconst getClipWithOptions = (select: Select) => {\n const selectClip = getClip(select);\n const options = select.shadowRoot.querySelector(\n 'temba-options[visible]'\n ) as Options;\n\n if (options) {\n const optionsClip = getClip(options);\n const y = Math.min(selectClip.y, optionsClip.y);\n const x = Math.min(selectClip.x, optionsClip.x);\n const combinedClip = {\n y,\n x,\n width: Math.max(selectClip.right, optionsClip.right) - x,\n height: Math.max(selectClip.bottom, optionsClip.bottom) - y,\n };\n return combinedClip;\n }\n\n return selectClip;\n};\n\ndescribe('temba-select', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n\n clock.tick(400);\n setViewport({ width: 500, height: 1000, deviceScaleFactor: 2 });\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const select = await createSelect('<temba-select></temba-select>');\n assert.instanceOf(select, Select);\n });\n\n it('can be disabled', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { disabled: true })\n );\n\n expect(select.disabled).to.equal(true);\n await assertScreenshot('select/disabled', getClip(select));\n });\n\n it('can be disabled with selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { disabled: true, value: '0' })\n );\n\n expect(select.disabled).to.equal(true);\n await assertScreenshot('select/disabled-selection', getClip(select));\n });\n\n it('can be disabled with multi selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { placeholder: 'Select a color', multi: true })\n );\n\n await openAndClick(select, 0);\n select.disabled = true;\n expect(select.disabled).to.equal(true);\n\n // make sure we can't select anymore\n await open(select);\n expect(select.isOpen()).to.equal(false);\n await assertScreenshot('select/disabled-multi-selection', getClip(select));\n });\n\n it('can be created with temba-option tags', async () => {\n const select = await createSelect(getSelectHTML());\n assert.equal(select.getStaticOptions().length, 3);\n expect(select.values.length).to.equal(0);\n await assertScreenshot('select/with-placeholder', getClip(select));\n });\n\n it('picks the first option without a placeholder', async () => {\n const select = await createSelect(getSelectHTML(colors, {}));\n assert.equal(select.getStaticOptions().length, 3);\n expect(select.values[0].name).to.equal('Red');\n await assertScreenshot('select/without-placeholder', getClip(select));\n });\n\n it('shows options when opened', async () => {\n const select = await createSelect(getSelectHTML());\n await open(select);\n const options = getOptions(select);\n assert.instanceOf(options, Options);\n\n // our options should be visible\n assert.isTrue(\n options.shadowRoot\n .querySelector('.options-container')\n .classList.contains('show')\n );\n\n await assertScreenshot('select/local-options', getClipWithOptions(select));\n });\n\n it('can be created with attribute options', async () => {\n const options = JSON.stringify([{ name: 'Embedded Option', value: '0' }]);\n const select = await createSelect(getSelectHTML([], { options }));\n // select the first option\n await openAndClick(select, 0);\n expect(select.values[0].name).to.equal('Embedded Option');\n await assertScreenshot('select/embedded', getClipWithOptions(select));\n });\n\n describe('single selection', () => {\n it('can select a single option', async () => {\n const select = await createSelect(getSelectHTML());\n expect(select.values.length).to.equal(0);\n\n // select the first option\n await openAndClick(select, 0);\n\n expect(select.values.length).to.equal(1);\n expect(select.values[0].name).to.equal('Red');\n expect(select.shadowRoot.innerHTML).to.contain('Red');\n\n await assertScreenshot(\n 'select/selected-single',\n getClipWithOptions(select)\n );\n });\n\n it('can search with existing selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the second option\n await openAndClick(select, 1);\n expect(select.values.length).to.equal(1);\n expect(select.values[0].name).to.equal('Green');\n\n // for single selection our current selection should be in the list and focused\n await open(select);\n assert.equal(select.cursorIndex, 1);\n assert.equal(select.visibleOptions.length, 3);\n\n // now lets do a search, we should see our selection (green) and one other (red)\n await typeInto('temba-select', 're', false);\n await open(select);\n assert.equal(select.visibleOptions.length, 2);\n\n await assertScreenshot(\n 'select/search-with-selected',\n getClipWithOptions(select)\n );\n\n // but our cursor should be on the first match\n assert.equal(select.cursorIndex, 0);\n });\n });\n\n describe('multiple selection', () => {\n it('can select multiple options', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { placeholder: 'Select a color', multi: true })\n );\n expect(select.values.length).to.equal(0);\n\n // select the first option twice\n await openAndClick(select, 0);\n await openAndClick(select, 0);\n\n // now we should have red and green selected\n expect(select.values.length).to.equal(2);\n expect(select.shadowRoot.innerHTML).to.contain('Red');\n expect(select.shadowRoot.innerHTML).to.contain('Green');\n\n await assertScreenshot(\n 'select/selected-multi',\n getClipWithOptions(select)\n );\n });\n });\n\n describe('endpoints', () => {\n it('can load from an endpoint', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a color',\n endpoint: '/test-assets/select/colors.json',\n })\n );\n\n await open(select);\n await assertScreenshot(\n 'select/remote-options',\n getClipWithOptions(select)\n );\n assert.equal(select.visibleOptions.length, 3);\n });\n\n it('can search an endpoint', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a color',\n endpoint: '/test-assets/select/colors.json',\n searchable: true,\n })\n );\n\n await typeInto('temba-select', 're', false);\n await open(select);\n assert.equal(select.visibleOptions.length, 2);\n\n await assertScreenshot('select/searching', getClipWithOptions(select));\n });\n\n it('pages through cursor results', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a group',\n endpoint: '/test-assets/select/groups.json',\n valueKey: 'uuid',\n })\n );\n\n await open(select);\n\n // should have all three pages visible right away\n assert.equal(select.visibleOptions.length, 15);\n });\n\n it('shows cached results', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a group',\n endpoint: '/test-assets/select/groups.json',\n valueKey: 'uuid',\n searchable: true,\n })\n );\n\n // wait for updates from fetching three pages\n await open(select);\n assert.equal(select.visibleOptions.length, 15);\n\n // close and reopen\n select.blur();\n await clock.tick(250);\n\n await open(select);\n assert.equal(select.visibleOptions.length, 15);\n\n // close and reopen once more (previous bug failed on third opening)\n // select.blur();\n // await open(select);\n // assert.equal(select.visibleOptions.length, 15);\n });\n\n it('can enter expressions', async () => {\n await loadStore();\n const select = await createSelect(\n getSelectHTML([], {\n endpoint: '/colors.json',\n searchable: true,\n expressions: 'session',\n })\n );\n\n await typeInto('temba-select', 'Hi there @contact', false);\n await open(select);\n\n assert.equal(select.completionOptions.length, 14);\n await assertScreenshot('select/expressions', getClipWithOptions(select));\n });\n\n it('clears single selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { clearable: true })\n );\n assert.equal(select.getStaticOptions().length, 3);\n\n await openAndClick(select, 0);\n expect(select.values[0].name).to.equal('Red');\n\n await assertScreenshot('select/selection-clearable', getClip(select));\n\n clear(select);\n expect(select.values.length).to.equal(0);\n });\n\n it('should look the same with search enabled', async () => {\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true,\n })\n );\n await assertScreenshot(\n 'select/search-enabled',\n getClipWithOptions(select)\n );\n });\n\n it('should look the same with search enabled and selection made', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the first option\n await openAndClick(select, 1);\n await assertScreenshot(\n 'select/search-selected',\n getClipWithOptions(select)\n );\n });\n\n it('should show focus for the selected option', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the first option\n await openAndClick(select, 1);\n\n // now open and look at focus\n await open(select);\n await assertScreenshot(\n 'select/search-selected-focus',\n getClipWithOptions(select)\n );\n });\n\n it('should show search with existing multiple selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true,\n multi: true,\n })\n );\n\n // select the first option\n await openAndClick(select, 0);\n await openAndClick(select, 0);\n await open(select);\n\n // now lets do a search, we should see our selection (green) and one other (red)\n await typeInto('temba-select', 're', false);\n await open(select);\n\n // should have two things selected and active query and no matching options\n await assertScreenshot(\n 'select/search-multi-no-matches',\n getClipWithOptions(select)\n );\n });\n\n it('should show functions', async () => {\n await loadStore();\n\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true,\n expressions: 'session',\n })\n );\n\n await typeInto('temba-select', 'look at @(max(m', false);\n await open(select);\n\n await assertScreenshot('select/functions', getClipWithOptions(select));\n });\n\n it('should truncate selection if necessesary', async () => {\n const options = [\n {\n name: 'this_is_a_long_selection_to_make_sure_it_truncates',\n value: '0',\n },\n ];\n\n const select = await createSelect(\n getSelectHTML(options, {\n value: '0',\n })\n );\n\n await assertScreenshot(\n 'select/truncated-selection',\n getClipWithOptions(select)\n );\n });\n\n it('can select expression completion as value', async () => {\n await loadStore();\n\n const select = await createSelect(\n getSelectHTML(colors, {\n multi: true,\n placeholder: 'Select a color',\n searchable: true,\n expressions: 'session',\n })\n );\n\n await typeInto('temba-select', '@con', false);\n await openAndClick(select, 0);\n\n expect(select.values[0].name).to.equal('@contact');\n await assertScreenshot(\n 'select/expression-selected',\n getClipWithOptions(select)\n );\n });\n });\n});\n"]}
1
+ {"version":3,"file":"temba-select.test.js","sourceRoot":"","sources":["../../test/temba-select.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { useFakeTimers } from 'sinon';\nimport { Options } from '../src/options/Options';\nimport { Select } from '../src/select/Select';\nimport {\n assertScreenshot,\n checkTimers,\n getClip,\n loadStore\n} from './utils.test';\nimport { CustomEventType } from '../src/interfaces';\n\nlet clock: any;\n\nconst colors = [\n { name: 'Red', value: '0' },\n { name: 'Green', value: '1' },\n { name: 'Blue', value: '2' }\n];\n\nexport const createSelect = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n\n const select: Select = await fixture(def, { parentNode });\n clock.runAll();\n await select.updateComplete;\n return select;\n};\n\nexport const open = async (select: Select) => {\n if (!select.endpoint) {\n await click('temba-select');\n await clock.runAll();\n await clock.runAll();\n return select;\n }\n\n const promise = new Promise<Select>((resolve) => {\n select.addEventListener(\n CustomEventType.FetchComplete,\n async () => {\n await clock.runAll();\n resolve(select);\n },\n { once: true }\n );\n });\n\n await click('temba-select');\n await clock.runAll();\n\n return promise;\n};\n\nexport const clear = (select: Select) => {\n (select.shadowRoot.querySelector('.clear-button') as HTMLDivElement).click();\n};\n\nexport const getOptions = (select: Select): Options => {\n return select.shadowRoot.querySelector('temba-options[visible]');\n};\n\nexport const clickOption = async (select: Select, index: number) => {\n const options = getOptions(select);\n const option = options.shadowRoot.querySelector(\n `[data-option-index=\"${index}\"]`\n ) as HTMLDivElement;\n option.click();\n await options.updateComplete;\n await select.updateComplete;\n await clock.runAll();\n\n checkTimers(clock);\n};\n\nexport const openAndClick = async (select: Select, index: number) => {\n await open(select);\n await clickOption(select, index);\n};\n\nexport const getSelectHTML = (\n options: any[] = colors,\n attrs: any = { placeholder: 'Select a color', name: 'color' }\n): string => {\n const selectHTML = `\n <temba-select ${Object.keys(attrs)\n .map((name: string) => `${name}='${attrs[name]}'`)\n .join(' ')}>\n ${options\n .map(\n (option) =>\n `<temba-option name=\"${option.name}\" value=\"${option.value}\"></temba-option>`\n )\n .join('')}\n </temba-select>`;\n return selectHTML;\n};\n\nconst getClipWithOptions = (select: Select) => {\n const selectClip = getClip(select);\n const options = select.shadowRoot.querySelector(\n 'temba-options[visible]'\n ) as Options;\n\n if (options) {\n const optionsClip = getClip(options);\n const y = Math.min(selectClip.y, optionsClip.y);\n const x = Math.min(selectClip.x, optionsClip.x);\n const combinedClip = {\n y,\n x,\n width: Math.max(selectClip.right, optionsClip.right) - x,\n height: Math.max(selectClip.bottom, optionsClip.bottom) - y\n };\n return combinedClip;\n }\n\n return selectClip;\n};\n\ndescribe('temba-select', () => {\n beforeEach(function () {\n clock = useFakeTimers();\n\n clock.tick(400);\n setViewport({ width: 500, height: 1000, deviceScaleFactor: 2 });\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('can be created', async () => {\n const select = await createSelect('<temba-select></temba-select>');\n assert.instanceOf(select, Select);\n });\n\n it('can be disabled', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { disabled: true })\n );\n\n expect(select.disabled).to.equal(true);\n await assertScreenshot('select/disabled', getClip(select));\n });\n\n it('can be disabled with selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { disabled: true, value: '0' })\n );\n\n expect(select.disabled).to.equal(true);\n await assertScreenshot('select/disabled-selection', getClip(select));\n });\n\n it('can be disabled with multi selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { placeholder: 'Select a color', multi: true })\n );\n\n await openAndClick(select, 0);\n select.disabled = true;\n expect(select.disabled).to.equal(true);\n\n // make sure we can't select anymore\n await open(select);\n expect(select.isOpen()).to.equal(false);\n await assertScreenshot('select/disabled-multi-selection', getClip(select));\n });\n\n it('can be created with temba-option tags', async () => {\n const select = await createSelect(getSelectHTML());\n assert.equal(select.getStaticOptions().length, 3);\n expect(select.values.length).to.equal(0);\n await assertScreenshot('select/with-placeholder', getClip(select));\n });\n\n it('picks the first option without a placeholder', async () => {\n const select = await createSelect(getSelectHTML(colors, {}));\n assert.equal(select.getStaticOptions().length, 3);\n expect(select.values[0].name).to.equal('Red');\n await assertScreenshot('select/without-placeholder', getClip(select));\n });\n\n it('shows options when opened', async () => {\n const select = await createSelect(getSelectHTML());\n await open(select);\n const options = getOptions(select);\n assert.instanceOf(options, Options);\n\n // our options should be visible\n assert.isTrue(\n options.shadowRoot\n .querySelector('.options-container')\n .classList.contains('show')\n );\n\n await assertScreenshot('select/local-options', getClipWithOptions(select));\n });\n\n it('can be created with attribute options', async () => {\n const options = JSON.stringify([{ name: 'Embedded Option', value: '0' }]);\n const select = await createSelect(getSelectHTML([], { options }));\n // select the first option\n await openAndClick(select, 0);\n expect(select.values[0].name).to.equal('Embedded Option');\n await assertScreenshot('select/embedded', getClipWithOptions(select));\n });\n\n describe('single selection', () => {\n it('can select a single option', async () => {\n const select = await createSelect(getSelectHTML());\n expect(select.values.length).to.equal(0);\n\n // select the first option\n await openAndClick(select, 0);\n\n expect(select.values.length).to.equal(1);\n expect(select.values[0].name).to.equal('Red');\n expect(select.shadowRoot.innerHTML).to.contain('Red');\n\n await assertScreenshot(\n 'select/selected-single',\n getClipWithOptions(select)\n );\n });\n\n it('can search with existing selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the second option\n await openAndClick(select, 1);\n expect(select.values.length).to.equal(1);\n expect(select.values[0].name).to.equal('Green');\n\n // for single selection our current selection should be in the list and focused\n await open(select);\n assert.equal(select.cursorIndex, 1);\n assert.equal(select.visibleOptions.length, 3);\n\n // now lets do a search, we should see our selection (green) and one other (red)\n await typeInto('temba-select', 're', false);\n await open(select);\n assert.equal(select.visibleOptions.length, 2);\n\n await assertScreenshot(\n 'select/search-with-selected',\n getClipWithOptions(select)\n );\n\n // but our cursor should be on the first match\n assert.equal(select.cursorIndex, 0);\n });\n });\n\n describe('multiple selection', () => {\n it('can select multiple options', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { placeholder: 'Select a color', multi: true })\n );\n expect(select.values.length).to.equal(0);\n\n // select the first option twice\n await openAndClick(select, 0);\n await openAndClick(select, 0);\n\n // now we should have red and green selected\n expect(select.values.length).to.equal(2);\n expect(select.shadowRoot.innerHTML).to.contain('Red');\n expect(select.shadowRoot.innerHTML).to.contain('Green');\n\n await assertScreenshot(\n 'select/selected-multi',\n getClipWithOptions(select)\n );\n });\n });\n\n describe('endpoints', () => {\n it('can load from an endpoint', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a color',\n endpoint: '/test-assets/select/colors.json'\n })\n );\n\n await open(select);\n await assertScreenshot(\n 'select/remote-options',\n getClipWithOptions(select)\n );\n assert.equal(select.visibleOptions.length, 3);\n });\n\n it('can search an endpoint', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a color',\n endpoint: '/test-assets/select/colors.json',\n searchable: true\n })\n );\n\n await typeInto('temba-select', 're', false);\n await open(select);\n assert.equal(select.visibleOptions.length, 2);\n\n await assertScreenshot('select/searching', getClipWithOptions(select));\n });\n\n it('pages through cursor results', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a group',\n endpoint: '/test-assets/select/groups.json',\n valueKey: 'uuid'\n })\n );\n\n await open(select);\n\n // should have all three pages visible right away\n assert.equal(select.visibleOptions.length, 15);\n });\n\n it('shows cached results', async () => {\n const select = await createSelect(\n getSelectHTML([], {\n placeholder: 'Select a group',\n endpoint: '/test-assets/select/groups.json',\n valueKey: 'uuid',\n searchable: true\n })\n );\n\n // wait for updates from fetching three pages\n await open(select);\n assert.equal(select.visibleOptions.length, 15);\n\n // close and reopen\n select.blur();\n await clock.tick(250);\n\n await open(select);\n assert.equal(select.visibleOptions.length, 15);\n\n // close and reopen once more (previous bug failed on third opening)\n // select.blur();\n // await open(select);\n // assert.equal(select.visibleOptions.length, 15);\n });\n\n it('can enter expressions', async () => {\n await loadStore();\n const select = await createSelect(\n getSelectHTML([], {\n endpoint: '/colors.json',\n searchable: true,\n expressions: 'session'\n })\n );\n\n await typeInto('temba-select', 'Hi there @contact', false);\n await open(select);\n\n assert.equal(select.completionOptions.length, 14);\n await assertScreenshot('select/expressions', getClipWithOptions(select));\n });\n\n it('clears single selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { clearable: true })\n );\n assert.equal(select.getStaticOptions().length, 3);\n\n await openAndClick(select, 0);\n expect(select.values[0].name).to.equal('Red');\n\n await assertScreenshot('select/selection-clearable', getClip(select));\n\n clear(select);\n expect(select.values.length).to.equal(0);\n });\n\n it('should look the same with search enabled', async () => {\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true\n })\n );\n await assertScreenshot(\n 'select/search-enabled',\n getClipWithOptions(select)\n );\n });\n\n it('should look the same with search enabled and selection made', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the first option\n await openAndClick(select, 1);\n await assertScreenshot(\n 'select/search-selected',\n getClipWithOptions(select)\n );\n });\n\n it('should show focus for the selected option', async () => {\n const select = await createSelect(\n getSelectHTML(colors, { searchable: true })\n );\n\n // select the first option\n await openAndClick(select, 1);\n\n // now open and look at focus\n await open(select);\n await assertScreenshot(\n 'select/search-selected-focus',\n getClipWithOptions(select)\n );\n });\n\n it('should show search with existing multiple selection', async () => {\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true,\n multi: true\n })\n );\n\n // select the first option\n await openAndClick(select, 0);\n await openAndClick(select, 0);\n await open(select);\n\n // now lets do a search, we should see our selection (green) and one other (red)\n await typeInto('temba-select', 're', false);\n await open(select);\n\n // should have two things selected and active query and no matching options\n await assertScreenshot(\n 'select/search-multi-no-matches',\n getClipWithOptions(select)\n );\n });\n\n it('should show functions', async () => {\n await loadStore();\n\n const select = await createSelect(\n getSelectHTML(colors, {\n placeholder: 'Select a color',\n searchable: true,\n expressions: 'session'\n })\n );\n\n await typeInto('temba-select', 'look at @(max(m', false);\n await open(select);\n\n await assertScreenshot('select/functions', getClipWithOptions(select));\n });\n\n it('should truncate selection if necessesary', async () => {\n const options = [\n {\n name: 'this_is_a_long_selection_to_make_sure_it_truncates',\n value: '0'\n }\n ];\n\n const select = await createSelect(\n getSelectHTML(options, {\n value: '0'\n })\n );\n\n await assertScreenshot(\n 'select/truncated-selection',\n getClipWithOptions(select)\n );\n });\n\n it('can select expression completion as value', async () => {\n await loadStore();\n\n const select = await createSelect(\n getSelectHTML(colors, {\n multi: true,\n placeholder: 'Select a color',\n searchable: true,\n expressions: 'session'\n })\n );\n\n await typeInto('temba-select', '@con', false);\n await openAndClick(select, 0);\n\n expect(select.values[0].name).to.equal('@contact');\n await assertScreenshot(\n 'select/expression-selected',\n getClipWithOptions(select)\n );\n });\n });\n});\n"]}
@@ -32,7 +32,7 @@ describe('temba-sortable-list', () => {
32
32
  from: 'fish',
33
33
  to: 'chicken',
34
34
  fromIdx: 1,
35
- toIdx: 0,
35
+ toIdx: 0
36
36
  });
37
37
  // should be hovered
38
38
  await assertScreenshot('list/sortable-dragging', getClip(list));
@@ -1 +1 @@
1
- {"version":3,"file":"temba-sortable-list.test.js","sourceRoot":"","sources":["../../test/temba-sortable-list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,GAAG,IAAI,CAAA;;;;;CAKvB,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,GAAmB,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAiB,CAAC;AAC9D,CAAC,CAAC;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAI,GAAiB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,IAAI,GAAiB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE5C,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAEnD,wCAAwC;QACxC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC;QACtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,gBAAgB,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,8DAA8D;QAC9D,sDAAsD;QACtD,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,gBAAgB,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/D,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html, TemplateResult } from 'lit';\nimport { CustomEventType } from '../src/interfaces';\nimport { SortableList } from '../src/list/SortableList';\nimport { assertScreenshot, getClip } from './utils.test';\n\nconst BORING_LIST = html`\n <temba-sortable-list>\n <div class=\"sortable\" id=\"chicken\" style=\"padding:10px\">Chicken</div>\n <div class=\"sortable\" id=\"fish\" style=\"padding:10px\">Fish</div>\n </temba-sortable-list>\n`;\n\nconst createSorter = async (def: TemplateResult) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 200px;');\n return (await fixture(def, { parentNode })) as SortableList;\n};\n\ndescribe('temba-sortable-list', () => {\n it('renders default', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n await assertScreenshot('list/sortable', getClip(list));\n });\n\n it('drags', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);\n const updated = oneEvent(list, 'change', false);\n\n const bounds = list.getBoundingClientRect();\n\n await moveMouse(bounds.left + 20, bounds.bottom - 10);\n await mouseDown();\n await moveMouse(bounds.left + 30, bounds.top + 20);\n\n // we should fire an order changed event\n const orderEvent = await orderChanged;\n expect(orderEvent.detail).to.deep.equal({\n from: 'fish',\n to: 'chicken',\n fromIdx: 1,\n toIdx: 0,\n });\n\n // should be hovered\n await assertScreenshot('list/sortable-dragging', getClip(list));\n\n // now lets drop, it'll look the same as before dragging since\n // its the consuming elements job to do the reordering\n await mouseUp();\n await assertScreenshot('list/sortable-dropped', getClip(list));\n\n // we should fire a change event\n const changeEvent = await updated;\n expect(changeEvent.type).to.equal('change');\n });\n});\n"]}
1
+ {"version":3,"file":"temba-sortable-list.test.js","sourceRoot":"","sources":["../../test/temba-sortable-list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,GAAG,IAAI,CAAA;;;;;CAKvB,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,GAAmB,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAiB,CAAC;AAC9D,CAAC,CAAC;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAI,GAAiB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,IAAI,GAAiB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE5C,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAEnD,wCAAwC;QACxC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC;QACtC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,gBAAgB,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,8DAA8D;QAC9D,sDAAsD;QACtD,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,gBAAgB,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/D,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html, TemplateResult } from 'lit';\nimport { CustomEventType } from '../src/interfaces';\nimport { SortableList } from '../src/list/SortableList';\nimport { assertScreenshot, getClip } from './utils.test';\n\nconst BORING_LIST = html`\n <temba-sortable-list>\n <div class=\"sortable\" id=\"chicken\" style=\"padding:10px\">Chicken</div>\n <div class=\"sortable\" id=\"fish\" style=\"padding:10px\">Fish</div>\n </temba-sortable-list>\n`;\n\nconst createSorter = async (def: TemplateResult) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 200px;');\n return (await fixture(def, { parentNode })) as SortableList;\n};\n\ndescribe('temba-sortable-list', () => {\n it('renders default', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n await assertScreenshot('list/sortable', getClip(list));\n });\n\n it('drags', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);\n const updated = oneEvent(list, 'change', false);\n\n const bounds = list.getBoundingClientRect();\n\n await moveMouse(bounds.left + 20, bounds.bottom - 10);\n await mouseDown();\n await moveMouse(bounds.left + 30, bounds.top + 20);\n\n // we should fire an order changed event\n const orderEvent = await orderChanged;\n expect(orderEvent.detail).to.deep.equal({\n from: 'fish',\n to: 'chicken',\n fromIdx: 1,\n toIdx: 0\n });\n\n // should be hovered\n await assertScreenshot('list/sortable-dragging', getClip(list));\n\n // now lets drop, it'll look the same as before dragging since\n // its the consuming elements job to do the reordering\n await mouseUp();\n await assertScreenshot('list/sortable-dropped', getClip(list));\n\n // we should fire a change event\n const changeEvent = await updated;\n expect(changeEvent.type).to.equal('change');\n });\n});\n"]}
@@ -113,13 +113,13 @@ describe('temba-textinput', () => {
113
113
  name: 'message',
114
114
  value: 'hello world',
115
115
  label: 'Your Message',
116
- help_text: 'Enter your message here',
116
+ help_text: 'Enter your message here'
117
117
  }));
118
118
  await assertScreenshot('textinput/input-form', getClip(input));
119
119
  });
120
120
  it('updates input value', async () => {
121
121
  const input = await createInput(getInputHTML({
122
- value: 'hello world',
122
+ value: 'hello world'
123
123
  }));
124
124
  input.value = 'Updated by attribute change';
125
125
  const widget = input.shadowRoot.querySelector('.textinput');