@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,310 +0,0 @@
1
- import { SgdsRadio, SgdsRadioGroup } from "../src/Radio";
2
- import "../src/Radio";
3
- import "../src/Button";
4
- import {
5
- fixture,
6
- assert,
7
- expect,
8
- waitUntil,
9
- elementUpdated,
10
- aTimeout,
11
- fixtureCleanup,
12
- triggerFocusFor,
13
- } from "@open-wc/testing";
14
- import { html } from "lit";
15
- import sinon from "sinon";
16
- import { SgdsButton } from "../src/Button";
17
- import { sendKeys } from "@web/test-runner-commands";
18
-
19
- describe("<sgds-radio>", () => {
20
- afterEach(() => fixtureCleanup());
21
- it("is defined", () => {
22
- const el = document.createElement("sgds-radio");
23
- assert.instanceOf(el, SgdsRadio);
24
- });
25
-
26
- it("by default, tabindex='-1'", async () => {
27
- const el = await fixture(html`<sgds-radio></sgds-radio>`);
28
- expect(el).to.have.attribute("tabindex", "-1");
29
- });
30
-
31
- it("when isInline prop is passed, radio class should have class .form-check-inline", async () => {
32
- const el = await fixture(html`<sgds-radio isInline></sgds-radio>`);
33
- const radio = el.shadowRoot?.querySelector("div");
34
- expect(radio?.classList.value).to.contain("form-check-inline");
35
- });
36
-
37
- it("should be able to pass in value to attributes(id/for pair)", async () => {
38
- const el = await fixture(
39
- html`<sgds-radio radioId="radio-123"></sgds-radio>`
40
- );
41
- const input = el.shadowRoot?.querySelector("input");
42
- expect(input).to.have.attribute("id", "radio-123");
43
- const label = el.shadowRoot?.querySelector("label");
44
- expect(label).to.have.attribute("for", "radio-123");
45
- });
46
-
47
- it("should be disabled with the disabled attribute & aria-disabled to be true", async () => {
48
- const el = await fixture(html`<sgds-radio disabled></sgds-radio>`);
49
- const radio = el.shadowRoot?.querySelector("input");
50
- expect(radio?.disabled).to.be.true;
51
- expect(radio).to.have.attribute("aria-disabled", "true");
52
- });
53
-
54
- it("should render aria-label attribute value", async () => {
55
- const el = await fixture(html`<sgds-radio ariaLabel="label"></sgds-radio>`);
56
- const radio = el.shadowRoot?.querySelector("label");
57
- expect(radio).to.have.attribute("aria-label", "label");
58
- });
59
-
60
- it("should be able to pass in value to value attribute", async () => {
61
- const el = await fixture(html`<sgds-radio value="3"></sgds-radio>`);
62
- const radio = el.shadowRoot?.querySelector("input");
63
- expect(radio).to.have.attribute("value", "3");
64
- });
65
- });
66
-
67
- describe("<sgds-radiogroup>", () => {
68
- it("is defined", () => {
69
- const el = document.createElement("sgds-radiogroup");
70
- assert.instanceOf(el, SgdsRadioGroup);
71
- });
72
-
73
- it("should render the name attribute when passed", async () => {
74
- const el = await fixture(
75
- html`<sgds-radiogroup name="option"></sgds-radiogroup>`
76
- );
77
- const fieldset = el.shadowRoot?.querySelector("fieldset");
78
- expect(fieldset).to.have.attribute("name", "option");
79
- });
80
-
81
- it("radio2 should have aria-checked to be true when checked", async () => {
82
- const el = await fixture(
83
- html`<sgds-radiogroup name="option"
84
- ><sgds-radio id="radio1" value="1">one</sgds-radio
85
- ><sgds-radio id="radio2" value="2">two</sgds-radio></sgds-radiogroup
86
- >`
87
- );
88
- const radio1 = <SgdsRadio>el.querySelector("sgds-radio#radio1");
89
- const radio2 = <SgdsRadio>el.querySelector("sgds-radio#radio2");
90
- expect(radio1.checked).to.be.false;
91
- expect(radio2.checked).to.be.false;
92
- expect(radio1).to.have.attribute("aria-checked", "false");
93
- expect(radio2).to.have.attribute("aria-checked", "false");
94
-
95
- radio2.click();
96
- await Promise.all([radio1.updateComplete, radio2.updateComplete]);
97
-
98
- expect(radio1.checked).to.be.false;
99
- expect(radio2.checked).to.be.true;
100
- expect(radio2).to.have.attribute("aria-checked", "true");
101
- });
102
-
103
- it("radiogroup should emit sgds-change event when one of the radio is clicked", async () => {
104
- const el = await fixture(
105
- html`<sgds-radiogroup name="option">
106
- <sgds-radio id="radio2" value="2">two</sgds-radio></sgds-radiogroup
107
- >`
108
- );
109
- const toggleHandler = sinon.spy();
110
- el.addEventListener("sgds-change", toggleHandler);
111
- const radio2 = <SgdsRadio>el.querySelector("sgds-radio#radio2");
112
- radio2.click();
113
- await Promise.all([elementUpdated(el)]);
114
- expect(toggleHandler).to.have.been.calledOnce;
115
- });
116
-
117
- it("radiogroup should update and reflect the value for the checked radio", async () => {
118
- const el = await fixture<SgdsRadioGroup>(
119
- html`<sgds-radiogroup id="radiogroup">
120
- <sgds-radio id="radio2" value="2">two</sgds-radio>
121
- </sgds-radiogroup>`
122
- );
123
-
124
- expect(el).to.have.attribute("value", undefined);
125
-
126
- const radio = el.querySelector("sgds-radio");
127
- radio?.click();
128
- await el.updateComplete;
129
- expect(el).to.have.attribute("value", "2");
130
- });
131
-
132
- it("should be invalid state on form submission with required passed in", async () => {
133
- const el = await fixture<HTMLFormElement>(
134
- html`<form>
135
- <sgds-radiogroup id="radiogroup" required>
136
- <sgds-radio id="radio2" value="2">two</sgds-radio>
137
- </sgds-radiogroup>
138
- <sgds-button type="submit">Submit</sgds-button>
139
- </form>`
140
- );
141
-
142
- const button = <SgdsButton>el.querySelector("sgds-button");
143
- button?.click();
144
- await el.updateComplete;
145
- expect(el.reportValidity()).to.be.false;
146
- const radioGroup = <SgdsRadioGroup>el.querySelector("sgds-radiogroup");
147
- expect(radioGroup.invalid).to.be.true;
148
- });
149
-
150
- it("upon validation, it should have invalid feedback with text 'default feedback' by default, and also able to render other text when specified", async () => {
151
- const el = await fixture<SgdsRadioGroup>(
152
- html`
153
- <sgds-radiogroup id="radiogroup" required>
154
- <sgds-radio id="radio2" value="2">two</sgds-radio>
155
- </sgds-radiogroup>
156
- `
157
- );
158
- const invalidFeedback = el.shadowRoot?.querySelector(
159
- "div.invalid-feedback"
160
- );
161
- expect(invalidFeedback?.textContent).to.contain("default feedback");
162
- el.setAttribute("invalidFeedback", "Fill up this field.");
163
- await elementUpdated(el);
164
- expect(invalidFeedback?.textContent).to.contain("Fill up this field.");
165
- });
166
-
167
- it("by default, first radio is tabindex 0", async () => {
168
- const el = await fixture<SgdsRadioGroup>(html`<sgds-radiogroup>
169
- <sgds-radio value="1">one</sgds-radio>
170
- <sgds-radio value="2">two</sgds-radio>
171
- <sgds-radio value="3">three</sgds-radio>
172
- </sgds-radiogroup>`);
173
-
174
- expect(el.querySelectorAll("sgds-radio")[0]).to.have.attribute(
175
- "tabindex",
176
- "0"
177
- );
178
- expect(el.querySelectorAll("sgds-radio")[1]).to.have.attribute(
179
- "tabindex",
180
- "-1"
181
- );
182
- expect(el.querySelectorAll("sgds-radio")[2]).to.have.attribute(
183
- "tabindex",
184
- "-1"
185
- );
186
- });
187
-
188
- it("should toggle tabindex 0 for checked radio & tabindex -1 when unchecked upon clicking", async () => {
189
- const el = await fixture<SgdsRadioGroup>(html`<sgds-radiogroup>
190
- <sgds-radio value="1">one</sgds-radio>
191
- <sgds-radio value="2">two</sgds-radio>
192
- <sgds-radio value="3">three</sgds-radio>
193
- </sgds-radiogroup>`);
194
-
195
- const radio1 = el.querySelectorAll("sgds-radio")[0];
196
- const radio2 = el.querySelectorAll("sgds-radio")[1];
197
- const radio3 = el.querySelectorAll("sgds-radio")[2];
198
-
199
- radio1.click();
200
- await el.updateComplete;
201
-
202
- expect(radio1).to.have.attribute("tabindex", "0");
203
- expect(radio2).to.have.attribute("tabindex", "-1");
204
- expect(radio3).to.have.attribute("tabindex", "-1");
205
-
206
- radio2.click();
207
- await el.updateComplete;
208
-
209
- expect(radio1).to.have.attribute("tabindex", "-1");
210
- expect(radio2).to.have.attribute("tabindex", "0");
211
- expect(radio3).to.have.attribute("tabindex", "-1");
212
- });
213
-
214
- it("clicking label should focus on first radio when radios unchecked", async () => {
215
- const el = await fixture<SgdsRadioGroup>(html`<sgds-radiogroup
216
- label="Hello world"
217
- >
218
- <sgds-radio value="1">one</sgds-radio>
219
- <sgds-radio value="2">two</sgds-radio>
220
- <sgds-radio value="3">three</sgds-radio>
221
- </sgds-radiogroup>`);
222
-
223
- const radio1 = el.querySelectorAll("sgds-radio")[0];
224
-
225
- const label = <HTMLLabelElement>(
226
- el.shadowRoot?.querySelector("label.form-label")
227
- );
228
- label.click();
229
-
230
- await triggerFocusFor(radio1);
231
- expect(document.activeElement === radio1).to.be.true;
232
- });
233
-
234
- it("when a radio is checked, clicking label should focus on the checked radio", async () => {
235
- const el = await fixture<SgdsRadioGroup>(html`<sgds-radiogroup
236
- label="Hello world"
237
- >
238
- <sgds-radio value="1">one</sgds-radio>
239
- <sgds-radio value="2">two</sgds-radio>
240
- <sgds-radio value="3">three</sgds-radio>
241
- </sgds-radiogroup>`);
242
-
243
- const radio2 = el.querySelectorAll("sgds-radio")[1];
244
-
245
- radio2.click();
246
- await el.updateComplete;
247
-
248
- const label = <HTMLLabelElement>(
249
- el.shadowRoot?.querySelector("label.form-label")
250
- );
251
- label.click();
252
-
253
- await triggerFocusFor(radio2);
254
- expect(document.activeElement === radio2).to.be.true;
255
- });
256
-
257
- it("should allow for the following keyboard interactions upon keydown", async () => {
258
- const el = await fixture<SgdsRadioGroup>(html`<sgds-radiogroup
259
- label="Hello world"
260
- >
261
- <sgds-radio value="1">one</sgds-radio>
262
- <sgds-radio value="2">two</sgds-radio>
263
- <sgds-radio value="3">three</sgds-radio>
264
- </sgds-radiogroup>`);
265
-
266
- const radio1 = el.querySelectorAll("sgds-radio")[0];
267
- const radio2 = el.querySelectorAll("sgds-radio")[1];
268
- const radio3 = el.querySelectorAll("sgds-radio")[2];
269
-
270
- const label = <HTMLLabelElement>(
271
- el.shadowRoot?.querySelector("label.form-label")
272
- );
273
- label.click();
274
-
275
- await triggerFocusFor(radio1);
276
- expect(document.activeElement === radio1).to.be.true;
277
-
278
- // spacebar key
279
- await sendKeys({ press: " " });
280
- expect(radio1).to.have.attribute("tabindex", "0");
281
- expect(radio1).to.have.attribute("aria-checked", "true");
282
- expect(el).to.have.attribute("value", "1");
283
-
284
- // arrowright incr index
285
- await sendKeys({ press: "ArrowRight" });
286
- expect(radio2).to.have.attribute("tabindex", "0");
287
- expect(radio2).to.have.attribute("aria-checked", "true");
288
- expect(el).to.have.attribute("value", "2");
289
-
290
- // arrowdown incr index
291
- await sendKeys({ press: "ArrowDown" });
292
- expect(radio3).to.have.attribute("tabindex", "0");
293
- expect(radio3).to.have.attribute("aria-checked", "true");
294
- expect(el).to.have.attribute("value", "3");
295
-
296
- // arrowleft decr index
297
- await sendKeys({ press: "ArrowLeft" });
298
- expect(radio2).to.have.attribute("tabindex", "0");
299
- expect(radio2).to.have.attribute("aria-checked", "true");
300
- expect(el).to.have.attribute("value", "2");
301
-
302
- // arrowup decr index
303
- await sendKeys({ press: "ArrowLeft" });
304
- expect(radio1).to.have.attribute("tabindex", "0");
305
- expect(radio1).to.have.attribute("aria-checked", "true");
306
- expect(el).to.have.attribute("value", "1");
307
- });
308
- });
309
-
310
- // Keyboard interactions (arrowdown, arrowup) --> to keep check on the handleKeyDown() you wrote --> and that it updates the sgds-radio-group
@@ -1,159 +0,0 @@
1
- import {
2
- aTimeout,
3
- expect,
4
- fixture,
5
- html,
6
- oneEvent,
7
- assert,
8
- waitUntil,
9
- elementUpdated,
10
- } from "@open-wc/testing";
11
- import sinon from "sinon";
12
- import "../src/Card";
13
- import { SgdsActionCard } from "../src/Card";
14
- import "../src/Checkbox";
15
- import "../src/Radio";
16
- import { SgdsCheckbox } from "../src/Checkbox";
17
- import { SgdsButton } from "../src/Button";
18
- import { sendKeys } from "@web/test-runner-commands";
19
- import { CardElement } from "../src/utils/card-element";
20
- import { Button } from "bootstrap";
21
-
22
- describe("<sgds-action-card>", () => {
23
- // Card test cases
24
- it("is defined", () => {
25
- const el = document.createElement("sgds-action-card");
26
- assert.instanceOf(el, SgdsActionCard);
27
- });
28
-
29
- it("should have sgds prefix on wrapper", async () => {
30
- const el = await fixture(html`<sgds-action-card></sgds-action-card>`);
31
- const slCard = el.shadowRoot?.querySelector("div");
32
- expect(slCard?.classList.value).to.contain("sgds");
33
- });
34
-
35
- it("accepts a bg prop", async () => {
36
- const el = await fixture(html`<sgds-action-card></sgds-action-card>`);
37
- el?.setAttribute("bgColor", "primary");
38
- await elementUpdated(el);
39
- const bgColor = el.shadowRoot?.querySelector("div");
40
- expect(bgColor?.classList.value).to.contain("bg-primary");
41
- });
42
-
43
- it("accepts a text prop", async () => {
44
- const el = await fixture(html`<sgds-action-card></sgds-action-card>`);
45
- el?.setAttribute("borderColor", "primary");
46
- await elementUpdated(el);
47
- const borderColor = el.shadowRoot?.querySelector("div");
48
- expect(borderColor?.classList.value).to.contain("border-primary");
49
- });
50
-
51
- it("accepts a border prop", async () => {
52
- const el = await fixture(html`<sgds-action-card></sgds-action-card>`);
53
- el?.setAttribute("textColor", "primary");
54
- await elementUpdated(el);
55
- const bgColor = el.shadowRoot?.querySelector("div");
56
- expect(bgColor?.classList.value).to.contain("text-primary");
57
- });
58
-
59
- it("can be semantically compare with shadowDom trees", async () => {
60
- const el = await fixture(
61
- html`<sgds-action-card inputId="checkbox"></sgds-action-card>`
62
- );
63
- assert.shadowDom.equal(
64
- el,
65
- `
66
- <div tabindex="0" variant="card-action" class="sgds card
67
-
68
- ">
69
- <div class="card-body">
70
- <h6 class="text-muted card-subtitle">
71
- <div>
72
-
73
- <slot name="card-subtitle"></slot>
74
- </div>
75
- <div class="card-input">
76
- <sgds-checkbox checkboxid="checkbox" arialabel="checkbox"></sgds-checkbox>
77
- </div>
78
- </h6>
79
- <h5 class="card-title"><slot name="card-title"></slot></h5>
80
- <p class="card-text"><slot name="card-text"></slot></p>
81
- </div>
82
- </div>
83
- `
84
- );
85
- });
86
-
87
- it("it should have type checkbox and variant card-action by default", async () => {
88
- const el = await fixture(html`<sgds-action-card></sgds-action-card>`);
89
- expect(el?.getAttribute("type")).to.equal("checkbox");
90
- expect(el?.getAttribute("variant")).to.equal("card-action");
91
- });
92
-
93
- it("it should have type radio when specified", async () => {
94
- const el = await fixture(
95
- html`<sgds-action-card type="radio"></sgds-action-card>`
96
- );
97
- expect(el?.getAttribute("type")).to.equal("radio");
98
- });
99
-
100
- it("when card is clicked, card should contain class is-active", async () => {
101
- const el = await fixture<SgdsActionCard>(
102
- html`<sgds-action-card></sgds-action-card>`
103
- );
104
-
105
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.not.have.class(
106
- "is-active"
107
- );
108
- const cardBody = el.shadowRoot?.querySelector(
109
- "div.card-body"
110
- ) as HTMLInputElement;
111
- cardBody.click();
112
- await el.updateComplete;
113
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.have.class(
114
- "is-active"
115
- );
116
- });
117
-
118
- it("when card is disabled, card should be clickable and does not contain class is-active", async () => {
119
- const el = await fixture<SgdsActionCard>(
120
- html`<sgds-action-card disabled></sgds-action-card>`
121
- );
122
-
123
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.not.have.class(
124
- "is-active"
125
- );
126
- const cardBody = el.shadowRoot?.querySelector(
127
- "div.card-body"
128
- ) as HTMLInputElement;
129
- cardBody.click();
130
- await el.updateComplete;
131
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.not.have.class(
132
- "is-active"
133
- );
134
- });
135
-
136
- it("when card is focus, card should be able to be checked with key Enter and contains class is-active", async () => {
137
- const el = await fixture<SgdsActionCard>(
138
- html`<sgds-action-card></sgds-action-card>`
139
- );
140
-
141
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.not.have.class(
142
- "is-active"
143
- );
144
- // const cardBody = el.shadowRoot?.querySelector(
145
- // "div.card-body"
146
- // ) as HTMLInputElement;
147
- const card = el.shadowRoot?.querySelector(
148
- "div.sgds.card"
149
- ) as HTMLInputElement;
150
- card.focus();
151
- await sendKeys({ press: "Enter" });
152
- await el.updateComplete;
153
- expect(el.shadowRoot?.querySelector("div.sgds.card")).to.have.class(
154
- "is-active"
155
- );
156
- });
157
- });
158
-
159
-