@nyaruka/temba-components 0.123.0 → 0.124.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +22 -4
- package/CHANGELOG.md +21 -0
- package/TEST_OPTIMIZATION.md +158 -0
- package/demo/alert/example.html +65 -0
- package/demo/button/example.html +71 -0
- package/demo/chart/example.html +56 -0
- package/demo/checkbox/example.html +72 -0
- package/demo/compose/example.html +72 -0
- package/demo/data/images/gus.png +0 -0
- package/demo/data/images/purrington.jpg +0 -0
- package/demo/data/server/opened-tickets.json +40 -0
- package/demo/data/server/response-time.json +27 -0
- package/demo/datepicker/example.html +69 -0
- package/demo/dialog/example.html +107 -0
- package/demo/dropdown/example.html +99 -0
- package/demo/index.html +152 -430
- package/demo/misc/example.html +72 -0
- package/demo/progress/example.html +59 -0
- package/demo/select/drag-and-drop.html +142 -0
- package/demo/select/example.html +82 -0
- package/demo/select/multi.html +73 -0
- package/demo/slider/example.html +59 -0
- package/demo/sortable-list/example.html +99 -0
- package/demo/styles.css +183 -0
- package/demo/tabs/example.html +91 -0
- package/demo/textinput/completion.html +56 -0
- package/demo/textinput/example.html +61 -0
- package/dist/temba-components.js +323 -191
- package/dist/temba-components.js.map +1 -1
- package/out-tsc/src/chart/TembaChart.js +19 -16
- package/out-tsc/src/chart/TembaChart.js.map +1 -1
- package/out-tsc/src/fields/FieldManager.js +27 -34
- package/out-tsc/src/fields/FieldManager.js.map +1 -1
- package/out-tsc/src/flow/Editor.js +1 -1
- package/out-tsc/src/flow/Editor.js.map +1 -1
- package/out-tsc/src/list/SortableList.js +257 -60
- package/out-tsc/src/list/SortableList.js.map +1 -1
- package/out-tsc/src/omnibox/Omnibox.js +1 -1
- package/out-tsc/src/omnibox/Omnibox.js.map +1 -1
- package/out-tsc/src/select/Select.js +198 -38
- package/out-tsc/src/select/Select.js.map +1 -1
- package/out-tsc/src/thumbnail/Thumbnail.js +1 -1
- package/out-tsc/src/thumbnail/Thumbnail.js.map +1 -1
- package/out-tsc/src/webchat/WebChat.js +5 -2
- package/out-tsc/src/webchat/WebChat.js.map +1 -1
- package/out-tsc/test/temba-chart.test.js +1 -1
- package/out-tsc/test/temba-chart.test.js.map +1 -1
- package/out-tsc/test/temba-compose.test.js +6 -30
- package/out-tsc/test/temba-compose.test.js.map +1 -1
- package/out-tsc/test/temba-contact-chat.test.js +1 -2
- package/out-tsc/test/temba-contact-chat.test.js.map +1 -1
- package/out-tsc/test/temba-dropdown.test.js +1 -1
- package/out-tsc/test/temba-dropdown.test.js.map +1 -1
- package/out-tsc/test/temba-flow-editor-node.test.js +273 -0
- package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -0
- package/out-tsc/test/temba-flow-editor.test.js +244 -0
- package/out-tsc/test/temba-flow-editor.test.js.map +1 -0
- package/out-tsc/test/temba-flow-plumber.test.js +145 -0
- package/out-tsc/test/temba-flow-plumber.test.js.map +1 -0
- package/out-tsc/test/temba-flow-render.test.js +171 -0
- package/out-tsc/test/temba-flow-render.test.js.map +1 -0
- package/out-tsc/test/temba-omnibox.test.js +6 -3
- package/out-tsc/test/temba-omnibox.test.js.map +1 -1
- package/out-tsc/test/temba-select.test.js +183 -53
- package/out-tsc/test/temba-select.test.js.map +1 -1
- package/out-tsc/test/temba-sortable-list.test.js +91 -15
- package/out-tsc/test/temba-sortable-list.test.js.map +1 -1
- package/out-tsc/test/temba-toast.test.js +1 -2
- package/out-tsc/test/temba-toast.test.js.map +1 -1
- package/out-tsc/test/temba-utils-index.test.js +2 -2
- package/out-tsc/test/temba-utils-index.test.js.map +1 -1
- package/out-tsc/test/temba-webchat-lightbox-fix.test.js +42 -0
- package/out-tsc/test/temba-webchat-lightbox-fix.test.js.map +1 -0
- package/out-tsc/test/utils.test.js +58 -0
- package/out-tsc/test/utils.test.js.map +1 -1
- package/package.json +2 -3
- package/screenshots/truth/flow/editor-basic.png +0 -0
- package/screenshots/truth/list/fields-dragging.png +0 -0
- package/screenshots/truth/list/sortable-dragging.png +0 -0
- package/screenshots/truth/list/sortable-dropped.png +0 -0
- package/screenshots/truth/list/sortable.png +0 -0
- package/screenshots/truth/omnibox/selected.png +0 -0
- package/screenshots/truth/select/disabled-multi-selection.png +0 -0
- package/screenshots/truth/select/disabled-selection.png +0 -0
- package/screenshots/truth/select/disabled.png +0 -0
- package/screenshots/truth/select/embedded.png +0 -0
- package/screenshots/truth/select/empty-options.png +0 -0
- package/screenshots/truth/select/expression-selected.png +0 -0
- package/screenshots/truth/select/expressions.png +0 -0
- package/screenshots/truth/select/functions.png +0 -0
- package/screenshots/truth/select/local-options.png +0 -0
- package/screenshots/truth/select/multi-reorder-final.png +0 -0
- package/screenshots/truth/select/multi-reorder-initial.png +0 -0
- package/screenshots/truth/select/multi-with-endpoint.png +0 -0
- package/screenshots/truth/select/multiple-initial-values.png +0 -0
- package/screenshots/truth/select/remote-options.png +0 -0
- package/screenshots/truth/select/search-enabled.png +0 -0
- package/screenshots/truth/select/search-multi-no-matches.png +0 -0
- package/screenshots/truth/select/search-selected-focus.png +0 -0
- package/screenshots/truth/select/search-selected.png +0 -0
- package/screenshots/truth/select/search-with-selected.png +0 -0
- package/screenshots/truth/select/searching.png +0 -0
- package/screenshots/truth/select/selected-multi-maxitems-reached.png +0 -0
- package/screenshots/truth/select/selected-multi.png +0 -0
- package/screenshots/truth/select/selected-single.png +0 -0
- package/screenshots/truth/select/selection-clearable.png +0 -0
- package/screenshots/truth/select/static-initial-value.png +0 -0
- package/screenshots/truth/select/static-initial-via-selected.png +0 -0
- package/screenshots/truth/select/truncated-selection.png +0 -0
- package/screenshots/truth/select/with-placeholder.png +0 -0
- package/screenshots/truth/select/without-placeholder.png +0 -0
- package/screenshots/truth/templates/default.png +0 -0
- package/screenshots/truth/templates/unapproved.png +0 -0
- package/screenshots/truth/webchat/connected-state.png +0 -0
- package/src/chart/TembaChart.ts +20 -16
- package/src/fields/FieldManager.ts +30 -38
- package/src/flow/Editor.ts +1 -1
- package/src/list/SortableList.ts +291 -67
- package/src/omnibox/Omnibox.ts +1 -1
- package/src/select/Select.ts +213 -42
- package/src/thumbnail/Thumbnail.ts +1 -1
- package/src/webchat/WebChat.ts +5 -2
- package/test/temba-chart.test.ts +1 -1
- package/test/temba-compose.test.ts +11 -38
- package/test/temba-contact-chat.test.ts +4 -6
- package/test/temba-dropdown.test.ts +1 -1
- package/test/temba-flow-editor-node.test.ts +344 -0
- package/test/temba-flow-editor.test.ts +301 -0
- package/test/temba-flow-plumber.test.ts +189 -0
- package/test/temba-flow-render.test.ts +220 -0
- package/test/temba-omnibox.test.ts +7 -3
- package/test/temba-select.test.ts +247 -79
- package/test/temba-sortable-list.test.ts +108 -15
- package/test/temba-toast.test.ts +2 -2
- package/test/temba-utils-index.test.ts +2 -2
- package/test/temba-webchat-lightbox-fix.test.ts +57 -0
- package/test/utils.test.ts +88 -0
- package/web-test-runner.config.mjs +4 -2
- package/.storybook/main.js +0 -14
- package/.storybook/preview-head.html +0 -1
- package/.storybook/preview.js +0 -17
- package/demo/agents.html +0 -147
- package/demo/old.html +0 -573
- package/demo/remote.html +0 -3
- package/screenshots/truth/compose/attachments-with-files-focused.png +0 -0
- package/stories/temba-checkbox.stories.md +0 -37
|
@@ -2,43 +2,119 @@ import { expect, fixture, oneEvent } from '@open-wc/testing';
|
|
|
2
2
|
import { html } from 'lit';
|
|
3
3
|
import { CustomEventType } from '../src/interfaces';
|
|
4
4
|
import { assertScreenshot, getClip } from './utils.test';
|
|
5
|
+
import { useFakeTimers } from 'sinon';
|
|
5
6
|
const BORING_LIST = html `
|
|
6
7
|
<temba-sortable-list>
|
|
7
|
-
<
|
|
8
|
-
|
|
8
|
+
<style>
|
|
9
|
+
.sortable {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
text-align: center;
|
|
14
|
+
height: 20px;
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
<div class="sortable" id="chicken" style="">Chicken</div>
|
|
18
|
+
<div class="sortable" id="fish">Fish</div>
|
|
19
|
+
</temba-sortable-list>
|
|
20
|
+
`;
|
|
21
|
+
const HORIZONTAL_LIST = html `
|
|
22
|
+
<temba-sortable-list horizontal>
|
|
23
|
+
<style>
|
|
24
|
+
.sortable {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
text-align: center;
|
|
29
|
+
height: 20px;
|
|
30
|
+
width: 50px;
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
33
|
+
<div class="sortable" id="red">Red</div>
|
|
34
|
+
<div class="sortable" id="blue">Blue</div>
|
|
35
|
+
<div class="sortable" id="green">Green</div>
|
|
9
36
|
</temba-sortable-list>
|
|
10
37
|
`;
|
|
11
38
|
const createSorter = async (def) => {
|
|
12
39
|
const parentNode = document.createElement('div');
|
|
13
|
-
parentNode.setAttribute('style', 'width:
|
|
40
|
+
parentNode.setAttribute('style', 'width: 100px;');
|
|
14
41
|
return (await fixture(def, { parentNode }));
|
|
15
42
|
};
|
|
16
43
|
describe('temba-sortable-list', () => {
|
|
44
|
+
let clock;
|
|
45
|
+
beforeEach(function () {
|
|
46
|
+
clock = useFakeTimers();
|
|
47
|
+
clock.runAll();
|
|
48
|
+
});
|
|
49
|
+
afterEach(function () {
|
|
50
|
+
clock.restore();
|
|
51
|
+
});
|
|
17
52
|
it('renders default', async () => {
|
|
18
53
|
const list = await createSorter(BORING_LIST);
|
|
19
54
|
await assertScreenshot('list/sortable', getClip(list));
|
|
20
55
|
});
|
|
21
|
-
it('
|
|
56
|
+
it('can get ids of sortable elements', async () => {
|
|
22
57
|
const list = await createSorter(BORING_LIST);
|
|
23
|
-
|
|
24
|
-
const
|
|
58
|
+
await list.updateComplete;
|
|
59
|
+
const ids = list.getIds();
|
|
60
|
+
expect(ids).to.deep.equal(['chicken', 'fish']);
|
|
61
|
+
});
|
|
62
|
+
it('works with horizontal layout', async () => {
|
|
63
|
+
const list = await createSorter(HORIZONTAL_LIST);
|
|
64
|
+
await list.updateComplete;
|
|
65
|
+
const ids = list.getIds();
|
|
66
|
+
expect(ids).to.deep.equal(['red', 'blue', 'green']);
|
|
67
|
+
// Test horizontal drag behavior
|
|
25
68
|
const bounds = list.getBoundingClientRect();
|
|
26
|
-
|
|
69
|
+
const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);
|
|
70
|
+
// Drag the first item (red) to after the second item (blue)
|
|
71
|
+
await moveMouse(bounds.left + 10, bounds.top + 10);
|
|
27
72
|
await mouseDown();
|
|
28
|
-
await moveMouse(bounds.left +
|
|
29
|
-
|
|
73
|
+
await moveMouse(bounds.left + 80, bounds.top + 10);
|
|
74
|
+
await mouseUp();
|
|
75
|
+
clock.runAll();
|
|
30
76
|
const orderEvent = await orderChanged;
|
|
31
77
|
expect(orderEvent.detail).to.deep.equal({
|
|
32
|
-
|
|
33
|
-
to: 'chicken',
|
|
34
|
-
fromIdx: 1,
|
|
35
|
-
toIdx: 0
|
|
78
|
+
swap: [0, 2]
|
|
36
79
|
});
|
|
80
|
+
});
|
|
81
|
+
it('handles prepareGhost callback', async () => {
|
|
82
|
+
const list = await createSorter(BORING_LIST);
|
|
83
|
+
let ghostPrepared = false;
|
|
84
|
+
list.prepareGhost = (ghost) => {
|
|
85
|
+
ghostPrepared = true;
|
|
86
|
+
ghost.style.backgroundColor = 'red';
|
|
87
|
+
};
|
|
88
|
+
const bounds = list.getBoundingClientRect();
|
|
89
|
+
// Start dragging to trigger ghost creation
|
|
90
|
+
await moveMouse(bounds.left + 20, bounds.bottom - 10);
|
|
91
|
+
await mouseDown();
|
|
92
|
+
await moveMouse(bounds.left + 30, bounds.bottom - 10);
|
|
93
|
+
expect(ghostPrepared).to.be.true;
|
|
94
|
+
// Clean up
|
|
95
|
+
await mouseUp();
|
|
96
|
+
clock.runAll();
|
|
97
|
+
});
|
|
98
|
+
it('drags', async () => {
|
|
99
|
+
const list = await createSorter(BORING_LIST);
|
|
100
|
+
const updated = oneEvent(list, 'change', false);
|
|
101
|
+
const bounds = list.getBoundingClientRect();
|
|
102
|
+
await moveMouse(bounds.left + 20, bounds.bottom - 10);
|
|
103
|
+
await mouseDown();
|
|
104
|
+
await moveMouse(bounds.left + 20, bounds.top + 5);
|
|
37
105
|
// should be hovered
|
|
38
106
|
await assertScreenshot('list/sortable-dragging', getClip(list));
|
|
39
|
-
// now lets drop
|
|
40
|
-
|
|
107
|
+
// now lets drop - this will fire the order changed event
|
|
108
|
+
const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);
|
|
41
109
|
await mouseUp();
|
|
110
|
+
clock.runAll();
|
|
111
|
+
await list.updateComplete;
|
|
112
|
+
clock.runAll();
|
|
113
|
+
// we should fire an order changed event on drop
|
|
114
|
+
const orderEvent = await orderChanged;
|
|
115
|
+
expect(orderEvent.detail).to.deep.equal({
|
|
116
|
+
swap: [1, 0]
|
|
117
|
+
});
|
|
42
118
|
await assertScreenshot('list/sortable-dropped', getClip(list));
|
|
43
119
|
// we should fire a change event
|
|
44
120
|
const changeEvent = await updated;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temba-sortable-list.test.js","sourceRoot":"","sources":["../../test/temba-sortable-list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"temba-sortable-list.test.js","sourceRoot":"","sources":["../../test/temba-sortable-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html, TemplateResult } from 'lit';\nimport { CustomEventType } from '../src/interfaces';\nimport { SortableList } from '../src/list/SortableList';\nimport { assertScreenshot, getClip } from './utils.test';\nimport Sinon, { useFakeTimers } from 'sinon';\n\nconst BORING_LIST = html`\n <temba-sortable-list>\n <style>\n .sortable {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n height: 20px;\n }\n </style>\n <div class=\"sortable\" id=\"chicken\" style=\"\">Chicken</div>\n <div class=\"sortable\" id=\"fish\">Fish</div>\n </temba-sortable-list>\n`;\n\nconst HORIZONTAL_LIST = html`\n <temba-sortable-list horizontal>\n <style>\n .sortable {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n height: 20px;\n width: 50px;\n }\n </style>\n <div class=\"sortable\" id=\"red\">Red</div>\n <div class=\"sortable\" id=\"blue\">Blue</div>\n <div class=\"sortable\" id=\"green\">Green</div>\n </temba-sortable-list>\n`;\n\nconst createSorter = async (def: TemplateResult) => {\n const parentNode = document.createElement('div');\n parentNode.setAttribute('style', 'width: 100px;');\n return (await fixture(def, { parentNode })) as SortableList;\n};\n\ndescribe('temba-sortable-list', () => {\n let clock: Sinon.SinonFakeTimers;\n beforeEach(function () {\n clock = useFakeTimers();\n clock.runAll();\n });\n\n afterEach(function () {\n clock.restore();\n });\n\n it('renders default', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n await assertScreenshot('list/sortable', getClip(list));\n });\n\n it('can get ids of sortable elements', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n await list.updateComplete;\n\n const ids = list.getIds();\n expect(ids).to.deep.equal(['chicken', 'fish']);\n });\n\n it('works with horizontal layout', async () => {\n const list: SortableList = await createSorter(HORIZONTAL_LIST);\n await list.updateComplete;\n\n const ids = list.getIds();\n expect(ids).to.deep.equal(['red', 'blue', 'green']);\n\n // Test horizontal drag behavior\n const bounds = list.getBoundingClientRect();\n const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);\n\n // Drag the first item (red) to after the second item (blue)\n await moveMouse(bounds.left + 10, bounds.top + 10);\n await mouseDown();\n await moveMouse(bounds.left + 80, bounds.top + 10);\n await mouseUp();\n clock.runAll();\n\n const orderEvent = await orderChanged;\n expect(orderEvent.detail).to.deep.equal({\n swap: [0, 2]\n });\n });\n\n it('handles prepareGhost callback', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n let ghostPrepared = false;\n\n list.prepareGhost = (ghost: HTMLElement) => {\n ghostPrepared = true;\n ghost.style.backgroundColor = 'red';\n };\n\n const bounds = list.getBoundingClientRect();\n\n // Start dragging to trigger ghost creation\n await moveMouse(bounds.left + 20, bounds.bottom - 10);\n await mouseDown();\n await moveMouse(bounds.left + 30, bounds.bottom - 10);\n\n expect(ghostPrepared).to.be.true;\n\n // Clean up\n await mouseUp();\n clock.runAll();\n });\n\n it('drags', async () => {\n const list: SortableList = await createSorter(BORING_LIST);\n const updated = oneEvent(list, 'change', false);\n\n const bounds = list.getBoundingClientRect();\n\n await moveMouse(bounds.left + 20, bounds.bottom - 10);\n await mouseDown();\n await moveMouse(bounds.left + 20, bounds.top + 5);\n\n // should be hovered\n await assertScreenshot('list/sortable-dragging', getClip(list));\n\n // now lets drop - this will fire the order changed event\n const orderChanged = oneEvent(list, CustomEventType.OrderChanged, false);\n await mouseUp();\n clock.runAll();\n await list.updateComplete;\n clock.runAll();\n\n // we should fire an order changed event on drop\n const orderEvent = await orderChanged;\n expect(orderEvent.detail).to.deep.equal({\n swap: [1, 0]\n });\n\n await assertScreenshot('list/sortable-dropped', getClip(list));\n\n // we should fire a change event\n const changeEvent = await updated;\n expect(changeEvent.type).to.equal('change');\n });\n});\n"]}
|
|
@@ -107,8 +107,7 @@ describe('temba-toast', () => {
|
|
|
107
107
|
toast.info('Test message');
|
|
108
108
|
// Initially not visible
|
|
109
109
|
expect(toast.messages[0].visible).to.be.undefined;
|
|
110
|
-
|
|
111
|
-
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
110
|
+
await waitFor(200);
|
|
112
111
|
expect(toast.messages[0].visible).to.be.true;
|
|
113
112
|
});
|
|
114
113
|
it('removes message manually', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temba-toast.test.js","sourceRoot":"","sources":["../../test/temba-toast.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, assert, expect } from '@open-wc/testing';\nimport { Toast } from '../src/toast/Toast';\n\n// Register the component if it's not already registered\nif (!customElements.get('temba-toast')) {\n customElements.define('temba-toast', Toast);\n}\n\nexport const createToast = async (attrs: any = {}) => {\n const attrString = Object.keys(attrs)\n .map((key) => `${key}=\"${attrs[key]}\"`)\n .join(' ');\n\n return (await fixture(`<temba-toast ${attrString}></temba-toast>`)) as Toast;\n};\n\ndescribe('temba-toast', () => {\n it('can be created', async () => {\n const toast = await createToast();\n assert.instanceOf(toast, Toast);\n expect(toast.messages).to.deep.equal([]);\n expect(toast.staleDuration).to.equal(5000);\n expect(toast.animationDuration).to.equal(200);\n expect(toast.errorSticky).to.be.false;\n expect(toast.warningSticky).to.be.false;\n expect(toast.infoSticky).to.be.false;\n });\n\n it('can set properties via attributes', async () => {\n const toast = await createToast({\n duration: '3000',\n animation: '300',\n 'error-sticky': 'true',\n 'warning-sticky': 'true',\n 'info-sticky': 'true'\n });\n\n expect(toast.staleDuration).to.equal(3000);\n expect(toast.animationDuration).to.equal(300);\n expect(toast.errorSticky).to.be.true;\n expect(toast.warningSticky).to.be.true;\n expect(toast.infoSticky).to.be.true;\n });\n\n it('adds info message', async () => {\n const toast = await createToast();\n toast.info('This is an info message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is an info message');\n expect(toast.messages[0].level).to.equal('info');\n expect(toast.messages[0].id).to.equal(1);\n expect(toast.messages[0].time).to.be.instanceOf(Date);\n expect(toast.messages[0].visible).to.be.undefined;\n });\n\n it('adds warning message', async () => {\n const toast = await createToast();\n toast.warning('This is a warning message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is a warning message');\n expect(toast.messages[0].level).to.equal('warning');\n expect(toast.messages[0].id).to.equal(1);\n });\n\n it('adds error message', async () => {\n const toast = await createToast();\n toast.error('This is an error message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is an error message');\n expect(toast.messages[0].level).to.equal('error');\n expect(toast.messages[0].id).to.equal(1);\n });\n\n it('adds multiple messages with incrementing IDs', async () => {\n const toast = await createToast();\n toast.info('First message');\n toast.warning('Second message');\n toast.error('Third message');\n\n expect(toast.messages).to.have.length(3);\n expect(toast.messages[0].id).to.equal(1);\n expect(toast.messages[1].id).to.equal(2);\n expect(toast.messages[2].id).to.equal(3);\n });\n\n it('adds multiple messages using addMessages', async () => {\n const toast = await createToast();\n const messages = [\n {\n text: 'First message',\n level: 'info' as const,\n id: 1,\n time: new Date()\n },\n {\n text: 'Second message',\n level: 'warning' as const,\n id: 2,\n time: new Date()\n },\n {\n text: 'Third message',\n level: 'error' as const,\n id: 3,\n time: new Date()\n }\n ];\n\n toast.addMessages(messages);\n\n expect(toast.messages).to.have.length(3);\n expect(toast.messages[0].text).to.equal('First message');\n expect(toast.messages[0].level).to.equal('info');\n expect(toast.messages[1].text).to.equal('Second message');\n expect(toast.messages[1].level).to.equal('warning');\n expect(toast.messages[2].text).to.equal('Third message');\n expect(toast.messages[2].level).to.equal('error');\n });\n\n it('makes messages visible after delay', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n // Initially not visible\n expect(toast.messages[0].visible).to.be.undefined;\n\n // Wait for the timeout\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n expect(toast.messages[0].visible).to.be.true;\n });\n\n it('removes message manually', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n const message = toast.messages[0];\n expect(toast.messages).to.have.length(1);\n\n toast.removeMessage(message);\n\n // Message should have removeTime set\n expect(message.removeTime).to.be.instanceOf(Date);\n\n // Wait for animation to complete\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('handles message click to remove', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n // Wait for render\n await toast.updateComplete;\n\n const closeIcon = toast.shadowRoot?.querySelector(\n 'temba-icon[name=\"close\"]'\n ) as HTMLElement;\n expect(closeIcon).to.exist;\n\n // Simulate click\n closeIcon.click();\n\n // Wait for animation\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('handles invalid message ID in click handler', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n // Create a mock event with invalid message_id\n const mockEvent = {\n target: {\n getAttribute: () => 'invalid'\n }\n } as any;\n\n // Should not throw error\n expect(() => {\n (toast as any).handleMessageClicked(mockEvent);\n }).to.not.throw();\n\n // Message should still exist\n expect(toast.messages).to.have.length(1);\n });\n\n it('handles missing message in click handler', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n // Create a mock event with non-existent message_id\n const mockEvent = {\n target: {\n getAttribute: () => '999'\n }\n } as any;\n\n // Should not throw error\n expect(() => {\n (toast as any).handleMessageClicked(mockEvent);\n }).to.not.throw();\n\n // Message should still exist\n expect(toast.messages).to.have.length(1);\n });\n\n it('checks for stale messages', async () => {\n const toast = await createToast({ duration: '100' }); // 100ms duration\n toast.info('Test message');\n\n // Wait for message to become stale\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n // Manually trigger stale check\n toast.checkForStaleMessages();\n\n // Wait for removal animation\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('respects sticky info messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'info-sticky': 'true'\n });\n toast.info('Sticky info message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('respects sticky warning messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'warning-sticky': 'true'\n });\n toast.warning('Sticky warning message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('respects sticky error messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'error-sticky': 'true'\n });\n toast.error('Sticky error message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('clears interval when no messages remain', async () => {\n const toast = await createToast({ duration: '100' });\n toast.info('Test message');\n\n // Verify interval is set\n expect((toast as any).checker).to.be.greaterThan(0);\n\n // Wait for stale and removal\n await new Promise((resolve) => setTimeout(resolve, 150));\n toast.checkForStaleMessages();\n\n // Wait for the removeMessage animation to complete\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n // Now trigger checkForStaleMessages again to clear the interval\n toast.checkForStaleMessages();\n\n // Interval should be cleared\n expect((toast as any).checker).to.equal(0);\n });\n\n it('clears existing interval when adding new message', async () => {\n const toast = await createToast();\n toast.info('First message');\n\n const firstChecker = (toast as any).checker;\n expect(firstChecker).to.be.greaterThan(0);\n\n toast.info('Second message');\n\n // Should have new interval\n expect((toast as any).checker).to.be.greaterThan(0);\n expect((toast as any).checker).to.not.equal(firstChecker);\n });\n\n it('renders messages with correct CSS classes', async () => {\n const toast = await createToast();\n toast.info('Info message');\n toast.warning('Warning message');\n toast.error('Error message');\n\n await toast.updateComplete;\n\n const messages = toast.shadowRoot?.querySelectorAll('.message');\n expect(messages).to.have.length(3);\n\n expect(messages?.[0]).to.have.class('info');\n expect(messages?.[1]).to.have.class('warning');\n expect(messages?.[2]).to.have.class('error');\n });\n\n it('renders messages with visible class after delay', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message');\n expect(message).to.not.have.class('visible');\n\n // Wait for visibility timeout\n await new Promise((resolve) => setTimeout(resolve, 150));\n await toast.updateComplete;\n\n expect(message).to.have.class('visible');\n });\n\n it('renders messages with removing class when removed', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const messageData = toast.messages[0];\n toast.removeMessage(messageData);\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message');\n expect(message).to.have.class('removing');\n });\n\n it('renders close icons with correct message_id', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const closeIcon = toast.shadowRoot?.querySelector(\n 'temba-icon[name=\"close\"]'\n );\n expect(closeIcon?.getAttribute('message_id')).to.equal('1');\n });\n\n it('renders correct animation duration styles', async () => {\n const toast = await createToast({ animation: '500' });\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message') as HTMLElement;\n expect(message?.style.transitionDuration).to.equal('500ms');\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"temba-toast.test.js","sourceRoot":"","sources":["../../test/temba-toast.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, assert, expect } from '@open-wc/testing';\nimport { Toast } from '../src/toast/Toast';\n\n// Register the component if it's not already registered\nif (!customElements.get('temba-toast')) {\n customElements.define('temba-toast', Toast);\n}\n\nexport const createToast = async (attrs: any = {}) => {\n const attrString = Object.keys(attrs)\n .map((key) => `${key}=\"${attrs[key]}\"`)\n .join(' ');\n\n return (await fixture(`<temba-toast ${attrString}></temba-toast>`)) as Toast;\n};\n\ndescribe('temba-toast', () => {\n it('can be created', async () => {\n const toast = await createToast();\n\n assert.instanceOf(toast, Toast);\n expect(toast.messages).to.deep.equal([]);\n expect(toast.staleDuration).to.equal(5000);\n expect(toast.animationDuration).to.equal(200);\n expect(toast.errorSticky).to.be.false;\n expect(toast.warningSticky).to.be.false;\n expect(toast.infoSticky).to.be.false;\n });\n\n it('can set properties via attributes', async () => {\n const toast = await createToast({\n duration: '3000',\n animation: '300',\n 'error-sticky': 'true',\n 'warning-sticky': 'true',\n 'info-sticky': 'true'\n });\n\n expect(toast.staleDuration).to.equal(3000);\n expect(toast.animationDuration).to.equal(300);\n expect(toast.errorSticky).to.be.true;\n expect(toast.warningSticky).to.be.true;\n expect(toast.infoSticky).to.be.true;\n });\n\n it('adds info message', async () => {\n const toast = await createToast();\n toast.info('This is an info message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is an info message');\n expect(toast.messages[0].level).to.equal('info');\n expect(toast.messages[0].id).to.equal(1);\n expect(toast.messages[0].time).to.be.instanceOf(Date);\n expect(toast.messages[0].visible).to.be.undefined;\n });\n\n it('adds warning message', async () => {\n const toast = await createToast();\n toast.warning('This is a warning message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is a warning message');\n expect(toast.messages[0].level).to.equal('warning');\n expect(toast.messages[0].id).to.equal(1);\n });\n\n it('adds error message', async () => {\n const toast = await createToast();\n toast.error('This is an error message');\n\n expect(toast.messages).to.have.length(1);\n expect(toast.messages[0].text).to.equal('This is an error message');\n expect(toast.messages[0].level).to.equal('error');\n expect(toast.messages[0].id).to.equal(1);\n });\n\n it('adds multiple messages with incrementing IDs', async () => {\n const toast = await createToast();\n toast.info('First message');\n toast.warning('Second message');\n toast.error('Third message');\n\n expect(toast.messages).to.have.length(3);\n expect(toast.messages[0].id).to.equal(1);\n expect(toast.messages[1].id).to.equal(2);\n expect(toast.messages[2].id).to.equal(3);\n });\n\n it('adds multiple messages using addMessages', async () => {\n const toast = await createToast();\n const messages = [\n {\n text: 'First message',\n level: 'info' as const,\n id: 1,\n time: new Date()\n },\n {\n text: 'Second message',\n level: 'warning' as const,\n id: 2,\n time: new Date()\n },\n {\n text: 'Third message',\n level: 'error' as const,\n id: 3,\n time: new Date()\n }\n ];\n\n toast.addMessages(messages);\n\n expect(toast.messages).to.have.length(3);\n expect(toast.messages[0].text).to.equal('First message');\n expect(toast.messages[0].level).to.equal('info');\n expect(toast.messages[1].text).to.equal('Second message');\n expect(toast.messages[1].level).to.equal('warning');\n expect(toast.messages[2].text).to.equal('Third message');\n expect(toast.messages[2].level).to.equal('error');\n });\n\n it('makes messages visible after delay', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n // Initially not visible\n expect(toast.messages[0].visible).to.be.undefined;\n\n await waitFor(200);\n\n expect(toast.messages[0].visible).to.be.true;\n });\n\n it('removes message manually', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n const message = toast.messages[0];\n expect(toast.messages).to.have.length(1);\n\n toast.removeMessage(message);\n\n // Message should have removeTime set\n expect(message.removeTime).to.be.instanceOf(Date);\n\n // Wait for animation to complete\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('handles message click to remove', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n // Wait for render\n await toast.updateComplete;\n\n const closeIcon = toast.shadowRoot?.querySelector(\n 'temba-icon[name=\"close\"]'\n ) as HTMLElement;\n expect(closeIcon).to.exist;\n\n // Simulate click\n closeIcon.click();\n\n // Wait for animation\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('handles invalid message ID in click handler', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n // Create a mock event with invalid message_id\n const mockEvent = {\n target: {\n getAttribute: () => 'invalid'\n }\n } as any;\n\n // Should not throw error\n expect(() => {\n (toast as any).handleMessageClicked(mockEvent);\n }).to.not.throw();\n\n // Message should still exist\n expect(toast.messages).to.have.length(1);\n });\n\n it('handles missing message in click handler', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n // Create a mock event with non-existent message_id\n const mockEvent = {\n target: {\n getAttribute: () => '999'\n }\n } as any;\n\n // Should not throw error\n expect(() => {\n (toast as any).handleMessageClicked(mockEvent);\n }).to.not.throw();\n\n // Message should still exist\n expect(toast.messages).to.have.length(1);\n });\n\n it('checks for stale messages', async () => {\n const toast = await createToast({ duration: '100' }); // 100ms duration\n toast.info('Test message');\n\n // Wait for message to become stale\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n // Manually trigger stale check\n toast.checkForStaleMessages();\n\n // Wait for removal animation\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n expect(toast.messages).to.have.length(0);\n });\n\n it('respects sticky info messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'info-sticky': 'true'\n });\n toast.info('Sticky info message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('respects sticky warning messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'warning-sticky': 'true'\n });\n toast.warning('Sticky warning message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('respects sticky error messages', async () => {\n const toast = await createToast({\n duration: '100',\n 'error-sticky': 'true'\n });\n toast.error('Sticky error message');\n\n // Wait for message to become \"stale\"\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n toast.checkForStaleMessages();\n\n // Message should still exist because it's sticky\n expect(toast.messages).to.have.length(1);\n });\n\n it('clears interval when no messages remain', async () => {\n const toast = await createToast({ duration: '100' });\n toast.info('Test message');\n\n // Verify interval is set\n expect((toast as any).checker).to.be.greaterThan(0);\n\n // Wait for stale and removal\n await new Promise((resolve) => setTimeout(resolve, 150));\n toast.checkForStaleMessages();\n\n // Wait for the removeMessage animation to complete\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n // Now trigger checkForStaleMessages again to clear the interval\n toast.checkForStaleMessages();\n\n // Interval should be cleared\n expect((toast as any).checker).to.equal(0);\n });\n\n it('clears existing interval when adding new message', async () => {\n const toast = await createToast();\n toast.info('First message');\n\n const firstChecker = (toast as any).checker;\n expect(firstChecker).to.be.greaterThan(0);\n\n toast.info('Second message');\n\n // Should have new interval\n expect((toast as any).checker).to.be.greaterThan(0);\n expect((toast as any).checker).to.not.equal(firstChecker);\n });\n\n it('renders messages with correct CSS classes', async () => {\n const toast = await createToast();\n toast.info('Info message');\n toast.warning('Warning message');\n toast.error('Error message');\n\n await toast.updateComplete;\n\n const messages = toast.shadowRoot?.querySelectorAll('.message');\n expect(messages).to.have.length(3);\n\n expect(messages?.[0]).to.have.class('info');\n expect(messages?.[1]).to.have.class('warning');\n expect(messages?.[2]).to.have.class('error');\n });\n\n it('renders messages with visible class after delay', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message');\n expect(message).to.not.have.class('visible');\n\n // Wait for visibility timeout\n await new Promise((resolve) => setTimeout(resolve, 150));\n await toast.updateComplete;\n\n expect(message).to.have.class('visible');\n });\n\n it('renders messages with removing class when removed', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const messageData = toast.messages[0];\n toast.removeMessage(messageData);\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message');\n expect(message).to.have.class('removing');\n });\n\n it('renders close icons with correct message_id', async () => {\n const toast = await createToast();\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const closeIcon = toast.shadowRoot?.querySelector(\n 'temba-icon[name=\"close\"]'\n );\n expect(closeIcon?.getAttribute('message_id')).to.equal('1');\n });\n\n it('renders correct animation duration styles', async () => {\n const toast = await createToast({ animation: '500' });\n toast.info('Test message');\n\n await toast.updateComplete;\n\n const message = toast.shadowRoot?.querySelector('.message') as HTMLElement;\n expect(message?.style.transitionDuration).to.equal('500ms');\n });\n});\n"]}
|
|
@@ -422,7 +422,7 @@ describe('utils/index', () => {
|
|
|
422
422
|
expect(fn.calledOnce).to.be.true;
|
|
423
423
|
expect(fn.calledWith('arg3')).to.be.true;
|
|
424
424
|
done();
|
|
425
|
-
},
|
|
425
|
+
}, 75);
|
|
426
426
|
});
|
|
427
427
|
it('calls immediately when immediate flag is true', () => {
|
|
428
428
|
const fn = stub();
|
|
@@ -449,7 +449,7 @@ describe('utils/index', () => {
|
|
|
449
449
|
throttledFn('arg4');
|
|
450
450
|
expect(fn.callCount).to.equal(2);
|
|
451
451
|
done();
|
|
452
|
-
},
|
|
452
|
+
}, 75);
|
|
453
453
|
});
|
|
454
454
|
});
|
|
455
455
|
describe('timeSince', () => {
|