@stack-spot/portal-layout 1.0.2 → 1.1.1

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 (68) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/Layout.d.ts +2 -2
  3. package/dist/Layout.js +1 -1
  4. package/dist/LayoutOverlayManager.js +6 -6
  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/Toaster.d.ts +2 -2
  14. package/dist/components/Toaster.js +1 -1
  15. package/dist/components/UserMenu.d.ts +1 -1
  16. package/dist/components/UserMenu.d.ts.map +1 -1
  17. package/dist/components/UserMenu.js +44 -42
  18. package/dist/components/UserMenu.js.map +1 -1
  19. package/dist/components/error/ErrorBoundary.d.ts +1 -1
  20. package/dist/components/error/ErrorBoundary.js +1 -1
  21. package/dist/components/error/SilentErrorBoundary.d.ts +1 -1
  22. package/dist/components/error/SilentErrorBoundary.js +1 -1
  23. package/dist/components/menu/MenuContent.d.ts +5 -5
  24. package/dist/components/menu/MenuContent.d.ts.map +1 -1
  25. package/dist/components/menu/MenuContent.js +126 -124
  26. package/dist/components/menu/MenuContent.js.map +1 -1
  27. package/dist/components/menu/MenuSections.d.ts +8 -1
  28. package/dist/components/menu/MenuSections.d.ts.map +1 -1
  29. package/dist/components/menu/MenuSections.js +14 -2
  30. package/dist/components/menu/MenuSections.js.map +1 -1
  31. package/dist/components/menu/PageSelector.d.ts +1 -1
  32. package/dist/components/menu/PageSelector.js +69 -69
  33. package/dist/components/tour/PortalSwitcherStep.js +1 -1
  34. package/dist/components/user-menu-manager.d.ts +13 -0
  35. package/dist/components/user-menu-manager.d.ts.map +1 -0
  36. package/dist/components/user-menu-manager.js +36 -0
  37. package/dist/components/user-menu-manager.js.map +1 -0
  38. package/dist/layout.css +477 -477
  39. package/dist/toaster.js +1 -1
  40. package/package.json +9 -6
  41. package/readme.md +146 -146
  42. package/src/Layout.tsx +171 -171
  43. package/src/LayoutOverlayManager.tsx +464 -464
  44. package/src/components/Dialog.tsx +140 -140
  45. package/src/components/Header.tsx +62 -62
  46. package/src/components/OverlayContent.tsx +80 -80
  47. package/src/components/PortalSwitcher.tsx +161 -161
  48. package/src/components/Toaster.tsx +95 -95
  49. package/src/components/UserMenu.tsx +127 -124
  50. package/src/components/error/ErrorBoundary.tsx +47 -47
  51. package/src/components/error/ErrorManager.ts +47 -47
  52. package/src/components/error/SilentErrorBoundary.tsx +64 -64
  53. package/src/components/menu/MenuContent.tsx +272 -270
  54. package/src/components/menu/MenuSections.tsx +334 -320
  55. package/src/components/menu/PageSelector.tsx +164 -164
  56. package/src/components/menu/constants.ts +2 -2
  57. package/src/components/menu/types.ts +205 -205
  58. package/src/components/tour/PortalSwitcherStep.tsx +39 -39
  59. package/src/components/types.ts +1 -1
  60. package/src/components/user-menu-manager.ts +31 -0
  61. package/src/dictionary.ts +28 -28
  62. package/src/elements.ts +30 -30
  63. package/src/errors.ts +11 -11
  64. package/src/index.ts +14 -14
  65. package/src/layout.css +477 -477
  66. package/src/toaster.tsx +153 -153
  67. package/src/utils.ts +29 -29
  68. package/tsconfig.json +8 -8
package/dist/layout.css CHANGED
@@ -1,477 +1,477 @@
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
- overflow-y: auto;
249
- }
250
-
251
- #menuContentOverlay.visible {
252
- opacity: 1;
253
- pointer-events: auto;
254
- }
255
-
256
- #menuContent {
257
- width: var(--menu-content-width);
258
- transition: left ease-out var(--menu-animation-duration);
259
- background-color: var(--light-400);
260
- overflow: auto;
261
- position: absolute;
262
- top: 0;
263
- bottom: 0;
264
- left: calc(var(--menu-sections-width) - var(--menu-content-width) - 2px); /* 2px from border */
265
- border-top: 1px solid var(--light-300);
266
- }
267
-
268
- #menuContent .goBackLink {
269
- display: flex;
270
- flex-direction: row;
271
- align-items: center;
272
- margin: 20px;
273
- margin-bottom: 16px;
274
- gap: 6px;
275
- }
276
-
277
- #layout.menu-content-visible #menuContent {
278
- left: var(--menu-sections-width);
279
- }
280
-
281
- /* Overlays */
282
-
283
- #backdrop {
284
- position: fixed;
285
- top: 0;
286
- right: 0;
287
- bottom: 0;
288
- left: 0;
289
- background-color: var(--backdrop-color);
290
- opacity: 0;
291
- pointer-events: none;
292
- transition: opacity ease-in-out var(--modal-animation-duration);
293
- display: flex;
294
- flex-direction: column;
295
- align-items: center;
296
- justify-content: center;
297
- z-index: 3;
298
- }
299
-
300
- #backdrop.visible {
301
- opacity: 1;
302
- pointer-events: auto;
303
- }
304
-
305
- #modal {
306
- transform: scale(0);
307
- display: flex;
308
- flex-direction: column;
309
- transition: transform ease-in-out var(--modal-animation-duration);
310
- width: calc(100% - 60px);
311
- }
312
-
313
- #modal.fit-content {
314
- width: auto;
315
- }
316
-
317
- #modal.large {
318
- max-width: 1000px;
319
- }
320
-
321
- #modal.medium {
322
- max-width: 800px;
323
- }
324
-
325
- #modal.small {
326
- max-width: 600px;
327
- }
328
-
329
- #modal.visible {
330
- transform: scale(1);
331
- }
332
-
333
- #rightPanel {
334
- position: fixed;
335
- display: flex;
336
- flex-direction: column;
337
- top: 0;
338
- bottom: 0;
339
- transition: right var(--right-panel-animation-duration);
340
- background-color: var(--light-400);
341
- right: -800px;
342
- border-top-left-radius: 1rem;
343
- border-bottom-left-radius: 1rem;
344
- }
345
-
346
- #rightPanel.small {
347
- right: -400px;
348
- width: 400px;
349
- }
350
-
351
- #rightPanel.medium {
352
- right: -600px;
353
- width: 600px;
354
- }
355
-
356
- #rightPanel.large {
357
- right: -800px;
358
- width: 800px;
359
- }
360
-
361
- #rightPanel.visible {
362
- right: 0;
363
- }
364
-
365
- #bottomPanel {
366
- position: fixed;
367
- display: flex;
368
- flex-direction: column;
369
- bottom: -420px;
370
- left: 20px;
371
- height: 400px;
372
- transition: bottom 0.3s;
373
- }
374
-
375
- #bottomPanel.visible {
376
- bottom: 20px;
377
- }
378
-
379
- #bottomDialog {
380
- position: fixed;
381
- display: flex;
382
- flex-direction: row;
383
- bottom: -80px;
384
- left: 0;
385
- right: 0;
386
- height: 80px;
387
- transition: bottom 0.3s;
388
- background-color: var(--inverse-500);
389
- color: var(--inverse-contrastText);
390
- justify-content: center;
391
- align-items: center;
392
- gap: 16px;
393
- }
394
-
395
- #bottomDialog .btn-group {
396
- display: flex;
397
- flex-direction: row;
398
- gap: 8px;
399
- }
400
-
401
- #bottomDialog.visible {
402
- bottom: 0;
403
- }
404
-
405
- /* Overlay: toaster */
406
-
407
- .main-toaster h1 {
408
- font-size: 14px;
409
- font-weight: 500;
410
- margin: 0 0 8px 0;
411
- }
412
-
413
- .main-toaster p {
414
- margin: 0;
415
- font-size: 12px;
416
- }
417
-
418
- .main-toaster .toast-body {
419
- align-items: start;
420
- }
421
-
422
- .main-toaster .Toastify__toast-icon {
423
- width: auto;
424
- }
425
-
426
- .main-toaster .Toastify__toast-icon svg {
427
- width: 100%;
428
- height: 100%;
429
- }
430
-
431
-
432
- /* Other */
433
-
434
- svg path.stackspot-text {
435
- fill: var(--light-contrastText)
436
- }
437
-
438
- a {
439
- color: var(--light-contrastText);
440
- text-decoration: none;
441
- cursor: pointer;
442
- }
443
-
444
- ul {
445
- list-style: none;
446
- margin: 0;
447
- padding: 0;
448
- }
449
-
450
- i {
451
- fill: var(--light-contrastText);
452
- }
453
-
454
- /* Accessibility */
455
- #accessibilityAnnouncer {
456
- position: fixed;
457
- width: 0;
458
- height: 0;
459
- overflow: hidden;
460
- }
461
-
462
- #menuSections .section-submenu {
463
- position: relative;
464
- }
465
-
466
- #menuSections .section-submenu-icon {
467
- opacity: 0;
468
- position: absolute;
469
- top: 27%;
470
- right: 10px;
471
- background-color: inherit;
472
- z-index: 1;
473
- }
474
-
475
- #menuSections .section-submenu-icon:focus-visible {
476
- opacity: 1;
477
- }
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
+ overflow-y: auto;
249
+ }
250
+
251
+ #menuContentOverlay.visible {
252
+ opacity: 1;
253
+ pointer-events: auto;
254
+ }
255
+
256
+ #menuContent {
257
+ width: var(--menu-content-width);
258
+ transition: left ease-out var(--menu-animation-duration);
259
+ background-color: var(--light-400);
260
+ overflow: auto;
261
+ position: absolute;
262
+ top: 0;
263
+ bottom: 0;
264
+ left: calc(var(--menu-sections-width) - var(--menu-content-width) - 2px); /* 2px from border */
265
+ border-top: 1px solid var(--light-300);
266
+ }
267
+
268
+ #menuContent .goBackLink {
269
+ display: flex;
270
+ flex-direction: row;
271
+ align-items: center;
272
+ margin: 20px;
273
+ margin-bottom: 16px;
274
+ gap: 6px;
275
+ }
276
+
277
+ #layout.menu-content-visible #menuContent {
278
+ left: var(--menu-sections-width);
279
+ }
280
+
281
+ /* Overlays */
282
+
283
+ #backdrop {
284
+ position: fixed;
285
+ top: 0;
286
+ right: 0;
287
+ bottom: 0;
288
+ left: 0;
289
+ background-color: var(--backdrop-color);
290
+ opacity: 0;
291
+ pointer-events: none;
292
+ transition: opacity ease-in-out var(--modal-animation-duration);
293
+ display: flex;
294
+ flex-direction: column;
295
+ align-items: center;
296
+ justify-content: center;
297
+ z-index: 3;
298
+ }
299
+
300
+ #backdrop.visible {
301
+ opacity: 1;
302
+ pointer-events: auto;
303
+ }
304
+
305
+ #modal {
306
+ transform: scale(0);
307
+ display: flex;
308
+ flex-direction: column;
309
+ transition: transform ease-in-out var(--modal-animation-duration);
310
+ width: calc(100% - 60px);
311
+ }
312
+
313
+ #modal.fit-content {
314
+ width: auto;
315
+ }
316
+
317
+ #modal.large {
318
+ max-width: 1000px;
319
+ }
320
+
321
+ #modal.medium {
322
+ max-width: 800px;
323
+ }
324
+
325
+ #modal.small {
326
+ max-width: 600px;
327
+ }
328
+
329
+ #modal.visible {
330
+ transform: scale(1);
331
+ }
332
+
333
+ #rightPanel {
334
+ position: fixed;
335
+ display: flex;
336
+ flex-direction: column;
337
+ top: 0;
338
+ bottom: 0;
339
+ transition: right var(--right-panel-animation-duration);
340
+ background-color: var(--light-400);
341
+ right: -800px;
342
+ border-top-left-radius: 1rem;
343
+ border-bottom-left-radius: 1rem;
344
+ }
345
+
346
+ #rightPanel.small {
347
+ right: -400px;
348
+ width: 400px;
349
+ }
350
+
351
+ #rightPanel.medium {
352
+ right: -600px;
353
+ width: 600px;
354
+ }
355
+
356
+ #rightPanel.large {
357
+ right: -800px;
358
+ width: 800px;
359
+ }
360
+
361
+ #rightPanel.visible {
362
+ right: 0;
363
+ }
364
+
365
+ #bottomPanel {
366
+ position: fixed;
367
+ display: flex;
368
+ flex-direction: column;
369
+ bottom: -420px;
370
+ left: 20px;
371
+ height: 400px;
372
+ transition: bottom 0.3s;
373
+ }
374
+
375
+ #bottomPanel.visible {
376
+ bottom: 20px;
377
+ }
378
+
379
+ #bottomDialog {
380
+ position: fixed;
381
+ display: flex;
382
+ flex-direction: row;
383
+ bottom: -80px;
384
+ left: 0;
385
+ right: 0;
386
+ height: 80px;
387
+ transition: bottom 0.3s;
388
+ background-color: var(--inverse-500);
389
+ color: var(--inverse-contrastText);
390
+ justify-content: center;
391
+ align-items: center;
392
+ gap: 16px;
393
+ }
394
+
395
+ #bottomDialog .btn-group {
396
+ display: flex;
397
+ flex-direction: row;
398
+ gap: 8px;
399
+ }
400
+
401
+ #bottomDialog.visible {
402
+ bottom: 0;
403
+ }
404
+
405
+ /* Overlay: toaster */
406
+
407
+ .main-toaster h1 {
408
+ font-size: 14px;
409
+ font-weight: 500;
410
+ margin: 0 0 8px 0;
411
+ }
412
+
413
+ .main-toaster p {
414
+ margin: 0;
415
+ font-size: 12px;
416
+ }
417
+
418
+ .main-toaster .toast-body {
419
+ align-items: start;
420
+ }
421
+
422
+ .main-toaster .Toastify__toast-icon {
423
+ width: auto;
424
+ }
425
+
426
+ .main-toaster .Toastify__toast-icon svg {
427
+ width: 100%;
428
+ height: 100%;
429
+ }
430
+
431
+
432
+ /* Other */
433
+
434
+ svg path.stackspot-text {
435
+ fill: var(--light-contrastText)
436
+ }
437
+
438
+ a {
439
+ color: var(--light-contrastText);
440
+ text-decoration: none;
441
+ cursor: pointer;
442
+ }
443
+
444
+ ul {
445
+ list-style: none;
446
+ margin: 0;
447
+ padding: 0;
448
+ }
449
+
450
+ i {
451
+ fill: var(--light-contrastText);
452
+ }
453
+
454
+ /* Accessibility */
455
+ #accessibilityAnnouncer {
456
+ position: fixed;
457
+ width: 0;
458
+ height: 0;
459
+ overflow: hidden;
460
+ }
461
+
462
+ #menuSections .section-submenu {
463
+ position: relative;
464
+ }
465
+
466
+ #menuSections .section-submenu-icon {
467
+ opacity: 0;
468
+ position: absolute;
469
+ top: 27%;
470
+ right: 10px;
471
+ background-color: inherit;
472
+ z-index: 1;
473
+ }
474
+
475
+ #menuSections .section-submenu-icon:focus-visible {
476
+ opacity: 1;
477
+ }