@stack-spot/portal-layout 0.0.49 → 0.0.51

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 (112) hide show
  1. package/dist/Layout.d.ts +5 -4
  2. package/dist/Layout.d.ts.map +1 -1
  3. package/dist/Layout.js +4 -3
  4. package/dist/Layout.js.map +1 -1
  5. package/dist/LayoutOverlayManager.js +6 -6
  6. package/dist/components/Dialog.d.ts +1 -1
  7. package/dist/components/Dialog.js +1 -1
  8. package/dist/components/Header.d.ts +1 -1
  9. package/dist/components/Header.d.ts.map +1 -1
  10. package/dist/components/Header.js +8 -4
  11. package/dist/components/Header.js.map +1 -1
  12. package/dist/components/OverlayContent.d.ts +1 -1
  13. package/dist/components/OverlayContent.js +20 -20
  14. package/dist/components/PortalSwitcher.d.ts +1 -1
  15. package/dist/components/PortalSwitcher.js +54 -54
  16. package/dist/components/SelectionList.d.ts +1 -1
  17. package/dist/components/SelectionList.d.ts.map +1 -1
  18. package/dist/components/SelectionList.js +61 -58
  19. package/dist/components/SelectionList.js.map +1 -1
  20. package/dist/components/Toaster.d.ts +1 -1
  21. package/dist/components/Toaster.js +1 -1
  22. package/dist/components/UserMenu.d.ts +1 -1
  23. package/dist/components/UserMenu.js +42 -42
  24. package/dist/components/UserMenu.js.map +1 -1
  25. package/dist/components/error/ErrorBoundary.d.ts +1 -1
  26. package/dist/components/error/ErrorBoundary.js +1 -1
  27. package/dist/components/error/ErrorDescriptor.d.ts +12 -0
  28. package/dist/components/error/ErrorDescriptor.d.ts.map +1 -0
  29. package/dist/components/error/ErrorDescriptor.js +17 -0
  30. package/dist/components/error/ErrorDescriptor.js.map +1 -0
  31. package/dist/components/error/ErrorFeedback.d.ts +1 -1
  32. package/dist/components/error/ErrorFeedback.js +1 -1
  33. package/dist/components/error/SilentErrorBoundary.d.ts +1 -1
  34. package/dist/components/error/SilentErrorBoundary.js +1 -1
  35. package/dist/components/menu/MenuContent.d.ts +8 -12
  36. package/dist/components/menu/MenuContent.d.ts.map +1 -1
  37. package/dist/components/menu/MenuContent.js +151 -148
  38. package/dist/components/menu/MenuContent.js.map +1 -1
  39. package/dist/components/menu/MenuSections.d.ts +1 -1
  40. package/dist/components/menu/MenuSections.d.ts.map +1 -1
  41. package/dist/components/menu/MenuSections.js +7 -5
  42. package/dist/components/menu/MenuSections.js.map +1 -1
  43. package/dist/components/menu/PageSelector.d.ts +1 -1
  44. package/dist/components/menu/PageSelector.d.ts.map +1 -1
  45. package/dist/components/menu/PageSelector.js +68 -66
  46. package/dist/components/menu/PageSelector.js.map +1 -1
  47. package/dist/components/menu/useCheckTextOverflow.d.ts +6 -0
  48. package/dist/components/menu/useCheckTextOverflow.d.ts.map +1 -0
  49. package/dist/components/menu/useCheckTextOverflow.js +20 -0
  50. package/dist/components/menu/useCheckTextOverflow.js.map +1 -0
  51. package/dist/layout-context.d.ts +10 -0
  52. package/dist/layout-context.d.ts.map +1 -0
  53. package/dist/layout-context.js +11 -0
  54. package/dist/layout-context.js.map +1 -0
  55. package/dist/layout.css +465 -465
  56. package/dist/svg/AI.d.ts +1 -1
  57. package/dist/svg/AI.js +1 -1
  58. package/dist/svg/EDP.d.ts +1 -1
  59. package/dist/svg/EDP.js +1 -1
  60. package/dist/svg/Forbidden.d.ts +1 -1
  61. package/dist/svg/Forbidden.js +1 -1
  62. package/dist/svg/HUB.d.ts +1 -1
  63. package/dist/svg/HUB.js +1 -1
  64. package/dist/svg/Logo.d.ts +1 -1
  65. package/dist/svg/Logo.js +1 -1
  66. package/dist/svg/NotFound.d.ts +1 -1
  67. package/dist/svg/NotFound.js +1 -1
  68. package/dist/svg/ServerError.d.ts +1 -1
  69. package/dist/svg/ServerError.js +1 -1
  70. package/dist/svg/Unauthenticated.d.ts +1 -1
  71. package/dist/svg/Unauthenticated.js +1 -1
  72. package/dist/toaster.js +2 -2
  73. package/dist/toaster.js.map +1 -1
  74. package/package.json +2 -2
  75. package/src/Layout.tsx +106 -103
  76. package/src/LayoutOverlayManager.tsx +273 -273
  77. package/src/components/Dialog.tsx +93 -93
  78. package/src/components/Header.tsx +34 -29
  79. package/src/components/OverlayContent.tsx +58 -58
  80. package/src/components/PortalSwitcher.tsx +147 -147
  81. package/src/components/SelectionList.tsx +272 -268
  82. package/src/components/Toaster.tsx +16 -16
  83. package/src/components/UserMenu.tsx +111 -111
  84. package/src/components/error/ErrorBoundary.tsx +38 -38
  85. package/src/components/error/ErrorFeedback.tsx +114 -114
  86. package/src/components/error/ErrorManager.ts +31 -31
  87. package/src/components/error/SilentErrorBoundary.tsx +54 -54
  88. package/src/components/menu/MenuContent.tsx +296 -293
  89. package/src/components/menu/MenuSections.tsx +270 -268
  90. package/src/components/menu/PageSelector.tsx +154 -152
  91. package/src/components/menu/constants.ts +2 -2
  92. package/src/components/menu/types.ts +112 -112
  93. package/src/components/menu/use-check-text-overflow.tsx +26 -26
  94. package/src/components/menu/use-keyboard-controls.tsx +70 -70
  95. package/src/components/types.ts +15 -15
  96. package/src/dictionary.ts +25 -25
  97. package/src/elements.ts +24 -24
  98. package/src/errors.ts +11 -11
  99. package/src/index.ts +17 -17
  100. package/src/layout-context.tsx +22 -0
  101. package/src/layout.css +465 -465
  102. package/src/svg/AI.tsx +37 -37
  103. package/src/svg/EDP.tsx +35 -35
  104. package/src/svg/Forbidden.tsx +22 -22
  105. package/src/svg/HUB.tsx +35 -35
  106. package/src/svg/Logo.tsx +35 -35
  107. package/src/svg/NotFound.tsx +16 -16
  108. package/src/svg/ServerError.tsx +33 -33
  109. package/src/svg/Unauthenticated.tsx +16 -16
  110. package/src/toaster.tsx +76 -76
  111. package/src/utils.ts +114 -114
  112. package/tsconfig.json +8 -8
package/src/layout.css CHANGED
@@ -1,465 +1,465 @@
1
- /* Scrollbars */
2
-
3
- ::-webkit-scrollbar-track {
4
- background-color: transparent;
5
- }
6
-
7
- ::-webkit-scrollbar {
8
- width: 0.25rem;
9
- height: 0.5rem;
10
- background-color: transparent;
11
- }
12
-
13
- ::-webkit-scrollbar-thumb {
14
- background-color: var(--light-600);
15
- }
16
-
17
- /* Layout */
18
-
19
- html {
20
- display: flex;
21
- flex-direction: column;
22
- height: 100%;
23
- }
24
-
25
- body {
26
- margin: 0;
27
- display: flex;
28
- flex-direction: column;
29
- flex: 1;
30
- background: var(--light-400);
31
- font: var(--font);
32
- color: var(--light-contrastText);
33
- }
34
-
35
- #root, #layout {
36
- display: flex;
37
- flex-direction: column;
38
- flex: 1;
39
- }
40
-
41
- #layout {
42
- --header-height: 56px;
43
- --menu-sections-width: 135px;
44
- --menu-content-width: 240px;
45
- --menu-item-height: 74px;
46
- --modal-animation-duration: 0.3s;
47
- --right-panel-animation-duration: 0.3s;
48
- --menu-animation-duration: 0.3s;
49
- --menu-overlay-width: 240px;
50
- --toastify-font-family: 'Roboto', sans-serif;
51
- }
52
-
53
- #layout:not(.menu-compact) {
54
- --menu-sections-width: 135px;
55
- --menu-item-height: 56px;
56
- }
57
-
58
- #layout.menu-compact {
59
- --menu-sections-width: 56px;
60
- --menu-item-height: 56px;
61
- }
62
-
63
- #layout.no-menu-sections {
64
- --menu-sections-width: 0px;
65
- }
66
-
67
- #header {
68
- height: var(--header-height);
69
- padding: 0 24px;
70
- align-items: center;
71
- flex-direction: row;
72
- display: flex;
73
- justify-content: space-between;
74
- position: fixed;
75
- left: 0;
76
- right: 0;
77
- top: 0;
78
- background-color: var(--light-400);
79
- }
80
-
81
- #page {
82
- position: absolute;
83
- top: var(--header-height);
84
- left: var(--menu-sections-width);
85
- right: 0;
86
- bottom: 0;
87
- overflow-y: auto;
88
- display: flex;
89
- flex-direction: column;
90
- background-color: var(--light-300);
91
- align-items: center;
92
- padding: 24px;
93
- transition: left ease-in-out var(--menu-animation-duration);
94
- }
95
-
96
- #layout.menu-content-visible #page {
97
- left: calc(var(--menu-sections-width) + var(--menu-content-width));
98
- }
99
-
100
- #layout.no-menu-sections:not(.menu-content-visible) #page {
101
- border-top-left-radius: 0;
102
- }
103
-
104
- #content {
105
- width: 100%;
106
- max-width: 1144px;
107
- display: flex;
108
- flex-direction: column;
109
- }
110
-
111
- /* Menu */
112
-
113
- #menu {
114
- position: fixed;
115
- display: flex;
116
- flex-direction: row;
117
- top: var(--header-height);
118
- bottom: 0;
119
- }
120
-
121
- #menu svg {
122
- fill: var(--light-contrastText);
123
- }
124
-
125
- #menu .item-row-group svg {
126
- fill: var(--light-700);
127
- }
128
-
129
- #menu .toggle .expand {
130
- fill: var(--primary-500);
131
- }
132
-
133
- #menu .toggle .expand,
134
- #menu .toggle .collapse {
135
- position: absolute;
136
- transition: opacity 0.3s;
137
- }
138
-
139
- #menu .toggle .expand,
140
- #layout.menu-compact .toggle .collapse {
141
- opacity: 0;
142
- }
143
-
144
- #menu .toggle .collapse,
145
- #layout.menu-compact .toggle .expand {
146
- opacity: 1;
147
- }
148
-
149
- #layout .section-label {
150
- line-height: 0.875rem;
151
- }
152
-
153
- #layout.menu-compact .section-label {
154
- display: none;
155
- }
156
-
157
- #layout:not(.menu-compact) .section-label {
158
- display: block;
159
- }
160
-
161
- #menuSections {
162
- width: var(--menu-sections-width);
163
- display: flex;
164
- flex-direction: column;
165
- padding: 0 0 10px;
166
- justify-content: space-between;
167
- background-color: var(--light-400);
168
- position: relative;
169
- border-right: 1px solid var(--light-300);
170
- border-top: 1px solid var(--light-300);
171
- }
172
-
173
- #menuSections .sections-footer {
174
- padding: 16px;
175
- }
176
-
177
- #menuSections .toggle,
178
- #menuSections > ul li a {
179
- background: transparent;
180
- border: none;
181
- outline: none;
182
- width: var(--menu-sections-width);
183
- height: var(--menu-item-height);
184
- display: flex;
185
- flex-direction: column;
186
- gap: 10px;
187
- align-items: flex-start;
188
- justify-content: center;
189
- transition: background-color 0.2s;
190
- cursor: pointer;
191
- position: relative;
192
- z-index: 2;
193
- }
194
-
195
- #menuSections > ul li a:before {
196
- content: '';
197
- position: absolute;
198
- width: 2px;
199
- height: 24px;
200
- transform: scaleY(0);
201
- transition: transform ease-in 0.2s;
202
- left: 0;
203
- }
204
-
205
- #menuSections > ul li.active a {
206
- background-color: var(--light-500);
207
- border-right: 1px solid var(--light-300);
208
- }
209
-
210
- #menuSections > ul li.active a:before {
211
- transform: scaleY(1);
212
- background-color: var(--primary-500);
213
- }
214
-
215
- #menuSections .toggle:hover,
216
- #menuSections > ul li a:hover,
217
- #menuSections .toggle:focus,
218
- #menuSections > ul li a:focus {
219
- background: var(--light-500);
220
- border-right: 1px solid var(--light-300);
221
- }
222
-
223
- #menuSections > ul li:not(.active) a:hover:before {
224
- transform: scaleY(1);
225
- background-color: var(--light-contrastText);
226
- }
227
-
228
- #menuSections .toggle i {
229
- position: relative;
230
- }
231
-
232
- #menuContentOverlay {
233
- width: var(--menu-overlay-width);
234
- position: fixed;
235
- top: calc(var(--header-height));
236
- left: calc(var(--menu-sections-width));
237
- bottom: 1px;
238
- background-color: var(--light-500);
239
- border-top: 1px solid var(--light-300);
240
- display: flex;
241
- flex-direction: column;
242
- overflow: hidden;
243
- opacity: 0;
244
- pointer-events: none;
245
- z-index: 1;
246
- transition: opacity 0.3s;
247
- }
248
-
249
- #menuContentOverlay.visible {
250
- opacity: 1;
251
- pointer-events: auto;
252
- }
253
-
254
- #menuContentOverlay > div {
255
- flex: 1;
256
- overflow: auto;
257
- }
258
-
259
- #menuContent {
260
- width: var(--menu-content-width);
261
- transition: left ease-out var(--menu-animation-duration);
262
- background-color: var(--light-400);
263
- overflow: auto;
264
- position: absolute;
265
- top: 0;
266
- bottom: 0;
267
- left: calc(var(--menu-sections-width) - var(--menu-content-width) - 2px); /* 2px from border */
268
- border-top: 1px solid var(--light-300);
269
- }
270
-
271
- #layout.menu-content-visible #menuContent {
272
- left: var(--menu-sections-width);
273
- }
274
-
275
- /* Overlays */
276
-
277
- #backdrop {
278
- position: fixed;
279
- top: 0;
280
- right: 0;
281
- bottom: 0;
282
- left: 0;
283
- background-color: var(--backdrop-color);
284
- opacity: 0;
285
- pointer-events: none;
286
- transition: opacity ease-in-out var(--modal-animation-duration);
287
- display: flex;
288
- flex-direction: column;
289
- align-items: center;
290
- justify-content: center;
291
- }
292
-
293
- #backdrop.visible {
294
- opacity: 1;
295
- pointer-events: auto;
296
- }
297
-
298
- #modal {
299
- transform: scale(0);
300
- display: flex;
301
- flex-direction: column;
302
- transition: transform ease-in-out var(--modal-animation-duration);
303
- width: calc(100% - 60px);
304
- }
305
-
306
- #modal.fit-content {
307
- width: auto;
308
- }
309
-
310
- #modal.large {
311
- max-width: 1000px;
312
- }
313
-
314
- #modal.medium {
315
- max-width: 800px;
316
- }
317
-
318
- #modal.small {
319
- max-width: 600px;
320
- }
321
-
322
- #modal.visible {
323
- transform: scale(1);
324
- }
325
-
326
- #rightPanel {
327
- position: fixed;
328
- display: flex;
329
- flex-direction: column;
330
- top: 0;
331
- bottom: 0;
332
- transition: right var(--right-panel-animation-duration);
333
- background-color: var(--light-400);
334
- right: -800px;
335
- border-top-left-radius: 1rem;
336
- border-bottom-left-radius: 1rem;
337
- }
338
-
339
- #rightPanel.small {
340
- right: -400px;
341
- width: 400px;
342
- }
343
-
344
- #rightPanel.medium {
345
- right: -600px;
346
- width: 600px;
347
- }
348
-
349
- #rightPanel.large {
350
- right: -800px;
351
- width: 800px;
352
- }
353
-
354
- #rightPanel.visible {
355
- right: 0;
356
- }
357
-
358
- #bottomPanel {
359
- position: fixed;
360
- display: flex;
361
- flex-direction: column;
362
- bottom: -420px;
363
- left: 20px;
364
- height: 400px;
365
- transition: bottom 0.3s;
366
- }
367
-
368
- #bottomPanel.visible {
369
- bottom: 20px;
370
- }
371
-
372
- #bottomDialog {
373
- position: fixed;
374
- display: flex;
375
- flex-direction: row;
376
- bottom: -80px;
377
- left: 0;
378
- right: 0;
379
- height: 80px;
380
- transition: bottom 0.3s;
381
- background-color: var(--inverse-500);
382
- color: var(--inverse-contrastText);
383
- justify-content: center;
384
- align-items: center;
385
- gap: 16px;
386
- }
387
-
388
- #bottomDialog .btn-group {
389
- display: flex;
390
- flex-direction: row;
391
- gap: 8px;
392
- }
393
-
394
- #bottomDialog.visible {
395
- bottom: 0;
396
- }
397
-
398
- /* Overlay: toaster */
399
-
400
- .main-toaster h1 {
401
- font-size: 14px;
402
- font-weight: 500;
403
- margin: 0 0 8px 0;
404
- }
405
-
406
- .main-toaster p {
407
- margin: 0;
408
- font-size: 12px;
409
- }
410
-
411
- .main-toaster .toast-body {
412
- align-items: start;
413
- }
414
-
415
- .main-toaster .Toastify__toast-icon {
416
- margin-top: 2px;
417
- width: auto;
418
- }
419
-
420
- /* Other */
421
-
422
- svg path.stackspot-text {
423
- fill: var(--light-contrastText)
424
- }
425
-
426
- a {
427
- color: var(--light-contrastText);
428
- text-decoration: none;
429
- cursor: pointer;
430
- }
431
-
432
- ul {
433
- list-style: none;
434
- margin: 0;
435
- padding: 0;
436
- }
437
-
438
- i {
439
- fill: var(--light-contrastText);
440
- }
441
-
442
- /* Accessibility */
443
- #accessibilityAnnouncer {
444
- position: fixed;
445
- width: 0;
446
- height: 0;
447
- overflow: hidden;
448
- }
449
-
450
- #menuSections .section-submenu {
451
- position: relative;
452
- }
453
-
454
- #menuSections .section-submenu-icon {
455
- opacity: 0;
456
- position: absolute;
457
- top: 27%;
458
- right: 10px;
459
- background-color: inherit;
460
- z-index: 1;
461
- }
462
-
463
- #menuSections .section-submenu-icon:focus-visible {
464
- opacity: 1;
465
- }
1
+ /* Scrollbars */
2
+
3
+ ::-webkit-scrollbar-track {
4
+ background-color: transparent;
5
+ }
6
+
7
+ ::-webkit-scrollbar {
8
+ width: 0.25rem;
9
+ height: 0.5rem;
10
+ background-color: transparent;
11
+ }
12
+
13
+ ::-webkit-scrollbar-thumb {
14
+ background-color: var(--light-600);
15
+ }
16
+
17
+ /* Layout */
18
+
19
+ html {
20
+ display: flex;
21
+ flex-direction: column;
22
+ height: 100%;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ display: flex;
28
+ flex-direction: column;
29
+ flex: 1;
30
+ background: var(--light-400);
31
+ font: var(--font);
32
+ color: var(--light-contrastText);
33
+ }
34
+
35
+ #root, #layout {
36
+ display: flex;
37
+ flex-direction: column;
38
+ flex: 1;
39
+ }
40
+
41
+ #layout {
42
+ --header-height: 56px;
43
+ --menu-sections-width: 135px;
44
+ --menu-content-width: 240px;
45
+ --menu-item-height: 74px;
46
+ --modal-animation-duration: 0.3s;
47
+ --right-panel-animation-duration: 0.3s;
48
+ --menu-animation-duration: 0.3s;
49
+ --menu-overlay-width: 240px;
50
+ --toastify-font-family: 'Roboto', sans-serif;
51
+ }
52
+
53
+ #layout:not(.menu-compact) {
54
+ --menu-sections-width: 135px;
55
+ --menu-item-height: 56px;
56
+ }
57
+
58
+ #layout.menu-compact {
59
+ --menu-sections-width: 56px;
60
+ --menu-item-height: 56px;
61
+ }
62
+
63
+ #layout.no-menu-sections {
64
+ --menu-sections-width: 0px;
65
+ }
66
+
67
+ #header {
68
+ height: var(--header-height);
69
+ padding: 0 24px;
70
+ align-items: center;
71
+ flex-direction: row;
72
+ display: flex;
73
+ justify-content: space-between;
74
+ position: fixed;
75
+ left: 0;
76
+ right: 0;
77
+ top: 0;
78
+ background-color: var(--light-400);
79
+ }
80
+
81
+ #page {
82
+ position: absolute;
83
+ top: var(--header-height);
84
+ left: var(--menu-sections-width);
85
+ right: 0;
86
+ bottom: 0;
87
+ overflow-y: auto;
88
+ display: flex;
89
+ flex-direction: column;
90
+ background-color: var(--light-300);
91
+ align-items: center;
92
+ padding: 24px;
93
+ transition: left ease-in-out var(--menu-animation-duration);
94
+ }
95
+
96
+ #layout.menu-content-visible #page {
97
+ left: calc(var(--menu-sections-width) + var(--menu-content-width));
98
+ }
99
+
100
+ #layout.no-menu-sections:not(.menu-content-visible) #page {
101
+ border-top-left-radius: 0;
102
+ }
103
+
104
+ #content {
105
+ width: 100%;
106
+ max-width: 1144px;
107
+ display: flex;
108
+ flex-direction: column;
109
+ }
110
+
111
+ /* Menu */
112
+
113
+ #menu {
114
+ position: fixed;
115
+ display: flex;
116
+ flex-direction: row;
117
+ top: var(--header-height);
118
+ bottom: 0;
119
+ }
120
+
121
+ #menu svg {
122
+ fill: var(--light-contrastText);
123
+ }
124
+
125
+ #menu .item-row-group svg {
126
+ fill: var(--light-700);
127
+ }
128
+
129
+ #menu .toggle .expand {
130
+ fill: var(--primary-500);
131
+ }
132
+
133
+ #menu .toggle .expand,
134
+ #menu .toggle .collapse {
135
+ position: absolute;
136
+ transition: opacity 0.3s;
137
+ }
138
+
139
+ #menu .toggle .expand,
140
+ #layout.menu-compact .toggle .collapse {
141
+ opacity: 0;
142
+ }
143
+
144
+ #menu .toggle .collapse,
145
+ #layout.menu-compact .toggle .expand {
146
+ opacity: 1;
147
+ }
148
+
149
+ #layout .section-label {
150
+ line-height: 0.875rem;
151
+ }
152
+
153
+ #layout.menu-compact .section-label {
154
+ display: none;
155
+ }
156
+
157
+ #layout:not(.menu-compact) .section-label {
158
+ display: block;
159
+ }
160
+
161
+ #menuSections {
162
+ width: var(--menu-sections-width);
163
+ display: flex;
164
+ flex-direction: column;
165
+ padding: 0 0 10px;
166
+ justify-content: space-between;
167
+ background-color: var(--light-400);
168
+ position: relative;
169
+ border-right: 1px solid var(--light-300);
170
+ border-top: 1px solid var(--light-300);
171
+ }
172
+
173
+ #menuSections .sections-footer {
174
+ padding: 16px;
175
+ }
176
+
177
+ #menuSections .toggle,
178
+ #menuSections > ul li a {
179
+ background: transparent;
180
+ border: none;
181
+ outline: none;
182
+ width: var(--menu-sections-width);
183
+ height: var(--menu-item-height);
184
+ display: flex;
185
+ flex-direction: column;
186
+ gap: 10px;
187
+ align-items: flex-start;
188
+ justify-content: center;
189
+ transition: background-color 0.2s;
190
+ cursor: pointer;
191
+ position: relative;
192
+ z-index: 2;
193
+ }
194
+
195
+ #menuSections > ul li a:before {
196
+ content: '';
197
+ position: absolute;
198
+ width: 2px;
199
+ height: 24px;
200
+ transform: scaleY(0);
201
+ transition: transform ease-in 0.2s;
202
+ left: 0;
203
+ }
204
+
205
+ #menuSections > ul li.active a {
206
+ background-color: var(--light-500);
207
+ border-right: 1px solid var(--light-300);
208
+ }
209
+
210
+ #menuSections > ul li.active a:before {
211
+ transform: scaleY(1);
212
+ background-color: var(--primary-500);
213
+ }
214
+
215
+ #menuSections .toggle:hover,
216
+ #menuSections > ul li a:hover,
217
+ #menuSections .toggle:focus,
218
+ #menuSections > ul li a:focus {
219
+ background: var(--light-500);
220
+ border-right: 1px solid var(--light-300);
221
+ }
222
+
223
+ #menuSections > ul li:not(.active) a:hover:before {
224
+ transform: scaleY(1);
225
+ background-color: var(--light-contrastText);
226
+ }
227
+
228
+ #menuSections .toggle i {
229
+ position: relative;
230
+ }
231
+
232
+ #menuContentOverlay {
233
+ width: var(--menu-overlay-width);
234
+ position: fixed;
235
+ top: calc(var(--header-height));
236
+ left: calc(var(--menu-sections-width));
237
+ bottom: 1px;
238
+ background-color: var(--light-500);
239
+ border-top: 1px solid var(--light-300);
240
+ display: flex;
241
+ flex-direction: column;
242
+ overflow: hidden;
243
+ opacity: 0;
244
+ pointer-events: none;
245
+ z-index: 1;
246
+ transition: opacity 0.3s;
247
+ }
248
+
249
+ #menuContentOverlay.visible {
250
+ opacity: 1;
251
+ pointer-events: auto;
252
+ }
253
+
254
+ #menuContentOverlay > div {
255
+ flex: 1;
256
+ overflow: auto;
257
+ }
258
+
259
+ #menuContent {
260
+ width: var(--menu-content-width);
261
+ transition: left ease-out var(--menu-animation-duration);
262
+ background-color: var(--light-400);
263
+ overflow: auto;
264
+ position: absolute;
265
+ top: 0;
266
+ bottom: 0;
267
+ left: calc(var(--menu-sections-width) - var(--menu-content-width) - 2px); /* 2px from border */
268
+ border-top: 1px solid var(--light-300);
269
+ }
270
+
271
+ #layout.menu-content-visible #menuContent {
272
+ left: var(--menu-sections-width);
273
+ }
274
+
275
+ /* Overlays */
276
+
277
+ #backdrop {
278
+ position: fixed;
279
+ top: 0;
280
+ right: 0;
281
+ bottom: 0;
282
+ left: 0;
283
+ background-color: var(--backdrop-color);
284
+ opacity: 0;
285
+ pointer-events: none;
286
+ transition: opacity ease-in-out var(--modal-animation-duration);
287
+ display: flex;
288
+ flex-direction: column;
289
+ align-items: center;
290
+ justify-content: center;
291
+ }
292
+
293
+ #backdrop.visible {
294
+ opacity: 1;
295
+ pointer-events: auto;
296
+ }
297
+
298
+ #modal {
299
+ transform: scale(0);
300
+ display: flex;
301
+ flex-direction: column;
302
+ transition: transform ease-in-out var(--modal-animation-duration);
303
+ width: calc(100% - 60px);
304
+ }
305
+
306
+ #modal.fit-content {
307
+ width: auto;
308
+ }
309
+
310
+ #modal.large {
311
+ max-width: 1000px;
312
+ }
313
+
314
+ #modal.medium {
315
+ max-width: 800px;
316
+ }
317
+
318
+ #modal.small {
319
+ max-width: 600px;
320
+ }
321
+
322
+ #modal.visible {
323
+ transform: scale(1);
324
+ }
325
+
326
+ #rightPanel {
327
+ position: fixed;
328
+ display: flex;
329
+ flex-direction: column;
330
+ top: 0;
331
+ bottom: 0;
332
+ transition: right var(--right-panel-animation-duration);
333
+ background-color: var(--light-400);
334
+ right: -800px;
335
+ border-top-left-radius: 1rem;
336
+ border-bottom-left-radius: 1rem;
337
+ }
338
+
339
+ #rightPanel.small {
340
+ right: -400px;
341
+ width: 400px;
342
+ }
343
+
344
+ #rightPanel.medium {
345
+ right: -600px;
346
+ width: 600px;
347
+ }
348
+
349
+ #rightPanel.large {
350
+ right: -800px;
351
+ width: 800px;
352
+ }
353
+
354
+ #rightPanel.visible {
355
+ right: 0;
356
+ }
357
+
358
+ #bottomPanel {
359
+ position: fixed;
360
+ display: flex;
361
+ flex-direction: column;
362
+ bottom: -420px;
363
+ left: 20px;
364
+ height: 400px;
365
+ transition: bottom 0.3s;
366
+ }
367
+
368
+ #bottomPanel.visible {
369
+ bottom: 20px;
370
+ }
371
+
372
+ #bottomDialog {
373
+ position: fixed;
374
+ display: flex;
375
+ flex-direction: row;
376
+ bottom: -80px;
377
+ left: 0;
378
+ right: 0;
379
+ height: 80px;
380
+ transition: bottom 0.3s;
381
+ background-color: var(--inverse-500);
382
+ color: var(--inverse-contrastText);
383
+ justify-content: center;
384
+ align-items: center;
385
+ gap: 16px;
386
+ }
387
+
388
+ #bottomDialog .btn-group {
389
+ display: flex;
390
+ flex-direction: row;
391
+ gap: 8px;
392
+ }
393
+
394
+ #bottomDialog.visible {
395
+ bottom: 0;
396
+ }
397
+
398
+ /* Overlay: toaster */
399
+
400
+ .main-toaster h1 {
401
+ font-size: 14px;
402
+ font-weight: 500;
403
+ margin: 0 0 8px 0;
404
+ }
405
+
406
+ .main-toaster p {
407
+ margin: 0;
408
+ font-size: 12px;
409
+ }
410
+
411
+ .main-toaster .toast-body {
412
+ align-items: start;
413
+ }
414
+
415
+ .main-toaster .Toastify__toast-icon {
416
+ margin-top: 2px;
417
+ width: auto;
418
+ }
419
+
420
+ /* Other */
421
+
422
+ svg path.stackspot-text {
423
+ fill: var(--light-contrastText)
424
+ }
425
+
426
+ a {
427
+ color: var(--light-contrastText);
428
+ text-decoration: none;
429
+ cursor: pointer;
430
+ }
431
+
432
+ ul {
433
+ list-style: none;
434
+ margin: 0;
435
+ padding: 0;
436
+ }
437
+
438
+ i {
439
+ fill: var(--light-contrastText);
440
+ }
441
+
442
+ /* Accessibility */
443
+ #accessibilityAnnouncer {
444
+ position: fixed;
445
+ width: 0;
446
+ height: 0;
447
+ overflow: hidden;
448
+ }
449
+
450
+ #menuSections .section-submenu {
451
+ position: relative;
452
+ }
453
+
454
+ #menuSections .section-submenu-icon {
455
+ opacity: 0;
456
+ position: absolute;
457
+ top: 27%;
458
+ right: 10px;
459
+ background-color: inherit;
460
+ z-index: 1;
461
+ }
462
+
463
+ #menuSections .section-submenu-icon:focus-visible {
464
+ opacity: 1;
465
+ }