@openeuropa/bcl-theme-default 0.4298.202511051800 → 0.4360.202601141610
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.
- package/css/oe-bcl-ckeditor5.min.css +1 -1
- package/css/oe-bcl-ckeditor5.min.css.map +1 -1
- package/css/oe-bcl-default.css +167 -85
- package/css/oe-bcl-default.css.map +1 -1
- package/css/oe-bcl-default.min.css +1 -1
- package/css/oe-bcl-default.min.css.map +1 -1
- package/js/oe-bcl-default.bundle.js +112 -1
- package/js/oe-bcl-default.bundle.js.map +1 -1
- package/js/oe-bcl-default.bundle.min.js +1 -1
- package/js/oe-bcl-default.bundle.min.js.map +1 -1
- package/js/oe-bcl-default.esm.js +111 -1
- package/js/oe-bcl-default.esm.js.map +1 -1
- package/js/oe-bcl-default.esm.min.js +1 -1
- package/js/oe-bcl-default.esm.min.js.map +1 -1
- package/js/oe-bcl-default.umd.js +112 -1
- package/js/oe-bcl-default.umd.js.map +1 -1
- package/js/oe-bcl-default.umd.min.js +1 -1
- package/js/oe-bcl-default.umd.min.js.map +1 -1
- package/package.json +5 -5
- package/src/js/header/header.js +91 -0
- package/src/js/index.esm.js +2 -0
- package/src/js/index.umd.js +2 -0
- package/src/js/mega-menu/mega-menu.js +57 -0
- package/src/scss/_header.scss +6 -2
- package/src/scss/_input.scss +72 -31
- package/src/scss/_mega-menu.scss +57 -58
- package/src/scss/_multiselect-2.scss +21 -11
- package/src/scss/_pagination.scss +1 -0
- package/src/scss/_search-form.scss +4 -0
- package/src/scss/base/_colors.scss +1 -0
- package/src/scss/base/_mixins.scss +12 -0
- package/templates/bcl-accordion/accordion.html.twig +42 -46
- package/templates/bcl-alert/alert.html.twig +18 -21
- package/templates/bcl-badge/badge.html.twig +11 -15
- package/templates/bcl-banner/banner.html.twig +34 -37
- package/templates/bcl-base-templates/content-type.html.twig +63 -67
- package/templates/bcl-base-templates/listing-page.html.twig +31 -31
- package/templates/bcl-base-templates/sidebar-search.html.twig +10 -10
- package/templates/bcl-blockquote/blockquote.html.twig +17 -20
- package/templates/bcl-breadcrumb/breadcrumb.html.twig +24 -28
- package/templates/bcl-button/button.html.twig +24 -27
- package/templates/bcl-button-group/button-group.html.twig +25 -29
- package/templates/bcl-card/card.html.twig +98 -101
- package/templates/bcl-card-layout/card-layout.html.twig +34 -37
- package/templates/bcl-carousel/carousel.html.twig +64 -67
- package/templates/bcl-contact-form/contact-form.html.twig +1 -1
- package/templates/bcl-content-banner/content-banner.html.twig +37 -40
- package/templates/bcl-date-block/date-block.html.twig +26 -29
- package/templates/bcl-description-list/description-list-details.html.twig +6 -9
- package/templates/bcl-description-list/description-list-title.html.twig +11 -14
- package/templates/bcl-description-list/description-list.html.twig +44 -48
- package/templates/bcl-dropdown/dropdown.html.twig +48 -52
- package/templates/bcl-event/event.html.twig +7 -7
- package/templates/bcl-fact-figures/fact-figures.html.twig +34 -37
- package/templates/bcl-featured-media/featured-media.html.twig +42 -46
- package/templates/bcl-file/file-translations.html.twig +29 -32
- package/templates/bcl-file/file.html.twig +47 -50
- package/templates/bcl-footer/footer.html.twig +31 -34
- package/templates/bcl-form/form.html.twig +70 -73
- package/templates/bcl-form-input/form-input.html.twig +57 -61
- package/templates/bcl-gallery/gallery-item.html.twig +20 -23
- package/templates/bcl-gallery/gallery.html.twig +62 -66
- package/templates/bcl-glossary/glossary-detail.html.twig +19 -19
- package/templates/bcl-glossary/glossary-listing.html.twig +6 -6
- package/templates/bcl-group/group-landing.html.twig +69 -69
- package/templates/bcl-group/group.html.twig +19 -19
- package/templates/bcl-header/header.html.twig +71 -82
- package/templates/bcl-heading/heading.html.twig +13 -17
- package/templates/bcl-icon/icon.html.twig +10 -13
- package/templates/bcl-inpage-navigation/inpage-navigation.html.twig +20 -23
- package/templates/bcl-landing-page/landing-page.html.twig +33 -33
- package/templates/bcl-language-list/language-list-grid.html.twig +25 -28
- package/templates/bcl-language-list/language-list-modal.html.twig +52 -52
- package/templates/bcl-language-list/language-list.html.twig +33 -37
- package/templates/bcl-language-switcher/language-switcher.html.twig +12 -15
- package/templates/bcl-link/link.html.twig +24 -27
- package/templates/bcl-links-block/links-block.html.twig +30 -34
- package/templates/bcl-list-group/list-group.html.twig +43 -47
- package/templates/bcl-listing/listing.html.twig +88 -91
- package/templates/bcl-mega-menu/mega-menu-items.html.twig +18 -21
- package/templates/bcl-mega-menu/mega-menu-submenu.html.twig +28 -26
- package/templates/bcl-mega-menu/mega-menu.html.twig +37 -38
- package/templates/bcl-modal/modal.html.twig +21 -23
- package/templates/bcl-navbar/navbar.html.twig +35 -38
- package/templates/bcl-navigation/navigation.html.twig +105 -110
- package/templates/bcl-offcanvas/offcanvas.html.twig +33 -36
- package/templates/bcl-page/page.html.twig +27 -27
- package/templates/bcl-pagination/pagination-item.html.twig +22 -26
- package/templates/bcl-pagination/pagination.html.twig +59 -62
- package/templates/bcl-pagination-v2/pagination-item.html.twig +31 -35
- package/templates/bcl-pagination-v2/pagination.html.twig +79 -82
- package/templates/bcl-person/person.html.twig +12 -12
- package/templates/bcl-placeholder/placeholder.html.twig +14 -18
- package/templates/bcl-progress/progress.html.twig +16 -20
- package/templates/bcl-project/project-lists.html.twig +25 -29
- package/templates/bcl-project/project.html.twig +35 -35
- package/templates/bcl-project-status/project-contributions.html.twig +25 -28
- package/templates/bcl-project-status/project-status.html.twig +32 -37
- package/templates/bcl-recent-activities/recent-activities.html.twig +13 -16
- package/templates/bcl-search/search.html.twig +12 -12
- package/templates/bcl-search-form/search-form.html.twig +21 -24
- package/templates/bcl-select/select.html.twig +52 -56
- package/templates/bcl-spinner/spinner.html.twig +10 -13
- package/templates/bcl-subscription/subscription-modal.html.twig +7 -7
- package/templates/bcl-subscription/subscription.html.twig +3 -3
- package/templates/bcl-subscription-block/subscription-block.html.twig +14 -17
- package/templates/bcl-table/table.html.twig +61 -65
- package/templates/bcl-textarea/textarea.html.twig +44 -47
- package/templates/bcl-timeline/timeline-item.html.twig +12 -15
- package/templates/bcl-timeline/timeline.html.twig +42 -45
- package/templates/bcl-toasts/toasts.html.twig +56 -60
- package/templates/bcl-user/user-compact.html.twig +24 -27
- package/templates/bcl-user/user-terms.html.twig +6 -6
- package/templates/bcl-user/user.html.twig +117 -117
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@openeuropa/bcl-theme-default",
|
|
3
3
|
"author": "European Commission",
|
|
4
4
|
"license": "EUPL-1.2",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.4360.202601141610",
|
|
6
6
|
"description": "OE - BCL theme default",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"align-templates": "lerna --scope \"@openeuropa/bcl-twig-templates\" run prepublish",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"@ecl/resources-ec-logo": "3.7.1",
|
|
23
23
|
"@ecl/resources-eu-logo": "3.7.1",
|
|
24
24
|
"@ecl/resources-flag-icons": "3.7.1",
|
|
25
|
-
"@openeuropa/bcl-bootstrap": "^0.
|
|
26
|
-
"@openeuropa/bcl-builder": "^0.
|
|
27
|
-
"@openeuropa/bcl-twig-templates": "^0.
|
|
25
|
+
"@openeuropa/bcl-bootstrap": "^0.4360.202601141610",
|
|
26
|
+
"@openeuropa/bcl-builder": "^0.4360.202601141610",
|
|
27
|
+
"@openeuropa/bcl-twig-templates": "^0.4360.202601141610",
|
|
28
28
|
"@rollup/plugin-replace": "6.0.2",
|
|
29
29
|
"copyfiles": "2.4.1",
|
|
30
30
|
"cross-env": "10.1.0",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"design-system",
|
|
52
52
|
"twig"
|
|
53
53
|
],
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "2caf9255f88587416f6e83e572a1f20e4cf206f5"
|
|
55
55
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import EventHandler from "@openeuropa/bcl-bootstrap/js/src/dom/event-handler";
|
|
2
|
+
import SelectorEngine from "@openeuropa/bcl-bootstrap/js/src/dom/selector-engine";
|
|
3
|
+
|
|
4
|
+
const HEADER_SELECTOR = ".bcl-header";
|
|
5
|
+
const TOGGLER_SELECTOR = ".bcl-navbar-toggler";
|
|
6
|
+
const OFFSET_VARIABLE = "--oel-mega-menu-offset-top";
|
|
7
|
+
|
|
8
|
+
class Header {
|
|
9
|
+
scheduleUpdate = () => {
|
|
10
|
+
if (this.frameRequest) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
this.frameRequest = window.requestAnimationFrame(() => {
|
|
15
|
+
this.frameRequest = null;
|
|
16
|
+
this.updateOffset();
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
constructor(element) {
|
|
21
|
+
this.element = element;
|
|
22
|
+
this.frameRequest = null;
|
|
23
|
+
this.resizeObserver = null;
|
|
24
|
+
|
|
25
|
+
this.init();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
init() {
|
|
29
|
+
this.updateOffset();
|
|
30
|
+
|
|
31
|
+
EventHandler.on(window, "resize", this.scheduleUpdate);
|
|
32
|
+
EventHandler.on(window, "orientationchange", this.scheduleUpdate);
|
|
33
|
+
|
|
34
|
+
const togglers = SelectorEngine.find(TOGGLER_SELECTOR, this.element);
|
|
35
|
+
togglers.forEach((toggler) => {
|
|
36
|
+
// Some layouts move the header when the nav toggler expands; keep offset in sync.
|
|
37
|
+
EventHandler.on(toggler, "click", this.scheduleUpdate);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
updateOffset() {
|
|
42
|
+
if (!this.element) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const rect = this.element.getBoundingClientRect();
|
|
47
|
+
const offset = Math.max(0, rect.top);
|
|
48
|
+
const value = `${offset}px`;
|
|
49
|
+
|
|
50
|
+
if (this.element.style.getPropertyValue(OFFSET_VARIABLE) === value) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this.element.style.setProperty(OFFSET_VARIABLE, value);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static init(root) {
|
|
58
|
+
if (typeof document === "undefined" || typeof window === "undefined") {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const resolvedRoot = root || document;
|
|
63
|
+
const context =
|
|
64
|
+
resolvedRoot instanceof Element
|
|
65
|
+
? resolvedRoot
|
|
66
|
+
: resolvedRoot.documentElement || document.documentElement;
|
|
67
|
+
|
|
68
|
+
const headers = SelectorEngine.find(HEADER_SELECTOR, context);
|
|
69
|
+
|
|
70
|
+
headers.forEach((headerElement) => {
|
|
71
|
+
if (headerElement.dataset.headerOffsetInitialized === "true") {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
headerElement.dataset.headerOffsetInitialized = "true";
|
|
76
|
+
new Header(headerElement);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (typeof document !== "undefined") {
|
|
82
|
+
const initializeHeaderOffset = () => Header.init();
|
|
83
|
+
|
|
84
|
+
if (document.readyState === "loading") {
|
|
85
|
+
document.addEventListener("DOMContentLoaded", initializeHeaderOffset);
|
|
86
|
+
} else {
|
|
87
|
+
initializeHeaderOffset();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export default Header;
|
package/src/js/index.esm.js
CHANGED
|
@@ -23,6 +23,7 @@ import Tooltip from "@openeuropa/bcl-bootstrap/js/src/tooltip";
|
|
|
23
23
|
import Gallery from "@openeuropa/bcl-theme-default/src/js/gallery/gallery";
|
|
24
24
|
import AccordionToggle from "@openeuropa/bcl-theme-default/src/js/accordion-toggle/accordion-toggle";
|
|
25
25
|
import AccessibleToggle from "@openeuropa/bcl-theme-default/src/js/accessible-toggle/accessible-toggle";
|
|
26
|
+
import Header from "@openeuropa/bcl-theme-default/src/js/header/header";
|
|
26
27
|
|
|
27
28
|
export {
|
|
28
29
|
Alert,
|
|
@@ -43,4 +44,5 @@ export {
|
|
|
43
44
|
Gallery,
|
|
44
45
|
AccessibleToggle,
|
|
45
46
|
AccordionToggle,
|
|
47
|
+
Header,
|
|
46
48
|
};
|
package/src/js/index.umd.js
CHANGED
|
@@ -23,6 +23,7 @@ import Tooltip from "@openeuropa/bcl-bootstrap/js/src/tooltip";
|
|
|
23
23
|
import AccordionToggle from "@openeuropa/bcl-theme-default/src/js/accordion-toggle/accordion-toggle";
|
|
24
24
|
import Gallery from "@openeuropa/bcl-theme-default/src/js/gallery/gallery";
|
|
25
25
|
import AccessibleToggle from "@openeuropa/bcl-theme-default/src/js/accessible-toggle/accessible-toggle";
|
|
26
|
+
import Header from "@openeuropa/bcl-theme-default/src/js/header/header";
|
|
26
27
|
|
|
27
28
|
export default {
|
|
28
29
|
Alert,
|
|
@@ -43,4 +44,5 @@ export default {
|
|
|
43
44
|
Gallery,
|
|
44
45
|
AccessibleToggle,
|
|
45
46
|
AccordionToggle,
|
|
47
|
+
Header,
|
|
46
48
|
};
|
|
@@ -2,15 +2,33 @@ import Dropdown from "@openeuropa/bcl-bootstrap/js/src/dropdown";
|
|
|
2
2
|
import SelectorEngine from "@openeuropa/bcl-bootstrap/js/src/dom/selector-engine";
|
|
3
3
|
import EventHandler from "@openeuropa/bcl-bootstrap/js/src/dom/event-handler";
|
|
4
4
|
|
|
5
|
+
const SUBMENU_HEIGHT_VARIABLE = "--oel-mega-menu-submenu-height";
|
|
6
|
+
const SUBMENU_BODY_SELECTOR = ".__submenu_body";
|
|
7
|
+
|
|
5
8
|
class MegaMenu {
|
|
9
|
+
scheduleSubmenuHeightUpdate = () => {
|
|
10
|
+
if (this.submenuHeightFrame) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
this.submenuHeightFrame = window.requestAnimationFrame(() => {
|
|
15
|
+
this.submenuHeightFrame = null;
|
|
16
|
+
this.updateSubmenuHeight();
|
|
17
|
+
});
|
|
18
|
+
};
|
|
6
19
|
|
|
7
20
|
constructor(root) {
|
|
8
21
|
this.root = root;
|
|
22
|
+
this.submenuHeightFrame = null;
|
|
23
|
+
this.submenuBodies = SelectorEngine.find(SUBMENU_BODY_SELECTOR, this.root);
|
|
9
24
|
|
|
10
25
|
this.backButton = SelectorEngine.findOne(".back-button", this.root);
|
|
11
26
|
this.trigger = SelectorEngine.findOne(':scope > .dropdown-toggle[data-bs-toggle="dropdown"]', this.root);
|
|
12
27
|
this.ul = SelectorEngine.findOne('.bcl-mega-menu__items.__level-1', this.root);
|
|
13
28
|
|
|
29
|
+
EventHandler.on(window, "resize", this.scheduleSubmenuHeightUpdate);
|
|
30
|
+
EventHandler.on(window, "orientationchange", this.scheduleSubmenuHeightUpdate);
|
|
31
|
+
|
|
14
32
|
this.addSubmenuTriggerListeners();
|
|
15
33
|
this.addBackButtonListener();
|
|
16
34
|
this.addTriggerListeners();
|
|
@@ -73,6 +91,7 @@ class MegaMenu {
|
|
|
73
91
|
|
|
74
92
|
// When the mega menu is opened, focus the first item in the menu.
|
|
75
93
|
EventHandler.on(this.trigger, 'shown.bs.dropdown', () => {
|
|
94
|
+
this.scheduleSubmenuHeightUpdate();
|
|
76
95
|
const panelId = this.trigger.getAttribute('aria-controls');
|
|
77
96
|
const panel = panelId ? document.getElementById(panelId) : null;
|
|
78
97
|
const firstFocusable = panel ? this.getFocusableChildren(panel)[0] : null;
|
|
@@ -136,6 +155,7 @@ class MegaMenu {
|
|
|
136
155
|
trigger.setAttribute('aria-expanded', 'true');
|
|
137
156
|
const panel = this.getPanelForTrigger(trigger);
|
|
138
157
|
if (panel) panel.hidden = false;
|
|
158
|
+
this.scheduleSubmenuHeightUpdate();
|
|
139
159
|
}
|
|
140
160
|
|
|
141
161
|
/**
|
|
@@ -164,6 +184,43 @@ class MegaMenu {
|
|
|
164
184
|
if (panel) panel.hidden = true;
|
|
165
185
|
}
|
|
166
186
|
|
|
187
|
+
updateSubmenuHeight() {
|
|
188
|
+
if (!this.trigger || this.trigger.getAttribute('aria-expanded') !== 'true') {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!this.submenuBodies || this.submenuBodies.length === 0) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const viewportHeight =
|
|
197
|
+
(document.documentElement && document.documentElement.clientHeight) ||
|
|
198
|
+
window.innerHeight ||
|
|
199
|
+
0;
|
|
200
|
+
|
|
201
|
+
if (!viewportHeight) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
this.submenuBodies.forEach((submenuBody) => {
|
|
206
|
+
if (!submenuBody.isConnected || submenuBody.closest('[hidden]')) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const rect = submenuBody.getBoundingClientRect();
|
|
211
|
+
const visibleTop = Math.max(rect.top, 0);
|
|
212
|
+
// Use the distance to the viewport bottom instead of the current element
|
|
213
|
+
// height. Nested submenus inherit the parent max-height, so relying on
|
|
214
|
+
// rect.bottom would keep the parent's value and never recalc for children.
|
|
215
|
+
const availableHeight = Math.max(0, viewportHeight - visibleTop);
|
|
216
|
+
const value = `${availableHeight}px`;
|
|
217
|
+
|
|
218
|
+
if (submenuBody.style.getPropertyValue(SUBMENU_HEIGHT_VARIABLE) !== value) {
|
|
219
|
+
submenuBody.style.setProperty(SUBMENU_HEIGHT_VARIABLE, value);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
167
224
|
static init(selector = ".bcl-mega-menu") {
|
|
168
225
|
const megaMenus = SelectorEngine.find(selector);
|
|
169
226
|
megaMenus.forEach((menuEl) => new MegaMenu(menuEl));
|
package/src/scss/_header.scss
CHANGED
|
@@ -46,6 +46,7 @@ $header-link-active-background: #003776 !default;
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.bcl-header {
|
|
49
|
+
--oel-mega-menu-offset-top: 0px;
|
|
49
50
|
.notification {
|
|
50
51
|
position: relative;
|
|
51
52
|
padding-right: 0;
|
|
@@ -96,10 +97,9 @@ $header-link-active-background: #003776 !default;
|
|
|
96
97
|
header:has(.bcl-header__navbar #main-navbar.show),
|
|
97
98
|
header:has(.bcl-header__navbar.collapsing),
|
|
98
99
|
header:has(.bcl-header__navbar.show) {
|
|
99
|
-
height: 100vh;
|
|
100
|
+
height: calc(100vh - var(--oel-mega-menu-offset-top, 0px));
|
|
100
101
|
display: flex;
|
|
101
102
|
flex-flow: column;
|
|
102
|
-
overflow: auto;
|
|
103
103
|
|
|
104
104
|
> div:has(.breadcrumb) {
|
|
105
105
|
display: none;
|
|
@@ -127,6 +127,10 @@ $header-link-active-background: #003776 !default;
|
|
|
127
127
|
z-index: 1030;
|
|
128
128
|
width: 100%;
|
|
129
129
|
align-items: flex-start;
|
|
130
|
+
height: 100%;
|
|
131
|
+
&:not(:has(.bcl-mega-menu__container.show)) {
|
|
132
|
+
overflow: auto;
|
|
133
|
+
}
|
|
130
134
|
.navbar-nav {
|
|
131
135
|
width: 100%;
|
|
132
136
|
margin-top: 1rem;
|
package/src/scss/_input.scss
CHANGED
|
@@ -1,15 +1,57 @@
|
|
|
1
1
|
/* stylelint-disable no-duplicate-selectors, selector-no-qualifying-type, no-descending-specificity */
|
|
2
2
|
|
|
3
|
+
$default-border-color: $gray-600;
|
|
4
|
+
|
|
3
5
|
.form-select {
|
|
4
6
|
padding-top: $input-padding-y-lg;
|
|
5
7
|
padding-bottom: $input-padding-y-lg;
|
|
6
8
|
padding-left: $input-padding-x-lg;
|
|
7
9
|
font-size: $form-font-size-lg;
|
|
10
|
+
border-color: $default-border-color;
|
|
11
|
+
&:focus-visible {
|
|
12
|
+
border-color: $default-border-color;
|
|
13
|
+
box-shadow: none;
|
|
14
|
+
@include form-focus-ring();
|
|
15
|
+
&.is-valid {
|
|
16
|
+
outline-color: $success;
|
|
17
|
+
&:focus {
|
|
18
|
+
box-shadow: none;
|
|
19
|
+
border-color: $default-border-color;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
&.is-invalid {
|
|
23
|
+
outline-color: $danger;
|
|
24
|
+
&:focus {
|
|
25
|
+
box-shadow: none;
|
|
26
|
+
border-color: $default-border-color;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
&:focus {
|
|
31
|
+
box-shadow: none;
|
|
32
|
+
border-color: $default-border-color;
|
|
33
|
+
}
|
|
34
|
+
&.is-valid,
|
|
35
|
+
&.is-invalid {
|
|
36
|
+
&:focus {
|
|
37
|
+
box-shadow: none;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.form-check-input {
|
|
43
|
+
border-color: $primary;
|
|
8
44
|
&:focus-visible {
|
|
9
|
-
|
|
45
|
+
&[type="radio"] {
|
|
46
|
+
border-radius: 50%;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
&:focus {
|
|
50
|
+
border-color: $primary;
|
|
10
51
|
box-shadow: none;
|
|
11
|
-
|
|
12
|
-
|
|
52
|
+
}
|
|
53
|
+
&:focus-visible {
|
|
54
|
+
@include form-focus-ring(1px);
|
|
13
55
|
}
|
|
14
56
|
}
|
|
15
57
|
|
|
@@ -18,16 +60,35 @@
|
|
|
18
60
|
padding: $input-padding-y-lg $input-padding-x-lg;
|
|
19
61
|
font-size: $form-font-size-lg;
|
|
20
62
|
border-radius: 0.3rem;
|
|
63
|
+
border-color: $default-border-color;
|
|
21
64
|
&::file-selector-button {
|
|
22
65
|
padding: $input-padding-y-lg $input-padding-x-lg;
|
|
23
66
|
margin: (-$input-padding-y-lg) $input-padding-x-lg (-$input-padding-y-lg)
|
|
24
67
|
(-$input-padding-x-lg);
|
|
25
68
|
}
|
|
26
|
-
&:focus-visible {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
69
|
+
&:focus:focus-visible {
|
|
70
|
+
border-color: $default-border-color;
|
|
71
|
+
@include form-focus-ring();
|
|
72
|
+
}
|
|
73
|
+
&.is-valid,
|
|
74
|
+
&.is-invalid {
|
|
75
|
+
&:focus {
|
|
76
|
+
box-shadow: none;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
&.is-valid {
|
|
80
|
+
&:focus:focus-visible {
|
|
81
|
+
transition: none;
|
|
82
|
+
border-color: $default-border-color;
|
|
83
|
+
@include form-focus-ring($outline-color: $success);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
&.is-invalid {
|
|
87
|
+
&:focus:focus-visible {
|
|
88
|
+
transition: none;
|
|
89
|
+
border-color: $default-border-color;
|
|
90
|
+
@include form-focus-ring($outline-color: $danger);
|
|
91
|
+
}
|
|
31
92
|
}
|
|
32
93
|
}
|
|
33
94
|
.form-check:not(.form-switch) {
|
|
@@ -41,20 +102,6 @@
|
|
|
41
102
|
margin-top: 0.15rem;
|
|
42
103
|
}
|
|
43
104
|
}
|
|
44
|
-
.form-check-input {
|
|
45
|
-
&:focus-visible {
|
|
46
|
-
outline: 4px solid $primary;
|
|
47
|
-
box-shadow: none;
|
|
48
|
-
border-radius: 4px;
|
|
49
|
-
outline-offset: 0;
|
|
50
|
-
&[type="radio"] {
|
|
51
|
-
border-radius: 50%;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
&:checked:focus-visible {
|
|
55
|
-
border-color: $white;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
105
|
|
|
59
106
|
@include media-breakpoint-up(md) {
|
|
60
107
|
.form-check:not(.form-switch) {
|
|
@@ -90,24 +137,18 @@
|
|
|
90
137
|
textarea.form-control,
|
|
91
138
|
.form-control {
|
|
92
139
|
&.is-invalid {
|
|
93
|
-
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%
|
|
140
|
+
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23A51F2C'/%3E%3C/svg%3E%0A");
|
|
94
141
|
}
|
|
95
142
|
&.is-valid {
|
|
96
143
|
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM12.0303 4.96967C11.7374 4.67678 11.2626 4.67678 10.9697 4.96967C10.9626 4.97674 10.9559 4.98424 10.9498 4.9921L7.4774 9.41674L5.38388 7.32322C5.09098 7.03033 4.61611 7.03033 4.32322 7.32322C4.03032 7.61612 4.03032 8.09099 4.32322 8.38388L6.96966 11.0303C7.26256 11.3232 7.73743 11.3232 8.03032 11.0303C8.03685 11.0238 8.043 11.0169 8.04876 11.0097L12.041 6.01947C12.3232 5.72582 12.3196 5.25897 12.0303 4.96967Z' fill='%2328A745'/%3E%3C/svg%3E%0A");
|
|
97
144
|
}
|
|
98
145
|
}
|
|
99
146
|
|
|
100
|
-
.form-select:not([multiple]):not([size]) {
|
|
101
|
-
&:focus-visible {
|
|
102
|
-
outline: 2px solid $primary;
|
|
103
|
-
box-shadow: none;
|
|
104
|
-
border-radius: 4px;
|
|
105
|
-
outline-offset: -1px;
|
|
106
|
-
}
|
|
147
|
+
select.form-select:not([multiple]):not([size]) {
|
|
107
148
|
&.is-invalid {
|
|
108
149
|
background-image:
|
|
109
150
|
url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),
|
|
110
|
-
url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%
|
|
151
|
+
url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM8 4C7.46459 4 7.04623 4.46229 7.0995 4.99504L7.45025 8.50248C7.47849 8.78492 7.71616 9 8 9C8.28384 9 8.52151 8.78492 8.54975 8.50248L8.9005 4.99504C8.95377 4.46228 8.53541 4 8 4ZM8.00154 10C7.44926 10 7.00154 10.4477 7.00154 11C7.00154 11.5523 7.44926 12 8.00154 12C8.55383 12 9.00154 11.5523 9.00154 11C9.00154 10.4477 8.55383 10 8.00154 10Z' fill='%23A51F2C'/%3E%3C/svg%3E%0A");
|
|
111
152
|
}
|
|
112
153
|
&.is-valid {
|
|
113
154
|
background-image:
|
package/src/scss/_mega-menu.scss
CHANGED
|
@@ -193,6 +193,8 @@ ul.bcl-mega-menu__items {
|
|
|
193
193
|
@include media-breakpoint-up(lg) {
|
|
194
194
|
block-size: $mm-panel-height;
|
|
195
195
|
overflow-y: auto;
|
|
196
|
+
scrollbar-color: $primary-bg-light-subtle transparent;
|
|
197
|
+
scrollbar-width: thin;
|
|
196
198
|
}
|
|
197
199
|
// Add space above in mobile viewport.
|
|
198
200
|
@include media-breakpoint-down(lg) {
|
|
@@ -275,34 +277,6 @@ ul.bcl-mega-menu__items {
|
|
|
275
277
|
}
|
|
276
278
|
}
|
|
277
279
|
}
|
|
278
|
-
|
|
279
|
-
// The see-all link is at the bottom of the list.
|
|
280
|
-
&:has(> a.see-all-button) {
|
|
281
|
-
position: sticky;
|
|
282
|
-
inset-block-start: 100%;
|
|
283
|
-
}
|
|
284
|
-
> a.see-all-button {
|
|
285
|
-
border-top: none;
|
|
286
|
-
&:after {
|
|
287
|
-
background: $neutral-border-color;
|
|
288
|
-
content: "";
|
|
289
|
-
block-size: 1px;
|
|
290
|
-
inset-inline-start: 0;
|
|
291
|
-
position: absolute;
|
|
292
|
-
inset-block-start: 0;
|
|
293
|
-
// Replicate horizontal padding of parent element.
|
|
294
|
-
inset-inline: $mm-gutter-x;
|
|
295
|
-
}
|
|
296
|
-
> svg {
|
|
297
|
-
inline-size: 0.8rem;
|
|
298
|
-
}
|
|
299
|
-
> span {
|
|
300
|
-
text-overflow: ellipsis;
|
|
301
|
-
overflow: hidden;
|
|
302
|
-
display: block;
|
|
303
|
-
white-space: nowrap;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
280
|
}
|
|
307
281
|
}
|
|
308
282
|
|
|
@@ -314,6 +288,21 @@ ul.bcl-mega-menu__items {
|
|
|
314
288
|
// Avoid a space between the parent menu and the submenu.
|
|
315
289
|
@include padding-right(0);
|
|
316
290
|
}
|
|
291
|
+
@include media-breakpoint-down(lg) {
|
|
292
|
+
> .bcl-mega-menu__items {
|
|
293
|
+
&:has(.bcl-mega-menu__submenu:not([hidden])) {
|
|
294
|
+
> .__leaf,
|
|
295
|
+
> .__parent {
|
|
296
|
+
display: none;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
> .__parent {
|
|
300
|
+
&:has(.bcl-mega-menu__submenu:not([hidden])) {
|
|
301
|
+
display: block;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
317
306
|
}
|
|
318
307
|
|
|
319
308
|
// Nested submenu.
|
|
@@ -372,40 +361,42 @@ ul.bcl-mega-menu__items {
|
|
|
372
361
|
}
|
|
373
362
|
}
|
|
374
363
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
@include media-breakpoint-up(lg) {
|
|
382
|
-
background: $primary-bg-subtle;
|
|
383
|
-
}
|
|
384
|
-
// Hide other parts of the mega menu in mobile, when a sub-submenu is open.
|
|
385
|
-
@include media-breakpoint-down(lg) {
|
|
386
|
-
.bcl-mega-menu__container:has(&.active) {
|
|
387
|
-
.bcl-mega-menu__info,
|
|
388
|
-
.bcl-mega-menu__first-submenu {
|
|
389
|
-
display: none;
|
|
390
|
-
}
|
|
364
|
+
@include media-breakpoint-up(lg) {
|
|
365
|
+
> .bcl-mega-menu__items {
|
|
366
|
+
flex: 1 1 0;
|
|
367
|
+
overflow-y: auto;
|
|
368
|
+
> li > :is(span, a, button) {
|
|
369
|
+
@include mm-item-padding($px: map-get($spacers, "4-25"));
|
|
391
370
|
}
|
|
392
371
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
372
|
+
}
|
|
373
|
+
.__see_all {
|
|
374
|
+
border-top: 1px solid $neutral-border-color;
|
|
375
|
+
@include media-breakpoint-up(lg) {
|
|
376
|
+
border-top: 1px solid $primary-border-subtle;
|
|
377
|
+
margin: 0 map-get($spacers, "4-25");
|
|
378
|
+
}
|
|
379
|
+
> .see-all-button {
|
|
380
|
+
@include mm-item-padding();
|
|
381
|
+
// Use flex for icon spacing.
|
|
382
|
+
display: flex;
|
|
383
|
+
align-items: center;
|
|
384
|
+
color: $link-color;
|
|
401
385
|
@include media-breakpoint-up(lg) {
|
|
402
|
-
|
|
386
|
+
padding: $mm-gutter-y map-get($spacers, "4-25");
|
|
387
|
+
margin: 0 -1.75rem;
|
|
403
388
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
>
|
|
408
|
-
|
|
389
|
+
&:hover {
|
|
390
|
+
background: $primary-bg-subtle;
|
|
391
|
+
}
|
|
392
|
+
> svg {
|
|
393
|
+
flex-shrink: 0;
|
|
394
|
+
}
|
|
395
|
+
> span {
|
|
396
|
+
text-overflow: ellipsis;
|
|
397
|
+
overflow: hidden;
|
|
398
|
+
display: block;
|
|
399
|
+
white-space: nowrap;
|
|
409
400
|
}
|
|
410
401
|
}
|
|
411
402
|
}
|
|
@@ -429,4 +420,12 @@ ul.bcl-mega-menu__items {
|
|
|
429
420
|
transform: translateX(-50%);
|
|
430
421
|
}
|
|
431
422
|
}
|
|
423
|
+
.bcl-mega-menu {
|
|
424
|
+
.__submenu_body {
|
|
425
|
+
max-height: var(--oel-mega-menu-submenu-height);
|
|
426
|
+
overflow: auto;
|
|
427
|
+
scrollbar-color: $primary-bg-light-subtle transparent;
|
|
428
|
+
scrollbar-width: thin;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
432
431
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
--ss-font-color: #4d4d4d;
|
|
12
12
|
--ss-font-placeholder-color: #212529;
|
|
13
13
|
--ss-disabled-color: #dcdee2;
|
|
14
|
-
--ss-border-color: #
|
|
14
|
+
--ss-border-color: #6c757d;
|
|
15
15
|
--ss-highlight-color: #fffb8c;
|
|
16
16
|
--ss-success-color: #00b755;
|
|
17
17
|
--ss-error-color: #dc3545;
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
overflow: hidden;
|
|
78
78
|
min-height: 38px;
|
|
79
79
|
|
|
80
|
-
&:focus {
|
|
81
|
-
|
|
80
|
+
&:focus-visible {
|
|
81
|
+
@include form-focus-ring();
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
&.form-select {
|
|
@@ -330,7 +330,7 @@
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
&:focus {
|
|
333
|
-
|
|
333
|
+
@include form-focus-ring();
|
|
334
334
|
}
|
|
335
335
|
}
|
|
336
336
|
|
|
@@ -534,21 +534,31 @@
|
|
|
534
534
|
}
|
|
535
535
|
}
|
|
536
536
|
|
|
537
|
-
.ss-main.multi-select.is-invalid,
|
|
538
|
-
.was-validated .multi-select:invalid + .ss-main.multi-select {
|
|
537
|
+
.form-select.ss-main.multi-select.is-invalid,
|
|
538
|
+
.was-validated .multi-select:invalid + .form-select.ss-main.multi-select {
|
|
539
539
|
border-color: $danger;
|
|
540
|
-
background-position: right
|
|
540
|
+
background-position: right 2.5rem center;
|
|
541
541
|
background-repeat: no-repeat;
|
|
542
|
+
padding-right: 0.5rem;
|
|
542
543
|
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
|
543
|
-
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='
|
|
544
|
+
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3E%3Cpath fill='%23a51f2c' d='M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8 4a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 4m.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2'/%3E%3C/svg%3E");
|
|
545
|
+
&:focus-visible {
|
|
546
|
+
border-color: $gray-600;
|
|
547
|
+
outline-color: $danger;
|
|
548
|
+
}
|
|
544
549
|
}
|
|
545
|
-
.ss-main.multi-select.is-valid,
|
|
546
|
-
.was-validated .multi-select:valid + .ss-main.multi-select {
|
|
550
|
+
.form-select.ss-main.multi-select.is-valid,
|
|
551
|
+
.was-validated .multi-select:valid + .form-select.ss-main.multi-select {
|
|
547
552
|
border-color: $success;
|
|
548
|
-
background-position: right
|
|
553
|
+
background-position: right 2.5rem center;
|
|
549
554
|
background-repeat: no-repeat;
|
|
555
|
+
padding-right: 0.5rem;
|
|
550
556
|
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
|
551
557
|
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM12.0303 4.96967C11.7374 4.67678 11.2626 4.67678 10.9697 4.96967C10.9626 4.97674 10.9559 4.98424 10.9498 4.9921L7.4774 9.41674L5.38388 7.32322C5.09098 7.03033 4.61611 7.03033 4.32322 7.32322C4.03032 7.61612 4.03032 8.09099 4.32322 8.38388L6.96966 11.0303C7.26256 11.3232 7.73743 11.3232 8.03032 11.0303C8.03685 11.0238 8.043 11.0169 8.04876 11.0097L12.041 6.01947C12.3232 5.72582 12.3196 5.25897 12.0303 4.96967Z' fill='%2328A745'/%3E%3C/svg%3E%0A");
|
|
558
|
+
&:focus-visible {
|
|
559
|
+
border-color: $gray-600;
|
|
560
|
+
outline-color: $success;
|
|
561
|
+
}
|
|
552
562
|
}
|
|
553
563
|
|
|
554
564
|
.ss-sr-only {
|
|
@@ -39,6 +39,10 @@ $search-spacers: (
|
|
|
39
39
|
padding-right: map-get($search-spacers, "submit-spacer-right");
|
|
40
40
|
border-top-left-radius: 0;
|
|
41
41
|
border-bottom-left-radius: 0;
|
|
42
|
+
&:focus-visible {
|
|
43
|
+
outline-offset: 2px;
|
|
44
|
+
outline-color: $primary;
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
.bcl-search-form__group {
|
|
44
48
|
display: flex;
|
|
@@ -25,6 +25,7 @@ $neutral-border-color: #b9c5e9;
|
|
|
25
25
|
$table-hover-bg-factor: 0.1;
|
|
26
26
|
|
|
27
27
|
// Background colors as before for Alerts and list-group
|
|
28
|
+
$primary-bg-light-subtle: tint-color($primary, 70%);
|
|
28
29
|
$primary-bg-subtle: tint-color($primary, 90%);
|
|
29
30
|
$secondary-bg-subtle: tint-color($secondary, 90%);
|
|
30
31
|
$success-bg-subtle: tint-color($success, 90%);
|