scb-wc-test 0.1.201 → 0.1.202
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.
|
@@ -23,7 +23,7 @@ namespace ScbBlazorDemo
|
|
|
23
23
|
// Header (scb-header): aktiv flik, drawerstatus och eventuell söktext
|
|
24
24
|
protected HeaderState Header { get; private set; } = new();
|
|
25
25
|
|
|
26
|
-
// Drawer (scb-drawer): öppet/stängt och
|
|
26
|
+
// Drawer (scb-drawer): öppet/stängt och menytitlar (label/sub-label). Läser från scb-menu om den finns i drawern
|
|
27
27
|
protected DrawerState Drawer { get; private set; } = new();
|
|
28
28
|
|
|
29
29
|
// Meny (scb-options-menu): övergripande öppet/stängt-läge
|
|
@@ -1081,6 +1081,7 @@ window.SCBBlazor = window.SCBBlazor || {};
|
|
|
1081
1081
|
window.SCBBlazor.getState = function () {
|
|
1082
1082
|
const header = document.querySelector('scb-header');
|
|
1083
1083
|
const drawer = document.querySelector('scb-drawer');
|
|
1084
|
+
const drawerMenu = drawer ? drawer.querySelector('scb-menu') : null;
|
|
1084
1085
|
const breadcrumb = document.querySelector('scb-breadcrumb');
|
|
1085
1086
|
const breadcrumbItems = document.querySelectorAll('scb-breadcrumb-item');
|
|
1086
1087
|
const accordions = document.querySelectorAll('scb-accordion');
|
|
@@ -1123,9 +1124,17 @@ window.SCBBlazor.getState = function () {
|
|
|
1123
1124
|
|
|
1124
1125
|
// Drawerstate hämtas från attributen på första scb-drawer
|
|
1125
1126
|
const drawerState = {
|
|
1126
|
-
open: drawer ? drawer.hasAttribute('open') : false,
|
|
1127
|
-
label:
|
|
1128
|
-
|
|
1127
|
+
open: drawer ? !!(drawer.open ?? drawer.hasAttribute('open')) : false,
|
|
1128
|
+
label: drawerMenu
|
|
1129
|
+
? drawerMenu.getAttribute('label') || ''
|
|
1130
|
+
: drawer
|
|
1131
|
+
? drawer.getAttribute('label') || ''
|
|
1132
|
+
: '',
|
|
1133
|
+
subLabel: drawerMenu
|
|
1134
|
+
? drawerMenu.getAttribute('sub-label') || ''
|
|
1135
|
+
: drawer
|
|
1136
|
+
? drawer.getAttribute('sub-label') || ''
|
|
1137
|
+
: '',
|
|
1129
1138
|
};
|
|
1130
1139
|
|
|
1131
1140
|
// Breadcrumb (första på sidan)
|
|
@@ -2472,7 +2481,7 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2472
2481
|
|
|
2473
2482
|
// Drawer och menu
|
|
2474
2483
|
|
|
2475
|
-
|
|
2484
|
+
api.setDrawerOpen = function (open) {
|
|
2476
2485
|
const drawer = document.querySelector('scb-drawer');
|
|
2477
2486
|
if (!drawer) return;
|
|
2478
2487
|
|
|
@@ -2480,6 +2489,47 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2480
2489
|
const prev = getOpenState(drawer);
|
|
2481
2490
|
if (prev === isOpen) return;
|
|
2482
2491
|
|
|
2492
|
+
const anyDrawer = drawer;
|
|
2493
|
+
|
|
2494
|
+
// När drawern öppnas från en Blazor-click riskerar den att stängas direkt av drawerens "klick utanför"-logik.
|
|
2495
|
+
// Lägg öppnandet på en microtask så att den sker efter att click-eventet har bubblat klart.
|
|
2496
|
+
anyDrawer.__scbBlazorPendingDrawerOpen = isOpen;
|
|
2497
|
+
const schedule =
|
|
2498
|
+
typeof queueMicrotask === 'function'
|
|
2499
|
+
? queueMicrotask
|
|
2500
|
+
: (fn) => Promise.resolve().then(fn);
|
|
2501
|
+
|
|
2502
|
+
if (isOpen) {
|
|
2503
|
+
schedule(() => {
|
|
2504
|
+
if (anyDrawer.__scbBlazorPendingDrawerOpen !== isOpen) return;
|
|
2505
|
+
try {
|
|
2506
|
+
delete anyDrawer.__scbBlazorPendingDrawerOpen;
|
|
2507
|
+
} catch (_) {}
|
|
2508
|
+
|
|
2509
|
+
if (getOpenState(drawer) === isOpen) return;
|
|
2510
|
+
|
|
2511
|
+
// Primärt: använd samma trigger-logik som i UI:t (aria-controls / data-drawer-*)
|
|
2512
|
+
const id = drawer.id;
|
|
2513
|
+
const trigger = findTrigger('drawer', id, isOpen);
|
|
2514
|
+
if (trigger) {
|
|
2515
|
+
safeClick(trigger);
|
|
2516
|
+
if (getOpenState(drawer) === isOpen) return;
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
// Fallback: sätt open direkt
|
|
2520
|
+
try {
|
|
2521
|
+
drawer.open = isOpen;
|
|
2522
|
+
} catch (_) {}
|
|
2523
|
+
if (isOpen) drawer.setAttribute('open', '');
|
|
2524
|
+
else drawer.removeAttribute('open');
|
|
2525
|
+
});
|
|
2526
|
+
return;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
try {
|
|
2530
|
+
delete anyDrawer.__scbBlazorPendingDrawerOpen;
|
|
2531
|
+
} catch (_) {}
|
|
2532
|
+
|
|
2483
2533
|
// Primärt: använd samma trigger-logik som i UI:t (aria-controls / data-drawer-*)
|
|
2484
2534
|
const id = drawer.id;
|
|
2485
2535
|
const trigger = findTrigger('drawer', id, isOpen);
|
|
@@ -2501,6 +2551,14 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2501
2551
|
if (!drawer) return;
|
|
2502
2552
|
const l = label == null ? '' : String(label);
|
|
2503
2553
|
const s = subLabel == null ? '' : String(subLabel);
|
|
2554
|
+
|
|
2555
|
+
const menu = drawer.querySelector('scb-menu');
|
|
2556
|
+
if (menu) {
|
|
2557
|
+
menu.setAttribute('label', l);
|
|
2558
|
+
menu.setAttribute('sub-label', s);
|
|
2559
|
+
return;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2504
2562
|
drawer.setAttribute('label', l);
|
|
2505
2563
|
drawer.setAttribute('sub-label', s);
|
|
2506
2564
|
};
|
package/mvc/scb-blazor-bridge.js
CHANGED
|
@@ -1081,6 +1081,7 @@ window.SCBBlazor = window.SCBBlazor || {};
|
|
|
1081
1081
|
window.SCBBlazor.getState = function () {
|
|
1082
1082
|
const header = document.querySelector('scb-header');
|
|
1083
1083
|
const drawer = document.querySelector('scb-drawer');
|
|
1084
|
+
const drawerMenu = drawer ? drawer.querySelector('scb-menu') : null;
|
|
1084
1085
|
const breadcrumb = document.querySelector('scb-breadcrumb');
|
|
1085
1086
|
const breadcrumbItems = document.querySelectorAll('scb-breadcrumb-item');
|
|
1086
1087
|
const accordions = document.querySelectorAll('scb-accordion');
|
|
@@ -1123,9 +1124,17 @@ window.SCBBlazor.getState = function () {
|
|
|
1123
1124
|
|
|
1124
1125
|
// Drawerstate hämtas från attributen på första scb-drawer
|
|
1125
1126
|
const drawerState = {
|
|
1126
|
-
open: drawer ? drawer.hasAttribute('open') : false,
|
|
1127
|
-
label:
|
|
1128
|
-
|
|
1127
|
+
open: drawer ? !!(drawer.open ?? drawer.hasAttribute('open')) : false,
|
|
1128
|
+
label: drawerMenu
|
|
1129
|
+
? drawerMenu.getAttribute('label') || ''
|
|
1130
|
+
: drawer
|
|
1131
|
+
? drawer.getAttribute('label') || ''
|
|
1132
|
+
: '',
|
|
1133
|
+
subLabel: drawerMenu
|
|
1134
|
+
? drawerMenu.getAttribute('sub-label') || ''
|
|
1135
|
+
: drawer
|
|
1136
|
+
? drawer.getAttribute('sub-label') || ''
|
|
1137
|
+
: '',
|
|
1129
1138
|
};
|
|
1130
1139
|
|
|
1131
1140
|
// Breadcrumb (första på sidan)
|
|
@@ -2472,7 +2481,7 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2472
2481
|
|
|
2473
2482
|
// Drawer och menu
|
|
2474
2483
|
|
|
2475
|
-
|
|
2484
|
+
api.setDrawerOpen = function (open) {
|
|
2476
2485
|
const drawer = document.querySelector('scb-drawer');
|
|
2477
2486
|
if (!drawer) return;
|
|
2478
2487
|
|
|
@@ -2480,6 +2489,47 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2480
2489
|
const prev = getOpenState(drawer);
|
|
2481
2490
|
if (prev === isOpen) return;
|
|
2482
2491
|
|
|
2492
|
+
const anyDrawer = drawer;
|
|
2493
|
+
|
|
2494
|
+
// När drawern öppnas från en Blazor-click riskerar den att stängas direkt av drawerens "klick utanför"-logik.
|
|
2495
|
+
// Lägg öppnandet på en microtask så att den sker efter att click-eventet har bubblat klart.
|
|
2496
|
+
anyDrawer.__scbBlazorPendingDrawerOpen = isOpen;
|
|
2497
|
+
const schedule =
|
|
2498
|
+
typeof queueMicrotask === 'function'
|
|
2499
|
+
? queueMicrotask
|
|
2500
|
+
: (fn) => Promise.resolve().then(fn);
|
|
2501
|
+
|
|
2502
|
+
if (isOpen) {
|
|
2503
|
+
schedule(() => {
|
|
2504
|
+
if (anyDrawer.__scbBlazorPendingDrawerOpen !== isOpen) return;
|
|
2505
|
+
try {
|
|
2506
|
+
delete anyDrawer.__scbBlazorPendingDrawerOpen;
|
|
2507
|
+
} catch (_) {}
|
|
2508
|
+
|
|
2509
|
+
if (getOpenState(drawer) === isOpen) return;
|
|
2510
|
+
|
|
2511
|
+
// Primärt: använd samma trigger-logik som i UI:t (aria-controls / data-drawer-*)
|
|
2512
|
+
const id = drawer.id;
|
|
2513
|
+
const trigger = findTrigger('drawer', id, isOpen);
|
|
2514
|
+
if (trigger) {
|
|
2515
|
+
safeClick(trigger);
|
|
2516
|
+
if (getOpenState(drawer) === isOpen) return;
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
// Fallback: sätt open direkt
|
|
2520
|
+
try {
|
|
2521
|
+
drawer.open = isOpen;
|
|
2522
|
+
} catch (_) {}
|
|
2523
|
+
if (isOpen) drawer.setAttribute('open', '');
|
|
2524
|
+
else drawer.removeAttribute('open');
|
|
2525
|
+
});
|
|
2526
|
+
return;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
try {
|
|
2530
|
+
delete anyDrawer.__scbBlazorPendingDrawerOpen;
|
|
2531
|
+
} catch (_) {}
|
|
2532
|
+
|
|
2483
2533
|
// Primärt: använd samma trigger-logik som i UI:t (aria-controls / data-drawer-*)
|
|
2484
2534
|
const id = drawer.id;
|
|
2485
2535
|
const trigger = findTrigger('drawer', id, isOpen);
|
|
@@ -2501,6 +2551,14 @@ window.SCBBlazor.registerScbEventHandlers = function (dotNetRef) {
|
|
|
2501
2551
|
if (!drawer) return;
|
|
2502
2552
|
const l = label == null ? '' : String(label);
|
|
2503
2553
|
const s = subLabel == null ? '' : String(subLabel);
|
|
2554
|
+
|
|
2555
|
+
const menu = drawer.querySelector('scb-menu');
|
|
2556
|
+
if (menu) {
|
|
2557
|
+
menu.setAttribute('label', l);
|
|
2558
|
+
menu.setAttribute('sub-label', s);
|
|
2559
|
+
return;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2504
2562
|
drawer.setAttribute('label', l);
|
|
2505
2563
|
drawer.setAttribute('sub-label', s);
|
|
2506
2564
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scb-wc-test",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.202",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -378,5 +378,5 @@
|
|
|
378
378
|
},
|
|
379
379
|
"./mvc/*": "./mvc/*"
|
|
380
380
|
},
|
|
381
|
-
"buildHash": "
|
|
381
|
+
"buildHash": "9E842BD0A69B8E03F2365076319BF3A8CE38F063FA863C0051F528FDFF11A722"
|
|
382
382
|
}
|