kempo-ui 0.3.8 → 0.3.10

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 (248) hide show
  1. package/dist/components/CodeEditor.js +96 -0
  2. package/dist/components/HtmlEditor.js +155 -30
  3. package/dist/components/codeEditorControls/CodeEditorControl.js +17 -0
  4. package/dist/components/codeEditorControls/ControlGroup.js +12 -0
  5. package/dist/components/codeEditorControls/ControlSpacer.js +6 -0
  6. package/dist/components/codeEditorControls/CopyCode.js +9 -0
  7. package/dist/components/codeEditorControls/EditorTheme.js +26 -0
  8. package/dist/components/codeEditorControls/FindReplace.js +7 -0
  9. package/dist/components/codeEditorControls/FoldAll.js +7 -0
  10. package/dist/components/codeEditorControls/FontSize.js +13 -0
  11. package/dist/components/codeEditorControls/FormatCode.js +9 -0
  12. package/dist/components/codeEditorControls/Fullscreen.js +12 -0
  13. package/dist/components/codeEditorControls/LanguageSelect.js +15 -0
  14. package/dist/components/codeEditorControls/Minimap.js +8 -0
  15. package/dist/components/codeEditorControls/Redo.js +7 -0
  16. package/dist/components/codeEditorControls/Undo.js +7 -0
  17. package/dist/components/codeEditorControls/WordWrap.js +8 -0
  18. package/dist/components/htmlEditorControls/AlignCenter.js +4 -4
  19. package/dist/components/htmlEditorControls/AlignJustify.js +4 -4
  20. package/dist/components/htmlEditorControls/AlignLeft.js +4 -4
  21. package/dist/components/htmlEditorControls/AlignRight.js +4 -4
  22. package/dist/components/htmlEditorControls/Bold.js +4 -4
  23. package/dist/components/htmlEditorControls/BulletList.js +4 -4
  24. package/dist/components/htmlEditorControls/ClearFormatting.js +4 -4
  25. package/dist/components/htmlEditorControls/CodeBlock.js +2 -2
  26. package/dist/components/htmlEditorControls/ControlGroup.js +2 -4
  27. package/dist/components/htmlEditorControls/CreateLink.js +3 -3
  28. package/dist/components/htmlEditorControls/FormatBlock.js +4 -4
  29. package/dist/components/htmlEditorControls/FormatCode.js +1 -0
  30. package/dist/components/htmlEditorControls/HtmlEditorControl.js +2 -2
  31. package/dist/components/htmlEditorControls/InlineCode.js +2 -2
  32. package/dist/components/htmlEditorControls/InsertTable.js +3 -3
  33. package/dist/components/htmlEditorControls/Italic.js +4 -4
  34. package/dist/components/htmlEditorControls/Mode.js +3 -3
  35. package/dist/components/htmlEditorControls/NumberList.js +4 -4
  36. package/dist/components/htmlEditorControls/Strikethrough.js +4 -4
  37. package/dist/components/htmlEditorControls/TextBackgroundColor.js +1 -1
  38. package/dist/components/htmlEditorControls/TextColor.js +1 -1
  39. package/dist/components/htmlEditorControls/Underline.js +4 -4
  40. package/docs/components/accordion.html +2 -0
  41. package/docs/components/aside.html +2 -0
  42. package/docs/components/card.html +2 -0
  43. package/docs/components/code-editor.html +491 -0
  44. package/docs/components/color-picker.html +2 -0
  45. package/docs/components/content-slider.html +2 -0
  46. package/docs/components/context.html +2 -0
  47. package/docs/components/dialog.html +2 -0
  48. package/docs/components/dropdown.html +2 -0
  49. package/docs/components/filter-list.html +2 -0
  50. package/docs/components/focus-capture.html +2 -0
  51. package/docs/components/html-editor.html +525 -212
  52. package/docs/components/hybrid-component.html +2 -0
  53. package/docs/components/icon.html +2 -0
  54. package/docs/components/import.html +2 -0
  55. package/docs/components/light-component.html +2 -0
  56. package/docs/components/nav-spacer.html +2 -0
  57. package/docs/components/nav.html +2 -0
  58. package/docs/components/photo-viewer.html +2 -0
  59. package/docs/components/resize.html +2 -0
  60. package/docs/components/shadow-component.html +2 -0
  61. package/docs/components/show-more.html +2 -0
  62. package/docs/components/sortable.html +2 -0
  63. package/docs/components/spinner.html +2 -0
  64. package/docs/components/split.html +2 -0
  65. package/docs/components/table.html +2 -0
  66. package/docs/components/tableControls.html +2 -0
  67. package/docs/components/tableCustomFields.html +2 -0
  68. package/docs/components/tableFetchRecords.html +2 -0
  69. package/docs/components/tableFieldSortHide.html +2 -0
  70. package/docs/components/tablePagination.html +2 -0
  71. package/docs/components/tablePlaceholder.html +2 -0
  72. package/docs/components/tableRecordEditing.html +2 -0
  73. package/docs/components/tableRecordFiltering.html +2 -0
  74. package/docs/components/tableRecordHiding.html +2 -0
  75. package/docs/components/tableRecordSearching.html +2 -0
  76. package/docs/components/tableRecordSelection.html +2 -0
  77. package/docs/components/tableRowControls.html +2 -0
  78. package/docs/components/tableServerSync.html +2 -0
  79. package/docs/components/tableSorting.html +2 -0
  80. package/docs/components/tabs.html +2 -0
  81. package/docs/components/tags.html +2 -0
  82. package/docs/components/theme-select.html +2 -0
  83. package/docs/components/theme-switcher.html +2 -0
  84. package/docs/components/timestamp.html +2 -0
  85. package/docs/components/toast.html +2 -0
  86. package/docs/components/toggle.html +2 -0
  87. package/docs/components/tree.html +2 -0
  88. package/docs/icons/auto_fix_high.svg +1 -0
  89. package/docs/icons/content_copy.svg +1 -0
  90. package/docs/icons/contrast.svg +1 -0
  91. package/docs/icons/frame_source.svg +1 -0
  92. package/docs/icons/fullscreen.svg +1 -0
  93. package/docs/icons/fullscreen_exit.svg +1 -0
  94. package/docs/icons/map.svg +1 -0
  95. package/docs/icons/redo.svg +1 -0
  96. package/docs/icons/text_decrease.svg +1 -0
  97. package/docs/icons/text_increase.svg +1 -0
  98. package/docs/icons/undo.svg +1 -0
  99. package/docs/icons/unfold_less.svg +1 -0
  100. package/docs/icons/unfold_more.svg +1 -0
  101. package/docs/icons/wrap_text.svg +1 -0
  102. package/docs/index.html +8 -0
  103. package/docs/src/components/CodeEditor.js +96 -0
  104. package/docs/src/components/HtmlEditor.js +155 -30
  105. package/docs/src/components/codeEditorControls/CodeEditorControl.js +17 -0
  106. package/docs/src/components/codeEditorControls/ControlGroup.js +12 -0
  107. package/docs/src/components/codeEditorControls/ControlSpacer.js +6 -0
  108. package/docs/src/components/codeEditorControls/CopyCode.js +9 -0
  109. package/docs/src/components/codeEditorControls/EditorTheme.js +26 -0
  110. package/docs/src/components/codeEditorControls/FindReplace.js +7 -0
  111. package/docs/src/components/codeEditorControls/FoldAll.js +7 -0
  112. package/docs/src/components/codeEditorControls/FontSize.js +13 -0
  113. package/docs/src/components/codeEditorControls/FormatCode.js +9 -0
  114. package/docs/src/components/codeEditorControls/Fullscreen.js +12 -0
  115. package/docs/src/components/codeEditorControls/LanguageSelect.js +15 -0
  116. package/docs/src/components/codeEditorControls/Minimap.js +8 -0
  117. package/docs/src/components/codeEditorControls/Redo.js +7 -0
  118. package/docs/src/components/codeEditorControls/Undo.js +7 -0
  119. package/docs/src/components/codeEditorControls/WordWrap.js +8 -0
  120. package/docs/src/components/htmlEditorControls/AlignCenter.js +4 -4
  121. package/docs/src/components/htmlEditorControls/AlignJustify.js +4 -4
  122. package/docs/src/components/htmlEditorControls/AlignLeft.js +4 -4
  123. package/docs/src/components/htmlEditorControls/AlignRight.js +4 -4
  124. package/docs/src/components/htmlEditorControls/Bold.js +4 -4
  125. package/docs/src/components/htmlEditorControls/BulletList.js +4 -4
  126. package/docs/src/components/htmlEditorControls/ClearFormatting.js +4 -4
  127. package/docs/src/components/htmlEditorControls/CodeBlock.js +2 -2
  128. package/docs/src/components/htmlEditorControls/ControlGroup.js +2 -4
  129. package/docs/src/components/htmlEditorControls/CreateLink.js +3 -3
  130. package/docs/src/components/htmlEditorControls/FormatBlock.js +4 -4
  131. package/docs/src/components/htmlEditorControls/FormatCode.js +1 -0
  132. package/docs/src/components/htmlEditorControls/HtmlEditorControl.js +2 -2
  133. package/docs/src/components/htmlEditorControls/InlineCode.js +2 -2
  134. package/docs/src/components/htmlEditorControls/InsertTable.js +3 -3
  135. package/docs/src/components/htmlEditorControls/Italic.js +4 -4
  136. package/docs/src/components/htmlEditorControls/Mode.js +3 -3
  137. package/docs/src/components/htmlEditorControls/NumberList.js +4 -4
  138. package/docs/src/components/htmlEditorControls/Strikethrough.js +4 -4
  139. package/docs/src/components/htmlEditorControls/TextBackgroundColor.js +1 -1
  140. package/docs/src/components/htmlEditorControls/TextColor.js +1 -1
  141. package/docs/src/components/htmlEditorControls/Underline.js +4 -4
  142. package/docs/utils/context.html +2 -0
  143. package/docs/utils/cookie.html +2 -0
  144. package/docs/utils/debounce.html +2 -0
  145. package/docs/utils/drag.html +2 -0
  146. package/docs/utils/elevation.html +2 -0
  147. package/docs/utils/formatTimestamp.html +2 -0
  148. package/docs/utils/object.html +2 -0
  149. package/docs/utils/propConverters.html +2 -0
  150. package/docs/utils/string.html +2 -0
  151. package/docs/utils/theme.html +2 -0
  152. package/docs/utils/toTitleCase.html +2 -0
  153. package/docs/utils/type.html +2 -0
  154. package/docs/utils/wait.html +2 -0
  155. package/docs-src/components/code-editor.page.html +235 -0
  156. package/docs-src/components/html-editor.page.html +528 -214
  157. package/docs-src/index.page.html +6 -0
  158. package/docs-src/nav.fragment.html +2 -0
  159. package/icons/auto_fix_high.svg +1 -0
  160. package/icons/content_copy.svg +1 -0
  161. package/icons/contrast.svg +1 -0
  162. package/icons/frame_source.svg +1 -0
  163. package/icons/fullscreen.svg +1 -0
  164. package/icons/fullscreen_exit.svg +1 -0
  165. package/icons/map.svg +1 -0
  166. package/icons/redo.svg +1 -0
  167. package/icons/text_decrease.svg +1 -0
  168. package/icons/text_increase.svg +1 -0
  169. package/icons/undo.svg +1 -0
  170. package/icons/unfold_less.svg +1 -0
  171. package/icons/unfold_more.svg +1 -0
  172. package/icons/wrap_text.svg +1 -0
  173. package/llm.txt +2 -1
  174. package/package.json +3 -3
  175. package/src/components/CodeEditor.js +495 -0
  176. package/src/components/HtmlEditor.js +527 -152
  177. package/src/components/codeEditorControls/CodeEditorControl.js +134 -0
  178. package/src/components/codeEditorControls/ControlGroup.js +70 -0
  179. package/src/components/codeEditorControls/ControlSpacer.js +23 -0
  180. package/src/components/codeEditorControls/CopyCode.js +37 -0
  181. package/src/components/codeEditorControls/EditorTheme.js +81 -0
  182. package/src/components/codeEditorControls/FindReplace.js +35 -0
  183. package/src/components/codeEditorControls/FoldAll.js +49 -0
  184. package/src/components/codeEditorControls/FontSize.js +45 -0
  185. package/src/components/codeEditorControls/FormatCode.js +37 -0
  186. package/src/components/codeEditorControls/Fullscreen.js +72 -0
  187. package/src/components/codeEditorControls/LanguageSelect.js +74 -0
  188. package/src/components/codeEditorControls/Minimap.js +60 -0
  189. package/src/components/codeEditorControls/Redo.js +35 -0
  190. package/src/components/codeEditorControls/Undo.js +35 -0
  191. package/src/components/codeEditorControls/WordWrap.js +60 -0
  192. package/src/components/htmlEditorControls/AlignCenter.js +2 -4
  193. package/src/components/htmlEditorControls/AlignJustify.js +2 -4
  194. package/src/components/htmlEditorControls/AlignLeft.js +2 -4
  195. package/src/components/htmlEditorControls/AlignRight.js +2 -4
  196. package/src/components/htmlEditorControls/Bold.js +2 -4
  197. package/src/components/htmlEditorControls/BulletList.js +2 -4
  198. package/src/components/htmlEditorControls/ClearFormatting.js +2 -4
  199. package/src/components/htmlEditorControls/CodeBlock.js +3 -19
  200. package/src/components/htmlEditorControls/ControlGroup.js +16 -41
  201. package/src/components/htmlEditorControls/CreateLink.js +3 -5
  202. package/src/components/htmlEditorControls/FormatBlock.js +2 -4
  203. package/src/components/htmlEditorControls/FormatCode.js +7 -0
  204. package/src/components/htmlEditorControls/HtmlEditorControl.js +43 -5
  205. package/src/components/htmlEditorControls/InlineCode.js +3 -5
  206. package/src/components/htmlEditorControls/InsertTable.js +9 -53
  207. package/src/components/htmlEditorControls/Italic.js +2 -4
  208. package/src/components/htmlEditorControls/Mode.js +2 -0
  209. package/src/components/htmlEditorControls/NumberList.js +2 -4
  210. package/src/components/htmlEditorControls/Strikethrough.js +2 -4
  211. package/src/components/htmlEditorControls/TextBackgroundColor.js +0 -6
  212. package/src/components/htmlEditorControls/TextColor.js +0 -6
  213. package/src/components/htmlEditorControls/Underline.js +2 -4
  214. package/tests/components/CodeEditor.browser-test.js +297 -0
  215. package/tests/components/HtmlEditor.browser-test.js +207 -0
  216. package/tests/components/codeEditorControls/CopyCode.browser-test.js +57 -0
  217. package/tests/components/codeEditorControls/EditorTheme.browser-test.js +70 -0
  218. package/tests/components/codeEditorControls/FindReplace.browser-test.js +57 -0
  219. package/tests/components/codeEditorControls/FoldAll.browser-test.js +92 -0
  220. package/tests/components/codeEditorControls/FontSize.browser-test.js +74 -0
  221. package/tests/components/codeEditorControls/Fullscreen.browser-test.js +152 -0
  222. package/tests/components/codeEditorControls/LanguageSelect.browser-test.js +82 -0
  223. package/tests/components/codeEditorControls/Minimap.browser-test.js +84 -0
  224. package/tests/components/codeEditorControls/ModeVisibility.browser-test.js +82 -0
  225. package/tests/components/codeEditorControls/UndoRedo.browser-test.js +85 -0
  226. package/tests/components/codeEditorControls/WordWrap.browser-test.js +95 -0
  227. package/tests/components/htmlEditorControls/Align.browser-test.js +203 -0
  228. package/tests/components/htmlEditorControls/Bold.browser-test.js +127 -0
  229. package/tests/components/htmlEditorControls/BulletList.browser-test.js +127 -0
  230. package/tests/components/htmlEditorControls/CharacterCount.browser-test.js +106 -0
  231. package/tests/components/htmlEditorControls/ClearFormatting.browser-test.js +127 -0
  232. package/tests/components/htmlEditorControls/CodeBlock.browser-test.js +143 -0
  233. package/tests/components/htmlEditorControls/ControlGroup.browser-test.js +116 -0
  234. package/tests/components/htmlEditorControls/ControlSpacer.browser-test.js +69 -0
  235. package/tests/components/htmlEditorControls/CreateLink.browser-test.js +129 -0
  236. package/tests/components/htmlEditorControls/DropdownControl.browser-test.js +138 -0
  237. package/tests/components/htmlEditorControls/FormatBlock.browser-test.js +163 -0
  238. package/tests/components/htmlEditorControls/FormatCode.browser-test.js +155 -0
  239. package/tests/components/htmlEditorControls/InlineCode.browser-test.js +127 -0
  240. package/tests/components/htmlEditorControls/InsertTable.browser-test.js +129 -0
  241. package/tests/components/htmlEditorControls/Italic.browser-test.js +127 -0
  242. package/tests/components/htmlEditorControls/Mode.browser-test.js +138 -0
  243. package/tests/components/htmlEditorControls/NumberList.browser-test.js +127 -0
  244. package/tests/components/htmlEditorControls/Strikethrough.browser-test.js +127 -0
  245. package/tests/components/htmlEditorControls/TextBackgroundColor.browser-test.js +136 -0
  246. package/tests/components/htmlEditorControls/TextColor.browser-test.js +136 -0
  247. package/tests/components/htmlEditorControls/Underline.browser-test.js +127 -0
  248. package/tests/components/htmlEditorControls/WordCount.browser-test.js +106 -0
@@ -0,0 +1,127 @@
1
+ import '../../../src/components/HtmlEditor.js';
2
+ import Underline from '../../../src/components/htmlEditorControls/Underline.js';
3
+
4
+ const createEditorWithControl = async () => {
5
+ const container = document.createElement('div');
6
+ container.innerHTML = `
7
+ <k-html-editor>
8
+ <k-hec-underline slot="toolbar-top-left"></k-hec-underline>
9
+ </k-html-editor>
10
+ `;
11
+ document.body.appendChild(container);
12
+ const editor = container.querySelector('k-html-editor');
13
+ await new Promise(r => editor.addEventListener('ready', r, { once: true }));
14
+ const control = container.querySelector('k-hec-underline');
15
+ return { container, editor, control };
16
+ };
17
+
18
+ const cleanup = container => {
19
+ if(container?.parentNode) container.parentNode.removeChild(container);
20
+ };
21
+
22
+ export default {
23
+ /*
24
+ Element Creation
25
+ */
26
+ 'should create k-hec-underline element': async ({pass, fail}) => {
27
+ const { container, control } = await createEditorWithControl();
28
+ if(!(control instanceof Underline)){
29
+ cleanup(container);
30
+ return fail('Element should be instance of Underline');
31
+ }
32
+ cleanup(container);
33
+ pass('Underline element created correctly');
34
+ },
35
+
36
+ 'should have shadow root': async ({pass, fail}) => {
37
+ const { container, control } = await createEditorWithControl();
38
+ if(!control.shadowRoot){
39
+ cleanup(container);
40
+ return fail('Underline should have shadow root');
41
+ }
42
+ cleanup(container);
43
+ pass('Underline has shadow root');
44
+ },
45
+
46
+ 'should render a button': async ({pass, fail}) => {
47
+ const { container, control } = await createEditorWithControl();
48
+ await control.updateComplete;
49
+ const button = control.shadowRoot.querySelector('button');
50
+ if(!button){
51
+ cleanup(container);
52
+ return fail('Underline should render a button');
53
+ }
54
+ cleanup(container);
55
+ pass('Underline renders a button');
56
+ },
57
+
58
+ 'should render format_underlined icon': async ({pass, fail}) => {
59
+ const { container, control } = await createEditorWithControl();
60
+ await control.updateComplete;
61
+ const icon = control.shadowRoot.querySelector('k-icon');
62
+ if(!icon){
63
+ cleanup(container);
64
+ return fail('Underline should render a k-icon');
65
+ }
66
+ if(icon.getAttribute('name') !== 'format_underlined'){
67
+ cleanup(container);
68
+ return fail(`Expected icon name "format_underlined", got "${icon.getAttribute('name')}"`);
69
+ }
70
+ cleanup(container);
71
+ pass('Underline renders format_underlined icon');
72
+ },
73
+
74
+ /*
75
+ Editor Integration
76
+ */
77
+ 'should find parent editor': async ({pass, fail}) => {
78
+ const { container, editor, control } = await createEditorWithControl();
79
+ if(control.editor !== editor){
80
+ cleanup(container);
81
+ return fail('Underline should find its parent k-html-editor');
82
+ }
83
+ cleanup(container);
84
+ pass('Underline finds parent editor');
85
+ },
86
+
87
+ 'click should call editor.underline()': async ({pass, fail}) => {
88
+ const { container, editor, control } = await createEditorWithControl();
89
+ await control.updateComplete;
90
+ let called = false;
91
+ editor.underline = () => { called = true; };
92
+ control.shadowRoot.querySelector('button').click();
93
+ if(!called){
94
+ cleanup(container);
95
+ return fail('Click should call editor.underline()');
96
+ }
97
+ cleanup(container);
98
+ pass('Click calls editor.underline()');
99
+ },
100
+
101
+ /*
102
+ Code Mode Visibility
103
+ */
104
+ 'should hide in code mode': async ({pass, fail}) => {
105
+ const { container, editor, control } = await createEditorWithControl();
106
+ editor.setMode('code');
107
+ await new Promise(r => editor.addEventListener('mode-changed', r, { once: true }));
108
+ await control.updateComplete;
109
+ if(!control.hidden){
110
+ cleanup(container);
111
+ return fail('Underline should be hidden in code mode');
112
+ }
113
+ cleanup(container);
114
+ pass('Underline is hidden in code mode');
115
+ },
116
+
117
+ 'should be visible in visual mode': async ({pass, fail}) => {
118
+ const { container, editor, control } = await createEditorWithControl();
119
+ await control.updateComplete;
120
+ if(control.hidden){
121
+ cleanup(container);
122
+ return fail('Underline should be visible in visual mode');
123
+ }
124
+ cleanup(container);
125
+ pass('Underline is visible in visual mode');
126
+ },
127
+ };
@@ -0,0 +1,106 @@
1
+ import '../../../src/components/HtmlEditor.js';
2
+ import WordCount from '../../../src/components/htmlEditorControls/WordCount.js';
3
+
4
+ const createEditorWithControl = async () => {
5
+ const container = document.createElement('div');
6
+ container.innerHTML = `
7
+ <k-html-editor>
8
+ <k-hec-word-count slot="toolbar-bottom-left"></k-hec-word-count>
9
+ </k-html-editor>
10
+ `;
11
+ document.body.appendChild(container);
12
+ const editor = container.querySelector('k-html-editor');
13
+ await new Promise(r => editor.addEventListener('ready', r, { once: true }));
14
+ const control = container.querySelector('k-hec-word-count');
15
+ return { container, editor, control };
16
+ };
17
+
18
+ const cleanup = container => {
19
+ if(container?.parentNode) container.parentNode.removeChild(container);
20
+ };
21
+
22
+ export default {
23
+ /*
24
+ Element Creation
25
+ */
26
+ 'should create k-hec-word-count element': async ({pass, fail}) => {
27
+ const { container, control } = await createEditorWithControl();
28
+ if(!(control instanceof WordCount)){
29
+ cleanup(container);
30
+ return fail('Element should be instance of WordCount');
31
+ }
32
+ cleanup(container);
33
+ pass('WordCount element created correctly');
34
+ },
35
+
36
+ 'should have shadow root': async ({pass, fail}) => {
37
+ const { container, control } = await createEditorWithControl();
38
+ if(!control.shadowRoot){
39
+ cleanup(container);
40
+ return fail('WordCount should have shadow root');
41
+ }
42
+ cleanup(container);
43
+ pass('WordCount has shadow root');
44
+ },
45
+
46
+ /*
47
+ Editor Integration
48
+ */
49
+ 'should find parent editor': async ({pass, fail}) => {
50
+ const { container, editor, control } = await createEditorWithControl();
51
+ if(control.editor !== editor){
52
+ cleanup(container);
53
+ return fail('WordCount should find its parent k-html-editor');
54
+ }
55
+ cleanup(container);
56
+ pass('WordCount finds parent editor');
57
+ },
58
+
59
+ 'should initialize count to 0': async ({pass, fail}) => {
60
+ const { container, control } = await createEditorWithControl();
61
+ if(control.count !== 0){
62
+ cleanup(container);
63
+ return fail(`Expected initial count 0, got ${control.count}`);
64
+ }
65
+ cleanup(container);
66
+ pass('WordCount initializes count to 0');
67
+ },
68
+
69
+ 'should update count when editor content changes': async ({pass, fail}) => {
70
+ const { container, editor, control } = await createEditorWithControl();
71
+ editor.setValue('<p>hello world foo bar</p>');
72
+ await new Promise(r => setTimeout(r, 200));
73
+ await control.updateComplete;
74
+ if(control.count !== 4){
75
+ cleanup(container);
76
+ return fail(`Expected count 4, got ${control.count}`);
77
+ }
78
+ cleanup(container);
79
+ pass('WordCount updates on content change');
80
+ },
81
+
82
+ 'should count empty content as 0 words': async ({pass, fail}) => {
83
+ const { container, editor, control } = await createEditorWithControl();
84
+ editor.setValue('');
85
+ await new Promise(r => setTimeout(r, 200));
86
+ await control.updateComplete;
87
+ if(control.count !== 0){
88
+ cleanup(container);
89
+ return fail(`Expected count 0 for empty content, got ${control.count}`);
90
+ }
91
+ cleanup(container);
92
+ pass('WordCount counts empty content as 0');
93
+ },
94
+
95
+ 'should render word count span': async ({pass, fail}) => {
96
+ const { container, control } = await createEditorWithControl();
97
+ await control.updateComplete;
98
+ const span = control.shadowRoot.querySelector('.word-count');
99
+ if(!span){
100
+ cleanup(container);
101
+ return fail('WordCount should render a .word-count span');
102
+ }
103
+ cleanup(container);
104
+ pass('WordCount renders word count span');
105
+ },
106
+ };