@govtechsg/sgds-web-component 0.0.10 → 0.0.12

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 (338) hide show
  1. package/README.md +102 -10
  2. package/base/card-element.d.ts +12 -0
  3. package/{lib/utils → base}/dropdown-element.d.ts +38 -37
  4. package/{lib/utils → base}/link-element.d.ts +8 -7
  5. package/{lib/utils → base}/sgds-element.d.ts +6 -5
  6. package/components/Accordion/index.d.ts +2 -0
  7. package/components/Accordion/sgds-accordion-item.d.ts +40 -0
  8. package/components/Accordion/sgds-accordion.d.ts +19 -0
  9. package/components/ActionCard/index.d.ts +1 -0
  10. package/{lib/Card → components/ActionCard}/sgds-action-card.d.ts +21 -20
  11. package/components/Alert/index.d.ts +1 -0
  12. package/components/Alert/sgds-alert.d.ts +37 -0
  13. package/components/Badge/index.d.ts +1 -0
  14. package/components/Badge/sgds-badge.d.ts +10 -0
  15. package/components/Breadcrumb/index.d.ts +2 -0
  16. package/components/Breadcrumb/sgds-breadcrumb-item.d.ts +10 -0
  17. package/components/Breadcrumb/sgds-breadcrumb.d.ts +12 -0
  18. package/components/Button/index.d.ts +1 -0
  19. package/{lib → components}/Button/sgds-button.d.ts +55 -48
  20. package/components/Checkbox/index.d.ts +1 -0
  21. package/{lib → components}/Checkbox/sgds-checkbox.d.ts +36 -36
  22. package/components/CloseButton/index.d.ts +1 -0
  23. package/components/CloseButton/sgds-closebutton.d.ts +9 -0
  24. package/components/Dropdown/index.d.ts +3 -0
  25. package/{lib → components}/Dropdown/sgds-dropdown-item.d.ts +8 -7
  26. package/{lib → components}/Dropdown/sgds-dropdown.d.ts +8 -7
  27. package/components/FileUpload/index.d.ts +1 -0
  28. package/components/FileUpload/sgds-fileupload.d.ts +22 -0
  29. package/components/Footer/index.d.ts +1 -0
  30. package/{lib → components}/Footer/sgds-footer.d.ts +27 -23
  31. package/components/Input/index.d.ts +1 -0
  32. package/{lib → components}/Input/sgds-input.d.ts +42 -42
  33. package/components/Mainnav/index.d.ts +3 -0
  34. package/components/Mainnav/sgds-mainnav-dropdown.d.ts +6 -0
  35. package/components/Mainnav/sgds-mainnav-item.d.ts +8 -0
  36. package/{lib → components}/Mainnav/sgds-mainnav.d.ts +26 -22
  37. package/components/Masthead/index.d.ts +1 -0
  38. package/{lib → components}/Masthead/sgds-masthead.d.ts +9 -12
  39. package/components/Modal/index.d.ts +1 -0
  40. package/{lib → components}/Modal/sgds-modal.d.ts +28 -28
  41. package/components/QuantityToggle/index.d.ts +1 -0
  42. package/{lib/QuantityToggle/sgds-quantitytoggle.d.ts → components/QuantityToggle/sgds-quantity-toggle.d.ts} +30 -30
  43. package/components/Radio/index.d.ts +2 -0
  44. package/{lib/Radio/sgds-radiogroup.d.ts → components/Radio/sgds-radio-group.d.ts} +41 -41
  45. package/{lib → components}/Radio/sgds-radio.d.ts +31 -31
  46. package/components/Sidenav/index.d.ts +3 -0
  47. package/{lib → components}/Sidenav/sgds-sidenav-item.d.ts +36 -28
  48. package/components/Sidenav/sgds-sidenav-link.d.ts +8 -0
  49. package/{lib → components}/Sidenav/sgds-sidenav.d.ts +10 -6
  50. package/components/Stepper/index.d.ts +1 -0
  51. package/components/Stepper/sgds-stepper.d.ts +17 -0
  52. package/components/Tab/index.d.ts +3 -0
  53. package/{lib → components}/Tab/sgds-tab.d.ts +27 -26
  54. package/{lib → components}/Tab/sgds-tabgroup.d.ts +48 -47
  55. package/{lib → components}/Tab/sgds-tabpanel.d.ts +26 -25
  56. package/components/Table/index.d.ts +1 -0
  57. package/components/Table/sgds-table.d.ts +26 -0
  58. package/components/Textarea/index.d.ts +1 -0
  59. package/{lib → components}/Textarea/sgds-textarea.d.ts +53 -53
  60. package/components/Toast/index.d.ts +1 -0
  61. package/components/Toast/sgds-toast.d.ts +22 -0
  62. package/components/Tooltip/index.d.ts +1 -0
  63. package/components/Tooltip/sgds-tooltip.d.ts +30 -0
  64. package/index.d.ts +23 -0
  65. package/index.js +11543 -0
  66. package/index.js.map +1 -0
  67. package/main.d.ts +24 -0
  68. package/package.json +23 -65
  69. package/react/accordion/index.d.ts +3 -0
  70. package/react/accordion-item/index.d.ts +8 -0
  71. package/react/action-card/index.d.ts +3 -0
  72. package/react/alert/index.d.ts +3 -0
  73. package/react/badge/index.d.ts +3 -0
  74. package/react/breadcrumb/index.d.ts +3 -0
  75. package/react/breadcrumb-item/index.d.ts +3 -0
  76. package/react/button/index.d.ts +6 -0
  77. package/react/checkbox/index.d.ts +3 -0
  78. package/react/cjs/index.js +12510 -0
  79. package/react/cjs/index.js.map +1 -0
  80. package/react/closebutton/index.d.ts +5 -0
  81. package/react/dropdown/index.d.ts +3 -0
  82. package/react/dropdown-item/index.d.ts +3 -0
  83. package/react/fileupload/index.d.ts +3 -0
  84. package/react/footer/index.d.ts +3 -0
  85. package/react/index.d.ts +34 -0
  86. package/react/index.js +12453 -0
  87. package/react/index.js.map +1 -0
  88. package/react/input/index.d.ts +3 -0
  89. package/react/mainnav/index.d.ts +3 -0
  90. package/react/mainnav-dropdown/index.d.ts +3 -0
  91. package/react/mainnav-item/index.d.ts +3 -0
  92. package/react/masthead/index.d.ts +3 -0
  93. package/react/modal/index.d.ts +3 -0
  94. package/react/package.json +10 -0
  95. package/react/quantity-toggle/index.d.ts +3 -0
  96. package/react/radio/index.d.ts +3 -0
  97. package/react/radio-group/index.d.ts +3 -0
  98. package/react/sidenav/index.d.ts +3 -0
  99. package/react/sidenav-item/index.d.ts +5 -0
  100. package/react/sidenav-link/index.d.ts +3 -0
  101. package/react/stepper/index.d.ts +3 -0
  102. package/react/tab/index.d.ts +3 -0
  103. package/react/tab-group/index.d.ts +3 -0
  104. package/react/tab-panel/index.d.ts +3 -0
  105. package/react/table/index.d.ts +3 -0
  106. package/react/textarea/index.d.ts +3 -0
  107. package/react/toast/index.d.ts +3 -0
  108. package/react/tooltip/index.d.ts +3 -0
  109. package/umd/index.js +11995 -0
  110. package/umd/index.js.map +1 -0
  111. package/{lib/utils → utils}/animate.d.ts +10 -10
  112. package/{lib/utils → utils}/animation-registry.d.ts +18 -18
  113. package/{lib/utils → utils}/breakpoints.d.ts +5 -5
  114. package/{lib/utils → utils}/defaultvalue.d.ts +2 -2
  115. package/{lib/utils → utils}/event.d.ts +2 -2
  116. package/{lib/utils → utils}/form.d.ts +38 -38
  117. package/{lib/utils → utils}/generateId.d.ts +1 -1
  118. package/{lib/utils → utils}/mergeDeep.d.ts +2 -2
  119. package/{lib/utils → utils}/modal.d.ts +12 -12
  120. package/{lib/utils → utils}/object.d.ts +2 -2
  121. package/{lib/utils → utils}/offset.d.ts +4 -4
  122. package/{lib/utils → utils}/scroll.d.ts +13 -13
  123. package/{lib/utils → utils}/slot.d.ts +22 -22
  124. package/{lib/utils → utils}/tabbable.d.ts +8 -8
  125. package/{lib/utils → utils}/watch.d.ts +14 -14
  126. package/.github/workflows/publish-latest.yml +0 -22
  127. package/.github/workflows/publish-pr.yml +0 -28
  128. package/.husky/commit-msg +0 -4
  129. package/.husky/prepare-commit-msg +0 -8
  130. package/.storybook/main.js +0 -16
  131. package/.storybook/preview-head.html +0 -11
  132. package/.storybook/preview.js +0 -9
  133. package/.vscode/settings.json +0 -7
  134. package/CONTRIBUTING.md +0 -56
  135. package/LICENSE +0 -20
  136. package/amplify.yml +0 -22
  137. package/commitlint.config.js +0 -1
  138. package/coverage/lcov-report/base.css +0 -224
  139. package/coverage/lcov-report/block-navigation.js +0 -87
  140. package/coverage/lcov-report/button-element.scss.html +0 -112
  141. package/coverage/lcov-report/button-element.ts.html +0 -145
  142. package/coverage/lcov-report/favicon.png +0 -0
  143. package/coverage/lcov-report/index.html +0 -116
  144. package/coverage/lcov-report/prettify.css +0 -1
  145. package/coverage/lcov-report/prettify.js +0 -2
  146. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  147. package/coverage/lcov-report/sorter.js +0 -196
  148. package/coverage/lcov.info +0 -32
  149. package/index.html +0 -430
  150. package/lib/Button/index.d.ts +0 -1
  151. package/lib/Button/index.js +0 -6634
  152. package/lib/Button/index.js.map +0 -1
  153. package/lib/Button/package.json +0 -7
  154. package/lib/Card/index.d.ts +0 -1
  155. package/lib/Card/index.js +0 -6150
  156. package/lib/Card/index.js.map +0 -1
  157. package/lib/Card/package.json +0 -7
  158. package/lib/Checkbox/index.d.ts +0 -1
  159. package/lib/Checkbox/index.js +0 -6366
  160. package/lib/Checkbox/index.js.map +0 -1
  161. package/lib/Checkbox/package.json +0 -7
  162. package/lib/Dropdown/index.d.ts +0 -3
  163. package/lib/Dropdown/index.js +0 -13502
  164. package/lib/Dropdown/index.js.map +0 -1
  165. package/lib/Dropdown/package.json +0 -7
  166. package/lib/Footer/index.d.ts +0 -2
  167. package/lib/Footer/index.js +0 -7168
  168. package/lib/Footer/index.js.map +0 -1
  169. package/lib/Footer/package.json +0 -7
  170. package/lib/Input/index.d.ts +0 -1
  171. package/lib/Input/index.js +0 -6656
  172. package/lib/Input/index.js.map +0 -1
  173. package/lib/Input/package.json +0 -7
  174. package/lib/Mainnav/index.d.ts +0 -4
  175. package/lib/Mainnav/index.js +0 -32546
  176. package/lib/Mainnav/index.js.map +0 -1
  177. package/lib/Mainnav/package.json +0 -7
  178. package/lib/Mainnav/sgds-mainnav-dropdown.d.ts +0 -5
  179. package/lib/Mainnav/sgds-mainnav-item.d.ts +0 -4
  180. package/lib/Masthead/index.d.ts +0 -1
  181. package/lib/Masthead/index.js +0 -7371
  182. package/lib/Masthead/index.js.map +0 -1
  183. package/lib/Masthead/package.json +0 -7
  184. package/lib/Modal/index.d.ts +0 -1
  185. package/lib/Modal/index.js +0 -6432
  186. package/lib/Modal/index.js.map +0 -1
  187. package/lib/Modal/package.json +0 -7
  188. package/lib/QuantityToggle/index.d.ts +0 -1
  189. package/lib/QuantityToggle/index.js +0 -7049
  190. package/lib/QuantityToggle/index.js.map +0 -1
  191. package/lib/QuantityToggle/package.json +0 -7
  192. package/lib/Radio/index.d.ts +0 -2
  193. package/lib/Radio/index.js +0 -12607
  194. package/lib/Radio/index.js.map +0 -1
  195. package/lib/Radio/package.json +0 -7
  196. package/lib/Sidenav/index.d.ts +0 -3
  197. package/lib/Sidenav/index.js +0 -18739
  198. package/lib/Sidenav/index.js.map +0 -1
  199. package/lib/Sidenav/package.json +0 -7
  200. package/lib/Sidenav/sgds-sidenav-link.d.ts +0 -4
  201. package/lib/Tab/index.d.ts +0 -3
  202. package/lib/Tab/index.js +0 -13557
  203. package/lib/Tab/index.js.map +0 -1
  204. package/lib/Tab/package.json +0 -7
  205. package/lib/Textarea/index.d.ts +0 -1
  206. package/lib/Textarea/index.js +0 -6696
  207. package/lib/Textarea/index.js.map +0 -1
  208. package/lib/Textarea/package.json +0 -7
  209. package/lib/index.d.ts +0 -16
  210. package/lib/index.js +0 -134580
  211. package/lib/index.js.map +0 -1
  212. package/lib/umd/index.js +0 -134587
  213. package/lib/umd/index.js.map +0 -1
  214. package/lib/utils/card-element.d.ts +0 -11
  215. package/mocks/dropdown.d.ts +0 -4
  216. package/mocks/dropdown.ts +0 -27
  217. package/mocks/link.d.ts +0 -3
  218. package/mocks/link.ts +0 -6
  219. package/rollup.config.js +0 -73
  220. package/rollup.test.config.js +0 -42
  221. package/scripts/buildUtils.js +0 -30
  222. package/scripts/frankBuild.js +0 -49
  223. package/src/Button/index.ts +0 -1
  224. package/src/Button/sgds-button.scss +0 -28
  225. package/src/Button/sgds-button.ts +0 -153
  226. package/src/Card/index.ts +0 -1
  227. package/src/Card/sgds-action-card.scss +0 -27
  228. package/src/Card/sgds-action-card.ts +0 -115
  229. package/src/Checkbox/index.ts +0 -1
  230. package/src/Checkbox/sgds-checkbox.scss +0 -4
  231. package/src/Checkbox/sgds-checkbox.ts +0 -149
  232. package/src/Dropdown/index.ts +0 -3
  233. package/src/Dropdown/sgds-dropdown-item.ts +0 -39
  234. package/src/Dropdown/sgds-dropdown.scss +0 -5
  235. package/src/Dropdown/sgds-dropdown.ts +0 -54
  236. package/src/Footer/index.ts +0 -3
  237. package/src/Footer/sgds-footer.scss +0 -5
  238. package/src/Footer/sgds-footer.ts +0 -121
  239. package/src/Input/index.ts +0 -1
  240. package/src/Input/sgds-input.scss +0 -20
  241. package/src/Input/sgds-input.ts +0 -178
  242. package/src/Mainnav/index.ts +0 -4
  243. package/src/Mainnav/sgds-mainnav-dropdown.scss +0 -13
  244. package/src/Mainnav/sgds-mainnav-dropdown.ts +0 -45
  245. package/src/Mainnav/sgds-mainnav-item.scss +0 -24
  246. package/src/Mainnav/sgds-mainnav-item.ts +0 -8
  247. package/src/Mainnav/sgds-mainnav.scss +0 -39
  248. package/src/Mainnav/sgds-mainnav.ts +0 -183
  249. package/src/Masthead/index.ts +0 -1
  250. package/src/Masthead/sgds-masthead.scss +0 -217
  251. package/src/Masthead/sgds-masthead.ts +0 -189
  252. package/src/Modal/index.ts +0 -1
  253. package/src/Modal/sgds-modal.scss +0 -128
  254. package/src/Modal/sgds-modal.ts +0 -309
  255. package/src/QuantityToggle/index.ts +0 -1
  256. package/src/QuantityToggle/sgds-quantitytoggle.scss +0 -10
  257. package/src/QuantityToggle/sgds-quantitytoggle.ts +0 -130
  258. package/src/Radio/index.ts +0 -2
  259. package/src/Radio/sgds-radio.scss +0 -5
  260. package/src/Radio/sgds-radio.ts +0 -120
  261. package/src/Radio/sgds-radiogroup.scss +0 -22
  262. package/src/Radio/sgds-radiogroup.ts +0 -221
  263. package/src/Sidenav/index.ts +0 -4
  264. package/src/Sidenav/sgds-sidenav-item.scss +0 -73
  265. package/src/Sidenav/sgds-sidenav-item.ts +0 -145
  266. package/src/Sidenav/sgds-sidenav-link.scss +0 -25
  267. package/src/Sidenav/sgds-sidenav-link.ts +0 -8
  268. package/src/Sidenav/sgds-sidenav.scss +0 -6
  269. package/src/Sidenav/sgds-sidenav.ts +0 -33
  270. package/src/Tab/index.ts +0 -3
  271. package/src/Tab/sgds-tab.scss +0 -84
  272. package/src/Tab/sgds-tab.ts +0 -87
  273. package/src/Tab/sgds-tabgroup.scss +0 -198
  274. package/src/Tab/sgds-tabgroup.ts +0 -295
  275. package/src/Tab/sgds-tabpanel.scss +0 -12
  276. package/src/Tab/sgds-tabpanel.ts +0 -55
  277. package/src/Textarea/index.ts +0 -1
  278. package/src/Textarea/sgds-textarea.scss +0 -23
  279. package/src/Textarea/sgds-textarea.ts +0 -201
  280. package/src/index.ts +0 -16
  281. package/src/utils/animate.ts +0 -69
  282. package/src/utils/animation-registry.ts +0 -71
  283. package/src/utils/base.scss +0 -14
  284. package/src/utils/breakpoints.ts +0 -5
  285. package/src/utils/card-element.ts +0 -42
  286. package/src/utils/components.style.scss +0 -531
  287. package/src/utils/defaultvalue.ts +0 -51
  288. package/src/utils/dropdown-element.ts +0 -244
  289. package/src/utils/event.ts +0 -13
  290. package/src/utils/form.ts +0 -183
  291. package/src/utils/generateId.ts +0 -4
  292. package/src/utils/link-element.ts +0 -34
  293. package/src/utils/mergeDeep.ts +0 -22
  294. package/src/utils/modal.ts +0 -64
  295. package/src/utils/object.ts +0 -2
  296. package/src/utils/offset.ts +0 -6
  297. package/src/utils/scroll.ts +0 -57
  298. package/src/utils/sgds-element.ts +0 -18
  299. package/src/utils/slot.ts +0 -102
  300. package/src/utils/tabbable.ts +0 -81
  301. package/src/utils/watch.ts +0 -62
  302. package/stories/ActionCard.stories.mdx +0 -199
  303. package/stories/Button.stories.mdx +0 -194
  304. package/stories/Checkbox.stories.mdx +0 -196
  305. package/stories/Dropdown.stories.mdx +0 -152
  306. package/stories/Footer.stories.mdx +0 -261
  307. package/stories/Input.stories.mdx +0 -236
  308. package/stories/MainNav.stories.mdx +0 -169
  309. package/stories/Masthead.stories.mdx +0 -112
  310. package/stories/Modal.stories.mdx +0 -103
  311. package/stories/QuantityToggle.stories.mdx +0 -97
  312. package/stories/Radio.stories.mdx +0 -262
  313. package/stories/Sample.stories.js +0 -29
  314. package/stories/Sample.stories.mdx +0 -33
  315. package/stories/SideNav.stories.mdx +0 -245
  316. package/stories/common.js +0 -185
  317. package/stories/textarea.stories.mdx +0 -253
  318. package/test/button.element.test.ts +0 -185
  319. package/test/checkbox.test.ts +0 -240
  320. package/test/dropdown.test.ts +0 -637
  321. package/test/footer.test.ts +0 -181
  322. package/test/generateId.test.ts +0 -18
  323. package/test/input.element.test.ts +0 -316
  324. package/test/link-element.test.ts +0 -38
  325. package/test/mainnav.test.ts +0 -313
  326. package/test/masthead.test.ts +0 -116
  327. package/test/modal.test.ts +0 -149
  328. package/test/quantitytoggle.test.ts +0 -76
  329. package/test/radio.test.ts +0 -310
  330. package/test/selectable-card.test.ts +0 -159
  331. package/test/sidenav.test.ts +0 -390
  332. package/test/tab.test.ts +0 -76
  333. package/test/textarea.test.ts +0 -126
  334. package/tsconfig.json +0 -26
  335. package/tsconfig.test.json +0 -24
  336. package/typings/scss.d.ts +0 -5
  337. package/web-dev-server.config.mjs +0 -7
  338. package/web-test-runner.config.mjs +0 -47
@@ -1,181 +0,0 @@
1
- import { SgdsFooter, ColumnLinks } from "../src/Footer";
2
- import "../src/Footer/sgds-footer";
3
- import { fixture, assert, expect } from "@open-wc/testing";
4
- import { html } from "lit";
5
-
6
- describe("button-element", () => {
7
- it("is defined", () => {
8
- const el = document.createElement("sgds-footer");
9
- assert.instanceOf(el, SgdsFooter);
10
- });
11
- it("renders with default values", async () => {
12
- const el = await fixture(html`<sgds-footer></sgds-footer>`);
13
- assert.shadowDom.equal(
14
- el,
15
- `
16
- <footer class="sgds footer">
17
- <section class="footer-top" part="footer-top">
18
- <div class="container-fluid">
19
- <div class="row footer-header">
20
- <div class="col col-lg-6 col-md-12">
21
- <div class="title"></div>
22
- <div class="description"></div>
23
- </div>
24
- </div>
25
- <div class="row footer-items">
26
- </div>
27
- <div class="row footer-contact-links">
28
- <div class="col">
29
- <div class="d-flex justify-content-lg-end">
30
- <ul>
31
- <li><a href="#">Contact</a></li>
32
- <li><a href="#">Feedback</a></li>
33
- <li>
34
- <a
35
- href="https://www.reach.gov.sg/"
36
- target="_blank"
37
- rel="noopener noreferrer"
38
- >Reach.gov.sg</a
39
- >
40
- </li>
41
- </ul>
42
- </div>
43
- </div>
44
- </div>
45
- </div>
46
- </section>
47
- <section class="footer-bottom" part="footer-bottom">
48
- <div class="container-fluid">
49
- <div class="row footer-mandatory-links">
50
- <div class="col">
51
- <ul>
52
- <li>
53
- <a
54
- href="#"
55
- target="_blank"
56
- rel="noopener noreferrer"
57
- >Report Vulnerability</a
58
- >
59
- </li>
60
- <li><a href="#">Privacy Statement</a></li>
61
- <li><a href="#">Terms of use</a></li>
62
- </ul>
63
- </div>
64
- </div>
65
- <div class="row footer-copyrights">
66
- <div class="col">
67
- <div class="d-flex justify-content-lg-end text-end">
68
- © ${new Date().getFullYear()} Government of Singapore<br />
69
- Last Updated
70
- </div>
71
- </div>
72
- </div>
73
- </div>
74
- </section>
75
- </footer>
76
- `
77
- );
78
- });
79
-
80
- it("description prop forward to .description class", async () => {
81
- const el = await fixture(
82
- html`<sgds-footer description="test description"></sgds-footer>`
83
- );
84
- expect(el.shadowRoot?.querySelector(".description")?.textContent).to.equal(
85
- "test description"
86
- );
87
- });
88
-
89
- it("title prop forward to approriate .title class", async () => {
90
- const el = await fixture(
91
- html`<sgds-footer title="test title"></sgds-footer>`
92
- );
93
- expect(el.shadowRoot?.querySelector(".title")?.textContent).to.equal(
94
- "test title"
95
- );
96
- });
97
- it("lastUpdatedDate prop forward to approriate div el", async () => {
98
- const el = await fixture(
99
- html`<sgds-footer lastUpdatedDate="08 Feb 2022"></sgds-footer>`
100
- );
101
- expect(
102
- el.shadowRoot?.querySelector(".footer-copyrights>div.col>div")
103
- ?.textContent
104
- ).to.contain("08 Feb 2022");
105
- });
106
-
107
- it("contactHref prop forward to contact's href attr", async () => {
108
- const el = await fixture(
109
- html`<sgds-footer contactHref="test"></sgds-footer>`
110
- );
111
- expect(
112
- el.shadowRoot?.querySelector("a[href='test']")?.textContent
113
- ).to.contain("Contact");
114
- });
115
-
116
- it("feedbackHref prop forward to feedback's href attr", async () => {
117
- const el = await fixture(
118
- html`<sgds-footer feedbackHref="test"></sgds-footer>`
119
- );
120
- expect(
121
- el.shadowRoot?.querySelector("a[href='test']")?.textContent
122
- ).to.contain("Feedback");
123
- });
124
- it("vulnerabilityHref prop forward to Report Vulnerability's href attr", async () => {
125
- const el = await fixture(
126
- html`<sgds-footer vulnerabilityHref="test"></sgds-footer>`
127
- );
128
- expect(
129
- el.shadowRoot?.querySelector("a[href='test']")?.textContent
130
- ).to.contain("Report Vulnerability");
131
- });
132
- it("privacyHref prop forward to Privacy Statement's href attr", async () => {
133
- const el = await fixture(
134
- html`<sgds-footer privacyHref="test"></sgds-footer>`
135
- );
136
- expect(
137
- el.shadowRoot?.querySelector("a[href='test']")?.textContent
138
- ).to.contain("Privacy Statement");
139
- });
140
- it("termsOfUseHref prop forward to Terms of use's href attr", async () => {
141
- const el = await fixture(
142
- html`<sgds-footer termsOfUseHref="test"></sgds-footer>`
143
- );
144
- expect(
145
- el.shadowRoot?.querySelector("a[href='test']")?.textContent
146
- ).to.contain("Terms of use");
147
- });
148
-
149
-
150
- it("links prop accepts an array", async () => {
151
- const linkArray: ColumnLinks[] = [
152
- {
153
- title: "test-1",
154
- links: [
155
- { href: "test-href-1", label: "test-label-1" },
156
- { href: "test-href-2", label: "test-label-2" },
157
- ],
158
- },
159
- {
160
- title: "test-2",
161
- links: [
162
- { href: "test-href-1", label: "test-label-1" },
163
- { href: "test-href-2", label: "test-label-2" },
164
- ],
165
- },
166
- ];
167
- const el = await fixture(
168
- html`<sgds-footer .links=${linkArray}></sgds-footer>`
169
- );
170
-
171
- expect(el.shadowRoot?.querySelectorAll('.footer-items>div').length).to.equal(2)
172
- expect(el.shadowRoot?.querySelectorAll('.footer-items>div')[0].textContent).to.contain('test-1')
173
- expect(el.shadowRoot?.querySelectorAll('.footer-items>div')[1].textContent).to.contain('test-2')
174
- expect(el.shadowRoot?.querySelectorAll('ul.links>li>a').length).to.equal(4)
175
- expect(el.shadowRoot?.querySelectorAll('li>a[href="test-href-1"]').length).to.equal(2)
176
- expect(el.shadowRoot?.querySelectorAll('li>a[href="test-href-1"]')[0].textContent).to.equal('test-label-1')
177
- expect(el.shadowRoot?.querySelectorAll('li>a[href="test-href-2"]').length).to.equal(2)
178
- expect(el.shadowRoot?.querySelectorAll('li>a[href="test-href-2"]')[0].textContent).to.equal('test-label-2')
179
-
180
- });
181
- });
@@ -1,18 +0,0 @@
1
- import generateId from "../src/utils/generateId";
2
- import { expect } from "@open-wc/testing";
3
- import sinon from "sinon";
4
-
5
- describe("generateId function", () => {
6
- sinon.stub(Math, "random").returns(1234567);
7
-
8
- it("returns a string", () => {
9
- expect(typeof generateId()).to.equal("string");
10
- });
11
- it("returns an id with the correct structure", () => {
12
- expect(generateId()).to.equal("id-3456-sgds--");
13
- });
14
-
15
- it("when suffix specified , should return with suffix", () => {
16
- expect(generateId("test", 'test')).to.equal("id-3456-sgds-test-test");
17
- });
18
- });
@@ -1,316 +0,0 @@
1
- import { SgdsInput } from "../src/Input/sgds-input";
2
- import type SgdsButton from "../src/Button/sgds-button";
3
- import "../src/Input";
4
- import "../src/Button";
5
- import {
6
- expect,
7
- fixture,
8
- html,
9
- oneEvent,
10
- waitUntil,
11
- assert,
12
- elementUpdated,
13
- } from "@open-wc/testing";
14
- import sinon from "sinon";
15
- import { sendKeys } from "@web/test-runner-commands";
16
-
17
- describe("sgds-input", () => {
18
- it("is defined", () => {
19
- const el = document.createElement("sgds-input");
20
- assert.instanceOf(el, SgdsInput);
21
- });
22
- it("renders with default values", async () => {
23
- const el = await fixture(
24
- html`<sgds-input inputId="test-id" label="label"></sgds-input>`
25
- );
26
- assert.shadowDom.equal(
27
- el,
28
- `
29
- <label class="form-label" for="test-id">label</label>
30
- <input type="text" class="form-control " id="test-id" placeholder="Placeholder" aria-invalid="false">
31
- <div class="invalid-feedback" id="test-id-invalid">default feedback</div>
32
- `
33
- );
34
- });
35
-
36
- it("should be disabled with the disabled attribute", async () => {
37
- const el = await fixture<SgdsInput>(
38
- html` <sgds-input disabled></sgds-input> `
39
- );
40
- const input = el.shadowRoot!.querySelector<HTMLInputElement>("input")!;
41
-
42
- expect(input.disabled).to.be.true;
43
- });
44
-
45
- // Labels
46
- it("should replace label value the if updated", async () => {
47
- const el = await fixture(html`<sgds-input></sgds-input>`);
48
- el.setAttribute("label", "Enter your name");
49
- await elementUpdated(el);
50
- const labelText = el.shadowRoot?.querySelector(".form-label");
51
- expect(labelText?.textContent).to.contain("Enter your name");
52
- });
53
-
54
- // Hint Text
55
- it("should render hint text element if hintText attribute is defined", async () => {
56
- const el = await fixture(html`<sgds-input hintText="hint"></sgds-input>`);
57
- const hintText = el.shadowRoot?.querySelector(".form-text");
58
- el.setAttribute("hintText", "hint");
59
- await elementUpdated(el);
60
- expect(hintText?.textContent).to.equal("hint");
61
- expect(hintText).to.exist;
62
- });
63
-
64
- // Icon
65
- it("should render with fom-control-group if iconName attribute is defined", async () => {
66
- const el = await fixture(
67
- html`<sgds-input iconName="search" inputId="defaultID"></sgds-input>`
68
- );
69
- assert.shadowDom.equal(
70
- el,
71
- `
72
- <div class="sgds form-control-group">
73
- <span class="form-control-icon">
74
- <sl-icon name="search"></sl-icon>
75
- </span>
76
- <input type="text" class="form-control " id="defaultID" placeholder="Placeholder" aria-invalid="false">
77
- <div class="invalid-feedback" id="defaultID-invalid">default feedback</div>
78
- </div>
79
- `
80
- );
81
- });
82
-
83
- it("updates the iconName attribute value to 'stack'", async () => {
84
- const el = await fixture(html`<sgds-input iconName="search"></sgds-input>`);
85
- const iconElement = el.shadowRoot?.querySelector("sl-icon");
86
- iconElement?.setAttribute("name", "stack");
87
- await elementUpdated(el);
88
- expect(iconElement?.getAttribute("name")).to.equal("stack");
89
- });
90
-
91
- //Name
92
- it("updates the name attribute value to 'Hello'", async () => {
93
- const el = await fixture(html`<sgds-input></sgds-input>`);
94
- el?.setAttribute("name", "Hello");
95
- await elementUpdated(el);
96
- const name = el.shadowRoot?.querySelector(".form-control");
97
- expect(name?.getAttribute("name")).to.equal("Hello");
98
- });
99
-
100
- //Placeholder
101
- it("updates the default placeholder value to 'Hello'", async () => {
102
- const el = await fixture(html`<sgds-input></sgds-input>`);
103
- el?.setAttribute("placeholder", "Hello");
104
- await elementUpdated(el);
105
- const placeHolder = el.shadowRoot?.querySelector(".form-control");
106
- expect(placeHolder?.getAttribute("placeholder")).to.equal("Hello");
107
- });
108
-
109
- it("should focus the input when clicking on the label", async () => {
110
- const el = await fixture<SgdsInput>(
111
- html` <sgds-input label="Name"></sgds-input> `
112
- );
113
- const label = el.shadowRoot?.querySelector("label")!;
114
- const submitHandler = sinon.spy();
115
-
116
- el.addEventListener("sgds-focus", submitHandler);
117
- (label as HTMLElement).click();
118
- await waitUntil(() => submitHandler.calledOnce);
119
-
120
- expect(submitHandler).to.have.been.calledOnce;
121
- });
122
- });
123
- describe("when using constraint validation", () => {
124
- it("by default, invalid and valid should be false", async () => {
125
- const el = await fixture<SgdsInput>(html` <sgds-input></sgds-input> `);
126
- expect(el.invalid).to.be.false;
127
- expect(el.valid).to.be.false;
128
- expect(el.reportValidity()).to.be.true;
129
- });
130
- it("when required, validation occurs upon typing ", async () => {
131
- const el = await fixture<SgdsInput>(
132
- html` <sgds-input required></sgds-input> `
133
- );
134
- expect(el.invalid).to.be.false;
135
- expect(el.valid).to.be.false;
136
-
137
- el.focus()
138
- await sendKeys({ type: "s" });
139
- await el.updateComplete;
140
-
141
- expect(el.value).to.equal('s')
142
- expect(el.invalid).to.be.false;
143
- expect(el.valid).to.be.true;
144
- expect(el.reportValidity()).to.be.true;
145
-
146
- await sendKeys({press: 'Backspace'})
147
- await el.updateComplete;
148
- expect(el.value).to.equal('')
149
-
150
- expect(el.invalid).to.be.true;
151
- expect(el.valid).to.be.false;
152
- expect(el.reportValidity()).to.be.false;
153
- });
154
-
155
- it('should be invalid when the pattern does not match', async () => {
156
- const el = await fixture<SgdsInput>(html` <sgds-input pattern="failtest" value="fail"></sgds-input> `);
157
- expect(el.invalid).to.be.false;
158
- expect(el.valid).to.be.false;
159
- expect(el.reportValidity()).to.be.false;
160
-
161
- await sendKeys({type: 'tes'})
162
- await el.updateComplete
163
- expect(el.value).to.equal('failtes')
164
- expect(el.invalid).to.be.true;
165
- expect(el.valid).to.be.false;
166
- expect(el.reportValidity()).to.be.false;
167
-
168
- await sendKeys({type: 't'})
169
- await el.updateComplete
170
- expect(el.value).to.equal('failtest')
171
- expect(el.invalid).to.be.false;
172
- expect(el.valid).to.be.true;
173
- expect(el.reportValidity()).to.be.true;
174
-
175
- await sendKeys({press: 'Backspace'})
176
- await el.updateComplete
177
- expect(el.value).to.equal('failtes')
178
- expect(el.invalid).to.be.true;
179
- expect(el.valid).to.be.false;
180
- expect(el.reportValidity()).to.be.false;
181
-
182
- });
183
-
184
- it("should be invalid when required and disabled is removed", async () => {
185
- const el = await fixture<SgdsInput>(
186
- html` <sgds-input disabled required></sgds-input> `
187
- );
188
- el.disabled = false;
189
- await el.updateComplete;
190
- expect(el.invalid).to.be.true;
191
- });
192
- });
193
-
194
- describe("when calling HTMLFormElement.reportValidity()", () => {
195
- it("should be invalid when the input is empty and form.reportValidity() is called", async () => {
196
- const form = await fixture<HTMLFormElement>(html`
197
- <form>
198
- <sgds-input required value=""></sgds-input>
199
- </form>
200
- `);
201
-
202
- expect(form.reportValidity()).to.be.false;
203
- });
204
-
205
- it("should be valid when the input is empty, reportValidity() is called, and the form has novalidate", async () => {
206
- const form = await fixture<HTMLFormElement>(html`
207
- <form novalidate>
208
- <sgds-input required value=""></sgds-input>
209
- </form>
210
- `);
211
-
212
- expect(form.reportValidity()).to.be.true;
213
- });
214
-
215
- it("fires sgds-input event when value is entered", async () => {
216
- const el = await fixture<SgdsInput>(html` <sgds-input></sgds-input> `);
217
- const inputHandler = sinon.spy();
218
- el.focus();
219
- el.addEventListener("sgds-input", inputHandler);
220
- await sendKeys({ press: "A" });
221
- waitUntil(() => inputHandler.calledOnce);
222
- expect(inputHandler).to.have.been.calledOnce;
223
- });
224
- });
225
-
226
- describe("when submitting a form", () => {
227
- it("should submit the form when pressing enter in a form without a submit button", async () => {
228
- const form = await fixture<HTMLFormElement>(
229
- html` <form><sgds-input></sgds-input></form> `
230
- );
231
- const input = form.querySelector<SgdsInput>("sgds-input")!;
232
- const submitHandler = sinon.spy((event: SubmitEvent) =>
233
- event.preventDefault()
234
- );
235
-
236
- form.addEventListener("submit", submitHandler);
237
- input.focus();
238
- await sendKeys({ press: "Enter" });
239
- await waitUntil(() => submitHandler.calledOnce);
240
-
241
- expect(submitHandler).to.have.been.calledOnce;
242
- });
243
-
244
- it("should submit the form when pressing enter in a form with a submit button", async () => {
245
- const form = await fixture<HTMLFormElement>(html`
246
- <form>
247
- <sgds-input></sgds-input>
248
- <sgds-button type="submit"></sgds-button>
249
- </form>
250
- `);
251
- const input = form.querySelector<SgdsInput>("sgds-input")!;
252
- const submitButton = form.querySelector<SgdsButton>("sgds-button")!;
253
- const submitHandler = sinon.spy((event: SubmitEvent) =>
254
- event.preventDefault()
255
- );
256
-
257
- form.addEventListener("submit", submitHandler);
258
- submitButton.click();
259
- await waitUntil(() => submitHandler.calledOnce);
260
- expect(submitHandler).to.have.been.calledOnce;
261
- });
262
-
263
- it("should prevent submission when pressing enter in an input and canceling the keydown event", async () => {
264
- const form = await fixture<HTMLFormElement>(
265
- html` <form><sgds-input></sgds-input></form> `
266
- );
267
- const input = form.querySelector<SgdsInput>("sgds-input")!;
268
- const submitHandler = sinon.spy((event: SubmitEvent) =>
269
- event.preventDefault()
270
- );
271
- const keydownHandler = sinon.spy((event: KeyboardEvent) => {
272
- if (event.key === "Enter") {
273
- event.preventDefault();
274
- }
275
- });
276
-
277
- form.addEventListener("submit", submitHandler);
278
- input.addEventListener("keydown", keydownHandler);
279
- input.focus();
280
- await sendKeys({ press: "Enter" });
281
- await waitUntil(() => keydownHandler.calledOnce);
282
-
283
- expect(keydownHandler).to.have.been.calledOnce;
284
- expect(submitHandler).to.not.have.been.called;
285
- });
286
- });
287
-
288
- describe("when resetting a form", () => {
289
- it("should reset the element to its initial value", async () => {
290
- const form = await fixture<HTMLFormElement>(html`
291
- <form>
292
- <sgds-input name="a" value="test"></sgds-input>
293
- <sgds-button type="reset">Reset</sgds-button>
294
- </form>
295
- `);
296
- const button = form.querySelector<SgdsButton>("sgds-button")!;
297
- const input = form.querySelector<SgdsInput>("sgds-input")!;
298
- input.value = "1234";
299
-
300
- await input.updateComplete;
301
-
302
- setTimeout(() => button.click());
303
- await oneEvent(form, "reset");
304
- await input.updateComplete;
305
-
306
- expect(input.value).to.equal("test");
307
-
308
- input.defaultValue = "";
309
-
310
- setTimeout(() => button.click());
311
- await oneEvent(form, "reset");
312
- await input.updateComplete;
313
-
314
- expect(input.value).to.equal("");
315
- });
316
- });
@@ -1,38 +0,0 @@
1
- import "../mocks/link";
2
- import { MockLink } from "../mocks/link";
3
- import { fixture, assert, expect } from "@open-wc/testing";
4
- import { html } from "lit";
5
-
6
- describe("link-element", () => {
7
- it("renders with default values", async () => {
8
- const el = await fixture<MockLink>(html`<mock-link></mock-link>`);
9
- assert.shadowDom.equal(
10
- el,
11
- ` <li>
12
- <a
13
- aria-disabled="false"
14
- class="nav-link"
15
- href=""
16
- >
17
- <slot>
18
- </slot>
19
- </a>
20
- </li>
21
- `
22
- );
23
- });
24
- it("href prop is forwarded to a tag href attr", async () => {
25
- const el = await fixture(html`<mock-link href="#">test</mock-link>`);
26
- expect(el.shadowRoot?.querySelector("a")).to.have.attribute("href", "#");
27
- });
28
- it("active prop is forwarded to <a> class", async () => {
29
- const el = await fixture(html`<mock-link active>test</mock-link>`);
30
- expect(el.shadowRoot?.querySelector("a")).to.have.class("active");
31
- });
32
- it('disabled prop apply disable props and attr to anchor element', async() => {
33
- const el = await fixture(html`<mock-link disabled>test</mock-link>`);
34
- expect(el.shadowRoot?.querySelector("a")).to.have.class("disabled");
35
- expect(el.shadowRoot?.querySelector("a")).to.have.attribute("disabled");
36
- expect(el.shadowRoot?.querySelector("a")).to.have.attribute("aria-disabled", "true");
37
- })
38
- });