@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,556 @@
1
+ /**
2
+ * DSRC Table Component
3
+ * Aligned with DSFR multi-layer table architecture
4
+ *
5
+ * Structure (multi-layer wrapper for proper overflow & layout):
6
+ *
7
+ * <div class="dsrc-table" id="table-component">
8
+ * <div class="dsrc-table__header">
9
+ * <!-- Optional: search bar, display toggles, filters -->
10
+ * </div>
11
+ * <div class="dsrc-table__wrapper">
12
+ * <div class="dsrc-table__container">
13
+ * <div class="dsrc-table__content">
14
+ * <table>
15
+ * <caption>Titre du tableau</caption>
16
+ * <thead>
17
+ * <tr>
18
+ * <th scope="col">Colonne 1</th>
19
+ * <th scope="col">Colonne 2</th>
20
+ * </tr>
21
+ * </thead>
22
+ * <tbody>
23
+ * <tr>
24
+ * <td>Donnee 1</td>
25
+ * <td>Donnee 2</td>
26
+ * </tr>
27
+ * </tbody>
28
+ * </table>
29
+ * </div>
30
+ * </div>
31
+ * </div>
32
+ * <div class="dsrc-table__footer">
33
+ * <div class="dsrc-table__footer--start">
34
+ * <p class="dsrc-table__detail">215 lignes</p>
35
+ * </div>
36
+ * <div class="dsrc-table__footer--end">
37
+ * <!-- Pagination or actions -->
38
+ * </div>
39
+ * </div>
40
+ * </div>
41
+ *
42
+ * Variants:
43
+ * --sm ................. Compact padding
44
+ * --lg ................. Spacious padding
45
+ * --bordered ........... All cell borders
46
+ * --striped ............ Alternating row backgrounds
47
+ * --no-scroll .......... Disable horizontal overflow
48
+ * --no-caption ......... Visually hide caption (still accessible)
49
+ * --caption-bottom ..... Caption below table
50
+ * --fixed .............. Sticky thead
51
+ *
52
+ * Column sizing (on <th>):
53
+ * .dsrc-col--xs ........ 5%
54
+ * .dsrc-col--sm ........ 10%
55
+ * .dsrc-col--md ........ 25%
56
+ * .dsrc-col--lg ........ 50%
57
+ *
58
+ * Cell alignment:
59
+ * .dsrc-cell--top ...... vertical-align: top
60
+ * .dsrc-cell--center ... text-align: center
61
+ * .dsrc-cell--right .... text-align: right
62
+ *
63
+ * Sortable:
64
+ * <th scope="col" aria-sort="none|ascending|descending">
65
+ * <button>Nom</button>
66
+ * </th>
67
+ *
68
+ * Selected rows:
69
+ * <tr aria-selected="true">
70
+ */
71
+
72
+
73
+ /* ============================================
74
+ * 1. Root wrapper
75
+ * ============================================ */
76
+
77
+ .dsrc-table {
78
+ display: flex;
79
+ flex-direction: column;
80
+ font-family: var(--dsrc-font-family-sans);
81
+ font-size: var(--dsrc-font-size-small);
82
+ background-color: var(--dsrc-color-blanc);
83
+ border: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
84
+ border-radius: var(--dsrc-radius-default);
85
+ overflow: hidden;
86
+ }
87
+
88
+
89
+ /* ============================================
90
+ * 2. Header area (search, filters, controls)
91
+ * ============================================ */
92
+
93
+ .dsrc-table__header {
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ gap: var(--dsrc-spacing-3);
98
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-4);
99
+ border-bottom: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
100
+ }
101
+
102
+ .dsrc-table__header:empty {
103
+ display: none;
104
+ }
105
+
106
+
107
+ /* ============================================
108
+ * 3. Wrapper / Container / Content layers
109
+ * Enables horizontal scroll without breaking
110
+ * the outer border-radius or header/footer
111
+ * ============================================ */
112
+
113
+ .dsrc-table__wrapper {
114
+ overflow: hidden;
115
+ }
116
+
117
+ .dsrc-table__container {
118
+ overflow-x: auto;
119
+ }
120
+
121
+ .dsrc-table__content {
122
+ min-width: 100%;
123
+ }
124
+
125
+
126
+ /* ============================================
127
+ * 4. The <table> element itself
128
+ * ============================================ */
129
+
130
+ .dsrc-table table {
131
+ width: 100%;
132
+ border-collapse: collapse;
133
+ border-spacing: 0;
134
+ }
135
+
136
+
137
+ /* ============================================
138
+ * 5. Caption
139
+ * ============================================ */
140
+
141
+ .dsrc-table caption {
142
+ caption-side: top;
143
+ text-align: start;
144
+ font-family: var(--dsrc-font-family-sans);
145
+ font-size: var(--dsrc-font-size-body);
146
+ font-weight: var(--dsrc-font-weight-bold);
147
+ color: var(--dsrc-color-noir);
148
+ padding: var(--dsrc-spacing-4);
149
+ background-color: var(--dsrc-color-gris-50);
150
+ border-bottom: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
151
+ }
152
+
153
+ /* --caption-bottom: move caption below table */
154
+ .dsrc-table--caption-bottom caption {
155
+ caption-side: bottom;
156
+ border-bottom: none;
157
+ border-top: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
158
+ }
159
+
160
+ /* --no-caption: visually hide but keep accessible */
161
+ .dsrc-table--no-caption caption {
162
+ position: absolute;
163
+ width: 1px;
164
+ height: 1px;
165
+ padding: 0;
166
+ margin: -1px;
167
+ overflow: hidden;
168
+ clip: rect(0, 0, 0, 0);
169
+ white-space: nowrap;
170
+ border: 0;
171
+ }
172
+
173
+
174
+ /* ============================================
175
+ * 6. Table head
176
+ * ============================================ */
177
+
178
+ .dsrc-table thead {
179
+ background-color: var(--dsrc-color-gris-50);
180
+ }
181
+
182
+ .dsrc-table th {
183
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-4);
184
+ text-align: start;
185
+ font-size: var(--dsrc-font-size-micro);
186
+ font-weight: var(--dsrc-font-weight-semibold);
187
+ font-family: var(--dsrc-font-family-mono);
188
+ text-transform: uppercase;
189
+ letter-spacing: var(--dsrc-font-letter-spacing-caps);
190
+ color: var(--dsrc-color-gris-600);
191
+ border-bottom: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
192
+ white-space: nowrap;
193
+ vertical-align: middle;
194
+ }
195
+
196
+
197
+ /* ============================================
198
+ * 7. Table body cells
199
+ * ============================================ */
200
+
201
+ .dsrc-table td {
202
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-4);
203
+ border-bottom: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-100);
204
+ color: var(--dsrc-color-gris-800);
205
+ vertical-align: middle;
206
+ line-height: var(--dsrc-font-line-height-relaxed);
207
+ }
208
+
209
+ .dsrc-table tbody tr:last-child td {
210
+ border-bottom: none;
211
+ }
212
+
213
+
214
+ /* ============================================
215
+ * 8. Row hover
216
+ * ============================================ */
217
+
218
+ .dsrc-table tbody tr:hover td {
219
+ background-color: var(--dsrc-color-gris-50);
220
+ }
221
+
222
+
223
+ /* ============================================
224
+ * 9. Selected rows
225
+ * ============================================ */
226
+
227
+ .dsrc-table tr[aria-selected="true"] td {
228
+ background-color: var(--dsrc-color-primaire-clair);
229
+ }
230
+
231
+ .dsrc-table tr[aria-selected="true"]:hover td {
232
+ background-color: var(--dsrc-color-primaire-clair);
233
+ }
234
+
235
+
236
+ /* ============================================
237
+ * 10. Sortable headers
238
+ * <th scope="col" aria-sort="none">
239
+ * <button type="button">Nom</button>
240
+ * </th>
241
+ * ============================================ */
242
+
243
+ .dsrc-table th[aria-sort] {
244
+ cursor: pointer;
245
+ position: relative;
246
+ user-select: none;
247
+ }
248
+
249
+ .dsrc-table th[aria-sort]:hover {
250
+ background-color: var(--dsrc-color-gris-100);
251
+ }
252
+
253
+ /* Sort button inside th (DSFR pattern) */
254
+ .dsrc-table th[aria-sort] button {
255
+ all: unset;
256
+ display: inline-flex;
257
+ align-items: center;
258
+ gap: var(--dsrc-spacing-2);
259
+ cursor: pointer;
260
+ font: inherit;
261
+ color: inherit;
262
+ text-transform: inherit;
263
+ letter-spacing: inherit;
264
+ width: 100%;
265
+ }
266
+
267
+ .dsrc-table th[aria-sort] button:focus-visible {
268
+ outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
269
+ outline-offset: calc(-1 * var(--dsrc-outline-offset));
270
+ border-radius: 2px;
271
+ }
272
+
273
+ /* Sort indicator arrow via pseudo-element */
274
+ .dsrc-table th[aria-sort] button::after {
275
+ content: "";
276
+ display: inline-block;
277
+ width: 0;
278
+ height: 0;
279
+ flex-shrink: 0;
280
+ margin-left: auto;
281
+ border-left: 4px solid transparent;
282
+ border-right: 4px solid transparent;
283
+ border-bottom: 5px solid var(--dsrc-color-gris-400);
284
+ transition: transform var(--dsrc-transition-duration-fast) ease,
285
+ border-color var(--dsrc-transition-duration-fast) ease;
286
+ }
287
+
288
+ /* Ascending: arrow points up (default position) */
289
+ .dsrc-table th[aria-sort="ascending"] button::after {
290
+ border-bottom-color: var(--dsrc-color-primaire);
291
+ transform: rotate(0deg);
292
+ }
293
+
294
+ /* Descending: arrow points down */
295
+ .dsrc-table th[aria-sort="descending"] button::after {
296
+ border-bottom-color: var(--dsrc-color-primaire);
297
+ transform: rotate(180deg);
298
+ }
299
+
300
+ /* Unsorted: neutral double arrow (stacked) */
301
+ .dsrc-table th[aria-sort="none"] button::after {
302
+ border-bottom-color: var(--dsrc-color-gris-400);
303
+ }
304
+
305
+ /* Focus-visible fallback on th itself (no inner button) */
306
+ .dsrc-table th[aria-sort]:focus-visible {
307
+ outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
308
+ outline-offset: calc(-1 * var(--dsrc-outline-offset));
309
+ }
310
+
311
+
312
+ /* ============================================
313
+ * 11. Footer area (row count, pagination)
314
+ * ============================================ */
315
+
316
+ .dsrc-table__footer {
317
+ display: flex;
318
+ align-items: center;
319
+ justify-content: space-between;
320
+ gap: var(--dsrc-spacing-3);
321
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-4);
322
+ border-top: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
323
+ }
324
+
325
+ .dsrc-table__footer:empty {
326
+ display: none;
327
+ }
328
+
329
+ .dsrc-table__footer--start {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: var(--dsrc-spacing-2);
333
+ }
334
+
335
+ .dsrc-table__footer--end {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: var(--dsrc-spacing-2);
339
+ margin-left: auto;
340
+ }
341
+
342
+ .dsrc-table__detail {
343
+ font-size: var(--dsrc-font-size-caption);
344
+ color: var(--dsrc-color-gris-600);
345
+ margin: 0;
346
+ }
347
+
348
+
349
+ /* ============================================
350
+ * 12. Size variants
351
+ * ============================================ */
352
+
353
+ /* Small: tighter padding */
354
+ .dsrc-table--sm th,
355
+ .dsrc-table--sm td {
356
+ padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
357
+ }
358
+
359
+ .dsrc-table--sm caption {
360
+ padding: var(--dsrc-spacing-3);
361
+ }
362
+
363
+ .dsrc-table--sm .dsrc-table__header,
364
+ .dsrc-table--sm .dsrc-table__footer {
365
+ padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
366
+ }
367
+
368
+ /* Large: more spacious padding */
369
+ .dsrc-table--lg th,
370
+ .dsrc-table--lg td {
371
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5);
372
+ }
373
+
374
+ .dsrc-table--lg caption {
375
+ padding: var(--dsrc-spacing-5);
376
+ }
377
+
378
+ .dsrc-table--lg .dsrc-table__header,
379
+ .dsrc-table--lg .dsrc-table__footer {
380
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5);
381
+ }
382
+
383
+
384
+ /* ============================================
385
+ * 13. Bordered variant (all cell borders)
386
+ * ============================================ */
387
+
388
+ .dsrc-table--bordered th,
389
+ .dsrc-table--bordered td {
390
+ border: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
391
+ }
392
+
393
+
394
+ /* ============================================
395
+ * 14. Striped variant
396
+ * ============================================ */
397
+
398
+ .dsrc-table--striped tbody tr:nth-child(even) td {
399
+ background-color: var(--dsrc-color-gris-50);
400
+ }
401
+
402
+ /* Override hover to maintain striped look */
403
+ .dsrc-table--striped tbody tr:nth-child(even):hover td {
404
+ background-color: var(--dsrc-color-gris-100);
405
+ }
406
+
407
+
408
+ /* ============================================
409
+ * 15. No-scroll variant
410
+ * ============================================ */
411
+
412
+ .dsrc-table--no-scroll .dsrc-table__container {
413
+ overflow-x: visible;
414
+ }
415
+
416
+ .dsrc-table--no-scroll table {
417
+ table-layout: fixed;
418
+ word-wrap: break-word;
419
+ overflow-wrap: break-word;
420
+ }
421
+
422
+
423
+ /* ============================================
424
+ * 16. Fixed / sticky header
425
+ * ============================================ */
426
+
427
+ .dsrc-table--fixed thead {
428
+ position: sticky;
429
+ top: 0;
430
+ z-index: 1;
431
+ }
432
+
433
+ .dsrc-table--fixed thead th {
434
+ background-color: var(--dsrc-color-gris-50);
435
+ }
436
+
437
+
438
+ /* ============================================
439
+ * 17. Column sizing classes (on <th>)
440
+ * ============================================ */
441
+
442
+ .dsrc-col--xs {
443
+ width: 5%;
444
+ }
445
+
446
+ .dsrc-col--sm {
447
+ width: 10%;
448
+ }
449
+
450
+ .dsrc-col--md {
451
+ width: 25%;
452
+ }
453
+
454
+ .dsrc-col--lg {
455
+ width: 50%;
456
+ }
457
+
458
+
459
+ /* ============================================
460
+ * 18. Cell alignment utilities
461
+ * ============================================ */
462
+
463
+ /* Vertical alignment */
464
+ .dsrc-cell--top {
465
+ vertical-align: top;
466
+ }
467
+
468
+ /* Horizontal alignment */
469
+ .dsrc-cell--center {
470
+ text-align: center;
471
+ }
472
+
473
+ .dsrc-cell--right {
474
+ text-align: end;
475
+ }
476
+
477
+
478
+ /* ============================================
479
+ * 19. Scroll shadow indicators
480
+ * Applied to .dsrc-table__container
481
+ * via data-scroll attribute (JS driven)
482
+ * ============================================ */
483
+
484
+ .dsrc-table__container {
485
+ position: relative;
486
+ }
487
+
488
+ .dsrc-table__container::before,
489
+ .dsrc-table__container::after {
490
+ content: "";
491
+ position: sticky;
492
+ top: 0;
493
+ bottom: 0;
494
+ width: var(--dsrc-spacing-6);
495
+ pointer-events: none;
496
+ opacity: 0;
497
+ transition: opacity var(--dsrc-transition-duration-fast) ease;
498
+ z-index: 1;
499
+ }
500
+
501
+ .dsrc-table__container::before {
502
+ left: 0;
503
+ background: linear-gradient(to right, var(--dsrc-color-gris-100), transparent);
504
+ }
505
+
506
+ .dsrc-table__container::after {
507
+ right: 0;
508
+ background: linear-gradient(to left, var(--dsrc-color-gris-100), transparent);
509
+ }
510
+
511
+ /* JS sets data-scroll attribute on .dsrc-table__container */
512
+ .dsrc-table__container[data-scroll="right"]::after,
513
+ .dsrc-table__container[data-scroll="both"]::after {
514
+ opacity: 1;
515
+ }
516
+
517
+ .dsrc-table__container[data-scroll="left"]::before,
518
+ .dsrc-table__container[data-scroll="both"]::before {
519
+ opacity: 1;
520
+ }
521
+
522
+
523
+ /* ============================================
524
+ * 20. High contrast (forced-colors)
525
+ * ============================================ */
526
+
527
+ @media (forced-colors: active) {
528
+ .dsrc-table {
529
+ border: 1px solid ButtonText;
530
+ }
531
+
532
+ .dsrc-table th {
533
+ border-bottom: 2px solid ButtonText;
534
+ }
535
+
536
+ .dsrc-table td {
537
+ border-bottom: 1px solid ButtonText;
538
+ }
539
+
540
+ .dsrc-table tr[aria-selected="true"] td {
541
+ border: 2px solid Highlight;
542
+ }
543
+
544
+ .dsrc-table th[aria-sort] button::after {
545
+ border-bottom-color: ButtonText;
546
+ }
547
+
548
+ .dsrc-table th[aria-sort="ascending"] button::after,
549
+ .dsrc-table th[aria-sort="descending"] button::after {
550
+ border-bottom-color: Highlight;
551
+ }
552
+
553
+ .dsrc-table th[aria-sort] button:focus-visible {
554
+ outline: 2px solid Highlight;
555
+ }
556
+ }