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 texter
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: drawer ? drawer.getAttribute('label') || '' : '',
1128
- subLabel: drawer ? drawer.getAttribute('sub-label') || '' : '',
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
- api.setDrawerOpen = function (open) {
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
  };
@@ -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: drawer ? drawer.getAttribute('label') || '' : '',
1128
- subLabel: drawer ? drawer.getAttribute('sub-label') || '' : '',
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
- api.setDrawerOpen = function (open) {
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.201",
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": "00AD4846E4EDC1BD6F1BB8D6A01B704FBB514DFDB7FBA1623B29ED48AEF1637E"
381
+ "buildHash": "9E842BD0A69B8E03F2365076319BF3A8CE38F063FA863C0051F528FDFF11A722"
382
382
  }