@undrr/undrr-mangrove 1.3.0 → 1.3.2

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 (75) hide show
  1. package/README.md +4 -4
  2. package/components/BarChart.js +1 -1
  3. package/components/Fetcher.js +1 -1
  4. package/components/Gallery.js +1 -1
  5. package/components/IconCard.js +2 -2
  6. package/components/IconCard.js.LICENSE.txt +1 -1
  7. package/components/MapComponent.js +2 -2
  8. package/components/MegaMenu.js +1 -1
  9. package/components/Pager.js +1 -1
  10. package/components/QuoteHighlight.js +1 -1
  11. package/components/ScrollContainer.js +1 -1
  12. package/components/ShareButtons.js +1 -1
  13. package/components/StatsCard.js +2 -2
  14. package/components/SyndicationSearchWidget.js +2 -2
  15. package/css/style-gutenberg.css +10 -2
  16. package/css/style-gutenberg.css.map +1 -1
  17. package/css/style-irp.css +29 -70
  18. package/css/style-irp.css.map +1 -1
  19. package/css/style-mcr.css +29 -70
  20. package/css/style-mcr.css.map +1 -1
  21. package/css/style-preventionweb.css +29 -70
  22. package/css/style-preventionweb.css.map +1 -1
  23. package/css/style.css +29 -70
  24. package/css/style.css.map +1 -1
  25. package/error-pages/401.html +1 -1
  26. package/error-pages/403.html +1 -1
  27. package/error-pages/404.html +1 -1
  28. package/error-pages/429.html +1 -1
  29. package/error-pages/500.html +1 -1
  30. package/error-pages/502.html +1 -1
  31. package/error-pages/503.html +1 -1
  32. package/error-pages/504.html +1 -1
  33. package/error-pages/5xx.html +1 -1
  34. package/error-pages/challenge.html +12 -11
  35. package/error-pages/managed-challenge.html +12 -11
  36. package/js/show-more.js +15 -9
  37. package/package.json +1 -1
  38. package/scss/Atom/Tag/tag.scss +115 -0
  39. package/scss/Components/Boilerplate/boilerplate.scss +15 -0
  40. package/scss/Components/Cards/Card/card.scss +88 -23
  41. package/scss/Components/Cards/StatsCard/stats-card.scss +1 -1
  42. package/scss/Components/ErrorPages/error-pages.scss +27 -0
  43. package/scss/Components/Footer/footer.scss +20 -3
  44. package/scss/Components/Forms/Checkbox/checkbox.scss +2 -22
  45. package/scss/Components/Forms/FormGroup/form-group.scss +24 -0
  46. package/scss/Components/Forms/InputFields/input-fields.scss +7 -177
  47. package/scss/Components/Forms/Radio/radio.scss +2 -13
  48. package/scss/Components/Forms/Select/select.scss +6 -15
  49. package/scss/Components/Forms/TextInput/text-input.scss +13 -0
  50. package/scss/Components/Forms/Textarea/textarea.scss +2 -0
  51. package/scss/Components/Forms/_form-base.scss +324 -0
  52. package/scss/Components/Forms/_form-legacy.scss +153 -0
  53. package/scss/Components/Hero/hero.scss +1 -1
  54. package/scss/Components/HighlightBox/highlight-box.scss +0 -9
  55. package/scss/Components/MegaMenu/megamenu.scss +6 -2
  56. package/scss/Components/PageHeader/page-header.scss +1 -1
  57. package/scss/Components/SyndicationSearchWidget/SyndicationSearchWidget.scss +49 -1
  58. package/scss/Utilities/EmbedContainer/embed-container.scss +58 -0
  59. package/scss/Utilities/ShowMore/ShowMore.scss +8 -17
  60. package/scss/assets/scss/_components.scss +7 -10
  61. package/scss/assets/scss/_mixins.scss +4 -68
  62. package/scss/assets/scss/_utility.scss +87 -0
  63. package/scss/assets/scss/_variables-irp.scss +12 -3
  64. package/scss/assets/scss/_variables-mcr.scss +12 -3
  65. package/scss/assets/scss/_variables-preventionweb.scss +10 -2
  66. package/scss/assets/scss/_variables.scss +37 -10
  67. package/scss/Atom/Navigation/LanguageSwitcherRow/language-switcher-row.scss +0 -12
  68. package/scss/Atom/Navigation/ProgressBarNavigation/progress-bar-navigation.scss +0 -70
  69. package/scss/Atom/Navigation/SidebarFirstLevel/sidebar-first-level.scss +0 -26
  70. package/scss/Components/Accordion/accordion.scss +0 -119
  71. package/scss/Components/Forms/Dropdowns/CustomSelect/custom-select.scss +0 -110
  72. package/scss/Components/Forms/Dropdowns/Multiselect/multi-select.scss +0 -228
  73. package/scss/Components/LanguageSwitcher/language-switcher.scss +0 -162
  74. package/scss/Components/Sidebar/sidebar.scss +0 -236
  75. package/scss/Molecules/SidebarData/sidebar-data.scss +0 -44
@@ -11,6 +11,21 @@
11
11
  &__title {
12
12
  font-size: 1.5rem;
13
13
  margin-bottom: 1rem;
14
+
15
+ a {
16
+ color: $mg-color-interactive;
17
+ text-decoration: underline;
18
+ text-underline-offset: 3px;
19
+
20
+ &:hover {
21
+ text-decoration-thickness: 2px;
22
+ }
23
+
24
+ &:focus-visible {
25
+ outline: 2px solid $mg-color-interactive;
26
+ outline-offset: 2px;
27
+ }
28
+ }
14
29
  }
15
30
 
16
31
  &__content {
@@ -1,18 +1,4 @@
1
1
  /* content-card start */
2
- // $colors: (
3
- // 'yellow': $mg-color-yellow,
4
- // 'red': $mg-color-red-900,
5
- // 'green': $mg-color-green,
6
- // 'blue': $mg-color-azure,
7
- // 'gray': $mg-color-neutral-100,
8
- // );
9
- // $backgroundcolors: (
10
- // 'yellow': $mg-color-yellow-light,
11
- // 'red': $mg-color-red-600,
12
- // 'green': $mg-color-green-light,
13
- // 'blue': $mg-color-azure-light,
14
- // 'gray': $mg-color-neutral-100,
15
- // );
16
2
 
17
3
  // MG CARD using CSS GRID
18
4
  .mg-card {
@@ -105,14 +91,14 @@
105
91
  }
106
92
 
107
93
  &__label {
108
- color: $mg-color-label;
94
+ color: $mg-color-tag;
109
95
  cursor: pointer;
110
96
  display: inline-block;
111
- font-size: $mg-font-label;
97
+ font-size: $mg-font-tag;
112
98
  margin-right: $mg-spacing-50;
113
99
 
114
100
  &:hover {
115
- color: $mg-color-label;
101
+ color: $mg-color-tag;
116
102
  }
117
103
  }
118
104
 
@@ -124,9 +110,11 @@
124
110
  padding-top: $mg-spacing-100;
125
111
 
126
112
  a {
127
- color: $mg-color-text;
113
+ color: $mg-color-interactive;
128
114
  cursor: pointer;
129
- display: inline-block;
115
+ display: inline;
116
+ text-decoration: underline;
117
+ text-underline-offset: 3px;
130
118
  }
131
119
 
132
120
  .active {
@@ -135,7 +123,8 @@
135
123
  }
136
124
  }
137
125
 
138
- &__title a::after {
126
+ // Stretched link overlay (covers entire card)
127
+ &__title a::before {
139
128
  bottom: 0;
140
129
  content: "";
141
130
  left: 0;
@@ -144,6 +133,81 @@
144
133
  top: 0;
145
134
  z-index: 100;
146
135
  }
136
+
137
+ // Inline chevron indicator (CSS border triangle — no Unicode dependency)
138
+ &__title a::after {
139
+ border-color: currentColor;
140
+ border-style: solid;
141
+ border-width: 0.15em 0.15em 0 0;
142
+ content: "";
143
+ display: inline-block;
144
+ height: 0.35em;
145
+ margin-inline-start: 0.25em;
146
+ position: relative;
147
+ top: -0.1em;
148
+ transform: rotate(45deg);
149
+ translate: 0 0;
150
+ vertical-align: middle;
151
+ width: 0.35em;
152
+
153
+ @media (prefers-reduced-motion: no-preference) {
154
+ transition: translate 200ms ease;
155
+ }
156
+ }
157
+
158
+ // Focus: card-level outline when title link is focused via keyboard
159
+ &__title a:focus-visible {
160
+ outline: 2px solid $mg-color-interactive;
161
+ outline-offset: 2px;
162
+ }
163
+
164
+ // Hover: thicker underline + nudge chevron
165
+ &:hover &__title a {
166
+ text-decoration-thickness: 2px;
167
+ }
168
+
169
+ &:hover &__title a::after {
170
+ @media (prefers-reduced-motion: no-preference) {
171
+ translate: 0.15em 0;
172
+ }
173
+ }
174
+ }
175
+
176
+ // RTL chevron — flip direction
177
+ [dir="rtl"] .mg-card__title a::after {
178
+ transform: rotate(225deg);
179
+ }
180
+
181
+ [dir="rtl"] .mg-card:hover .mg-card__title a::after {
182
+ @media (prefers-reduced-motion: no-preference) {
183
+ translate: -0.15em 0;
184
+ }
185
+ }
186
+
187
+ // Color variants (shared accent colours from _variables.scss)
188
+ $card-variant-colours: (
189
+ "secondary": $mg-color-secondary,
190
+ "tertiary": $mg-color-tertiary,
191
+ "quaternary": $mg-color-quaternary,
192
+ );
193
+
194
+ @each $name, $color in $card-variant-colours {
195
+ .mg-card--#{$name} .mg-card__title a {
196
+ color: #{$color};
197
+ }
198
+ }
199
+
200
+ // Opt-out modifier: plain title (no blue, no underline, no chevron)
201
+ // Double class selector ensures this overrides variant colors regardless of source order
202
+ .mg-card.mg-card--plain-title {
203
+ .mg-card__title a {
204
+ color: $mg-color-text;
205
+ text-decoration: none;
206
+ }
207
+
208
+ .mg-card__title a::after {
209
+ content: none;
210
+ }
147
211
  }
148
212
 
149
213
  .mg-card__summary {
@@ -356,11 +420,12 @@
356
420
  line-height: $mg-font-line-height-500;
357
421
 
358
422
  a {
359
- color: $mg-color-text;
360
- text-decoration: none;
423
+ color: $mg-color-interactive;
424
+ text-decoration: underline;
425
+ text-underline-offset: 3px;
361
426
 
362
427
  &:hover {
363
- text-decoration: underline;
428
+ text-decoration-thickness: 2px;
364
429
  }
365
430
 
366
431
  &:focus-visible {
@@ -33,7 +33,7 @@
33
33
  &__label {
34
34
  font-size: $mg-font-size-200;
35
35
  font-weight: 600;
36
- color: $mg-color-label;
36
+ color: $mg-color-tag;
37
37
  text-transform: uppercase;
38
38
  letter-spacing: 0.05em;
39
39
  line-height: 1.2;
@@ -38,4 +38,31 @@
38
38
  height: 50px;
39
39
  margin: 1rem 0;
40
40
  }
41
+
42
+ &--challenge {
43
+ background-color: $mg-color-neutral-25;
44
+
45
+ .mg-error-page__container {
46
+ text-align: center;
47
+ padding: 3rem 2.5rem 2rem;
48
+ margin-top: 4rem;
49
+ max-width: 540px;
50
+ border-radius: 8px;
51
+ box-shadow: 0 2px 12px rgb(0 0 0 / 0.08);
52
+ }
53
+
54
+ .undrr-logo {
55
+ width: 100%;
56
+ margin: 0 0 2.5rem;
57
+ background-position: center;
58
+ height: 35px;
59
+ }
60
+
61
+ h1 {
62
+ font-size: 2.3rem;
63
+ font-weight: 600;
64
+ color: $mg-color-text;
65
+ margin: 0 0 0.5rem;
66
+ }
67
+ }
41
68
  }
@@ -1,6 +1,4 @@
1
- .mg-footer,
2
- .page-node-type-landing_page_gutenberg .field--name-body > * {
3
- // reset the spacer for the landing page body of the footer
1
+ .mg-footer {
4
2
  --mg-gutenberg-spacer: 0;
5
3
  }
6
4
 
@@ -14,6 +12,10 @@
14
12
  a:hover {
15
13
  color: $mg-color-white;
16
14
  }
15
+
16
+ .container {
17
+ margin-bottom: 0;
18
+ }
17
19
  }
18
20
 
19
21
  .mg-footer--about-footer--links {
@@ -24,4 +26,19 @@
24
26
 
25
27
  .mg-footer--about-footer--description {
26
28
  font-size: $mg-font-size-400;
29
+ }
30
+
31
+ .mg-footer--social-links {
32
+ display: inline-flex;
33
+ gap: 1.5rem;
34
+ padding-left: 0;
35
+
36
+ li {
37
+ display: inline-block;
38
+ }
39
+
40
+ li a {
41
+ color: $mg-color-white;
42
+ text-underline-offset: 5px;
43
+ }
27
44
  }
@@ -1,22 +1,2 @@
1
- /* checkbox */
2
- .form-check {
3
- align-items: center;
4
- display: flex;
5
- position: relative;
6
-
7
- label {
8
- cursor: pointer;
9
- font-size: $mg-font-size-300;
10
- padding: 0 7px;
11
- }
12
- }
13
-
14
- input[type="checkbox"] {
15
- @extend %checbox-radio-before;
16
-
17
- border-radius: 0;
18
-
19
- // &:checked {
20
- // background: url(#{$img-path-Icon}/icon-check.svg) 1px 0 no-repeat;
21
- // }
22
- }
1
+ // Checkbox-specific overrides.
2
+ // Shared form styles live in _form-base.scss (.mg-form-check).
@@ -0,0 +1,24 @@
1
+ // FormGroup — styled fieldset/legend for grouping related form controls.
2
+
3
+ .mg-form-group {
4
+ border: 0;
5
+ margin: 0;
6
+ min-width: 0;
7
+ padding: 0;
8
+
9
+ &__legend {
10
+ @extend %paragraph-font-300;
11
+
12
+ display: block;
13
+ margin-bottom: $mg-spacing-50;
14
+ padding: 0;
15
+ }
16
+
17
+ &--disabled &__legend {
18
+ color: $mg-color-neutral-400;
19
+ }
20
+
21
+ &--error &__legend {
22
+ color: $mg-color-red-900;
23
+ }
24
+ }
@@ -1,177 +1,7 @@
1
- label {
2
- @extend %paragraph-font-300;
3
-
4
- display: block;
5
-
6
- &.error {
7
- @extend %paragraph-font-300;
8
-
9
- color: $mg-color-black;
10
- margin-top: 0;
11
- }
12
-
13
- &.disabled {
14
- color: $mg-color-neutral-400;
15
- }
16
- }
17
-
18
- .help {
19
- color: $mg-color-neutral-500;
20
- display: block;
21
- font-size: $mg-font-size-200;
22
- margin-bottom: 0;
23
- margin-top: $mg-spacing-25;
24
- }
25
-
26
- .error {
27
- color: $mg-color-red-900;
28
- font-size: $mg-font-size-300;
29
- margin-bottom: 0;
30
- margin-top: $mg-spacing-25;
31
- }
32
-
33
- input[type="text"],
34
- input[type="number"],
35
- input[type="email"],
36
- input[type="password"],
37
- input[type="search"],
38
- input[type="tel"],
39
- input[type="date"],
40
- textarea {
41
- @extend %background-white;
42
-
43
- -moz-appearance: none;
44
- -webkit-appearance: none;
45
- appearance: none;
46
- border: 2px solid $mg-color-black;
47
- border-radius: 0;
48
- box-sizing: border-box;
49
- display: block;
50
- font-family: $mg-font-family;
51
- font-size: $mg-font-size-300;
52
- height: 46px;
53
- margin-top: $mg-spacing-25;
54
- padding: 0.625rem;
55
- width: 100%;
56
-
57
- &::placeholder {
58
- color: $mg-color-neutral-500;
59
- }
60
-
61
- &:focus {
62
- box-shadow: 0 0 4px $mg-color-blue-800;
63
- outline: 0;
64
- }
65
-
66
- input[type="date"],
67
- input[type="search"] {
68
- position: relative;
69
- }
70
-
71
- &.disabled {
72
- background-color: $mg-color-white;
73
- border: 2px solid $mg-color-neutral-400;
74
- color: $mg-color-neutral-400;
75
-
76
- &::placeholder {
77
- color: $mg-color-neutral-400;
78
- }
79
- }
80
-
81
- &.error {
82
- border: 2px solid $mg-color-red-900;
83
- }
84
- }
85
-
86
- input[type="date"] {
87
- // background:
88
- // url(#{$img-path-Icon}/calender-black.svg) no-repeat left 14px
89
- // bottom 12px;
90
- background-color: $mg-color-white;
91
- color: $mg-color-neutral-500;
92
- }
93
-
94
-
95
- .help {
96
- &.disabled {
97
- color: $mg-color-neutral-400;
98
- }
99
- }
100
-
101
- textarea {
102
- height: auto;
103
- max-width: 100%;
104
- resize: vertical;
105
- }
106
-
107
- input[type="date"]::-webkit-calendar-picker-indicator {
108
- appearance: none;
109
- left: 3px;
110
- opacity: 0;
111
- position: absolute;
112
- }
113
-
114
- [dir="rtl"] {
115
- input[type="text"],
116
- input[type="number"],
117
- input[type="email"],
118
- input[type="password"],
119
- input[type="search"],
120
- input[type="tel"],
121
- input[type="date"],
122
- textarea {
123
- @media (hover: none) and (pointer: coarse) {
124
- input[type="date"] {
125
- padding-right: $mg-spacing-100;
126
- }
127
- }
128
- }
129
-
130
- // input[type="date"],
131
- // input[type="search"] {
132
- // background:
133
- // url(#{$img-path-Icon}/calender-black.svg) no-repeat right 14px
134
- // bottom 12px;
135
- // background-color: $mg-color-white;
136
- // padding-left: 0.635rem;
137
- // padding-right: $mg-spacing-200;
138
- // text-align: right;
139
- // }
140
-
141
- // input[type="search"] {
142
- // background:
143
- // url(#{$img-path-Icon}/search-black.svg) no-repeat right 14px
144
- // bottom 12px;
145
- // }
146
-
147
- // input[type="date"] {
148
- // &.disabled {
149
- // background-image: url(#{$img-path-Icon}/date-disabled.svg);
150
- // }
151
- // }
152
-
153
- input[type="date"]::-webkit-calendar-picker-indicator {
154
- left: inherit;
155
- position: absolute;
156
- right: 27px;
157
- }
158
-
159
- input::-webkit-date-and-time-value {
160
- margin-right: 0;
161
- text-align: right;
162
- }
163
- }
164
-
165
- // Arabic
166
- :lang(ar) {
167
- input[type="text"],
168
- input[type="number"],
169
- input[type="email"],
170
- input[type="password"],
171
- input[type="search"],
172
- input[type="tel"],
173
- input[type="date"],
174
- textarea {
175
- font-family: $mg-font-family-arabic-body;
176
- }
177
- }
1
+ // DEPRECATED — February 2026
2
+ // This file has been replaced by:
3
+ // - stories/Components/Forms/_form-base.scss (shared form styles)
4
+ // - stories/Components/Forms/TextInput/text-input.scss (TextInput-specific)
5
+ // Scheduled for removal: August 2026.
6
+ // If you see this message, update your import path.
7
+ @warn "input-fields.scss is deprecated. Import _form-base.scss and TextInput/text-input.scss instead. Removal: August 2026.";
@@ -1,13 +1,2 @@
1
- /* radio */
2
- input[type="radio"] {
3
- @extend %checbox-radio-before;
4
-
5
- background-color: transparent;
6
- border-radius: 100%;
7
- box-shadow: inset 0 0 0 $mg-color-white;
8
-
9
- &:checked {
10
- background-color: $mg-color-red-900;
11
- box-shadow: inset 0 0 0 3px $mg-color-white;
12
- }
13
- }
1
+ // Radio-specific overrides.
2
+ // Shared form styles live in _form-base.scss (.mg-form-check).
@@ -1,19 +1,10 @@
1
- .select-default {
2
- @extend %select_default;
3
- @include x-appearance(none);
4
-
5
- // background:
6
- // $mg-color-white url(#{$img-path-Icon}/chevron-down.svg) no-repeat
7
- // right 22px center;
8
- border-radius: 0;
9
- color: $mg-color-black;
10
- display: block;
11
- }
1
+ // Select-specific overrides.
2
+ // Shared form styles live in _form-base.scss (.mg-form-select).
12
3
 
13
4
  [dir="rtl"] {
14
- .select-default {
15
- background-position: left 22px center;
16
- padding: $mg-spacing-50 $mg-spacing-50 $mg-spacing-50 $mg-spacing-800;
17
- text-align: right;
5
+ .mg-form-select {
6
+ background-position: left 0.625rem center;
7
+ padding-left: $mg-spacing-200;
8
+ padding-right: 0.625rem;
18
9
  }
19
10
  }
@@ -0,0 +1,13 @@
1
+ // TextInput-specific overrides (date picker styling).
2
+ // Shared form styles live in _form-base.scss.
3
+
4
+ .mg-form-input[type="date"] {
5
+ color: $mg-color-neutral-500;
6
+
7
+ &::-webkit-calendar-picker-indicator {
8
+ appearance: none;
9
+ left: 3px;
10
+ opacity: 0;
11
+ position: absolute;
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ // Textarea-specific overrides.
2
+ // Shared form styles live in _form-base.scss (.mg-form-textarea).