@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,140 @@
1
+ /**
2
+ * DSRC Stepper Component
3
+ *
4
+ * Step progress indicator for multi-step administrative procedures.
5
+ * State is driven by CSS variables --steps and --current-step (set inline).
6
+ *
7
+ * Usage:
8
+ * <div class="dsrc-stepper">
9
+ * <h2 class="dsrc-stepper__title">
10
+ * <span class="dsrc-stepper__state">Étape 2 sur 4</span>
11
+ * Informations personnelles
12
+ * </h2>
13
+ * <div class="dsrc-stepper__steps"
14
+ * style="--steps:4;--current-step:2"></div>
15
+ * <p class="dsrc-stepper__details">Étape suivante : Pièces justificatives</p>
16
+ * </div>
17
+ */
18
+
19
+
20
+ /* ============================================
21
+ * 1. Base stepper
22
+ * ============================================ */
23
+
24
+ .dsrc-stepper {
25
+ display: flex;
26
+ flex-direction: column;
27
+ margin-bottom: var(--dsrc-spacing-8);
28
+ }
29
+
30
+
31
+ /* ============================================
32
+ * 2. Title
33
+ * ============================================ */
34
+
35
+ .dsrc-stepper__title {
36
+ display: flex;
37
+ flex-direction: column-reverse;
38
+ font-family: var(--dsrc-font-family-sans);
39
+ font-size: var(--dsrc-font-size-h6);
40
+ font-weight: 700;
41
+ line-height: 1.5;
42
+ margin: 0 0 var(--dsrc-spacing-3);
43
+ }
44
+
45
+
46
+ /* ============================================
47
+ * 3. State label ("Étape 2 sur 4")
48
+ * ============================================ */
49
+
50
+ .dsrc-stepper__state {
51
+ font-size: var(--dsrc-font-size-caption);
52
+ font-weight: 400;
53
+ color: var(--dsrc-color-gris-600);
54
+ margin-bottom: var(--dsrc-spacing-1);
55
+ }
56
+
57
+
58
+ /* ============================================
59
+ * 4. Progress bar
60
+ * ============================================ */
61
+
62
+ .dsrc-stepper__steps {
63
+ --stepper-size: 8px;
64
+ --default-outer: calc((100% + var(--stepper-size)) / var(--steps));
65
+ --default-inner: calc(var(--default-outer) - var(--stepper-size));
66
+ --active-outer: calc((100% + var(--stepper-size)) / var(--current-step));
67
+ --active-inner: calc(var(--active-outer) - var(--stepper-size));
68
+ width: 100%;
69
+ height: var(--stepper-size);
70
+ border-radius: calc(var(--stepper-size) / 2);
71
+ background-repeat: no-repeat;
72
+ background-size:
73
+ calc((100% + var(--stepper-size)) * var(--current-step) / var(--steps) - var(--stepper-size)) 100%,
74
+ 100% 100%;
75
+ background-position: 0 0, 0 0;
76
+ background-image:
77
+ repeating-linear-gradient(
78
+ to right,
79
+ var(--dsrc-color-primaire) 0,
80
+ var(--dsrc-color-primaire) var(--active-inner),
81
+ transparent var(--active-inner),
82
+ transparent var(--active-outer)
83
+ ),
84
+ repeating-linear-gradient(
85
+ to right,
86
+ var(--dsrc-color-gris-200) 0,
87
+ var(--dsrc-color-gris-200) var(--default-inner),
88
+ transparent var(--default-inner),
89
+ transparent var(--default-outer)
90
+ );
91
+ }
92
+
93
+
94
+ /* ============================================
95
+ * 5. Details ("Étape suivante : ...")
96
+ * ============================================ */
97
+
98
+ .dsrc-stepper__details {
99
+ font-family: var(--dsrc-font-family-sans);
100
+ font-size: var(--dsrc-font-size-caption);
101
+ color: var(--dsrc-color-gris-600);
102
+ margin-top: var(--dsrc-spacing-3);
103
+ }
104
+
105
+
106
+ /* ============================================
107
+ * 6. High contrast (forced-colors)
108
+ * ============================================ */
109
+
110
+ @media (forced-colors: active) {
111
+ .dsrc-stepper__steps {
112
+ forced-color-adjust: none;
113
+ background-image:
114
+ repeating-linear-gradient(
115
+ to right,
116
+ Highlight 0,
117
+ Highlight var(--active-inner),
118
+ transparent var(--active-inner),
119
+ transparent var(--active-outer)
120
+ ),
121
+ repeating-linear-gradient(
122
+ to right,
123
+ GrayText 0,
124
+ GrayText var(--default-inner),
125
+ transparent var(--default-inner),
126
+ transparent var(--default-outer)
127
+ );
128
+ }
129
+ }
130
+
131
+
132
+ /* ============================================
133
+ * 7. Print
134
+ * ============================================ */
135
+
136
+ @media print {
137
+ .dsrc-stepper__steps {
138
+ border: 1px solid var(--dsrc-color-gris-400);
139
+ }
140
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * DSRC Summary (Table of Contents) Component
3
+ *
4
+ * Ordered list of anchor links with custom numbering via CSS counters.
5
+ *
6
+ * Usage:
7
+ * <nav class="dsrc-summary" role="navigation" aria-label="Sommaire">
8
+ * <h2 class="dsrc-summary__title">Sommaire</h2>
9
+ * <ol class="dsrc-summary__list">
10
+ * <li>
11
+ * <a class="dsrc-summary__link" href="#section1">Section 1</a>
12
+ * </li>
13
+ * <li>
14
+ * <a class="dsrc-summary__link" href="#section2">Section 2</a>
15
+ * </li>
16
+ * </ol>
17
+ * </nav>
18
+ */
19
+
20
+
21
+ /* ============================================
22
+ * 1. Base summary
23
+ * ============================================ */
24
+
25
+ .dsrc-summary {
26
+ padding: var(--dsrc-spacing-6);
27
+ background-color: var(--dsrc-color-gris-50);
28
+ font-family: var(--dsrc-font-family-sans);
29
+ font-size: var(--dsrc-font-size-caption);
30
+ line-height: 1.5;
31
+ }
32
+
33
+ @media (min-width: 768px) {
34
+ .dsrc-summary {
35
+ padding: var(--dsrc-spacing-8);
36
+ }
37
+ }
38
+
39
+
40
+ /* ============================================
41
+ * 2. Title
42
+ * ============================================ */
43
+
44
+ .dsrc-summary__title {
45
+ font-size: var(--dsrc-font-size-caption);
46
+ font-weight: 700;
47
+ text-transform: uppercase;
48
+ letter-spacing: 0.05em;
49
+ padding-left: var(--dsrc-spacing-2);
50
+ margin: 0 0 var(--dsrc-spacing-2);
51
+ }
52
+
53
+
54
+ /* ============================================
55
+ * 3. Ordered list with custom counters
56
+ * ============================================ */
57
+
58
+ .dsrc-summary__list {
59
+ list-style-type: none;
60
+ padding: 0;
61
+ margin: 0;
62
+ counter-reset: summary-counter;
63
+ }
64
+
65
+ .dsrc-summary__list li {
66
+ counter-increment: summary-counter;
67
+ padding: var(--dsrc-spacing-2) 0;
68
+ }
69
+
70
+
71
+ /* ============================================
72
+ * 4. Links with counter number
73
+ * ============================================ */
74
+
75
+ .dsrc-summary__link {
76
+ display: inline;
77
+ position: relative;
78
+ font-size: var(--dsrc-font-size-caption);
79
+ color: var(--dsrc-color-noir);
80
+ text-decoration: none;
81
+ }
82
+
83
+ .dsrc-summary__link::before {
84
+ content: counter(summary-counter) '. ';
85
+ font-weight: 700;
86
+ font-size: var(--dsrc-font-size-xl);
87
+ }
88
+
89
+ .dsrc-summary__link:hover {
90
+ text-decoration: underline;
91
+ }
92
+
93
+ .dsrc-summary__link:focus-visible {
94
+ outline: 2px solid var(--dsrc-color-primaire);
95
+ outline-offset: 2px;
96
+ }
97
+
98
+
99
+ /* ============================================
100
+ * 5. Nested lists
101
+ * ============================================ */
102
+
103
+ .dsrc-summary__list .dsrc-summary__list {
104
+ counter-reset: summary-sub-counter;
105
+ padding-left: var(--dsrc-spacing-4);
106
+ }
107
+
108
+ .dsrc-summary__list .dsrc-summary__list li {
109
+ counter-increment: summary-sub-counter;
110
+ }
111
+
112
+ .dsrc-summary__list .dsrc-summary__list .dsrc-summary__link::before {
113
+ content: counter(summary-counter) '.' counter(summary-sub-counter) '. ';
114
+ font-size: var(--dsrc-font-size-lg);
115
+ }
116
+
117
+
118
+ /* ============================================
119
+ * 6. High contrast (forced-colors)
120
+ * ============================================ */
121
+
122
+ @media (forced-colors: active) {
123
+ .dsrc-summary {
124
+ outline: 1px solid ButtonText;
125
+ }
126
+
127
+ .dsrc-summary__link {
128
+ text-decoration: underline;
129
+ text-underline-offset: 5px;
130
+ }
131
+ }
132
+
133
+
134
+ /* ============================================
135
+ * 7. Print
136
+ * ============================================ */
137
+
138
+ @media print {
139
+ .dsrc-summary {
140
+ border: 1px solid var(--dsrc-color-gris-400);
141
+ }
142
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * DSRC Tab Component
3
+ *
4
+ * ARIA tablist / tab / tabpanel with horizontal scrollable tab list.
5
+ * Active tab uses a top border indicator.
6
+ *
7
+ * Usage:
8
+ * <div class="dsrc-tabs">
9
+ * <ul class="dsrc-tabs__list" role="tablist">
10
+ * <li role="presentation">
11
+ * <button role="tab" aria-selected="true" aria-controls="panel1"
12
+ * class="dsrc-tabs__tab">Onglet 1</button>
13
+ * </li>
14
+ * <li role="presentation">
15
+ * <button role="tab" aria-selected="false" aria-controls="panel2"
16
+ * class="dsrc-tabs__tab">Onglet 2</button>
17
+ * </li>
18
+ * </ul>
19
+ * <div class="dsrc-tabs__panel dsrc-tabs__panel--selected"
20
+ * id="panel1" role="tabpanel" tabindex="0">
21
+ * Contenu 1
22
+ * </div>
23
+ * <div class="dsrc-tabs__panel"
24
+ * id="panel2" role="tabpanel" tabindex="0">
25
+ * Contenu 2
26
+ * </div>
27
+ * </div>
28
+ */
29
+
30
+
31
+ /* ============================================
32
+ * 1. Base tabs container
33
+ * ============================================ */
34
+
35
+ .dsrc-tabs {
36
+ position: relative;
37
+ overflow: hidden;
38
+ }
39
+
40
+
41
+ /* ============================================
42
+ * 2. Tab list (scrollable)
43
+ * ============================================ */
44
+
45
+ .dsrc-tabs__list {
46
+ display: flex;
47
+ align-items: stretch;
48
+ overflow-x: auto;
49
+ width: 100%;
50
+ min-height: 48px;
51
+ margin: 0;
52
+ padding: 4px var(--dsrc-spacing-3);
53
+ list-style: none;
54
+ border-bottom: 1px solid var(--dsrc-color-gris-200);
55
+ }
56
+
57
+
58
+ /* ============================================
59
+ * 3. Individual tab button
60
+ * ============================================ */
61
+
62
+ .dsrc-tabs__tab {
63
+ position: relative;
64
+ display: inline-flex;
65
+ align-items: center;
66
+ padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
67
+ margin: 0 var(--dsrc-spacing-1);
68
+ font-family: var(--dsrc-font-family-sans);
69
+ font-size: var(--dsrc-font-size-body);
70
+ font-weight: 700;
71
+ color: var(--dsrc-color-noir);
72
+ background: none;
73
+ border: none;
74
+ border-bottom: 2px solid transparent;
75
+ white-space: nowrap;
76
+ cursor: pointer;
77
+ overflow: visible;
78
+ text-decoration: none;
79
+ transition: border-color 0.15s;
80
+ }
81
+
82
+ .dsrc-tabs__tab:hover {
83
+ color: var(--dsrc-color-primaire);
84
+ }
85
+
86
+ .dsrc-tabs__tab:focus-visible {
87
+ outline: 2px solid var(--dsrc-color-primaire);
88
+ outline-offset: 2px;
89
+ }
90
+
91
+ .dsrc-tabs__tab[aria-selected="true"] {
92
+ border-bottom-color: var(--dsrc-color-primaire);
93
+ color: var(--dsrc-color-primaire);
94
+ }
95
+
96
+ .dsrc-tabs__tab:disabled {
97
+ color: var(--dsrc-color-gris-400);
98
+ cursor: not-allowed;
99
+ }
100
+
101
+
102
+ /* ============================================
103
+ * 4. Tab panels
104
+ * ============================================ */
105
+
106
+ .dsrc-tabs__panel {
107
+ display: block;
108
+ padding: var(--dsrc-spacing-4);
109
+ }
110
+
111
+ @media (min-width: 768px) {
112
+ .dsrc-tabs__panel {
113
+ padding: var(--dsrc-spacing-8);
114
+ }
115
+ }
116
+
117
+ .dsrc-tabs__panel:not(.dsrc-tabs__panel--selected) {
118
+ visibility: hidden;
119
+ position: absolute;
120
+ left: -100%;
121
+ width: 100%;
122
+ }
123
+
124
+ .dsrc-tabs__panel:focus,
125
+ .dsrc-tabs__panel:focus-visible {
126
+ outline: 2px solid var(--dsrc-color-primaire);
127
+ outline-offset: -2px;
128
+ }
129
+
130
+
131
+ /* ============================================
132
+ * 5. High contrast (forced-colors)
133
+ * ============================================ */
134
+
135
+ @media (forced-colors: active) {
136
+ .dsrc-tabs__list {
137
+ border-bottom: 1px solid ButtonText;
138
+ }
139
+
140
+ .dsrc-tabs__tab {
141
+ border: 1px solid ButtonText;
142
+ }
143
+
144
+ .dsrc-tabs__tab[aria-selected="true"] {
145
+ border-color: Highlight;
146
+ border-top: 4px solid Highlight;
147
+ border-bottom: 1px solid Canvas;
148
+ color: Highlight;
149
+ }
150
+
151
+ .dsrc-tabs__panel:not(.dsrc-tabs__panel--selected) {
152
+ border: 1px solid GrayText;
153
+ }
154
+ }
155
+
156
+
157
+ /* ============================================
158
+ * 6. Reduced motion
159
+ * ============================================ */
160
+
161
+ @media (prefers-reduced-motion: reduce) {
162
+ .dsrc-tabs__tab {
163
+ transition: none;
164
+ }
165
+ }
166
+
167
+
168
+ /* ============================================
169
+ * 7. Print
170
+ * ============================================ */
171
+
172
+ @media print {
173
+ .dsrc-tabs__list {
174
+ display: none;
175
+ }
176
+
177
+ .dsrc-tabs__panel {
178
+ visibility: visible !important;
179
+ position: static !important;
180
+ left: auto !important;
181
+ padding: var(--dsrc-spacing-2) 0;
182
+ border-bottom: 1px solid var(--dsrc-color-gris-300);
183
+ }
184
+ }