qc-trousse-sdg 1.4.6 → 1.4.7

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 (57) hide show
  1. package/README.md +10 -0
  2. package/dist/css/qc-sdg-no-grid.min.css +1 -1
  3. package/dist/css/qc-sdg.min.css +1 -1
  4. package/dist/js/qc-sdg.min.js +1 -1
  5. package/package-lock.json +4689 -0
  6. package/package.json +1 -1
  7. package/public/css/qc-doc-sdg.css +38 -6
  8. package/public/css/qc-sdg-no-grid.css +47 -20
  9. package/public/css/qc-sdg.css +47 -20
  10. package/public/index.html +58 -20
  11. package/public/js/qc-doc-sdg.js +294 -204
  12. package/public/js/qc-sdg.js +663 -315
  13. package/src/doc/qc-doc-sdg.js +6 -1
  14. package/src/doc/scss/components/_exemple.scss +5 -1
  15. package/src/doc/scss/qc-doc-sdg.scss +22 -4
  16. package/src/sdg/bases/Icon/Icon.svelte +2 -0
  17. package/src/sdg/bases/links/_links.scss +18 -12
  18. package/src/sdg/components/Alert/Alert.svelte +28 -9
  19. package/src/sdg/components/Alert/AlertWC.svelte +20 -5
  20. package/src/sdg/components/Alert/Test/AlertSvelteTest.svelte +25 -0
  21. package/src/sdg/components/Alert/Test/alertBaselineTest.html +13 -0
  22. package/src/sdg/components/Alert/Test/alertSvelteTest.html +1 -0
  23. package/src/sdg/components/Alert/_alert.html +23 -11
  24. package/src/sdg/components/Checkbox/Checkbox.svelte +6 -5
  25. package/src/sdg/components/DropdownList/DropdownList.svelte +65 -14
  26. package/src/sdg/components/DropdownList/DropdownListButton/DropdownListButton.svelte +2 -6
  27. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItems.svelte +4 -22
  28. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsMultiple/DropdownListItemsMultiple.svelte +2 -1
  29. package/src/sdg/components/DropdownList/DropdownListItems/DropdownListItemsSingle/DropdownListItemsSingle.svelte +2 -1
  30. package/src/sdg/components/DropdownList/SelectWC.svelte +39 -13
  31. package/src/sdg/components/DropdownList/Test/DropdownListSvelteTest.svelte +2 -2
  32. package/src/sdg/components/DropdownList/Test/dropdownListBaselineTest.html +7 -0
  33. package/src/sdg/components/DropdownList/_dropdownList.scss +7 -5
  34. package/src/sdg/components/DropdownList/_select.html +31 -5
  35. package/src/sdg/components/ExternalLink/ExternalLink.svelte +36 -74
  36. package/src/sdg/components/ExternalLink/ExternalLinkWC.svelte +44 -1
  37. package/src/sdg/components/ExternalLink/externalLinkBaselineTest.html +45 -0
  38. package/src/sdg/components/Fieldset/_fieldset.scss +1 -1
  39. package/src/sdg/components/Label/LabelText.svelte +2 -1
  40. package/src/sdg/components/Label/_label.scss +10 -2
  41. package/src/sdg/components/PivFooter/_pivFooter.html +4 -4
  42. package/src/sdg/components/TextField/Test/TextFieldEmbededTest.svelte +19 -3
  43. package/src/sdg/components/TextField/Test/textFieldBaselineTest.html +5 -2
  44. package/src/sdg/components/TextField/TextField.svelte +12 -6
  45. package/src/sdg/components/TextField/TextFieldWC.svelte +18 -6
  46. package/src/sdg/components/TextField/textFieldUtils.js +3 -2
  47. package/src/sdg/components/utils.js +23 -0
  48. package/src/sdg/qc-sdg-test.js +2 -1
  49. package/src/sdg/scss/lib/_mixins.scss +6 -0
  50. package/src/sdg/scss/utilities/_states.scss +1 -1
  51. package/tests/alert-baseline.spec.ts +23 -0
  52. package/tests/alert-svelte.spec.ts +23 -0
  53. package/tests/buildSvelteTestsIgnore.json +2 -1
  54. package/tests/dropdown-list-baseline.spec.ts +8 -0
  55. package/tests/external-link-baseline.spec.ts +30 -0
  56. package/tests/textfield-baseline.spec.ts +5 -5
  57. package/tests/textfield-svelte.spec.ts +5 -5
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import {Utils} from "../../../utils";
3
+ import {tick} from "svelte";
3
4
 
4
5
  let {
5
6
  displayedItems,
@@ -87,7 +88,7 @@
87
88
  }
88
89
  }
89
90
 
90
- Utils.sleep(5).then(() => {
91
+ tick().then(() => {
91
92
  if (canExit(event, index)) {
92
93
  handleExit(event.key);
93
94
  }
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import {Utils} from "../../../utils";
3
+ import {tick} from "svelte";
3
4
 
4
5
  const selectedElementCLass = "qc-dropdown-list-single-selected";
5
6
 
@@ -77,7 +78,7 @@
77
78
  handleSelection(event, item);
78
79
  }
79
80
 
80
- Utils.sleep(5).then(() => {
81
+ tick().then(() => {
81
82
  if (canExit(event, index)) {
82
83
  handleExit(event.key);
83
84
  }
@@ -13,7 +13,8 @@
13
13
  placeholder: {attribute: 'placeholder', type: 'String'},
14
14
  searchPlaceholder: {attribute: 'search-placeholder', type: 'String'},
15
15
  noOptionsMessage: {attribute: 'no-options-message', type: 'String'},
16
- multiple: {attribute: 'multiple', type: 'Boolean'}
16
+ multiple: {attribute: 'multiple', type: 'Boolean'},
17
+ expanded: {attribute: 'expanded', type: 'Boolean', reflect: true},
17
18
  }
18
19
  }}"/>
19
20
 
@@ -31,14 +32,15 @@
31
32
  label,
32
33
  placeholder,
33
34
  width,
35
+ expanded = $bindable(false),
34
36
  ...rest
35
37
  } = $props();
36
38
 
37
39
  let selectElement = $state();
38
40
  let items = $state();
39
41
  let labelElement = $state();
40
- let observer = new MutationObserver(setupItemsList);
41
- let observerOptions = {
42
+ const observer = Utils.createMutationObserver($host(), setupItemsList);
43
+ const observerOptions = {
42
44
  childList: true,
43
45
  attributes: true,
44
46
  subtree: true,
@@ -48,6 +50,7 @@
48
50
  let errorElement = $state();
49
51
  let parentRow = $derived($host().closest(".qc-formfield-row"));
50
52
  let internalChange = false;
53
+ let previousValue = $state(value);
51
54
 
52
55
  onMount(() => {
53
56
  selectElement = $host().querySelector("select");
@@ -55,12 +58,14 @@
55
58
  if (labelElement) {
56
59
  label = labelElement.innerHTML;
57
60
  }
61
+
58
62
  if (selectElement) {
59
63
  multiple = selectElement.multiple;
60
64
  disabled = selectElement.disabled;
61
65
 
62
66
  selectElement.addEventListener("change", handleSelectChange);
63
- observer.observe(selectElement, observerOptions);
67
+
68
+ observer?.observe(selectElement, observerOptions);
64
69
  }
65
70
  setupItemsList();
66
71
  $host().classList.add("qc-select");
@@ -75,19 +80,39 @@
75
80
  if (!selectElement) return;
76
81
  if (!selectElement.options) return;
77
82
  internalChange = true;
78
- let newOptionSelected = false;
79
83
  for (const option of selectElement.options) {
80
- const selected = value.includes(option.value);
81
- if (selected !== option.selected) {
82
- option.toggleAttribute("selected", selected);
83
- option.selected = selected;
84
- newOptionSelected = true;
84
+ const selected = value.includes(option.value);
85
+ if (selected !== option.selected) {
86
+ option.toggleAttribute("selected", selected);
87
+ option.selected = selected;
85
88
  }
86
89
  }
87
- if (newOptionSelected) {
88
- selectElement.dispatchEvent(new Event('change'));
90
+ tick().then(() => internalChange = false);
91
+ });
92
+
93
+ $effect(() => {
94
+ if (previousValue.toString() !== value.toString()) {
95
+ previousValue = value;
96
+ selectElement?.dispatchEvent(new CustomEvent('change', {detail: value}));
97
+ }
98
+ });
99
+
100
+ $effect(() => {
101
+ if (expanded) {
102
+ selectElement?.dispatchEvent(
103
+ new CustomEvent('qc.select.show', {
104
+ bubbles: true,
105
+ composed: true
106
+ })
107
+ );
108
+ } else {
109
+ selectElement?.dispatchEvent(
110
+ new CustomEvent('qc.select.hide', {
111
+ bubbles: true,
112
+ composed: true
113
+ })
114
+ );
89
115
  }
90
- tick().then(() => internalChange = false)
91
116
  });
92
117
 
93
118
  $effect(() => {
@@ -134,6 +159,7 @@
134
159
  {multiple}
135
160
  {disabled}
136
161
  {required}
162
+ bind:expanded
137
163
  {...rest}
138
164
  />
139
165
  <link rel='stylesheet' href='{Utils.cssPath}'>
@@ -61,10 +61,10 @@
61
61
  items={multipleChoiceOptions}
62
62
  />
63
63
 
64
- <div class="qc-formfield-row">
64
+ <div class="qc-formfield-row" style="margin-top: 0;">
65
65
  <DropdownList
66
66
  id="dropdown-list-invalid"
67
- label="État invalide"
67
+ label="État initialement invalide dans .qc-formfield-row"
68
68
  invalid="true"
69
69
  items={invalidOptions}
70
70
  />
@@ -27,6 +27,13 @@
27
27
  selectElement.addEventListener("change", (event) => {
28
28
  console.log("Option sélectionnée :", event.target.value);
29
29
  });
30
+
31
+ selectElement.addEventListener("qc.select.show", (event) => {
32
+ console.log("qc.select.show event:", event);
33
+ });
34
+ selectElement.addEventListener("qc.select.hide", (event) => {
35
+ console.log("qc.select.hide event:", event);
36
+ });
30
37
  </script>
31
38
 
32
39
  <div style="height: 40rem;">
@@ -55,16 +55,18 @@ $border: 1;
55
55
 
56
56
  .qc-dropdown-list-expanded {
57
57
  position: absolute;
58
- width: calc(100% + 2px);
59
- left: -(rem($border));
60
- right: -(rem($border));
61
- top: 100%;
58
+ width: calc(100% + 2 * var(--dropdown-button-border)px);
59
+ left: calc(var(--dropdown-button-border) * $rem-ratio * -1rem);
60
+ right: calc(var(--dropdown-button-border) * $rem-ratio * -1rem);
61
+ top: calc(var(--dropdown-items-top-offset) * $rem-ratio * 1rem);
62
+ //top: 100%;
62
63
  z-index: 11; // Index supérieur à l'index du mixin qc-formcontrol-box
63
64
 
64
65
  background-color: token-value(color, background);
65
66
  border-left: rem($border) solid token-value(color, grey, medium);
66
67
  border-right: rem($border) solid token-value(color, grey, medium);
67
- border-bottom: rem($border) solid token-value(color, grey, medium);
68
+ border-bottom: calc(var(--dropdown-items-bottom-border) * $rem-ratio * 1rem) solid token-value(color, grey, medium);
69
+ border-top: calc(var(--dropdown-items-top-border) * $rem-ratio * 1rem) solid token-value(color, grey, medium);
68
70
  }
69
71
 
70
72
  .qc-dropdown-list-hidden {
@@ -26,6 +26,20 @@
26
26
  </select>
27
27
  </qc-select>
28
28
 
29
+ <script>
30
+ const selectElement = document.getElementById("select-single-choice");
31
+
32
+ selectElement.addEventListener("change", (event) => {
33
+ console.log("Option sélectionnée :", event.target.value);
34
+ });
35
+ selectElement.addEventListener("qc.select.show", () => {
36
+ console.log("Options affichées");
37
+ });
38
+ selectElement.addEventListener("qc.select.hide", () => {
39
+ console.log("Options cachées");
40
+ });
41
+ </script>
42
+
29
43
  <qc-select id="qc-select-single-choice-search" enable-search>
30
44
  <label for="select-single-choice-search">Choix unique avec recherche</label>
31
45
  <select id="select-single-choice-search">
@@ -201,11 +215,11 @@
201
215
  <div class="table-overflow">
202
216
  <table class="qc-table qc-striped component-attributes-description">
203
217
  <thead>
204
- <tr>
205
- <th>Nom</th>
206
- <th>Type</th>
207
- <th>Description</th>
208
- </tr>
218
+ <tr>
219
+ <th>Nom</th>
220
+ <th>Type</th>
221
+ <th>Description</th>
222
+ </tr>
209
223
  </thead>
210
224
  <tbody>
211
225
  <tr>
@@ -213,9 +227,21 @@
213
227
  <td>Tableau de chaîne de caractères</td>
214
228
  <td>Valeur(s) sélectionnée(s) dans la liste déroulante</td>
215
229
  </tr>
230
+ <tr>
231
+ <td>expanded</td>
232
+ <td>Booléen</td>
233
+ <td>Indique que la liste déroulante est ouverte</td>
234
+ </tr>
216
235
  </tbody>
217
236
  </table>
218
237
  </div>
219
238
 
239
+ <h5>Événements JS</h5>
240
+ <ul>
241
+ <li>Un événement JS <code class="qc-bg-color-grey-pale">change</code> est émis lors du changement de valeur sélectionnée dans la liste déroulante.</li>
242
+ <li>Un événement JS <code class="qc-bg-color-grey-pale">qc.select.show</code> est émis lorsqu'une liste déroulante est ouverte.</li>
243
+ <li>Un événement JS <code class="qc-bg-color-grey-pale">qc.select.hide</code> est émis lorsqu'une liste déroulante est fermée.</li>
244
+ </ul>
245
+
220
246
  <h5>Zone d'ajout de contenu HTML</h5>
221
247
  <p>Ce composant ne comporte qu'une seule zone d'ajout de contenu.</p>
@@ -1,96 +1,58 @@
1
1
  <script>
2
2
  import {Utils} from "../utils";
3
- import {onMount} from "svelte";
3
+ import Icon from "../../bases/Icon/Icon.svelte";
4
+ import {tick} from "svelte";
4
5
 
5
- const {
6
+ let {
6
7
  externalIconAlt = Utils.getPageLanguage() === 'fr'
7
8
  ? "Ce lien dirige vers un autre site."
8
- : "This link directs to another site."
9
+ : "This link directs to another site.",
10
+ links = [],
11
+ isUpdating = $bindable(false),
12
+ nestedExternalLinks = false
9
13
  } = $props();
10
14
 
11
15
  let imgElement = $state();
16
+ let processedLinks = new Set();
12
17
 
13
- function createVisibleNodesTreeWalker() {
14
- return document.createTreeWalker(
15
- imgElement.parentElement,
16
- NodeFilter.SHOW_ALL,
17
- {
18
- acceptNode: node => {
19
- if (node instanceof Element) {
20
- if (node.hasAttribute('hidden')) {
21
- return NodeFilter.FILTER_REJECT;
22
- }
23
- const style = window.getComputedStyle(node);
24
- // Si l'élément est masqué par CSS (display ou visibility), on l'ignore
25
- if (style.display === 'none'
26
- || style.visibility === 'hidden'
27
- || style.position === 'absolute') {
28
- return NodeFilter.FILTER_REJECT;
29
- }
30
- }
31
- if (!node instanceof Text) {
32
- return NodeFilter.FILTER_SKIP;
33
- }
34
-
35
- // Ignore les nœuds vides
36
- if (!/\S/.test(node.textContent)) {
37
- return NodeFilter.FILTER_SKIP;
38
- }
39
-
40
- return NodeFilter.FILTER_ACCEPT;
41
- }
42
- }
43
- );
44
- }
45
-
46
- onMount(() => {
47
- imgElement.parentElement.querySelectorAll('a').forEach(link => {
48
-
49
- // Crée un TreeWalker pour parcourir uniquement les nœuds texte visibles
50
- const walker = createVisibleNodesTreeWalker();
51
-
52
- let lastTextNode = null;
53
- while (walker.nextNode()) {
54
- lastTextNode = walker.currentNode;
55
- }
56
- // S'il n'y a pas de nœud texte visible, on ne fait rien
57
- if (!lastTextNode) {
18
+ function addExternalLinkIcon(links) {
19
+ links.forEach(link => {
20
+ if (processedLinks.has(link.innerHTML)) {
58
21
  return;
59
22
  }
60
23
 
61
- // Séparer le contenu du dernier nœud texte en deux parties :
62
- // le préfixe (éventuel) et le dernier mot
63
- const text = lastTextNode.textContent;
64
- const match = text.match(/^([\s\S]*\s)?(\S+)\s*$/m);
65
- if (!match) {
66
- return;
67
- }
24
+ let linkContent = link.innerHTML;
25
+ linkContent = `<span class="qc-ext-link-text">${linkContent}</span>&nbsp;${imgElement.outerHTML}`;
68
26
 
69
- const prefix = match[1] || "";
70
- const lastWord = match[2].replace(/([\/\-\u2013\u2014])/g, "$1<wbr>");
27
+ link.innerHTML = linkContent;
28
+ processedLinks.add(linkContent);
29
+ });
30
+ }
71
31
 
72
- // Crée un span avec white-space: nowrap pour empêcher le saut de ligne de l'image de lien externe
73
- const span = document.createElement('span');
74
- span.classList.add('img-wrap')
75
- span.innerHTML = `${lastWord}`;
76
- span.appendChild(imgElement)
32
+ $effect(() => {
33
+ if (nestedExternalLinks || links.length <= 0 || !imgElement) {
34
+ return;
35
+ }
77
36
 
78
- // Met à jour le nœud texte : on garde le préfixe et on insère le span après
79
- if (prefix) {
80
- lastTextNode.textContent = prefix;
81
- lastTextNode.parentNode.insertBefore(span, lastTextNode.nextSibling);
82
- } else {
83
- lastTextNode.parentNode.replaceChild(span, lastTextNode);
84
- }
37
+ isUpdating = true;
38
+
39
+ tick().then(() => {
40
+ addExternalLinkIcon(links);
41
+ return tick();
42
+ }).then(() => {
43
+ isUpdating = false;
85
44
  });
86
45
  });
87
46
  </script>
88
47
 
89
- <span bind:this={imgElement}
90
- role="img"
91
- class="qc-ext-link-img"
92
- aria-label={externalIconAlt}>
93
- </span>
48
+ <div hidden>
49
+ <Icon
50
+ type="external-link"
51
+ alt={externalIconAlt}
52
+ bind:rootElement={imgElement}
53
+ class="qc-ext-link-img"
54
+ />
55
+ </div>
94
56
 
95
57
 
96
58
 
@@ -8,8 +8,51 @@
8
8
 
9
9
  <script>
10
10
  import ExternalLink from "./ExternalLink.svelte";
11
+ import {onDestroy, onMount, tick} from "svelte";
12
+ import {Utils} from "../utils";
11
13
 
12
14
  const props = $props();
15
+ const nestedExternalLinks = $host().querySelector('qc-external-link');
16
+
17
+ let links = $state([]);
18
+ const observer = Utils.createMutationObserver($host(), refreshLinks);
19
+ let isUpdating = $state(false);
20
+ let pendingUpdate = false;
21
+
22
+ function queryLinks() {
23
+ return Array.from($host().querySelectorAll('a'));
24
+ }
25
+
26
+ function refreshLinks() {
27
+ if (isUpdating || pendingUpdate) {
28
+ return;
29
+ }
30
+ pendingUpdate = true;
31
+ tick().then(() => {
32
+ if (isUpdating) {
33
+ pendingUpdate = false;
34
+ return;
35
+ }
36
+
37
+ links = queryLinks();
38
+ pendingUpdate = false;
39
+ });
40
+ }
41
+
42
+ onMount(() => {
43
+ $host().classList.add('qc-external-link');
44
+ links = queryLinks();
45
+
46
+ observer?.observe($host(), {
47
+ childList: true,
48
+ characterData: true,
49
+ subtree: true,
50
+ });
51
+ });
52
+
53
+ onDestroy(() => {
54
+ observer?.disconnect();
55
+ });
13
56
  </script>
14
57
 
15
- <ExternalLink {...props} />
58
+ <ExternalLink {links} bind:isUpdating {nestedExternalLinks} {...props} />
@@ -0,0 +1,45 @@
1
+ <div style="border: 1px solid var(--qc-color-text-primary); padding: var(--qc-spacer-sm); max-width: 376px;">
2
+ <p>
3
+ <qc-external-link>
4
+ <a href="#multi-links"
5
+ target="_blank"
6
+ rel="noreferrer nofollow"
7
+ data-external-link="true"
8
+ >
9
+ https:/<wbr>/<wbr>www.quebec.ca/<wbr>gouvernement/<wbr>ministere/<wbr>travail/<wbr>lois-<wbr>reglements#c335465
10
+ </a>
11
+ </qc-external-link>
12
+ </p>
13
+ </div>
14
+
15
+ <p class="qc-font-size-xl">
16
+ Lorem ipsum
17
+ <qc-external-link><a href="http://www.external.domain.com/">Lorem ipsum dolor sit amet, consectetur
18
+ adipiscing</a></qc-external-link>
19
+ elit
20
+ </p>
21
+ <p class="qc-font-size-lg">
22
+ Lorem ipsum
23
+ <qc-external-link><a href="http://www.external.domain.com/">Lorem ipsum dolor sit amet, consectetur
24
+ adipiscing</a></qc-external-link>
25
+ elit
26
+ </p>
27
+ <p class="qc-font-size-md">
28
+ Lorem ipsum
29
+ <qc-external-link><a href="http://www.external.domain.com/">Lorem ipsum dolor sit amet, consectetur
30
+ adipiscing</a></qc-external-link>
31
+ elit
32
+ </p>
33
+ <p class="qc-font-size-sm">
34
+ Lorem ipsum
35
+ <qc-external-link><a href="http://www.external.domain.com/">Lorem ipsum dolor sit amet, consectetur
36
+ adipiscing</a></qc-external-link>
37
+ elit
38
+ </p>
39
+
40
+ <p class="qc-font-size-md">
41
+ <qc-external-link id="multi-links">
42
+ <a href="http://www.external.domain.com/">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</a>
43
+ <a href="https://www.google.com/">Google</a>
44
+ </qc-external-link>
45
+ </p>
@@ -7,9 +7,9 @@
7
7
  margin: 0 0 rem(32);
8
8
  justify-items: start;
9
9
  legend {
10
- font-weight: token-value(font weight content bold);
11
10
  display: inline-block;
12
11
  margin-bottom: token-value(spacer, md);
12
+ white-space: nowrap;
13
13
  }
14
14
  &.qc-compact {
15
15
  margin-bottom: token-value(spacer, sm);
@@ -1,4 +1,5 @@
1
1
  <script>
2
2
  let {text, required} = $props()
3
3
  </script>
4
- {@html text}{#if required}<span class="qc-required" aria-hidden="true">*</span>{/if}
4
+
5
+ <span class="qc-label-text">{@html text}</span>{#if required}<span class="qc-required" aria-hidden="true">*</span>{/if}
@@ -1,9 +1,10 @@
1
1
  @use "qc-sdg-lib" as *;
2
2
 
3
3
  .qc-label {
4
- font-weight: token-value(font weight content bold);
5
- display: block;
4
+ display: inline-block;
6
5
  width: fit-content;
6
+ white-space: nowrap;
7
+ margin: 0;
7
8
 
8
9
  &.qc-compact {
9
10
  font-size: token-value(font size sm);
@@ -18,3 +19,10 @@
18
19
  cursor: not-allowed;
19
20
  }
20
21
  }
22
+
23
+ .qc-label-text {
24
+ white-space: wrap;
25
+ margin: 0;
26
+
27
+ @include content-font(md, bold);
28
+ }
@@ -70,7 +70,7 @@
70
70
  <td>Le chemin de l’image en thème clair.</td>
71
71
  <td>Le chemin vers l’image dist/img/QUEBEC_couleur.svg de la trousse</td>
72
72
  <td>Adresse de l’image du pied de page en thème clair (fond transparent, texte et drapeaux en
73
- couleur, voir <a href="#piv-footer-ex-2">l’exemple de pied de page PIV personnalisé</a>).
73
+ couleur, voir <a href="#piv-footer-ex-2">l’exemple de pied de page du PIV personnalisé</a>).
74
74
  </td>
75
75
  </tr>
76
76
  <tr>
@@ -78,7 +78,7 @@
78
78
  <td>Le chemin de l’image en thème sombre.</td>
79
79
  <td>Le chemin vers l’image dist/img/QUEBEC_blanc.svg de la trousse</td>
80
80
  <td>Adresse de l’image du pied de page en thème sombre (fond transparent, texte et drapeaux en
81
- blanc, voir <a href="#piv-footer-ex-2">l’exemple de pied de page PIV personnalisé</a>).
81
+ blanc, voir <a href="#piv-footer-ex-2">l’exemple de pied de page du PIV personnalisé</a>).
82
82
  </td>
83
83
  </tr>
84
84
  <tr>
@@ -129,7 +129,7 @@
129
129
  </table>
130
130
  </div>
131
131
 
132
- <qc-notice type="information">Les images du pied de page PIV doivent respecter
132
+ <qc-notice type="information">Les images du pied de page du PIV doivent respecter
133
133
  <qc-external-link><a href="https://www.piv.gouv.qc.ca/fileadmin/documents/guide/section1_general.pdf">les
134
134
  normes graphiques du système d’identification visuelle.</a>. Nous vous invitons à privilégier le format
135
135
  SVG, qui permet de conserver la lisibilité de l’image en cas de zoom.
@@ -140,7 +140,7 @@
140
140
 
141
141
  <p>Ci-dessous, les zones d’ajout de contenu HTML (balise &lt;slot&gt;) délimitées en pointillé.</p>
142
142
  <qc-doc-exemple id="qc-piv-footer-slots"
143
- caption="Présentation des zones d’ajout de contenu du pied de page PIV">
143
+ caption="Présentation des zones d’ajout de contenu du pied de page du PIV">
144
144
  <qc-piv-footer>
145
145
  <div style="border:2px dashed;padding: var(--qc-spacer-xs);">
146
146
  Contenu par défaut
@@ -28,6 +28,7 @@
28
28
  >
29
29
  <input type="text"
30
30
  name="text-md"
31
+ id="text-md"
31
32
  placeholder="Long placeholder lorem ipsum dolor sit amet"
32
33
  />
33
34
  </TextField>
@@ -39,6 +40,7 @@
39
40
  required>
40
41
  <input type="text"
41
42
  name="text-lg"
43
+ id="text-lg"
42
44
  />
43
45
  </TextField>
44
46
 
@@ -54,10 +56,24 @@
54
56
  />
55
57
  </TextField>
56
58
 
59
+ <div style="width: 500px; max-width: 100%;padding: 10px; border: 1px solid #ccc;">
60
+ <TextField
61
+ label="Très large"
62
+ size="xl"
63
+
64
+ >
65
+ <input type="text"
66
+ placeholder="Long placeholder lorem ipsum dolor sit amet"
67
+ name="text-xl"
68
+ disabled
69
+ />
70
+ </TextField>
71
+ </div>
72
+
57
73
  <div class="qc-formfield-row">
58
74
  <TextField
59
- label="Combiné 1"
60
- size="sm"
75
+ label="Combiné 1 Long placeholder lorem ipsum dolor sit amet"
76
+ size="lg"
61
77
  >
62
78
  <input type="text"
63
79
  placeholder="Long placeholder lorem ipsum dolor sit amet"
@@ -66,7 +82,7 @@
66
82
  </TextField>
67
83
 
68
84
  <TextField
69
- label="Combiné 2"
85
+ label="Combiné 2 Long placeholder lorem ipsum dolor sit amet"
70
86
  size="xs"
71
87
  >
72
88
  <input type="text"
@@ -22,17 +22,20 @@
22
22
  >
23
23
  <input type="text"
24
24
  name="text-md"
25
+ id="text-md"
25
26
  placeholder="Long placeholder lorem ipsum dolor sit amet"
26
27
  />
27
28
  </qc-textfield>
28
29
 
29
30
  <qc-textfield name="text-lg"
30
- label="Large"
31
31
  size="lg"
32
32
  placeholder="Long placeholder lorem ipsum dolor sit amet"
33
- required>
33
+ >
34
+ <label for="text-lg">Large</label>
34
35
  <input type="text"
35
36
  name="text-lg"
37
+ id="text-lg"
38
+ required
36
39
  />
37
40
  </qc-textfield>
38
41
  <qc-textfield