@nyaruka/temba-components 0.29.0 → 0.30.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 (170) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.yarnrc +1 -1
  3. package/.yarnrc.yml +1 -0
  4. package/CHANGELOG.md +105 -57
  5. package/dist/{64e63814.js → dd72d92e.js} +305 -148
  6. package/dist/index.js +305 -148
  7. package/dist/static/icons/symbol-defs.svg +10 -20
  8. package/dist/sw.js +1 -1
  9. package/dist/sw.js.map +1 -1
  10. package/dist/templates/components-body.html +1 -1
  11. package/dist/templates/components-head.html +1 -1
  12. package/dist/workbox-80efdfd1.js.map +1 -1
  13. package/out-tsc/src/contacts/ContactBadges.js +2 -9
  14. package/out-tsc/src/contacts/ContactBadges.js.map +1 -1
  15. package/out-tsc/src/contacts/ContactChat.js +3 -0
  16. package/out-tsc/src/contacts/ContactChat.js.map +1 -1
  17. package/out-tsc/src/contacts/ContactName.js +19 -16
  18. package/out-tsc/src/contacts/ContactName.js.map +1 -1
  19. package/out-tsc/src/contacts/ContactNameFetch.js +36 -0
  20. package/out-tsc/src/contacts/ContactNameFetch.js.map +1 -0
  21. package/out-tsc/src/contacts/ContactStoreElement.js +9 -2
  22. package/out-tsc/src/contacts/ContactStoreElement.js.map +1 -1
  23. package/out-tsc/src/contacts/ContactUrn.js +12 -1
  24. package/out-tsc/src/contacts/ContactUrn.js.map +1 -1
  25. package/out-tsc/src/contacts/events.js +0 -3
  26. package/out-tsc/src/contacts/events.js.map +1 -1
  27. package/out-tsc/src/flow/FlowStoreElement.js +43 -0
  28. package/out-tsc/src/flow/FlowStoreElement.js.map +1 -0
  29. package/out-tsc/src/interfaces.js.map +1 -1
  30. package/out-tsc/src/label/Label.js +29 -42
  31. package/out-tsc/src/label/Label.js.map +1 -1
  32. package/out-tsc/src/list/RunList.js +317 -0
  33. package/out-tsc/src/list/RunList.js.map +1 -0
  34. package/out-tsc/src/list/TembaList.js +38 -14
  35. package/out-tsc/src/list/TembaList.js.map +1 -1
  36. package/out-tsc/src/options/Options.js +18 -2
  37. package/out-tsc/src/options/Options.js.map +1 -1
  38. package/out-tsc/src/slider/TembaSlider.js +9 -1
  39. package/out-tsc/src/slider/TembaSlider.js.map +1 -1
  40. package/out-tsc/src/sms/gsmvalidator.js +9 -138
  41. package/out-tsc/src/sms/gsmvalidator.js.map +1 -1
  42. package/out-tsc/src/store/Store.js +13 -3
  43. package/out-tsc/src/store/Store.js.map +1 -1
  44. package/out-tsc/src/tabpane/TabPane.js +3 -1
  45. package/out-tsc/src/tabpane/TabPane.js.map +1 -1
  46. package/out-tsc/src/utils/index.js +1 -0
  47. package/out-tsc/src/utils/index.js.map +1 -1
  48. package/out-tsc/src/vectoricon/VectorIcon.js +6 -11
  49. package/out-tsc/src/vectoricon/VectorIcon.js.map +1 -1
  50. package/out-tsc/temba-components.js +1 -2
  51. package/out-tsc/temba-components.js.map +1 -1
  52. package/out-tsc/temba-modules.js +7 -1
  53. package/out-tsc/temba-modules.js.map +1 -1
  54. package/out-tsc/test/MouseHelper.js +47 -0
  55. package/out-tsc/test/MouseHelper.js.map +1 -0
  56. package/out-tsc/test/temba-contact-badges.test.js +23 -0
  57. package/out-tsc/test/temba-contact-badges.test.js.map +1 -0
  58. package/out-tsc/test/temba-contact-chat.test.js +111 -7
  59. package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
  60. package/out-tsc/test/temba-contact-history.test.js +6 -6
  61. package/out-tsc/test/temba-contact-history.test.js.map +1 -1
  62. package/out-tsc/test/temba-dialog.test.js +1 -1
  63. package/out-tsc/test/temba-dialog.test.js.map +1 -1
  64. package/out-tsc/test/temba-label.test.js +66 -0
  65. package/out-tsc/test/temba-label.test.js.map +1 -0
  66. package/out-tsc/test/temba-list.test.js +1 -1
  67. package/out-tsc/test/temba-list.test.js.map +1 -1
  68. package/out-tsc/test/temba-menu.test.js +1 -1
  69. package/out-tsc/test/temba-menu.test.js.map +1 -1
  70. package/out-tsc/test/temba-select.test.js +1 -6
  71. package/out-tsc/test/temba-select.test.js.map +1 -1
  72. package/out-tsc/test/temba-slider.test.js +151 -8
  73. package/out-tsc/test/temba-slider.test.js.map +1 -1
  74. package/out-tsc/test/temba-textinput.test.js +3 -4
  75. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  76. package/out-tsc/test/temba-tip.test.js +1 -1
  77. package/out-tsc/test/temba-tip.test.js.map +1 -1
  78. package/out-tsc/test/utils.test.js +26 -14
  79. package/out-tsc/test/utils.test.js.map +1 -1
  80. package/package.json +5 -4
  81. package/screenshots/truth/contacts/badges.png +0 -0
  82. package/screenshots/truth/contacts/contact-active-default.png +0 -0
  83. package/screenshots/truth/contacts/contact-active-show-chat-history.png +0 -0
  84. package/screenshots/truth/contacts/contact-active-show-chat-msg.png +0 -0
  85. package/screenshots/truth/contacts/contact-archived-hide-chat-msg.png +0 -0
  86. package/screenshots/truth/contacts/contact-archived-show-chat-history.png +0 -0
  87. package/screenshots/truth/contacts/contact-blocked-hide-chat-msg.png +0 -0
  88. package/screenshots/truth/contacts/contact-blocked-show-chat-history.png +0 -0
  89. package/screenshots/truth/contacts/contact-stopped-hide-chat-msg.png +0 -0
  90. package/screenshots/truth/contacts/contact-stopped-show-chat-history.png +0 -0
  91. package/screenshots/truth/contacts/history-expanded.png +0 -0
  92. package/screenshots/truth/contacts/history.png +0 -0
  93. package/screenshots/truth/label/custom.png +0 -0
  94. package/screenshots/truth/label/danger.png +0 -0
  95. package/screenshots/truth/label/dark.png +0 -0
  96. package/screenshots/truth/label/default-icon.png +0 -0
  97. package/screenshots/truth/label/no-icon.png +0 -0
  98. package/screenshots/truth/label/primary.png +0 -0
  99. package/screenshots/truth/label/secondary.png +0 -0
  100. package/screenshots/truth/label/shadow.png +0 -0
  101. package/screenshots/truth/label/tertiary.png +0 -0
  102. package/screenshots/truth/slider/custom-min-custom-max-valid-value.png +0 -0
  103. package/screenshots/truth/slider/custom-min-default-max-no-value.png +0 -0
  104. package/screenshots/truth/slider/default-min-custom-max-no-value.png +0 -0
  105. package/screenshots/truth/slider/default-min-default-max-invalid-value.png +0 -0
  106. package/screenshots/truth/slider/default-min-default-max-valid-value.png +0 -0
  107. package/screenshots/truth/slider/default.png +0 -0
  108. package/screenshots/truth/slider/no-visible-range-invalid-value.png +0 -0
  109. package/screenshots/truth/slider/no-visible-range-no-value.png +0 -0
  110. package/screenshots/truth/slider/no-visible-range-valid-value.png +0 -0
  111. package/screenshots/truth/slider/update-slider-on-circle-dragged.png +0 -0
  112. package/screenshots/truth/slider/update-slider-on-track-clicked.png +0 -0
  113. package/screenshots/truth/slider/update-slider-on-value-change.png +0 -0
  114. package/src/contacts/ContactBadges.ts +2 -9
  115. package/src/contacts/ContactChat.ts +3 -0
  116. package/src/contacts/ContactName.ts +19 -17
  117. package/src/contacts/ContactNameFetch.ts +32 -0
  118. package/src/contacts/ContactStoreElement.ts +5 -2
  119. package/src/contacts/ContactUrn.ts +12 -1
  120. package/src/contacts/events.ts +0 -3
  121. package/src/flow/FlowStoreElement.ts +42 -0
  122. package/src/interfaces.ts +19 -0
  123. package/src/label/Label.ts +31 -43
  124. package/src/list/RunList.ts +353 -0
  125. package/src/list/TembaList.ts +50 -14
  126. package/src/options/Options.ts +17 -2
  127. package/src/slider/TembaSlider.ts +8 -1
  128. package/src/sms/gsmvalidator.ts +9 -138
  129. package/src/store/Store.ts +20 -3
  130. package/src/tabpane/TabPane.ts +3 -1
  131. package/src/untyped.d.ts +3 -0
  132. package/src/utils/index.ts +3 -0
  133. package/src/vectoricon/VectorIcon.ts +5 -10
  134. package/static/css/temba-components.css +4 -9
  135. package/static/icons/Read Me.txt +15 -15
  136. package/static/icons/SVG/credits.svg +5 -0
  137. package/static/icons/SVG/hourglass.svg +5 -0
  138. package/static/icons/demo-external-svg.html +142 -157
  139. package/static/icons/demo-files/demo.css +4 -4
  140. package/static/icons/demo.html +152 -177
  141. package/static/icons/selection.json +396 -339
  142. package/static/icons/style.css +0 -4
  143. package/static/icons/symbol-defs.svg +10 -20
  144. package/temba-components.ts +1 -2
  145. package/temba-modules.ts +7 -1
  146. package/test/MouseHelper.ts +47 -0
  147. package/test/temba-contact-badges.test.ts +33 -0
  148. package/test/temba-contact-chat.test.ts +202 -6
  149. package/test/temba-contact-history.test.ts +6 -6
  150. package/test/temba-dialog.test.ts +1 -1
  151. package/test/temba-label.test.ts +75 -0
  152. package/test/temba-list.test.ts +1 -1
  153. package/test/temba-menu.test.ts +1 -0
  154. package/test/temba-select.test.ts +6 -10
  155. package/test/temba-slider.test.ts +204 -8
  156. package/test/temba-textinput.test.ts +3 -4
  157. package/test/temba-tip.test.ts +1 -1
  158. package/test/utils.test.ts +34 -16
  159. package/test-assets/contacts/contact-barak-archived +40 -0
  160. package/test-assets/contacts/contact-dave-active +52 -0
  161. package/test-assets/contacts/contact-michelle-blocked +40 -0
  162. package/test-assets/contacts/contact-tim-stopped +52 -0
  163. package/test-assets/store/groups.json +29 -0
  164. package/test-assets/store/languages.json +290 -0
  165. package/test-assets/style.css +2 -0
  166. package/web-test-runner.config.mjs +16 -0
  167. package/.yarn/releases/yarn-1.22.10.cjs +0 -147392
  168. package/out-tsc/src/contacts/ContactGroups.js +0 -40
  169. package/out-tsc/src/contacts/ContactGroups.js.map +0 -1
  170. package/src/contacts/ContactGroups.ts +0 -42
@@ -1 +1 @@
1
- {"version":3,"file":"temba-slider.test.js","sourceRoot":"","sources":["../../test/temba-slider.test.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,2DAA2D;AAC3D,4DAA4D;AAE5D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,gDAAgD;IAChD,8DAA8D;IAC9D,yEAAyE;IACzE,uEAAuE;IACvE,gEAAgE;AAClE,CAAC,CAAC,CAAC","sourcesContent":["// import { html, fixture, expect } from '@open-wc/testing';\n// import { TembaSlider } from '../src/slider/TembaSlider';\n// import { assertScreenshot, getClip } from './utils.test';\n\ndescribe('temba-slider', () => {\n // it('renders default slider', async () => {});\n // it('renders a slider with visible ranges', async () => {});\n // it('updates slider position on element value change', async () => {});\n // it('updates slider position on when track clicked', async () => {});\n // it('updates slider position on circle drag', async () => {});\n});\n"]}
1
+ {"version":3,"file":"temba-slider.test.js","sourceRoot":"","sources":["../../test/temba-slider.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, fixture, expect } from '@open-wc/testing';\nimport { TemplateResult } from 'lit';\nimport { TembaSlider } from '../src/slider/TembaSlider';\nimport { assertScreenshot, getClip, showMouse } from './utils.test';\n\nconst createSlider = async (def: TemplateResult) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 200px;');\n return (await fixture(def, { parentNode })) as TembaSlider;\n};\n\ndescribe('temba-slider', () => {\n it('renders default slider', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\"></temba-slider>\n `);\n\n expect(slider.label).to.equal('My Slider');\n await assertScreenshot('slider/default', getClip(slider));\n });\n\n it('renders a slider with visible range - custom min default max no value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" min=\"5\" range></temba-slider>\n `);\n expect(slider.range).to.equal(true);\n expect(slider.min).to.equal(5);\n expect(slider.max).to.equal(100);\n expect(slider.value).to.equal('5');\n await assertScreenshot(\n 'slider/custom-min-default-max-no-value',\n getClip(slider)\n );\n });\n\n it('renders a slider with visible range - default min custom max no value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" max=\"105\" range></temba-slider>\n `);\n expect(slider.range).to.equal(true);\n expect(slider.min).to.equal(0);\n expect(slider.max).to.equal(105);\n expect(slider.value).to.equal('0');\n await assertScreenshot(\n 'slider/default-min-custom-max-no-value',\n getClip(slider)\n );\n });\n\n it('renders a slider with visible range - custom min custom max no value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" min=\"5\" max=\"105\" range></temba-slider>\n `);\n expect(slider.range).to.equal(true);\n expect(slider.min).to.equal(5);\n expect(slider.max).to.equal(105);\n expect(slider.value).to.equal('5');\n await assertScreenshot(\n 'slider/default-min-default-max-valid-value',\n getClip(slider)\n );\n });\n\n it('renders a slider with visible range - custom min custom max valid value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider\n label=\"My Slider\"\n min=\"5\"\n max=\"105\"\n value=\"55\"\n range\n ></temba-slider>\n `);\n expect(slider.range).to.equal(true);\n expect(slider.min).to.equal(5);\n expect(slider.max).to.equal(105);\n expect(slider.value).to.equal('55');\n await assertScreenshot(\n 'slider/custom-min-custom-max-valid-value',\n getClip(slider)\n );\n });\n\n it('renders a slider with visible range - custom min custom max invalid value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider\n label=\"My Slider\"\n min=\"5\"\n max=\"105\"\n value=\"150\"\n range\n ></temba-slider>\n `);\n expect(slider.range).to.equal(true);\n expect(slider.min).to.equal(5);\n expect(slider.max).to.equal(105);\n expect(slider.value).to.equal('105');\n await assertScreenshot(\n 'slider/default-min-default-max-invalid-value',\n getClip(slider)\n );\n });\n\n it('renders a slider without visible range - default min default max no value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\"></temba-slider>\n `);\n expect(slider.range).to.equal(false);\n expect(slider.min).to.equal(0);\n expect(slider.max).to.equal(100);\n expect(slider.value).to.equal('0');\n await assertScreenshot('slider/no-visible-range-no-value', getClip(slider));\n });\n\n it('renders a slider without visible range - default min default max valid value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" value=\"50\"></temba-slider>\n `);\n expect(slider.range).to.equal(false);\n expect(slider.min).to.equal(0);\n expect(slider.max).to.equal(100);\n expect(slider.value).to.equal('50');\n await assertScreenshot(\n 'slider/no-visible-range-valid-value',\n getClip(slider)\n );\n });\n\n it('renders a slider without visible range - default min default max invalid value', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" value=\"150\"></temba-slider>\n `);\n expect(slider.range).to.equal(false);\n expect(slider.min).to.equal(0);\n expect(slider.max).to.equal(100);\n expect(slider.value).to.equal('100');\n await assertScreenshot(\n 'slider/no-visible-range-invalid-value',\n getClip(slider)\n );\n });\n\n it('updates slider position on element value change', async () => {\n const slider: TembaSlider = await createSlider(html`\n <temba-slider\n label=\"My Slider\"\n min=\"0\"\n max=\"100\"\n value=\"50\"\n range\n ></temba-slider>\n `);\n slider.value = '75';\n expect(slider.value).to.equal('75');\n await assertScreenshot(\n 'slider/update-slider-on-value-change',\n getClip(slider)\n );\n });\n\n it('updates slider position on when track clicked', async () => {\n showMouse();\n\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" value=\"50\"></temba-slider>\n `);\n const clip = slider.getBoundingClientRect();\n\n const y = clip.top + clip.height / 2;\n const x75 = clip.left + (clip.width / 4) * 3;\n\n // click track at three quarters\n await moveMouse(x75, y);\n await mouseDown();\n await mouseUp();\n\n expect(slider.value).to.equal('75');\n await assertScreenshot(\n 'slider/update-slider-on-track-clicked',\n getClip(slider)\n );\n });\n\n it('updates slider position on circle drag', async () => {\n showMouse();\n\n const slider: TembaSlider = await createSlider(html`\n <temba-slider label=\"My Slider\" value=\"0\"></temba-slider>\n `);\n const clip = slider.getBoundingClientRect();\n\n // hover over the circle at 0, mouse down, then drag to 80\n const y = clip.top + clip.height / 2;\n const x80 = clip.left + (clip.width / 5) * 4;\n\n await moveMouse(clip.left, y);\n await mouseDown();\n await moveMouse(x80, y);\n await mouseUp();\n\n expect(slider.value).to.equal('80');\n await assertScreenshot(\n 'slider/update-slider-on-circle-dragged',\n getClip(slider)\n );\n });\n});\n"]}
@@ -113,7 +113,6 @@ describe('temba-textinput', () => {
113
113
  name: 'message',
114
114
  value: 'hello world',
115
115
  label: 'Your Message',
116
- // eslint-disable-next-line @typescript-eslint/camelcase
117
116
  help_text: 'Enter your message here',
118
117
  }));
119
118
  await assertScreenshot('textinput/input-form', getClip(input));
@@ -133,14 +132,14 @@ describe('temba-textinput', () => {
133
132
  label: 'Your Date',
134
133
  datepicker: true,
135
134
  placeholder: 'Select a date',
136
- // eslint-disable-next-line @typescript-eslint/camelcase
137
135
  help_text: 'Dates can be helpful',
138
136
  }));
139
137
  const widget = input.shadowRoot.querySelector('.textinput');
140
138
  expect(widget.placeholder).to.equal('Select a date');
141
139
  await assertScreenshot('textinput/date-form', getClip(input));
142
140
  });
143
- it('shows initialized date', async () => {
141
+ // This test has intermittent failures, commenting for now
142
+ xit('shows initialized date', async () => {
144
143
  const input = await createInput(getInputHTML({
145
144
  datepicker: true,
146
145
  placeholder: 'Select a date',
@@ -157,7 +156,7 @@ describe('temba-textinput', () => {
157
156
  clip.width += 55;
158
157
  await assertScreenshot('textinput/date-initialized', clip);
159
158
  });
160
- it('updates on date selection', async () => {
159
+ xit('updates on date selection', async () => {
161
160
  const input = await createInput(getInputHTML({
162
161
  datepicker: true,
163
162
  placeholder: 'Select a date',
@@ -1 +1 @@
1
- {"version":3,"file":"temba-textinput.test.js","sourceRoot":"","sources":["../../test/temba-textinput.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { TextInput } from '../src/textinput/TextInput';\nimport { assertScreenshot, getAttributes, getClip } from './utils.test';\n\nexport const getInputHTML = (attrs: any = { value: 'hello world' }) => {\n return `<temba-textinput ${getAttributes(attrs)}></temba-textinput>`;\n};\n\nexport const createInput = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n const input: TextInput = await fixture(def, { parentNode });\n return input;\n};\n\ndescribe('temba-textinput', () => {\n it('can be created', async () => {\n const input: TextInput = await createInput(getInputHTML());\n assert.instanceOf(input, TextInput);\n await assertScreenshot('textinput/input', getClip(input));\n });\n\n it('shows placeholder', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ placeholder: 'Enter some text' })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n\n expect(widget.placeholder).to.equal('Enter some text');\n await assertScreenshot('textinput/input-placeholder', getClip(input));\n });\n\n it('should focus inputs on click', async () => {\n const input: TextInput = await createInput(getInputHTML());\n await click('temba-textinput');\n await assertScreenshot('textinput/input-focused', getClip(input));\n });\n\n it('should render textarea', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n assert.instanceOf(input, TextInput);\n await assertScreenshot('textinput/textarea', getClip(input));\n });\n\n it('should focus textarea on click', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n await click('temba-textinput');\n await assertScreenshot('textinput/textarea-focused', getClip(input));\n });\n\n it('takes internal input changes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world' })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('INPUT');\n expect(widget.disabled).to.equal(false);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello to the world');\n });\n\n it('does not take internal input changes for disabled', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', disabled: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('INPUT');\n expect(widget.disabled).to.equal(true);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello world');\n await assertScreenshot('textinput/input-disabled', getClip(input));\n });\n\n it('takes internal textarea changes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('TEXTAREA');\n expect(widget.disabled).to.equal(false);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello to the world');\n });\n\n it('does not take internal textarea changes for disabled', async () => {\n const input: TextInput = await fixture(\n getInputHTML({ value: 'hello world', textarea: true, disabled: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('TEXTAREA');\n expect(widget.disabled).to.equal(true);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello world');\n });\n\n it(\"doesn't advance cursor on GSM character replacement\", async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true, gsm: true })\n );\n input.value = 'Let’s try some text with a funny tick.';\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('replaced ');\n\n expect(input.value).to.equal(\n \"Let's try some text with a funny replaced tick.\"\n );\n });\n\n it(\"doesn't move cursor to the end on insert in input\", async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world' })\n );\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('sad, sad ');\n\n expect(input.value).to.equal('hello sad, sad world');\n await assertScreenshot('textinput/input-inserted', getClip(input));\n });\n\n it('shows form attributes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n name: 'message',\n value: 'hello world',\n label: 'Your Message',\n // eslint-disable-next-line @typescript-eslint/camelcase\n help_text: 'Enter your message here',\n })\n );\n await assertScreenshot('textinput/input-form', getClip(input));\n });\n\n it('updates input value', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n value: 'hello world',\n })\n );\n\n input.value = 'Updated by attribute change';\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n\n await assertScreenshot('textinput/input-updated', getClip(input));\n expect(widget.value).to.equal('Updated by attribute change');\n });\n\n it('shows datepicker placeholder in a form', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n name: 'Date',\n label: 'Your Date',\n datepicker: true,\n placeholder: 'Select a date',\n // eslint-disable-next-line @typescript-eslint/camelcase\n help_text: 'Dates can be helpful',\n })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.placeholder).to.equal('Select a date');\n await assertScreenshot('textinput/date-form', getClip(input));\n });\n\n it('shows initialized date', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n datepicker: true,\n placeholder: 'Select a date',\n value: '2020-04-20',\n })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.value).to.equal('2020-04-20');\n\n await waitFor(500);\n await click('temba-textinput');\n await waitFor(500);\n\n const clip = getClip(input);\n\n // account for the portaled date picker\n clip.height += 325;\n clip.width += 55;\n\n await assertScreenshot('textinput/date-initialized', clip);\n });\n\n it('updates on date selection', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n datepicker: true,\n placeholder: 'Select a date',\n value: '2020-04-20',\n })\n );\n\n // open our picker\n await waitFor(500);\n await click('temba-textinput');\n await waitFor(500);\n\n // click on a new date\n const newDate = document.querySelectorAll(\n \".flatpickr-day[aria-label='April 21, 2020']\"\n )[1] as HTMLSpanElement;\n newDate.click();\n\n // make sure it updated\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.value).to.equal('April 21, 2020');\n });\n});\n"]}
1
+ {"version":3,"file":"temba-textinput.test.js","sourceRoot":"","sources":["../../test/temba-textinput.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, expect, assert } from '@open-wc/testing';\nimport { TextInput } from '../src/textinput/TextInput';\nimport { assertScreenshot, getAttributes, getClip } from './utils.test';\n\nexport const getInputHTML = (attrs: any = { value: 'hello world' }) => {\n return `<temba-textinput ${getAttributes(attrs)}></temba-textinput>`;\n};\n\nexport const createInput = async (def: string) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 250px;');\n const input: TextInput = await fixture(def, { parentNode });\n return input;\n};\n\ndescribe('temba-textinput', () => {\n it('can be created', async () => {\n const input: TextInput = await createInput(getInputHTML());\n assert.instanceOf(input, TextInput);\n await assertScreenshot('textinput/input', getClip(input));\n });\n\n it('shows placeholder', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ placeholder: 'Enter some text' })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n\n expect(widget.placeholder).to.equal('Enter some text');\n await assertScreenshot('textinput/input-placeholder', getClip(input));\n });\n\n it('should focus inputs on click', async () => {\n const input: TextInput = await createInput(getInputHTML());\n await click('temba-textinput');\n await assertScreenshot('textinput/input-focused', getClip(input));\n });\n\n it('should render textarea', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n assert.instanceOf(input, TextInput);\n await assertScreenshot('textinput/textarea', getClip(input));\n });\n\n it('should focus textarea on click', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n await click('temba-textinput');\n await assertScreenshot('textinput/textarea-focused', getClip(input));\n });\n\n it('takes internal input changes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world' })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('INPUT');\n expect(widget.disabled).to.equal(false);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello to the world');\n });\n\n it('does not take internal input changes for disabled', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', disabled: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('INPUT');\n expect(widget.disabled).to.equal(true);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello world');\n await assertScreenshot('textinput/input-disabled', getClip(input));\n });\n\n it('takes internal textarea changes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('TEXTAREA');\n expect(widget.disabled).to.equal(false);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello to the world');\n });\n\n it('does not take internal textarea changes for disabled', async () => {\n const input: TextInput = await fixture(\n getInputHTML({ value: 'hello world', textarea: true, disabled: true })\n );\n\n // trigger a change on our internal widget\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.tagName).to.equal('TEXTAREA');\n expect(widget.disabled).to.equal(true);\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('to the ');\n\n // should be reflected on our main input\n expect(input.value).to.equal('hello world');\n });\n\n it(\"doesn't advance cursor on GSM character replacement\", async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world', textarea: true, gsm: true })\n );\n input.value = 'Let’s try some text with a funny tick.';\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('replaced ');\n\n expect(input.value).to.equal(\n \"Let's try some text with a funny replaced tick.\"\n );\n });\n\n it(\"doesn't move cursor to the end on insert in input\", async () => {\n const input: TextInput = await createInput(\n getInputHTML({ value: 'hello world' })\n );\n\n // focus our widget, move back a few spots and insert some text\n await click('temba-textinput');\n await pressKey('ArrowLeft', 5);\n await type('sad, sad ');\n\n expect(input.value).to.equal('hello sad, sad world');\n await assertScreenshot('textinput/input-inserted', getClip(input));\n });\n\n it('shows form attributes', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n name: 'message',\n value: 'hello world',\n label: 'Your Message',\n help_text: 'Enter your message here',\n })\n );\n await assertScreenshot('textinput/input-form', getClip(input));\n });\n\n it('updates input value', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n value: 'hello world',\n })\n );\n\n input.value = 'Updated by attribute change';\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n\n await assertScreenshot('textinput/input-updated', getClip(input));\n expect(widget.value).to.equal('Updated by attribute change');\n });\n\n it('shows datepicker placeholder in a form', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n name: 'Date',\n label: 'Your Date',\n datepicker: true,\n placeholder: 'Select a date',\n help_text: 'Dates can be helpful',\n })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.placeholder).to.equal('Select a date');\n await assertScreenshot('textinput/date-form', getClip(input));\n });\n\n // This test has intermittent failures, commenting for now\n xit('shows initialized date', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n datepicker: true,\n placeholder: 'Select a date',\n value: '2020-04-20',\n })\n );\n\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.value).to.equal('2020-04-20');\n\n await waitFor(500);\n await click('temba-textinput');\n await waitFor(500);\n\n const clip = getClip(input);\n\n // account for the portaled date picker\n clip.height += 325;\n clip.width += 55;\n\n await assertScreenshot('textinput/date-initialized', clip);\n });\n\n xit('updates on date selection', async () => {\n const input: TextInput = await createInput(\n getInputHTML({\n datepicker: true,\n placeholder: 'Select a date',\n value: '2020-04-20',\n })\n );\n\n // open our picker\n await waitFor(500);\n await click('temba-textinput');\n await waitFor(500);\n\n // click on a new date\n const newDate = document.querySelectorAll(\n \".flatpickr-day[aria-label='April 21, 2020']\"\n )[1] as HTMLSpanElement;\n newDate.click();\n\n // make sure it updated\n const widget = input.shadowRoot.querySelector(\n '.textinput'\n ) as HTMLInputElement;\n expect(widget.value).to.equal('April 21, 2020');\n });\n});\n"]}
@@ -6,7 +6,7 @@ const getTarget = () => {
6
6
  return "<div style='line-height:0px;font-size:14px;background:green;display:flex'>👱‍♀️</div>";
7
7
  };
8
8
  const getTip = async (attrs = {}, slot = getTarget()) => {
9
- return (await getComponent(TAG, attrs, slot, 20, 'margin:200px;'));
9
+ return (await getComponent(TAG, attrs, slot, 20, 0, 'margin:200px;'));
10
10
  };
11
11
  const getRightClip = (ele) => {
12
12
  const clip = getClip(ele);
@@ -1 +1 @@
1
- {"version":3,"file":"temba-tip.test.js","sourceRoot":"","sources":["../../test/temba-tip.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from '@open-wc/testing';\nimport { Tip } from '../src/tip/Tip';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\n\nconst TAG = 'temba-tip';\n\nconst getTarget = () => {\n return \"<div style='line-height:0px;font-size:14px;background:green;display:flex'>👱‍♀️</div>\";\n};\n\nconst getTip = async (\n attrs: { text?: string; position?: string; visible?: boolean } = {},\n slot = getTarget()\n) => {\n return (await getComponent(TAG, attrs, slot, 20, 'margin:200px;')) as Tip;\n};\n\nconst getRightClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.width += 78;\n clip.height += 10;\n clip.y -= 5;\n return clip;\n};\n\nconst getLeftClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.x -= 80;\n clip.width += 78;\n clip.height += 10;\n clip.y -= 5;\n return clip;\n};\n\nconst getTopClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.y -= 30;\n clip.height += 30;\n clip.width += 30;\n clip.x -= 15;\n return clip;\n};\n\nconst getBottomClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.height += 35;\n clip.width += 30;\n clip.x -= 15;\n return clip;\n};\n\ndescribe(TAG, () => {\n it('can be created', async () => {\n const icon = await getTip({ text: 'Resolve' });\n assert.instanceOf(icon, Tip);\n });\n\n it('shows on the left', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'left',\n });\n await assertScreenshot('tip/left', getLeftClip(tip));\n });\n\n it('shows on the right', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'right',\n });\n await assertScreenshot('tip/right', getRightClip(tip));\n });\n\n it('shows on top', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'top',\n });\n await assertScreenshot('tip/top', getTopClip(tip));\n });\n\n it('shows on bottom', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'bottom',\n });\n await assertScreenshot('tip/bottom', getBottomClip(tip));\n });\n});\n"]}
1
+ {"version":3,"file":"temba-tip.test.js","sourceRoot":"","sources":["../../test/temba-tip.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,GAAG,GAAG,WAAW,CAAC;AAExB,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,OAAO,uFAAuF,CAAC;AACjG,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,EAClB,QAAiE,EAAE,EACnE,IAAI,GAAG,SAAS,EAAE,EAClB,EAAE;IACF,OAAO,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC,CAAQ,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,GAAgB,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,GAAgB,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAgB,EAAE,EAAE;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAgB,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACb,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;IACjB,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { assert } from '@open-wc/testing';\nimport { Tip } from '../src/tip/Tip';\nimport { assertScreenshot, getClip, getComponent } from './utils.test';\n\nconst TAG = 'temba-tip';\n\nconst getTarget = () => {\n return \"<div style='line-height:0px;font-size:14px;background:green;display:flex'>👱‍♀️</div>\";\n};\n\nconst getTip = async (\n attrs: { text?: string; position?: string; visible?: boolean } = {},\n slot = getTarget()\n) => {\n return (await getComponent(TAG, attrs, slot, 20, 0, 'margin:200px;')) as Tip;\n};\n\nconst getRightClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.width += 78;\n clip.height += 10;\n clip.y -= 5;\n return clip;\n};\n\nconst getLeftClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.x -= 80;\n clip.width += 78;\n clip.height += 10;\n clip.y -= 5;\n return clip;\n};\n\nconst getTopClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.y -= 30;\n clip.height += 30;\n clip.width += 30;\n clip.x -= 15;\n return clip;\n};\n\nconst getBottomClip = (ele: HTMLElement) => {\n const clip = getClip(ele);\n clip.height += 35;\n clip.width += 30;\n clip.x -= 15;\n return clip;\n};\n\ndescribe(TAG, () => {\n it('can be created', async () => {\n const icon = await getTip({ text: 'Resolve' });\n assert.instanceOf(icon, Tip);\n });\n\n it('shows on the left', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'left',\n });\n await assertScreenshot('tip/left', getLeftClip(tip));\n });\n\n it('shows on the right', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'right',\n });\n await assertScreenshot('tip/right', getRightClip(tip));\n });\n\n it('shows on top', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'top',\n });\n await assertScreenshot('tip/top', getTopClip(tip));\n });\n\n it('shows on bottom', async () => {\n const tip = await getTip({\n text: 'Hello!',\n visible: true,\n position: 'bottom',\n });\n await assertScreenshot('tip/bottom', getBottomClip(tip));\n });\n});\n"]}
@@ -1,9 +1,14 @@
1
1
  import '../temba-modules';
2
2
  import { stub } from 'sinon';
3
- import { expect, fixture } from '@open-wc/testing';
3
+ import { expect, fixture, html, assert } from '@open-wc/testing';
4
+ import MouseHelper from './MouseHelper';
4
5
  const gets = [];
5
6
  const posts = [];
6
7
  let normalFetch;
8
+ export const showMouse = async () => {
9
+ const mouse = await fixture(html `<mouse-helper />`);
10
+ assert.instanceOf(mouse, MouseHelper);
11
+ };
7
12
  export const getAttributes = (attrs = {}) => {
8
13
  return `${Object.keys(attrs)
9
14
  .map((name) => {
@@ -14,19 +19,16 @@ export const getAttributes = (attrs = {}) => {
14
19
  })
15
20
  .join(' ')}`;
16
21
  };
17
- export const getComponent = async (tag, attrs = {}, slot = '', width = 250, style = '') => {
22
+ export const getComponent = async (tag, attrs = {}, slot = '', width = 250, height = 0, style = '') => {
18
23
  const spec = `<${tag} ${getAttributes(attrs)}>${slot}</${tag}>`;
19
- if (width > 0 || style) {
20
- const parentNode = document.createElement('div');
21
- if (width > 0) {
22
- parentNode.setAttribute('style', `width: ${width}px;${style}`);
23
- }
24
- else {
25
- parentNode.setAttribute('style', `${style}`);
26
- }
27
- return await fixture(spec, { parentNode });
28
- }
29
- return await fixture(spec);
24
+ const parentNode = document.createElement('div');
25
+ const styleAttribute = `
26
+ ${width > 0 ? `width:${width}px;` : ``}
27
+ ${height > 0 ? `height:${height}px;` : ``}
28
+ ${style ? style : ``}
29
+ `;
30
+ parentNode.setAttribute('style', styleAttribute);
31
+ return await fixture(spec, { parentNode });
30
32
  };
31
33
  const createResponse = mocked => {
32
34
  const mockResponse = new window.Response(mocked.body, {
@@ -95,7 +97,7 @@ export const assertScreenshot = async (filename, clip, threshold = 0.1, exclude
95
97
  // const screenShotsEnabled = !!__karma__.config.args.find(
96
98
  // (option: string) => option === '--screenshots'
97
99
  // );
98
- // await (window as any).waitFor(300);
100
+ await window.waitFor(200);
99
101
  // console.log((window as any).watched);
100
102
  if (window.watched) {
101
103
  // return;
@@ -147,4 +149,14 @@ export const getHTMLAttrs = (attrs = {}) => {
147
149
  export const getHTML = (tag, attrs = {}) => {
148
150
  return `<${tag} ${getHTMLAttrs(attrs)}></${tag}>`;
149
151
  };
152
+ export const loadStore = async () => {
153
+ const store = await fixture(`<temba-store
154
+ completion='/test-assets/store/editor.json'
155
+ groups='/test-assets/store/groups.json'
156
+ languages='/test-assets/store/languages.json'
157
+ />`);
158
+ await store.httpComplete;
159
+ await store.httpComplete;
160
+ return store;
161
+ };
150
162
  //# sourceMappingURL=utils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../test/utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import '../temba-modules';\n\ninterface Clip {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nimport { stub } from 'sinon';\nimport { expect, fixture } from '@open-wc/testing';\n\nexport interface CodeMock {\n endpoint: RegExp;\n body: string;\n headers: any;\n}\n\nconst gets: CodeMock[] = [];\nconst posts: CodeMock[] = [];\nlet normalFetch;\n\nexport const getAttributes = (attrs: any = {}) => {\n return `${Object.keys(attrs)\n .map((name: string) => {\n if (typeof attrs[name] === 'boolean' && attrs[name]) {\n return name;\n }\n return `${name}='${attrs[name]}'`;\n })\n .join(' ')}`;\n};\n\nexport const getComponent = async (\n tag,\n attrs: any = {},\n slot = '',\n width = 250,\n style = ''\n) => {\n const spec = `<${tag} ${getAttributes(attrs)}>${slot}</${tag}>`;\n\n if (width > 0 || style) {\n const parentNode = document.createElement('div');\n if (width > 0) {\n parentNode.setAttribute('style', `width: ${width}px;${style}`);\n } else {\n parentNode.setAttribute('style', `${style}`);\n }\n return await fixture(spec, { parentNode });\n }\n\n return await fixture(spec);\n};\n\nconst createResponse = mocked => {\n const mockResponse = new window.Response(mocked.body, {\n status: 200,\n headers: {\n 'Content-type': 'text/html',\n ...mocked.headers,\n },\n });\n\n return Promise.resolve(mockResponse);\n};\n\nconst createJSONResponse = mocked => {\n const mockResponse = new window.Response(JSON.stringify(mocked.body), {\n status: 200,\n headers: {\n 'Content-type': 'application/json',\n ...mocked.headers,\n },\n });\n\n return Promise.resolve(mockResponse);\n};\n\nconst getResponse = (endpoint: string, options) => {\n // check if our path has been mocked in code\n const mocks = options.method === 'GET' ? gets : posts;\n const codeMock = mocks.find(mock => mock.endpoint.test(endpoint));\n\n if (codeMock) {\n if (typeof codeMock.body === 'string') {\n // see if we are being mocked to a file\n if (codeMock.body.startsWith('/')) {\n endpoint = codeMock.body;\n } else {\n return createResponse(codeMock);\n }\n } else {\n return createJSONResponse(codeMock);\n }\n }\n\n // otherwise fetch over http\n return normalFetch(endpoint, options);\n};\n\nbefore(async () => {\n normalFetch = window.fetch;\n stub(window, 'fetch').callsFake(getResponse);\n await setViewport({ width: 1024, height: 768, deviceScaleFactor: 2 });\n});\n\nafter(() => {\n (window.fetch as any).restore();\n});\n\nexport const mockGET = (endpoint: RegExp, body: any, headers: {} = {}) => {\n gets.push({ endpoint, body, headers });\n};\n\nexport const mockPOST = (endpoint: RegExp, body: any, headers: {} = {}) => {\n posts.push({ endpoint, body, headers });\n};\n\nexport const checkTimers = (clock: any) => {\n expect(\n Object.keys(clock.timers).length,\n `Timers still to be run ${JSON.stringify(clock.timers)}`\n ).to.equal(0);\n};\n\nexport const delay = (millis: number) => {\n return new Promise(function (resolve) {\n setTimeout(resolve, millis);\n });\n};\n\nexport const assertScreenshot = async (\n filename: string,\n clip: Clip,\n threshold = 0.1,\n exclude: Clip[] = []\n) => {\n // const screenShotsEnabled = !!__karma__.config.args.find(\n // (option: string) => option === '--screenshots'\n // );\n\n // await (window as any).waitFor(300);\n\n // console.log((window as any).watched);\n if ((window as any).watched) {\n // return;\n }\n\n const mochaUI = document.querySelector('#mocha');\n mochaUI.classList.add('screenshots');\n\n try {\n await (window as any).matchPageSnapshot(\n `${filename}.png`,\n clip,\n exclude,\n threshold\n );\n } catch (error) {\n if (error.message) {\n throw new Error(\n `${error.message} ${\n error.expected\n ? `Expected ${error.expected} but got ${error.actual}`\n : ''\n } ${error.files ? `\\n${error.files.join('\\n')}` : ''}`\n );\n }\n throw new Error(error);\n } finally {\n mochaUI.classList.remove('screenshots');\n }\n};\n\nexport const getClip = (ele: HTMLElement) => {\n let clip: any = ele.getBoundingClientRect();\n if (!clip.width || !clip.height) {\n clip = ele.shadowRoot.firstElementChild.getBoundingClientRect();\n }\n\n const padding = 10;\n const width = clip.width + padding * 2;\n const height = clip.height + padding * 2;\n const y = clip.y - padding;\n const x = clip.x - padding;\n\n const newClip = {\n x,\n y,\n width,\n height,\n bottom: y + height,\n right: x + width,\n top: y,\n left: x,\n };\n\n return newClip;\n};\n\nexport const getHTMLAttrs = (attrs: any = {}) => {\n return Object.keys(attrs)\n .map((name: string) => `${name}='${attrs[name]}'`)\n .join(' ');\n};\n\nexport const getHTML = (tag: string, attrs: any = {}) => {\n return `<${tag} ${getHTMLAttrs(attrs)}></${tag}>`;\n};\n"]}
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../test/utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import '../temba-modules';\n\ninterface Clip {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nimport { stub } from 'sinon';\nimport { expect, fixture, html, assert } from '@open-wc/testing';\nimport MouseHelper from './MouseHelper';\nimport { Store } from '../src/store/Store';\n\nexport interface CodeMock {\n endpoint: RegExp;\n body: string;\n headers: any;\n}\n\nconst gets: CodeMock[] = [];\nconst posts: CodeMock[] = [];\nlet normalFetch;\n\nexport const showMouse = async () => {\n const mouse = await fixture(html`<mouse-helper />`);\n assert.instanceOf(mouse, MouseHelper);\n};\n\nexport const getAttributes = (attrs: any = {}) => {\n return `${Object.keys(attrs)\n .map((name: string) => {\n if (typeof attrs[name] === 'boolean' && attrs[name]) {\n return name;\n }\n return `${name}='${attrs[name]}'`;\n })\n .join(' ')}`;\n};\n\nexport const getComponent = async (\n tag,\n attrs: any = {},\n slot = '',\n width = 250,\n height = 0,\n style = ''\n) => {\n const spec = `<${tag} ${getAttributes(attrs)}>${slot}</${tag}>`;\n const parentNode = document.createElement('div');\n const styleAttribute = `\n ${width > 0 ? `width:${width}px;` : ``} \n ${height > 0 ? `height:${height}px;` : ``}\n ${style ? style : ``}\n `;\n\n parentNode.setAttribute('style', styleAttribute);\n return await fixture(spec, { parentNode });\n};\n\nconst createResponse = mocked => {\n const mockResponse = new window.Response(mocked.body, {\n status: 200,\n headers: {\n 'Content-type': 'text/html',\n ...mocked.headers,\n },\n });\n\n return Promise.resolve(mockResponse);\n};\n\nconst createJSONResponse = mocked => {\n const mockResponse = new window.Response(JSON.stringify(mocked.body), {\n status: 200,\n headers: {\n 'Content-type': 'application/json',\n ...mocked.headers,\n },\n });\n\n return Promise.resolve(mockResponse);\n};\n\nconst getResponse = (endpoint: string, options) => {\n // check if our path has been mocked in code\n const mocks = options.method === 'GET' ? gets : posts;\n const codeMock = mocks.find(mock => mock.endpoint.test(endpoint));\n\n if (codeMock) {\n if (typeof codeMock.body === 'string') {\n // see if we are being mocked to a file\n if (codeMock.body.startsWith('/')) {\n endpoint = codeMock.body;\n } else {\n return createResponse(codeMock);\n }\n } else {\n return createJSONResponse(codeMock);\n }\n }\n\n // otherwise fetch over http\n return normalFetch(endpoint, options);\n};\n\nbefore(async () => {\n normalFetch = window.fetch;\n stub(window, 'fetch').callsFake(getResponse);\n await setViewport({ width: 1024, height: 768, deviceScaleFactor: 2 });\n});\n\nafter(() => {\n (window.fetch as any).restore();\n});\n\nexport const mockGET = (endpoint: RegExp, body: any, headers: any = {}) => {\n gets.push({ endpoint, body, headers });\n};\n\nexport const mockPOST = (endpoint: RegExp, body: any, headers: any = {}) => {\n posts.push({ endpoint, body, headers });\n};\n\nexport const checkTimers = (clock: any) => {\n expect(\n Object.keys(clock.timers).length,\n `Timers still to be run ${JSON.stringify(clock.timers)}`\n ).to.equal(0);\n};\n\nexport const delay = (millis: number) => {\n return new Promise(function (resolve) {\n setTimeout(resolve, millis);\n });\n};\n\nexport const assertScreenshot = async (\n filename: string,\n clip: Clip,\n threshold = 0.1,\n exclude: Clip[] = []\n) => {\n // const screenShotsEnabled = !!__karma__.config.args.find(\n // (option: string) => option === '--screenshots'\n // );\n\n await (window as any).waitFor(200);\n\n // console.log((window as any).watched);\n if ((window as any).watched) {\n // return;\n }\n\n const mochaUI = document.querySelector('#mocha');\n mochaUI.classList.add('screenshots');\n\n try {\n await (window as any).matchPageSnapshot(\n `${filename}.png`,\n clip,\n exclude,\n threshold\n );\n } catch (error) {\n if (error.message) {\n throw new Error(\n `${error.message} ${\n error.expected\n ? `Expected ${error.expected} but got ${error.actual}`\n : ''\n } ${error.files ? `\\n${error.files.join('\\n')}` : ''}`\n );\n }\n throw new Error(error);\n } finally {\n mochaUI.classList.remove('screenshots');\n }\n};\n\nexport const getClip = (ele: HTMLElement) => {\n let clip: any = ele.getBoundingClientRect();\n if (!clip.width || !clip.height) {\n clip = ele.shadowRoot.firstElementChild.getBoundingClientRect();\n }\n\n const padding = 10;\n const width = clip.width + padding * 2;\n const height = clip.height + padding * 2;\n const y = clip.y - padding;\n const x = clip.x - padding;\n\n const newClip = {\n x,\n y,\n width,\n height,\n bottom: y + height,\n right: x + width,\n top: y,\n left: x,\n };\n\n return newClip;\n};\n\nexport const getHTMLAttrs = (attrs: any = {}) => {\n return Object.keys(attrs)\n .map((name: string) => `${name}='${attrs[name]}'`)\n .join(' ');\n};\n\nexport const getHTML = (tag: string, attrs: any = {}) => {\n return `<${tag} ${getHTMLAttrs(attrs)}></${tag}>`;\n};\n\nexport const loadStore = async () => {\n const store: Store = await fixture(\n `<temba-store \n completion='/test-assets/store/editor.json'\n groups='/test-assets/store/groups.json'\n languages='/test-assets/store/languages.json'\n />`\n );\n await store.httpComplete;\n await store.httpComplete;\n return store;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyaruka/temba-components",
3
- "version": "0.29.0",
3
+ "version": "0.30.0",
4
4
  "description": "Web components to support rapidpro and related projects",
5
5
  "author": "Nyaruka <code@nyaruka.coim>",
6
6
  "main": "dist/index.js",
@@ -8,7 +8,6 @@
8
8
  "homepage": "https://github.com/nyaruka/temba-components/",
9
9
  "license": "AGPL-3.0-only",
10
10
  "repository": "https://github.com/nyaruka/temba-components/",
11
- "private": false,
12
11
  "scripts": {
13
12
  "start": "concurrently --kill-others --names tsc,web-dev-server \"yarn tsc:watch\" \"web-dev-server --app-index demo/index.html --node-resolve --open --watch --port 3010 --esbuild-target auto\"",
14
13
  "tsc:watch": "tsc --watch",
@@ -22,6 +21,7 @@
22
21
  "format:prettier": "prettier \"**/*.js\" \"**/*.ts\" --write --ignore-path .gitignore",
23
22
  "lint": "yarn lint:eslint && yarn lint:prettier",
24
23
  "format": "yarn format:eslint && yarn format:prettier",
24
+ "test-file": "rimraf out-tsc && tsc && web-test-runner --node-resolve --coverage",
25
25
  "test": "rimraf out-tsc && tsc && web-test-runner --node-resolve --coverage",
26
26
  "test:watch": "web-test-runner --node-resolve --watch",
27
27
  "storybook": "concurrently --kill-others --names tsc,storybook \"npm run tsc:watch\" \"start-storybook --node-resolve --watch --open\"",
@@ -57,7 +57,7 @@
57
57
  "@web/dev-server": "^0.0.12",
58
58
  "@web/test-runner": "^0.7.41",
59
59
  "@web/test-runner-puppeteer": "0.10.5",
60
- "auto-changelog": "^1.16.2",
60
+ "auto-changelog": "*",
61
61
  "concurrently": "^5.1.0",
62
62
  "deepmerge": "^4.2.2",
63
63
  "dynamicpixelmatch": "^0.0.2",
@@ -107,5 +107,6 @@
107
107
  "prismjs": "^1.23.0",
108
108
  "lit-element": "^3",
109
109
  "lit-html": "^2"
110
- }
110
+ },
111
+ "packageManager": "yarn@1.22.1"
111
112
  }
Binary file
@@ -19,9 +19,6 @@ export class ContactBadges extends ContactStoreElement {
19
19
  display: flex;
20
20
  flex-wrap: wrap;
21
21
  }
22
-
23
- .flow {
24
- }
25
22
  `;
26
23
  }
27
24
 
@@ -34,12 +31,11 @@ export class ContactBadges extends ContactStoreElement {
34
31
  ${status && this.data.status !== 'active'
35
32
  ? html`
36
33
  <temba-label
37
- class="status"
38
34
  icon="${status.icon}"
39
35
  onclick="goto(event)"
40
36
  href="/contact/${status.name.toLowerCase()}"
41
- clickable
42
37
  secondary
38
+ clickable
43
39
  shadow
44
40
  >
45
41
  ${status.name}
@@ -49,14 +45,13 @@ export class ContactBadges extends ContactStoreElement {
49
45
  ${this.data.flow
50
46
  ? html`
51
47
  <temba-label
52
- class="flow"
53
48
  icon="flow"
54
49
  onclick="goto(event)"
55
50
  href="/contact/?search=flow+%3D+${encodeURIComponent(
56
51
  '"' + this.data.flow.name + '"'
57
52
  )}"
58
53
  clickable
59
- tertiary
54
+ primary
60
55
  shadow
61
56
  >
62
57
  ${this.data.flow.name}
@@ -66,7 +61,6 @@ export class ContactBadges extends ContactStoreElement {
66
61
  ${this.data.language
67
62
  ? html`
68
63
  <temba-label
69
- class="language"
70
64
  icon="globe"
71
65
  onclick="goto(event)"
72
66
  href="/contact/?search=language+%3D+${encodeURIComponent(
@@ -88,7 +82,6 @@ export class ContactBadges extends ContactStoreElement {
88
82
  href="/contact/filter/${group.uuid}/"
89
83
  icon=${group.is_dynamic ? 'atom' : 'users'}
90
84
  clickable
91
- light
92
85
  shadow
93
86
  >
94
87
  ${group.name}
@@ -350,6 +350,9 @@ export class ContactChat extends ContactStoreElement {
350
350
  </div>`
351
351
  : html` <div
352
352
  class="chatbox ${this.toolbar ? 'full' : ''}"
353
+ style="${this.currentContact.status !== 'active'
354
+ ? 'display:none'
355
+ : ''}"
353
356
  >
354
357
  <temba-completion
355
358
  @change=${this.handleChatChange}
@@ -1,8 +1,14 @@
1
1
  import { css, html, TemplateResult } from 'lit';
2
2
  import { property } from 'lit/decorators';
3
- import { ContactStoreElement } from './ContactStoreElement';
3
+ import { RapidElement } from '../RapidElement';
4
+
5
+ export class ContactName extends RapidElement {
6
+ @property({ type: String })
7
+ name: string;
8
+
9
+ @property({ type: String })
10
+ urn: string;
4
11
 
5
- export class ContactName extends ContactStoreElement {
6
12
  @property({ type: Number, attribute: 'icon-size' })
7
13
  size = 20;
8
14
 
@@ -10,29 +16,25 @@ export class ContactName extends ContactStoreElement {
10
16
  return css`
11
17
  :host {
12
18
  display: flex;
19
+ align-items: center;
13
20
  }
14
21
 
15
22
  temba-urn {
16
23
  margin-right: 0.2em;
17
- margin-top: 2px;
18
24
  }
19
25
  `;
20
26
  }
21
27
 
22
28
  public render(): TemplateResult {
23
- if (this.data) {
24
- const urn =
25
- this.data.urns.length > 0
26
- ? html`<temba-urn
27
- size=${this.size}
28
- urn="${this.data.urns[0]}"
29
- ></temba-urn>`
30
- : null;
31
- return html`
32
- ${urn}
33
- <div class="name">${this.data.name}</div>
34
- <slot></slot>
35
- `;
36
- }
29
+ const urn = this.urn
30
+ ? html`<temba-urn size=${this.size} urn=${this.urn}></temba-urn>`
31
+ : null;
32
+ return html`
33
+ ${urn}
34
+ <div class="name">
35
+ ${this.name ? this.name : this.urn ? this.urn.split(':')[1] : ''}
36
+ </div>
37
+ <slot></slot>
38
+ `;
37
39
  }
38
40
  }
@@ -0,0 +1,32 @@
1
+ import { css, html, TemplateResult } from 'lit';
2
+ import { property } from 'lit/decorators';
3
+ import { ContactStoreElement } from './ContactStoreElement';
4
+
5
+ export class ContactNameFetch extends ContactStoreElement {
6
+ @property({ type: Number, attribute: 'icon-size' })
7
+ size = 20;
8
+
9
+ static get styles() {
10
+ return css`
11
+ :host {
12
+ display: flex;
13
+ }
14
+
15
+ temba-urn {
16
+ margin-right: 0.2em;
17
+ margin-top: 2px;
18
+ }
19
+ `;
20
+ }
21
+
22
+ public render(): TemplateResult {
23
+ if (this.data) {
24
+ console.log(this.data);
25
+ return html` <temba-contact-name
26
+ name=${this.data.name}
27
+ urn=${this.data.urns.length > 0 ? this.data.urns[0] : null}
28
+ />
29
+ <slot></slot>`;
30
+ }
31
+ }
32
+ }