@api-client/ui 0.5.38 → 0.5.40

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 (299) hide show
  1. package/build/src/md/list/internals/ListItem.d.ts +24 -15
  2. package/build/src/md/list/internals/ListItem.d.ts.map +1 -1
  3. package/build/src/md/list/internals/ListItem.js +85 -59
  4. package/build/src/md/list/internals/ListItem.js.map +1 -1
  5. package/build/src/md/list/internals/ListItem.styles.js +11 -11
  6. package/build/src/md/list/internals/ListItem.styles.js.map +1 -1
  7. package/build/src/md/select/internals/Option.d.ts +4 -14
  8. package/build/src/md/select/internals/Option.d.ts.map +1 -1
  9. package/build/src/md/select/internals/Option.js +13 -28
  10. package/build/src/md/select/internals/Option.js.map +1 -1
  11. package/build/src/md/select/internals/Select.d.ts +1 -1
  12. package/build/src/md/select/internals/Select.d.ts.map +1 -1
  13. package/build/src/md/select/internals/Select.js +15 -5
  14. package/build/src/md/select/internals/Select.js.map +1 -1
  15. package/build/tsconfig.tsbuildinfo +1 -0
  16. package/package.json +1 -1
  17. package/src/md/list/internals/ListItem.styles.ts +11 -11
  18. package/src/md/list/internals/ListItem.ts +68 -43
  19. package/src/md/select/internals/Option.ts +14 -26
  20. package/src/md/select/internals/Select.ts +15 -5
  21. package/.aiexclude +0 -3
  22. package/.cursor/rules/html-and-css-best-practices.mdc +0 -63
  23. package/.cursor/rules/lit-best-practices.mdc +0 -89
  24. package/.editorconfig +0 -29
  25. package/.github/CONTRIBUTING.md +0 -24
  26. package/.github/instructions/html-and-css-best-practices.instructions.md +0 -70
  27. package/.github/instructions/lit-best-practices.instructions.md +0 -90
  28. package/.github/release.yml +0 -14
  29. package/.github/stale.yml +0 -23
  30. package/.github/workflows/auto-release.yml +0 -182
  31. package/.github/workflows/release.yml +0 -82
  32. package/.prettierrc.js +0 -14
  33. package/.vscode/settings.json +0 -18
  34. package/RELEASE.md +0 -163
  35. package/RELEASE_SETUP.md +0 -235
  36. package/build/src/demo/DemoPage.d.ts +0 -81
  37. package/build/src/demo/DemoPage.d.ts.map +0 -1
  38. package/build/src/demo/DemoPage.js +0 -175
  39. package/build/src/demo/DemoPage.js.map +0 -1
  40. package/build/src/demo/DemoStyles.d.ts +0 -3
  41. package/build/src/demo/DemoStyles.d.ts.map +0 -1
  42. package/build/src/demo/DemoStyles.js +0 -60
  43. package/build/src/demo/DemoStyles.js.map +0 -1
  44. package/build/test/elements/navigation/Navigation.test.d.ts +0 -3
  45. package/build/test/elements/navigation/Navigation.test.d.ts.map +0 -1
  46. package/build/test/elements/navigation/Navigation.test.js +0 -113
  47. package/build/test/elements/navigation/Navigation.test.js.map +0 -1
  48. package/commitlint.config.cjs +0 -2
  49. package/demo/elements/authorization/AuthPlugin.js +0 -57
  50. package/demo/elements/authorization/AuthProxy.js +0 -215
  51. package/demo/elements/authorization/api-key.html +0 -27
  52. package/demo/elements/authorization/api-key.ts +0 -44
  53. package/demo/elements/authorization/basic.html +0 -27
  54. package/demo/elements/authorization/basic.ts +0 -43
  55. package/demo/elements/authorization/bearer.html +0 -27
  56. package/demo/elements/authorization/bearer.ts +0 -43
  57. package/demo/elements/authorization/env.js +0 -8
  58. package/demo/elements/authorization/index.html +0 -44
  59. package/demo/elements/authorization/ntlm.html +0 -27
  60. package/demo/elements/authorization/ntlm.ts +0 -43
  61. package/demo/elements/authorization/oauth-authorize.html +0 -75
  62. package/demo/elements/authorization/oauth-authorize.ts +0 -40
  63. package/demo/elements/authorization/oauth-error.html +0 -18
  64. package/demo/elements/authorization/oauth-error.ts +0 -10
  65. package/demo/elements/authorization/oauth-popup.html +0 -36
  66. package/demo/elements/authorization/oauth2.html +0 -27
  67. package/demo/elements/authorization/oauth2.ts +0 -100
  68. package/demo/elements/authorization/oidc.html +0 -27
  69. package/demo/elements/authorization/oidc.ts +0 -139
  70. package/demo/elements/authorization/private.crt +0 -31
  71. package/demo/elements/authorization/private.csr +0 -28
  72. package/demo/elements/authorization/private.key +0 -51
  73. package/demo/elements/authorization/private.pem +0 -31
  74. package/demo/elements/authorization/redirect.html +0 -20
  75. package/demo/elements/authorization/ssl-commands.sh +0 -30
  76. package/demo/elements/authorization/ssl.conf +0 -24
  77. package/demo/elements/autocomplete/index.html +0 -64
  78. package/demo/elements/autocomplete/index.ts +0 -171
  79. package/demo/elements/code-editor/CodeEditorDemo.ts +0 -173
  80. package/demo/elements/code-editor/index.html +0 -19
  81. package/demo/elements/context-menu/DemoIcons.ts +0 -21
  82. package/demo/elements/context-menu/basic.html +0 -25
  83. package/demo/elements/context-menu/basic.ts +0 -119
  84. package/demo/elements/context-menu/custom-data.html +0 -25
  85. package/demo/elements/context-menu/custom-data.ts +0 -62
  86. package/demo/elements/context-menu/demo.css +0 -28
  87. package/demo/elements/context-menu/enabled-state.html +0 -25
  88. package/demo/elements/context-menu/enabled-state.ts +0 -73
  89. package/demo/elements/context-menu/icons.html +0 -25
  90. package/demo/elements/context-menu/icons.ts +0 -64
  91. package/demo/elements/context-menu/index.html +0 -43
  92. package/demo/elements/context-menu/nested.html +0 -25
  93. package/demo/elements/context-menu/nestedt.ts +0 -152
  94. package/demo/elements/context-menu/no-execute.html +0 -25
  95. package/demo/elements/context-menu/no-execute.ts +0 -134
  96. package/demo/elements/context-menu/radio-menu.html +0 -25
  97. package/demo/elements/context-menu/radio-menu.ts +0 -83
  98. package/demo/elements/context-menu/separators.html +0 -25
  99. package/demo/elements/context-menu/separators.ts +0 -172
  100. package/demo/elements/currency/index.html +0 -91
  101. package/demo/elements/currency/index.ts +0 -352
  102. package/demo/elements/environment/environment-editor.html +0 -20
  103. package/demo/elements/environment/environment-editor.ts +0 -49
  104. package/demo/elements/environment/index.html +0 -33
  105. package/demo/elements/environment/server-editor.html +0 -20
  106. package/demo/elements/environment/server-editor.ts +0 -67
  107. package/demo/elements/environment/variables-editor.html +0 -20
  108. package/demo/elements/environment/variables-editor.ts +0 -94
  109. package/demo/elements/har/har-viewer.html +0 -20
  110. package/demo/elements/har/har-viewer.ts +0 -76
  111. package/demo/elements/har/har1.har +0 -3044
  112. package/demo/elements/har/har2.json +0 -439
  113. package/demo/elements/har/index.html +0 -26
  114. package/demo/elements/highlight/example.md +0 -27
  115. package/demo/elements/highlight/index.html +0 -31
  116. package/demo/elements/highlight/marked-highlight.html +0 -132
  117. package/demo/elements/highlight/marked-highlight.ts +0 -22
  118. package/demo/elements/highlight/prism-highlight.html +0 -62
  119. package/demo/elements/highlight/prism-highlight.ts +0 -17
  120. package/demo/elements/http/body-editor.html +0 -17
  121. package/demo/elements/http/body-editor.ts +0 -115
  122. package/demo/elements/http/headers.html +0 -17
  123. package/demo/elements/http/headers.ts +0 -59
  124. package/demo/elements/http/http-assertions.html +0 -20
  125. package/demo/elements/http/http-assertions.ts +0 -89
  126. package/demo/elements/http/http-flows.html +0 -23
  127. package/demo/elements/http/http-flows.ts +0 -89
  128. package/demo/elements/http/index.html +0 -45
  129. package/demo/elements/http/request-editor.html +0 -26
  130. package/demo/elements/http/request-editor.ts +0 -197
  131. package/demo/elements/http/request-log.html +0 -16
  132. package/demo/elements/http/request-log.ts +0 -136
  133. package/demo/elements/http/url-editing.html +0 -17
  134. package/demo/elements/http/url-editing.ts +0 -112
  135. package/demo/elements/icons/index.html +0 -81
  136. package/demo/elements/icons/index.ts +0 -52
  137. package/demo/elements/index.html +0 -72
  138. package/demo/elements/mention-textarea/index.html +0 -19
  139. package/demo/elements/mention-textarea/index.ts +0 -205
  140. package/demo/elements/navigation/navigation-item.html +0 -49
  141. package/demo/elements/navigation/navigation-item.ts +0 -131
  142. package/demo/elements/navigation/navigation.html +0 -20
  143. package/demo/elements/navigation/navigation.ts +0 -45
  144. package/demo/elements/project/index.html +0 -29
  145. package/demo/elements/project/project-run-report.html +0 -20
  146. package/demo/elements/project/project-run-report.ts +0 -132
  147. package/demo/elements/project/request-editor.html +0 -23
  148. package/demo/elements/project/request-editor.ts +0 -232
  149. package/demo/elements/user/user-avatar.html +0 -17
  150. package/demo/elements/user/user-avatar.ts +0 -60
  151. package/demo/env.js +0 -4
  152. package/demo/index.html +0 -34
  153. package/demo/layout/index.html +0 -94
  154. package/demo/layout/index.ts +0 -190
  155. package/demo/md/DemoStyles.ts +0 -61
  156. package/demo/md/UiDemoPage.ts +0 -6
  157. package/demo/md/buttons/button.html +0 -121
  158. package/demo/md/buttons/button.ts +0 -246
  159. package/demo/md/buttons/group.html +0 -36
  160. package/demo/md/buttons/group.ts +0 -171
  161. package/demo/md/checkbox/index.html +0 -39
  162. package/demo/md/checkbox/index.ts +0 -220
  163. package/demo/md/chip/chip.html +0 -70
  164. package/demo/md/chip/chip.ts +0 -219
  165. package/demo/md/chip/pawel6c9a.jpg +0 -0
  166. package/demo/md/collapse/CustomDetail.ts +0 -89
  167. package/demo/md/collapse/collapse.html +0 -21
  168. package/demo/md/collapse/collapse.ts +0 -78
  169. package/demo/md/date-picker/date-picker.ts +0 -336
  170. package/demo/md/date-picker/index.html +0 -171
  171. package/demo/md/dialog/confirm-dialog.html +0 -49
  172. package/demo/md/dialog/confirm-dialog.ts +0 -121
  173. package/demo/md/dialog/dialog.html +0 -25
  174. package/demo/md/dialog/dialog.ts +0 -468
  175. package/demo/md/dropdown-list/index.html +0 -31
  176. package/demo/md/dropdown-list/index.ts +0 -158
  177. package/demo/md/icon-button/index.html +0 -122
  178. package/demo/md/icon-button/index.ts +0 -132
  179. package/demo/md/index.html +0 -73
  180. package/demo/md/inputs/input.html +0 -73
  181. package/demo/md/inputs/input.ts +0 -278
  182. package/demo/md/inputs/radio.html +0 -39
  183. package/demo/md/inputs/radio.ts +0 -156
  184. package/demo/md/inputs/switch.html +0 -45
  185. package/demo/md/inputs/switch.ts +0 -144
  186. package/demo/md/list/list.html +0 -65
  187. package/demo/md/list/list.ts +0 -204
  188. package/demo/md/listbox/listbox.html +0 -31
  189. package/demo/md/listbox/listbox.ts +0 -27
  190. package/demo/md/menu/index.html +0 -19
  191. package/demo/md/menu/index.ts +0 -514
  192. package/demo/md/notification/snack.html +0 -21
  193. package/demo/md/notification/snack.ts +0 -70
  194. package/demo/md/progress/progress.html +0 -46
  195. package/demo/md/progress/progress.ts +0 -161
  196. package/demo/md/segmented-button/index.html +0 -21
  197. package/demo/md/segmented-button/index.ts +0 -55
  198. package/demo/md/select/index.html +0 -16
  199. package/demo/md/select/index.ts +0 -207
  200. package/demo/md/tabs/tabs.html +0 -40
  201. package/demo/md/tabs/tabs.ts +0 -214
  202. package/demo/oauth-popup.html +0 -36
  203. package/demo/page.css +0 -8
  204. package/demo/resources/calendar-month.png +0 -0
  205. package/demo/resources/favorite.png +0 -0
  206. package/demo/resources/fingerprint.png +0 -0
  207. package/demo/resources/home-work.png +0 -0
  208. package/demo/resources/mood.png +0 -0
  209. package/demo/resources/print.png +0 -0
  210. package/demo/resources/stars.png +0 -0
  211. package/demo/resources/theaters.png +0 -0
  212. package/demo/tsconfig.json +0 -4
  213. package/eslint.config.js +0 -97
  214. package/scripts/copy-assets.js +0 -21
  215. package/scripts/release.js +0 -66
  216. package/src/demo/DemoPage.ts +0 -169
  217. package/src/demo/DemoStyles.ts +0 -60
  218. package/test/README.md +0 -375
  219. package/test/contextual-menu/ContextMenu.test.ts +0 -760
  220. package/test/contextual-menu/ContextMenuElement.test.ts +0 -569
  221. package/test/core/activity.spec.ts +0 -413
  222. package/test/core/activity_manager.spec.ts +0 -544
  223. package/test/core/application.spec.ts +0 -218
  224. package/test/core/fragment.spec.ts +0 -565
  225. package/test/core/fragment_manager.spec.ts +0 -404
  226. package/test/core/live_data.spec.ts +0 -558
  227. package/test/core/renderer.spec.ts +0 -113
  228. package/test/dom-assertions.test.ts +0 -182
  229. package/test/elements/MonacoSetup.ts +0 -65
  230. package/test/elements/authorization/basic-method.test.ts +0 -177
  231. package/test/elements/authorization/bearer-method.test.ts +0 -143
  232. package/test/elements/authorization/ntlm-method.test.ts +0 -219
  233. package/test/elements/authorization/oauth2-client-credentials-method.test.ts +0 -334
  234. package/test/elements/authorization/oauth2-code-method.test.ts +0 -320
  235. package/test/elements/authorization/oauth2-custom-grant-method.test.ts +0 -255
  236. package/test/elements/authorization/oauth2-device-code-method.test.ts +0 -371
  237. package/test/elements/authorization/oauth2-implicit-method.test.ts +0 -407
  238. package/test/elements/authorization/oauth2-jwt-method.test.ts +0 -217
  239. package/test/elements/authorization/oauth2-password-method.test.ts +0 -275
  240. package/test/elements/authorization/openid-method.test.ts +0 -591
  241. package/test/elements/autocomplete/autocomplete-input.spec.ts +0 -646
  242. package/test/elements/code-editor/code-editor.accessibility.test.ts +0 -298
  243. package/test/elements/code-editor/code-editor.test.ts +0 -574
  244. package/test/elements/currency/CurrencyPicker.accessibility.test.ts +0 -328
  245. package/test/elements/currency/CurrencyPicker.core.test.ts +0 -318
  246. package/test/elements/currency/CurrencyPicker.integration.test.ts +0 -482
  247. package/test/elements/currency/CurrencyPicker.test.ts +0 -486
  248. package/test/elements/data-table/DataTable.browser.test.ts +0 -649
  249. package/test/elements/har/HarUtils.test.ts +0 -45
  250. package/test/elements/har/HarViewerElement.test.ts +0 -687
  251. package/test/elements/har/test-data/har1.har +0 -3044
  252. package/test/elements/highlight/MarkedHighlightElement.test.ts +0 -452
  253. package/test/elements/highlight/PrismHighlightElement.test.ts +0 -79
  254. package/test/elements/highlight/PrismHighlighter.test.ts +0 -94
  255. package/test/elements/highlight/remoteSanitization.md +0 -1
  256. package/test/elements/highlight/test.md +0 -3
  257. package/test/elements/highlight/test1.md +0 -3
  258. package/test/elements/highlight/test2.md +0 -1
  259. package/test/elements/http/BodyFormdataEditorElement.test.ts +0 -482
  260. package/test/elements/http/BodyMultipartEditorElement.test.ts +0 -658
  261. package/test/elements/http/BodyRawEditorElement.test.ts +0 -90
  262. package/test/elements/http/CertificateAdd.test.ts +0 -457
  263. package/test/elements/http/HttpAssertions.test.ts +0 -994
  264. package/test/elements/http/HttpFlows.test.ts +0 -502
  265. package/test/elements/http/UrlEncodeUtils.test.ts +0 -202
  266. package/test/elements/layout/SplitItem.test.ts +0 -440
  267. package/test/elements/layout/SplitLayoutManager.test.ts +0 -1501
  268. package/test/elements/layout/SplitPanel.test.ts +0 -1109
  269. package/test/elements/mention-textarea/MentionTextArea.basic.test.ts +0 -114
  270. package/test/elements/mention-textarea/MentionTextArea.test.ts +0 -613
  271. package/test/elements/navigation/Navigation.test.ts +0 -120
  272. package/test/env.ts +0 -15
  273. package/test/events/EventTypes.test.ts +0 -363
  274. package/test/events/EventsTestHelpers.ts +0 -16
  275. package/test/helpers/TestUtils.ts +0 -243
  276. package/test/helpers/UiMock.ts +0 -185
  277. package/test/lib/Dom.test.ts +0 -231
  278. package/test/md/button/UiButton.test.ts +0 -347
  279. package/test/md/button/UiIconButton.test.ts +0 -155
  280. package/test/md/chip/UiChip.test.ts +0 -219
  281. package/test/md/collapse/UiCollapse.test.ts +0 -250
  282. package/test/md/collapse/flex-layout.test.ts +0 -105
  283. package/test/md/date-time/DateTime.test.ts +0 -348
  284. package/test/md/dialog/UiConfirmDialog.test.ts +0 -131
  285. package/test/md/dialog/UiDialog.test.ts +0 -759
  286. package/test/md/menu/Menu.test.ts +0 -855
  287. package/test/md/menu/MenuIntegration.test.ts +0 -426
  288. package/test/md/menu/MenuItem.test.ts +0 -652
  289. package/test/md/menu/SubMenu.test.ts +0 -410
  290. package/test/md/progress/UiCircularProgressElement.test.ts +0 -481
  291. package/test/md/progress/UiProgressElement.test.ts +0 -117
  292. package/test/md/progress/UiRangeElement.test.ts +0 -156
  293. package/test/md/select/Select.test.ts +0 -925
  294. package/test/plugins/takeScreenshotPlugin.js +0 -35
  295. package/test/setup.test.ts +0 -217
  296. package/test/setup.ts +0 -117
  297. package/test/tsconfig.json +0 -7
  298. package/web-dev-server.config.js +0 -21
  299. package/web-test-runner.config.js +0 -90
@@ -1,452 +0,0 @@
1
- import { nextFrame, fixture, expect, assert, html, oneEvent } from '@open-wc/testing'
2
- import sinon from 'sinon'
3
- import { MarkedHighlightElement } from '../../../src/index.js'
4
- import '../../../src/elements/highlight/marked-highlight.js'
5
- import { Tokens } from 'marked'
6
-
7
- describe('MarkedHighlightElement', () => {
8
- async function basicFixture(): Promise<MarkedHighlightElement> {
9
- return fixture(
10
- html`<marked-highlight>
11
- <div id="output" slot="markdown-html"></div>
12
- <script type="text/markdown">
13
- # Test
14
- </script>
15
- </marked-highlight>`
16
- )
17
- }
18
-
19
- async function propertyMarkdownFixture(): Promise<MarkedHighlightElement> {
20
- return fixture(
21
- html`<marked-highlight markdown="# Test">
22
- <div id="output" slot="markdown-html"></div>
23
- </marked-highlight>`
24
- )
25
- }
26
-
27
- async function noContentFixture(): Promise<MarkedHighlightElement> {
28
- return fixture(
29
- html`<marked-highlight>
30
- <div id="output" slot="markdown-html"></div>
31
- <script type="text/markdown"></script>
32
- </marked-highlight>`
33
- )
34
- }
35
-
36
- async function camelCaseHTMLFixture(): Promise<MarkedHighlightElement> {
37
- return fixture(
38
- html`<marked-highlight>
39
- <div id="output" slot="markdown-html"></div>
40
- <script type="text/markdown">
41
- \`\`\`html
42
- <div camelCase></div>
43
- \`\`\`
44
- </script>
45
- </marked-highlight>`
46
- )
47
- }
48
-
49
- // async function camelCaseHTMLWithoutChildFixture(): Promise<MarkedHighlightElement> {
50
- // return fixture(
51
- // html`<marked-highlight>
52
- // <div id="output" slot="markdown-html"></div>
53
- // <script type="text/markdown">
54
- // \`\`\`html
55
- // <div camelCase></div>
56
- // \`\`\`
57
- // </script>
58
- // </marked-highlight>`
59
- // )
60
- // }
61
-
62
- // async function badHTMLWithoutChildFixture(): Promise<MarkedHighlightElement> {
63
- // return fixture(
64
- // html`<marked-highlight>
65
- // <div id="output" slot="markdown-html"></div>
66
- // <script type="text/markdown">
67
- // \`\`\`html
68
- // <p><div></p></div>
69
- // \`\`\`
70
- // </script>
71
- // </marked-highlight>`
72
- // )
73
- // }
74
-
75
- async function rendererFixture(): Promise<MarkedHighlightElement> {
76
- return fixture(
77
- html`<marked-highlight>
78
- <div id="output" slot="markdown-html"></div>
79
- <script type="text/markdown">
80
- [Link](http://url.com)
81
- </script>
82
- </marked-highlight>`
83
- )
84
- }
85
-
86
- // async function sanitizerFixture(): Promise<MarkedHighlightElement> {
87
- // return fixture(
88
- // html`<marked-highlight sanitize>
89
- // <div id="output" slot="markdown-html"></div>
90
- // <script type="text/markdown">
91
- // [Link](http://url.com" onclick="alert(1)")
92
- // <a href="http://url.com" onclick="alert(1)">Link</a>
93
-
94
- // \`\`\`html
95
- // <a href="http://url.com" onclick="alert(1)">Link</a>
96
- // \`\`\`
97
- // </script>
98
- // </marked-highlight>`
99
- // )
100
- // }
101
-
102
- async function remoteContentFixture(): Promise<MarkedHighlightElement> {
103
- return fixture(
104
- html`<marked-highlight>
105
- <div id="output" slot="markdown-html"></div>
106
- <script type="text/markdown" src="test/elements/highlight/test.md">
107
- # Loading
108
- Please wait...
109
- </script>
110
- </marked-highlight>`
111
- )
112
- }
113
-
114
- async function badRemoteContentFixture(): Promise<MarkedHighlightElement> {
115
- return fixture(
116
- html`<marked-highlight>
117
- <div id="output" slot="markdown-html"></div>
118
- <script type="text/markdown" src="test/elements/highlight/test3.md"></script>
119
- </marked-highlight>`
120
- )
121
- }
122
-
123
- async function sanitizedRemoteContentFixture(): Promise<MarkedHighlightElement> {
124
- return fixture(
125
- html`<marked-highlight>
126
- <div id="output" slot="markdown-html"></div>
127
- <script type="text/markdown" src="test/elements/highlight/remoteSanitization.md"></script>
128
- </marked-highlight>`
129
- )
130
- }
131
-
132
- async function unsanitizedRemoteContentFixture(): Promise<MarkedHighlightElement> {
133
- return fixture(
134
- html`<marked-highlight disableRemoteSanitization>
135
- <div id="output" slot="markdown-html"></div>
136
- <script type="text/markdown" src="test/elements/highlight/remoteSanitization.md"></script>
137
- </marked-highlight>`
138
- )
139
- }
140
-
141
- async function markedOptionsFixture(): Promise<MarkedHighlightElement> {
142
- return fixture(
143
- html`<marked-highlight sanitize pedantic breaks>
144
- <div id="output" slot="markdown-html"></div>
145
- <script type="text/markdown" src="test/elements/highlight/remoteSanitization.md"></script>
146
- </marked-highlight>`
147
- )
148
- }
149
-
150
- // Thanks IE10.
151
- function isHidden(element: HTMLElement): boolean {
152
- const rect = element.getBoundingClientRect()
153
- return rect.width === 0 && rect.height === 0
154
- }
155
-
156
- // // Replace reserved HTML characters with their character entity equivalents to
157
- // // match the transform done by Markdown.
158
- // //
159
- // // The Marked library itself is not used because it wraps code blocks in
160
- // // `<code><pre>`, which is superfluous for testing purposes.
161
- // function escapeHTML(string) {
162
- // const span = document.createElement('span');
163
- // span.textContent = string;
164
- // return span.innerHTML;
165
- // }
166
-
167
- describe('Property setters', () => {
168
- let element: MarkedHighlightElement
169
- beforeEach(async () => {
170
- element = await basicFixture()
171
- })
172
-
173
- it(`triggers the renderMarkdown() when setting the markdown property`, async () => {
174
- const spy = sinon.spy(element, 'renderMarkdown')
175
- element.markdown = 'test'
176
- await nextFrame()
177
- assert.isTrue(spy.called)
178
- })
179
-
180
- it(`ignores renderMarkdown() when setting the same value for the markdown property`, async () => {
181
- element.markdown = 'test'
182
- await nextFrame()
183
- const spy = sinon.spy(element, 'renderMarkdown')
184
- element.markdown = 'test'
185
- await nextFrame()
186
- assert.isFalse(spy.called)
187
- })
188
-
189
- it(`triggers the renderMarkdown() when setting the breaks property`, async () => {
190
- const spy = sinon.spy(element, 'renderMarkdown')
191
- element.breaks = true
192
- await nextFrame()
193
- assert.isTrue(spy.called)
194
- })
195
-
196
- it(`ignores renderMarkdown() when setting the same value for the breaks property`, async () => {
197
- element.breaks = true
198
- await nextFrame()
199
- const spy = sinon.spy(element, 'renderMarkdown')
200
- element.breaks = true
201
- await nextFrame()
202
- assert.isFalse(spy.called)
203
- })
204
-
205
- it(`triggers the renderMarkdown() when setting the pedantic property`, async () => {
206
- const spy = sinon.spy(element, 'renderMarkdown')
207
- element.pedantic = true
208
- await nextFrame()
209
- assert.isTrue(spy.called)
210
- })
211
-
212
- it(`ignores renderMarkdown() when setting the same value for the pedantic property`, async () => {
213
- element.pedantic = true
214
- await nextFrame()
215
- const spy = sinon.spy(element, 'renderMarkdown')
216
- element.pedantic = true
217
- await nextFrame()
218
- assert.isFalse(spy.called)
219
- })
220
-
221
- it(`triggers the renderMarkdown() when setting the sanitize property`, async () => {
222
- const spy = sinon.spy(element, 'renderMarkdown')
223
- element.sanitize = true
224
- await nextFrame()
225
- assert.isTrue(spy.called)
226
- })
227
-
228
- it(`ignores renderMarkdown() when setting the same value for the sanitize property`, async () => {
229
- element.sanitize = true
230
- await nextFrame()
231
- const spy = sinon.spy(element, 'renderMarkdown')
232
- element.sanitize = true
233
- await nextFrame()
234
- assert.isFalse(spy.called)
235
- })
236
-
237
- it(`triggers the renderMarkdown() when setting the renderer property`, async () => {
238
- const spy = sinon.spy(element, 'renderMarkdown')
239
- element.renderer = (): void => {
240
- /* */
241
- }
242
- await nextFrame()
243
- assert.isTrue(spy.called)
244
- })
245
-
246
- it(`triggers the renderMarkdown() when setting the sanitizer property`, async () => {
247
- const spy = sinon.spy(element, 'renderMarkdown')
248
- element.sanitizer = (): void => {
249
- /* */
250
- }
251
- await nextFrame()
252
- assert.isTrue(spy.called)
253
- })
254
- })
255
-
256
- describe('renders markdown from property setter', () => {
257
- let outputElement: HTMLDivElement
258
- beforeEach(async () => {
259
- await propertyMarkdownFixture()
260
- outputElement = document.getElementById('output') as HTMLDivElement
261
- })
262
-
263
- it('renders the code', () => {
264
- assert.equal(outputElement.innerHTML, '<h1>Test</h1>\n')
265
- })
266
- })
267
-
268
- describe('has options of marked library', () => {
269
- let markedElement: MarkedHighlightElement
270
- beforeEach(async () => {
271
- markedElement = await markedOptionsFixture()
272
- })
273
-
274
- it('has sanitize', () => {
275
- expect(markedElement.sanitize).to.equal(true)
276
- })
277
-
278
- it('has sanitizer', () => {
279
- expect(markedElement.sanitizer).to.equal(undefined)
280
- })
281
-
282
- it('has pedantic', () => {
283
- expect(markedElement.pedantic).to.equal(true)
284
- })
285
-
286
- it('has breaks', () => {
287
- expect(markedElement.breaks).to.equal(true)
288
- })
289
- })
290
-
291
- describe('with .markdown-html child', () => {
292
- describe('ignores no content', () => {
293
- let markedElement: MarkedHighlightElement
294
- let outputElement: HTMLDivElement
295
- let proofElement: HTMLDivElement
296
- beforeEach(async () => {
297
- markedElement = await noContentFixture()
298
- proofElement = document.createElement('div')
299
- outputElement = document.getElementById('output') as HTMLDivElement
300
- })
301
-
302
- it('in code blocks', () => {
303
- proofElement.innerHTML = ''
304
- assert.equal(outputElement, markedElement.outputElement)
305
- assert.isTrue(isHidden(markedElement.shadowRoot!.querySelector('#content')!))
306
- assert.equal(markedElement.markdown, undefined)
307
- assert.equal(outputElement.innerHTML, proofElement.innerHTML)
308
- })
309
- })
310
- })
311
-
312
- describe('with custom renderer', () => {
313
- let markedElement: MarkedHighlightElement
314
- let outputElement: HTMLDivElement
315
- let proofElement: HTMLDivElement
316
-
317
- beforeEach(async () => {
318
- markedElement = await rendererFixture()
319
- outputElement = document.getElementById('output') as HTMLDivElement
320
- proofElement = document.createElement('div')
321
- })
322
-
323
- it('takes custom link renderer', async () => {
324
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
325
- markedElement.renderer = (renderer: any): void => {
326
- renderer.link = (link: Tokens.Link): string => {
327
- return `<a href="${link.href}" target="_blank">${link.text}</a>`
328
- }
329
- }
330
- await nextFrame()
331
- proofElement.innerHTML = '<a href="http://url.com" target="_blank">Link</a>'
332
- expect(outputElement.innerHTML).to.include(proofElement.innerHTML)
333
- })
334
- })
335
-
336
- describe('with remote content', () => {
337
- let markedElement: MarkedHighlightElement
338
- let outputElement: HTMLDivElement
339
- let proofElement: HTMLDivElement
340
-
341
- describe('successful fetch', () => {
342
- beforeEach(async () => {
343
- markedElement = await remoteContentFixture()
344
- outputElement = document.getElementById('output') as HTMLDivElement
345
- proofElement = document.createElement('div')
346
- })
347
-
348
- it('renders remote content', async () => {
349
- proofElement.innerHTML = '<h1>Test</h1>\n<p><a href="http://url.com/">Link</a></p>\n'
350
- await oneEvent(markedElement, 'markedloaded')
351
- await nextFrame()
352
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
353
- })
354
-
355
- it('renders content while remote content is loading', () => {
356
- proofElement.innerHTML = '<h1>Loading</h1>\n<p>Please wait...</p>\n'
357
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
358
- })
359
-
360
- it('renders new remote content when src changes', async () => {
361
- await oneEvent(markedElement, 'markedloaded')
362
- await nextFrame()
363
- proofElement.innerHTML = '<h1>Test 2</h1>\n'
364
- // @ts-expect-error for testing
365
- markedElement.querySelector('[type="text/markdown"]').src = 'test/elements/highlight/test2.md'
366
- await oneEvent(markedElement, 'markedloaded')
367
- await nextFrame()
368
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
369
- })
370
- })
371
-
372
- describe('fails to load', () => {
373
- beforeEach(async () => {
374
- markedElement = await badRemoteContentFixture()
375
- outputElement = document.getElementById('output') as HTMLDivElement
376
- proofElement = document.createElement('div')
377
- })
378
-
379
- it('renders error message', async () => {
380
- proofElement.innerHTML = '<p>Failed loading markdown source</p>\n'
381
- await oneEvent(markedElement, 'markedloaderror')
382
- await nextFrame()
383
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
384
- })
385
-
386
- it("doesn't render error message when default is prevented", async () => {
387
- proofElement.innerHTML = ''
388
- markedElement.addEventListener('markedloaderror', (e) => {
389
- e.preventDefault()
390
- })
391
- await oneEvent(markedElement, 'markedloaderror')
392
- await nextFrame()
393
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
394
- })
395
- })
396
-
397
- describe('sanitizing remote content', () => {
398
- describe('sanitized', () => {
399
- beforeEach(async () => {
400
- markedElement = await sanitizedRemoteContentFixture()
401
- })
402
-
403
- it('sanitizes remote content', async () => {
404
- outputElement = markedElement.querySelector('#output')!
405
- proofElement = document.createElement('div')
406
- proofElement.innerHTML = '<div></div>\n'
407
- await oneEvent(markedElement, 'markedloaded')
408
- await nextFrame()
409
- assert.isTrue(markedElement.sanitize)
410
- assert.isNotTrue(markedElement.disableRemoteSanitization)
411
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
412
- })
413
- })
414
-
415
- describe('unsanitized', () => {
416
- beforeEach(async () => {
417
- markedElement = await unsanitizedRemoteContentFixture()
418
- })
419
-
420
- it('Does not sanitize remote content', async () => {
421
- outputElement = markedElement.querySelector('#output')!
422
- proofElement = document.createElement('div')
423
- proofElement.innerHTML = '<div></div>\n'
424
- await oneEvent(markedElement, 'markedloaded')
425
- await nextFrame()
426
-
427
- assert.isNotTrue(markedElement.sanitize)
428
- assert.isTrue(markedElement.disableRemoteSanitization)
429
- expect(outputElement.innerHTML).to.equal(proofElement.innerHTML)
430
- })
431
- })
432
- })
433
- })
434
-
435
- describe('events', () => {
436
- let markedElement: MarkedHighlightElement
437
- let outputElement: HTMLDivElement
438
- beforeEach(async () => {
439
- markedElement = await camelCaseHTMLFixture()
440
- outputElement = document.getElementById('output') as HTMLDivElement
441
- })
442
-
443
- it('render() fires markedrendercomplete', async () => {
444
- setTimeout(() => {
445
- markedElement.renderMarkdown()
446
- })
447
- await oneEvent(markedElement, 'markedrendercomplete')
448
- await nextFrame()
449
- expect(outputElement.innerHTML).to.not.equal('')
450
- })
451
- })
452
- })
@@ -1,79 +0,0 @@
1
- import { fixture, assert, html, oneEvent, nextFrame, aTimeout } from '@open-wc/testing'
2
- import sinon from 'sinon'
3
- import PrismHighlight from '../../../src/elements/highlight/PrismHighlight.js'
4
- import '../../../src/elements/highlight/prism-highlight.js'
5
-
6
- describe('PrismHighlightElement', () => {
7
- async function markdownFixture(): Promise<PrismHighlight> {
8
- return fixture(html`<prism-highlight lang="markdown"></prism-highlight>`)
9
- }
10
-
11
- async function rawFixture(): Promise<PrismHighlight> {
12
- return fixture(html`<prism-highlight raw lang="json" code='{"test": true}'></prism-highlight>`)
13
- }
14
-
15
- describe('anchors handling', () => {
16
- let element: PrismHighlight
17
- let code = '# Test highlight\nHello world!\n'
18
- code += '[link](https://domain.com/)'
19
-
20
- beforeEach(async () => {
21
- element = await markdownFixture()
22
- element.code = code
23
- // one for the setter
24
- await nextFrame()
25
- // and one for the highlight debouncer (do we still need it?)
26
- await aTimeout(0)
27
- await nextFrame()
28
- })
29
-
30
- // Not sure why but when executing this file only this works, but in the test run it cannot find the "a" element.
31
- it.skip('dispatches the link event', async () => {
32
- const anchor = element.outputElement!.querySelector('a')!
33
- setTimeout(() => {
34
- anchor.click()
35
- })
36
- const e = await oneEvent(element, 'link')
37
- assert.equal(e.detail.url, 'https://domain.com/', 'has the URL value')
38
- assert.equal(e.detail.asNew, false, 'has the asNew property')
39
- })
40
-
41
- // auto liner is disabled due to some error with dart syntax language.
42
- it.skip('dispatches the event when ctrl is set', async () => {
43
- const spy = sinon.spy()
44
- element.addEventListener('link', spy)
45
- const anchor = element.outputElement!.querySelector('a')!
46
- anchor.dispatchEvent(
47
- new PointerEvent('click', {
48
- bubbles: true,
49
- cancelable: true,
50
- composed: true,
51
- ctrlKey: true,
52
- })
53
- )
54
- assert.isTrue(spy.calledOnce)
55
- const event = spy.args[0][0] as CustomEvent
56
- assert.equal(event.detail.url, 'https://domain.com/', 'has the URL value')
57
- assert.equal(event.detail.asNew, true, 'has the asNew property')
58
- })
59
- })
60
-
61
- describe('#raw', () => {
62
- let element: PrismHighlight
63
- beforeEach(async () => {
64
- element = await rawFixture()
65
- })
66
-
67
- it('renders the code without highlighting', () => {
68
- const pre = element.shadowRoot!.querySelector('.raw-content')!
69
- assert.ok(pre)
70
- })
71
-
72
- it('renders back the highlighted document', async () => {
73
- element.raw = false
74
- await nextFrame()
75
- const pre = element.shadowRoot!.querySelector('.parsed-content')
76
- assert.ok(pre)
77
- })
78
- })
79
- })
@@ -1,94 +0,0 @@
1
- import { assert } from '@open-wc/testing'
2
- import { PrismHighlighter } from '../../../src/index.js'
3
-
4
- describe('PrismHighlighter', () => {
5
- describe('detectLang()', () => {
6
- let instance: PrismHighlighter
7
- beforeEach(() => {
8
- instance = new PrismHighlighter()
9
- })
10
-
11
- it('Returns JS grammar when no lang', () => {
12
- const result = instance.detectLang('{}')
13
- // @ts-expect-error for testing
14
- assert.isTrue(result === Prism.languages.javascript)
15
- })
16
-
17
- it('Returns Markup grammar when no lang', () => {
18
- const result = instance.detectLang('<html>')
19
- // @ts-expect-error for testing
20
- assert.isTrue(result === Prism.languages.markup)
21
- })
22
- ;['js', 'esm', 'mj'].forEach((item) => {
23
- it(`Returns JS grammar for ${item}`, () => {
24
- const result = instance.detectLang('{}', item)
25
- // @ts-expect-error for testing
26
- assert.isTrue(result === Prism.languages.javascript)
27
- })
28
- })
29
- ;['c'].forEach((item) => {
30
- it(`Returns C grammar for ${item}`, () => {
31
- const result = instance.detectLang('{}', item)
32
- // @ts-expect-error for testing
33
- assert.isTrue(result === Prism.languages.clike)
34
- })
35
- })
36
-
37
- it('Returns default grammar', () => {
38
- const result = instance.detectLang('<html>', 'test')
39
- // @ts-expect-error for testing
40
- assert.isTrue(result === Prism.languages.markup)
41
- })
42
- })
43
-
44
- describe('Parsing', () => {
45
- let instance: PrismHighlighter
46
- beforeEach(() => {
47
- instance = new PrismHighlighter()
48
- })
49
-
50
- it('parses XML', () => {
51
- const code = '<Person>true</Person>'
52
- const result = instance.tokenize(code, 'xml')
53
- let compare = '<span class="token tag"><span class="token tag">'
54
- compare += '<span class="token punctuation">&lt;</span>Person</span>'
55
- compare += '<span class="token punctuation">></span></span>true'
56
- compare += '<span class="token tag"><span class="token tag">'
57
- compare += '<span class="token punctuation">&lt;/</span>'
58
- compare += 'Person</span><span class="token punctuation">></span></span>'
59
- assert.equal(result, compare)
60
- })
61
-
62
- it('renders predefined json', () => {
63
- const code = '{"test": true}'
64
- const result = instance.tokenize(code, 'json')
65
- const c =
66
- '<span class="token punctuation">{</span><span class="token property">"test"</span>' +
67
- '<span class="token operator">:</span> <span class="token boolean">true</span>' +
68
- '<span class="token punctuation">}</span>'
69
- assert.equal(result, c)
70
- })
71
-
72
- it('renders code with no language', async () => {
73
- const code = '007'
74
- const result = instance.tokenize(code)
75
- const c = '<span class="token number">007</span>'
76
- assert.equal(result, c)
77
- })
78
- })
79
-
80
- describe('debounce()', () => {
81
- it('eventually returns the parse result', (done) => {
82
- const code = '{"test": true}'
83
- const c =
84
- '<span class="token punctuation">{</span><span class="token property">"test"</span>' +
85
- '<span class="token operator">:</span> <span class="token boolean">true</span>' +
86
- '<span class="token punctuation">}</span>'
87
- const instance = new PrismHighlighter((result) => {
88
- assert.equal(result, c)
89
- done()
90
- })
91
- instance.debounce(code, 'json')
92
- })
93
- })
94
- })
@@ -1 +0,0 @@
1
- <div></div>
@@ -1,3 +0,0 @@
1
- # Test
2
-
3
- [Link](http://url.com/)
@@ -1,3 +0,0 @@
1
- # Test Another
2
-
3
- [Link](http://url.com/)
@@ -1 +0,0 @@
1
- # Test 2