qc-trousse-sdg 1.4.0-develop.0 → 1.4.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 (292) hide show
  1. package/README.md +22 -5
  2. package/dist/css/qc-sdg-design-tokens.min.css +1 -1
  3. package/dist/css/qc-sdg-no-grid.min.css +1 -1
  4. package/dist/css/qc-sdg.min.css +1 -1
  5. package/dist/fonts/open-sans-v43-latin-500.woff2 +0 -0
  6. package/dist/fonts/open-sans-v43-latin-500italic.woff2 +0 -0
  7. package/dist/fonts/open-sans-v43-latin-600.woff2 +0 -0
  8. package/dist/fonts/open-sans-v43-latin-600italic.woff2 +0 -0
  9. package/dist/fonts/open-sans-v43-latin-700.woff2 +0 -0
  10. package/dist/fonts/open-sans-v43-latin-700italic.woff2 +0 -0
  11. package/dist/fonts/open-sans-v43-latin-italic.woff2 +0 -0
  12. package/dist/fonts/open-sans-v43-latin-regular.woff2 +0 -0
  13. package/dist/fonts/roboto-mono-v30-latin-500.woff2 +0 -0
  14. package/dist/fonts/roboto-mono-v30-latin-500italic.woff2 +0 -0
  15. package/dist/fonts/roboto-mono-v30-latin-600.woff2 +0 -0
  16. package/dist/fonts/roboto-mono-v30-latin-600italic.woff2 +0 -0
  17. package/dist/fonts/roboto-mono-v30-latin-700.woff2 +0 -0
  18. package/dist/fonts/roboto-mono-v30-latin-700italic.woff2 +0 -0
  19. package/dist/fonts/roboto-mono-v30-latin-italic.woff2 +0 -0
  20. package/dist/fonts/roboto-mono-v30-latin-regular.woff2 +0 -0
  21. package/dist/fonts/roboto-v48-latin-500.woff2 +0 -0
  22. package/dist/fonts/roboto-v48-latin-500italic.woff2 +0 -0
  23. package/dist/fonts/roboto-v48-latin-600.woff2 +0 -0
  24. package/dist/fonts/roboto-v48-latin-600italic.woff2 +0 -0
  25. package/dist/fonts/roboto-v48-latin-700.woff2 +0 -0
  26. package/dist/fonts/roboto-v48-latin-700italic.woff2 +0 -0
  27. package/dist/fonts/roboto-v48-latin-italic.woff2 +0 -0
  28. package/dist/fonts/roboto-v48-latin-regular.woff2 +0 -0
  29. package/dist/img/icon/adresse.svg +4 -0
  30. package/dist/img/icon/arrow-up.svg +3 -0
  31. package/dist/img/icon/calendar.svg +1 -0
  32. package/dist/img/icon/checkmark.svg +3 -0
  33. package/dist/img/icon/chevron-up-thin.svg +5 -0
  34. package/dist/img/{chevron-white.svg → icon/chevron-up.svg} +1 -1
  35. package/{public/img → dist/img/icon}/clipboard.svg +3 -3
  36. package/dist/img/icon/clock.svg +1 -0
  37. package/dist/img/icon/email.svg +1 -0
  38. package/dist/img/icon/error.svg +1 -0
  39. package/{public/img/exclamation-white.svg → dist/img/icon/exclamation.svg} +2 -2
  40. package/{public/img → dist/img/icon}/external-link.svg +2 -2
  41. package/dist/img/icon/information.svg +1 -0
  42. package/dist/img/icon/ligth-bulb.svg +1 -0
  43. package/{public/img → dist/img/icon}/minus.svg +1 -1
  44. package/dist/img/icon/note.svg +1 -0
  45. package/dist/img/icon/phone.svg +1 -0
  46. package/dist/img/{plus.svg → icon/plus.svg} +1 -1
  47. package/{public/img → dist/img/icon}/question-mark.svg +2 -2
  48. package/dist/img/icon/search-thin.svg +10 -0
  49. package/dist/img/icon/search.svg +1 -0
  50. package/dist/img/icon/success.svg +1 -0
  51. package/dist/img/icon/user.svg +6 -0
  52. package/dist/img/icon/warning.svg +1 -0
  53. package/dist/img/icon/website.svg +1 -0
  54. package/dist/img/icon/xclose.svg +1 -0
  55. package/dist/js/qc-sdg.min.js +1 -1
  56. package/package.json +11 -3
  57. package/playwright.config.ts +79 -0
  58. package/plugins/buildDevDoc.js +36 -0
  59. package/plugins/buildHtmlDoc.js +43 -0
  60. package/plugins/buildTestFixtures.js +37 -0
  61. package/public/css/qc-doc-sdg.css +4 -67
  62. package/public/css/qc-sdg-design-tokens.css +17 -0
  63. package/public/css/qc-sdg-no-grid.css +2001 -1108
  64. package/public/css/qc-sdg.css +1999 -1106
  65. package/public/img/checkmark.svg +3 -0
  66. package/public/img/question.svg +10 -0
  67. package/public/index.html +3104 -1387
  68. package/public/js/qc-doc-sdg.js +5705 -285
  69. package/public/js/qc-sdg.js +5660 -1415
  70. package/rollup.config.js +67 -41
  71. package/scripts/buildImagesMap.js +85 -0
  72. package/scripts/check-release-note.sh +11 -0
  73. package/scripts/compile-doc.sh +4 -0
  74. package/src/doc/_index.html +100 -0
  75. package/src/doc/_nav.html +53 -0
  76. package/src/doc/_test.html +32 -0
  77. package/src/doc/components/Code.svelte +6 -2
  78. package/src/doc/components/TopNav.svelte +8 -9
  79. package/src/doc/components/color-doc.svelte +1 -1
  80. package/src/doc/ejs/layout/index.ejs +129 -0
  81. package/src/doc/qc-doc-sdg.js +1 -2
  82. package/src/doc/scss/components/_code.scss +1 -1
  83. package/src/doc/scss/jQueryUI/_jquery-ui.autocomplete.scss +1 -0
  84. package/src/doc/scss/qc-doc-sdg.scss +1 -1
  85. package/src/doc/scss/settings/_base.scss +4 -0
  86. package/src/sdg/_components.js +9 -2
  87. package/src/sdg/{components → bases}/Icon/Icon.svelte +13 -6
  88. package/src/sdg/bases/Icon/IconDoc.ejs +129 -0
  89. package/src/sdg/{components → bases}/Icon/IconWC.svelte +3 -1
  90. package/src/sdg/bases/Icon/Test/IconEmbeddedTest.html +1 -0
  91. package/src/sdg/bases/Icon/Test/IconEmbeddedTest.svelte +168 -0
  92. package/src/sdg/bases/Icon/Test/iconTest.html +156 -0
  93. package/src/sdg/bases/Icon/_icon.html +254 -0
  94. package/src/sdg/bases/Icon/_icons.scss +47 -0
  95. package/src/sdg/{scss/base → bases/accessibility}/_accessibility.scss +1 -1
  96. package/src/sdg/bases/colors/_colors.html +112 -0
  97. package/src/sdg/bases/figures/_figure.html +16 -0
  98. package/src/sdg/{scss/base → bases/form}/_form.scss +10 -3
  99. package/src/sdg/bases/grid/_grid.html +118 -0
  100. package/src/sdg/bases/headings/_headings.html +18 -0
  101. package/src/sdg/bases/headings/_headings.scss +25 -0
  102. package/src/sdg/{scss/base → bases/layout}/_layout.scss +1 -4
  103. package/src/sdg/bases/links/_links.html +104 -0
  104. package/src/sdg/bases/links/_links.scss +51 -0
  105. package/src/sdg/bases/lists/_lists.html +27 -0
  106. package/src/sdg/bases/separator/_separator.html +7 -0
  107. package/src/sdg/bases/separator/_separator.scss +5 -0
  108. package/src/sdg/bases/shadings/_shadings.html +14 -0
  109. package/src/sdg/{scss/base → bases/shadings}/_shadings.scss +1 -1
  110. package/src/sdg/bases/typography/_font.html +45 -0
  111. package/src/sdg/bases/typography/_fonts.scss +162 -0
  112. package/src/sdg/bases/typography/_paragraph.html +17 -0
  113. package/src/sdg/bases/typography/_paragraph.scss +33 -0
  114. package/src/sdg/components/Alert/Alert.svelte +2 -5
  115. package/src/sdg/components/Alert/AlertWC.svelte +3 -2
  116. package/src/sdg/components/Alert/_alert.html +110 -0
  117. package/src/sdg/{scss/components → components/Alert}/_alert.scss +1 -1
  118. package/src/sdg/components/Button/Button.svelte +50 -0
  119. package/src/sdg/components/Button/ButtonWC.svelte +36 -0
  120. package/src/sdg/components/Button/Test/buttonTest.html +349 -0
  121. package/src/sdg/components/Button/_button.html +186 -0
  122. package/src/sdg/components/Button/_button.scss +202 -0
  123. package/src/sdg/components/CharCount/_charCount.html +7 -0
  124. package/src/sdg/components/Checkbox/Checkbox.svelte +77 -0
  125. package/src/sdg/components/Checkbox/CheckboxWC.svelte +49 -0
  126. package/src/sdg/components/Checkbox/_checkbox.html +86 -0
  127. package/src/sdg/components/Checkbox/_checkbox.scss +70 -0
  128. package/src/sdg/components/Checkbox/updateInput.svelte.js +23 -0
  129. package/src/sdg/components/ChoiceGroup/ChoiceGroup.svelte +56 -0
  130. package/src/sdg/components/ChoiceGroup/ChoiceGroupWC.svelte +47 -0
  131. package/src/sdg/components/ChoiceGroup/Test/ChoiceGroupeEmbededTest.svelte +261 -0
  132. package/src/sdg/components/ChoiceGroup/Test/checkboxEmbeddedTest.html +1 -0
  133. package/src/sdg/components/ChoiceGroup/Test/checkboxTest.html +253 -0
  134. package/src/sdg/components/ChoiceGroup/Test/radiosEmbeddedTest.html +1 -0
  135. package/src/sdg/components/ChoiceGroup/Test/radiosTest.html +185 -0
  136. package/src/sdg/components/ChoiceGroup/ToggleSwitchGroupWC.svelte +56 -0
  137. package/src/sdg/components/ChoiceGroup/_choiceGroup.html +285 -0
  138. package/src/sdg/components/ChoiceGroup/_choiceGroup.scss +32 -0
  139. package/src/sdg/components/ChoiceGroup/_selectionButton.scss +53 -0
  140. package/src/sdg/components/ChoiceGroup/_selectionButtons.html +130 -0
  141. package/src/sdg/components/DropdownList/DropdownList.svelte +394 -0
  142. package/src/sdg/components/DropdownList/DropdownListButton/DropdownListButton.svelte +43 -0
  143. package/src/sdg/components/DropdownList/DropdownListButton/_dropdownListButton.scss +65 -0
  144. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItems.svelte +110 -0
  145. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsMultiple/DropdownListItemsMultiple.svelte +185 -0
  146. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsMultiple/_dropdownListItemsMultiple.scss +19 -0
  147. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsSingle/DropdownListItemsSingle.svelte +136 -0
  148. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsSingle/_dropdownListItemsSingle.scss +11 -0
  149. package/src/sdg/components/DropdownList/DropdownListItems/_dropdownListItems.scss +67 -0
  150. package/src/sdg/components/DropdownList/SelectWC.svelte +158 -0
  151. package/src/sdg/components/DropdownList/Test/DropdownListEmbeddedTest.svelte +89 -0
  152. package/src/sdg/components/DropdownList/Test/dropdownListEmbeddedTest.html +1 -0
  153. package/src/sdg/components/DropdownList/Test/dropdownListTest.html +194 -0
  154. package/src/sdg/components/DropdownList/Test/dropdownListTestUtils.js +113 -0
  155. package/src/sdg/components/DropdownList/_dropdownList.scss +73 -0
  156. package/src/sdg/components/DropdownList/_select.html +212 -0
  157. package/src/sdg/components/ExternalLink/ExternalLink.svelte +1 -1
  158. package/src/sdg/components/Fieldset/Fieldset.svelte +73 -0
  159. package/src/sdg/components/Fieldset/_fieldset.scss +95 -0
  160. package/src/sdg/components/FormError/FormError.svelte +51 -0
  161. package/src/sdg/components/FormError/_formError.scss +21 -0
  162. package/src/sdg/components/FormfieldRow/_formfieldRow.html +108 -0
  163. package/src/sdg/components/IconButton/IconButton.svelte +1 -1
  164. package/src/sdg/components/IconButton/_iconButton.scss +14 -0
  165. package/src/sdg/components/Label/Label.svelte +28 -0
  166. package/src/sdg/components/Label/LabelText.svelte +4 -0
  167. package/src/sdg/components/Label/_label.scss +19 -0
  168. package/src/sdg/components/Notice/Notice.svelte +1 -2
  169. package/src/sdg/components/Notice/NoticeWC.svelte +3 -0
  170. package/src/sdg/components/Notice/_notice.html +141 -0
  171. package/src/sdg/{scss/components → components/Notice}/_notice.scss +1 -1
  172. package/src/sdg/components/PivFooter/PivFooter.svelte +8 -9
  173. package/src/sdg/components/PivFooter/PivFooterWC.svelte +6 -14
  174. package/src/sdg/components/PivFooter/_pivFooter.html +153 -0
  175. package/src/sdg/{scss/components → components/PivFooter}/_pivFooter.scss +1 -1
  176. package/src/sdg/components/PivHeader/PivHeader.svelte +47 -53
  177. package/src/sdg/components/PivHeader/PivHeaderWC.svelte +9 -20
  178. package/src/sdg/components/PivHeader/Test/pivHeaderEmbeddedTest.html +1 -0
  179. package/src/sdg/components/PivHeader/Test/pivHeaderEmbeddedTest.svelte +28 -0
  180. package/src/sdg/components/PivHeader/Test/pivHeaderTest.html +43 -0
  181. package/src/sdg/components/PivHeader/_pivHeader.html +221 -0
  182. package/src/sdg/{scss/components → components/PivHeader}/_pivHeader.scss +55 -77
  183. package/src/sdg/components/RadioButton/_radioButton.html +24 -0
  184. package/src/sdg/components/RadioButton/_radioButton.scss +29 -0
  185. package/src/sdg/components/SearchBar/SearchBar.svelte +12 -32
  186. package/src/sdg/components/SearchBar/_searchBar.html +125 -0
  187. package/src/sdg/{scss/components → components/SearchBar}/_searchBar.scss +3 -3
  188. package/src/sdg/components/SearchInput/SearchInput.svelte +26 -4
  189. package/src/sdg/components/SearchInput/SearchInputWC.svelte +3 -1
  190. package/src/sdg/components/SearchInput/_searchInput.html +85 -0
  191. package/src/sdg/{scss/components → components/SearchInput}/_searchInput.scss +27 -2
  192. package/src/sdg/components/TextField/Doc/TextFieldDemo.svelte +143 -0
  193. package/src/sdg/components/TextField/Test/TextFieldEmbededTest.svelte +129 -0
  194. package/src/sdg/components/TextField/Test/textFieldEmbeddedTest.html +1 -0
  195. package/src/sdg/components/TextField/Test/textFieldTest.html +121 -0
  196. package/src/sdg/components/TextField/TextField.svelte +171 -0
  197. package/src/sdg/components/TextField/TextFieldWC.svelte +90 -0
  198. package/src/sdg/components/TextField/_textField.html +218 -0
  199. package/src/sdg/components/TextField/_textField.scss +110 -0
  200. package/src/sdg/components/TextField/textFieldUtils.js +19 -0
  201. package/src/sdg/components/ToTop/ToTop.svelte +2 -4
  202. package/src/sdg/components/ToTop/_toTop.html +45 -0
  203. package/src/sdg/{scss/components → components/ToTop}/_toTop.scss +2 -2
  204. package/src/sdg/components/ToggleSwitch/Test/ToggleSwitchEmbeddedTest.svelte +46 -0
  205. package/src/sdg/components/ToggleSwitch/Test/toggleSwitchEmbeddedTest.html +1 -0
  206. package/src/sdg/components/ToggleSwitch/Test/toggleSwitchTest.html +34 -0
  207. package/src/sdg/components/ToggleSwitch/ToggleSwitch.svelte +34 -0
  208. package/src/sdg/components/ToggleSwitch/ToggleSwitchWC.svelte +66 -0
  209. package/src/sdg/components/ToggleSwitch/_toggleSwitch.html +160 -0
  210. package/src/sdg/components/ToggleSwitch/_toggleSwitch.scss +97 -0
  211. package/src/sdg/components/utils.js +81 -1
  212. package/src/sdg/qc-sdg-test.js +6 -0
  213. package/src/sdg/scss/lib/_functions.scss +10 -2
  214. package/src/sdg/scss/lib/_mixins.scss +63 -26
  215. package/src/sdg/scss/qc-sdg.scss +1 -1
  216. package/src/sdg/scss/qc-sgd-no-grid.scss +30 -18
  217. package/src/sdg/scss/settings/_base.scss +5 -33
  218. package/src/sdg/scss/settings/_images.scss +30 -0
  219. package/src/sdg/scss/settings/_tokens.scss +23 -0
  220. package/src/sdg/scss/utilities/_display.scss +1 -1
  221. package/src/sdg/scss/utilities/_states.scss +13 -0
  222. package/tests/button.spec.ts +11 -0
  223. package/tests/choice-group.spec.ts +36 -0
  224. package/tests/dropdown-list.spec.ts +529 -0
  225. package/tests/icon.spec.ts +19 -0
  226. package/tests/pivHeader.spec.ts +22 -0
  227. package/tests/textfield.spec.ts +21 -0
  228. package/tests/toggle-switch.spec.ts +20 -0
  229. package/dist/img/arrow-up-white.svg +0 -3
  230. package/dist/img/chevron-blue.svg +0 -3
  231. package/dist/img/clipboard.svg +0 -8
  232. package/dist/img/error-white.svg +0 -1
  233. package/dist/img/error.svg +0 -1
  234. package/dist/img/exclamation-white.svg +0 -37
  235. package/dist/img/external-link-white.svg +0 -18
  236. package/dist/img/external-link.svg +0 -10
  237. package/dist/img/facebook.svg +0 -6
  238. package/dist/img/information-white.svg +0 -1
  239. package/dist/img/information.svg +0 -1
  240. package/dist/img/linkedin.svg +0 -5
  241. package/dist/img/loupe-piv-fonce.svg +0 -1
  242. package/dist/img/minus.svg +0 -6
  243. package/dist/img/qc-sprite.svg +0 -1
  244. package/dist/img/question-mark.svg +0 -47
  245. package/dist/img/success-white.svg +0 -1
  246. package/dist/img/success.svg +0 -1
  247. package/dist/img/twitter.svg +0 -8
  248. package/dist/img/warning.svg +0 -1
  249. package/dist/img/xclose-blue.svg +0 -6
  250. package/dist/img/xclose-white.svg +0 -1
  251. package/dist/img/youtube.svg +0 -3
  252. package/public/img/ampoule.svg +0 -1
  253. package/public/img/arrow-up-white.svg +0 -3
  254. package/public/img/chevron-blue.svg +0 -3
  255. package/public/img/chevron-white.svg +0 -3
  256. package/public/img/error-white.svg +0 -1
  257. package/public/img/error.svg +0 -1
  258. package/public/img/external-link-white.svg +0 -18
  259. package/public/img/facebook.svg +0 -6
  260. package/public/img/information-white.svg +0 -1
  261. package/public/img/information.svg +0 -1
  262. package/public/img/linkedin.svg +0 -5
  263. package/public/img/logo-piv-footer-mess.png +0 -0
  264. package/public/img/loupe-piv-droite.svg +0 -1
  265. package/public/img/loupe-piv-fonce.svg +0 -1
  266. package/public/img/note.svg +0 -1
  267. package/public/img/piv-bas-MCE-theme-clair.png +0 -0
  268. package/public/img/piv-bas-MCE-theme-sombre.png +0 -0
  269. package/public/img/piv-logo-pied-de-page.svg +0 -37
  270. package/public/img/plus.svg +0 -6
  271. package/public/img/qc-sprite.svg +0 -1
  272. package/public/img/quebec-logo.svg +0 -13
  273. package/public/img/success-white.svg +0 -1
  274. package/public/img/success.svg +0 -1
  275. package/public/img/twitter.svg +0 -8
  276. package/public/img/warning.svg +0 -1
  277. package/public/img/xclose-blue.svg +0 -6
  278. package/public/img/xclose-white.svg +0 -1
  279. package/public/img/youtube.svg +0 -3
  280. package/src/doc/scss/components/_button.scss +0 -61
  281. package/src/sdg/components/PivFooter/_defaultCopyright.svelte +0 -11
  282. package/src/sdg/components/PivHeader/_defaultLinks.svelte +0 -24
  283. package/src/sdg/scss/base/_fonts.scss +0 -29
  284. package/src/sdg/scss/base/_typography.scss +0 -94
  285. package/src/sdg/scss/components/_icons.scss +0 -169
  286. package/src/sdg/scss/components/_separator.scss +0 -5
  287. /package/dist/img/{loupe-piv-droite.svg → piv-search.svg} +0 -0
  288. /package/src/sdg/{scss/base → bases/colors}/_colors.scss +0 -0
  289. /package/src/sdg/{scss/base → bases/figures}/_figure.scss +0 -0
  290. /package/src/sdg/{scss → bases}/grid/_grid-lib.scss +0 -0
  291. /package/src/sdg/{scss → bases}/grid/_grid.scss +0 -0
  292. /package/src/sdg/{scss/base → bases/lists}/_lists.scss +0 -0
@@ -0,0 +1,185 @@
1
+
2
+ <qc-choice-group legend="Boutons de sélection"
3
+ selection-button
4
+ column-count="2"
5
+ name="tile-1"
6
+ >
7
+ <label>
8
+ <input type="radio"
9
+
10
+ value="1"
11
+ checked
12
+ />
13
+ <span class="qc-tile">
14
+ <span class="qc-tile-text">Option 1</span>
15
+ <span class="qc-tile-description">Ceci est une <b>longue</b> description servant à montrer l'affichage des boutons de sélection.</span>
16
+ </span>
17
+ </label>
18
+
19
+ <label>
20
+ <input type="radio"
21
+ value="2"
22
+ />
23
+ <span class="qc-tile">
24
+ <span class="qc-tile-text">Option 2</span>
25
+ </span>
26
+ </label>
27
+ <label>
28
+ <input type="radio"
29
+ value="3"
30
+ disabled
31
+ />
32
+ <span class="qc-tile">
33
+ <span class="qc-tile-text">Option 3 (désactivée)</span>
34
+ </span>
35
+ </label>
36
+ </qc-choice-group>
37
+
38
+ <qc-choice-group legend="Boutons de sélection inline"
39
+ selection-button
40
+ inline
41
+ column-count="2"
42
+ name="tile-2"
43
+
44
+ >
45
+ <label>
46
+ <input type="radio"
47
+ value="1"
48
+ checked
49
+ />
50
+ <span class="qc-tile">
51
+ <span class="qc-tile-text">Option 1</span>
52
+ </span>
53
+ </label>
54
+
55
+ <label>
56
+ <input type="radio"
57
+ value="2"
58
+ />
59
+ <span class="qc-tile">
60
+ <span class="qc-tile-text">Option 2</span>
61
+ </span>
62
+ </label>
63
+ <label>
64
+ <input type="radio"
65
+ value="3"
66
+ disabled
67
+ />
68
+ <span class="qc-tile">
69
+ <span class="qc-tile-text">Option 3 (désactivée)</span>
70
+ </span>
71
+ </label>
72
+ </qc-choice-group>
73
+
74
+ <div class="qc-row">
75
+ <div class="qc-col-sm-12 qc-col-lg-6">
76
+ <qc-choice-group legend="Exemple de base"
77
+ name="base-1"
78
+ >
79
+ <label>
80
+ <input type="radio"
81
+ value="1"
82
+ checked
83
+ />
84
+ <span >Option 1</span>
85
+ </label>
86
+ <label>
87
+ <input type="radio"
88
+
89
+ value="2"
90
+ />
91
+ <span >Option 2</span>
92
+ </label>
93
+ <label>
94
+ <input type="radio"
95
+
96
+ value="3"
97
+ disabled
98
+ />
99
+ <span >Option 3 (désactivée)</span>
100
+ </label>
101
+ </qc-choice-group>
102
+
103
+ <qc-choice-group legend="Invalid"
104
+ name="base-2"
105
+ invalid
106
+ required
107
+ >
108
+ <label>
109
+ <input type="radio"
110
+ value="1"
111
+ />
112
+ <span >Option 1</span>
113
+ </label>
114
+ <label>
115
+ <input type="radio"
116
+ value="2"
117
+ />
118
+ <span >Option 2</span>
119
+ </label>
120
+ <label>
121
+ <input type="radio"
122
+ value="3"
123
+ disabled
124
+ />
125
+ <span >Option 3 (désactivée)</span>
126
+ </label>
127
+ </qc-choice-group>
128
+ </div>
129
+ <div class="qc-col-sm-12 qc-col-lg-6">
130
+ <qc-choice-group legend="Compact"
131
+ name="compact-1"
132
+ compact
133
+ >
134
+ <label>
135
+ <input type="radio"
136
+ value="1"
137
+ checked
138
+ />
139
+ <span >Option 1</span>
140
+ </label>
141
+ <label>
142
+ <input type="radio"
143
+ value="2"
144
+ />
145
+ <span >Option 2</span>
146
+ </label>
147
+ <label>
148
+ <input type="radio"
149
+ value="3"
150
+ disabled
151
+ />
152
+ <span >Option 3 (désactivée)</span>
153
+ </label>
154
+ </qc-choice-group>
155
+
156
+ <qc-choice-group legend="Invalid"
157
+ name="compact-2"
158
+ compact
159
+ invalid
160
+ required
161
+ >
162
+ <label>
163
+ <input type="radio"
164
+ value="1"
165
+ />
166
+ <span >Option 1</span>
167
+ </label>
168
+ <label>
169
+ <input type="radio"
170
+ value="2"
171
+ />
172
+ <span >Option 2</span>
173
+ </label>
174
+ <label>
175
+ <input type="radio"
176
+ value="3"
177
+ disabled
178
+ />
179
+ <span >Option 3 (désactivée)</span>
180
+ </label>
181
+ </qc-choice-group>
182
+ </div>
183
+ </div>
184
+
185
+
@@ -0,0 +1,56 @@
1
+ <svelte:options customElement={{
2
+ tag: 'qc-toggle-switch-group',
3
+ shadow: 'none',
4
+ props: {
5
+ legend: {attribute:'legend', type: 'String'},
6
+ disabled: {attribute:'disabled', type: 'Boolean'},
7
+ justified: {attribute:'justified', type: 'Boolean'},
8
+ textAlign: {attribute:'text-align', type: 'String'},
9
+ maxWidth: {attribute:'max-width', type: 'String'},
10
+ }
11
+ }} />
12
+
13
+ <script>
14
+ import ToggleSwitch from "../ToggleSwitch/ToggleSwitch.svelte";
15
+ import ChoiceGroup from "./ChoiceGroup.svelte";
16
+
17
+ let {
18
+ disabled = $bindable(false),
19
+ items = $bindable([]),
20
+ justified = false,
21
+ textAlign,
22
+ maxWidth = "fit-content",
23
+ ...rest
24
+ } = $props();
25
+
26
+ let usedWidth = $derived.by(() => {
27
+ if (
28
+ maxWidth.match(/^\d+px$/)
29
+ || maxWidth.match(/^\d*\.?\d*rem$/)
30
+ || maxWidth.match(/^\d*\.?\d*em$/)
31
+ || maxWidth.match(/^\d*\.?\d*%$/)
32
+ ) {
33
+ return maxWidth;
34
+ } else {
35
+ return "fit-content";
36
+ }
37
+ });
38
+ </script>
39
+
40
+ <ChoiceGroup
41
+ elementsGap="md"
42
+ maxWidth={usedWidth}
43
+ {...rest}
44
+ >
45
+ {#each items as item}
46
+ <ToggleSwitch
47
+ id={item.id}
48
+ label={item.label}
49
+ bind:checked={item.checked}
50
+ disabled={item.disabled ?? disabled}
51
+ justified={justified ?? item.justified}
52
+ textAlign={textAlign ?? item.textAlign}
53
+ />
54
+ {/each}
55
+ </ChoiceGroup>
56
+
@@ -0,0 +1,285 @@
1
+ <h4 id="choice-group">Groupe de boutons radio et de cases à cocher (qc-choice-group)</h4>
2
+
3
+ <h5>Exemples</h5>
4
+ <p>
5
+ Les groupes d'éléments de choix sont également disponibles sous forme de <a href="#selection-button">boutons de sélection</a>.
6
+ </p>
7
+
8
+ <qc-doc-exemple caption="Exemple de groupes de boutons radio et de cases à cocher avec différents états">
9
+ <qc-choice-group legend="Sélectionnez vos options"
10
+ name="options-multiples"
11
+ >
12
+ <label>
13
+ <input type="checkbox"
14
+ value="1"
15
+ checked
16
+ />
17
+ <span >Option 1</span>
18
+ </label>
19
+ <label>
20
+ <input type="checkbox"
21
+ value="2"
22
+ />
23
+ <span >Option 2</span>
24
+ </label>
25
+ <label>
26
+ <input type="checkbox"
27
+ value="3"
28
+ disabled
29
+ />
30
+ <span >Option 3 (désactivée)</span>
31
+ </label>
32
+ </qc-choice-group>
33
+
34
+ <qc-choice-group legend="Sélectionnez une option"
35
+ name="choix-unique"
36
+ >
37
+ <label>
38
+ <input type="radio"
39
+ value="1"
40
+ checked
41
+ />
42
+ <span >Option 1</span>
43
+ </label>
44
+ <label>
45
+ <input type="radio"
46
+ value="2"
47
+ />
48
+ <span >Option 2</span>
49
+ </label>
50
+ <label>
51
+ <input type="radio"
52
+ value="3"
53
+ disabled
54
+ />
55
+ <span >Option 3 (désactivée)</span>
56
+ </label>
57
+ </qc-choice-group>
58
+ </qc-doc-exemple>
59
+
60
+ <qc-doc-exemple caption="Exemple d’un groupe au petit format">
61
+ <qc-choice-group legend="Sélectionnez vos options"
62
+ name="options-multiples"
63
+ compact
64
+ >
65
+ <label>
66
+ <input type="checkbox"
67
+ value="1"
68
+ checked
69
+ />
70
+ <span >Option 1</span>
71
+ </label>
72
+ <label>
73
+ <input type="checkbox"
74
+ value="2"
75
+ />
76
+ <span >Option 2</span>
77
+ </label>
78
+ <label>
79
+ <input type="checkbox"
80
+ value="3"
81
+ disabled
82
+ />
83
+ <span >Option 3 (désactivée)</span>
84
+ </label>
85
+ </qc-choice-group>
86
+
87
+ <qc-choice-group legend="Sélectionnez une option"
88
+ name="choix-unique"
89
+ compact
90
+ >
91
+ <label>
92
+ <input type="radio"
93
+ value="1"
94
+ checked
95
+ />
96
+ <span >Option 1</span>
97
+ </label>
98
+ <label>
99
+ <input type="radio"
100
+ value="2"
101
+ />
102
+ <span >Option 2</span>
103
+ </label>
104
+ <label>
105
+ <input type="radio"
106
+ value="3"
107
+ disabled
108
+ />
109
+ <span >Option 3 (désactivée)</span>
110
+ </label>
111
+ </qc-choice-group>
112
+ </qc-doc-exemple>
113
+
114
+ <qc-doc-exemple caption="Exemple de validation de formulaire avec des groupes de choix">
115
+ <form id="checkbox-form">
116
+ <qc-choice-group
117
+ legend="Sur quelle plateforme consultez-vous www.quebec.ca ?"
118
+ name="plateforme"
119
+ required
120
+ invalid-text="Veuillez sélectionner une plateforme."
121
+ >
122
+ <label>
123
+ <input type="checkbox"
124
+ value="ordinateur"
125
+ />
126
+ <span>Ordinateur</span>
127
+ </label>
128
+ <label>
129
+ <input type="checkbox"
130
+ value="tablette"
131
+ />
132
+ <span>Tablette</span>
133
+ </label>
134
+ <label>
135
+ <input type="checkbox"
136
+ value="telephone_intelligent"
137
+ />
138
+ <span>Téléphone intelligent</span>
139
+ </label>
140
+ </qc-choice-group>
141
+
142
+ <qc-choice-group
143
+ legend="Quel thème préférez-vous ?"
144
+ name="theme"
145
+ required
146
+ invalid-text="Veuillez sélectionner un thème."
147
+ >
148
+ <label>
149
+ <input type="radio"
150
+ value="clair"
151
+ />
152
+ <span>Le thème clair</span>
153
+ </label>
154
+ <label>
155
+ <input type="radio"
156
+ value="sombre"
157
+ />
158
+ <span>Le thème sombre</span>
159
+ </label>
160
+
161
+ </qc-choice-group>
162
+
163
+ <button class="qc-button qc-primary qc-compact" type="submit">
164
+ Soumettre
165
+ </button>
166
+ </form>
167
+
168
+ <script>
169
+
170
+ document
171
+ .getElementById("checkbox-form")
172
+ .addEventListener("submit", (event) => {
173
+ event.preventDefault();
174
+ let doSubmit = true;
175
+ event
176
+ .target
177
+ .querySelectorAll("qc-choice-group[required]")
178
+ .forEach(group => {
179
+ let valid = false;
180
+ group.querySelectorAll("input")
181
+ .forEach(checkbox => {
182
+ if (checkbox.checked) {
183
+ valid = true;
184
+ }
185
+ })
186
+ if (!valid) {
187
+ group.invalid = true;
188
+ doSubmit = false;
189
+ }
190
+ })
191
+ if(doSubmit) {
192
+ const formData = new FormData(event.target);
193
+ let alertParts = ["Formulaire soumis avec les données suivantes :"];
194
+ for (const [key, value] of formData.entries()) {
195
+ alertParts.push(`${key} : ${value}`);
196
+ }
197
+ alert(alertParts.join("\n"));
198
+ }
199
+ })
200
+ </script>
201
+ </qc-doc-exemple>
202
+
203
+
204
+ <h5 id="choice-group-doc">Attributs de qc-choice-group</h5>
205
+
206
+ <div class="table-overflow">
207
+ <table class="qc-table qc-striped component-attributes-description">
208
+ <thead>
209
+ <tr>
210
+ <th>Nom</th>
211
+ <th>Valeur attendue</th>
212
+ <th>Valeur par défaut</th>
213
+ <th>Description</th>
214
+ </tr>
215
+ </thead>
216
+ <tbody>
217
+ <tr>
218
+ <td>legend</td>
219
+ <td>Texte</td>
220
+ <td>""</td>
221
+ <td>Légende du groupe</td>
222
+ </tr>
223
+ <tr>
224
+ <td>name</td>
225
+ <td>Texte</td>
226
+ <td>""</td>
227
+ <td>Nom commun à tous les champs du groupe</td>
228
+ </tr>
229
+ <tr>
230
+ <td>compact</td>
231
+ <td>na</td>
232
+ <td>na</td>
233
+ <td>Affiche les champs au format compact</td>
234
+ </tr>
235
+ <tr>
236
+ <td>required</td>
237
+ <td>na</td>
238
+ <td>na</td>
239
+ <td>Indique que la sélection est obligatoire en ajoutant un astérisque dans la légende.</td>
240
+ </tr>
241
+ <tr>
242
+ <td>invalid</td>
243
+ <td>na</td>
244
+ <td>na</td>
245
+ <td>
246
+ Affiche le message d'erreur. Voir l'exemple de validation de formulaire avec des groupes de choix.
247
+ <br/>NB : `invalid` prend automatiquement la valeur `false` dès qu’un champ est coché.
248
+ </td>
249
+ </tr>
250
+ <tr>
251
+ <td>invalid-text</td>
252
+ <td>Texte</td>
253
+ <td>"Le champ {nom du champ} est obligatoire" ou "{field name} field is required"</td>
254
+ <td>Message d’erreur à afficher lorsque le groupe est invalide.</td>
255
+ </tr>
256
+ <tr>
257
+ <td>selection-button</td>
258
+ <td>na</td>
259
+ <td>na</td>
260
+ <td>Affiche les champs au format de boutons de sélection dans une grille.</td>
261
+ </tr>
262
+ <tr>
263
+ <td>column-count</td>
264
+ <td>Nombre</td>
265
+ <td>1</td>
266
+ <td><b>Boutons de sélection uniquement </b>: nombre de colonnes de la grille de boutons de sélection.
267
+ <br/> Si la fenêtre est au format mobile (<code>--qc-breakpoint-sm</code>), la grille passe automatiquement à une colonne.
268
+ </td>
269
+ </tr>
270
+ <tr>
271
+ <td>inline</td>
272
+ <td>na</td>
273
+ <td>na</td>
274
+ <td><b>Boutons de sélection uniquement</b> : affiche les boutons de sélection sur une rangée.</td>
275
+ </tr>
276
+ </tbody>
277
+ </table>
278
+ </div>
279
+
280
+ <p>Pour les autres attributs, voir la rubrique de <a href="#selection-button-attributes">boutons de sélection</a>.</p>
281
+
282
+ <h5>Zone d’ajout de contenu HTML</h5>
283
+
284
+ <p>Ce composant ne comporte qu'une seule zone d'ajout de contenu par défaut.</p>
285
+
@@ -0,0 +1,32 @@
1
+ @use "qc-sdg-lib" as *;
2
+ @use "selectionButton" as *;
3
+
4
+ label.qc-choicefield-label {
5
+ @extend %check-row;
6
+ }
7
+
8
+ input.qc-choicefield {
9
+
10
+ cursor: pointer;
11
+
12
+ min-width: token-value(spacer, md);
13
+ min-height: token-value(spacer, md);
14
+ max-width: token-value(spacer, md);
15
+ max-height: token-value(spacer, md);
16
+ border-width: rem(2);
17
+
18
+ flex-grow: 0;
19
+
20
+ &:focus {
21
+ outline: 2px solid token-value(color, blue, light);
22
+ outline-offset: 0;
23
+ border-color: token-value(color, blue, dark) !important;
24
+ }
25
+
26
+ &:checked {
27
+ border-color: token-value(color blue regular);
28
+ }
29
+ }
30
+
31
+
32
+
@@ -0,0 +1,53 @@
1
+ @use "qc-sdg-lib" as *;
2
+
3
+ label.qc-selection-button {
4
+ @include qc-formcontrol-box();
5
+ padding: token-value(spacer, sm);
6
+ min-width: 100%;
7
+
8
+ &::before {
9
+ border-style: solid;
10
+ border-width: rem(1);
11
+ border-color: token-value(color, grey, light);
12
+ }
13
+
14
+ &:hover::before {
15
+ border-color: token-value(color, blue, light);
16
+ }
17
+
18
+ &:has(input:checked)::before {
19
+ background-color: token-value(color, blue, pale);
20
+ }
21
+
22
+ &:has(input:disabled)::before {
23
+ background-color: token-value(color, grey, pale);
24
+ border-color: token-value(color, grey, light);
25
+ }
26
+ }
27
+
28
+ label.qc-selection-button-inline {
29
+ min-width: auto;
30
+ }
31
+
32
+ input.qc-selection-button {
33
+ &:focus {
34
+ outline: none;
35
+ }
36
+ }
37
+
38
+ .qc-tile {
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: token-value(spacer, xs);
42
+ min-height: token-value(spacer, md);
43
+ }
44
+
45
+ .qc-tile-text {
46
+ font-weight: token-value(font weight semi-bold);
47
+ min-height: token-value(spacer, md);
48
+ }
49
+
50
+ .qc-tile-description {
51
+ @include content-font(sm);
52
+ display: block;
53
+ }