@uh-design-system/component-library 0.5.2 → 0.6.0

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 (243) hide show
  1. package/dist/cjs/{utils-3412cbed.js → attributes-BMbXzbwU.js} +2 -28
  2. package/dist/cjs/component-library.cjs.js +7 -7
  3. package/dist/cjs/controlUtils-ofqiQxRF.js +42 -0
  4. package/dist/cjs/ds-accordion.cjs.entry.js +79 -0
  5. package/dist/cjs/ds-button.cjs.entry.js +107 -0
  6. package/dist/cjs/ds-card.cjs.entry.js +58 -0
  7. package/dist/cjs/ds-checkbox-group.cjs.entry.js +109 -49
  8. package/dist/cjs/ds-checkbox.cjs.entry.js +88 -79
  9. package/dist/cjs/ds-icon.cjs.entry.js +943 -0
  10. package/dist/cjs/ds-input-validity.cjs.entry.js +14 -15
  11. package/dist/cjs/ds-link-with-arrow.cjs.entry.js +21 -20
  12. package/dist/cjs/ds-link.cjs.entry.js +34 -31
  13. package/dist/cjs/ds-radio-button-group.cjs.entry.js +153 -0
  14. package/dist/cjs/ds-radio-button.cjs.entry.js +151 -0
  15. package/dist/cjs/ds-spinner.cjs.entry.js +62 -0
  16. package/dist/cjs/ds-text-input.cjs.entry.js +90 -77
  17. package/dist/cjs/ds-visually-hidden.cjs.entry.js +3 -6
  18. package/dist/cjs/index-Bp6Dd2i1.js +94 -0
  19. package/dist/cjs/{store-9bd20f3c.js → index-DwLFyR5p.js} +6 -2
  20. package/dist/cjs/{index-bf84b124.js → index-Mjp9Y-Sw.js} +701 -55
  21. package/dist/cjs/index.cjs.js +3 -5
  22. package/dist/cjs/{linkUtils-695da37c.js → linkUtils-onlbgKdI.js} +4 -2
  23. package/dist/cjs/loader.cjs.js +3 -5
  24. package/dist/cjs/utils-BjZTECpy.js +29 -0
  25. package/dist/collection/accessibility/stories/naming.stories.js +3 -3
  26. package/dist/collection/collection-manifest.json +78 -3
  27. package/dist/collection/components/01-base-components/ds-accordion/ds-accordion.css +18 -17
  28. package/dist/collection/components/01-base-components/ds-accordion/ds-accordion.js +91 -50
  29. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.examples.stories.js +6 -6
  30. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.features.stories.js +14 -14
  31. package/dist/collection/components/01-base-components/ds-accordion/stories/ds-accordion.stories.js +24 -66
  32. package/dist/collection/components/01-base-components/ds-button/ds-button.css +124 -145
  33. package/dist/collection/components/01-base-components/ds-button/ds-button.js +150 -65
  34. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.examples.stories.js +121 -23
  35. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.features.stories.js +49 -42
  36. package/dist/collection/components/01-base-components/ds-button/stories/ds-button.stories.js +16 -72
  37. package/dist/collection/components/01-base-components/ds-card/ds-card.css +127 -0
  38. package/dist/collection/components/01-base-components/ds-card/ds-card.js +303 -0
  39. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.examples.stories.js +92 -0
  40. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.features.stories.js +66 -0
  41. package/dist/collection/components/01-base-components/ds-card/stories/ds-card.stories.js +71 -0
  42. package/dist/collection/components/01-base-components/ds-checkbox/ds-checkbox.css +46 -46
  43. package/dist/collection/components/01-base-components/ds-checkbox/ds-checkbox.js +120 -111
  44. package/dist/collection/components/01-base-components/ds-checkbox/stories/ds-checkbox.features.stories.js +20 -20
  45. package/dist/collection/components/01-base-components/ds-checkbox/stories/ds-checkbox.stories.js +12 -25
  46. package/dist/collection/components/01-base-components/ds-checkbox-group/ds-checkbox-group.css +2 -3
  47. package/dist/collection/components/01-base-components/ds-checkbox-group/ds-checkbox-group.js +214 -63
  48. package/dist/collection/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.features.stories.js +215 -50
  49. package/dist/collection/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.stories.js +30 -28
  50. package/dist/collection/components/01-base-components/ds-icon/ds-icon.js +36 -31
  51. package/dist/collection/components/01-base-components/ds-icon/stories/ds-icon.stories.js +10 -37
  52. package/dist/collection/components/01-base-components/ds-input-validity/ds-input-validity.css +2 -2
  53. package/dist/collection/components/01-base-components/ds-input-validity/ds-input-validity.js +60 -30
  54. package/dist/collection/components/01-base-components/ds-input-validity/stories/ds-input-validity.features.stories.js +4 -4
  55. package/dist/collection/components/01-base-components/ds-input-validity/stories/ds-input-validity.stories.js +4 -9
  56. package/dist/collection/components/01-base-components/ds-link/ds-link.css +24 -14
  57. package/dist/collection/components/01-base-components/ds-link/ds-link.js +74 -75
  58. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.examples.stories.js +27 -27
  59. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.features.stories.js +38 -21
  60. package/dist/collection/components/01-base-components/ds-link/stories/ds-link.stories.js +8 -67
  61. package/dist/collection/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.css +10 -12
  62. package/dist/collection/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.js +30 -52
  63. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.examples.stories.js +4 -4
  64. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.features.stories.js +6 -6
  65. package/dist/collection/components/01-base-components/ds-link-with-arrow/stories/ds-link-with-arrow.stories.js +4 -28
  66. package/dist/collection/components/01-base-components/ds-radio-button/ds-radio-button.css +115 -0
  67. package/dist/collection/components/01-base-components/ds-radio-button/ds-radio-button.js +449 -0
  68. package/dist/collection/components/01-base-components/ds-radio-button/stories/ds-radio-button.features.stories.js +72 -0
  69. package/dist/collection/components/01-base-components/ds-radio-button/stories/ds-radio-button.stories.js +22 -0
  70. package/dist/collection/components/01-base-components/ds-radio-button-group/ds-radio-button-group.css +30 -0
  71. package/dist/collection/components/01-base-components/ds-radio-button-group/ds-radio-button-group.js +360 -0
  72. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.examples.stories.js +42 -0
  73. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.features.stories.js +71 -0
  74. package/dist/collection/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.stories.js +60 -0
  75. package/dist/collection/components/01-base-components/ds-spinner/ds-spinner.css +279 -0
  76. package/dist/collection/components/01-base-components/ds-spinner/ds-spinner.js +221 -0
  77. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.examples.stories.js +120 -0
  78. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.features.stories.js +107 -0
  79. package/dist/collection/components/01-base-components/ds-spinner/stories/ds-spinner.stories.js +14 -0
  80. package/dist/collection/components/01-base-components/ds-text-input/ds-text-input.css +85 -118
  81. package/dist/collection/components/01-base-components/ds-text-input/ds-text-input.js +230 -155
  82. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.examples.stories.js +26 -21
  83. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.features.stories.js +40 -40
  84. package/dist/collection/components/01-base-components/ds-text-input/stories/ds-text-input.stories.js +30 -56
  85. package/dist/collection/components/01-base-components/ds-visually-hidden/ds-visually-hidden.js +1 -1
  86. package/dist/collection/store.js +7 -1
  87. package/dist/collection/utils/attributes/attributes.js +2 -2
  88. package/dist/collection/utils/button/buttonUtils.js +14 -0
  89. package/dist/collection/utils/colours/colourTypes.js +3 -3
  90. package/dist/collection/utils/colours/colourUtils.js +5 -3
  91. package/dist/collection/utils/controls/controlUtils.js +35 -1
  92. package/dist/collection/utils/link/linkUtils.js +3 -2
  93. package/dist/collection/utils/spinner/spinnerUtils.js +20 -0
  94. package/dist/collection/utils/tests/testUtils.js +1 -0
  95. package/dist/collection/utils/typography/typographyUtils.js +3 -3
  96. package/dist/collection/utils/utils.js +10 -9
  97. package/dist/component-library/{utils-cfc536bc.js → attributes-BD_lNRxn.js} +1 -1
  98. package/dist/component-library/component-library.css +1 -1
  99. package/dist/component-library/component-library.esm.js +1 -1
  100. package/dist/component-library/controlUtils-CNER0MvM.js +1 -0
  101. package/dist/component-library/ds-accordion.entry.js +1 -0
  102. package/dist/component-library/ds-button.entry.js +1 -0
  103. package/dist/component-library/ds-card.entry.js +1 -0
  104. package/dist/component-library/ds-checkbox-group.entry.js +1 -1
  105. package/dist/component-library/ds-checkbox.entry.js +1 -1
  106. package/dist/component-library/ds-icon.entry.js +1 -0
  107. package/dist/component-library/ds-input-validity.entry.js +1 -1
  108. package/dist/component-library/ds-link-with-arrow.entry.js +1 -1
  109. package/dist/component-library/ds-link.entry.js +1 -1
  110. package/dist/component-library/ds-radio-button-group.entry.js +1 -0
  111. package/dist/component-library/ds-radio-button.entry.js +1 -0
  112. package/dist/component-library/ds-spinner.entry.js +1 -0
  113. package/dist/component-library/ds-text-input.entry.js +1 -1
  114. package/dist/component-library/ds-visually-hidden.entry.js +1 -1
  115. package/dist/component-library/index-BfTCfPZ1.js +6 -0
  116. package/dist/component-library/index-Cm7V4EAn.js +2 -0
  117. package/dist/component-library/index-DuYjhvTn.js +1 -0
  118. package/dist/component-library/index.esm.js +1 -1
  119. package/dist/component-library/linkUtils-02nCfO0F.js +1 -0
  120. package/dist/component-library/utils-CqaqnfY4.js +1 -0
  121. package/dist/components/attributes.js +3 -3
  122. package/dist/components/controlUtils.js +35 -2
  123. package/dist/components/ds-accordion.js +58 -42
  124. package/dist/components/ds-button2.js +78 -39
  125. package/dist/components/ds-card.d.ts +11 -0
  126. package/dist/components/ds-card.js +91 -0
  127. package/dist/components/ds-checkbox-group.js +116 -56
  128. package/dist/components/ds-checkbox2.js +93 -80
  129. package/dist/components/ds-icon2.js +292 -292
  130. package/dist/components/ds-input-validity2.js +17 -14
  131. package/dist/components/ds-link-with-arrow.js +22 -22
  132. package/dist/components/ds-link.js +43 -40
  133. package/dist/components/ds-radio-button-group.d.ts +11 -0
  134. package/dist/components/ds-radio-button-group.js +185 -0
  135. package/dist/components/ds-radio-button.d.ts +11 -0
  136. package/dist/components/ds-radio-button.js +198 -0
  137. package/dist/components/ds-spinner.d.ts +11 -0
  138. package/dist/components/ds-spinner.js +6 -0
  139. package/dist/components/ds-spinner2.js +89 -0
  140. package/dist/components/ds-text-input.js +126 -104
  141. package/dist/components/ds-visually-hidden2.js +2 -3
  142. package/dist/components/index.js +208 -2
  143. package/dist/components/index2.js +713 -39
  144. package/dist/components/index3.js +69 -57
  145. package/dist/components/linkUtils.js +4 -2
  146. package/dist/docs.d.ts +443 -0
  147. package/dist/docs.json +4790 -0
  148. package/dist/esm/{utils-cfc536bc.js → attributes-BD_lNRxn.js} +3 -26
  149. package/dist/esm/component-library.js +6 -5
  150. package/dist/esm/controlUtils-CNER0MvM.js +37 -0
  151. package/dist/esm/ds-accordion.entry.js +77 -0
  152. package/dist/esm/ds-button.entry.js +105 -0
  153. package/dist/esm/ds-card.entry.js +56 -0
  154. package/dist/esm/ds-checkbox-group.entry.js +108 -46
  155. package/dist/esm/ds-checkbox.entry.js +78 -67
  156. package/dist/esm/ds-icon.entry.js +941 -0
  157. package/dist/esm/ds-input-validity.entry.js +14 -13
  158. package/dist/esm/ds-link-with-arrow.entry.js +21 -18
  159. package/dist/esm/ds-link.entry.js +34 -29
  160. package/dist/esm/ds-radio-button-group.entry.js +151 -0
  161. package/dist/esm/ds-radio-button.entry.js +149 -0
  162. package/dist/esm/ds-spinner.entry.js +60 -0
  163. package/dist/esm/ds-text-input.entry.js +88 -73
  164. package/dist/esm/ds-visually-hidden.entry.js +3 -4
  165. package/dist/esm/index-BfTCfPZ1.js +92 -0
  166. package/dist/esm/{index-434995e1.js → index-Cm7V4EAn.js} +699 -34
  167. package/dist/{components/store.js → esm/index-DuYjhvTn.js} +6 -3
  168. package/dist/esm/index.js +2 -2
  169. package/dist/esm/{linkUtils-3d1b28cf.js → linkUtils-02nCfO0F.js} +4 -2
  170. package/dist/esm/loader.js +4 -4
  171. package/dist/esm/utils-CqaqnfY4.js +25 -0
  172. package/dist/hydrate/index.d.ts +271 -0
  173. package/dist/hydrate/index.js +22280 -0
  174. package/dist/hydrate/index.mjs +22272 -0
  175. package/dist/hydrate/package.json +12 -0
  176. package/dist/styles/helpers.css +15 -0
  177. package/dist/styles/helpers.css.map +1 -0
  178. package/dist/styles/mixins/_breakpoints.scss +13 -0
  179. package/dist/styles/mixins/_focus.scss +26 -0
  180. package/dist/styles/mixins/_wrapper.scss +5 -0
  181. package/dist/styles/mixins/imports-default/_imports.scss +2 -0
  182. package/dist/styles/mixins/tokens/_breakpoints.scss +13 -0
  183. package/dist/styles/mixins/tokens/_semantic-colours.scss +75 -0
  184. package/dist/styles/mixins.scss +12 -0
  185. package/dist/styles/variables.css +176 -0
  186. package/dist/styles/variables.css.map +1 -0
  187. package/dist/types/components/01-base-components/ds-accordion/ds-accordion.d.ts +11 -8
  188. package/dist/types/components/01-base-components/ds-button/ds-button.d.ts +16 -11
  189. package/dist/types/components/01-base-components/ds-button/stories/ds-button.examples.stories.d.ts +1 -0
  190. package/dist/types/components/01-base-components/ds-button/stories/ds-button.features.stories.d.ts +1 -0
  191. package/dist/types/components/01-base-components/ds-card/ds-card.d.ts +20 -0
  192. package/dist/types/components/01-base-components/ds-card/stories/ds-card.examples.stories.d.ts +8 -0
  193. package/dist/types/components/01-base-components/ds-card/stories/ds-card.features.stories.d.ts +8 -0
  194. package/dist/types/components/01-base-components/ds-card/stories/ds-card.stories.d.ts +7 -0
  195. package/dist/types/components/01-base-components/ds-checkbox/ds-checkbox.d.ts +21 -22
  196. package/dist/types/components/01-base-components/ds-checkbox-group/ds-checkbox-group.d.ts +21 -11
  197. package/dist/types/components/01-base-components/ds-checkbox-group/stories/ds-checkbox-group.features.stories.d.ts +3 -0
  198. package/dist/types/components/01-base-components/ds-icon/ds-icon.d.ts +7 -5
  199. package/dist/types/components/01-base-components/ds-input-validity/ds-input-validity.d.ts +5 -6
  200. package/dist/types/components/01-base-components/ds-link/ds-link.d.ts +13 -14
  201. package/dist/types/components/01-base-components/ds-link/stories/ds-link.features.stories.d.ts +2 -0
  202. package/dist/types/components/01-base-components/ds-link-with-arrow/ds-link-with-arrow.d.ts +5 -7
  203. package/dist/types/components/01-base-components/ds-radio-button/ds-radio-button.d.ts +44 -0
  204. package/dist/types/components/01-base-components/ds-radio-button/stories/ds-radio-button.features.stories.d.ts +15 -0
  205. package/dist/types/components/01-base-components/ds-radio-button/stories/ds-radio-button.stories.d.ts +7 -0
  206. package/dist/types/components/01-base-components/ds-radio-button-group/ds-radio-button-group.d.ts +34 -0
  207. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.examples.stories.d.ts +6 -0
  208. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.features.stories.d.ts +11 -0
  209. package/dist/types/components/01-base-components/ds-radio-button-group/stories/ds-radio-button-group.stories.d.ts +7 -0
  210. package/dist/types/components/01-base-components/ds-spinner/ds-spinner.d.ts +17 -0
  211. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.examples.stories.d.ts +7 -0
  212. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.features.stories.d.ts +7 -0
  213. package/dist/types/components/01-base-components/ds-spinner/stories/ds-spinner.stories.d.ts +7 -0
  214. package/dist/types/components/01-base-components/ds-text-input/ds-text-input.d.ts +37 -32
  215. package/dist/types/components.d.ts +1287 -228
  216. package/dist/types/stencil-public-runtime.d.ts +22 -0
  217. package/dist/types/store.d.ts +6 -1
  218. package/dist/types/utils/attributes/attributes.d.ts +1 -1
  219. package/dist/types/utils/button/buttonUtils.d.ts +1 -0
  220. package/dist/types/utils/colours/colourTypes.d.ts +3 -3
  221. package/dist/types/utils/controls/controlUtils.d.ts +2 -0
  222. package/dist/types/utils/link/linkUtils.d.ts +1 -1
  223. package/dist/types/utils/spinner/spinnerUtils.d.ts +1 -0
  224. package/dist/types/utils/tests/testUtils.d.ts +1 -0
  225. package/dist/types/utils/utils.d.ts +2 -1
  226. package/package.json +40 -36
  227. package/dist/cjs/controlUtils-041de0fd.js +0 -7
  228. package/dist/cjs/ds-accordion_3.cjs.entry.js +0 -1095
  229. package/dist/cjs/index-5b0b9d4c.js +0 -82
  230. package/dist/component-library/controlUtils-9ca4087b.js +0 -1
  231. package/dist/component-library/ds-accordion_3.entry.js +0 -1
  232. package/dist/component-library/index-434995e1.js +0 -2
  233. package/dist/component-library/index-72ac5051.js +0 -6
  234. package/dist/component-library/linkUtils-3d1b28cf.js +0 -1
  235. package/dist/component-library/store-b8d17c10.js +0 -1
  236. package/dist/esm/controlUtils-9ca4087b.js +0 -4
  237. package/dist/esm/ds-accordion_3.entry.js +0 -1089
  238. package/dist/esm/index-72ac5051.js +0 -80
  239. package/dist/esm/store-b8d17c10.js +0 -204
  240. package/dist/loader/package.json +0 -11
  241. /package/dist/cjs/{app-globals-3a1e7e63.js → app-globals-V2Kpy_OQ.js} +0 -0
  242. /package/dist/component-library/{app-globals-0f993ce5.js → app-globals-DQuL1Twl.js} +0 -0
  243. /package/dist/esm/{app-globals-0f993ce5.js → app-globals-DQuL1Twl.js} +0 -0
@@ -0,0 +1,115 @@
1
+ :root {
2
+ --ds-breakpoint-xSmall: 20rem;
3
+ --ds-breakpoint-small: 30rem;
4
+ --ds-breakpoint-medium: 60rem;
5
+ --ds-breakpoint-large: 75rem;
6
+ --ds-breakpoint-xLarge: 90rem;
7
+ }
8
+
9
+ .ds-radio-button {
10
+ box-sizing: border-box;
11
+ display: inline-flex;
12
+ color: var(--ds-palette-black-95);
13
+ }
14
+ .ds-radio-button--disabled {
15
+ color: var(--ds-palette-black-40);
16
+ }
17
+ .ds-radio-button__validity {
18
+ margin-left: 10px;
19
+ }
20
+ .ds-radio-button:has(input:focus-visible) .ds-radio-button__icon {
21
+ box-shadow: inset 0 0 0 var(--ds-borderWidth-thick) var(--ds-palette-white);
22
+ outline: var(--ds-borderWidth-thin) solid var(--ds-palette-black-95);
23
+ outline-offset: calc(var(--ds-borderWidth-thin) * -1 * 5);
24
+ }
25
+ .ds-radio-button__icon {
26
+ border-radius: 50%;
27
+ height: 44px;
28
+ width: 44px;
29
+ }
30
+ .ds-radio-button__text {
31
+ margin-top: 11px;
32
+ }
33
+ .ds-radio-button__icon__outer-circle {
34
+ stroke: var(--ds-palette-black-50);
35
+ fill: var(--ds-palette-white);
36
+ }
37
+ .ds-radio-button__icon__outer-circle--checked {
38
+ stroke: var(--ds-palette-mainBlue-70);
39
+ fill: var(--ds-palette-white);
40
+ }
41
+ .ds-radio-button__icon__inner-circle {
42
+ stroke: unset;
43
+ fill: var(--ds-palette-mainBlue-70);
44
+ }
45
+ .ds-radio-button:hover:not(.ds-radio-button--disabled) .ds-radio-button__icon__outer-circle {
46
+ stroke: var(--ds-palette-black-50);
47
+ fill: var(--ds-palette-black-10);
48
+ }
49
+ .ds-radio-button:hover:not(.ds-radio-button--disabled) .ds-radio-button__icon__outer-circle--checked {
50
+ stroke: var(--ds-palette-mainBlue-80);
51
+ fill: var(--ds-palette-white);
52
+ }
53
+ .ds-radio-button:hover:not(.ds-radio-button--disabled) .ds-radio-button__icon__inner-circle {
54
+ stroke: unset;
55
+ fill: var(--ds-palette-mainBlue-80);
56
+ }
57
+ .ds-radio-button:active:not(.ds-radio-button--disabled) .ds-radio-button__icon__outer-circle {
58
+ stroke: var(--ds-palette-black-50);
59
+ fill: var(--ds-palette-black-20);
60
+ }
61
+ .ds-radio-button:active:not(.ds-radio-button--disabled) .ds-radio-button__icon__outer-circle--checked {
62
+ stroke: var(--ds-palette-mainBlue-90);
63
+ fill: var(--ds-palette-white);
64
+ }
65
+ .ds-radio-button:active:not(.ds-radio-button--disabled) .ds-radio-button__icon__inner-circle {
66
+ stroke: unset;
67
+ fill: var(--ds-palette-mainBlue-90);
68
+ }
69
+ .ds-radio-button--disabled .ds-radio-button__icon__outer-circle {
70
+ stroke: var(--ds-overlay-black-15);
71
+ fill: var(--ds-overlay-black-10);
72
+ }
73
+ .ds-radio-button--disabled .ds-radio-button__icon__outer-circle--checked {
74
+ stroke: var(--ds-overlay-black-15);
75
+ fill: var(--ds-overlay-black-10);
76
+ }
77
+ .ds-radio-button--disabled .ds-radio-button__icon__inner-circle {
78
+ stroke: unset;
79
+ fill: var(--ds-overlay-black-15);
80
+ }
81
+ .ds-radio-button--invalid .ds-radio-button__icon__outer-circle {
82
+ stroke: var(--ds-palette-red-50);
83
+ fill: var(--ds-palette-white);
84
+ }
85
+ .ds-radio-button--invalid .ds-radio-button__icon__outer-circle--checked {
86
+ stroke: var(--ds-palette-red-50);
87
+ fill: var(--ds-palette-white);
88
+ }
89
+ .ds-radio-button--invalid .ds-radio-button__icon__inner-circle {
90
+ stroke: unset;
91
+ fill: var(--ds-palette-mainBlue-70);
92
+ }
93
+
94
+ .ds-radio-button-fieldset {
95
+ display: inline-flex;
96
+ flex-direction: column;
97
+ border: none;
98
+ margin: 0;
99
+ padding: 0;
100
+ }
101
+ .ds-radio-button-fieldset__legend {
102
+ padding-inline: 0;
103
+ color: var(--ds-palette-black-95);
104
+ font-size: var(--ds-fontSize-16);
105
+ font-weight: var(--ds-fontWeight-semibold);
106
+ letter-spacing: var(--ds-letterSpacing-wide);
107
+ line-height: var(--ds-lineHeight-large);
108
+ margin-bottom: var(--ds-spacing-3xSmall);
109
+ }
110
+ .ds-radio-button-fieldset__assistive-text {
111
+ display: inline;
112
+ font-size: var(--ds-fontSize-14);
113
+ color: var(--ds-palette-black-70);
114
+ line-height: var(--ds-lineHeight-large);
115
+ }
@@ -0,0 +1,449 @@
1
+ import { Fragment, h } from "@stencil/core";
2
+ import { inheritAttributes } from "../../../utils/attributes/attributes";
3
+ import { getRequiredText } from "../../../utils/controls/controlUtils";
4
+ import { idGenerator } from "../../../utils/utils";
5
+ import classNames from "classnames";
6
+ import { isValidation } from "../../../store";
7
+ const radioButtonIdGenerator = idGenerator('ds-radio-button');
8
+ export class DsRadioButton {
9
+ radioGroup = null;
10
+ inputElem;
11
+ dsChange;
12
+ dsRadioButtonChecked;
13
+ el;
14
+ internals;
15
+ dsId = radioButtonIdGenerator.next().value;
16
+ dsErrorsDisabled = false;
17
+ dsValue = this.dsId;
18
+ dsLegend;
19
+ dsAssistiveText;
20
+ dsText;
21
+ dsRequired = false;
22
+ dsDisabled = false;
23
+ dsChecked = false;
24
+ dsErrorText = '';
25
+ focusable = true;
26
+ invalid = !!this.dsErrorText;
27
+ initialChecked = this.dsChecked;
28
+ validationMessage;
29
+ errorTextId = `${this.dsId}-error`;
30
+ assistiveTextId = `${this.dsId}-assistive-text`;
31
+ async dsFocus() {
32
+ this.inputElem.focus();
33
+ }
34
+ async setFocusable(flag) {
35
+ this.focusable = flag;
36
+ }
37
+ async setChecked() {
38
+ this.dsChecked = true;
39
+ this.internals?.setFormValue('true');
40
+ this.dsRadioButtonChecked.emit();
41
+ if (isValidation('client') && this.validationMessage) {
42
+ this.validationMessage = this.getValidationMessage();
43
+ }
44
+ }
45
+ dsCheckedObserver(isChecked) {
46
+ this.dsChange.emit(isChecked);
47
+ }
48
+ inheritedAttributes = {};
49
+ getValidationMessage = () => (!this.dsErrorsDisabled ? this.dsErrorText || this.internals?.validationMessage || this.inputElem?.validationMessage : '');
50
+ componentWillLoad() {
51
+ this.inheritedAttributes = {
52
+ ...inheritAttributes(this, this.el),
53
+ };
54
+ }
55
+ formResetCallback() {
56
+ this.dsChecked = this.initialChecked;
57
+ this.internals.setValidity({});
58
+ this.internals.setFormValue(this.dsChecked.toString());
59
+ }
60
+ connectedCallback() {
61
+ this.radioGroup = this.el.closest('ds-radio-button-group');
62
+ if (this.radioGroup) {
63
+ this.updateCheckedState();
64
+ this.invalid = !!this.radioGroup.dsErrorText;
65
+ this.radioGroup.addEventListener('dsRadioGroupValueChange', this.updateCheckedState);
66
+ this.radioGroup.addEventListener('dsRadioGroupInvalidStateChange', this.updateInvalidState);
67
+ }
68
+ }
69
+ disconnectedCallback() {
70
+ if (this.radioGroup) {
71
+ this.radioGroup.removeEventListener('dsRadioGroupValueChange', this.updateCheckedState);
72
+ this.radioGroup.removeEventListener('dsRadioGroupInvalidStateChange', this.updateInvalidState);
73
+ }
74
+ this.radioGroup = null;
75
+ }
76
+ updateCheckedState = async () => {
77
+ this.dsChecked = this.dsValue === (await this.radioGroup.getValue());
78
+ };
79
+ updateInvalidState = (e) => {
80
+ this.invalid = e.detail;
81
+ };
82
+ handleInput = () => {
83
+ this.setChecked();
84
+ };
85
+ handleBlur = () => {
86
+ if (isValidation('client')) {
87
+ this.validationMessage = this.getValidationMessage();
88
+ }
89
+ };
90
+ getLegendText = () => {
91
+ if (this.dsRequired) {
92
+ return getRequiredText(this.dsLegend);
93
+ }
94
+ return this.dsLegend;
95
+ };
96
+ renderRadioIcon() {
97
+ const iconClass = 'ds-radio-button__icon';
98
+ const outerCircleClasses = classNames(`${iconClass}__outer-circle`, {
99
+ [`${iconClass}__outer-circle--checked`]: this.dsChecked,
100
+ });
101
+ const innerCircleClasses = classNames(`${iconClass}__inner-circle`);
102
+ return (h("slot", { name: "icon" }, h("div", { class: iconClass, "aria-hidden": "true" }, h("svg", { width: "44", height: "44", viewBox: "0 0 44 44", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("rect", { x: "10", y: "10", width: "24", height: "24", rx: "12", fill: "white" }), h("circle", { class: outerCircleClasses, cx: "22", cy: "22", r: "10", fill: "white", stroke: "#005A94", "stroke-width": "2" }), this.dsChecked && h("circle", { class: innerCircleClasses, cx: "22", cy: "22", r: "6", fill: "#005A94" })))));
103
+ }
104
+ renderRadioButton() {
105
+ const classes = classNames('ds-radio-button', {
106
+ 'ds-radio-button--disabled': this.dsDisabled,
107
+ 'ds-radio-button--invalid': !!this.dsErrorText || this.invalid,
108
+ });
109
+ const inputClasses = classNames('ds-radio-button__input');
110
+ const textClasses = classNames('ds-radio-button__text');
111
+ const tabindex = this.focusable ? 0 : -1;
112
+ return (h(Fragment, null, h("div", null, h("label", { class: classes }, h("ds-visually-hidden", null, h("input", { ref: ref => (this.inputElem = ref), type: "radio", class: inputClasses, value: this.dsValue, disabled: this.dsDisabled, onInput: this.handleInput, onBlur: this.handleBlur, checked: this.dsChecked, tabindex: tabindex, ...this.inheritedAttributes })), this.renderRadioIcon(), h("slot", null, h("span", { class: textClasses }, this.dsText)))), !this.dsErrorsDisabled && (h("slot", { name: "validity" }, h("div", { class: "ds-radio-button__validity" }, h("ds-input-validity", { id: this.errorTextId, dsText: this.dsErrorText, dsType: "error", dsAriaLive: "polite", dsAriaAtomic: "true" }))))));
113
+ }
114
+ renderFieldset() {
115
+ const fieldsetClasses = classNames('ds-radio-button-fieldset');
116
+ const legendClasses = classNames('ds-radio-button-fieldset__legend');
117
+ const assistiveTextClasses = classNames('ds-radio-button-fieldset__assistive-text');
118
+ const ariaDescribedBy = [!!this.dsErrorText && this.errorTextId, !!this.dsAssistiveText && this.assistiveTextId].filter(Boolean).join(' ');
119
+ return (h("fieldset", { class: fieldsetClasses, "aria-describedby": ariaDescribedBy }, h("legend", { class: legendClasses }, h("slot", { name: "legend" }, this.getLegendText())), h("slot", { name: "assistiveText" }, this.dsAssistiveText && (h("small", { class: assistiveTextClasses, id: this.assistiveTextId }, this.dsAssistiveText))), this.renderRadioButton()));
120
+ }
121
+ render() {
122
+ if (this.dsLegend) {
123
+ return this.renderFieldset();
124
+ }
125
+ return this.renderRadioButton();
126
+ }
127
+ static get is() { return "ds-radio-button"; }
128
+ static get encapsulation() { return "shadow"; }
129
+ static get formAssociated() { return true; }
130
+ static get originalStyleUrls() {
131
+ return {
132
+ "$": ["ds-radio-button.scss"]
133
+ };
134
+ }
135
+ static get styleUrls() {
136
+ return {
137
+ "$": ["ds-radio-button.css"]
138
+ };
139
+ }
140
+ static get properties() {
141
+ return {
142
+ "dsId": {
143
+ "type": "string",
144
+ "attribute": "ds-id",
145
+ "mutable": false,
146
+ "complexType": {
147
+ "original": "string",
148
+ "resolved": "string",
149
+ "references": {}
150
+ },
151
+ "required": false,
152
+ "optional": true,
153
+ "docs": {
154
+ "tags": [],
155
+ "text": "Passed to the `id` attriubte of the `input` element of the rendered radio button."
156
+ },
157
+ "getter": false,
158
+ "setter": false,
159
+ "reflect": false,
160
+ "defaultValue": "radioButtonIdGenerator.next().value as string"
161
+ },
162
+ "dsErrorsDisabled": {
163
+ "type": "boolean",
164
+ "attribute": "ds-errors-disabled",
165
+ "mutable": false,
166
+ "complexType": {
167
+ "original": "boolean",
168
+ "resolved": "boolean",
169
+ "references": {}
170
+ },
171
+ "required": false,
172
+ "optional": false,
173
+ "docs": {
174
+ "tags": [],
175
+ "text": "Can be used to disable client-side validation.\nUsed internally in radio button group to disable error messages\nfor a single radio button."
176
+ },
177
+ "getter": false,
178
+ "setter": false,
179
+ "reflect": false,
180
+ "defaultValue": "false"
181
+ },
182
+ "dsValue": {
183
+ "type": "string",
184
+ "attribute": "ds-value",
185
+ "mutable": false,
186
+ "complexType": {
187
+ "original": "string",
188
+ "resolved": "string",
189
+ "references": {}
190
+ },
191
+ "required": false,
192
+ "optional": true,
193
+ "docs": {
194
+ "tags": [],
195
+ "text": "Passed to the `value` attribute of the `input` element of the rendered radio button."
196
+ },
197
+ "getter": false,
198
+ "setter": false,
199
+ "reflect": false,
200
+ "defaultValue": "this.dsId"
201
+ },
202
+ "dsLegend": {
203
+ "type": "string",
204
+ "attribute": "ds-legend",
205
+ "mutable": false,
206
+ "complexType": {
207
+ "original": "string",
208
+ "resolved": "string",
209
+ "references": {}
210
+ },
211
+ "required": false,
212
+ "optional": true,
213
+ "docs": {
214
+ "tags": [],
215
+ "text": "Label of the radio button"
216
+ },
217
+ "getter": false,
218
+ "setter": false,
219
+ "reflect": false
220
+ },
221
+ "dsAssistiveText": {
222
+ "type": "string",
223
+ "attribute": "ds-assistive-text",
224
+ "mutable": false,
225
+ "complexType": {
226
+ "original": "string",
227
+ "resolved": "string",
228
+ "references": {}
229
+ },
230
+ "required": false,
231
+ "optional": true,
232
+ "docs": {
233
+ "tags": [],
234
+ "text": "Text for additional information shown below label"
235
+ },
236
+ "getter": false,
237
+ "setter": false,
238
+ "reflect": false
239
+ },
240
+ "dsText": {
241
+ "type": "string",
242
+ "attribute": "ds-text",
243
+ "mutable": false,
244
+ "complexType": {
245
+ "original": "string",
246
+ "resolved": "string",
247
+ "references": {}
248
+ },
249
+ "required": false,
250
+ "optional": true,
251
+ "docs": {
252
+ "tags": [],
253
+ "text": "The text of the radio button"
254
+ },
255
+ "getter": false,
256
+ "setter": false,
257
+ "reflect": false
258
+ },
259
+ "dsRequired": {
260
+ "type": "boolean",
261
+ "attribute": "ds-required",
262
+ "mutable": false,
263
+ "complexType": {
264
+ "original": "boolean",
265
+ "resolved": "boolean",
266
+ "references": {}
267
+ },
268
+ "required": false,
269
+ "optional": false,
270
+ "docs": {
271
+ "tags": [],
272
+ "text": "Passed to the `required` attribute of the `input` element of the rendered radio button."
273
+ },
274
+ "getter": false,
275
+ "setter": false,
276
+ "reflect": false,
277
+ "defaultValue": "false"
278
+ },
279
+ "dsDisabled": {
280
+ "type": "boolean",
281
+ "attribute": "ds-disabled",
282
+ "mutable": false,
283
+ "complexType": {
284
+ "original": "boolean",
285
+ "resolved": "boolean",
286
+ "references": {}
287
+ },
288
+ "required": false,
289
+ "optional": false,
290
+ "docs": {
291
+ "tags": [],
292
+ "text": "Passed to the `disabled` attribute of the `input` element of the rendered radio button."
293
+ },
294
+ "getter": false,
295
+ "setter": false,
296
+ "reflect": false,
297
+ "defaultValue": "false"
298
+ },
299
+ "dsChecked": {
300
+ "type": "boolean",
301
+ "attribute": "ds-checked",
302
+ "mutable": false,
303
+ "complexType": {
304
+ "original": "boolean",
305
+ "resolved": "boolean",
306
+ "references": {}
307
+ },
308
+ "required": false,
309
+ "optional": false,
310
+ "docs": {
311
+ "tags": [],
312
+ "text": "Passed to the `checked` attribute of the `input` element of the rendered radio button."
313
+ },
314
+ "getter": false,
315
+ "setter": false,
316
+ "reflect": false,
317
+ "defaultValue": "false"
318
+ },
319
+ "dsErrorText": {
320
+ "type": "string",
321
+ "attribute": "ds-error-text",
322
+ "mutable": false,
323
+ "complexType": {
324
+ "original": "string",
325
+ "resolved": "string",
326
+ "references": {}
327
+ },
328
+ "required": false,
329
+ "optional": false,
330
+ "docs": {
331
+ "tags": [],
332
+ "text": "Error message shown below the radio button.\nIf set, the radio button is shown in an invalid state."
333
+ },
334
+ "getter": false,
335
+ "setter": false,
336
+ "reflect": false,
337
+ "defaultValue": "''"
338
+ }
339
+ };
340
+ }
341
+ static get states() {
342
+ return {
343
+ "focusable": {},
344
+ "invalid": {},
345
+ "initialChecked": {},
346
+ "validationMessage": {}
347
+ };
348
+ }
349
+ static get events() {
350
+ return [{
351
+ "method": "dsChange",
352
+ "name": "dsChange",
353
+ "bubbles": true,
354
+ "cancelable": true,
355
+ "composed": true,
356
+ "docs": {
357
+ "tags": [],
358
+ "text": "Event emitted when the `dsChecked` state changes."
359
+ },
360
+ "complexType": {
361
+ "original": "boolean",
362
+ "resolved": "boolean",
363
+ "references": {}
364
+ }
365
+ }, {
366
+ "method": "dsRadioButtonChecked",
367
+ "name": "dsRadioButtonChecked",
368
+ "bubbles": true,
369
+ "cancelable": true,
370
+ "composed": true,
371
+ "docs": {
372
+ "tags": [],
373
+ "text": "Event emitted when the radio button is set to checked state.\nUsed to notify a parent radio button group of a state change."
374
+ },
375
+ "complexType": {
376
+ "original": "void",
377
+ "resolved": "void",
378
+ "references": {}
379
+ }
380
+ }];
381
+ }
382
+ static get methods() {
383
+ return {
384
+ "dsFocus": {
385
+ "complexType": {
386
+ "signature": "() => Promise<void>",
387
+ "parameters": [],
388
+ "references": {
389
+ "Promise": {
390
+ "location": "global",
391
+ "id": "global::Promise"
392
+ }
393
+ },
394
+ "return": "Promise<void>"
395
+ },
396
+ "docs": {
397
+ "text": "Custom focus method that ensures the correct internal input element is focused",
398
+ "tags": []
399
+ }
400
+ },
401
+ "setFocusable": {
402
+ "complexType": {
403
+ "signature": "(flag: boolean) => Promise<void>",
404
+ "parameters": [{
405
+ "name": "flag",
406
+ "type": "boolean",
407
+ "docs": ""
408
+ }],
409
+ "references": {
410
+ "Promise": {
411
+ "location": "global",
412
+ "id": "global::Promise"
413
+ }
414
+ },
415
+ "return": "Promise<void>"
416
+ },
417
+ "docs": {
418
+ "text": "Whether the radio button is focusable via tab or not.\nUsed internally inside a radio button group to make\nkeyboard usage work as expected.\n\nNOTE: manually calling this method may cause unexpected behaviour",
419
+ "tags": []
420
+ }
421
+ },
422
+ "setChecked": {
423
+ "complexType": {
424
+ "signature": "() => Promise<void>",
425
+ "parameters": [],
426
+ "references": {
427
+ "Promise": {
428
+ "location": "global",
429
+ "id": "global::Promise"
430
+ }
431
+ },
432
+ "return": "Promise<void>"
433
+ },
434
+ "docs": {
435
+ "text": "",
436
+ "tags": []
437
+ }
438
+ }
439
+ };
440
+ }
441
+ static get elementRef() { return "el"; }
442
+ static get watchers() {
443
+ return [{
444
+ "propName": "dsChecked",
445
+ "methodName": "dsCheckedObserver"
446
+ }];
447
+ }
448
+ static get attachInternalsMemberName() { return "internals"; }
449
+ }
@@ -0,0 +1,72 @@
1
+ const meta = {
2
+ title: 'Base Components/RadioButton/Features',
3
+ component: 'ds-radio-button',
4
+ };
5
+ export default meta;
6
+ export const Unchecked = {
7
+ args: {
8
+ dsText: 'Value text',
9
+ dsChecked: false
10
+ },
11
+ };
12
+ export const Checked = {
13
+ args: {
14
+ dsText: 'Value text',
15
+ dsChecked: true,
16
+ }
17
+ };
18
+ export const Disabled = {
19
+ args: {
20
+ dsText: 'Value text',
21
+ dsDisabled: true
22
+ },
23
+ };
24
+ export const CheckedDisabled = {
25
+ args: {
26
+ dsText: 'Value text',
27
+ dsDisabled: true,
28
+ dsChecked: true
29
+ },
30
+ };
31
+ export const Invalid = {
32
+ args: {
33
+ dsText: 'Value text',
34
+ dsErrorText: "Error text"
35
+ },
36
+ };
37
+ export const InvalidChecked = {
38
+ args: {
39
+ dsText: 'Value text',
40
+ dsErrorText: "Error text",
41
+ dsChecked: true
42
+ },
43
+ };
44
+ export const WithLegend = {
45
+ args: {
46
+ dsText: 'Value text',
47
+ dsLegend: "Legend text",
48
+ },
49
+ };
50
+ export const RequiredWithLegend = {
51
+ args: {
52
+ dsText: 'Value text',
53
+ dsLegend: "Legend text",
54
+ dsRequired: true,
55
+ },
56
+ };
57
+ export const WithLegendAndAssistiveText = {
58
+ args: {
59
+ dsText: 'Value text',
60
+ dsAssistiveText: 'Assistive text',
61
+ dsLegend: "Legend text",
62
+ },
63
+ };
64
+ export const Focused = {
65
+ args: {
66
+ dsText: 'Value text'
67
+ },
68
+ play: async ({ canvasElement }) => {
69
+ const elem = canvasElement.querySelector('ds-radio-button');
70
+ elem.dsFocus();
71
+ }
72
+ };
@@ -0,0 +1,22 @@
1
+ const meta = {
2
+ title: 'Base Components/RadioButton',
3
+ component: 'ds-radio-button',
4
+ };
5
+ export default meta;
6
+ export const Default = {
7
+ args: {
8
+ dsText: 'Value text',
9
+ },
10
+ };
11
+ export const Playground = {
12
+ args: {
13
+ dsText: 'Value text',
14
+ dsValue: 'value',
15
+ dsLegend: '',
16
+ dsAssistiveText: '',
17
+ dsRequired: false,
18
+ dsDisabled: false,
19
+ dsChecked: false,
20
+ dsErrorText: '',
21
+ },
22
+ };
@@ -0,0 +1,30 @@
1
+ .ds-radio-button-group {
2
+ display: inline-flex;
3
+ flex-direction: column;
4
+ border: none;
5
+ padding: 0;
6
+ margin: 0;
7
+ }
8
+ .ds-radio-button-group__radio-buttons-slot {
9
+ display: inline-flex;
10
+ flex-direction: column;
11
+ }
12
+ .ds-radio-button-group__radio-buttons-slot--horizontal {
13
+ flex-flow: row wrap;
14
+ gap: var(--ds-spacing-small);
15
+ }
16
+ .ds-radio-button-group__legend {
17
+ padding-inline: 0;
18
+ color: var(--ds-palette-black-95);
19
+ font-size: var(--ds-fontSize-16);
20
+ font-weight: var(--ds-fontWeight-semibold);
21
+ letter-spacing: var(--ds-letterSpacing-wide);
22
+ line-height: var(--ds-lineHeight-large);
23
+ margin-bottom: var(--ds-spacing-3xSmall);
24
+ }
25
+ .ds-radio-button-group__assistive-text {
26
+ font-size: var(--ds-fontSize-14);
27
+ color: var(--ds-palette-black-70);
28
+ line-height: var(--ds-lineHeight-large);
29
+ margin-bottom: var(--ds-spacing-2xSmall);
30
+ }