@qld-gov-au/qgds-bootstrap5 2.1.7 → 2.1.8

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 (29) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/dist/assets/components/bs5/head/head.hbs +1 -1
  3. package/dist/assets/components/bs5/navbar/navbar.hbs +1 -1
  4. package/dist/assets/css/qld.bootstrap.css +2 -2
  5. package/dist/assets/css/qld.bootstrap.css.map +3 -3
  6. package/dist/assets/css/qld.bootstrap.legacy.css +2 -2
  7. package/dist/assets/css/qld.bootstrap.legacy.css.map +3 -3
  8. package/dist/assets/js/handlebars.helpers.bundle.js +1 -1
  9. package/dist/assets/js/handlebars.init.min.js +3 -3
  10. package/dist/assets/js/handlebars.init.min.js.map +1 -1
  11. package/dist/assets/js/handlebars.partials.js +3 -3
  12. package/dist/assets/js/handlebars.partials.js.map +1 -1
  13. package/dist/assets/js/qld.bootstrap.min.js +6 -6
  14. package/dist/assets/js/qld.bootstrap.min.js.map +3 -3
  15. package/dist/assets/node/handlebars.init.min.js +2 -2
  16. package/dist/assets/node/handlebars.init.min.js.map +1 -1
  17. package/dist/components/bs5/head/head.hbs +1 -1
  18. package/dist/components/bs5/navbar/navbar.hbs +1 -1
  19. package/dist/package.json +1 -1
  20. package/dist/sample-data/navbar/navbar.data.json +1 -0
  21. package/package.json +1 -1
  22. package/src/components/bs5/banner/banner.scss +11 -0
  23. package/src/components/bs5/footer/footer.scss +11 -4
  24. package/src/components/bs5/linkColumns/linkColumns.scss +27 -13
  25. package/src/components/bs5/navbar/navbar.data.json +1 -0
  26. package/src/components/bs5/navbar/navbar.functions.js +43 -13
  27. package/src/components/bs5/navbar/navbar.hbs +1 -1
  28. package/src/js/qld.bootstrap.js +5 -0
  29. package/src/js/utils.js +15 -0
@@ -1,5 +1,5 @@
1
1
 
2
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.7","branch":"HEAD","tag":"v2.1.7","commit":"a2b829ca974b07e6d76408477d21b5ee3d41aa8b","majorVersion":"v2"} -->
2
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.8","branch":"HEAD","tag":"v2.1.8","commit":"725614dd2b3f362a82c568aaf0dd15676b17b6af","majorVersion":"v2"} -->
3
3
 
4
4
  {{! Select environment, used verbatium if not using predefind key
5
5
  cdn := PROD|STAGING|BETA|TEST|DEV|???
@@ -12,7 +12,7 @@
12
12
  <ul class="navbar-nav">
13
13
  {{#each navigation}}
14
14
  {{#if navigationItems}}
15
- <li class="nav-item dropdown{{#if alternativeColor}} alt{{/if}}{{#if mobileOnly}} mobile-only{{/if}}">
15
+ <li class="nav-item dropdown{{#if alternativeColor}} alt{{/if}}{{#if mobileOnly}} mobile-only{{/if}}"{{#if isExpandedOnMobile}} data-is-expanded-on-mobile="true"{{/if}}>
16
16
  <a class="nav-link{{#unless ../metadata.verticalOrientation}} dropdown-toggle{{/unless}}{{#if currentPage}} active{{/if}}{{#if dropdownOptions.hasNoLink}} hasNoLink{{/if}}" {{#if currentPage}}aria-current="page"{{/if}}{{#if dropdownOptions.hasNoLink}} href="#"{{else}} href="{{url}}"{{/if}}{{#if target}} target="{{target}}"{{/if}}{{#ifCond target '==' '_blank'}} rel="noopener noreferrer"{{/ifCond}} role="button" data-bs-toggle="dropdown"
17
17
  aria-expanded="false">
18
18
  {{#if iconName}}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qld-gov-au/qgds-bootstrap5",
3
- "version": "2.1.7",
3
+ "version": "2.1.8",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,6 +24,7 @@
24
24
  "currentPage": false,
25
25
  "hideLabel": false,
26
26
  "target": "_blank",
27
+ "isExpandedOnMobile": true,
27
28
  "dropdownOptions": {
28
29
  "hasNoLink": false,
29
30
  "alternativeText": "",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qld-gov-au/qgds-bootstrap5",
3
- "version": "2.1.7",
3
+ "version": "2.1.8",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -222,6 +222,17 @@
222
222
  grid-row: 1 / span 2; // Spans rows 1 and 2
223
223
  }
224
224
  }
225
+
226
+ &.is-full-width:not(:has(.banner-image)) {
227
+ @include media-breakpoint-down(lg) {
228
+ .banner-content {
229
+ grid-column: 1 / -1;
230
+ .banner-abstract {
231
+ max-width: none;
232
+ }
233
+ }
234
+ }
235
+ }
225
236
  }
226
237
  }
227
238
 
@@ -134,10 +134,9 @@
134
134
  a.nav-link {
135
135
  --qld-link-color: var(--#{$prefix}footer-color-link);
136
136
  text-decoration: underline;
137
- text-decoration-color: var(--#{$prefix}footer-color-link);
137
+ text-decoration-color: var(--#{$prefix}link-underline);
138
138
  text-decoration-thickness: var(--#{$prefix}link-underline-thickness);
139
- text-underline-offset: auto;
140
- text-underline-position: from-font;
139
+ text-underline-offset: var(--#{$prefix}link-underline-offset);
141
140
  color: var(--qld-link-color);
142
141
  padding-left: 0;
143
142
 
@@ -145,13 +144,21 @@
145
144
  text-decoration-thickness: var(
146
145
  --#{$prefix}link-underline-thickness-hover
147
146
  );
147
+ text-decoration-color: var(--#{$prefix}link-underline-hover);
148
148
  }
149
149
 
150
150
  &:visited {
151
151
  color: var(--#{$prefix}footer-color-link);
152
152
  text-decoration: underline;
153
- text-decoration-color: var(--#{$prefix}footer-color-link);
153
+ text-decoration-color: var(--#{$prefix}link-underline);
154
154
  text-decoration-thickness: var(--#{$prefix}link-underline-thickness);
155
+
156
+ &:hover {
157
+ text-decoration-color: var(--#{$prefix}link-underline-hover);
158
+ text-decoration-thickness: var(
159
+ --#{$prefix}link-underline-thickness-hover
160
+ );
161
+ }
155
162
  }
156
163
  }
157
164
 
@@ -3,7 +3,7 @@
3
3
  --color-border: var(--#{$prefix}neutral-lighter);
4
4
 
5
5
  background-color: var(--#{$prefix}body-bg);
6
-
6
+
7
7
  &.light {
8
8
  --color-border: var(--#{$prefix}light-border);
9
9
  }
@@ -22,7 +22,7 @@
22
22
  max-width: var(--max-column-width);
23
23
  }
24
24
  ul {
25
- width: 100%;
25
+ // width: 100%;
26
26
  display: grid;
27
27
  gap: 0 1rem;
28
28
  }
@@ -31,17 +31,17 @@
31
31
  }
32
32
  .col-2 {
33
33
  grid-template-columns: repeat(2, 1fr);
34
- @include media-breakpoint-down(md) {
34
+ @include media-breakpoint-down(md) {
35
35
  grid-template-columns: repeat(1, 1fr);
36
36
  }
37
37
  }
38
38
  .col-3 {
39
39
  grid-template-columns: repeat(3, 1fr);
40
40
  @include media-breakpoint-down(lg) {
41
- grid-template-columns: repeat(2, 1fr);
41
+ grid-template-columns: repeat(2, 1fr);
42
42
  }
43
43
  @include media-breakpoint-down(md) {
44
- grid-template-columns: repeat(1, 1fr);
44
+ grid-template-columns: repeat(1, 1fr);
45
45
  }
46
46
  }
47
47
  .col-vert-1 {
@@ -64,9 +64,9 @@
64
64
  column-count: 3;
65
65
  column-gap: 2rem;
66
66
  @include media-breakpoint-down(lg) {
67
- column-count: 2;
68
- column-gap: 1.5rem;
69
- }
67
+ column-count: 2;
68
+ column-gap: 1.5rem;
69
+ }
70
70
  @include media-breakpoint-down(md) {
71
71
  column-count: 1;
72
72
  }
@@ -82,11 +82,19 @@
82
82
  margin-block: 0;
83
83
  //Reset the line height too to override styles from .qld-content-body li
84
84
  line-height: 1.5rem;
85
+
86
+ // This prevents LI's from breaking across columns
87
+ // Legacy support for older WebKit browsers (=< chrome 104)
88
+ break-inside: avoid-column;
89
+ -webkit-column-break-inside: avoid;
90
+
85
91
  .nav-link {
86
92
  text-decoration: underline;
87
93
  text-decoration-color: transparent;
88
94
  text-decoration-thickness: 0;
89
- transition: text-decoration-thickness 0.2s ease, text-decoration-color 0.2s ease;
95
+ transition:
96
+ text-decoration-thickness 0.2s ease,
97
+ text-decoration-color 0.2s ease;
90
98
  display: flex;
91
99
  align-items: center;
92
100
  flex: 1;
@@ -105,22 +113,28 @@
105
113
  mask-repeat: no-repeat;
106
114
  mask-position: right center;
107
115
  background-color: var(--#{$prefix}action-icon-color);
108
- transition: margin-inline-end 0.2s ease, width 0.2s ease;
116
+ transition:
117
+ margin-inline-end 0.2s ease,
118
+ width 0.2s ease;
109
119
  }
110
120
  &:hover {
111
121
  text-decoration-color: var(--#{$prefix}link-color);
112
122
  text-decoration-thickness: 2px;
113
- transition: text-decoration-thickness 0.2s ease, text-decoration-color 0.2s ease;
123
+ transition:
124
+ text-decoration-thickness 0.2s ease,
125
+ text-decoration-color 0.2s ease;
114
126
  &::after {
115
127
  background-color: var(--#{$prefix}action-icon-hover-color);
116
128
  margin-inline-end: 0rem;
117
129
  width: 2.5rem;
118
- transition: margin-inline-end 0.2s ease, width 0.2s ease;
130
+ transition:
131
+ margin-inline-end 0.2s ease,
132
+ width 0.2s ease;
119
133
  }
120
134
  }
121
135
  }
122
136
  }
123
- .all-link{
137
+ .all-link {
124
138
  grid-column: 1/-1;
125
139
  max-width: 100%;
126
140
  border-block-end: none;
@@ -24,6 +24,7 @@
24
24
  "currentPage": false,
25
25
  "hideLabel": false,
26
26
  "target": "_blank",
27
+ "isExpandedOnMobile": true,
27
28
  "dropdownOptions": {
28
29
  "hasNoLink": false,
29
30
  "alternativeText": "",
@@ -1,6 +1,5 @@
1
1
  import { createFocusTrap } from "../../../js/utils.js";
2
2
  import { breakpoints } from "../../../js/constants.js";
3
- import { getFocusableElements } from "../../../js/utils.js";
4
3
 
5
4
  const getIsMobile = () => window.innerWidth < breakpoints.lg;
6
5
 
@@ -9,6 +8,7 @@ export function initializeNavbar() {
9
8
  const overlay = document.getElementById("overlay");
10
9
  const burgerBtn = document.getElementById("burgerBtn");
11
10
  const burgerCloseBtn = document.getElementById("burgerCloseBtn");
11
+ let wasMobile = getIsMobile();
12
12
 
13
13
  /** @type {HTMLElement[]} */
14
14
  let inertTargets = [];
@@ -94,35 +94,55 @@ export function initializeNavbar() {
94
94
  closeNavbar();
95
95
  });
96
96
 
97
- const resetNavbarState = () => {
98
- const isMobile = getIsMobile();
97
+ const resetNavbarState = (isMobile) => {
99
98
  const dropdownToggles = navbar?.querySelectorAll(
100
99
  "a.dropdown-toggle, a.no-dropdown-toggle",
101
100
  );
102
101
 
103
- // Toggle dropdown functionality based on screen size
104
- dropdownToggles?.forEach((toggle) => {
105
- if (isMobile) {
102
+ if (isMobile) {
103
+ // disable navlinks as toggles
104
+ dropdownToggles?.forEach((toggle) => {
106
105
  // Skip toggle items with hasNoLink class
107
106
  if (toggle.classList.contains("hasNoLink")) {
108
107
  return;
109
108
  }
110
109
  toggle.classList.replace("dropdown-toggle", "no-dropdown-toggle");
111
110
  toggle.removeAttribute("data-bs-toggle");
112
- } else {
111
+ });
112
+
113
+ // Expand any dropdowns set to expand on mobile
114
+ navbar
115
+ ?.querySelectorAll('[data-is-expanded-on-mobile="true"]')
116
+ .forEach((item) => {
117
+ item
118
+ .querySelectorAll(".dropdown-toggle, .dropdown-menu")
119
+ .forEach((item) => {
120
+ item.classList.add("show");
121
+ });
122
+ });
123
+ } else {
124
+ // reenable navlinks as toggle
125
+ dropdownToggles?.forEach((toggle) => {
113
126
  toggle.classList.replace("no-dropdown-toggle", "dropdown-toggle");
114
127
  toggle.setAttribute("data-bs-toggle", "dropdown");
115
- }
116
- });
128
+ });
117
129
 
118
- if (!isMobile) {
130
+ // Collapse any dropdowns set to expand on mobile
131
+ navbar
132
+ ?.querySelectorAll('[data-is-expanded-on-mobile="true"]')
133
+ .forEach((item) => {
134
+ item
135
+ .querySelectorAll(".dropdown-toggle, .dropdown-menu")
136
+ .forEach((item) => {
137
+ item.classList.remove("show");
138
+ });
139
+ });
140
+
141
+ // close the navbar
119
142
  closeNavbar();
120
143
  }
121
144
  };
122
145
 
123
- window.addEventListener("resize", resetNavbarState);
124
- resetNavbarState();
125
-
126
146
  //All associated side effects of navbar collapse beginning belong here
127
147
  navbar?.addEventListener("hide.bs.collapse", () => {
128
148
  overlay?.classList.remove("show");
@@ -160,4 +180,14 @@ export function initializeNavbar() {
160
180
  }, 0);
161
181
  }
162
182
  });
183
+
184
+ window.addEventListener("resize", () => {
185
+ const isMobile = getIsMobile();
186
+ if (wasMobile !== isMobile) {
187
+ wasMobile = isMobile;
188
+ resetNavbarState(isMobile);
189
+ }
190
+ });
191
+
192
+ resetNavbarState(wasMobile);
163
193
  }
@@ -12,7 +12,7 @@
12
12
  <ul class="navbar-nav">
13
13
  {{#each navigation}}
14
14
  {{#if navigationItems}}
15
- <li class="nav-item dropdown{{#if alternativeColor}} alt{{/if}}{{#if mobileOnly}} mobile-only{{/if}}">
15
+ <li class="nav-item dropdown{{#if alternativeColor}} alt{{/if}}{{#if mobileOnly}} mobile-only{{/if}}"{{#if isExpandedOnMobile}} data-is-expanded-on-mobile="true"{{/if}}>
16
16
  <a class="nav-link{{#unless ../metadata.verticalOrientation}} dropdown-toggle{{/unless}}{{#if currentPage}} active{{/if}}{{#if dropdownOptions.hasNoLink}} hasNoLink{{/if}}" {{#if currentPage}}aria-current="page"{{/if}}{{#if dropdownOptions.hasNoLink}} href="#"{{else}} href="{{url}}"{{/if}}{{#if target}} target="{{target}}"{{/if}}{{#ifCond target '==' '_blank'}} rel="noopener noreferrer"{{/ifCond}} role="button" data-bs-toggle="dropdown"
17
17
  aria-expanded="false">
18
18
  {{#if iconName}}
@@ -21,6 +21,7 @@ import { backToTop } from "./../components/bs5/backToTop/backToTop.functions";
21
21
  import { initTabsScroll } from "./../components/bs5/tabs/tabs.functions";
22
22
  import { initGlobalAlerts } from "./../components/bs5/globalAlert/globalAlert.function";
23
23
  import { validateSkipLinks } from "./../components/bs5/skiplinks/skipLinks.functions";
24
+ import { printPage } from "./utils";
24
25
 
25
26
  window.addEventListener("click", initQuickexit, true);
26
27
  window.addEventListener("keydown", initQuickexit, true);
@@ -137,6 +138,10 @@ window.addEventListener("DOMContentLoaded", () => {
137
138
  transcript.addEventListener("click", videoTranscriptTitle);
138
139
  });
139
140
 
141
+ // Add btn page print functions
142
+ printPage();
143
+
144
+ // Date Input
140
145
  initDateInput();
141
146
 
142
147
  // Skip Links
package/src/js/utils.js CHANGED
@@ -191,3 +191,18 @@ export function createFocusTrap(container, options = {}) {
191
191
  },
192
192
  };
193
193
  }
194
+
195
+ /**
196
+ * Print page function
197
+ * Attaches event listener to elements with class 'js-print' to trigger window.print()
198
+ */
199
+ export function printPage() {
200
+ // Add btn page print functions
201
+ let printButton = document.querySelector(".js-print");
202
+ if (printButton) {
203
+ printButton.addEventListener("click", function (event) {
204
+ event.preventDefault();
205
+ window.print();
206
+ });
207
+ }
208
+ }