@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,270 @@
1
+ /**
2
+ * DSRC Radio Component
3
+ *
4
+ * Custom-styled radio button using hidden native input + styled label pseudo-element.
5
+ *
6
+ * Variants:
7
+ * --sm ......... Smaller radio (16px)
8
+ * --inline ..... Horizontal layout
9
+ * --rich ....... Card-style with pictogram
10
+ * --error ...... Error state
11
+ * --valid ...... Valid state
12
+ *
13
+ * Usage:
14
+ * <div class="dsrc-radio-group">
15
+ * <input type="radio" id="r1" name="group">
16
+ * <label for="r1">Option A</label>
17
+ * </div>
18
+ */
19
+
20
+
21
+ /* ============================================
22
+ * 1. Base radio group
23
+ * ============================================ */
24
+
25
+ .dsrc-radio-group {
26
+ position: relative;
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ align-items: flex-start;
30
+ padding: var(--dsrc-spacing-2) 0;
31
+ }
32
+
33
+ .dsrc-radio-group input[type="radio"] {
34
+ position: absolute;
35
+ top: 0;
36
+ left: 0;
37
+ width: 24px;
38
+ height: 24px;
39
+ margin: 0;
40
+ opacity: 0;
41
+ cursor: pointer;
42
+ z-index: 1;
43
+ }
44
+
45
+ .dsrc-radio-group input[type="radio"] + label {
46
+ position: relative;
47
+ display: inline-flex;
48
+ align-items: flex-start;
49
+ flex-wrap: wrap;
50
+ padding-left: 32px;
51
+ min-height: 24px;
52
+ font-family: var(--dsrc-font-family-sans);
53
+ font-size: var(--dsrc-font-size-body);
54
+ line-height: 1.5;
55
+ color: var(--dsrc-color-noir);
56
+ cursor: pointer;
57
+ }
58
+
59
+
60
+ /* ============================================
61
+ * 2. Custom radio visual (label::before = circle)
62
+ * ============================================ */
63
+
64
+ .dsrc-radio-group input[type="radio"] + label::before {
65
+ content: '';
66
+ position: absolute;
67
+ top: 2px;
68
+ left: 0;
69
+ width: 24px;
70
+ height: 24px;
71
+ border: 2px solid var(--dsrc-color-gris-600);
72
+ border-radius: 50%;
73
+ background-color: var(--dsrc-color-blanc);
74
+ transition: border-color 0.15s;
75
+ }
76
+
77
+ /* Inner dot (label::after) */
78
+ .dsrc-radio-group input[type="radio"] + label::after {
79
+ content: '';
80
+ position: absolute;
81
+ top: 8px;
82
+ left: 6px;
83
+ width: 12px;
84
+ height: 12px;
85
+ border-radius: 50%;
86
+ background-color: transparent;
87
+ transition: background-color 0.15s;
88
+ }
89
+
90
+
91
+ /* ============================================
92
+ * 3. States
93
+ * ============================================ */
94
+
95
+ /* Checked */
96
+ .dsrc-radio-group input[type="radio"]:checked + label::before {
97
+ border-color: var(--dsrc-color-primaire);
98
+ }
99
+
100
+ .dsrc-radio-group input[type="radio"]:checked + label::after {
101
+ background-color: var(--dsrc-color-primaire);
102
+ }
103
+
104
+ /* Focus */
105
+ .dsrc-radio-group input[type="radio"]:focus-visible + label::before {
106
+ outline: 2px solid var(--dsrc-color-primaire);
107
+ outline-offset: 2px;
108
+ }
109
+
110
+ /* Hover */
111
+ .dsrc-radio-group input[type="radio"]:not(:disabled):hover + label::before {
112
+ border-color: var(--dsrc-color-primaire);
113
+ }
114
+
115
+ /* Disabled */
116
+ .dsrc-radio-group input[type="radio"]:disabled + label {
117
+ color: var(--dsrc-color-gris-400);
118
+ cursor: not-allowed;
119
+ }
120
+
121
+ .dsrc-radio-group input[type="radio"]:disabled + label::before {
122
+ background-color: var(--dsrc-color-gris-100);
123
+ border-color: var(--dsrc-color-gris-300);
124
+ }
125
+
126
+ .dsrc-radio-group input[type="radio"]:disabled:checked + label::after {
127
+ background-color: var(--dsrc-color-gris-400);
128
+ }
129
+
130
+ /* Hint text */
131
+ .dsrc-radio-group .dsrc-hint-text {
132
+ width: 100%;
133
+ margin: 0;
134
+ padding-left: 32px;
135
+ font-size: var(--dsrc-font-size-caption);
136
+ color: var(--dsrc-color-gris-600);
137
+ }
138
+
139
+
140
+ /* ============================================
141
+ * 4. Small variant
142
+ * ============================================ */
143
+
144
+ .dsrc-radio-group--sm input[type="radio"] {
145
+ width: 16px;
146
+ height: 16px;
147
+ }
148
+
149
+ .dsrc-radio-group--sm input[type="radio"] + label {
150
+ padding-left: 24px;
151
+ min-height: 16px;
152
+ font-size: var(--dsrc-font-size-caption);
153
+ }
154
+
155
+ .dsrc-radio-group--sm input[type="radio"] + label::before {
156
+ width: 16px;
157
+ height: 16px;
158
+ top: 3px;
159
+ }
160
+
161
+ .dsrc-radio-group--sm input[type="radio"] + label::after {
162
+ width: 8px;
163
+ height: 8px;
164
+ top: 7px;
165
+ left: 4px;
166
+ }
167
+
168
+
169
+ /* ============================================
170
+ * 5. Rich variant (card-style)
171
+ * ============================================ */
172
+
173
+ .dsrc-radio-group--rich {
174
+ padding: var(--dsrc-spacing-3);
175
+ border: 1px solid var(--dsrc-color-gris-200);
176
+ border-radius: var(--dsrc-radius-default);
177
+ }
178
+
179
+ .dsrc-radio-group--rich:has(input[type="radio"]:checked) {
180
+ border-color: var(--dsrc-color-primaire);
181
+ background-color: var(--dsrc-color-primaire-clair);
182
+ }
183
+
184
+ .dsrc-radio-group--rich .dsrc-radio-rich__pictogram {
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: center;
188
+ width: 48px;
189
+ height: 48px;
190
+ margin-bottom: var(--dsrc-spacing-2);
191
+ }
192
+
193
+ .dsrc-radio-group--rich .dsrc-radio-rich__pictogram img,
194
+ .dsrc-radio-group--rich .dsrc-radio-rich__pictogram svg {
195
+ max-width: 100%;
196
+ max-height: 100%;
197
+ }
198
+
199
+
200
+ /* ============================================
201
+ * 6. Validation states
202
+ * ============================================ */
203
+
204
+ .dsrc-radio-group--error {
205
+ padding-left: var(--dsrc-spacing-3);
206
+ border-left: 2px solid var(--dsrc-color-erreur-bordure);
207
+ }
208
+
209
+ .dsrc-radio-group--valid {
210
+ padding-left: var(--dsrc-spacing-3);
211
+ border-left: 2px solid var(--dsrc-color-succes-bordure);
212
+ }
213
+
214
+
215
+ /* ============================================
216
+ * 7. Inline layout
217
+ * ============================================ */
218
+
219
+ .dsrc-radio-group--inline {
220
+ display: inline-flex;
221
+ margin-right: var(--dsrc-spacing-4);
222
+ }
223
+
224
+
225
+ /* ============================================
226
+ * 8. High contrast (forced-colors)
227
+ * ============================================ */
228
+
229
+ @media (forced-colors: active) {
230
+ .dsrc-radio-group input[type="radio"] {
231
+ opacity: 1;
232
+ }
233
+
234
+ .dsrc-radio-group input[type="radio"] + label::before,
235
+ .dsrc-radio-group input[type="radio"] + label::after {
236
+ display: none;
237
+ }
238
+
239
+ .dsrc-radio-group--rich {
240
+ border-color: ButtonText;
241
+ }
242
+ }
243
+
244
+
245
+ /* ============================================
246
+ * 9. Reduced motion
247
+ * ============================================ */
248
+
249
+ @media (prefers-reduced-motion: reduce) {
250
+ .dsrc-radio-group input[type="radio"] + label::before,
251
+ .dsrc-radio-group input[type="radio"] + label::after {
252
+ transition: none;
253
+ }
254
+ }
255
+
256
+
257
+ /* ============================================
258
+ * 10. Print
259
+ * ============================================ */
260
+
261
+ @media print {
262
+ .dsrc-radio-group input[type="radio"] {
263
+ opacity: 1;
264
+ }
265
+
266
+ .dsrc-radio-group input[type="radio"] + label::before,
267
+ .dsrc-radio-group input[type="radio"] + label::after {
268
+ display: none;
269
+ }
270
+ }
@@ -0,0 +1,362 @@
1
+ /**
2
+ * DSRC Range (Slider) Component
3
+ *
4
+ * Styled native range input with progress track via CSS variables.
5
+ * The progress bar requires JS to set --progress-left / --progress-right.
6
+ *
7
+ * Variants:
8
+ * --sm ......... Smaller thumb and track
9
+ * --step ....... Visual step markers
10
+ * --double ..... Dual-thumb range (two inputs)
11
+ *
12
+ * Usage:
13
+ * <div class="dsrc-range-group">
14
+ * <div class="dsrc-range" data-dsrc-range
15
+ * style="--progress-left:0;--progress-right:50%">
16
+ * <span class="dsrc-range__min">0</span>
17
+ * <span class="dsrc-range__max">100</span>
18
+ * <input type="range" min="0" max="100">
19
+ * <output class="dsrc-range__output">50</output>
20
+ * </div>
21
+ * </div>
22
+ */
23
+
24
+
25
+ /* ============================================
26
+ * 1. Range group (wrapper with validation)
27
+ * ============================================ */
28
+
29
+ .dsrc-range-group {
30
+ position: relative;
31
+ }
32
+
33
+ .dsrc-range-group--error {
34
+ padding-left: var(--dsrc-spacing-3);
35
+ border-left: 2px solid var(--dsrc-color-erreur-bordure);
36
+ }
37
+
38
+ .dsrc-range-group--valid {
39
+ padding-left: var(--dsrc-spacing-3);
40
+ border-left: 2px solid var(--dsrc-color-succes-bordure);
41
+ }
42
+
43
+
44
+ /* ============================================
45
+ * 2. Base range
46
+ * ============================================ */
47
+
48
+ .dsrc-range {
49
+ --thumb-size: 24px;
50
+ position: relative;
51
+ display: flex;
52
+ flex-wrap: wrap;
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ }
56
+
57
+ .dsrc-range input[type="range"] {
58
+ width: 100%;
59
+ outline: none;
60
+ }
61
+
62
+ .dsrc-range__output {
63
+ visibility: hidden;
64
+ }
65
+
66
+ .dsrc-range__output,
67
+ .dsrc-range__min,
68
+ .dsrc-range__max {
69
+ text-align: center;
70
+ min-width: var(--thumb-size);
71
+ font-family: var(--dsrc-font-family-sans);
72
+ font-size: var(--dsrc-font-size-caption);
73
+ color: var(--dsrc-color-gris-600);
74
+ }
75
+
76
+
77
+ /* ============================================
78
+ * 3. JS-enhanced track (::before = bg, ::after = fill)
79
+ * ============================================ */
80
+
81
+ .dsrc-range[data-dsrc-range] {
82
+ --progress-left: 0;
83
+ --progress-right: calc(var(--thumb-size) * 0.5);
84
+ }
85
+
86
+ .dsrc-range[data-dsrc-range]::before,
87
+ .dsrc-range[data-dsrc-range]::after {
88
+ content: '';
89
+ display: block;
90
+ position: absolute;
91
+ top: 26px;
92
+ left: 0;
93
+ right: 0;
94
+ height: 12px;
95
+ border-radius: 6px;
96
+ }
97
+
98
+ .dsrc-range[data-dsrc-range]::before {
99
+ background-color: var(--dsrc-color-gris-200);
100
+ outline-offset: -1px;
101
+ }
102
+
103
+ .dsrc-range[data-dsrc-range]::after {
104
+ background-color: var(--dsrc-color-primaire);
105
+ clip-path: polygon(
106
+ var(--progress-left) 0,
107
+ var(--progress-right) 0,
108
+ var(--progress-right) 100%,
109
+ var(--progress-left) 100%
110
+ );
111
+ }
112
+
113
+
114
+ /* ============================================
115
+ * 4. Styled thumb
116
+ * ============================================ */
117
+
118
+ .dsrc-range[data-dsrc-range] input[type="range"] {
119
+ -webkit-appearance: none;
120
+ appearance: none;
121
+ background-color: transparent;
122
+ width: 100%;
123
+ height: var(--thumb-size);
124
+ position: relative;
125
+ z-index: 1;
126
+ }
127
+
128
+ .dsrc-range[data-dsrc-range] input[type="range"]::-webkit-slider-thumb {
129
+ -webkit-appearance: none;
130
+ width: var(--thumb-size);
131
+ height: var(--thumb-size);
132
+ border-radius: 50%;
133
+ border: none;
134
+ background-color: var(--dsrc-color-primaire);
135
+ box-shadow: var(--dsrc-shadow-sm);
136
+ cursor: pointer;
137
+ pointer-events: auto;
138
+ }
139
+
140
+ .dsrc-range[data-dsrc-range] input[type="range"]::-moz-range-thumb {
141
+ width: var(--thumb-size);
142
+ height: var(--thumb-size);
143
+ border-radius: 50%;
144
+ border: none;
145
+ background-color: var(--dsrc-color-primaire);
146
+ box-shadow: var(--dsrc-shadow-sm);
147
+ cursor: pointer;
148
+ pointer-events: auto;
149
+ }
150
+
151
+ .dsrc-range[data-dsrc-range] .dsrc-range__output {
152
+ visibility: visible;
153
+ }
154
+
155
+
156
+ /* ============================================
157
+ * 5. Focus
158
+ * ============================================ */
159
+
160
+ .dsrc-range[data-dsrc-range] input[type="range"]:focus-visible::-webkit-slider-thumb {
161
+ outline: 2px solid var(--dsrc-color-primaire);
162
+ outline-offset: 2px;
163
+ }
164
+
165
+ .dsrc-range[data-dsrc-range] input[type="range"]:focus-visible::-moz-range-thumb {
166
+ outline: 2px solid var(--dsrc-color-primaire);
167
+ outline-offset: 2px;
168
+ }
169
+
170
+
171
+ /* ============================================
172
+ * 6. Hover
173
+ * ============================================ */
174
+
175
+ .dsrc-range[data-dsrc-range] input[type="range"]:not(:disabled):hover::-webkit-slider-thumb {
176
+ background-color: var(--dsrc-color-primaire-hover);
177
+ }
178
+
179
+ .dsrc-range[data-dsrc-range] input[type="range"]:not(:disabled):hover::-moz-range-thumb {
180
+ background-color: var(--dsrc-color-primaire-hover);
181
+ }
182
+
183
+
184
+ /* ============================================
185
+ * 7. Disabled
186
+ * ============================================ */
187
+
188
+ .dsrc-range-group--disabled .dsrc-range__output,
189
+ .dsrc-range-group--disabled .dsrc-range__min,
190
+ .dsrc-range-group--disabled .dsrc-range__max {
191
+ color: var(--dsrc-color-gris-400);
192
+ }
193
+
194
+ .dsrc-range[data-dsrc-range] input[type="range"]:disabled::-webkit-slider-thumb {
195
+ background-color: var(--dsrc-color-gris-400);
196
+ box-shadow: none;
197
+ cursor: not-allowed;
198
+ }
199
+
200
+ .dsrc-range[data-dsrc-range] input[type="range"]:disabled::-moz-range-thumb {
201
+ background-color: var(--dsrc-color-gris-400);
202
+ box-shadow: none;
203
+ cursor: not-allowed;
204
+ }
205
+
206
+
207
+ /* ============================================
208
+ * 8. Small variant
209
+ * ============================================ */
210
+
211
+ .dsrc-range--sm {
212
+ --thumb-size: 16px;
213
+ }
214
+
215
+ .dsrc-range--sm[data-dsrc-range]::before,
216
+ .dsrc-range--sm[data-dsrc-range]::after {
217
+ top: 24px;
218
+ height: 8px;
219
+ border-radius: 4px;
220
+ }
221
+
222
+
223
+ /* ============================================
224
+ * 9. Step markers
225
+ * ============================================ */
226
+
227
+ .dsrc-range--step[data-dsrc-range]::before,
228
+ .dsrc-range--step[data-dsrc-range]::after {
229
+ --step-width: 0;
230
+ padding-left: 10px;
231
+ padding-right: 10px;
232
+ background-repeat: repeat-x;
233
+ background-size: var(--step-width) 100%;
234
+ background-position: 10px 0;
235
+ background-clip: content-box;
236
+ }
237
+
238
+ .dsrc-range--step[data-dsrc-range]::before {
239
+ background-image: radial-gradient(circle at 2px 50%,
240
+ var(--dsrc-color-gris-600) 0,
241
+ var(--dsrc-color-gris-600) 1px,
242
+ transparent 1px
243
+ );
244
+ }
245
+
246
+
247
+ /* ============================================
248
+ * 10. Double range (dual thumbs)
249
+ * ============================================ */
250
+
251
+ .dsrc-range--double .dsrc-range__output {
252
+ min-width: calc(var(--thumb-size) * 2);
253
+ }
254
+
255
+ .dsrc-range--double[data-dsrc-range] input[type="range"] {
256
+ width: calc(100% - var(--thumb-size));
257
+ pointer-events: none;
258
+ }
259
+
260
+ .dsrc-range--double[data-dsrc-range] input[type="range"]::-webkit-slider-thumb {
261
+ pointer-events: auto;
262
+ }
263
+
264
+ .dsrc-range--double[data-dsrc-range] input[type="range"]::-moz-range-thumb {
265
+ pointer-events: auto;
266
+ }
267
+
268
+ .dsrc-range--double[data-dsrc-range] input[type="range"]:nth-of-type(1) {
269
+ margin-right: var(--thumb-size);
270
+ }
271
+
272
+ .dsrc-range--double[data-dsrc-range] input[type="range"]:nth-of-type(2) {
273
+ position: absolute;
274
+ right: 0;
275
+ top: 20px;
276
+ }
277
+
278
+
279
+ /* ============================================
280
+ * 11. High contrast (forced-colors)
281
+ * ============================================ */
282
+
283
+ @media (forced-colors: active) {
284
+ .dsrc-range[data-dsrc-range] input[type="range"] {
285
+ border: none;
286
+ }
287
+
288
+ .dsrc-range[data-dsrc-range]::before {
289
+ box-shadow: 0 0 0 1px ButtonText;
290
+ }
291
+
292
+ .dsrc-range[data-dsrc-range]::after {
293
+ background-color: Highlight;
294
+ }
295
+
296
+ .dsrc-range[data-dsrc-range] input[type="range"]::-webkit-slider-thumb {
297
+ background-color: ButtonText;
298
+ box-shadow: none;
299
+ }
300
+
301
+ .dsrc-range[data-dsrc-range] input[type="range"]::-moz-range-thumb {
302
+ background-color: ButtonText;
303
+ box-shadow: none;
304
+ }
305
+
306
+ .dsrc-range[data-dsrc-range] input[type="range"]:focus-visible::-webkit-slider-thumb {
307
+ outline-color: Highlight;
308
+ }
309
+
310
+ .dsrc-range[data-dsrc-range] input[type="range"]:focus-visible::-moz-range-thumb {
311
+ outline-color: Highlight;
312
+ }
313
+
314
+ .dsrc-range-group--disabled .dsrc-range__output,
315
+ .dsrc-range-group--disabled .dsrc-range__min,
316
+ .dsrc-range-group--disabled .dsrc-range__max {
317
+ color: GrayText;
318
+ }
319
+
320
+ .dsrc-range[data-dsrc-range] input[type="range"]:disabled::-webkit-slider-thumb {
321
+ background-color: GrayText;
322
+ }
323
+
324
+ .dsrc-range[data-dsrc-range] input[type="range"]:disabled::-moz-range-thumb {
325
+ background-color: GrayText;
326
+ }
327
+
328
+ .dsrc-range--step[data-dsrc-range]::before {
329
+ background-image: radial-gradient(circle at 2px 50%,
330
+ ButtonText 0,
331
+ ButtonText 1px,
332
+ transparent 1px
333
+ );
334
+ }
335
+ }
336
+
337
+
338
+ /* ============================================
339
+ * 12. Reduced motion
340
+ * ============================================ */
341
+
342
+ @media (prefers-reduced-motion: reduce) {
343
+ .dsrc-range[data-dsrc-range] input[type="range"]::-webkit-slider-thumb {
344
+ transition: none;
345
+ }
346
+
347
+ .dsrc-range[data-dsrc-range] input[type="range"]::-moz-range-thumb {
348
+ transition: none;
349
+ }
350
+ }
351
+
352
+
353
+ /* ============================================
354
+ * 13. Print
355
+ * ============================================ */
356
+
357
+ @media print {
358
+ .dsrc-range[data-dsrc-range]::before,
359
+ .dsrc-range[data-dsrc-range]::after {
360
+ display: none;
361
+ }
362
+ }