@qld-gov-au/qgds-bootstrap5 2.0.2 → 2.0.3

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 (73) hide show
  1. package/.storybook/preview.js +4 -1
  2. package/dist/assets/components/bs5/accordion/accordion.hbs +0 -3
  3. package/dist/assets/components/bs5/directionLinks/directionLinks.hbs +2 -1
  4. package/dist/assets/components/bs5/head/head.hbs +1 -1
  5. package/dist/assets/components/bs5/header/header.hbs +6 -9
  6. package/dist/assets/components/bs5/navbar/navbar.hbs +21 -14
  7. package/dist/assets/components/bs5/pageLayout/templates/contentPageWithForm.hbs +1 -1
  8. package/dist/assets/components/bs5/pageLayout/templates/contentPageWithSideNavigation.hbs +140 -108
  9. package/dist/assets/components/bs5/pageLayout/templates/homePage.hbs +1 -1
  10. package/dist/assets/components/bs5/sidenav/sidenav.hbs +56 -37
  11. package/dist/assets/css/qld.bootstrap.css +1 -6
  12. package/dist/assets/css/qld.bootstrap.css.map +3 -3
  13. package/dist/assets/js/handlebars.init.min.js +228 -175
  14. package/dist/assets/js/handlebars.init.min.js.map +2 -2
  15. package/dist/assets/js/qld.bootstrap.min.js +5 -5
  16. package/dist/assets/js/qld.bootstrap.min.js.map +4 -4
  17. package/dist/assets/node/handlebars.init.min.js +28 -24
  18. package/dist/assets/node/handlebars.init.min.js.map +2 -2
  19. package/dist/components/bs5/accordion/accordion.hbs +0 -3
  20. package/dist/components/bs5/directionLinks/directionLinks.hbs +2 -1
  21. package/dist/components/bs5/head/head.hbs +1 -1
  22. package/dist/components/bs5/header/header.hbs +6 -9
  23. package/dist/components/bs5/navbar/navbar.hbs +21 -14
  24. package/dist/components/bs5/pageLayout/templates/contentPageWithForm.hbs +1 -1
  25. package/dist/components/bs5/pageLayout/templates/contentPageWithSideNavigation.hbs +140 -108
  26. package/dist/components/bs5/pageLayout/templates/homePage.hbs +1 -1
  27. package/dist/components/bs5/sidenav/sidenav.hbs +56 -37
  28. package/dist/package.json +2 -4
  29. package/dist/sample-data/navbar/navbar.data.json +91 -25
  30. package/dist/sample-data/pagination/pagination.data.json +19 -19
  31. package/dist/sample-data/sidenav/sidenav.data.json +81 -80
  32. package/package.json +2 -4
  33. package/src/components/bs5/accordion/Accordion.mdx +34 -10
  34. package/src/components/bs5/accordion/__snapshots__/accordion.test.js.snap +0 -3
  35. package/src/components/bs5/accordion/accordion.hbs +0 -3
  36. package/src/components/bs5/accordion/mdx/_designResources.mdx +6 -0
  37. package/src/components/bs5/accordion/mdx/_usageInstructions.mdx +10 -0
  38. package/src/components/bs5/blockquote/blockquote.scss +47 -7
  39. package/src/components/bs5/button/button.scss +4 -0
  40. package/src/components/bs5/directionLinks/directionLinks.hbs +2 -1
  41. package/src/components/bs5/directionLinks/directionLinks.scss +27 -80
  42. package/src/components/bs5/directionLinks/directionLinks.stories.js +7 -14
  43. package/src/components/bs5/header/header.hbs +6 -9
  44. package/src/components/bs5/inpagenav/inpagenav.scss +7 -3
  45. package/src/components/bs5/navbar/navbar.data.json +91 -25
  46. package/src/components/bs5/navbar/navbar.functions.js +4 -0
  47. package/src/components/bs5/navbar/navbar.hbs +21 -14
  48. package/src/components/bs5/navbar/navbar.scss +219 -166
  49. package/src/components/bs5/navbar/navbar.stories.js +31 -2
  50. package/src/components/bs5/pageLayout/pageLayout.stories.js +3 -1
  51. package/src/components/bs5/pageLayout/templates/contentPageWithForm.hbs +1 -1
  52. package/src/components/bs5/pageLayout/templates/contentPageWithSideNavigation.hbs +140 -108
  53. package/src/components/bs5/pageLayout/templates/homePage.hbs +1 -1
  54. package/src/components/bs5/pagination/pagination.data.json +19 -19
  55. package/src/components/bs5/pagination/pagination.scss +37 -63
  56. package/src/components/bs5/promotionalPanel/promotionalPanel.scss +23 -22
  57. package/src/components/bs5/quickexit/quickexit.functions.js +24 -37
  58. package/src/components/bs5/quickexit/quickexit.scss +4 -0
  59. package/src/components/bs5/sidenav/sidenav.data.json +81 -80
  60. package/src/components/bs5/sidenav/sidenav.hbs +56 -37
  61. package/src/components/bs5/sidenav/sidenav.scss +236 -151
  62. package/src/components/bs5/skiplinks/skipLinks.functions.js +0 -9
  63. package/src/components/bs5/skiplinks/skipLinks.test.js +0 -1
  64. package/src/components/common/layout/container.scss +5 -0
  65. package/src/components/common/layout/content.scss +16 -8
  66. package/src/css/main.scss +0 -7
  67. package/src/css/qld-theme.scss +1 -0
  68. package/src/css/utilities/_index.scss +1 -0
  69. package/src/css/utilities/sr-only.scss +5 -0
  70. package/src/js/qld.bootstrap.js +1 -9
  71. package/src/stories/documentation/_storybookDocsTabs.jsx +63 -0
  72. package/src/stories/documentation/storybook-documentation.scss +51 -0
  73. package/src/components/bs5/pagination/health-icon-sprite.svg +0 -156
@@ -1,184 +1,269 @@
1
1
  .nav {
2
- --#{$prefix}nav-link-color: var(--#{$prefix}brand-primary);
2
+ --#{$prefix}nav-link-color: var(--#{$prefix}brand-primary);
3
3
  }
4
4
 
5
5
  @include color-mode(dark) {
6
- .nav {
7
- --#{$prefix}nav-link-color: #FFF;
8
- }
6
+ .nav {
7
+ --#{$prefix}nav-link-color: #fff;
8
+ }
9
9
  }
10
10
 
11
-
12
11
  .qld-side-navigation {
13
-
14
- --sidenav-level-one-left-padding: 0;
15
- --sidenav-level-two-padding: 2rem;
16
- --sidenav-level-three-padding: 3.5rem;
17
- --sidenav-navlink-padding: 1rem;
18
-
19
- --sidenav-hover-bg: var(--#{$prefix}extra-light-grey);
20
- --sidenav-hover-color: var(--#{$prefix}brand-primary);
21
- --sidenav-hover-underline-color: var(--#{$prefix}color-default-color-light-underline-hover);
22
- --sidenav-visited-color: var(--#{$prefix}color-default-color-light-link);
23
- --sidenav-active-color: var(--#{$prefix}color-default-color-light-text-heading);
24
-
25
- --sidenav-heading-border-color: #{$qld-brand-secondary};
26
- --sidenav-item-border-color: #{$qld-soft-grey};
27
- --sidenav-subitem-border-color: #{$qld-light-grey};
28
-
29
- --sidenav-submenu-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='var(--#{$prefix}color-light-border)' d='M2 10h12v1H2zM2 5h1v5H2z'/%3E%3C/svg%3E");
30
-
31
- --sidenav-active-item-color: var(--light-text-heading);
32
-
12
+ --sidenav-level-one-left-padding: 0;
13
+ --sidenav-level-two-padding: 2rem;
14
+ --sidenav-level-three-padding: 3.5rem;
15
+ --sidenav-navlink-padding: 1rem;
16
+
17
+ --sidenav-hover-bg: var(--#{$prefix}extra-light-grey);
18
+ --sidenav-hover-color: var(--#{$prefix}brand-primary);
19
+ --sidenav-hover-underline-color: var(
20
+ --#{$prefix}color-default-color-light-underline-hover
21
+ );
22
+ --sidenav-visited-color: var(--#{$prefix}color-default-color-light-link);
23
+ --sidenav-active-color: var(
24
+ --#{$prefix}color-default-color-light-text-heading
25
+ );
26
+
27
+ --sidenav-heading-border-color: #{$qld-brand-secondary};
28
+ --sidenav-item-border-color: #{$qld-soft-grey};
29
+ --sidenav-subitem-border-color: #{$qld-light-grey};
30
+
31
+ --sidenav-submenu-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='var(--#{$prefix}color-light-border)' d='M2 10h12v1H2zM2 5h1v5H2z'/%3E%3C/svg%3E");
32
+
33
+ --sidenav-active-item-color: var(--light-text-heading);
34
+
35
+ --#{$prefix}accordion-color: var(--#{$prefix}body-color);
36
+ --#{$prefix}accordion-bg: var(--#{$prefix}body-bg);
37
+ --#{$prefix}accordion-border-color: var(
38
+ --#{$prefix}color-default-color-light-border-default
39
+ );
40
+ --#{$prefix}accordion-border-width: 1px;
41
+ --#{$prefix}accordion-border-radius: 0;
42
+ --#{$prefix}accordion-inner-border-radius: 0;
43
+ --#{$prefix}accordion-btn-padding-x: 1rem;
44
+ --#{$prefix}accordion-btn-padding-y: 1rem;
45
+ --#{$prefix}accordion-btn-color: var(--#{$prefix}link-color);
46
+ --#{$prefix}accordion-btn-bg: var(--#{$prefix}extra-light-grey);
47
+ --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};
48
+ --#{$prefix}accordion-btn-active-icon: #{escape-svg(
49
+ $accordion-button-active-icon
50
+ )};
51
+ --#{$prefix}accordion-btn-icon-width: 1.5rem;
52
+ --#{$prefix}accordion-btn-icon-transform: rotate(180deg);
53
+ --#{$prefix}accordion-btn-icon-transition: transform 0.25s ease-in;
54
+ --#{$prefix}accordion-btn-focus-box-shadow: none;
55
+ --#{$prefix}accordion-active-bg: var(--#{$prefix}accordion-btn-bg);
56
+ --#{$prefix}accordion-active-color: var(--#{$prefix}accordion-btn-color);
57
+ --#{$prefix}focus: var(--#{$prefix}light-focus);
58
+
59
+ .light & {
60
+ --#{$prefix}accordion-bg: var(--#{$prefix}light-background);
61
+ --#{$prefix}accordion-btn-bg: var(--#{$prefix}light-background-shade);
62
+ --#{$prefix}accordion-border-color: var(
63
+ --#{$prefix}color-default-color-light-border-light
64
+ );
65
+ }
66
+
67
+ .alt & {
68
+ --#{$prefix}accordion-bg: var(--#{$prefix}light-grey-alt);
69
+ --#{$prefix}accordion-btn-bg: var(--#{$prefix}grey);
70
+ --#{$prefix}accordion-border-color: var(--#{$prefix}soft-grey);
71
+ }
72
+
73
+ // Shared 'Dark' theme variables
74
+ .dark &,
75
+ .dark-alt & {
76
+ --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};
77
+ --#{$prefix}accordion-btn-active-icon: #{escape-svg(
78
+ $accordion-button-active-icon-dark
79
+ )};
80
+ --#{$prefix}accordion-color: var(--#{$prefix}white);
81
+ --#{$prefix}accordion-btn-color: var(--#{$prefix}white);
82
+ --#{$prefix}accordion-active-color: var(--#{$prefix}white);
83
+ --#{$prefix}focus: var(--#{$prefix}dark-focus);
84
+ }
85
+
86
+ // Theme specific variables
87
+ .dark & {
88
+ --#{$prefix}accordion-bg: var(--#{$prefix}brand-primary);
89
+ --#{$prefix}accordion-btn-bg: var(--#{$prefix}dark-background-shade);
90
+ --#{$prefix}accordion-border-color: var(--#{$prefix}dark-border);
91
+ }
92
+
93
+ .dark-alt & {
94
+ --#{$prefix}accordion-bg: var(--#{$prefix}dark-blue);
95
+ --#{$prefix}accordion-btn-bg: var(--#{$prefix}dark-blue-shade);
96
+ --#{$prefix}accordion-border-color: var(--#{$prefix}dark-alt-border);
97
+ }
33
98
  }
34
99
 
35
100
  .dark,
36
101
  .dark-alt {
37
- .qld-side-navigation {
38
- --sidenav-submenu-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%2309ACFE' d='M2 10h12v1H2zM2 5h1v5H2z'/%3E%3C/svg%3E");
39
-
40
- --sidenav-hover-bg: var(--#{$prefix}color-default-color-dark-background-default-shade);
41
- --sidenav-hover-color: var(--#{$prefix}white);
42
- --sidenav-hover-underline-color: var(--#{$prefix}color-default-color-dark-underline-hover);
43
- --sidenav-visited-color: var(--#{$prefix}white);
44
- --sidenav-active-color: var(--#{$prefix}color-default-color-dark-text-heading);
45
-
46
- --sidenav-heading-border-color: var(--#{$prefix}brand-secondary);
47
- --sidenav-item-border-color: var(--#{$prefix}brand-primary-light);
48
- --sidenav-subitem-border-color: var(--#{$prefix}brand-primary-light);
49
- --sidenav-active-item-color: var(--#{$prefix}white);
50
- }
102
+ .qld-side-navigation {
103
+ --sidenav-submenu-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%2309ACFE' d='M2 10h12v1H2zM2 5h1v5H2z'/%3E%3C/svg%3E");
104
+
105
+ --sidenav-hover-bg: var(
106
+ --#{$prefix}color-default-color-dark-background-default-shade
107
+ );
108
+ --sidenav-hover-color: var(--#{$prefix}white);
109
+ --sidenav-hover-underline-color: var(
110
+ --#{$prefix}color-default-color-dark-underline-hover
111
+ );
112
+ --sidenav-visited-color: var(--#{$prefix}white);
113
+ --sidenav-active-color: var(
114
+ --#{$prefix}color-default-color-dark-text-heading
115
+ );
116
+
117
+ --sidenav-heading-border-color: var(--#{$prefix}brand-secondary);
118
+ --sidenav-item-border-color: var(--#{$prefix}brand-primary-light);
119
+ --sidenav-subitem-border-color: var(--#{$prefix}brand-primary-light);
120
+ --sidenav-active-item-color: var(--#{$prefix}white);
121
+ }
51
122
  }
52
123
 
53
- @include color-mode(dark) {
54
-
55
- }
56
-
57
-
58
124
  .qld-side-navigation {
59
-
60
- .nav-title {
61
- color: var(--#{$prefix}-headings-color);
62
- line-height: 1.5;
63
- margin: 0;
64
- border-bottom: 2px solid var(--sidenav-heading-border-color);
65
-
66
- a {
67
- color: var(--#{$prefix}headings-color);
68
- text-decoration: none;
69
- font-weight: inherit;
70
- font-size: 1rem;
71
- }
72
-
73
- .nav-link {
74
- &:visited {
75
- color: var(--#{$prefix}headings-color);
76
- }
77
- }
125
+ border: var(--qld-accordion-border-width) solid
126
+ var(--qld-accordion-border-color);
127
+ background-color: var(--#{$prefix}accordion-bg);
128
+
129
+ .nav-title {
130
+ color: var(--#{$prefix}-headings-color);
131
+ line-height: 1.5;
132
+ margin: 0;
133
+ border-bottom: 2px solid var(--sidenav-heading-border-color);
134
+
135
+ a {
136
+ color: var(--#{$prefix}headings-color);
137
+ text-decoration: none;
138
+ font-weight: inherit;
139
+ font-size: 1rem;
78
140
  }
79
141
 
80
142
  .nav-link {
81
- padding: var(--sidenav-navlink-padding);
82
- font-size: 0.875rem;
83
- color: var(--body-color);
84
- text-decoration: none;
85
- transition-duration: 0s;
86
-
87
- //.nav-link Hover state
88
- &:hover {
89
- background-color: var(--sidenav-hover-bg);
90
- color: var(--sidenav-hover-color);
91
- text-decoration: underline;
92
- text-underline-offset: 0.25rem;
93
- text-decoration-thickness: 2px;
94
- }
95
- }
143
+ line-height: 1.5rem;
96
144
 
97
- a.nav-link {
98
- &:visited {
99
- color: var(--sidenav-visited-color);
100
- &:hover {
101
- color: var(--sidenav-hover-color);
102
- text-decoration-color: var(--sidenav-hover-underline-color);
103
- }
104
- }
145
+ &:visited {
146
+ color: var(--#{$prefix}headings-color);
147
+ }
148
+ }
149
+ }
150
+
151
+ .nav-link {
152
+ padding: var(--sidenav-navlink-padding);
153
+ font-size: 0.875rem;
154
+ color: var(--body-color);
155
+ text-decoration: none;
156
+ transition-duration: 0s;
157
+ line-height: 1.25rem;
158
+
159
+ //.nav-link Hover state
160
+ &:hover {
161
+ background-color: var(--sidenav-hover-bg);
162
+ color: var(--sidenav-hover-color);
163
+ text-decoration: underline;
164
+ text-underline-offset: 0.25rem;
165
+ text-decoration-thickness: 2px;
105
166
  }
106
167
 
107
- .nav-item.active {
108
- color: var(--sidenav-active-color);
168
+ &:focus-visible {
169
+ box-shadow: none;
109
170
  }
171
+ }
172
+
173
+ a.nav-link {
174
+ &:visited {
175
+ color: var(--sidenav-visited-color);
176
+ &:hover {
177
+ color: var(--sidenav-hover-color);
178
+ text-decoration-color: var(--sidenav-hover-underline-color);
179
+ }
180
+ }
181
+ }
110
182
 
111
- //Side navigation (ul.nav)
112
-
113
- ul.nav {
114
-
115
- //Side navigation all items remove all bullets
116
- //Reset all left padding
117
- ul, ol {
118
- list-style: none;
119
- padding-left: 0;
120
- }
183
+ .nav-item.active {
184
+ color: var(--sidenav-active-color);
185
+ }
121
186
 
122
- display: flex;
123
- flex-direction: column;
187
+ //Side navigation (ul.nav)
124
188
 
125
- //Specifically target the first level LI's only
126
- > li.nav-item {
189
+ ul.nav {
190
+ //Side navigation all items remove all bullets
191
+ //Reset all left padding
192
+ ul,
193
+ ol {
194
+ list-style: none;
195
+ padding-left: 0;
196
+ }
127
197
 
128
- border-top: 1px solid var(--sidenav-item-border-color);
198
+ display: flex;
199
+ flex-direction: column;
129
200
 
130
- &:first-child {
131
- border-top: none;
132
- }
201
+ //Specifically target the first level LI's only
202
+ > li.nav-item {
203
+ border-top: 1px solid var(--sidenav-item-border-color);
133
204
 
134
- }
135
-
136
- //All nav items, all levels
137
- li.nav-item {
138
-
139
- //Level two menu LI's
140
- > ul > li { border-top: 1px solid var(--sidenav-subitem-border-color) }
141
- > ul > li > .nav-link { padding-left: var( --sidenav-level-two-padding); }
142
-
143
- //Level three menu LI's
144
- > ul > li > ul > li { border-top: none }
145
- > ul > li > ul > li > .nav-link { padding-left: var( --sidenav-level-three-padding); }
146
-
147
- //li .nav-link.active
148
- &.active {
149
- .nav-link {
150
- font-weight: 600;
151
- color: var(--light-text-heading);
152
- text-decoration: none;
153
- pointer-events: none;
154
- }
155
- }
205
+ &:first-child {
206
+ border-top: none;
207
+ }
208
+ }
156
209
 
210
+ //All nav items, all levels
211
+ li.nav-item {
212
+ //Level two menu LI's
213
+ > ul > li {
214
+ border-top: 1px solid var(--sidenav-subitem-border-color);
215
+ }
216
+ > ul > li > .nav-link {
217
+ padding-left: var(--sidenav-level-two-padding);
218
+ }
219
+
220
+ //Level three menu LI's
221
+ > ul > li > ul > li {
222
+ border-top: none;
223
+ }
224
+ > ul > li > ul > li > .nav-link {
225
+ padding-left: var(--sidenav-level-three-padding);
226
+ }
227
+
228
+ //li .nav-link.active
229
+ &.active {
230
+ .nav-link {
231
+ font-weight: 600;
232
+ color: var(--light-text-heading);
233
+ text-decoration: none;
234
+ pointer-events: none;
157
235
  }
236
+ }
237
+ }
158
238
 
159
- //Add stalks to a UL menu (usually level 3)
160
- // <ul class="nav ... with-stalks">...</ul>
161
- .with-stalks {
162
-
163
- .nav-item {
164
-
165
- position: relative;
166
-
167
- &:before {
168
- content: "";
169
- position: absolute;
170
- background: escape-svg(var(--sidenav-submenu-divider));
171
- background-repeat: no-repeat;
172
- // background-position: center center;
173
- top: 1rem;
174
- left: 2rem;
175
- bottom: 0;
176
- width: 1rem;
177
- }
178
- }
239
+ //Add stalks to a UL menu (usually level 3)
240
+ // <ul class="nav ... with-stalks">...</ul>
241
+ .with-stalks {
242
+ .nav-item {
243
+ position: relative;
244
+
245
+ &:before {
246
+ content: "";
247
+ position: absolute;
248
+ background: escape-svg(var(--sidenav-submenu-divider));
249
+ background-repeat: no-repeat;
250
+ // background-position: center center;
251
+ top: 1rem;
252
+ left: 2rem;
253
+ bottom: 0;
254
+ width: 1rem;
179
255
  }
180
-
256
+ }
181
257
  }
182
-
258
+ }
259
+ .nav-wrapper {
260
+ padding: 0.5rem 1rem;
261
+ }
262
+ @include media-breakpoint-up(lg) {
263
+ border: none;
264
+
265
+ .nav-wrapper {
266
+ padding: 0;
267
+ }
268
+ }
183
269
  }
184
-
@@ -1,5 +1,3 @@
1
- import { isFocusable } from "../../../js/utils";
2
-
3
1
  /**
4
2
  * Checks whether target elements in a list of skip links are valid - ie they can receive focus.
5
3
  * @returns {boolean} Return true if skip links are valid, false if there is a problem.
@@ -17,13 +15,6 @@ export function validateSkipLinks() {
17
15
  );
18
16
  return false;
19
17
  }
20
- // check if target is focusable
21
- if (!isFocusable(target)) {
22
- console.error(
23
- `A skip link with label "${item.textContent}" is targeting a non-focusable element with id "${targetId}". Make sure the element is natively focusable, or assign a tab index of -1.`,
24
- );
25
- return false;
26
- }
27
18
  return true;
28
19
  });
29
20
  }
@@ -72,7 +72,6 @@ describe("Skip Links", () => {
72
72
 
73
73
  expect(resolvedMessages).toEqual([
74
74
  'A skip link with label "Skip to nowhere" is targeting a non-existent element with id "i-dont-exist".',
75
- 'A skip link with label "Skip to unfocusable" is targeting a non-focusable element with id "unfocusable". Make sure the element is natively focusable, or assign a tab index of -1.',
76
75
  ]);
77
76
 
78
77
  // JSDOM does not implement navigation so must manual test for main functionality
@@ -19,4 +19,9 @@
19
19
  max-width: var(--qld-container-max-width);
20
20
  padding-left: var(--qld-container-padding-x);
21
21
  padding-right: var(--qld-container-padding-x);
22
+
23
+ &.is-extended {
24
+ // Maximum width for extended containers, 100rem (or 1600px)
25
+ --qld-container-max-width: 100rem;
26
+ }
22
27
  }
@@ -1,13 +1,21 @@
1
- .qld-content-body {
2
- .emphasis {
3
- margin: 4rem -2rem;
1
+ .content-emphasis {
2
+ // Negative margin on the emphasis section. Capped to outer container padding,
3
+ // to prevent overflow and horizontal scrollbar
4
+ --margin-offset: max(-2rem, calc(var(--qld-container-padding-x) * -1));
5
+
6
+ margin-left: var(--margin-offset);
7
+ margin-right: var(--margin-offset);
8
+
9
+ padding: 2.5rem var(--qld-container-padding-x);
10
+
11
+ @include media-breakpoint-up(lg) {
4
12
  padding: 4rem 2rem;
5
13
  overflow: visible;
14
+ }
6
15
 
7
- & p:last-child,
8
- & ul:last-child,
9
- & ol:last-child {
10
- margin-bottom: 0;
11
- }
16
+ & p:last-child,
17
+ & ul:last-child,
18
+ & ol:last-child {
19
+ margin-bottom: 0;
12
20
  }
13
21
  }
package/src/css/main.scss CHANGED
@@ -19,11 +19,6 @@ $font-family-sans-serif:
19
19
  "Noto Color Emoji" !default;
20
20
  $font-family-sitename: "Fira Sans";
21
21
 
22
- //Icons
23
- @import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.css");
24
- //TODO: should we pull from ../../node_modules/@fortawesome/fontawesome-free/css/all.css instead of cdn
25
- @import "../../node_modules/@fortawesome/fontawesome-free/scss/fontawesome.scss";
26
-
27
22
  //Prefix to namespace design-system classes
28
23
  $prefix: "qld-";
29
24
  $enable-cssgrid: true;
@@ -39,8 +34,6 @@ $enable-dark-mode: true;
39
34
  @import "./qld-variables";
40
35
  @import "variables";
41
36
 
42
- // @import "./scss/qld-variables-dark"; //future state
43
-
44
37
  // 3. Include remainder of bootstrap
45
38
  // 3.1 Required
46
39
  @import "../../node_modules/bootstrap/scss/maps";
@@ -55,6 +55,7 @@
55
55
  // Light theme
56
56
  .light {
57
57
  @include light-theme-properties;
58
+ --qld-body-bg: var(--qld-light-background);
58
59
  --qld-border-color: var(--#{$prefix}color-default-color-light-border-light);
59
60
  }
60
61
 
@@ -1 +1,2 @@
1
1
  @import "responsive-visually-hidden";
2
+ @import "sr-only";
@@ -0,0 +1,5 @@
1
+ ///
2
+ /// Screen reader only utility - hides content visually while keeping it accessible to screen readers
3
+ .sr-only {
4
+ @include visually-hidden();
5
+ }
@@ -9,10 +9,7 @@ import {
9
9
  } from "./../components/bs5/video/video.functions";
10
10
  import { initializeNavbar } from "./../components/bs5/navbar/navbar.functions";
11
11
  import { initBreadcrumb } from "./../components/bs5/breadcrumbs/breadcrumbs.functions";
12
- import {
13
- positionQuickExit,
14
- initQuickexit,
15
- } from "./../components/bs5/quickexit/quickexit.functions";
12
+ import { initQuickexit } from "./../components/bs5/quickexit/quickexit.functions";
16
13
  //import { displayFeedbackForm } from "./../components/bs5/footer/footer.functions";
17
14
  import { toggleSearch } from "./../components/bs5/header/header.functions";
18
15
  import {
@@ -24,8 +21,6 @@ import { initTabsScroll } from "./../components/bs5/tabs/tabs.functions";
24
21
  import { initGlobalAlerts } from "./../components/bs5/globalAlert/globalAlert.function";
25
22
  import { validateSkipLinks } from "./../components/bs5/skiplinks/skipLinks.functions";
26
23
 
27
- window.addEventListener("scroll", positionQuickExit, true);
28
- window.addEventListener("resize", positionQuickExit, true);
29
24
  window.addEventListener("click", initQuickexit, true);
30
25
  window.addEventListener("keydown", initQuickexit, true);
31
26
 
@@ -151,12 +146,9 @@ window.addEventListener("DOMContentLoaded", () => {
151
146
  initBreadcrumb();
152
147
 
153
148
  // Quick exit
154
- window.addEventListener("scroll", positionQuickExit, true);
155
- window.addEventListener("resize", positionQuickExit, true);
156
149
  window.addEventListener("click", initQuickexit, true);
157
150
  window.addEventListener("keydown", initQuickexit, true);
158
151
  initQuickexit();
159
- positionQuickExit();
160
152
 
161
153
  // Accordion
162
154
  let accordionToggleButton = document.querySelectorAll(
@@ -0,0 +1,63 @@
1
+ import React, { useEffect } from "react";
2
+
3
+ /**
4
+ * StorybookDocsTabs component renders a tabbed interface for displaying documentation sections.
5
+ *
6
+ * @param {Array} props.tabs - Array of tab objects, each containing id, label, and content to display in the tabbed interface.
7
+ * @returns {JSX.Element} Tabbed documentation interface.
8
+ */
9
+ export const StorybookDocsTabs = ({ tabs }) => {
10
+ useEffect(() => {
11
+ // This code will run once the component has mounted
12
+ initTabs();
13
+ }, []);
14
+
15
+ function initTabs() {
16
+ let tabButtons = document.querySelectorAll(".tablinks");
17
+ tabButtons.forEach(function (tabButton) {
18
+ tabButton.addEventListener("click", openTab);
19
+ });
20
+ }
21
+
22
+ function openTab(evt) {
23
+ const targetId = evt.currentTarget.dataset.targetid;
24
+
25
+ ["tabcontent", "tablinks"].forEach((cls) =>
26
+ document
27
+ .querySelectorAll(`.${cls}`)
28
+ .forEach((el) => el.classList.remove("active")),
29
+ );
30
+
31
+ if (targetId) {
32
+ document.getElementById(targetId)?.classList.add("active");
33
+ evt.currentTarget.classList.add("active");
34
+ }
35
+ }
36
+ return (
37
+ <>
38
+ <ul className="qld-sb-docs-tab sb-unstyled">
39
+ {tabs &&
40
+ tabs.map((tab, index) => (
41
+ <li key={`tab-${index}`}>
42
+ <button
43
+ className={`tablinks ${index === 0 ? "active" : ""}`}
44
+ data-targetid={tab.id}
45
+ >
46
+ {tab.label}
47
+ </button>
48
+ </li>
49
+ ))}
50
+ </ul>
51
+ {tabs?.map((tab, index) => (
52
+ <div
53
+ id={tab.id}
54
+ key={`tab-content-${index}`}
55
+ className={`tabcontent ${index === 0 ? "active" : ""}`}
56
+ >
57
+ {tab.heading && <h3>{tab.heading}</h3>}
58
+ {tab.content}
59
+ </div>
60
+ ))}
61
+ </>
62
+ );
63
+ };