@3t-transform/threeteeui 0.1.27 → 0.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/cjs/domsanitiser.options-277161b9.js +1667 -0
  2. package/dist/cjs/{index-b8a62ede.js → index-dc6cc829.js} +2 -88
  3. package/dist/cjs/loader.cjs.js +2 -3
  4. package/dist/cjs/tttx-button.cjs.entry.js +1 -1
  5. package/dist/cjs/tttx-filter.cjs.entry.js +1 -1
  6. package/dist/cjs/tttx-form.cjs.entry.js +1 -1
  7. package/dist/cjs/tttx-icon.cjs.entry.js +1 -1
  8. package/dist/cjs/tttx-keyvalue-block.cjs.entry.js +1 -1
  9. package/dist/cjs/tttx-list.cjs.entry.js +1 -1
  10. package/dist/cjs/tttx-loading-spinner.cjs.entry.js +1 -1
  11. package/dist/cjs/tttx-sorter.cjs.entry.js +2 -2
  12. package/dist/cjs/tttx-standalone-input.cjs.entry.js +2 -2
  13. package/dist/cjs/tttx-toolbar.cjs.entry.js +1 -1
  14. package/dist/cjs/tttx.cjs.js +2 -6
  15. package/dist/collection/collection-manifest.json +2 -2
  16. package/dist/collection/components/atoms/tttx-button/test/tttx-button.e2e.js +9 -0
  17. package/dist/collection/components/atoms/tttx-button/test/tttx-button.spec.js +83 -0
  18. package/dist/collection/components/atoms/tttx-icon/test/tttx-icon.e2e.js +9 -0
  19. package/dist/collection/components/atoms/tttx-icon/test/tttx-icon.spec.js +16 -0
  20. package/dist/collection/components/atoms/tttx-keyvalue-block/test/tttx-keyvalue-block.spec.js +216 -0
  21. package/dist/collection/components/atoms/tttx-loading-spinner/Test/tttx-loading-spinner.spec.js +64 -0
  22. package/dist/collection/components/molecules/tttx-filter/test/tttx-filter.spec.js +231 -0
  23. package/dist/collection/components/molecules/tttx-form/lib/setErrorState.spec.js +38 -0
  24. package/dist/collection/components/molecules/tttx-form/lib/validityCheck.spec.js +214 -0
  25. package/dist/collection/components/molecules/tttx-form/test/tttx-form.e2e.js +9 -0
  26. package/dist/collection/components/molecules/tttx-form/test/tttx-form.spec.js +232 -0
  27. package/dist/collection/components/molecules/tttx-list/test/ttttx-list.spec.e2e.js +26 -0
  28. package/dist/collection/components/molecules/tttx-list/test/tttx-list.spec.js +183 -0
  29. package/dist/collection/components/molecules/tttx-sorter/test/tttx-sorter.spec.js +87 -0
  30. package/dist/collection/components/molecules/tttx-sorter/tttx-sorter.css +2 -1
  31. package/dist/collection/components/molecules/tttx-standalone-input/test/tttx-standalone-input.e2e.js +9 -0
  32. package/dist/collection/components/molecules/tttx-standalone-input/test/tttx-standalone-input.spec.js +215 -0
  33. package/dist/collection/components/molecules/tttx-standalone-input/tttx-standalone-input.css +5 -22
  34. package/dist/collection/components/molecules/tttx-toolbar/test/tttx-toolbar.spec.js +52 -0
  35. package/dist/collection/shared/test/domsanitiser.options.spec.js +23 -0
  36. package/dist/components/domsanitiser.options.js +1664 -0
  37. package/dist/components/index.d.ts +0 -9
  38. package/dist/components/index.js +1 -1
  39. package/dist/components/tttx-sorter.js +1 -1
  40. package/dist/components/tttx-standalone-input.js +1 -1
  41. package/dist/esm/domsanitiser.options-cc420431.js +1664 -0
  42. package/dist/esm/{index-e888a5f4.js → index-86faeaab.js} +3 -88
  43. package/dist/esm/loader.js +2 -3
  44. package/dist/esm/polyfills/css-shim.js +1 -1
  45. package/dist/esm/tttx-button.entry.js +1 -1
  46. package/dist/esm/tttx-filter.entry.js +1 -1
  47. package/dist/esm/tttx-form.entry.js +1 -1
  48. package/dist/esm/tttx-icon.entry.js +1 -1
  49. package/dist/esm/tttx-keyvalue-block.entry.js +1 -1
  50. package/dist/esm/tttx-list.entry.js +1 -1
  51. package/dist/esm/tttx-loading-spinner.entry.js +1 -1
  52. package/dist/esm/tttx-sorter.entry.js +2 -2
  53. package/dist/esm/tttx-standalone-input.entry.js +2 -2
  54. package/dist/esm/tttx-toolbar.entry.js +1 -1
  55. package/dist/esm/tttx.js +2 -3
  56. package/dist/tttx/p-12fc0b16.entry.js +3 -0
  57. package/dist/tttx/{p-39485e15.entry.js → p-2e43a578.entry.js} +1 -1
  58. package/dist/tttx/p-33c0cbdc.entry.js +1 -0
  59. package/dist/tttx/p-52a47b7c.js +2 -0
  60. package/dist/tttx/p-72b4c98a.entry.js +1 -0
  61. package/dist/tttx/p-7e6fa227.entry.js +1 -0
  62. package/dist/tttx/{p-043f9b8a.entry.js → p-8f3badad.entry.js} +1 -1
  63. package/dist/tttx/p-90b0f72a.entry.js +1 -0
  64. package/dist/tttx/{p-ccd0065e.entry.js → p-ae00cae3.entry.js} +1 -1
  65. package/dist/tttx/p-b4290a5b.js +3 -0
  66. package/dist/tttx/{p-82bb3136.entry.js → p-c4538d55.entry.js} +1 -1
  67. package/dist/tttx/{p-65adb464.entry.js → p-c4f2186e.entry.js} +1 -1
  68. package/dist/tttx/{p-dc5c356b.entry.js → p-c72d1a03.entry.js} +1 -1
  69. package/dist/tttx/p-daa27411.entry.js +1 -0
  70. package/dist/tttx/{p-96bbf1ed.entry.js → p-e25d5fe2.entry.js} +1 -1
  71. package/dist/tttx/{p-b3a03986.entry.js → p-f1d7eb35.entry.js} +1 -1
  72. package/dist/tttx/tttx.esm.js +1 -1
  73. package/dist/types/components/atoms/tttx-button/test/tttx-button.e2e.d.ts +1 -0
  74. package/dist/types/components/atoms/tttx-button/test/tttx-button.spec.d.ts +1 -0
  75. package/dist/types/components/atoms/tttx-icon/test/tttx-icon.e2e.d.ts +1 -0
  76. package/dist/types/components/atoms/tttx-icon/test/tttx-icon.spec.d.ts +1 -0
  77. package/dist/types/components/atoms/tttx-keyvalue-block/test/tttx-keyvalue-block.spec.d.ts +1 -0
  78. package/dist/types/components/atoms/tttx-loading-spinner/Test/tttx-loading-spinner.spec.d.ts +1 -0
  79. package/dist/types/components/molecules/tttx-filter/test/tttx-filter.spec.d.ts +1 -0
  80. package/dist/types/components/molecules/tttx-form/lib/setErrorState.spec.d.ts +1 -0
  81. package/dist/types/components/molecules/tttx-form/lib/validityCheck.spec.d.ts +1 -0
  82. package/dist/types/components/molecules/tttx-form/test/tttx-form.e2e.d.ts +1 -0
  83. package/dist/types/components/molecules/tttx-form/test/tttx-form.spec.d.ts +1 -0
  84. package/dist/types/components/molecules/tttx-list/test/ttttx-list.spec.e2e.d.ts +1 -0
  85. package/dist/types/components/molecules/tttx-list/test/tttx-list.spec.d.ts +1 -0
  86. package/dist/types/components/molecules/tttx-sorter/test/tttx-sorter.spec.d.ts +1 -0
  87. package/dist/types/components/molecules/tttx-standalone-input/test/tttx-standalone-input.e2e.d.ts +1 -0
  88. package/dist/types/components/molecules/tttx-standalone-input/test/tttx-standalone-input.spec.d.ts +1 -0
  89. package/dist/types/components/molecules/tttx-standalone-input/tttx-standalone-input.d.ts +6 -6
  90. package/dist/types/components/molecules/tttx-toolbar/test/tttx-toolbar.spec.d.ts +1 -0
  91. package/dist/types/shared/test/domsanitiser.options.spec.d.ts +1 -0
  92. package/dist/types/stencil-public-runtime.d.ts +3 -59
  93. package/loader/index.d.ts +0 -9
  94. package/package.json +1 -1
  95. package/dist/tttx/p-6dff6b5a.entry.js +0 -3
  96. package/dist/tttx/p-7578055e.entry.js +0 -1
  97. package/dist/tttx/p-f764ffc4.js +0 -2
@@ -0,0 +1,87 @@
1
+ import { newSpecPage } from '@stencil/core/testing';
2
+ import { TttxSorter } from '../tttx-sorter';
3
+ const sorterData = { sorterOptions: [{ optionLabel: 'Expiry date' }, { optionLabel: 'Qualification name' }] };
4
+ describe('tttx-sorter', () => {
5
+ it('renders without errors', async () => {
6
+ const page = await newSpecPage({
7
+ components: [TttxSorter],
8
+ html: `<tttx-sorter field-options-data='${JSON.stringify(sorterData)}'></tttx-sorter>`,
9
+ });
10
+ expect(page.root).toBeDefined();
11
+ expect(page.root)
12
+ .toEqualHtml(`<tttx-sorter field-options-data="{&quot;sorterOptions&quot;:[{&quot;optionLabel&quot;:&quot;Expiry date&quot;},{&quot;optionLabel&quot;:&quot;Qualification name&quot;}]}" id="sorter__undefined">
13
+ <mock:shadow-root>
14
+ <div class="sorter-container" tabindex="0">
15
+ <button class="arrow-toggle-button" type="button">
16
+ <tttx-icon color="black" icon="arrow_downward"></tttx-icon>
17
+ </button>
18
+ <div class="dropdown-selector">
19
+ <div class="dropdown-selector-button">
20
+ <div class="dropdown-selector-text"></div>
21
+ <div class="dropdown-selector-chevron">
22
+ <tttx-icon color="black" icon="expand_more"></tttx-icon>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </mock:shadow-root>
28
+ </tttx-sorter>`);
29
+ expect(page.rootInstance).toBeInstanceOf(TttxSorter);
30
+ });
31
+ it('renders null without errors when no data passesd in', async () => {
32
+ const page = await newSpecPage({
33
+ components: [TttxSorter],
34
+ html: '<tttx-sorter></tttx-sorter>',
35
+ });
36
+ expect(page.root).toBeDefined();
37
+ expect(page.root).toEqualHtml(`
38
+ <tttx-sorter>
39
+ <mock:shadow-root></mock:shadow-root>
40
+ </tttx-sorter>`);
41
+ expect(page.rootInstance).toBeInstanceOf(TttxSorter);
42
+ });
43
+ it('emits sorterChangeEvent when sort toggle button is clicked', async () => {
44
+ const page = await newSpecPage({
45
+ components: [TttxSorter],
46
+ html: `<tttx-sorter field-options-data='${JSON.stringify(sorterData)}' sorter-key='basic-sorter'></tttx-sorter>`,
47
+ });
48
+ await page.waitForChanges();
49
+ const toggleButton = page.root.shadowRoot.querySelector('.arrow-toggle-button');
50
+ const eventSpy = jest.fn();
51
+ page.doc.addEventListener('sorterChangeEvent', eventSpy);
52
+ await page.waitForChanges();
53
+ await toggleButton.dispatchEvent(new Event('click'));
54
+ expect(eventSpy).toHaveBeenCalled();
55
+ expect(eventSpy.mock.calls[0][0].detail).toEqual({ sortField: '', sorterDirection: 'ascending', sorterKey: 'basic-sorter' });
56
+ });
57
+ it('emits sorterChangeEvent when sort toggle button is clicked', async () => {
58
+ const page = await newSpecPage({
59
+ components: [TttxSorter],
60
+ html: `<tttx-sorter field-options-data='${JSON.stringify(sorterData)}' sorter-key='basic-sorter' default-sort-direction='ascending'></tttx-sorter>`,
61
+ });
62
+ await page.waitForChanges();
63
+ const toggleButton = page.root.shadowRoot.querySelector('.arrow-toggle-button');
64
+ const eventSpy = jest.fn();
65
+ page.doc.addEventListener('sorterChangeEvent', eventSpy);
66
+ await page.waitForChanges();
67
+ await toggleButton.dispatchEvent(new Event('click'));
68
+ expect(eventSpy).toHaveBeenCalled();
69
+ expect(eventSpy.mock.calls[0][0].detail).toEqual({ sortField: '', sorterDirection: 'descending', sorterKey: 'basic-sorter' });
70
+ });
71
+ it('emits sorterChangeEvent when dropdown option is selected', async () => {
72
+ const page = await newSpecPage({
73
+ components: [TttxSorter],
74
+ html: `<tttx-sorter field-options-data='${JSON.stringify(sorterData)}' sorter-key='basic-sorter' default-sort-direction='descending'></tttx-sorter>`,
75
+ });
76
+ const dropdownSelector = page.root.shadowRoot.querySelector('.dropdown-selector');
77
+ await dropdownSelector.dispatchEvent(new Event('click'));
78
+ await page.waitForChanges();
79
+ const dropdownOption = page.root.shadowRoot.querySelector('.dropdown-option');
80
+ const eventSpy = jest.fn();
81
+ page.doc.addEventListener('sorterChangeEvent', eventSpy);
82
+ await page.waitForChanges();
83
+ await dropdownOption.dispatchEvent(new Event('click'));
84
+ expect(eventSpy).toHaveBeenCalledTimes(1);
85
+ expect(eventSpy.mock.calls[0][0].detail).toEqual({ sortField: 'Expiry date', sorterDirection: 'descending', sorterKey: 'basic-sorter' });
86
+ });
87
+ });
@@ -9,6 +9,8 @@
9
9
  border: 1px solid #d5d5d5;
10
10
  border-radius: 4px;
11
11
  font-weight: 400;
12
+ box-sizing: border-box;
13
+ height: 36px;
12
14
  }
13
15
  @media (max-width: 475px) {
14
16
  .sorter-container {
@@ -50,7 +52,6 @@
50
52
  padding-right: 4px;
51
53
  align-items: center;
52
54
  color: #212121;
53
- box-sizing: border-box;
54
55
  width: 100%;
55
56
  }
56
57
  @media (max-width: 475px) {
@@ -0,0 +1,9 @@
1
+ import { newE2EPage } from '@stencil/core/testing';
2
+ describe('tttx-standalone-input', () => {
3
+ it('renders', async () => {
4
+ const page = await newE2EPage();
5
+ await page.setContent('<tttx-standalone-input></tttx-standalone-input>');
6
+ const element = await page.find('tttx-standalone-input');
7
+ expect(element).toHaveClass('hydrated');
8
+ });
9
+ });
@@ -0,0 +1,215 @@
1
+ import { newSpecPage } from '@stencil/core/testing';
2
+ import { TttxInput } from '../tttx-standalone-input';
3
+ describe('tttx-standalone-input', () => {
4
+ it('renders', async () => {
5
+ const page = await newSpecPage({
6
+ components: [TttxInput],
7
+ html: '<tttx-standalone-input />',
8
+ });
9
+ expect(page.root).toEqualHtml(`
10
+ <tttx-standalone-input>
11
+ <label class="inputBlock">
12
+ <span class="optional">
13
+ (optional)
14
+ </span>
15
+ <div class="input-container">
16
+ <input class="standalone" type="text">
17
+ <span class="errorBubble">
18
+ <span class="material-symbols-rounded validationicon">
19
+ warning
20
+ </span>
21
+ </span>
22
+ </div>
23
+ </label>
24
+ </tttx-standalone-input>
25
+ `);
26
+ });
27
+ it('renders the input field with the left icon', async () => {
28
+ const page = await newSpecPage({
29
+ components: [TttxInput],
30
+ html: '<tttx-standalone-input iconleft="info" />',
31
+ });
32
+ expect(page.root).toEqualHtml(`
33
+ <tttx-standalone-input iconleft="info">
34
+ <label class="inputBlock">
35
+ <span class="optional">
36
+ (optional)
37
+ </span>
38
+ <div class="input-container">
39
+ <tttx-icon color="grey" icon="info" id="icon-left"></tttx-icon>
40
+ <input class="standalone" type="text">
41
+ <span class="errorBubble">
42
+ <span class="material-symbols-rounded validationicon">
43
+ warning
44
+ </span>
45
+ </span>
46
+ </div>
47
+ </label>
48
+ </tttx-standalone-input>
49
+ `);
50
+ });
51
+ it('renders the input field with the right icon', async () => {
52
+ const page = await newSpecPage({
53
+ components: [TttxInput],
54
+ html: '<tttx-standalone-input iconright="info" />',
55
+ });
56
+ expect(page.root).toEqualHtml(`
57
+ <tttx-standalone-input iconright="info">
58
+ <label class="inputBlock">
59
+ <span class="optional">
60
+ (optional)
61
+ </span>
62
+ <div class="input-container">
63
+ <tttx-icon color="grey" icon="info" id="icon-right"></tttx-icon>
64
+ <input class="standalone" type="text">
65
+ <span class="errorBubble">
66
+ <span class="material-symbols-rounded validationicon">
67
+ warning
68
+ </span>
69
+ </span>
70
+ </div>
71
+ </label>
72
+ </tttx-standalone-input>
73
+ `);
74
+ });
75
+ it('renders the input field with an error message', async () => {
76
+ const page = await newSpecPage({
77
+ components: [TttxInput],
78
+ html: '<tttx-standalone-input required showerrormsg errormsg="The field is required" />',
79
+ });
80
+ expect(page.root).toEqualHtml(`
81
+ <tttx-standalone-input errormsg="The field is required" required="" showerrormsg="">
82
+ <label class="inputBlock">
83
+ <div class="input-container">
84
+ <input class="invalid standalone" required="" type="text">
85
+ <span class="errorBubble visible">
86
+ <span class="material-symbols-rounded validationicon">
87
+ warning
88
+ </span>
89
+ The field is required
90
+ </span>
91
+ </div>
92
+ </label>
93
+ </tttx-standalone-input>
94
+ `);
95
+ });
96
+ it('renders the label as inline', async () => {
97
+ const page = await newSpecPage({
98
+ components: [TttxInput],
99
+ html: '<tttx-standalone-input inline />',
100
+ });
101
+ expect(page.root).toEqualHtml(`
102
+ <tttx-standalone-input inline="">
103
+ <label class="inputInline">
104
+ <span class="optional">
105
+ (optional)
106
+ </span>
107
+ <div class="input-container">
108
+ <input class="standalone" type="text">
109
+ <span class="errorBubble">
110
+ <span class="material-symbols-rounded validationicon">
111
+ warning
112
+ </span>
113
+ </span>
114
+ </div>
115
+ </label>
116
+ </tttx-standalone-input>
117
+ `);
118
+ });
119
+ it('renders the input with an icon within the field', async () => {
120
+ const page = await newSpecPage({
121
+ components: [TttxInput],
122
+ html: '<tttx-standalone-input inputicon="search" />',
123
+ });
124
+ expect(page.root).toEqualHtml(`
125
+ <tttx-standalone-input inputicon="search">
126
+ <label class="inputBlock">
127
+ <span class="optional">
128
+ (optional)
129
+ </span>
130
+ <div class="input-container">
131
+ <tttx-icon class="input-icon" icon="search" color="grey"></tttx-icon>
132
+ <input class="standalone" type="text">
133
+ <span class="errorBubble">
134
+ <span class="material-symbols-rounded validationicon">
135
+ warning
136
+ </span>
137
+ </span>
138
+ </div>
139
+ </label>
140
+ </tttx-standalone-input>
141
+ `);
142
+ });
143
+ it('renders the input without the errorbubble', async () => {
144
+ const page = await newSpecPage({
145
+ components: [TttxInput],
146
+ html: '<tttx-standalone-input showerrorbubble="false" />',
147
+ });
148
+ expect(page.root).toEqualHtml(`
149
+ <tttx-standalone-input showerrorbubble="false">
150
+ <label class="inputBlock">
151
+ <span class="optional">
152
+ (optional)
153
+ </span>
154
+ <div class="input-container">
155
+ <input class="standalone" type="text">
156
+ </div>
157
+ </label>
158
+ </tttx-standalone-input>
159
+ `);
160
+ });
161
+ it('can trigger onInput handler', async () => {
162
+ const page = await newSpecPage({
163
+ components: [TttxInput],
164
+ html: '<tttx-standalone-input />',
165
+ });
166
+ const callbackFn = jest.fn();
167
+ page.doc.addEventListener('valueChanged', callbackFn);
168
+ const input = page.root.querySelector('input');
169
+ input.value = 'a';
170
+ const event = new CustomEvent('input', { composed: true, bubbles: true });
171
+ input.dispatchEvent(event);
172
+ expect(callbackFn).toHaveBeenCalled();
173
+ });
174
+ it('can trigger onFocus handler', async () => {
175
+ const page = await newSpecPage({
176
+ components: [TttxInput],
177
+ html: '<tttx-standalone-input />',
178
+ });
179
+ const callbackFn = jest.fn();
180
+ page.doc.addEventListener('focusChanged', callbackFn);
181
+ const input = page.root.querySelector('input');
182
+ input.focus();
183
+ const event = new CustomEvent('focus', { composed: true, bubbles: true });
184
+ input.dispatchEvent(event);
185
+ expect(callbackFn).toHaveBeenCalled();
186
+ });
187
+ it('can trigger onBlur handler', async () => {
188
+ const page = await newSpecPage({
189
+ components: [TttxInput],
190
+ html: '<tttx-standalone-input />',
191
+ });
192
+ const callbackFn = jest.fn();
193
+ page.doc.addEventListener('blurChanged', callbackFn);
194
+ const input = page.root.querySelector('input');
195
+ input.blur();
196
+ const event = new CustomEvent('blur', { composed: true, bubbles: true });
197
+ input.dispatchEvent(event);
198
+ expect(callbackFn).toHaveBeenCalled();
199
+ });
200
+ it('can trigger onInvalid handler', async () => {
201
+ const page = await newSpecPage({
202
+ components: [TttxInput],
203
+ html: '<tttx-standalone-input />',
204
+ });
205
+ const callbackFn = jest.fn();
206
+ page.doc.addEventListener('invalidChanged', callbackFn);
207
+ const input = page.root.querySelector('input');
208
+ // Doesn't work:
209
+ // input.setCustomValidity('required');
210
+ // input.checkValidity();
211
+ const event = new CustomEvent('invalid', { composed: true, bubbles: true });
212
+ input.dispatchEvent(event);
213
+ expect(callbackFn).toHaveBeenCalled();
214
+ });
215
+ });
@@ -2,13 +2,9 @@
2
2
  font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24;
3
3
  }
4
4
 
5
- .material-symbols-rounded {
6
- font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24;
7
- }
8
-
9
5
  .material-symbols-rounded {
10
6
  font-family: "Material Symbols Rounded", sans-serif;
11
- font-weight: normal;
7
+ font-weight: 400;
12
8
  font-style: normal;
13
9
  font-size: 24px;
14
10
  line-height: 1;
@@ -80,7 +76,6 @@
80
76
  background-color: transparent;
81
77
  height: 26px;
82
78
  font-size: 14px;
83
- line-height: 16px;
84
79
  border-radius: none;
85
80
  z-index: 2;
86
81
  color: #dc0000;
@@ -90,7 +85,6 @@
90
85
  width: 16px;
91
86
  height: 16px;
92
87
  font-size: 16px;
93
- line-height: 19px;
94
88
  margin-right: 4px;
95
89
  vertical-align: middle;
96
90
  color: #dc0000;
@@ -128,8 +122,6 @@ label.inputInline .input-container {
128
122
  label {
129
123
  font-weight: 500;
130
124
  font-size: 16px;
131
- line-height: 19px;
132
- margin-bottom: 16px;
133
125
  }
134
126
 
135
127
  input:not([type=submit]) {
@@ -139,7 +131,6 @@ input:not([type=submit]) {
139
131
  height: 36px;
140
132
  padding: 0 16px;
141
133
  font-size: 16px;
142
- line-height: 19px;
143
134
  border: 1px solid #d5d5d5;
144
135
  border-radius: 4px;
145
136
  margin-top: 4px;
@@ -168,9 +159,9 @@ input.invalid:invalid, input.standalone.invalid {
168
159
  }
169
160
 
170
161
  input ~ .errorBubble {
162
+ min-height: 27px;
171
163
  position: relative;
172
164
  font-size: 14px;
173
- line-height: 16px;
174
165
  font-weight: normal;
175
166
  width: 100%;
176
167
  font-family: "Roboto", sans-serif;
@@ -179,17 +170,17 @@ input ~ .errorBubble {
179
170
  align-content: center;
180
171
  align-items: center;
181
172
  justify-items: center;
182
- margin-top: 4px;
183
173
  }
184
174
 
185
175
  input ~ .errorBubble:not(.visible) {
186
- display: none;
176
+ visibility: hidden;
187
177
  }
188
178
 
189
179
  input ~ .errorBubble span {
190
180
  color: #dc0000;
191
181
  font-size: 16px;
192
182
  margin-right: 4px;
183
+ height: 16px;
193
184
  }
194
185
 
195
186
  input.invalid:invalid ~ .errorBubble {
@@ -199,6 +190,7 @@ input.invalid:invalid ~ .errorBubble {
199
190
  width: 100%;
200
191
  font-family: "Roboto", sans-serif;
201
192
  color: #dc0000;
193
+ visibility: visible;
202
194
  }
203
195
 
204
196
  input:focus {
@@ -209,15 +201,6 @@ input:focus-visible {
209
201
  outline: none;
210
202
  }
211
203
 
212
- .secondarylabel {
213
- color: #757575;
214
- font-size: 14px;
215
- line-height: 16px;
216
- font-weight: normal;
217
- display: flex;
218
- margin-top: 4px;
219
- }
220
-
221
204
  :host {
222
205
  display: block;
223
206
  }
@@ -0,0 +1,52 @@
1
+ import { newSpecPage } from '@stencil/core/testing';
2
+ import { TttxToolbar } from '../tttx-toolbar';
3
+ describe('tttx-standalone-input', () => {
4
+ it('renders', async () => {
5
+ const page = await newSpecPage({
6
+ components: [TttxToolbar],
7
+ html: `
8
+ <tttx-toolbar>
9
+ <span slot="before"><div>Before</div></span>
10
+ <span slot="center"><div>Center</div></span>
11
+ <span slot="after"><div>After</div></span>
12
+ </tttx-toolbar>
13
+ `,
14
+ });
15
+ expect(page.root).toEqualHtml(`
16
+ <tttx-toolbar class="bordered">
17
+ <mock:shadow-root>
18
+ <slot name="before"></slot>
19
+ <slot name="center"></slot>
20
+ <slot name="after"></slot>
21
+ </mock:shadow-root>
22
+ <span slot="before"><div>Before</div></span>
23
+ <span slot="center"><div>Center</div></span>
24
+ <span slot="after"><div>After</div></span>
25
+ </tttx-toolbar>
26
+ `);
27
+ });
28
+ it('renders without a border', async () => {
29
+ const page = await newSpecPage({
30
+ components: [TttxToolbar],
31
+ html: `
32
+ <tttx-toolbar border="false">
33
+ <span slot="before"><div>Before</div></span>
34
+ <span slot="center"><div>Center</div></span>
35
+ <span slot="after"><div>After</div></span>
36
+ </tttx-toolbar>
37
+ `,
38
+ });
39
+ expect(page.root).toEqualHtml(`
40
+ <tttx-toolbar border="false">
41
+ <mock:shadow-root>
42
+ <slot name="before"></slot>
43
+ <slot name="center"></slot>
44
+ <slot name="after"></slot>
45
+ </mock:shadow-root>
46
+ <span slot="before"><div>Before</div></span>
47
+ <span slot="center"><div>Center</div></span>
48
+ <span slot="after"><div>After</div></span>
49
+ </tttx-toolbar>
50
+ `);
51
+ });
52
+ });
@@ -0,0 +1,23 @@
1
+ import domSanitiserOptions from '../domsanitiser.options';
2
+ describe('dom sanitiser options', () => {
3
+ it('allows tags beginning with "tttx-"', async () => {
4
+ const tagName = 'tttx-custom-element';
5
+ const result = domSanitiserOptions.
6
+ CUSTOM_ELEMENT_HANDLING.
7
+ tagNameCheck(tagName);
8
+ expect(result).not.toBe(null);
9
+ });
10
+ it('disallows tags not beginning with "tttx-"', async () => {
11
+ const tagName = 'custom-element';
12
+ const result = domSanitiserOptions.
13
+ CUSTOM_ELEMENT_HANDLING.
14
+ tagNameCheck(tagName);
15
+ expect(result).toBe(null);
16
+ });
17
+ it('allows all attributes', async () => {
18
+ const result = domSanitiserOptions.
19
+ CUSTOM_ELEMENT_HANDLING.
20
+ attributeNameCheck();
21
+ expect(result).toBe(true);
22
+ });
23
+ });