@dsrc-cm/core 0.1.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 (51) hide show
  1. package/dist/dsrc.css +10743 -0
  2. package/dist/dsrc.min.css +1 -0
  3. package/package.json +44 -0
  4. package/src/base/print.css +404 -0
  5. package/src/base/reset.css +106 -0
  6. package/src/components/accordion/accordion.css +216 -0
  7. package/src/components/alert/alert.css +187 -0
  8. package/src/components/badge/badge.css +178 -0
  9. package/src/components/breadcrumb/breadcrumb.css +235 -0
  10. package/src/components/button/button.css +805 -0
  11. package/src/components/callout/callout.css +95 -0
  12. package/src/components/card/card.css +551 -0
  13. package/src/components/checkbox/checkbox.css +257 -0
  14. package/src/components/consent/consent.css +297 -0
  15. package/src/components/download/download.css +66 -0
  16. package/src/components/dropdown/dropdown.css +295 -0
  17. package/src/components/highlight/highlight.css +74 -0
  18. package/src/components/input/input.css +337 -0
  19. package/src/components/label/label.css +29 -0
  20. package/src/components/link/link.css +208 -0
  21. package/src/components/logo/logo.css +86 -0
  22. package/src/components/modal/modal.css +271 -0
  23. package/src/components/notice/notice.css +211 -0
  24. package/src/components/pagination/pagination.css +132 -0
  25. package/src/components/password/password.css +195 -0
  26. package/src/components/quote/quote.css +156 -0
  27. package/src/components/radio/radio.css +270 -0
  28. package/src/components/range/range.css +362 -0
  29. package/src/components/search/search.css +129 -0
  30. package/src/components/select/select.css +130 -0
  31. package/src/components/sidemenu/sidemenu.css +268 -0
  32. package/src/components/spinner/spinner.css +73 -0
  33. package/src/components/stepper/stepper.css +140 -0
  34. package/src/components/summary/summary.css +142 -0
  35. package/src/components/tab/tab.css +184 -0
  36. package/src/components/table/table.css +556 -0
  37. package/src/components/tag/tag.css +201 -0
  38. package/src/components/tile/tile.css +389 -0
  39. package/src/components/toggle/toggle.css +229 -0
  40. package/src/components/tooltip/tooltip.css +158 -0
  41. package/src/components/translate/translate.css +356 -0
  42. package/src/components/upload/upload.css +185 -0
  43. package/src/index.css +77 -0
  44. package/src/layout/bandeau/bandeau.css +44 -0
  45. package/src/layout/entete/entete.css +130 -0
  46. package/src/layout/footer/footer.css +107 -0
  47. package/src/layout/grid/grid.css +197 -0
  48. package/src/layout/hero/hero.css +86 -0
  49. package/src/layout/main/main.css +123 -0
  50. package/src/layout/navigation/navigation.css +206 -0
  51. package/src/utilities/utilities.css +430 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * DSRC Tag Component
3
+ *
4
+ * Interactive inline labels (similar to badges but clickable/dismissible).
5
+ *
6
+ * Variants:
7
+ * --sm ........... Small tag
8
+ * --lg ........... Large tag
9
+ * --dismissible .. With dismiss button
10
+ * --info / --success / --warning / --error (semantic colors)
11
+ *
12
+ * Group:
13
+ * .dsrc-tags-group (flex wrapper)
14
+ *
15
+ * Usage:
16
+ * <ul class="dsrc-tags-group">
17
+ * <li><button class="dsrc-tag">Filtre A</button></li>
18
+ * <li><button class="dsrc-tag dsrc-tag--dismissible">Filtre B</button></li>
19
+ * </ul>
20
+ */
21
+
22
+
23
+ /* ============================================
24
+ * 1. Base tag
25
+ * ============================================ */
26
+
27
+ .dsrc-tag {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ min-width: 36px;
32
+ padding: var(--dsrc-spacing-1) var(--dsrc-spacing-2);
33
+ font-family: var(--dsrc-font-family-sans);
34
+ font-size: var(--dsrc-font-size-caption);
35
+ font-weight: 700;
36
+ line-height: 1.25;
37
+ color: var(--dsrc-color-noir);
38
+ background-color: var(--dsrc-color-gris-100);
39
+ border: none;
40
+ border-radius: var(--dsrc-radius-small);
41
+ cursor: pointer;
42
+ text-decoration: none;
43
+ white-space: nowrap;
44
+ transition: background-color 0.15s;
45
+ }
46
+
47
+ .dsrc-tag:hover {
48
+ background-color: var(--dsrc-color-gris-200);
49
+ }
50
+
51
+ .dsrc-tag:focus-visible {
52
+ outline: 2px solid var(--dsrc-color-primaire);
53
+ outline-offset: 2px;
54
+ }
55
+
56
+ .dsrc-tag:disabled,
57
+ .dsrc-tag[aria-disabled="true"] {
58
+ color: var(--dsrc-color-gris-400);
59
+ background-color: var(--dsrc-color-gris-100);
60
+ cursor: not-allowed;
61
+ }
62
+
63
+
64
+ /* ============================================
65
+ * 2. Sizes
66
+ * ============================================ */
67
+
68
+ .dsrc-tag--sm {
69
+ padding: 2px var(--dsrc-spacing-1);
70
+ font-size: 0.6875rem;
71
+ min-width: 28px;
72
+ }
73
+
74
+ .dsrc-tag--lg {
75
+ padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
76
+ font-size: var(--dsrc-font-size-body);
77
+ }
78
+
79
+
80
+ /* ============================================
81
+ * 3. Semantic colors
82
+ * ============================================ */
83
+
84
+ .dsrc-tag--info {
85
+ color: var(--dsrc-color-info-texte);
86
+ background-color: var(--dsrc-color-info-fond);
87
+ }
88
+
89
+ .dsrc-tag--info:hover {
90
+ background-color: var(--dsrc-color-info-bordure);
91
+ color: var(--dsrc-color-blanc);
92
+ }
93
+
94
+ .dsrc-tag--success {
95
+ color: var(--dsrc-color-succes-texte);
96
+ background-color: var(--dsrc-color-succes-fond);
97
+ }
98
+
99
+ .dsrc-tag--success:hover {
100
+ background-color: var(--dsrc-color-succes-bordure);
101
+ color: var(--dsrc-color-blanc);
102
+ }
103
+
104
+ .dsrc-tag--warning {
105
+ color: var(--dsrc-color-avertissement-texte);
106
+ background-color: var(--dsrc-color-avertissement-fond);
107
+ }
108
+
109
+ .dsrc-tag--warning:hover {
110
+ background-color: var(--dsrc-color-avertissement-bordure);
111
+ }
112
+
113
+ .dsrc-tag--error {
114
+ color: var(--dsrc-color-erreur-texte);
115
+ background-color: var(--dsrc-color-erreur-fond);
116
+ }
117
+
118
+ .dsrc-tag--error:hover {
119
+ background-color: var(--dsrc-color-erreur-bordure);
120
+ color: var(--dsrc-color-blanc);
121
+ }
122
+
123
+
124
+ /* ============================================
125
+ * 4. Dismissible (close icon)
126
+ * ============================================ */
127
+
128
+ .dsrc-tag--dismissible {
129
+ padding-right: var(--dsrc-spacing-1);
130
+ }
131
+
132
+ .dsrc-tag--dismissible::after {
133
+ content: '';
134
+ display: inline-block;
135
+ width: 16px;
136
+ height: 16px;
137
+ margin-left: var(--dsrc-spacing-1);
138
+ background-color: currentColor;
139
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3C/svg%3E");
140
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3C/svg%3E");
141
+ -webkit-mask-size: contain;
142
+ mask-size: contain;
143
+ -webkit-mask-repeat: no-repeat;
144
+ mask-repeat: no-repeat;
145
+ }
146
+
147
+
148
+ /* ============================================
149
+ * 5. Tags group
150
+ * ============================================ */
151
+
152
+ .dsrc-tags-group {
153
+ display: flex;
154
+ flex-wrap: wrap;
155
+ gap: var(--dsrc-spacing-2);
156
+ list-style: none;
157
+ padding: 0;
158
+ margin: 0;
159
+ }
160
+
161
+
162
+ /* ============================================
163
+ * 6. High contrast (forced-colors)
164
+ * ============================================ */
165
+
166
+ @media (forced-colors: active) {
167
+ .dsrc-tag {
168
+ border: 1px solid ButtonText;
169
+ }
170
+
171
+ .dsrc-tag:disabled,
172
+ .dsrc-tag[aria-disabled="true"] {
173
+ color: GrayText;
174
+ }
175
+ }
176
+
177
+
178
+ /* ============================================
179
+ * 7. Reduced motion
180
+ * ============================================ */
181
+
182
+ @media (prefers-reduced-motion: reduce) {
183
+ .dsrc-tag {
184
+ transition: none;
185
+ }
186
+ }
187
+
188
+
189
+ /* ============================================
190
+ * 8. Print
191
+ * ============================================ */
192
+
193
+ @media print {
194
+ .dsrc-tag {
195
+ border: 1px solid var(--dsrc-color-gris-400);
196
+ }
197
+
198
+ .dsrc-tag--dismissible::after {
199
+ display: none;
200
+ }
201
+ }
@@ -0,0 +1,389 @@
1
+ /**
2
+ * DSRC Tile Component
3
+ * Design Systeme de la Republique du Cameroun
4
+ *
5
+ * Architecture alignee sur le DSFR (Design Systeme de l'Etat francais).
6
+ * Les tuiles sont des raccourcis vers des pages ou services,
7
+ * generalement disposees en grille.
8
+ *
9
+ * Structure HTML :
10
+ *
11
+ * <div class="dsrc-tile dsrc-enlarge-link">
12
+ * <div class="dsrc-tile__body">
13
+ * <div class="dsrc-tile__content">
14
+ * <h3 class="dsrc-tile__title">
15
+ * <a href="/service">Titre de la tuile</a>
16
+ * </h3>
17
+ * <p class="dsrc-tile__desc">Description de la tuile</p>
18
+ * </div>
19
+ * </div>
20
+ * <div class="dsrc-tile__header">
21
+ * <div class="dsrc-tile__pictogram">
22
+ * <img src="icon.svg" alt="" aria-hidden="true">
23
+ * </div>
24
+ * </div>
25
+ * </div>
26
+ *
27
+ * Modificateurs :
28
+ * --sm Padding reduit
29
+ * --horizontal Image a gauche, contenu a droite
30
+ * --grey Fond gris
31
+ * --shadow Elevation avec ombre portee
32
+ * --no-border Sans bordure
33
+ * --no-background Fond transparent
34
+ * --accent Barre verte en haut
35
+ * --download Tuile de telechargement
36
+ *
37
+ * Note : .dsrc-enlarge-link est defini dans button.css.
38
+ */
39
+
40
+
41
+ /* ==========================================================================
42
+ 1. BASE TILE
43
+ Vertical par defaut, pictogramme au-dessus du contenu.
44
+ Le body vient AVANT le header dans le DOM (accessibilite),
45
+ le header est reordonne visuellement via order: -1.
46
+ ========================================================================== */
47
+
48
+ .dsrc-tile {
49
+ display: flex;
50
+ flex-direction: column;
51
+ position: relative;
52
+ background-color: var(--dsrc-color-blanc);
53
+ border: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
54
+ border-radius: var(--dsrc-radius-default);
55
+ overflow: hidden;
56
+ font-family: var(--dsrc-font-family-sans);
57
+ text-align: center;
58
+ transition:
59
+ box-shadow var(--dsrc-transition-duration-fast) ease,
60
+ border-color var(--dsrc-transition-duration-fast) ease;
61
+ }
62
+
63
+
64
+ /* ==========================================================================
65
+ 2. TILE HEADER (pictogram area)
66
+ ========================================================================== */
67
+
68
+ .dsrc-tile__header {
69
+ order: -1;
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ padding: var(--dsrc-spacing-5) var(--dsrc-spacing-5) 0;
74
+ }
75
+
76
+ .dsrc-tile__pictogram {
77
+ display: flex;
78
+ align-items: center;
79
+ justify-content: center;
80
+ width: 80px;
81
+ height: 80px;
82
+ }
83
+
84
+ .dsrc-tile__pictogram img,
85
+ .dsrc-tile__pictogram svg {
86
+ display: block;
87
+ max-width: 100%;
88
+ max-height: 100%;
89
+ object-fit: contain;
90
+ }
91
+
92
+
93
+ /* ==========================================================================
94
+ 3. TILE BODY
95
+ ========================================================================== */
96
+
97
+ .dsrc-tile__body {
98
+ display: flex;
99
+ flex-direction: column;
100
+ flex: 1 1 auto;
101
+ padding: 0;
102
+ }
103
+
104
+
105
+ /* ==========================================================================
106
+ 4. TILE CONTENT
107
+ ========================================================================== */
108
+
109
+ .dsrc-tile__content {
110
+ display: flex;
111
+ flex-direction: column;
112
+ flex: 1 1 auto;
113
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5) var(--dsrc-spacing-5);
114
+ }
115
+
116
+
117
+ /* --------------------------------------------------------------------------
118
+ 4.1 Title
119
+ -------------------------------------------------------------------------- */
120
+
121
+ .dsrc-tile__title {
122
+ font-size: var(--dsrc-font-size-body);
123
+ font-weight: var(--dsrc-font-weight-bold);
124
+ line-height: var(--dsrc-font-line-height-tight);
125
+ color: var(--dsrc-color-noir);
126
+ margin: 0 0 var(--dsrc-spacing-2) 0;
127
+ }
128
+
129
+ .dsrc-tile__title a {
130
+ color: var(--dsrc-color-primaire);
131
+ text-decoration: none;
132
+ }
133
+
134
+ .dsrc-tile__title a:hover {
135
+ text-decoration: underline;
136
+ }
137
+
138
+ .dsrc-tile__title a:focus-visible {
139
+ outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
140
+ outline-offset: var(--dsrc-outline-offset);
141
+ }
142
+
143
+ /* --------------------------------------------------------------------------
144
+ 4.2 Description
145
+ -------------------------------------------------------------------------- */
146
+
147
+ .dsrc-tile__desc {
148
+ font-size: var(--dsrc-font-size-small);
149
+ line-height: var(--dsrc-font-line-height-normal);
150
+ color: var(--dsrc-color-gris-600);
151
+ margin: 0;
152
+ }
153
+
154
+ /* --------------------------------------------------------------------------
155
+ 4.3 Detail metadata
156
+ -------------------------------------------------------------------------- */
157
+
158
+ .dsrc-tile__detail {
159
+ font-size: var(--dsrc-font-size-caption);
160
+ color: var(--dsrc-color-gris-400);
161
+ margin: var(--dsrc-spacing-2) 0 0 0;
162
+ }
163
+
164
+
165
+ /* ==========================================================================
166
+ 5. HOVER / ACTIVE STATES
167
+ ========================================================================== */
168
+
169
+ .dsrc-enlarge-link.dsrc-tile:hover {
170
+ box-shadow: var(--dsrc-shadow-md);
171
+ border-color: var(--dsrc-color-gris-400);
172
+ }
173
+
174
+ .dsrc-enlarge-link.dsrc-tile:active {
175
+ box-shadow: var(--dsrc-shadow-sm);
176
+ }
177
+
178
+
179
+ /* ==========================================================================
180
+ 6. WITHOUT PICTOGRAM
181
+ When there is no .dsrc-tile__header, add top padding.
182
+ ========================================================================== */
183
+
184
+ .dsrc-tile:not(:has(.dsrc-tile__header)) .dsrc-tile__content {
185
+ padding-top: var(--dsrc-spacing-5);
186
+ }
187
+
188
+
189
+ /* ==========================================================================
190
+ 7. SIZE MODIFIER: --sm
191
+ ========================================================================== */
192
+
193
+ .dsrc-tile--sm .dsrc-tile__header {
194
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-4) 0;
195
+ }
196
+
197
+ .dsrc-tile--sm .dsrc-tile__pictogram {
198
+ width: 56px;
199
+ height: 56px;
200
+ }
201
+
202
+ .dsrc-tile--sm .dsrc-tile__content {
203
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-4) var(--dsrc-spacing-4);
204
+ }
205
+
206
+ .dsrc-tile--sm .dsrc-tile__title {
207
+ font-size: var(--dsrc-font-size-small);
208
+ }
209
+
210
+ .dsrc-tile--sm .dsrc-tile__desc {
211
+ font-size: var(--dsrc-font-size-caption);
212
+ }
213
+
214
+
215
+ /* ==========================================================================
216
+ 8. VISUAL MODIFIERS
217
+ ========================================================================== */
218
+
219
+ /* Grey background */
220
+ .dsrc-tile--grey {
221
+ background-color: var(--dsrc-color-gris-50);
222
+ }
223
+
224
+ /* Shadow elevation */
225
+ .dsrc-tile--shadow {
226
+ box-shadow: var(--dsrc-shadow-md);
227
+ border-color: transparent;
228
+ }
229
+
230
+ .dsrc-enlarge-link.dsrc-tile--shadow:hover {
231
+ box-shadow: var(--dsrc-shadow-lg);
232
+ }
233
+
234
+ /* No border */
235
+ .dsrc-tile--no-border {
236
+ border: 0;
237
+ }
238
+
239
+ /* Transparent background */
240
+ .dsrc-tile--no-background {
241
+ background-color: transparent;
242
+ }
243
+
244
+ /* Top accent bar */
245
+ .dsrc-tile--accent {
246
+ border-top: var(--dsrc-border-width-thick) solid var(--dsrc-color-primaire);
247
+ }
248
+
249
+
250
+ /* ==========================================================================
251
+ 9. HORIZONTAL VARIANT
252
+ Pictogram a gauche, contenu a droite.
253
+ ========================================================================== */
254
+
255
+ .dsrc-tile--horizontal {
256
+ flex-direction: row;
257
+ text-align: start;
258
+ }
259
+
260
+ .dsrc-tile--horizontal > .dsrc-tile__header {
261
+ order: 0;
262
+ flex: 0 0 auto;
263
+ padding: var(--dsrc-spacing-4);
264
+ align-items: flex-start;
265
+ }
266
+
267
+ .dsrc-tile--horizontal > .dsrc-tile__body {
268
+ flex: 1 1 auto;
269
+ justify-content: center;
270
+ }
271
+
272
+ .dsrc-tile--horizontal > .dsrc-tile__body .dsrc-tile__content {
273
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-4) var(--dsrc-spacing-4) 0;
274
+ }
275
+
276
+ /* Responsive: stack on mobile */
277
+ @media (max-width: 767px) {
278
+ .dsrc-tile--horizontal {
279
+ flex-direction: column;
280
+ text-align: center;
281
+ }
282
+
283
+ .dsrc-tile--horizontal > .dsrc-tile__header {
284
+ order: -1;
285
+ padding: var(--dsrc-spacing-5) var(--dsrc-spacing-5) 0;
286
+ align-items: center;
287
+ justify-content: center;
288
+ }
289
+
290
+ .dsrc-tile--horizontal > .dsrc-tile__body .dsrc-tile__content {
291
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5) var(--dsrc-spacing-5);
292
+ }
293
+ }
294
+
295
+
296
+ /* ==========================================================================
297
+ 10. DISABLED STATE
298
+ ========================================================================== */
299
+
300
+ .dsrc-tile--disabled {
301
+ opacity: 0.5;
302
+ pointer-events: none;
303
+ }
304
+
305
+ .dsrc-tile--disabled .dsrc-tile__title a {
306
+ color: var(--dsrc-color-gris-400);
307
+ }
308
+
309
+
310
+ /* ==========================================================================
311
+ 11. DOWNLOAD VARIANT
312
+ ========================================================================== */
313
+
314
+ .dsrc-tile--download .dsrc-tile__detail {
315
+ display: flex;
316
+ align-items: center;
317
+ gap: var(--dsrc-spacing-1);
318
+ }
319
+
320
+ .dsrc-tile--download .dsrc-tile__detail::before {
321
+ content: '';
322
+ display: inline-block;
323
+ width: 16px;
324
+ height: 16px;
325
+ flex-shrink: 0;
326
+ background-color: currentColor;
327
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 1v10M8 11L4 7M8 11l4-4M2 14h12' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
328
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 1v10M8 11L4 7M8 11l4-4M2 14h12' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
329
+ -webkit-mask-repeat: no-repeat;
330
+ mask-repeat: no-repeat;
331
+ -webkit-mask-size: contain;
332
+ mask-size: contain;
333
+ }
334
+
335
+
336
+ /* ==========================================================================
337
+ 12. TILE GRID
338
+ Auto-responsive grid for multiple tiles.
339
+ ========================================================================== */
340
+
341
+ .dsrc-tile-grid {
342
+ display: grid;
343
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
344
+ gap: var(--dsrc-spacing-4);
345
+ }
346
+
347
+
348
+ /* ==========================================================================
349
+ 13. HIGH CONTRAST (forced-colors)
350
+ ========================================================================== */
351
+
352
+ @media (forced-colors: active) {
353
+ .dsrc-tile {
354
+ border: 1px solid ButtonText;
355
+ box-shadow: none;
356
+ }
357
+
358
+ .dsrc-tile--shadow {
359
+ box-shadow: none;
360
+ }
361
+
362
+ .dsrc-tile--accent {
363
+ border-top: 3px solid Highlight;
364
+ }
365
+
366
+ .dsrc-tile--disabled {
367
+ border-color: GrayText;
368
+ opacity: 1;
369
+ }
370
+
371
+ .dsrc-tile--disabled .dsrc-tile__title a {
372
+ color: GrayText;
373
+ }
374
+
375
+ .dsrc-tile__title a:focus-visible {
376
+ outline: 2px solid Highlight;
377
+ }
378
+ }
379
+
380
+
381
+ /* ==========================================================================
382
+ 14. REDUCED MOTION
383
+ ========================================================================== */
384
+
385
+ @media (prefers-reduced-motion: reduce) {
386
+ .dsrc-tile {
387
+ transition: none;
388
+ }
389
+ }