@openeuropa/bcl-theme-joinup 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-joinup.css +167 -85
- package/css/oe-bcl-joinup.css.map +1 -1
- package/css/oe-bcl-joinup.min.css +1 -1
- package/css/oe-bcl-joinup.min.css.map +1 -1
- package/js/oe-bcl-joinup.bundle.js +112 -1
- package/js/oe-bcl-joinup.bundle.js.map +1 -1
- package/js/oe-bcl-joinup.bundle.min.js +1 -1
- package/js/oe-bcl-joinup.bundle.min.js.map +1 -1
- package/js/oe-bcl-joinup.esm.js +111 -1
- package/js/oe-bcl-joinup.esm.js.map +1 -1
- package/js/oe-bcl-joinup.esm.min.js +1 -1
- package/js/oe-bcl-joinup.esm.min.js.map +1 -1
- package/js/oe-bcl-joinup.umd.js +112 -1
- package/js/oe-bcl-joinup.umd.js.map +1 -1
- package/js/oe-bcl-joinup.umd.min.js +1 -1
- package/js/oe-bcl-joinup.umd.min.js.map +1 -1
- package/package.json +7 -7
- package/src/js/index.esm.js +2 -0
- package/src/js/index.umd.js +2 -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/js/oe-bcl-joinup.esm.js
CHANGED
|
@@ -3204,12 +3204,27 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
3204
3204
|
MainNavigation.init(".bcl-navbar-toggler");
|
|
3205
3205
|
});
|
|
3206
3206
|
|
|
3207
|
+
const SUBMENU_HEIGHT_VARIABLE = "--oel-mega-menu-submenu-height";
|
|
3208
|
+
const SUBMENU_BODY_SELECTOR = ".__submenu_body";
|
|
3207
3209
|
class MegaMenu {
|
|
3210
|
+
scheduleSubmenuHeightUpdate = () => {
|
|
3211
|
+
if (this.submenuHeightFrame) {
|
|
3212
|
+
return;
|
|
3213
|
+
}
|
|
3214
|
+
this.submenuHeightFrame = window.requestAnimationFrame(() => {
|
|
3215
|
+
this.submenuHeightFrame = null;
|
|
3216
|
+
this.updateSubmenuHeight();
|
|
3217
|
+
});
|
|
3218
|
+
};
|
|
3208
3219
|
constructor(root) {
|
|
3209
3220
|
this.root = root;
|
|
3221
|
+
this.submenuHeightFrame = null;
|
|
3222
|
+
this.submenuBodies = SelectorEngine.find(SUBMENU_BODY_SELECTOR, this.root);
|
|
3210
3223
|
this.backButton = SelectorEngine.findOne(".back-button", this.root);
|
|
3211
3224
|
this.trigger = SelectorEngine.findOne(':scope > .dropdown-toggle[data-bs-toggle="dropdown"]', this.root);
|
|
3212
3225
|
this.ul = SelectorEngine.findOne('.bcl-mega-menu__items.__level-1', this.root);
|
|
3226
|
+
EventHandler.on(window, "resize", this.scheduleSubmenuHeightUpdate);
|
|
3227
|
+
EventHandler.on(window, "orientationchange", this.scheduleSubmenuHeightUpdate);
|
|
3213
3228
|
this.addSubmenuTriggerListeners();
|
|
3214
3229
|
this.addBackButtonListener();
|
|
3215
3230
|
this.addTriggerListeners();
|
|
@@ -3265,6 +3280,7 @@ class MegaMenu {
|
|
|
3265
3280
|
|
|
3266
3281
|
// When the mega menu is opened, focus the first item in the menu.
|
|
3267
3282
|
EventHandler.on(this.trigger, 'shown.bs.dropdown', () => {
|
|
3283
|
+
this.scheduleSubmenuHeightUpdate();
|
|
3268
3284
|
const panelId = this.trigger.getAttribute('aria-controls');
|
|
3269
3285
|
const panel = panelId ? document.getElementById(panelId) : null;
|
|
3270
3286
|
const firstFocusable = panel ? this.getFocusableChildren(panel)[0] : null;
|
|
@@ -3323,6 +3339,7 @@ class MegaMenu {
|
|
|
3323
3339
|
trigger.setAttribute('aria-expanded', 'true');
|
|
3324
3340
|
const panel = this.getPanelForTrigger(trigger);
|
|
3325
3341
|
if (panel) panel.hidden = false;
|
|
3342
|
+
this.scheduleSubmenuHeightUpdate();
|
|
3326
3343
|
}
|
|
3327
3344
|
|
|
3328
3345
|
/**
|
|
@@ -3348,6 +3365,33 @@ class MegaMenu {
|
|
|
3348
3365
|
const panel = this.getPanelForTrigger(trigger);
|
|
3349
3366
|
if (panel) panel.hidden = true;
|
|
3350
3367
|
}
|
|
3368
|
+
updateSubmenuHeight() {
|
|
3369
|
+
if (!this.trigger || this.trigger.getAttribute('aria-expanded') !== 'true') {
|
|
3370
|
+
return;
|
|
3371
|
+
}
|
|
3372
|
+
if (!this.submenuBodies || this.submenuBodies.length === 0) {
|
|
3373
|
+
return;
|
|
3374
|
+
}
|
|
3375
|
+
const viewportHeight = document.documentElement && document.documentElement.clientHeight || window.innerHeight || 0;
|
|
3376
|
+
if (!viewportHeight) {
|
|
3377
|
+
return;
|
|
3378
|
+
}
|
|
3379
|
+
this.submenuBodies.forEach(submenuBody => {
|
|
3380
|
+
if (!submenuBody.isConnected || submenuBody.closest('[hidden]')) {
|
|
3381
|
+
return;
|
|
3382
|
+
}
|
|
3383
|
+
const rect = submenuBody.getBoundingClientRect();
|
|
3384
|
+
const visibleTop = Math.max(rect.top, 0);
|
|
3385
|
+
// Use the distance to the viewport bottom instead of the current element
|
|
3386
|
+
// height. Nested submenus inherit the parent max-height, so relying on
|
|
3387
|
+
// rect.bottom would keep the parent's value and never recalc for children.
|
|
3388
|
+
const availableHeight = Math.max(0, viewportHeight - visibleTop);
|
|
3389
|
+
const value = `${availableHeight}px`;
|
|
3390
|
+
if (submenuBody.style.getPropertyValue(SUBMENU_HEIGHT_VARIABLE) !== value) {
|
|
3391
|
+
submenuBody.style.setProperty(SUBMENU_HEIGHT_VARIABLE, value);
|
|
3392
|
+
}
|
|
3393
|
+
});
|
|
3394
|
+
}
|
|
3351
3395
|
static init(selector = ".bcl-mega-menu") {
|
|
3352
3396
|
const megaMenus = SelectorEngine.find(selector);
|
|
3353
3397
|
megaMenus.forEach(menuEl => new MegaMenu(menuEl));
|
|
@@ -5256,5 +5300,71 @@ enableDismissTrigger(Toast);
|
|
|
5256
5300
|
|
|
5257
5301
|
defineJQueryPlugin$1(Toast);
|
|
5258
5302
|
|
|
5259
|
-
|
|
5303
|
+
const HEADER_SELECTOR = ".bcl-header";
|
|
5304
|
+
const TOGGLER_SELECTOR = ".bcl-navbar-toggler";
|
|
5305
|
+
const OFFSET_VARIABLE = "--oel-mega-menu-offset-top";
|
|
5306
|
+
class Header {
|
|
5307
|
+
scheduleUpdate = () => {
|
|
5308
|
+
if (this.frameRequest) {
|
|
5309
|
+
return;
|
|
5310
|
+
}
|
|
5311
|
+
this.frameRequest = window.requestAnimationFrame(() => {
|
|
5312
|
+
this.frameRequest = null;
|
|
5313
|
+
this.updateOffset();
|
|
5314
|
+
});
|
|
5315
|
+
};
|
|
5316
|
+
constructor(element) {
|
|
5317
|
+
this.element = element;
|
|
5318
|
+
this.frameRequest = null;
|
|
5319
|
+
this.resizeObserver = null;
|
|
5320
|
+
this.init();
|
|
5321
|
+
}
|
|
5322
|
+
init() {
|
|
5323
|
+
this.updateOffset();
|
|
5324
|
+
EventHandler.on(window, "resize", this.scheduleUpdate);
|
|
5325
|
+
EventHandler.on(window, "orientationchange", this.scheduleUpdate);
|
|
5326
|
+
const togglers = SelectorEngine.find(TOGGLER_SELECTOR, this.element);
|
|
5327
|
+
togglers.forEach(toggler => {
|
|
5328
|
+
// Some layouts move the header when the nav toggler expands; keep offset in sync.
|
|
5329
|
+
EventHandler.on(toggler, "click", this.scheduleUpdate);
|
|
5330
|
+
});
|
|
5331
|
+
}
|
|
5332
|
+
updateOffset() {
|
|
5333
|
+
if (!this.element) {
|
|
5334
|
+
return;
|
|
5335
|
+
}
|
|
5336
|
+
const rect = this.element.getBoundingClientRect();
|
|
5337
|
+
const offset = Math.max(0, rect.top);
|
|
5338
|
+
const value = `${offset}px`;
|
|
5339
|
+
if (this.element.style.getPropertyValue(OFFSET_VARIABLE) === value) {
|
|
5340
|
+
return;
|
|
5341
|
+
}
|
|
5342
|
+
this.element.style.setProperty(OFFSET_VARIABLE, value);
|
|
5343
|
+
}
|
|
5344
|
+
static init(root) {
|
|
5345
|
+
if (typeof document === "undefined" || typeof window === "undefined") {
|
|
5346
|
+
return;
|
|
5347
|
+
}
|
|
5348
|
+
const resolvedRoot = root || document;
|
|
5349
|
+
const context = resolvedRoot instanceof Element ? resolvedRoot : resolvedRoot.documentElement || document.documentElement;
|
|
5350
|
+
const headers = SelectorEngine.find(HEADER_SELECTOR, context);
|
|
5351
|
+
headers.forEach(headerElement => {
|
|
5352
|
+
if (headerElement.dataset.headerOffsetInitialized === "true") {
|
|
5353
|
+
return;
|
|
5354
|
+
}
|
|
5355
|
+
headerElement.dataset.headerOffsetInitialized = "true";
|
|
5356
|
+
new Header(headerElement);
|
|
5357
|
+
});
|
|
5358
|
+
}
|
|
5359
|
+
}
|
|
5360
|
+
if (typeof document !== "undefined") {
|
|
5361
|
+
const initializeHeaderOffset = () => Header.init();
|
|
5362
|
+
if (document.readyState === "loading") {
|
|
5363
|
+
document.addEventListener("DOMContentLoaded", initializeHeaderOffset);
|
|
5364
|
+
} else {
|
|
5365
|
+
initializeHeaderOffset();
|
|
5366
|
+
}
|
|
5367
|
+
}
|
|
5368
|
+
|
|
5369
|
+
export { AccessibleToggle, AccordionToggle, Alert, Button, Carousel, Collapse, Dropdown, Gallery, Header, MainNavigation, MegaMenu, Modal, Offcanvas, Popover, ScrollSpy, ScrollSpy$1 as ScrollSpyV2, Tab, Toast, Tooltip };
|
|
5260
5370
|
//# sourceMappingURL=oe-bcl-joinup.esm.js.map
|