@qld-gov-au/qgds-bootstrap5 2.0.12 → 2.1.1

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 (121) hide show
  1. package/.esbuild/plugins/qgds-plugin-generate-icon-assets.js +31 -24
  2. package/.storybook/preview.js +15 -6
  3. package/dist/assets/components/bs5/button/button.hbs +1 -1
  4. package/dist/assets/components/bs5/callToAction/callToAction.hbs +3 -3
  5. package/dist/assets/components/bs5/dateinput/dateinput.hbs +21 -27
  6. package/dist/assets/components/bs5/footer/customLinks.hbs +1 -1
  7. package/dist/assets/components/bs5/footer/followLinks.hbs +1 -1
  8. package/dist/assets/components/bs5/globalAlert/globalAlert.hbs +8 -1
  9. package/dist/assets/components/bs5/head/head.hbs +1 -1
  10. package/dist/assets/components/bs5/inpageAlert/inpageAlert.hbs +10 -2
  11. package/dist/assets/components/bs5/pagination/pagination.hbs +7 -2
  12. package/dist/assets/components/bs5/promotionalPanel/promotionalPanel.hbs +1 -1
  13. package/dist/assets/components/bs5/searchInput/searchInput.hbs +11 -9
  14. package/dist/assets/css/qld.bootstrap.css +2 -2
  15. package/dist/assets/css/qld.bootstrap.css.map +3 -3
  16. package/dist/assets/css/qld.bootstrap.legacy.css +2 -2
  17. package/dist/assets/css/qld.bootstrap.legacy.css.map +3 -3
  18. package/dist/assets/img/icons-sprite.svg +24 -24
  19. package/dist/assets/js/handlebars.helpers.bundle.js +1 -1
  20. package/dist/assets/js/handlebars.init.min.js +80 -64
  21. package/dist/assets/js/handlebars.init.min.js.map +2 -2
  22. package/dist/assets/js/handlebars.partials.js +80 -64
  23. package/dist/assets/js/handlebars.partials.js.map +2 -2
  24. package/dist/assets/js/qld.bootstrap.min.js +6 -6
  25. package/dist/assets/js/qld.bootstrap.min.js.map +4 -4
  26. package/dist/assets/node/handlebars.init.min.js +28 -19
  27. package/dist/assets/node/handlebars.init.min.js.map +2 -2
  28. package/dist/components/bs5/button/button.hbs +1 -1
  29. package/dist/components/bs5/callToAction/callToAction.hbs +3 -3
  30. package/dist/components/bs5/dateinput/dateinput.hbs +21 -27
  31. package/dist/components/bs5/footer/customLinks.hbs +1 -1
  32. package/dist/components/bs5/footer/followLinks.hbs +1 -1
  33. package/dist/components/bs5/globalAlert/globalAlert.hbs +8 -1
  34. package/dist/components/bs5/head/head.hbs +1 -1
  35. package/dist/components/bs5/inpageAlert/inpageAlert.hbs +10 -2
  36. package/dist/components/bs5/pagination/pagination.hbs +7 -2
  37. package/dist/components/bs5/promotionalPanel/promotionalPanel.hbs +1 -1
  38. package/dist/components/bs5/searchInput/searchInput.hbs +11 -9
  39. package/dist/package.json +33 -32
  40. package/dist/sample-data/callToAction/callToAction.data.json +2 -1
  41. package/dist/sample-data/dateinput/dateinput.data.json +3 -1
  42. package/dist/sample-data/footer/footer.data.json +3 -0
  43. package/dist/sample-data/inpageAlert/inpageAlert.data.json +1 -1
  44. package/dist/sample-data/pagination/pagination.data.json +4 -4
  45. package/dist/sample-data/promotionalPanel/promotionalPanel.data.json +45 -47
  46. package/dist/sample-data/searchInput/searchInput.data.json +1 -0
  47. package/package.json +33 -32
  48. package/src/components/bs5/breadcrumbs/breadcrumbs.scss +4 -4
  49. package/src/components/bs5/button/Button.js +32 -6
  50. package/src/components/bs5/button/button.hbs +1 -1
  51. package/src/components/bs5/button/button.scss +1 -5
  52. package/src/components/bs5/button/button.stories.js +16 -4
  53. package/src/components/bs5/callToAction/callToAction.data.json +2 -1
  54. package/src/components/bs5/callToAction/callToAction.hbs +3 -3
  55. package/src/components/bs5/callToAction/callToAction.stories.js +2 -2
  56. package/src/components/bs5/card/card.scss +4 -2
  57. package/src/components/bs5/dateinput/Dateinput.js +1 -38
  58. package/src/components/bs5/dateinput/Dateinput.mdx +27 -0
  59. package/src/components/bs5/dateinput/Dateinput.stories.js +48 -4
  60. package/src/components/bs5/dateinput/dateinput.data.json +3 -1
  61. package/src/components/bs5/dateinput/dateinput.functions.js +91 -0
  62. package/src/components/bs5/dateinput/dateinput.hbs +21 -27
  63. package/src/components/bs5/footer/customLinks.hbs +1 -1
  64. package/src/components/bs5/footer/followLinks.hbs +1 -1
  65. package/src/components/bs5/footer/footer.data.json +3 -0
  66. package/src/components/bs5/formcheck/_form-variables.scss +36 -0
  67. package/src/components/bs5/formcheck/formcheck.scss +59 -14
  68. package/src/components/bs5/globalAlert/globalAlert.hbs +8 -1
  69. package/src/components/bs5/globalAlert/globalAlert.scss +14 -19
  70. package/src/components/bs5/globalAlert/globalAlert.stories.js +1 -0
  71. package/src/components/bs5/globalAlert/globalAlert.test.js +10 -5
  72. package/src/components/bs5/header/header.scss +1 -2
  73. package/src/components/bs5/icons/_icons.list.js +7 -7
  74. package/src/components/bs5/icons/_icons.list.scss +113 -112
  75. package/src/components/bs5/icons/_icons.variables.scss +7 -6
  76. package/src/components/bs5/icons/icons.scss +2 -1
  77. package/src/components/bs5/inpageAlert/inpageAlert.data.json +1 -1
  78. package/src/components/bs5/inpageAlert/inpageAlert.hbs +10 -2
  79. package/src/components/bs5/inpageAlert/inpageAlert.scss +52 -55
  80. package/src/components/bs5/inpageAlert/inpageAlert.stories.js +54 -3
  81. package/src/components/bs5/inpagenav/inpagenav.scss +9 -1
  82. package/src/components/bs5/modal/modal.scss +1 -1
  83. package/src/components/bs5/navbar/navbar.functions.js +39 -28
  84. package/src/components/bs5/navbar/navbar.scss +43 -28
  85. package/src/components/bs5/navbar/navbar.stories.js +4 -3
  86. package/src/components/bs5/pageLayout/PaletteShowcase.stories.js +4 -3
  87. package/src/components/bs5/pagination/pagination.data.json +4 -4
  88. package/src/components/bs5/pagination/pagination.hbs +7 -2
  89. package/src/components/bs5/pagination/pagination.scss +1 -1
  90. package/src/components/bs5/promotionalPanel/promotionalPanel.data.json +45 -47
  91. package/src/components/bs5/promotionalPanel/promotionalPanel.hbs +1 -1
  92. package/src/components/bs5/quickexit/quickexit.scss +1 -1
  93. package/src/components/bs5/searchInput/__snapshots__/searchInput.test.js.snap +16 -16
  94. package/src/components/bs5/searchInput/search.functions.js +70 -71
  95. package/src/components/bs5/searchInput/searchInput.data.json +1 -0
  96. package/src/components/bs5/searchInput/searchInput.hbs +11 -9
  97. package/src/components/bs5/searchInput/searchInput.scss +92 -38
  98. package/src/components/bs5/searchInput/searchInput.test.js +91 -119
  99. package/src/components/bs5/sidenav/sidenav.scss +17 -19
  100. package/src/components/bs5/skiplinks/skipLinks.scss +12 -4
  101. package/src/components/bs5/table/table.scss +93 -83
  102. package/src/components/common/focus-styles/focusStyles.mdx +20 -0
  103. package/src/components/common/focus-styles/focusStyles.stories.js +58 -0
  104. package/src/css/functions/_index.scss +3 -0
  105. package/src/css/functions/color-icon.scss +31 -0
  106. package/src/css/functions/string-replace.scss +49 -0
  107. package/src/css/functions/svg-encode.scss +22 -0
  108. package/src/css/main.scss +3 -0
  109. package/src/css/mixins/focusable.scss +1 -1
  110. package/src/css/mixins/make-icon.scss +1 -1
  111. package/src/css/mixins/make-link.scss +13 -10
  112. package/src/css/qld-palettes.scss +20 -12
  113. package/src/css/qld-reduced-motion.scss +51 -0
  114. package/src/css/qld-tokens.scss +3 -3
  115. package/src/css/qld-type.scss +11 -13
  116. package/src/css/qld-utilities.scss +9 -1
  117. package/src/css/qld-variables.scss +1 -1
  118. package/src/img/icons-sprite.svg +24 -24
  119. package/src/js/constants.js +10 -0
  120. package/src/js/qld.bootstrap.js +99 -151
  121. package/src/js/utils.js +3 -1
@@ -1,5 +1,5 @@
1
1
  {{#if customLinks }}
2
- <ul class="nav footer-link-list footer-link-list--custom flex-column">
2
+ <ul class="nav footer-link-list footer-link-list--custom flex-column">
3
3
  {{#each customLinks }}
4
4
  <li><a class="nav-link" href="{{ link }}" {{#if target }} target="_blank" {{/if}}>{{ label }}</a></li>
5
5
  {{/each }}
@@ -6,7 +6,7 @@
6
6
  <span class="qld-icon qld-icon-md qld-icon-{{icon}} d-lg-none" aria-hidden="true"></span>
7
7
  <span class="qld-icon qld-icon-sm qld-icon-{{icon}} d-none d-lg-block" aria-hidden="true"></span>
8
8
  <span class="nav-link-label d-none d-lg-block">{{ label }}</span>
9
- <span class="sr-only">{{ label }}</span>
9
+ <span class="sr-only">{{isdefined accessibleLabel label}}</span>
10
10
  </a>
11
11
  </li>
12
12
  {{/each }}
@@ -61,18 +61,21 @@
61
61
  "followLinks": [
62
62
  {
63
63
  "label": "Facebook",
64
+ "accessibleLabel": "Facebook page",
64
65
  "link": "#",
65
66
  "icon": "facebook",
66
67
  "target": "_blank"
67
68
  },
68
69
  {
69
70
  "label": "LinkedIn",
71
+ "accessibleLabel": "LinkedIn page",
70
72
  "link": "#",
71
73
  "icon": "linkedin",
72
74
  "target": "_blank"
73
75
  },
74
76
  {
75
77
  "label": "X (Twitter)",
78
+ "accessibleLabel": "X page",
76
79
  "link": "#",
77
80
  "icon": "x",
78
81
  "target": "_blank"
@@ -1,5 +1,13 @@
1
1
  // Expand this file with all themable shared form variables
2
2
  // @extend %form-variables in all input and form components.
3
+ @use "../../../css/functions" as f;
4
+
5
+ /// Custom colored icons for dropdown chevron in all states.
6
+ /// Select input cannot use ::before or ::after so need a svg cbackground image via url(data);
7
+ @function _dropdown-icon($color) {
8
+ @return url(f.svg-encode(f.color-icon("chevron-down", $color)));
9
+ }
10
+
3
11
  %form-control-variables {
4
12
  &,
5
13
  .default &,
@@ -108,6 +116,34 @@
108
116
  }
109
117
  }
110
118
 
119
+ %form-select-variables {
120
+ &,
121
+ .default &,
122
+ .light &,
123
+ .alt & {
124
+ --#{$prefix}icon-url: #{_dropdown-icon($qld-light-action-secondary)};
125
+ --#{$prefix}icon-hover-url: #{_dropdown-icon(
126
+ $qld-light-action-secondary-hover
127
+ )};
128
+ --#{$prefix}icon-disabled-url: #{_dropdown-icon(
129
+ $color-default-color-light-text-lighter
130
+ )};
131
+ --#{$prefix}icon-error-url: #{_dropdown-icon($qld-notify-warning)};
132
+ --#{$prefix}icon-success-url: #{_dropdown-icon($qld-notify-success)};
133
+ --#{$prefix}icon-focus-url: #{_dropdown-icon($qld-light-action-secondary)};
134
+ }
135
+
136
+ .dark &,
137
+ .dark-alt & {
138
+ --#{$prefix}icon-url: #{_dropdown-icon($qld-dark-action-secondary)};
139
+ --#{$prefix}icon-hover-url: #{_dropdown-icon($qld-dark-action-secondary)};
140
+ --#{$prefix}icon-disabled-url: #{_dropdown-icon(
141
+ $color-default-color-dark-text-lighter
142
+ )};
143
+ --#{$prefix}icon-focus-url: #{_dropdown-icon($qld-light-action-secondary)};
144
+ }
145
+ }
146
+
111
147
  %form-valid-feedback-variables {
112
148
  &,
113
149
  :is(.default, .light, .alt) & {
@@ -1,5 +1,6 @@
1
1
  @use "../../../css/mixins" as m;
2
2
  @use "../../../css/functions" as f;
3
+ @use "../icons/icons.list" as icons;
3
4
  @import "form-variables";
4
5
  // NTGOV Form Controls, radios, checkboxes and input groups
5
6
  // https://getbootstrap.com/docs/5.2/forms/form-control/#variables
@@ -149,6 +150,11 @@ $form-check-inline-margin-end: 1rem;
149
150
  &::placeholder {
150
151
  color: var(--#{$prefix}placeholder-color-focus);
151
152
  }
153
+
154
+ .dark &,
155
+ .dark-alt & {
156
+ @extend %qld-palette-default;
157
+ }
152
158
  }
153
159
 
154
160
  &:disabled,
@@ -172,7 +178,10 @@ $form-check-inline-margin-end: 1rem;
172
178
  ); // already scoped to .valid/.invalid.
173
179
  // USe the same padding value as default state, and remove the background image icon.
174
180
  padding: $_padding;
175
- background-image: none;
181
+
182
+ &:not(.form-select, .qld-select) {
183
+ background-image: none;
184
+ }
176
185
 
177
186
  &:focus {
178
187
  border-color: var(
@@ -190,38 +199,74 @@ $form-check-inline-margin-end: 1rem;
190
199
  .form-select,
191
200
  .qld-select {
192
201
  @extend %form-control;
202
+ @extend %form-select-variables;
203
+
204
+ $_background-position: right 1rem center;
205
+ $_background-size: f.remify(20px);
193
206
 
194
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='%23008635' d='M4.251 181.1C7.392 177.7 11.69 175.1 16 175.1c3.891 0 7.781 1.406 10.86 4.25l197.1 181.1l197.1-181.1c6.5-6 16.64-5.625 22.61 .9062c6 6.5 5.594 16.59-.8906 22.59l-208 192c-6.156 5.688-15.56 5.688-21.72 0l-208-192C-1.343 197.7-1.749 187.6 4.251 181.1z'/%3E%3C/svg%3E");
207
+ background-image: var(--#{$prefix}icon-url);
195
208
  background-repeat: no-repeat;
196
209
  appearance: none;
197
- background-position: right 1rem center;
198
- background-size: f.remify(20px);
210
+ background-position: $_background-position;
211
+ background-size: $_background-size;
199
212
  background-origin: border-box;
200
213
  width: 100%;
214
+ cursor: pointer;
215
+
216
+ &:hover {
217
+ --#{$prefix}icon-url: var(--#{$prefix}icon-hover-url);
218
+ }
201
219
 
202
220
  &.disabled,
203
221
  &:disabled,
204
222
  &.is-disabled {
205
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='%23636363' d='M4.251 181.1C7.392 177.7 11.69 175.1 16 175.1c3.891 0 7.781 1.406 10.86 4.25l197.1 181.1l197.1-181.1c6.5-6 16.64-5.625 22.61 .9062c6 6.5 5.594 16.59-.8906 22.59l-208 192c-6.156 5.688-15.56 5.688-21.72 0l-208-192C-1.343 197.7-1.749 187.6 4.251 181.1z'/%3E%3C/svg%3E");
223
+ --#{$prefix}icon-url: var(--#{$prefix}icon-disabled-url);
206
224
  }
207
225
 
226
+ .was-validated &:invalid,
208
227
  &.qld-input-error,
209
228
  &.is-invalid {
210
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='%23E22339' d='M4.251 181.1C7.392 177.7 11.69 175.1 16 175.1c3.891 0 7.781 1.406 10.86 4.25l197.1 181.1l197.1-181.1c6.5-6 16.64-5.625 22.61 .9062c6 6.5 5.594 16.59-.8906 22.59l-208 192c-6.156 5.688-15.56 5.688-21.72 0l-208-192C-1.343 197.7-1.749 187.6 4.251 181.1z'/%3E%3C/svg%3E");
229
+ --#{$prefix}icon-url: var(--#{$prefix}icon-error-url);
230
+ }
211
231
 
212
- &:not([multiple]):not([size]),
213
- &:not([multiple])[size="1"] {
214
- background-size: 1rem auto;
215
- }
232
+ .was-validated &:valid,
233
+ &.qld-input-success,
234
+ &.is-valid {
235
+ --#{$prefix}icon-url: var(--#{$prefix}icon-success-url);
216
236
  }
217
237
 
238
+ .was-validated &:invalid,
239
+ &.qld-input-error,
240
+ &.is-invalid,
241
+ .was-validated &:valid,
218
242
  &.qld-input-success,
219
243
  &.is-valid {
220
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='%23339d37' d='M4.251 181.1C7.392 177.7 11.69 175.1 16 175.1c3.891 0 7.781 1.406 10.86 4.25l197.1 181.1l197.1-181.1c6.5-6 16.64-5.625 22.61 .9062c6 6.5 5.594 16.59-.8906 22.59l-208 192c-6.156 5.688-15.56 5.688-21.72 0l-208-192C-1.343 197.7-1.749 187.6 4.251 181.1z'/%3E%3C/svg%3E");
244
+ // some bs specificity war stuff
245
+ &:not([multiple]):not([size]) {
246
+ padding-right: $input-padding-x;
247
+ background-position: $_background-position;
248
+ background-size: $_background-size;
249
+ }
250
+ }
251
+
252
+ &:focus {
253
+ --#{$prefix}icon-url: var(--#{$prefix}icon-focus-url);
254
+ }
255
+
256
+ // A select doesn't have a `placeholder` attribute, instead it may have an option with a null or empty string value, which is used instead.
257
+ &:has(option[value=""]:checked) {
258
+ color: var(--#{$prefix}placeholder-color);
259
+
260
+ .dark &:focus {
261
+ --#{$prefix}placeholder-color: #{$color-default-color-light-text-lighter};
262
+ }
263
+ }
264
+
265
+ > option {
266
+ color: $color-default-color-light-text-default;
221
267
 
222
- &:not([multiple]):not([size]),
223
- &:not([multiple])[size="1"] {
224
- background-size: 1rem auto;
268
+ &[value=""] {
269
+ color: $color-default-color-light-text-lighter;
225
270
  }
226
271
  }
227
272
  }
@@ -3,7 +3,13 @@
3
3
  <div class="global-alert-include">
4
4
  {{#each alertItems}}
5
5
  <section role="region" class="global-alert alert container-full d-none {{variant}}" data-variant="{{variant}}"
6
- aria-label="{{ariaLabel}}" {{#if id}} data-id="{{id}}" {{/if}}{{#if dismissedExpiryDays}}
6
+ {{#if ariaLabel}} aria-label="{{ ariaLabel }}"
7
+ {{~else ifCond variant "==" "global-alert-critical"}} aria-label="Critical alert"
8
+ {{~else ifCond variant "==" "global-alert-info"}} aria-label="Informational alert"
9
+ {{~else ifCond variant "==" "global-alert-warning"}} aria-label="Warning alert"
10
+ {{~else}} aria-label="Informational alert"
11
+ {{~/if}}
12
+ {{#if id}} data-id="{{id}}" {{/if}}{{#if dismissedExpiryDays}}
7
13
  data-expiry-days="{{dismissedExpiryDays}}" {{/if}}>
8
14
  <div class="qld-global-alert-main">
9
15
  <div class="global-alert-icon">
@@ -13,6 +19,7 @@
13
19
  <span class="qld-icon qld-icon-sm qld-icon-alert-information" aria-hidden="true"></span>
14
20
  {{else ifCond variant '==' 'global-alert-warning'}}
15
21
  <span class="qld-icon qld-icon-sm qld-icon-alert-warning" aria-hidden="true"></span>
22
+ {{else}}<span class="qld-icon qld-icon-sm qld-icon-alert-information" aria-hidden="true"></span>
16
23
  {{/ifCond}}
17
24
  </div>
18
25
 
@@ -1,3 +1,5 @@
1
+ @use "../../../css/mixins" as m;
2
+
1
3
  .global-alert {
2
4
  line-height: 1.25rem;
3
5
  border-radius: 0;
@@ -35,6 +37,7 @@
35
37
  }
36
38
 
37
39
  .global-alert-content {
40
+ --qld-focus-color: #000;
38
41
  display: flex;
39
42
  flex-direction: column;
40
43
  gap: 0.5rem;
@@ -49,8 +52,8 @@
49
52
  text-underline-offset: 0.3rem;
50
53
  }
51
54
 
52
- a:focus {
53
- outline-color: #000;
55
+ a {
56
+ @include m.focusable($outlineWidth: 2px);
54
57
  }
55
58
 
56
59
  .global-alert-action {
@@ -103,11 +106,8 @@
103
106
  mask-size: contain;
104
107
  }
105
108
 
106
- &:focus {
107
- outline: 3px solid;
108
- outline-offset: 0;
109
- box-shadow: none;
110
- }
109
+ @include m.focusable($outlineWidth: 2px);
110
+ box-shadow: none;
111
111
 
112
112
  @include media-breakpoint-down(lg) {
113
113
  &:hover {
@@ -119,7 +119,7 @@
119
119
 
120
120
  &.global-alert-critical {
121
121
  --#{$prefix}icon-color: #{$core-default-color-neutral-white};
122
- //
122
+
123
123
  background-color: $qld-notify-warning;
124
124
  color: var(--#{$prefix}white);
125
125
  font-size: 0.875em;
@@ -129,12 +129,6 @@
129
129
  background-color: var(--#{$prefix}white);
130
130
  }
131
131
 
132
- a {
133
- &:focus {
134
- outline-color: #fff;
135
- }
136
- }
137
-
138
132
  .global-alert-action a {
139
133
  color: var(--#{$prefix}white);
140
134
  text-decoration-color: var(--#{$prefix}white);
@@ -145,18 +139,19 @@
145
139
  }
146
140
 
147
141
  .global-alert-close .btn-close {
148
- &:focus {
149
- outline-color: #ffffff;
150
- }
151
142
  &::before {
152
143
  background-color: #ffffff;
153
144
  }
154
145
  }
146
+
147
+ a {
148
+ --qld-focus-color: #ffffff;
149
+ }
155
150
  }
156
151
 
157
152
  &.global-alert-warning {
158
153
  --#{$prefix}icon-color: #{$core-default-color-neutral-black};
159
- //
154
+
160
155
  background-color: $qld-notify-alert;
161
156
  color: var(--#{$prefix}body-color);
162
157
  font-size: 0.875em;
@@ -170,7 +165,7 @@
170
165
 
171
166
  &.global-alert-info {
172
167
  --#{$prefix}icon-color: #{$core-default-color-neutral-black};
173
- //
168
+
174
169
  background-color: $qld-general-info-alert;
175
170
  color: var(--#{$prefix}body-color);
176
171
  font-size: 0.875em;
@@ -34,6 +34,7 @@ export default {
34
34
 
35
35
  if (args.variant && storyName === "Default") {
36
36
  args.alertItems[0].variant = args.variant || "global-alert-critical";
37
+ args.alertItems[0].ariaLabel = "";
37
38
  }
38
39
 
39
40
  // Render the story with the updated args.
@@ -124,8 +124,13 @@ describe("initGlobalAlerts", () => {
124
124
  beforeParse(window) {
125
125
  // Ensure console methods exist
126
126
  window.console = console;
127
- // Mock localStorage before any scripts run
128
- window.localStorage = localStorageMock;
127
+ // Mock localStorage by redefining localStorage property entirely
128
+ Object.defineProperty(window, "localStorage", {
129
+ value: localStorageMock,
130
+ configurable: true,
131
+ enumerable: true,
132
+ writable: true,
133
+ });
129
134
  Object.defineProperty(window, "localStorage", {
130
135
  value: localStorageMock,
131
136
  writable: true,
@@ -139,11 +144,11 @@ describe("initGlobalAlerts", () => {
139
144
  localStorage = localStorageMock;
140
145
 
141
146
  // Set global references for initGlobalAlerts
142
-
147
+
143
148
  global.document = d;
144
-
149
+
145
150
  global.window = window;
146
-
151
+
147
152
  global.localStorage = localStorageMock;
148
153
 
149
154
  // Clear localStorage before each test
@@ -425,9 +425,8 @@
425
425
  position: absolute;
426
426
  left: 0;
427
427
  right: 0;
428
- top: 0.4rem;
429
428
  padding: 1rem var(--qld-container-padding-x);
430
- background-color: var(--#{$prefix}header-color-bg);
429
+ background-color: var(--#{$prefix}body-bg);
431
430
 
432
431
  &.is-open {
433
432
  display: block;
@@ -1,10 +1,4 @@
1
1
  export default [
2
- "spinner-step-1",
3
- "spinner-step-2",
4
- "spinner-step-3",
5
- "spinner-step-4",
6
- "x",
7
- "youtube",
8
2
  "accessibility",
9
3
  "alert-cancel",
10
4
  "alert-danger",
@@ -94,6 +88,10 @@ export default [
94
88
  "show",
95
89
  "sort-alpha",
96
90
  "speech",
91
+ "spinner-step-1",
92
+ "spinner-step-2",
93
+ "spinner-step-3",
94
+ "spinner-step-4",
97
95
  "spreadsheet",
98
96
  "status-cancel",
99
97
  "status-danger",
@@ -110,5 +108,7 @@ export default [
110
108
  "video",
111
109
  "view-all",
112
110
  "wheelchair",
113
- "zoom",
111
+ "x",
112
+ "youtube",
113
+ "zoom"
114
114
  ];