qc-trousse-sdg 1.4.5 → 1.4.6

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 (32) hide show
  1. package/README.md +6 -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.json +1 -1
  6. package/plugins/buildHtmlDoc.js +5 -1
  7. package/public/css/qc-doc-sdg.css +31 -28
  8. package/public/css/qc-sdg-no-grid.css +39 -25
  9. package/public/css/qc-sdg.css +39 -25
  10. package/public/index.html +24 -31
  11. package/public/js/qc-doc-sdg.js +8305 -4286
  12. package/public/js/qc-sdg.js +8896 -5591
  13. package/rollup.config.js +3 -4
  14. package/src/doc/components/Code.svelte +13 -5
  15. package/src/doc/components/Exemple.svelte +0 -13
  16. package/src/doc/scss/components/_code.scss +4 -21
  17. package/src/doc/scss/components/_exemple.scss +21 -0
  18. package/src/doc/scss/qc-doc-sdg.scss +1 -0
  19. package/src/sdg/bases/links/_links.html +10 -10
  20. package/src/sdg/components/Alert/_alert.html +2 -2
  21. package/src/sdg/components/ChoiceGroup/_choiceGroup.html +0 -2
  22. package/src/sdg/components/FormfieldRow/_formfieldRow.html +7 -7
  23. package/src/sdg/components/Notice/_notice.html +3 -3
  24. package/src/sdg/components/PivHeader/Test/pivHeaderBaselineTest.html +2 -2
  25. package/src/sdg/components/PivHeader/Test/pivHeaderEmbeddedTest.svelte +2 -1
  26. package/src/sdg/components/PivHeader/_pivHeader.html +2 -2
  27. package/src/sdg/components/PivHeader/_pivHeader.scss +6 -4
  28. package/src/sdg/components/TextField/TextFieldWC.svelte +10 -8
  29. package/src/sdg/components/TextField/_textField.html +0 -5
  30. package/src/sdg/components/utils.js +55 -14
  31. package/src/sdg/components/CharCount/_charCount.html +0 -7
  32. package/src/sdg/components/RadioButton/_radioButton.html +0 -24
package/rollup.config.js CHANGED
@@ -18,12 +18,11 @@ import buildSvelteTests from "./plugins/buildSvelteTests";
18
18
 
19
19
  const
20
20
  dev_process = (process.env.npm_lifecycle_event == 'dev'),
21
- version_process = (process.env.npm_lifecycle_event == 'version'),
22
21
  build_process = (process.env.npm_lifecycle_event == 'build')
23
22
  ;
24
23
  const verbose = false;
25
24
  const includePaths = [
26
- dev_process && 'src/doc/scss',
25
+ !build_process && 'src/doc/scss',
27
26
  'src/sdg/scss',
28
27
  "src",
29
28
  ].filter(Boolean);
@@ -66,7 +65,7 @@ const scssOptions = {
66
65
  cssReplace({
67
66
  data: {
68
67
  'pkg-version': pkg.version,
69
- 'dev-env': dev_process ? 'true' : 'false',
68
+ 'dev-env': !build_process ? 'true' : 'false',
70
69
  }
71
70
  })
72
71
  ])
@@ -95,7 +94,7 @@ let
95
94
  compilerOptions: {
96
95
  // enable run-time checks
97
96
  customElement: true,
98
- dev: dev_process,
97
+ dev: !build_process,
99
98
  cssHash: ({ hash, name, filename, css }) => {
100
99
  // replacement of default `svelte-${hash(css)}`
101
100
  return `qc-hash-${hash(css)}`;
@@ -14,6 +14,8 @@
14
14
  import pretty from "pretty";
15
15
  import jsBeautify from "js-beautify";
16
16
 
17
+ const copyButtonTimeout = 2000;
18
+
17
19
  let {
18
20
  targetId = '',
19
21
  rawCode = '',
@@ -23,11 +25,14 @@
23
25
 
24
26
  let hlCode = $state();
25
27
  let prettyCode = $state();
28
+ let copied = $state(false);
26
29
 
27
30
  function copy() {
28
31
  navigator.clipboard.writeText(prettyCode);
29
- this.classList.add('copied')
30
- setTimeout(() => {this.classList.remove('copied')}, 500)
32
+ copied = true;
33
+ setTimeout(() => {
34
+ copied = false;
35
+ }, copyButtonTimeout);
31
36
  }
32
37
 
33
38
  function updateHLCode(rawCode, targetId) {
@@ -53,10 +58,13 @@
53
58
 
54
59
  <pre
55
60
  ><code class="hljs"
56
- ><button class="qc-button qc-compact qc-primary"
61
+ ><button class={`qc-button qc-compact ${copied? "qc-secondary" : "qc-primary"}`}
57
62
  onclick={copy}>
58
- <span class="copy">copier</span>
59
- <span class="copied">copié !</span>
63
+ {#if !copied}
64
+ <span class="copy">Copier</span>
65
+ {:else}
66
+ <span class="copied">Copié&nbsp!</span>
67
+ {/if}
60
68
  </button
61
69
  >{@html hlCode}</code
62
70
  ></pre>
@@ -59,16 +59,3 @@
59
59
  <Code rawCode={exempleCode}></Code>
60
60
  {/if}
61
61
  </div>
62
- <style lang="scss">
63
- figure {
64
- //display: block;
65
- max-width: token-value(max-content-width);
66
- width: 100%;
67
- @include qc-shading(0);
68
- margin-bottom: token-value(spacer content-block mb);
69
- .exemple {
70
- padding: token-value(spacer sm) token-value(spacer sm) 0 token-value(spacer sm);
71
- margin-bottom: token-value(spacer sm);
72
- }
73
- }
74
- </style>
@@ -10,34 +10,17 @@ pre {
10
10
  padding: 0;
11
11
  white-space: pre-wrap;
12
12
  overflow: auto;
13
+ position: relative;
13
14
 
14
15
  code, .qc-code {
15
16
  font-family: token-value(font, family, code);
16
17
 
17
18
  button {
18
19
  float: right;
19
- //position: absolute;
20
- right: token-value(spacer xs);
21
- top: token-value(spacer xs);
22
- padding: token-value(spacer xs) token-value(spacer sm) ;
23
- color : white;
24
- background-color: token-value(color blue piv);
25
- border: 1px solid;
20
+ position: absolute;
21
+ right: token-value(spacer sm);
22
+ top: token-value(spacer sm);
26
23
  white-space: nowrap;
27
- transition: none!important;
28
- .copy {display: inline;}
29
- .copied {display: none;}
30
- &.copied {
31
- background-color: transparent!important;
32
- border-color: transparent!important;;
33
- box-shadow: none!important;
34
- color: token-value(color blue piv)!important;
35
- .copy {display: none;}
36
- .copied {
37
- display: inline;
38
- //animation: fadeout .5s;
39
- }
40
- }
41
24
  }
42
25
  }
43
26
  }
@@ -0,0 +1,21 @@
1
+ @use "qc-sdg-lib" as *;
2
+
3
+ .exemple-area > figure {
4
+ display: block;
5
+ max-width: token-value(max-content-width);
6
+ width: 100%;
7
+ margin-bottom: token-value(spacer content-block mb);
8
+ padding-bottom: 1px;
9
+ .exemple {
10
+ padding: token-value(spacer sm) token-value(spacer sm) token-value(spacer sm) token-value(spacer sm);
11
+ @include qc-shading(0);
12
+
13
+ & > *:last-child {
14
+ margin-bottom: 0;
15
+ }
16
+ }
17
+
18
+ & > figcaption {
19
+ display: block;
20
+ }
21
+ }
@@ -1,5 +1,6 @@
1
1
  @use "qc-sdg-lib" as *;
2
2
  @use "components/code" as *;
3
+ @use "components/exemple" as *;
3
4
  @use "tables";
4
5
  @use "jQueryUI/jquery-ui.autocomplete";
5
6
 
@@ -2,33 +2,33 @@
2
2
  <qc-doc-exemple caption="Exemple de différents liens hypertexte selon leurs états.">
3
3
  <dl>
4
4
  <dt>Lien interne</dt>
5
- <dd><a href="javascript:;" class="not-visited">Lien interne</a></dd>
5
+ <dd><a href="#" class="not-visited">Lien interne</a></dd>
6
6
  <dd>
7
- <qc-external-link><a href="javascript:;" class="not-visited">Lien externe</a></qc-external-link>
7
+ <qc-external-link><a href="#" class="not-visited">Lien externe</a></qc-external-link>
8
8
  </dd>
9
9
 
10
10
  <dt>Lien au survol (pseudo-classe :hover)</dt>
11
- <dd><a href="javascript:;" class="pseudo-hover">Lien interne</a></dd>
11
+ <dd><a href="#" class="pseudo-hover">Lien interne</a></dd>
12
12
  <dd>
13
- <qc-external-link><a href="javascript:;" class="pseudo-hover">Lien externe</a>
13
+ <qc-external-link><a href="#" class="pseudo-hover">Lien externe</a>
14
14
  </qc-external-link>
15
15
  </dd>
16
16
  <dt>Lien au focus (pseudo-classe :focus)</dt>
17
- <dd><a href="javascript:;" class="pseudo-focus">Lien interne</a></dd>
17
+ <dd><a href="#" class="pseudo-focus">Lien interne</a></dd>
18
18
  <dd>
19
- <qc-external-link><a href="javascript:;" class="pseudo-focus">Lien externe</a>
19
+ <qc-external-link><a href="#" class="pseudo-focus">Lien externe</a>
20
20
  </qc-external-link>
21
21
  </dd>
22
22
  <dt>Lien au clic (pseudo-classe :active)</dt>
23
- <dd><a href="javascript:;" class="pseudo-active">Lien interne</a></dd>
23
+ <dd><a href="#" class="pseudo-active">Lien interne</a></dd>
24
24
  <dd>
25
- <qc-external-link><a href="javascript:;" class="pseudo-active">Lien externe</a>
25
+ <qc-external-link><a href="#" class="pseudo-active">Lien externe</a>
26
26
  </qc-external-link>
27
27
  </dd>
28
28
  <dt>Lien visité (pseudo-classe :visited)</dt>
29
- <dd><a href="javascript:;" class="pseudo-visited">Lien interne</a></dd>
29
+ <dd><a href="#" class="pseudo-visited">Lien interne</a></dd>
30
30
  <dd>
31
- <qc-external-link><a href="javascript:;" class="pseudo-visited">Lien externe</a>
31
+ <qc-external-link><a href="#" class="pseudo-visited">Lien externe</a>
32
32
  </qc-external-link>
33
33
  </dd>
34
34
  </dl>
@@ -2,7 +2,7 @@
2
2
  <h3>Exemples</h3>
3
3
  <h4>Alerte jaune</h4>
4
4
  <p>
5
- <a href="javascript:;"
5
+ <a href="#"
6
6
  id="show-qc-alert"
7
7
  hidden
8
8
  >
@@ -26,7 +26,7 @@
26
26
  caption="Exemple d’alerte générale">
27
27
  <qc-alert type="general"
28
28
  maskable="false">
29
- <p>Alerte bleue d’importance modérée <a href="javascript:;">avec un lien textuel</a></p>
29
+ <p>Alerte bleue d’importance modérée <a href="#">avec un lien textuel</a></p>
30
30
  </qc-alert>
31
31
  </qc-doc-exemple>
32
32
 
@@ -277,8 +277,6 @@
277
277
  </table>
278
278
  </div>
279
279
 
280
- <p>Pour les autres attributs, voir la rubrique de <a href="#selection-button-attributes">boutons de sélection</a>.</p>
281
-
282
280
  <h5>Zone d’ajout de contenu HTML</h5>
283
281
 
284
282
  <p>Ce composant ne comporte qu'une seule zone d'ajout de contenu par défaut.</p>
@@ -1,6 +1,11 @@
1
- <h3 id="champs-alignes">Champs alignés horizontalement (classe <code>qc‑textfield‑row</code>)</h3>
1
+ <h3 id="champs-alignes">Champs alignés horizontalement (classe <code>qc‑formfield‑row</code>)</h3>
2
2
 
3
- <p>Les champs regroupés sur une ligne doivent être placés dans un div avec la classe <code>qc-textfield-row</code> pour correctement afficher les messages d’erreur en cas de soumission invalide.</p>
3
+ <p>
4
+ Les champs regroupés sur une ligne doivent être placés dans un <code>div</code> avec la classe <code>qc-formfield-row</code>.
5
+ De cette façon, les messages d'erreur ne provoquent pas de décalage.
6
+ <br/><br/>
7
+ Voir le code des champs Téléphone et Poste dans l'exemple ci-dessus.
8
+ </p>
4
9
 
5
10
  <h4>Exemple</h4>
6
11
  <qc-doc-exemple caption="Exemple de champs sur une seule ligne">
@@ -101,8 +106,3 @@
101
106
  }
102
107
  });
103
108
  </script>
104
-
105
- <h4>Documentation technique</h4>
106
- <p>Placer les champs à regrouper sur une seule ligne dans un div avec la classe <code>qc-formfield-row</code></p>
107
-
108
-
@@ -61,13 +61,13 @@
61
61
  title="Des erreurs sont présentes dans le formulaire :">
62
62
  <ul>
63
63
  <li>
64
- <a href="javascript:;">Le champ « Nom de famille » est obligatoire ;</a>
64
+ <a href="#">Le champ « Nom de famille » est obligatoire ;</a>
65
65
  </li>
66
66
  <li>
67
- <a href="javascript:;">Le champ « Prénom » est obligatoire ;</a>
67
+ <a href="#">Le champ « Prénom » est obligatoire ;</a>
68
68
  </li>
69
69
  <li>
70
- <a href="javascript:;">Le champ « Numéro de dossier » est obligatoire.</a>
70
+ <a href="#">Le champ « Numéro de dossier » est obligatoire.</a>
71
71
  </li>
72
72
  </ul>
73
73
  </qc-notice>
@@ -13,7 +13,7 @@
13
13
  <ul>
14
14
  <li><a href="#fakeEnglish">English</a>
15
15
  </li>
16
- <li><a href="javascript:;">Nous joindre</a>
16
+ <li><a href="#">Nous joindre</a>
17
17
  </li>
18
18
  </ul>
19
19
  </nav>
@@ -30,7 +30,7 @@
30
30
  <ul slot="links">
31
31
  <li><a href="#fakeEnglish">English</a>
32
32
  </li>
33
- <li><a href="javascript:;">Nous joindre</a>
33
+ <li><a href="#">Nous joindre</a>
34
34
  </li>
35
35
  </ul>
36
36
 
@@ -13,7 +13,8 @@
13
13
  <ul>
14
14
  <li><a href="#fakeEnglish">English</a>
15
15
  </li>
16
- <li><a href="javascript:;">Nous joindre</a>
16
+ <!-- svelte-ignore a11y_invalid_attribute -->
17
+ <li><a href="#">Nous joindre</a>
17
18
  </li>
18
19
  </ul>
19
20
  </nav>
@@ -26,7 +26,7 @@
26
26
  <ul>
27
27
  <li><a href="#fakeEnglish">English</a>
28
28
  </li>
29
- <li><a href="javascript:;">Nous joindre</a>
29
+ <li><a href="#">Nous joindre</a>
30
30
  </li>
31
31
  </ul>
32
32
  </nav>
@@ -47,7 +47,7 @@
47
47
  <ul slot="links">
48
48
  <li><a href="#fakeEnglish">English</a>
49
49
  </li>
50
- <li><a href="javascript:;">Nous joindre</a>
50
+ <li><a href="#">Nous joindre</a>
51
51
  </li>
52
52
  </ul>
53
53
 
@@ -142,10 +142,6 @@ qc-piv-header,
142
142
  --qc-color-link-visited: white;
143
143
  --qc-color-link-active: white;
144
144
 
145
- font-family: token-value(font family header);
146
- text-decoration: none;
147
- font-weight: token-value(font weight regular);
148
-
149
145
  &:hover {
150
146
  text-decoration: underline;
151
147
  }
@@ -155,6 +151,12 @@ qc-piv-header,
155
151
  outline-offset: -2px;
156
152
  }
157
153
  }
154
+
155
+ a, span {
156
+ font-family: token-value(font family header);
157
+ text-decoration: none;
158
+ font-weight: token-value(font weight regular);
159
+ }
158
160
  }
159
161
 
160
162
  .go-to-content {
@@ -61,18 +61,20 @@
61
61
  if (description) {
62
62
  input.before(descriptionElement);
63
63
  }
64
- if (invalid) {
65
- if (textFieldRow) {
66
- textFieldRow.appendChild(formErrorElement);
67
- }
68
- else {
69
- input.after(formErrorElement);
70
- }
71
- }
72
64
  if (maxlength) {
73
65
  input.after(maxlengthElement);
74
66
  }
75
67
  })
68
+
69
+ $effect(() => {
70
+ if (!formErrorElement) return;
71
+ if (textFieldRow) {
72
+ textFieldRow.appendChild(formErrorElement);
73
+ }
74
+ else {
75
+ input.after(formErrorElement);
76
+ }
77
+ })
76
78
  </script>
77
79
 
78
80
  <TextField
@@ -182,11 +182,6 @@
182
182
  </table>
183
183
  </div>
184
184
 
185
- <h4>Champs alignés horizontalement (classe <code>qc-textfield-row</code>)</h4>
186
-
187
- <p>Les champs regroupés sur une ligne peuvent être placés dans un div avec la classe <code>qc-textfield-row</code>. De cette façon, les messages d'erreur ne provoquent pas de décalage. <br/>
188
- Voir le code des champs Téléphone et Poste dans l'exemple ci-dessus.</p>
189
-
190
185
  <h4>Propriété js</h4>
191
186
  <div class="table-overflow">
192
187
  <table class="qc-table qc-striped component-attributes-description">
@@ -16,15 +16,14 @@ export class Utils {
16
16
  `${this.assetsBasePath}/img/`
17
17
  .replace('//','/')
18
18
  static cssFileName =
19
- document
20
- .currentScript
21
- .getAttribute('sdg-css-filename')
22
- || 'qc-sdg.min.css'
19
+ getCssFileName(document.currentScript.getAttribute('sdg-css-filename'), document.currentScript.src);
23
20
  static cssPath =
24
- document
25
- .currentScript
26
- .getAttribute('sdg-css-path')
27
- || this.cssRelativePath + this.cssFileName
21
+ getCssPath(
22
+ document.currentScript.getAttribute('sdg-css-path'),
23
+ document.currentScript.src,
24
+ this.cssRelativePath,
25
+ this.cssFileName
26
+ );
28
27
  static sharedTexts =
29
28
  { openInNewTab :
30
29
  { fr: 'Ce lien s’ouvrira dans un nouvel onglet.'
@@ -33,8 +32,8 @@ export class Utils {
33
32
  }
34
33
 
35
34
  /**
36
- * Get current page language based on html lang attribute
37
- * @returns {string} language code (fr/en).
35
+ * Get current page language based on HTML lang attribute
36
+ * @returns {string} language code (fr/en).
38
37
  */
39
38
  static getPageLanguage() {
40
39
  return document.getElementsByTagName("html")[0].getAttribute("lang") || "fr";
@@ -56,12 +55,12 @@ export class Utils {
56
55
  /**
57
56
  * extract and clean prefixed attributes
58
57
  * example:
59
- * computeFieldsAttributes("radio" , {"radio-class":"my-radio", "radio-data-foo":"foo", "other":"other value"})
58
+ * computeFieldsAttributes("radio", {"radio-class": "my-radio", "radio-data-foo": "foo", "other": "other value"})
60
59
  * return {"class":"my-radio", "data-foo":"foo"}
61
60
  *
62
61
  </div>
63
62
  * @param {(string|string[])} prefix - Une chaîne de caractères ou un tableau de chaînes.
64
- * @param restProps - ojbect of attributes
63
+ * @param restProps - object of attributes
65
64
  * @returns {*} - object of attributes
66
65
  */
67
66
  static computeFieldsAttributes(prefix , restProps) {
@@ -125,8 +124,8 @@ export class Utils {
125
124
  word = replaceAccents(word, /[ùûü]/gi, 'u');
126
125
  word = replaceAccents(word, /[ïî]/gi, 'i');
127
126
  word = replaceAccents(word, /[ôö]/gi, 'i');
128
- word = replaceAccents(word, /[œ]/gi, 'oe');
129
- word = replaceAccents(word, /[æ]/gi, 'ae');
127
+ word = replaceAccents(word, /œ/gi, 'oe');
128
+ word = replaceAccents(word, /æ/gi, 'ae');
130
129
 
131
130
  // Remplace les caractères spéciaux par des espaces.
132
131
  word = word.replaceAll(/[-_—–]/gi, ' ');
@@ -136,3 +135,45 @@ export class Utils {
136
135
  return word.toLowerCase();
137
136
  }
138
137
  }
138
+
139
+ function getCacheBustingParam(cssPath, currentScriptSrc) {
140
+ const pattern = /\?.*$/;
141
+
142
+ const cssCacheBustingParam = cssPath?.match(pattern);
143
+ if (cssCacheBustingParam && cssCacheBustingParam.length > 0) {
144
+ return '';
145
+ }
146
+
147
+ const scriptCacheBustingParam = currentScriptSrc?.match(pattern);
148
+ if (scriptCacheBustingParam && scriptCacheBustingParam.length > 0) {
149
+ return scriptCacheBustingParam[0];
150
+ }
151
+
152
+ return '';
153
+ }
154
+
155
+ function getCssFileName(sdgCssFilename, src) {
156
+ const cssPattern =/^.*\.css/;
157
+
158
+ if (!cssPattern.test(sdgCssFilename)) {
159
+ return 'qc-sdg.min.css' + getCacheBustingParam(
160
+ 'qc-sdg.min.css', src
161
+ );
162
+ } else {
163
+ return sdgCssFilename + getCacheBustingParam(
164
+ sdgCssFilename, src
165
+ );
166
+ }
167
+ }
168
+
169
+ function getCssPath(sdgCssPath, src, cssRelativePath, cssFileName) {
170
+ const cssPattern =/^.*\.css/;
171
+
172
+ if (!cssPattern.test(sdgCssPath)) {
173
+ return cssRelativePath + cssFileName;
174
+ } else {
175
+ return sdgCssPath + getCacheBustingParam(
176
+ sdgCssPath, src
177
+ );
178
+ }
179
+ }
@@ -1,7 +0,0 @@
1
- <h2>Compteur de caractères</h2>
2
- <div>
3
- <qc-doc-exemple>
4
- <textarea id="mon-textarea" rows="5" cols="50"></textarea>
5
- <qc-char-count target-id="mon-textarea"></qc-char-count>
6
- </qc-doc-exemple>
7
- </div>
@@ -1,24 +0,0 @@
1
- <h2 id="radio-button">Boutons radio</h2>
2
- <p>Les boutons radio sont aussi disponibles au format de <a href="#selection-button">boutons de sélection</a>.</p>
3
- <h3>Exemples</h3>
4
-
5
-
6
- <qc-radio-group id="exemple-radio-md"
7
- legend="Choisissez une option :"
8
- name="ex-md"
9
- selection-button
10
- >
11
- <label>
12
- <input type="radio"
13
- name="ma-radio"
14
- value="option1">
15
- <span>Option 1</span>
16
- </label>
17
- <label>
18
- <input type="radio"
19
- name="ma-radio"
20
- value="option2">
21
- <span>Option 2</span>
22
- </label>
23
- </qc-radio-group>
24
-