@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.
- package/.eslintrc.js +1 -0
- package/.yarnrc +1 -1
- package/.yarnrc.yml +1 -0
- package/CHANGELOG.md +105 -57
- package/dist/{64e63814.js → dd72d92e.js} +305 -148
- package/dist/index.js +305 -148
- package/dist/static/icons/symbol-defs.svg +10 -20
- package/dist/sw.js +1 -1
- package/dist/sw.js.map +1 -1
- package/dist/templates/components-body.html +1 -1
- package/dist/templates/components-head.html +1 -1
- package/dist/workbox-80efdfd1.js.map +1 -1
- package/out-tsc/src/contacts/ContactBadges.js +2 -9
- package/out-tsc/src/contacts/ContactBadges.js.map +1 -1
- package/out-tsc/src/contacts/ContactChat.js +3 -0
- package/out-tsc/src/contacts/ContactChat.js.map +1 -1
- package/out-tsc/src/contacts/ContactName.js +19 -16
- package/out-tsc/src/contacts/ContactName.js.map +1 -1
- package/out-tsc/src/contacts/ContactNameFetch.js +36 -0
- package/out-tsc/src/contacts/ContactNameFetch.js.map +1 -0
- package/out-tsc/src/contacts/ContactStoreElement.js +9 -2
- package/out-tsc/src/contacts/ContactStoreElement.js.map +1 -1
- package/out-tsc/src/contacts/ContactUrn.js +12 -1
- package/out-tsc/src/contacts/ContactUrn.js.map +1 -1
- package/out-tsc/src/contacts/events.js +0 -3
- package/out-tsc/src/contacts/events.js.map +1 -1
- package/out-tsc/src/flow/FlowStoreElement.js +43 -0
- package/out-tsc/src/flow/FlowStoreElement.js.map +1 -0
- package/out-tsc/src/interfaces.js.map +1 -1
- package/out-tsc/src/label/Label.js +29 -42
- package/out-tsc/src/label/Label.js.map +1 -1
- package/out-tsc/src/list/RunList.js +317 -0
- package/out-tsc/src/list/RunList.js.map +1 -0
- package/out-tsc/src/list/TembaList.js +38 -14
- package/out-tsc/src/list/TembaList.js.map +1 -1
- package/out-tsc/src/options/Options.js +18 -2
- package/out-tsc/src/options/Options.js.map +1 -1
- package/out-tsc/src/slider/TembaSlider.js +9 -1
- package/out-tsc/src/slider/TembaSlider.js.map +1 -1
- package/out-tsc/src/sms/gsmvalidator.js +9 -138
- package/out-tsc/src/sms/gsmvalidator.js.map +1 -1
- package/out-tsc/src/store/Store.js +13 -3
- package/out-tsc/src/store/Store.js.map +1 -1
- package/out-tsc/src/tabpane/TabPane.js +3 -1
- package/out-tsc/src/tabpane/TabPane.js.map +1 -1
- package/out-tsc/src/utils/index.js +1 -0
- package/out-tsc/src/utils/index.js.map +1 -1
- package/out-tsc/src/vectoricon/VectorIcon.js +6 -11
- package/out-tsc/src/vectoricon/VectorIcon.js.map +1 -1
- package/out-tsc/temba-components.js +1 -2
- package/out-tsc/temba-components.js.map +1 -1
- package/out-tsc/temba-modules.js +7 -1
- package/out-tsc/temba-modules.js.map +1 -1
- package/out-tsc/test/MouseHelper.js +47 -0
- package/out-tsc/test/MouseHelper.js.map +1 -0
- package/out-tsc/test/temba-contact-badges.test.js +23 -0
- package/out-tsc/test/temba-contact-badges.test.js.map +1 -0
- package/out-tsc/test/temba-contact-chat.test.js +111 -7
- package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
- package/out-tsc/test/temba-contact-history.test.js +6 -6
- package/out-tsc/test/temba-contact-history.test.js.map +1 -1
- package/out-tsc/test/temba-dialog.test.js +1 -1
- package/out-tsc/test/temba-dialog.test.js.map +1 -1
- package/out-tsc/test/temba-label.test.js +66 -0
- package/out-tsc/test/temba-label.test.js.map +1 -0
- package/out-tsc/test/temba-list.test.js +1 -1
- package/out-tsc/test/temba-list.test.js.map +1 -1
- package/out-tsc/test/temba-menu.test.js +1 -1
- package/out-tsc/test/temba-menu.test.js.map +1 -1
- package/out-tsc/test/temba-select.test.js +1 -6
- package/out-tsc/test/temba-select.test.js.map +1 -1
- package/out-tsc/test/temba-slider.test.js +151 -8
- package/out-tsc/test/temba-slider.test.js.map +1 -1
- package/out-tsc/test/temba-textinput.test.js +3 -4
- package/out-tsc/test/temba-textinput.test.js.map +1 -1
- package/out-tsc/test/temba-tip.test.js +1 -1
- package/out-tsc/test/temba-tip.test.js.map +1 -1
- package/out-tsc/test/utils.test.js +26 -14
- package/out-tsc/test/utils.test.js.map +1 -1
- package/package.json +5 -4
- package/screenshots/truth/contacts/badges.png +0 -0
- package/screenshots/truth/contacts/contact-active-default.png +0 -0
- package/screenshots/truth/contacts/contact-active-show-chat-history.png +0 -0
- package/screenshots/truth/contacts/contact-active-show-chat-msg.png +0 -0
- package/screenshots/truth/contacts/contact-archived-hide-chat-msg.png +0 -0
- package/screenshots/truth/contacts/contact-archived-show-chat-history.png +0 -0
- package/screenshots/truth/contacts/contact-blocked-hide-chat-msg.png +0 -0
- package/screenshots/truth/contacts/contact-blocked-show-chat-history.png +0 -0
- package/screenshots/truth/contacts/contact-stopped-hide-chat-msg.png +0 -0
- package/screenshots/truth/contacts/contact-stopped-show-chat-history.png +0 -0
- package/screenshots/truth/contacts/history-expanded.png +0 -0
- package/screenshots/truth/contacts/history.png +0 -0
- package/screenshots/truth/label/custom.png +0 -0
- package/screenshots/truth/label/danger.png +0 -0
- package/screenshots/truth/label/dark.png +0 -0
- package/screenshots/truth/label/default-icon.png +0 -0
- package/screenshots/truth/label/no-icon.png +0 -0
- package/screenshots/truth/label/primary.png +0 -0
- package/screenshots/truth/label/secondary.png +0 -0
- package/screenshots/truth/label/shadow.png +0 -0
- package/screenshots/truth/label/tertiary.png +0 -0
- package/screenshots/truth/slider/custom-min-custom-max-valid-value.png +0 -0
- package/screenshots/truth/slider/custom-min-default-max-no-value.png +0 -0
- package/screenshots/truth/slider/default-min-custom-max-no-value.png +0 -0
- package/screenshots/truth/slider/default-min-default-max-invalid-value.png +0 -0
- package/screenshots/truth/slider/default-min-default-max-valid-value.png +0 -0
- package/screenshots/truth/slider/default.png +0 -0
- package/screenshots/truth/slider/no-visible-range-invalid-value.png +0 -0
- package/screenshots/truth/slider/no-visible-range-no-value.png +0 -0
- package/screenshots/truth/slider/no-visible-range-valid-value.png +0 -0
- package/screenshots/truth/slider/update-slider-on-circle-dragged.png +0 -0
- package/screenshots/truth/slider/update-slider-on-track-clicked.png +0 -0
- package/screenshots/truth/slider/update-slider-on-value-change.png +0 -0
- package/src/contacts/ContactBadges.ts +2 -9
- package/src/contacts/ContactChat.ts +3 -0
- package/src/contacts/ContactName.ts +19 -17
- package/src/contacts/ContactNameFetch.ts +32 -0
- package/src/contacts/ContactStoreElement.ts +5 -2
- package/src/contacts/ContactUrn.ts +12 -1
- package/src/contacts/events.ts +0 -3
- package/src/flow/FlowStoreElement.ts +42 -0
- package/src/interfaces.ts +19 -0
- package/src/label/Label.ts +31 -43
- package/src/list/RunList.ts +353 -0
- package/src/list/TembaList.ts +50 -14
- package/src/options/Options.ts +17 -2
- package/src/slider/TembaSlider.ts +8 -1
- package/src/sms/gsmvalidator.ts +9 -138
- package/src/store/Store.ts +20 -3
- package/src/tabpane/TabPane.ts +3 -1
- package/src/untyped.d.ts +3 -0
- package/src/utils/index.ts +3 -0
- package/src/vectoricon/VectorIcon.ts +5 -10
- package/static/css/temba-components.css +4 -9
- package/static/icons/Read Me.txt +15 -15
- package/static/icons/SVG/credits.svg +5 -0
- package/static/icons/SVG/hourglass.svg +5 -0
- package/static/icons/demo-external-svg.html +142 -157
- package/static/icons/demo-files/demo.css +4 -4
- package/static/icons/demo.html +152 -177
- package/static/icons/selection.json +396 -339
- package/static/icons/style.css +0 -4
- package/static/icons/symbol-defs.svg +10 -20
- package/temba-components.ts +1 -2
- package/temba-modules.ts +7 -1
- package/test/MouseHelper.ts +47 -0
- package/test/temba-contact-badges.test.ts +33 -0
- package/test/temba-contact-chat.test.ts +202 -6
- package/test/temba-contact-history.test.ts +6 -6
- package/test/temba-dialog.test.ts +1 -1
- package/test/temba-label.test.ts +75 -0
- package/test/temba-list.test.ts +1 -1
- package/test/temba-menu.test.ts +1 -0
- package/test/temba-select.test.ts +6 -10
- package/test/temba-slider.test.ts +204 -8
- package/test/temba-textinput.test.ts +3 -4
- package/test/temba-tip.test.ts +1 -1
- package/test/utils.test.ts +34 -16
- package/test-assets/contacts/contact-barak-archived +40 -0
- package/test-assets/contacts/contact-dave-active +52 -0
- package/test-assets/contacts/contact-michelle-blocked +40 -0
- package/test-assets/contacts/contact-tim-stopped +52 -0
- package/test-assets/store/groups.json +29 -0
- package/test-assets/store/languages.json +290 -0
- package/test-assets/style.css +2 -0
- package/web-test-runner.config.mjs +16 -0
- package/.yarn/releases/yarn-1.22.10.cjs +0 -147392
- package/out-tsc/src/contacts/ContactGroups.js +0 -40
- package/out-tsc/src/contacts/ContactGroups.js.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
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":"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,eAAe,CAAC,CAAQ,CAAC;
|
|
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, 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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
+
}
|