@stack-spot/portal-layout 0.0.53 → 0.0.54

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