@moodlehq/design-system 2.1.1 → 3.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 (156) hide show
  1. package/README.md +6 -1
  2. package/css.d.ts +5 -0
  3. package/dist/components/activity-icon/ActivityIcon.d.ts +23 -0
  4. package/dist/components/activity-icon/ActivityIcon.js +124 -0
  5. package/dist/components/activity-icon/ActivityIcon.js.map +1 -0
  6. package/dist/components/activity-icon/activityIconRegistry.d.ts +8 -0
  7. package/dist/components/activity-icon/activityIconRegistry.js +66 -0
  8. package/dist/components/activity-icon/activityIconRegistry.js.map +1 -0
  9. package/dist/components/activity-icon/assets/assignment.js +6 -0
  10. package/dist/components/activity-icon/assets/assignment.js.map +1 -0
  11. package/dist/components/activity-icon/assets/bigbluebutton.js +6 -0
  12. package/dist/components/activity-icon/assets/bigbluebutton.js.map +1 -0
  13. package/dist/components/activity-icon/assets/book.js +6 -0
  14. package/dist/components/activity-icon/assets/book.js.map +1 -0
  15. package/dist/components/activity-icon/assets/chat.js +6 -0
  16. package/dist/components/activity-icon/assets/chat.js.map +1 -0
  17. package/dist/components/activity-icon/assets/choice.js +6 -0
  18. package/dist/components/activity-icon/assets/choice.js.map +1 -0
  19. package/dist/components/activity-icon/assets/database.js +6 -0
  20. package/dist/components/activity-icon/assets/database.js.map +1 -0
  21. package/dist/components/activity-icon/assets/external-tool.js +6 -0
  22. package/dist/components/activity-icon/assets/external-tool.js.map +1 -0
  23. package/dist/components/activity-icon/assets/feedback.js +6 -0
  24. package/dist/components/activity-icon/assets/feedback.js.map +1 -0
  25. package/dist/components/activity-icon/assets/file-ai.js +6 -0
  26. package/dist/components/activity-icon/assets/file-ai.js.map +1 -0
  27. package/dist/components/activity-icon/assets/file-archive.js +6 -0
  28. package/dist/components/activity-icon/assets/file-archive.js.map +1 -0
  29. package/dist/components/activity-icon/assets/file-audio.js +6 -0
  30. package/dist/components/activity-icon/assets/file-audio.js.map +1 -0
  31. package/dist/components/activity-icon/assets/file-code.js +6 -0
  32. package/dist/components/activity-icon/assets/file-code.js.map +1 -0
  33. package/dist/components/activity-icon/assets/file-database.js +6 -0
  34. package/dist/components/activity-icon/assets/file-database.js.map +1 -0
  35. package/dist/components/activity-icon/assets/file-doc.js +6 -0
  36. package/dist/components/activity-icon/assets/file-doc.js.map +1 -0
  37. package/dist/components/activity-icon/assets/file-draw.js +6 -0
  38. package/dist/components/activity-icon/assets/file-draw.js.map +1 -0
  39. package/dist/components/activity-icon/assets/file-eps.js +6 -0
  40. package/dist/components/activity-icon/assets/file-eps.js.map +1 -0
  41. package/dist/components/activity-icon/assets/file-epub.js +6 -0
  42. package/dist/components/activity-icon/assets/file-epub.js.map +1 -0
  43. package/dist/components/activity-icon/assets/file-flash.js +6 -0
  44. package/dist/components/activity-icon/assets/file-flash.js.map +1 -0
  45. package/dist/components/activity-icon/assets/file-folder.js +6 -0
  46. package/dist/components/activity-icon/assets/file-folder.js.map +1 -0
  47. package/dist/components/activity-icon/assets/file-gif.js +6 -0
  48. package/dist/components/activity-icon/assets/file-gif.js.map +1 -0
  49. package/dist/components/activity-icon/assets/file-graphic.js +6 -0
  50. package/dist/components/activity-icon/assets/file-graphic.js.map +1 -0
  51. package/dist/components/activity-icon/assets/file-h5p.js +6 -0
  52. package/dist/components/activity-icon/assets/file-h5p.js.map +1 -0
  53. package/dist/components/activity-icon/assets/file-image.js +6 -0
  54. package/dist/components/activity-icon/assets/file-image.js.map +1 -0
  55. package/dist/components/activity-icon/assets/file-isf-flowchart.js +6 -0
  56. package/dist/components/activity-icon/assets/file-isf-flowchart.js.map +1 -0
  57. package/dist/components/activity-icon/assets/file-json.js +6 -0
  58. package/dist/components/activity-icon/assets/file-json.js.map +1 -0
  59. package/dist/components/activity-icon/assets/file-math.js +6 -0
  60. package/dist/components/activity-icon/assets/file-math.js.map +1 -0
  61. package/dist/components/activity-icon/assets/file-moodle.js +6 -0
  62. package/dist/components/activity-icon/assets/file-moodle.js.map +1 -0
  63. package/dist/components/activity-icon/assets/file-oth.js +6 -0
  64. package/dist/components/activity-icon/assets/file-oth.js.map +1 -0
  65. package/dist/components/activity-icon/assets/file-pdf.js +6 -0
  66. package/dist/components/activity-icon/assets/file-pdf.js.map +1 -0
  67. package/dist/components/activity-icon/assets/file-plain-text.js +6 -0
  68. package/dist/components/activity-icon/assets/file-plain-text.js.map +1 -0
  69. package/dist/components/activity-icon/assets/file-ppt.js +6 -0
  70. package/dist/components/activity-icon/assets/file-ppt.js.map +1 -0
  71. package/dist/components/activity-icon/assets/file-presentation.js +6 -0
  72. package/dist/components/activity-icon/assets/file-presentation.js.map +1 -0
  73. package/dist/components/activity-icon/assets/file-psd.js +6 -0
  74. package/dist/components/activity-icon/assets/file-psd.js.map +1 -0
  75. package/dist/components/activity-icon/assets/file-pub.js +6 -0
  76. package/dist/components/activity-icon/assets/file-pub.js.map +1 -0
  77. package/dist/components/activity-icon/assets/file-source-code.js +6 -0
  78. package/dist/components/activity-icon/assets/file-source-code.js.map +1 -0
  79. package/dist/components/activity-icon/assets/file-spreadsheet.js +6 -0
  80. package/dist/components/activity-icon/assets/file-spreadsheet.js.map +1 -0
  81. package/dist/components/activity-icon/assets/file-text-editor.js +6 -0
  82. package/dist/components/activity-icon/assets/file-text-editor.js.map +1 -0
  83. package/dist/components/activity-icon/assets/file-unknown.js +6 -0
  84. package/dist/components/activity-icon/assets/file-unknown.js.map +1 -0
  85. package/dist/components/activity-icon/assets/file-video.js +6 -0
  86. package/dist/components/activity-icon/assets/file-video.js.map +1 -0
  87. package/dist/components/activity-icon/assets/file-xls.js +6 -0
  88. package/dist/components/activity-icon/assets/file-xls.js.map +1 -0
  89. package/dist/components/activity-icon/assets/file.js +6 -0
  90. package/dist/components/activity-icon/assets/file.js.map +1 -0
  91. package/dist/components/activity-icon/assets/folder.js +6 -0
  92. package/dist/components/activity-icon/assets/folder.js.map +1 -0
  93. package/dist/components/activity-icon/assets/forum.js +6 -0
  94. package/dist/components/activity-icon/assets/forum.js.map +1 -0
  95. package/dist/components/activity-icon/assets/glossary.js +6 -0
  96. package/dist/components/activity-icon/assets/glossary.js.map +1 -0
  97. package/dist/components/activity-icon/assets/h5p.js +6 -0
  98. package/dist/components/activity-icon/assets/h5p.js.map +1 -0
  99. package/dist/components/activity-icon/assets/ims-package.js +6 -0
  100. package/dist/components/activity-icon/assets/ims-package.js.map +1 -0
  101. package/dist/components/activity-icon/assets/lesson.js +6 -0
  102. package/dist/components/activity-icon/assets/lesson.js.map +1 -0
  103. package/dist/components/activity-icon/assets/page.js +6 -0
  104. package/dist/components/activity-icon/assets/page.js.map +1 -0
  105. package/dist/components/activity-icon/assets/quiz.js +6 -0
  106. package/dist/components/activity-icon/assets/quiz.js.map +1 -0
  107. package/dist/components/activity-icon/assets/scorm-package.js +6 -0
  108. package/dist/components/activity-icon/assets/scorm-package.js.map +1 -0
  109. package/dist/components/activity-icon/assets/subsection.js +6 -0
  110. package/dist/components/activity-icon/assets/subsection.js.map +1 -0
  111. package/dist/components/activity-icon/assets/survey.js +6 -0
  112. package/dist/components/activity-icon/assets/survey.js.map +1 -0
  113. package/dist/components/activity-icon/assets/text-and-media.js +6 -0
  114. package/dist/components/activity-icon/assets/text-and-media.js.map +1 -0
  115. package/dist/components/activity-icon/assets/url.js +6 -0
  116. package/dist/components/activity-icon/assets/url.js.map +1 -0
  117. package/dist/components/activity-icon/assets/wiki.js +6 -0
  118. package/dist/components/activity-icon/assets/wiki.js.map +1 -0
  119. package/dist/components/activity-icon/assets/workshop.js +6 -0
  120. package/dist/components/activity-icon/assets/workshop.js.map +1 -0
  121. package/dist/components/activity-icon/index.d.ts +1 -0
  122. package/dist/components/activity-icon/index.js +2 -0
  123. package/dist/components/button/Button.d.ts +9 -4
  124. package/dist/components/button/Button.js +37 -0
  125. package/dist/components/button/Button.js.map +1 -0
  126. package/dist/components/button/index.js +2 -0
  127. package/dist/components/close-button/CloseButton.d.ts +14 -0
  128. package/dist/components/close-button/CloseButton.js +25 -0
  129. package/dist/components/close-button/CloseButton.js.map +1 -0
  130. package/dist/components/close-button/index.d.ts +1 -0
  131. package/dist/components/close-button/index.js +2 -0
  132. package/dist/components/index.d.ts +6 -0
  133. package/dist/components/radio/Radio.d.ts +22 -0
  134. package/dist/components/radio/Radio.js +47 -0
  135. package/dist/components/radio/Radio.js.map +1 -0
  136. package/dist/components/radio/index.d.ts +1 -0
  137. package/dist/components/radio/index.js +2 -0
  138. package/dist/index.css +535 -151
  139. package/dist/index.js +8 -31
  140. package/package.json +32 -13
  141. package/tokens/css/borders.css +4 -3
  142. package/tokens/css/breakpoints.css +11 -0
  143. package/tokens/css/colors.css +20 -2
  144. package/tokens/css/index.css +1 -0
  145. package/tokens/css/shadows.css +3 -3
  146. package/tokens/css/sizes.css +7 -6
  147. package/tokens/css/spacing.css +1 -0
  148. package/tokens/scss/_borders.scss +4 -3
  149. package/tokens/scss/_breakpoints.scss +8 -0
  150. package/tokens/scss/_colors.scss +20 -2
  151. package/tokens/scss/_index.legacy.scss +1 -0
  152. package/tokens/scss/_index.scss +1 -0
  153. package/tokens/scss/_shadows.scss +3 -3
  154. package/tokens/scss/_sizes.scss +7 -6
  155. package/tokens/scss/_spacing.scss +1 -0
  156. package/dist/index.js.map +0 -1
package/dist/index.css CHANGED
@@ -1,4 +1,490 @@
1
- @charset "UTF-8";/*!
1
+ @charset "UTF-8";.mds-activity-icon {
2
+ align-items: center;
3
+ /*
4
+ * content-box so block-size/inline-size declare the ICON content area.
5
+ * Padding then expands the tile beyond that — matching Figma's structure
6
+ * where "size" is the icon and padding is added by the container variant.
7
+ */
8
+ box-sizing: content-box;
9
+ display: inline-flex;
10
+ flex-shrink: 0;
11
+ justify-content: center;
12
+ overflow: hidden;
13
+ }
14
+
15
+ /* none: no background tile, no padding — tile equals the icon size */
16
+
17
+ .mds-activity-icon--none {
18
+ border-radius: var(--mds-border-radius-none);
19
+ }
20
+
21
+ /*
22
+ * default: 8px padding each side — tile = icon + 16px (e.g. lg: 24+16 = 40px total).
23
+ * large: 12px padding each side — tile = icon + 24px (e.g. lg: 24+24 = 48px total).
24
+ */
25
+
26
+ .mds-activity-icon--default {
27
+ border-radius: var(--mds-border-radius-xl);
28
+ padding: var(--mds-spacing-xs);
29
+ }
30
+
31
+ .mds-activity-icon--large {
32
+ border-radius: var(--mds-border-radius-xl);
33
+ padding: var(--mds-spacing-sm);
34
+ }
35
+
36
+ /* Figma uses a smaller outer radius for default+sm only. */
37
+
38
+ .mds-activity-icon--default.mds-activity-icon--size-sm {
39
+ border-radius: var(--mds-border-radius-lg);
40
+ }
41
+
42
+ /* Category background colors apply only when a background container is active. */
43
+
44
+ .mds-activity-icon--default.mds-activity-icon--category-assessment,
45
+ .mds-activity-icon--large.mds-activity-icon--category-assessment {
46
+ background-color: var(--mds-activity-icon-assessment-bg);
47
+ }
48
+
49
+ .mds-activity-icon--default.mds-activity-icon--category-collaboration,
50
+ .mds-activity-icon--large.mds-activity-icon--category-collaboration {
51
+ background-color: var(--mds-activity-icon-collaboration-bg);
52
+ }
53
+
54
+ .mds-activity-icon--default.mds-activity-icon--category-communication,
55
+ .mds-activity-icon--large.mds-activity-icon--category-communication {
56
+ background-color: var(--mds-activity-icon-communication-bg);
57
+ }
58
+
59
+ .mds-activity-icon--default.mds-activity-icon--category-interactive,
60
+ .mds-activity-icon--large.mds-activity-icon--category-interactive {
61
+ background-color: var(--mds-activity-icon-interactive-bg);
62
+ }
63
+
64
+ .mds-activity-icon--default.mds-activity-icon--category-other,
65
+ .mds-activity-icon--large.mds-activity-icon--category-other {
66
+ background-color: var(--mds-activity-icon-other-bg);
67
+ }
68
+
69
+ .mds-activity-icon--default.mds-activity-icon--category-resource,
70
+ .mds-activity-icon--large.mds-activity-icon--category-resource {
71
+ background-color: var(--mds-activity-icon-resource-bg);
72
+ }
73
+
74
+ /* Size variants */
75
+
76
+ .mds-activity-icon--size-sm {
77
+ block-size: var(--mds-icons-sm);
78
+ inline-size: var(--mds-icons-sm);
79
+ }
80
+
81
+ .mds-activity-icon--size-md {
82
+ /* Intentionally follows the Figma token mapping, where md uses the lg icon token. */
83
+ block-size: var(--mds-icons-lg);
84
+ inline-size: var(--mds-icons-lg);
85
+ }
86
+
87
+ .mds-activity-icon--size-lg {
88
+ /* Intentionally follows the Figma token mapping, where lg uses the xl icon token. */
89
+ block-size: var(--mds-icons-xl);
90
+ inline-size: var(--mds-icons-xl);
91
+ }
92
+
93
+ .mds-activity-icon--size-xl {
94
+ /* Intentionally follows the Figma token mapping, where xl uses the xxl icon token. */
95
+ block-size: var(--mds-icons-xxl);
96
+ inline-size: var(--mds-icons-xxl);
97
+ }
98
+
99
+ .mds-activity-icon__asset {
100
+ block-size: 100%;
101
+ border-radius: var(--mds-border-radius-xs);
102
+ display: block;
103
+ inline-size: 100%;
104
+ }
105
+
106
+ .mds-btn.btn {
107
+ background-color: var(--mds-bg-interactive-primary-default);
108
+ border: var(--mds-stroke-weight-sm) solid var(--mds-border-translucent);
109
+ border-radius: var(--mds-border-radius-md);
110
+ padding: var(--mds-spacing-xs) var(--mds-spacing-sm);
111
+
112
+ color: var(--mds-text-inverse);
113
+ font-family: var(--mds-font-family-base);
114
+ font-weight: var(--mds-font-weight-regular);
115
+ font-size: var(--mds-font-size-paragraph-default);
116
+ line-height: var(--mds-line-height-paragraph-small);
117
+ letter-spacing: var(--mds-letter-spacing-default);
118
+
119
+ /* gap provides consistent spacing between startIcon/endIcon and label text;
120
+ has no visual effect when the button contains only a single child (no icon) */
121
+ display: inline-flex;
122
+ align-items: center;
123
+ gap: var(--mds-spacing-xxs);
124
+ }
125
+
126
+ .mds-btn.btn:hover {
127
+ background-color: var(--mds-bg-interactive-primary-hover);
128
+ }
129
+
130
+ .mds-btn.btn:active {
131
+ background-color: var(--mds-bg-interactive-primary-active);
132
+ border: var(--mds-stroke-weight-sm) solid var(--mds-border-translucent);
133
+ }
134
+
135
+ .mds-btn.btn:disabled {
136
+ background-color: var(--mds-bg-interactive-primary-disabled);
137
+ }
138
+
139
+ /**
140
+ * Secondary variants
141
+ */
142
+
143
+ .mds-btn.btn.btn-secondary {
144
+ background-color: var(--mds-bg-interactive-secondary-default);
145
+ color: var(--mds-text-default);
146
+ }
147
+
148
+ .mds-btn.btn.btn-secondary:hover {
149
+ background-color: var(--mds-bg-interactive-secondary-hover);
150
+ }
151
+
152
+ .mds-btn.btn.btn-secondary:active {
153
+ background-color: var(--mds-bg-interactive-secondary-active);
154
+ }
155
+
156
+ .mds-btn.btn.btn-secondary:disabled {
157
+ background-color: var(--mds-bg-interactive-secondary-disabled);
158
+ }
159
+
160
+ /**
161
+ * Danger variants
162
+ */
163
+
164
+ .mds-btn.btn-danger {
165
+ background-color: var(--mds-bg-interactive-danger-default);
166
+ }
167
+
168
+ .mds-btn.btn-danger:hover {
169
+ background-color: var(--mds-bg-interactive-danger-hover);
170
+ }
171
+
172
+ .mds-btn.btn-danger:active {
173
+ background-color: var(--mds-bg-interactive-danger-active);
174
+ }
175
+
176
+ .mds-btn.btn.btn-danger:disabled {
177
+ background-color: var(--mds-bg-interactive-danger-disabled);
178
+ }
179
+
180
+ /**
181
+ * Outline Primary variants
182
+ */
183
+
184
+ .mds-btn.btn-outline-primary {
185
+ background-color: transparent;
186
+ border: var(--mds-stroke-weight-sm) solid
187
+ var(--mds-border-interactive-primary-default);
188
+ color: var(--mds-text-link-primary-default);
189
+ }
190
+
191
+ .mds-btn.btn-outline-primary:hover {
192
+ background-color: var(--mds-bg-interactive-primary-hover);
193
+ color: var(--mds-text-inverse);
194
+ }
195
+
196
+ .mds-btn.btn-outline-primary:active {
197
+ background-color: var(--mds-bg-interactive-primary-active);
198
+ color: var(--mds-text-inverse);
199
+ }
200
+
201
+ .mds-btn.btn.btn-outline-primary:disabled {
202
+ background-color: transparent;
203
+ border: var(--mds-stroke-weight-sm) solid
204
+ var(--mds-border-interactive-primary-disabled);
205
+ color: var(--mds-color-blue-300);
206
+ }
207
+
208
+ /**
209
+ * Outline Secondary variants
210
+ */
211
+
212
+ .mds-btn.btn-outline-secondary {
213
+ background-color: transparent;
214
+ border: var(--mds-stroke-weight-sm) solid
215
+ var(--mds-border-interactive-secondary-default);
216
+ color: var(--mds-text-muted);
217
+ }
218
+
219
+ .mds-btn.btn-outline-secondary:hover {
220
+ background-color: var(--mds-border-interactive-secondary-hover);
221
+ color: var(--mds-text-inverse);
222
+ }
223
+
224
+ .mds-btn.btn-outline-secondary:active {
225
+ background-color: var(--mds-border-interactive-secondary-active);
226
+ color: var(--mds-text-inverse);
227
+ }
228
+
229
+ .mds-btn.btn.btn-outline-secondary:disabled {
230
+ background-color: transparent;
231
+ border: var(--mds-stroke-weight-sm) solid
232
+ var(--mds-border-interactive-secondary-disabled);
233
+ color: var(--mds-color-gray-500);
234
+ }
235
+
236
+ /**
237
+ * Outline Danger variants
238
+ */
239
+
240
+ .mds-btn.btn-outline-danger {
241
+ background-color: transparent;
242
+ border: var(--mds-stroke-weight-sm) solid
243
+ var(--mds-border-interactive-danger-default);
244
+ color: var(--mds-text-danger);
245
+ }
246
+
247
+ .mds-btn.btn-outline-danger:hover {
248
+ background-color: var(--mds-bg-interactive-danger-default);
249
+ color: var(--mds-text-inverse);
250
+ }
251
+
252
+ .mds-btn.btn-outline-danger:active {
253
+ background-color: var(--mds-bg-interactive-danger-hover);
254
+ color: var(--mds-text-inverse);
255
+ }
256
+
257
+ .mds-btn.btn.btn-outline-danger:disabled {
258
+ background-color: transparent;
259
+ border: var(--mds-stroke-weight-sm) solid
260
+ var(--mds-border-interactive-danger-disabled);
261
+ color: var(--mds-color-red-300);
262
+ }
263
+
264
+ /**
265
+ * Size variants
266
+ */
267
+
268
+ .mds-btn.btn-sm {
269
+ padding: var(--mds-spacing-xxs) var(--mds-spacing-xs);
270
+ font-size: var(--mds-font-size-paragraph-small);
271
+ line-height: var(--mds-line-height-paragraph-small);
272
+ }
273
+
274
+ .mds-btn.btn-lg {
275
+ padding: var(--mds-spacing-xs) var(--mds-spacing-md);
276
+ font-size: var(--mds-font-size-paragraph-lead);
277
+ line-height: var(--mds-line-height-paragraph-default);
278
+ }
279
+
280
+ .mds-close-button.btn-close {
281
+ inline-size: var(--mds-icons-md);
282
+ block-size: var(--mds-icons-md);
283
+ padding: 0;
284
+ border-radius: var(--mds-border-radius-xs);
285
+ background-image: url("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4.12109%205.87891L8.22266%209.98047L4.12109%2014.1211C3.61328%2014.5898%203.61328%2015.4102%204.12109%2015.8789C4.58984%2016.3867%205.41016%2016.3867%205.87891%2015.8789L9.98047%2011.7773L14.1211%2015.8789C14.5898%2016.3867%2015.4102%2016.3867%2015.8789%2015.8789C16.3867%2015.4102%2016.3867%2014.5898%2015.8789%2014.1211L11.7773%209.98047L15.8789%205.87891C16.3867%205.41016%2016.3867%204.58984%2015.8789%204.12109C15.4102%203.61328%2014.5898%203.61328%2014.1211%204.12109L9.98047%208.22266L5.87891%204.12109C5.41016%203.61328%204.58984%203.61328%204.12109%204.12109C3.61328%204.58984%203.61328%205.41016%204.12109%205.87891Z'%20fill='%231D2125'/%3e%3c/svg%3e");
286
+ background-size: var(--mds-icons-md) var(--mds-icons-md);
287
+ opacity: 0.6;
288
+ }
289
+
290
+ .mds-close-button.btn-close:hover {
291
+ opacity: 0.75;
292
+ }
293
+
294
+ .mds-close-button.btn-close:focus {
295
+ box-shadow: none;
296
+ }
297
+
298
+ .mds-close-button.btn-close:focus-visible {
299
+ outline: var(--mds-stroke-weight-md) solid var(--mds-focus-default);
300
+ outline-offset: 0;
301
+ box-shadow: none;
302
+ opacity: 1;
303
+ }
304
+
305
+ .mds-close-button.btn-close:disabled,
306
+ .mds-close-button.btn-close.disabled {
307
+ opacity: 0.25;
308
+ }
309
+
310
+ .mds-close-button.btn-close.mds-close-button--sm {
311
+ inline-size: var(--mds-icons-sm);
312
+ block-size: var(--mds-icons-sm);
313
+ background-size: var(--mds-icons-sm) var(--mds-icons-sm);
314
+ }
315
+
316
+ .mds-close-button.btn-close.mds-close-button--md {
317
+ inline-size: var(--mds-icons-md);
318
+ block-size: var(--mds-icons-md);
319
+ background-size: var(--mds-icons-md) var(--mds-icons-md);
320
+ }
321
+
322
+ .mds-close-button.btn-close.mds-close-button--lg {
323
+ inline-size: var(--mds-icons-lg);
324
+ block-size: var(--mds-icons-lg);
325
+ background-size: var(--mds-icons-lg) var(--mds-icons-lg);
326
+ }
327
+
328
+ /* Parent element */
329
+
330
+ .mds-form-check {
331
+ /* Grid layout: column 1 = input, column 2 = label. The feedback is then placed
332
+ explicitly into column 2 via grid-column so it aligns with the label without
333
+ requiring any offset calculation. Grid formatting context also suppresses
334
+ Bootstrap's float on the input child. */
335
+ display: inline-grid;
336
+ grid-template-columns: auto auto;
337
+ align-items: start;
338
+ /* Prevent flex containers from stretching this element across the cross axis,
339
+ which would widen the grid and split the two auto columns equally, pushing
340
+ the label away from the input. start preserves content-sized behaviour. */
341
+ align-self: start;
342
+ /* min-height matches the icon-lg token (24px) so the wrapper never collapses
343
+ below the height of the radio indicator, regardless of label content. */
344
+ min-height: var(--mds-icons-lg, 1.5rem);
345
+ /* Reset Bootstrap's padding-inline-start — it exists to indent label text past a
346
+ floated input, which our grid layout does not use. column-gap handles the spacing. */
347
+ padding: var(--mds-spacing-none, 0);
348
+ /* column-gap keeps input and label spaced; row-gap gives breathing room above feedback */
349
+ column-gap: var(--mds-spacing-xs, 0.5rem);
350
+ row-gap: var(--mds-spacing-xxs, 0.25rem);
351
+
352
+ /* UI text/UI default */
353
+ font-family: var(--mds-font-family-base, Arial, sans-serif);
354
+ font-size: var(--mds-font-size-body, 1rem);
355
+ font-weight: var(--mds-font-weight-regular, 400);
356
+ line-height: var(--mds-line-height-paragraph-small, 1.0875rem); /* 108.75% */
357
+ letter-spacing: var(--mds-letter-spacing, 0);
358
+ }
359
+
360
+ /* Input element styles */
361
+
362
+ .mds-form-check-input {
363
+ border-radius: var(--mds-border-radius-pill, 50rem);
364
+ border: var(--mds-stroke-weight-sm, 1px) solid
365
+ var(--mds-border-interactive-secondary-default, #6a737b);
366
+ /* Use background-color, not the background shorthand — the shorthand resets
367
+ background-image to none, which wipes out Bootstrap's --bs-form-check-bg-image
368
+ (the inner dot SVG) on the checked state. */
369
+ }
370
+
371
+ /* Bootstrap's .form-check .form-check-input rule (specificity 0,2,0) sets float: left
372
+ and a negative margin-inline-start that causes overlap. Match its specificity to
373
+ ensure our flex-friendly reset wins regardless of load order. */
374
+
375
+ .mds-form-check .mds-form-check-input {
376
+ margin: 0;
377
+ float: none;
378
+ background-color: var(--mds-bg-surface-default, #fff);
379
+ }
380
+
381
+ .mds-form-check-input:checked {
382
+ background-color: var(--mds-bg-interactive-primary-default);
383
+ border-color: transparent;
384
+ }
385
+
386
+ .mds-form-check-input:disabled {
387
+ border-color: var(--mds-border-interactive-secondary-disabled);
388
+ }
389
+
390
+ .mds-form-check-input:disabled:checked {
391
+ background-color: var(--mds-bg-interactive-primary-disabled);
392
+ border-color: transparent;
393
+ }
394
+
395
+ .mds-form-check-input.is-invalid {
396
+ border-color: var(--mds-border-interactive-danger-default);
397
+ }
398
+
399
+ .mds-form-check-input.is-invalid:checked {
400
+ background-color: var(--mds-bg-interactive-danger-default);
401
+ border-color: transparent;
402
+ }
403
+
404
+ /* Explicit rule for invalid + disabled to avoid relying on specificity cascade order.
405
+ Disabled takes visual precedence: use the disabled background/border, not the danger ones. */
406
+
407
+ .mds-form-check-input.is-invalid:disabled {
408
+ background-color: var(--mds-bg-interactive-secondary-disabled);
409
+ border-color: var(--mds-border-interactive-secondary-disabled);
410
+ }
411
+
412
+ .mds-form-check-input.is-invalid:disabled:checked {
413
+ background-color: var(--mds-bg-interactive-primary-disabled);
414
+ border-color: transparent;
415
+ }
416
+
417
+ /* is-valid (Bootstrap) and neutral feedback states are intentionally not supported.
418
+ Radio buttons surface a binary valid/invalid result; positive confirmation
419
+ is conveyed by form-level success messaging rather than per-input valid styling. */
420
+
421
+ /* Hover styles are intentionally omitted. The radio input relies on the OS/browser
422
+ default appearance for hover; no design token exists for a radio hover state. */
423
+
424
+ /* Focus ring: Only outline + outline-offset allowed (no box-shadow or border).
425
+ See .github/instructions/components.instructions.md for full rules and rationale. */
426
+
427
+ .mds-form-check-input:focus,
428
+ .mds-form-check-input.is-invalid:focus {
429
+ /* Reset Bootstrap's :focus box-shadow; our ring is applied on :focus-visible only */
430
+ box-shadow: none;
431
+ outline: none;
432
+ }
433
+
434
+ .mds-form-check-input:focus-visible {
435
+ outline: var(--mds-stroke-weight-md) solid var(--mds-focus-default);
436
+ outline-offset: var(--mds-spacing-offset);
437
+ box-shadow: none;
438
+ }
439
+
440
+ .mds-form-check-input.is-invalid:focus-visible {
441
+ outline: var(--mds-stroke-weight-md) solid var(--mds-border-feedback-danger);
442
+ outline-offset: var(--mds-spacing-offset);
443
+ box-shadow: none;
444
+ }
445
+
446
+ /* Label element styles */
447
+
448
+ .mds-form-check .form-check-label,
449
+ .mds-form-check .mds-form-check-label {
450
+ color: var(--mds-text-default, #1d2125);
451
+ cursor: pointer;
452
+ }
453
+
454
+ /* Use sibling selector so the label reflects the input's disabled/invalid state */
455
+
456
+ .mds-form-check .mds-form-check-input:disabled ~ .form-check-label,
457
+ .mds-form-check .mds-form-check-input:disabled ~ .mds-form-check-label {
458
+ color: var(--mds-text-muted);
459
+ /* Disabled inputs are not interactive — suppress the pointer cursor on the label */
460
+ cursor: default;
461
+ }
462
+
463
+ .mds-form-check .mds-form-check-input.is-invalid ~ .form-check-label,
464
+ .mds-form-check .mds-form-check-input.is-invalid ~ .mds-form-check-label {
465
+ color: var(--mds-text-danger);
466
+ }
467
+
468
+ /* Feedback element styles — UI text/UI small */
469
+
470
+ .mds-form-check .invalid-feedback,
471
+ .mds-form-check .mds-form-check-feedback {
472
+ /* Place feedback in column 2 (the label column) so it aligns with the label
473
+ regardless of input size or font-size differences. Row placement is automatic. */
474
+ grid-column: 2;
475
+ font-size: var(--mds-font-size-paragraph-small, 0.875rem);
476
+ font-weight: var(--mds-font-weight-medium, 500);
477
+ color: var(--mds-text-danger);
478
+ }
479
+
480
+ /* Dim the feedback when the input is disabled to match the reduced visual weight of
481
+ the label and input; keeps the feedback legible without implying it is actionable. */
482
+
483
+ .mds-form-check:has(.mds-form-check-input:disabled) .invalid-feedback,
484
+ .mds-form-check:has(.mds-form-check-input:disabled) .mds-form-check-feedback {
485
+ opacity: 0.5;
486
+ }
487
+ /*!
2
488
  * Bootstrap v5.3.8 (https://getbootstrap.com/)
3
489
  * Copyright 2011-2025 The Bootstrap Authors
4
490
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
@@ -17,26 +503,54 @@
17
503
  --mds-stroke-weight-sm: 0.0625rem;
18
504
  --mds-stroke-weight-xl: 0.25rem;
19
505
  --mds-stroke-weight-xxl: 0.3125rem;
20
- --mds-border-radius-lg: var(--mds-scale-300);
21
- --mds-border-radius-md: var(--mds-scale-200);
506
+ --mds-border-radius-lg: var(--mds-scale-400);
507
+ --mds-border-radius-md: var(--mds-scale-300);
22
508
  --mds-border-radius-none: var(--mds-scale-0);
23
509
  --mds-border-radius-pill: var(--mds-scale-1800);
24
- --mds-border-radius-sm: var(--mds-scale-100);
510
+ --mds-border-radius-sm: var(--mds-scale-200);
25
511
  --mds-border-radius-xl: var(--mds-scale-600);
512
+ --mds-border-radius-xs: var(--mds-scale-100);
26
513
  --mds-border-radius-xxl: var(--mds-scale-1000);
27
514
  }
28
515
 
516
+ /**
517
+ * THIS FILE IS AUTO-GENERATED BY STYLE DICTIONARY — DO NOT EDIT DIRECTLY.
518
+ */
519
+
520
+ :root {
521
+ --mds-breakpoints-lg: 62rem;
522
+ --mds-breakpoints-md: 48rem;
523
+ --mds-breakpoints-sm: 36rem;
524
+ --mds-breakpoints-xl: 75rem;
525
+ --mds-breakpoints-xxl: 87.5rem;
526
+ }
527
+
29
528
  /**
30
529
  * THIS FILE IS AUTO-GENERATED BY STYLE DICTIONARY — DO NOT EDIT DIRECTLY.
31
530
  */
32
531
 
33
532
  :root {
34
533
  --mds-border-translucent: rgba(0, 0, 0, 0);
534
+ --mds-activity-icon-assessment-bg: var(--mds-color-pink-100);
535
+ --mds-activity-icon-assessment-icon: var(--mds-color-pink-500);
536
+ --mds-activity-icon-collaboration-bg: var(--mds-color-indigo-100);
537
+ --mds-activity-icon-collaboration-icon: var(--mds-color-indigo-500);
538
+ --mds-activity-icon-communication-bg: var(--mds-color-orange-100);
539
+ --mds-activity-icon-communication-icon: var(--mds-color-orange-600);
540
+ --mds-activity-icon-file-bg: var(--mds-color-cyan-100);
541
+ --mds-activity-icon-file-icon: var(--mds-color-cyan-500);
542
+ --mds-activity-icon-interactive-bg: var(--mds-color-red-100);
543
+ --mds-activity-icon-interactive-icon: var(--mds-color-red-700);
544
+ --mds-activity-icon-other-bg: var(--mds-color-gray-300);
545
+ --mds-activity-icon-other-icon: var(--mds-color-gray-900);
546
+ --mds-activity-icon-resource-bg: var(--mds-color-cyan-100);
547
+ --mds-activity-icon-resource-icon: var(--mds-color-cyan-500);
35
548
  --mds-bg-feedback-danger-subtle: var(--mds-color-red-100);
36
549
  --mds-bg-feedback-info-default: var(--mds-color-cyan-500);
37
550
  --mds-bg-feedback-info-subtle: var(--mds-color-cyan-100);
38
551
  --mds-bg-feedback-primary-default: var(--mds-color-blue-500);
39
552
  --mds-bg-feedback-primary-subtle: var(--mds-color-blue-100);
553
+ --mds-bg-feedback-secondary-default: var(--mds-color-gray-400);
40
554
  --mds-bg-feedback-secondary-subtle: var(--mds-color-gray-100);
41
555
  --mds-bg-feedback-success-default: var(--mds-color-green-500);
42
556
  --mds-bg-feedback-success-subtle: var(--mds-color-green-100);
@@ -44,11 +558,11 @@
44
558
  --mds-bg-feedback-warning-subtle: var(--mds-color-yellow-100);
45
559
  --mds-bg-interactive-danger-active: var(--mds-color-red-700);
46
560
  --mds-bg-interactive-danger-default: var(--mds-color-red-500);
47
- --mds-bg-interactive-danger-disabled: var(--mds-color-red-300);
561
+ --mds-bg-interactive-danger-disabled: var(--mds-color-red-200);
48
562
  --mds-bg-interactive-danger-hover: var(--mds-color-red-600);
49
563
  --mds-bg-interactive-primary-active: var(--mds-color-blue-700);
50
564
  --mds-bg-interactive-primary-default: var(--mds-color-blue-500);
51
- --mds-bg-interactive-primary-disabled: var(--mds-color-blue-300);
565
+ --mds-bg-interactive-primary-disabled: var(--mds-color-blue-200);
52
566
  --mds-bg-interactive-primary-hover: var(--mds-color-blue-600);
53
567
  --mds-bg-interactive-secondary-default: var(--mds-color-gray-400);
54
568
  --mds-bg-interactive-secondary-disabled: var(--mds-color-gray-200);
@@ -72,7 +586,9 @@
72
586
  --mds-border-interactive-secondary-disabled: var(--mds-color-gray-500);
73
587
  --mds-border-interactive-secondary-hover: var(--mds-color-gray-600);
74
588
  --mds-border-subtle: var(--mds-color-gray-200);
589
+ --mds-focus-danger: var(--mds-color-red-200);
75
590
  --mds-text-danger: var(--mds-color-red-500);
591
+ --mds-text-danger-disabled: var(--mds-color-red-300);
76
592
  --mds-text-default: var(--mds-color-gray-900);
77
593
  --mds-text-emphasis: var(--mds-color-gray-black);
78
594
  --mds-text-feedback-danger: var(--mds-color-red-800);
@@ -82,6 +598,7 @@
82
598
  --mds-text-feedback-success: var(--mds-color-green-800);
83
599
  --mds-text-feedback-warning: var(--mds-color-yellow-800);
84
600
  --mds-text-inverse: var(--mds-color-gray-100);
601
+ --mds-text-link-primary-disabled: var(--mds-color-blue-300);
85
602
  --mds-text-muted: var(--mds-color-gray-600);
86
603
  --mds-text-subtle: var(--mds-color-gray-700);
87
604
  --mds-bg-feedback-danger-default: var(--mds-bg-interactive-danger-default);
@@ -263,9 +780,9 @@
263
780
  */
264
781
 
265
782
  :root {
266
- --mds-color-lg: rgba(0, 0, 0, 0.2);
267
- --mds-color-md: rgba(0, 0, 0, 0.2);
268
- --mds-color-sm: rgba(0, 0, 0, 0.1);
783
+ --mds-color-lg: rgba(0, 0, 0, 0.17);
784
+ --mds-color-md: rgba(0, 0, 0, 0.15);
785
+ --mds-color-sm: rgba(0, 0, 0, 0.08);
269
786
  --mds-blur-lg: var(--mds-scale-1200);
270
787
  --mds-blur-md: var(--mds-scale-600);
271
788
  --mds-blur-sm: var(--mds-scale-100);
@@ -279,12 +796,13 @@
279
796
  */
280
797
 
281
798
  :root {
282
- --mds-icons-lg: var(--mds-scale-700);
283
- --mds-icons-md: var(--mds-scale-600);
284
- --mds-icons-sm: var(--mds-scale-400);
285
- --mds-icons-xl: var(--mds-scale-800);
286
- --mds-icons-xs: var(--mds-scale-300);
287
- --mds-icons-xxl: var(--mds-scale-1000);
799
+ --mds-icons-lg: var(--mds-scale-800);
800
+ --mds-icons-md: var(--mds-scale-700);
801
+ --mds-icons-sm: var(--mds-scale-600);
802
+ --mds-icons-xl: var(--mds-scale-1000);
803
+ --mds-icons-xs: var(--mds-scale-400);
804
+ --mds-icons-xxl: var(--mds-scale-1100);
805
+ --mds-icons-xxs: var(--mds-scale-300);
288
806
  --mds-icons-xxxl: var(--mds-scale-1200);
289
807
  }
290
808
 
@@ -293,6 +811,7 @@
293
811
  */
294
812
 
295
813
  :root {
814
+ --mds-spacing-offset: 0.0625rem;
296
815
  --mds-spacing-lg: var(--mds-scale-700);
297
816
  --mds-spacing-md: var(--mds-scale-600);
298
817
  --mds-spacing-none: var(--mds-scale-0);
@@ -350,139 +869,4 @@
350
869
  --mds-margin-bottom-heading: var(--mds-spacing-xs); /** Default margin below a Headings. */
351
870
  --mds-margin-bottom-paragraph: var(--mds-spacing-md); /** Default margin below a paragraph. */
352
871
  }
353
- .mds-btn.btn {
354
- background-color: var(--mds-bg-interactive-primary-default);
355
- border: var(--mds-stroke-weight-sm) solid var(--mds-border-translucent);
356
- border-radius: var(--mds-border-radius-lg);
357
- padding: var(--mds-spacing-xs) var(--mds-spacing-sm);
358
-
359
- color: var(--mds-text-inverse);
360
- font-family: var(--mds-font-family-base);
361
- font-weight: var(--mds-font-weight-regular);
362
- font-size: var(--mds-font-size-paragraph-default);
363
- line-height: var(--mds-line-height-paragraph-small);
364
- letter-spacing: var(--mds-letter-spacing-default);
365
- }
366
- .mds-btn.btn:hover {
367
- background-color: var(--mds-bg-interactive-primary-hover);
368
- }
369
- .mds-btn.btn:active {
370
- background-color: var(--mds-bg-interactive-primary-active);
371
- border: var(--mds-stroke-weight-sm) solid var(--mds-border-translucent);
372
- }
373
- .mds-btn.btn:disabled {
374
- background-color: var(--mds-bg-interactive-primary-disabled);
375
- }
376
- /**
377
- * Secondary variants
378
- */
379
- .mds-btn.btn.btn-secondary {
380
- background-color: var(--mds-bg-interactive-secondary-default);
381
- color: var(--mds-text-default);
382
- }
383
- .mds-btn.btn.btn-secondary:hover {
384
- background-color: var(--mds-bg-interactive-secondary-hover);
385
- }
386
- .mds-btn.btn.btn-secondary:active {
387
- background-color: var(--mds-bg-interactive-secondary-active);
388
- }
389
- .mds-btn.btn.btn-secondary:disabled {
390
- background-color: var(--mds-bg-interactive-secondary-disabled);
391
- }
392
- /**
393
- * Danger variants
394
- */
395
- .mds-btn.btn-danger {
396
- background-color: var(--mds-bg-interactive-danger-default);
397
- }
398
- .mds-btn.btn-danger:hover {
399
- background-color: var(--mds-bg-interactive-danger-hover);
400
- }
401
- .mds-btn.btn-danger:active {
402
- background-color: var(--mds-bg-interactive-danger-active);
403
- }
404
- .mds-btn.btn.btn-danger:disabled {
405
- background-color: var(--mds-bg-interactive-danger-disabled);
406
- }
407
- /**
408
- * Outline Primary variants
409
- */
410
- .mds-btn.btn-outline-primary {
411
- background-color: transparent;
412
- border: var(--mds-stroke-weight-sm) solid
413
- var(--mds-border-interactive-primary-default);
414
- color: var(--mds-text-link-primary-default);
415
- }
416
- .mds-btn.btn-outline-primary:hover {
417
- background-color: var(--mds-bg-interactive-primary-hover);
418
- color: var(--mds-text-inverse);
419
- }
420
- .mds-btn.btn-outline-primary:active {
421
- background-color: var(--mds-bg-interactive-primary-active);
422
- color: var(--mds-text-inverse);
423
- }
424
- .mds-btn.btn.btn-outline-primary:disabled {
425
- background-color: transparent;
426
- border: var(--mds-stroke-weight-sm) solid
427
- var(--mds-border-interactive-primary-disabled);
428
- color: var(--mds-color-blue-300);
429
- }
430
- /**
431
- * Outline Secondary variants
432
- */
433
- .mds-btn.btn-outline-secondary {
434
- background-color: transparent;
435
- border: var(--mds-stroke-weight-sm) solid
436
- var(--mds-border-interactive-secondary-default);
437
- color: var(--mds-text-muted);
438
- }
439
- .mds-btn.btn-outline-secondary:hover {
440
- background-color: var(--mds-border-interactive-secondary-hover);
441
- color: var(--mds-text-inverse);
442
- }
443
- .mds-btn.btn-outline-secondary:active {
444
- background-color: var(--mds-border-interactive-secondary-active);
445
- color: var(--mds-text-inverse);
446
- }
447
- .mds-btn.btn.btn-outline-secondary:disabled {
448
- background-color: transparent;
449
- border: var(--mds-stroke-weight-sm) solid
450
- var(--mds-border-interactive-secondary-disabled);
451
- color: var(--mds-color-gray-500);
452
- }
453
- /**
454
- * Outline Danger variants
455
- */
456
- .mds-btn.btn-outline-danger {
457
- background-color: transparent;
458
- border: var(--mds-stroke-weight-sm) solid
459
- var(--mds-border-interactive-danger-default);
460
- color: var(--mds-text-danger);
461
- }
462
- .mds-btn.btn-outline-danger:hover {
463
- background-color: var(--mds-bg-interactive-danger-default);
464
- color: var(--mds-text-inverse);
465
- }
466
- .mds-btn.btn-outline-danger:active {
467
- background-color: var(--mds-bg-interactive-danger-hover);
468
- color: var(--mds-text-inverse);
469
- }
470
- .mds-btn.btn.btn-outline-danger:disabled {
471
- background-color: transparent;
472
- border: var(--mds-stroke-weight-sm) solid
473
- var(--mds-border-interactive-danger-disabled);
474
- color: var(--mds-color-red-300);
475
- }
476
- /**
477
- * Size variants
478
- */
479
- .mds-btn.btn-sm {
480
- padding: var(--mds-spacing-xxs) var(--mds-spacing-xs);
481
- font-size: var(--mds-font-size-paragraph-small);
482
- line-height: var(--mds-line-height-paragraph-small);
483
- }
484
- .mds-btn.btn-lg {
485
- padding: var(--mds-spacing-xs) var(--mds-spacing-md);
486
- font-size: var(--mds-font-size-paragraph-lead);
487
- line-height: var(--mds-line-height-paragraph-default);
488
- }
872
+ /*$vite$:1*/