@sigmela/router 0.3.6 → 0.4.0

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 (118) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +2 -1
  3. package/README.md +108 -479
  4. package/dist/Router.d.ts +190 -0
  5. package/dist/Router.d.ts.map +1 -0
  6. package/dist/components/Modal.d.ts +56 -0
  7. package/dist/components/Modal.d.ts.map +1 -0
  8. package/dist/components/OverlayContentScope.d.ts +8 -0
  9. package/dist/components/OverlayContentScope.d.ts.map +1 -0
  10. package/dist/components/RouterCloseButton.d.ts +9 -0
  11. package/dist/components/RouterCloseButton.d.ts.map +1 -0
  12. package/dist/components/Sheet.d.ts +53 -0
  13. package/dist/components/Sheet.d.ts.map +1 -0
  14. package/dist/components/SheetSurface.d.ts +27 -0
  15. package/dist/components/SheetSurface.d.ts.map +1 -0
  16. package/dist/components/index.d.ts +4 -0
  17. package/dist/components/index.d.ts.map +1 -0
  18. package/dist/components/pageScrollLock.d.ts +3 -0
  19. package/dist/components/pageScrollLock.d.ts.map +1 -0
  20. package/dist/components/sheetDragEngine.d.ts +27 -0
  21. package/dist/components/sheetDragEngine.d.ts.map +1 -0
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +3649 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/navigationHistory.d.ts +17 -0
  27. package/dist/navigationHistory.d.ts.map +1 -0
  28. package/dist/router.css +971 -0
  29. package/dist/types.d.ts +3 -0
  30. package/dist/types.d.ts.map +1 -0
  31. package/dist/utils/id.d.ts +2 -0
  32. package/dist/utils/id.d.ts.map +1 -0
  33. package/package.json +69 -174
  34. package/lib/module/Drawer/Drawer.js +0 -250
  35. package/lib/module/Drawer/DrawerContext.js +0 -4
  36. package/lib/module/Drawer/DrawerIcon.web.js +0 -47
  37. package/lib/module/Drawer/RenderDrawer.native.js +0 -248
  38. package/lib/module/Drawer/RenderDrawer.web.js +0 -197
  39. package/lib/module/Drawer/useDrawer.js +0 -11
  40. package/lib/module/Navigation.js +0 -79
  41. package/lib/module/NavigationStack.js +0 -254
  42. package/lib/module/Router.js +0 -2171
  43. package/lib/module/RouterContext.js +0 -33
  44. package/lib/module/ScreenStack/ScreenStack.native.js +0 -3
  45. package/lib/module/ScreenStack/ScreenStack.web.js +0 -561
  46. package/lib/module/ScreenStack/ScreenStackContext.js +0 -21
  47. package/lib/module/ScreenStack/animationHelpers.js +0 -87
  48. package/lib/module/ScreenStack/index.js +0 -3
  49. package/lib/module/ScreenStackItem/ScreenStackItem.js +0 -70
  50. package/lib/module/ScreenStackItem/ScreenStackItem.types.js +0 -3
  51. package/lib/module/ScreenStackItem/ScreenStackItem.web.js +0 -171
  52. package/lib/module/ScreenStackItem/index.js +0 -3
  53. package/lib/module/ScreenStackSheetItem/ScreenStackSheetItem.native.js +0 -70
  54. package/lib/module/ScreenStackSheetItem/ScreenStackSheetItem.web.js +0 -5
  55. package/lib/module/ScreenStackSheetItem/index.js +0 -3
  56. package/lib/module/SplitView/RenderSplitView.native.js +0 -101
  57. package/lib/module/SplitView/RenderSplitView.web.js +0 -107
  58. package/lib/module/SplitView/SplitView.js +0 -97
  59. package/lib/module/SplitView/SplitViewContext.js +0 -4
  60. package/lib/module/SplitView/index.js +0 -5
  61. package/lib/module/SplitView/useSplitView.js +0 -11
  62. package/lib/module/StackRenderer.js +0 -42
  63. package/lib/module/TabBar/RenderTabBar.native.js +0 -418
  64. package/lib/module/TabBar/RenderTabBar.web.js +0 -218
  65. package/lib/module/TabBar/TabBar.js +0 -208
  66. package/lib/module/TabBar/TabBarContext.js +0 -4
  67. package/lib/module/TabBar/TabIcon.web.js +0 -47
  68. package/lib/module/TabBar/index.js +0 -6
  69. package/lib/module/TabBar/useTabBar.js +0 -11
  70. package/lib/module/TabBar/useTabBarHeight.js +0 -22
  71. package/lib/module/createController.js +0 -5
  72. package/lib/module/index.js +0 -15
  73. package/lib/module/navigationNode.js +0 -3
  74. package/lib/module/package.json +0 -1
  75. package/lib/module/styles.css +0 -1111
  76. package/lib/module/types.js +0 -13
  77. package/lib/typescript/package.json +0 -1
  78. package/lib/typescript/src/Drawer/Drawer.d.ts +0 -100
  79. package/lib/typescript/src/Drawer/DrawerContext.d.ts +0 -3
  80. package/lib/typescript/src/Drawer/DrawerIcon.web.d.ts +0 -7
  81. package/lib/typescript/src/Drawer/RenderDrawer.native.d.ts +0 -8
  82. package/lib/typescript/src/Drawer/RenderDrawer.web.d.ts +0 -8
  83. package/lib/typescript/src/Drawer/useDrawer.d.ts +0 -2
  84. package/lib/typescript/src/Navigation.d.ts +0 -17
  85. package/lib/typescript/src/NavigationStack.d.ts +0 -46
  86. package/lib/typescript/src/Router.d.ts +0 -232
  87. package/lib/typescript/src/RouterContext.d.ts +0 -18
  88. package/lib/typescript/src/ScreenStack/ScreenStack.native.d.ts +0 -2
  89. package/lib/typescript/src/ScreenStack/ScreenStack.web.d.ts +0 -9
  90. package/lib/typescript/src/ScreenStack/ScreenStackContext.d.ts +0 -31
  91. package/lib/typescript/src/ScreenStack/animationHelpers.d.ts +0 -6
  92. package/lib/typescript/src/ScreenStack/index.d.ts +0 -2
  93. package/lib/typescript/src/ScreenStackItem/ScreenStackItem.d.ts +0 -3
  94. package/lib/typescript/src/ScreenStackItem/ScreenStackItem.types.d.ts +0 -14
  95. package/lib/typescript/src/ScreenStackItem/ScreenStackItem.web.d.ts +0 -3
  96. package/lib/typescript/src/ScreenStackItem/index.d.ts +0 -3
  97. package/lib/typescript/src/ScreenStackSheetItem/ScreenStackSheetItem.native.d.ts +0 -11
  98. package/lib/typescript/src/ScreenStackSheetItem/ScreenStackSheetItem.web.d.ts +0 -2
  99. package/lib/typescript/src/ScreenStackSheetItem/index.d.ts +0 -2
  100. package/lib/typescript/src/SplitView/RenderSplitView.native.d.ts +0 -19
  101. package/lib/typescript/src/SplitView/RenderSplitView.web.d.ts +0 -8
  102. package/lib/typescript/src/SplitView/SplitView.d.ts +0 -33
  103. package/lib/typescript/src/SplitView/SplitViewContext.d.ts +0 -3
  104. package/lib/typescript/src/SplitView/index.d.ts +0 -5
  105. package/lib/typescript/src/SplitView/useSplitView.d.ts +0 -2
  106. package/lib/typescript/src/StackRenderer.d.ts +0 -8
  107. package/lib/typescript/src/TabBar/RenderTabBar.native.d.ts +0 -8
  108. package/lib/typescript/src/TabBar/RenderTabBar.web.d.ts +0 -8
  109. package/lib/typescript/src/TabBar/TabBar.d.ts +0 -112
  110. package/lib/typescript/src/TabBar/TabBarContext.d.ts +0 -3
  111. package/lib/typescript/src/TabBar/TabIcon.web.d.ts +0 -7
  112. package/lib/typescript/src/TabBar/index.d.ts +0 -5
  113. package/lib/typescript/src/TabBar/useTabBar.d.ts +0 -2
  114. package/lib/typescript/src/TabBar/useTabBarHeight.d.ts +0 -18
  115. package/lib/typescript/src/createController.d.ts +0 -15
  116. package/lib/typescript/src/index.d.ts +0 -21
  117. package/lib/typescript/src/navigationNode.d.ts +0 -41
  118. package/lib/typescript/src/types.d.ts +0 -140
@@ -0,0 +1,971 @@
1
+ /* ==================== ROUTER CSS CONTRACT ====================
2
+ Portable consumers may override only --router-* tokens. The Sigmela app
3
+ variables are fallbacks kept so the router can run unchanged in client. */
4
+ :root {
5
+ --router-bg: var(--color-sigmela-bg, var(--background-page, #1c1c1e));
6
+ --router-text: var(--color-sigmela-text, var(--text-primary, #f5f5f0));
7
+ --router-text-secondary: var(
8
+ --color-sigmela-text-secondary,
9
+ var(--text-secondary, rgb(from var(--router-text) r g b / 62%))
10
+ );
11
+ --router-line: var(
12
+ --color-sigmela-line,
13
+ var(--separator-common, rgb(from var(--router-text) r g b / 12%))
14
+ );
15
+ --router-scrim: var(
16
+ --color-sigmela-scrim,
17
+ var(--background-overlay-light, rgba(0, 0, 0, 0.42))
18
+ );
19
+ --router-container: var(--container-app, 490px);
20
+ --router-card-shadow: var(--shadow-sigmela-card, 0 24px 80px rgba(0, 0, 0, 0.28));
21
+ --router-glass-bg: var(--glass-background, var(--router-bg));
22
+ --router-transparent: transparent;
23
+ --router-divider: var(--router-line);
24
+ --router-footer-fade-bg: var(--router-bg);
25
+ --router-footer-fade-transparent: rgb(from var(--router-bg) r g b / 0);
26
+ --router-drawer-bg: var(--background-content-alternate, var(--router-bg));
27
+ --router-drawer-text: var(--router-text);
28
+ --router-drawer-hover-bg: rgb(from var(--router-text) r g b / 6%);
29
+ --router-drawer-active-bg: var(
30
+ --background-tertiary-trans,
31
+ rgb(from var(--router-text) r g b / 10%)
32
+ );
33
+ --router-drawer-badge-bg: var(--router-drawer-text);
34
+ --router-drawer-badge-text: var(--router-drawer-bg);
35
+ --router-drawer-focus-ring: rgb(from var(--router-drawer-text) r g b / 40%);
36
+ --router-drawer-overlay-color: var(--constant-black, var(--router-text));
37
+ --router-drawer-overlay-bg: var(--router-transparent);
38
+ --router-drawer-overlay-open-bg: color-mix(
39
+ in srgb,
40
+ var(--router-drawer-overlay-color) 30%,
41
+ transparent
42
+ );
43
+ --router-close-button-bg: var(--router-transparent);
44
+ --router-close-button-text: var(--router-text);
45
+ --router-close-button-light-text: var(--constant-white, #fff);
46
+ --router-close-button-glass-bg: rgb(from var(--router-glass-bg) r g b / 70%);
47
+ --router-close-button-shadow: 0 2px 25px 0px rgba(0, 0, 0, 0.1);
48
+ --router-close-button-shine: linear-gradient(
49
+ 8deg,
50
+ #fff0,
51
+ #ffffffe6 35%,
52
+ #ffffffe6 65%,
53
+ #fff0
54
+ );
55
+ --router-mask-fill: #000;
56
+ --router-title-font-family: var(--font-display, inherit);
57
+ --router-title-font-size: 20px;
58
+ --router-title-line-height: 24px;
59
+ --router-title-font-weight: 700;
60
+ --router-safe-area-bottom: env(safe-area-inset-bottom, 0px);
61
+ }
62
+
63
+ /* ==================== ROUTER SHELL ==================== */
64
+ .screen-stack {
65
+ min-width: 100%;
66
+ width: 100%;
67
+ display: flex;
68
+ position: relative;
69
+ height: 100vh;
70
+ height: 100dvh;
71
+ overflow: hidden;
72
+ background: var(--router-bg);
73
+ color: var(--router-text);
74
+ }
75
+
76
+ .screen-stack > .screen-stack-item {
77
+ position: absolute;
78
+ inset: 0;
79
+ overflow: hidden;
80
+ display: none;
81
+ background: var(--router-bg);
82
+ transition: transform var(--stack-transition-time, 300ms)
83
+ cubic-bezier(0.22, 0.61, 0.36, 1);
84
+ }
85
+
86
+ .screen-stack > .screen-stack-item.push {
87
+ background: var(--router-bg);
88
+ }
89
+
90
+ .screen-stack > .screen-stack-item.push::before {
91
+ content: '';
92
+ position: absolute;
93
+ inset: 0;
94
+ z-index: 0;
95
+ background: var(--router-bg);
96
+ pointer-events: none;
97
+ }
98
+
99
+ .screen-stack[data-animation='true'] > .screen-stack-item {
100
+ will-change: transform;
101
+ }
102
+
103
+ .screen-stack[data-animation='true'] {
104
+ pointer-events: none;
105
+ }
106
+
107
+ .stack-screen-container {
108
+ display: flex;
109
+ position: relative;
110
+ z-index: 1;
111
+ flex: 1;
112
+ height: 100%;
113
+ min-width: 0;
114
+ overflow-x: hidden;
115
+ overflow-y: auto;
116
+ overscroll-behavior-y: contain;
117
+ -webkit-overflow-scrolling: touch;
118
+ background: var(--router-bg);
119
+ }
120
+
121
+ .stack-screen-container > * {
122
+ flex: 1 0 100%;
123
+ min-width: 0;
124
+ width: 100%;
125
+ }
126
+
127
+ .screen-stack > .screen-stack-item.phase-active,
128
+ .screen-stack > .screen-stack-item.transition-entered,
129
+ .screen-stack > .screen-stack-item.transition-entering,
130
+ .screen-stack > .screen-stack-item.transition-preEnter,
131
+ .screen-stack > .screen-stack-item.transition-preExit,
132
+ .screen-stack > .screen-stack-item.phase-inactive,
133
+ .screen-stack > .screen-stack-item.phase-exiting,
134
+ .screen-stack > .screen-stack-item.transition-exiting,
135
+ .screen-stack > .screen-stack-item.pop-exit {
136
+ display: flex;
137
+ }
138
+
139
+ .screen-stack > .screen-stack-item.phase-inactive {
140
+ pointer-events: none;
141
+ }
142
+
143
+ .screen-stack > .screen-stack-item.phase-exiting,
144
+ .screen-stack > .screen-stack-item.transition-exiting {
145
+ pointer-events: none;
146
+ }
147
+
148
+ .screen-stack-item.push.push-enter.transition-preEnter {
149
+ transform: translateX(100%);
150
+ }
151
+
152
+ .screen-stack-item.push.push-enter.transition-entering,
153
+ .screen-stack-item.push.push-enter.transition-entered {
154
+ transform: translateX(0);
155
+ }
156
+
157
+ .screen-stack-item.push.slide-from-bottom-enter.transition-preEnter {
158
+ transform: translateY(100%);
159
+ }
160
+
161
+ .screen-stack-item.push.slide-from-bottom-enter.transition-entering,
162
+ .screen-stack-item.push.slide-from-bottom-enter.transition-entered {
163
+ transform: translateY(0);
164
+ }
165
+
166
+ .screen-stack-item.push.push-background {
167
+ transform: translateX(-25%) !important;
168
+ transition: transform var(--stack-transition-time, 300ms)
169
+ cubic-bezier(0.22, 0.61, 0.36, 1);
170
+ }
171
+
172
+ .screen-stack-item.push.pop-background {
173
+ transform: translateX(-25%) !important;
174
+ }
175
+
176
+ .screen-stack-item.push.pop-exit.transition-exiting {
177
+ transform: translateX(100%);
178
+ }
179
+
180
+ .screen-stack-item.push.slide-from-bottom-exit.transition-exiting {
181
+ transform: translateY(100%);
182
+ }
183
+
184
+ .screen-stack-item.push.pop-enter {
185
+ transition: transform var(--stack-transition-time, 300ms)
186
+ cubic-bezier(0.22, 0.61, 0.36, 1);
187
+ }
188
+
189
+ .screen-stack-item.push.pop-enter.phase-active,
190
+ .screen-stack-item.push.pop-enter.phase-active.transition-entered {
191
+ transform: translateX(0);
192
+ }
193
+
194
+ .screen-stack-item.none {
195
+ transform: translate3d(0, 0, 0) !important;
196
+ transition: none !important;
197
+ }
198
+
199
+ .router-overlay-shell {
200
+ pointer-events: none;
201
+ position: fixed;
202
+ inset-inline: 0;
203
+ margin-inline: auto;
204
+ max-width: var(--router-container);
205
+ }
206
+
207
+ .router-overlay-shell--content {
208
+ inset-block: 0;
209
+ }
210
+
211
+ .router-overlay-shell--fullscreen {
212
+ bottom: 0;
213
+ }
214
+
215
+ .router-modal-shell {
216
+ display: flex;
217
+ align-items: flex-end;
218
+ justify-content: center;
219
+ isolation: isolate;
220
+ }
221
+
222
+ .router-modal-backdrop {
223
+ background: var(--router-scrim);
224
+ z-index: 0;
225
+ }
226
+
227
+ @media (max-width: 639px) {
228
+ .router-modal-backdrop {
229
+ background: var(--router-transparent);
230
+ opacity: 0 !important;
231
+ }
232
+ }
233
+
234
+ .router-modal-surface {
235
+ pointer-events: auto;
236
+ position: relative;
237
+ z-index: 1;
238
+ display: flex;
239
+ flex-direction: column;
240
+ width: 100%;
241
+ height: calc(100dvh - env(safe-area-inset-top, 0px));
242
+ overflow: hidden;
243
+ border-radius: 33px 33px 0 0;
244
+ background: var(--router-bg);
245
+ color: var(--router-text);
246
+ box-shadow: var(--router-card-shadow);
247
+ }
248
+
249
+ /* A content-sized modal deliberately leaves the page visible behind it, so it
250
+ never dims — at any viewport width, unlike the width-scoped rule above. */
251
+ .router-modal-backdrop--transparent {
252
+ background: var(--router-transparent);
253
+ opacity: 0 !important;
254
+ }
255
+
256
+ /* Grows with its content, never below half the viewport. */
257
+ .router-modal-surface--content-sized {
258
+ height: auto;
259
+ min-height: 50dvh;
260
+ max-height: calc(100dvh - env(safe-area-inset-top, 0px));
261
+ }
262
+
263
+ .router-scroll {
264
+ scrollbar-width: none;
265
+ -webkit-overflow-scrolling: touch;
266
+ }
267
+
268
+ .router-scroll::-webkit-scrollbar {
269
+ display: none;
270
+ }
271
+
272
+ .router-sheet-surface {
273
+ pointer-events: auto;
274
+ position: absolute;
275
+ display: flex;
276
+ width: auto;
277
+ flex-direction: column;
278
+ overflow: hidden;
279
+ }
280
+
281
+ .router-sheet-frame-scroll {
282
+ max-height: inherit;
283
+ overflow-y: auto;
284
+ overscroll-behavior: none;
285
+ }
286
+
287
+ .router-overlay-flow-stack {
288
+ flex: 1 1 auto;
289
+ min-width: 0;
290
+ min-height: 0;
291
+ height: 100%;
292
+ }
293
+
294
+ .router-overlay-flow-screen {
295
+ position: relative;
296
+ display: flex;
297
+ flex: 1 0 100%;
298
+ flex-direction: column;
299
+ width: 100%;
300
+ min-width: 0;
301
+ min-height: 0;
302
+ height: 100%;
303
+ background: var(--router-bg);
304
+ }
305
+
306
+ .router-overlay-flow-stack--modal .stack-screen-container {
307
+ overflow-y: hidden;
308
+ }
309
+
310
+ .router-overlay-flow-stack--sheet {
311
+ flex: 0 0 auto;
312
+ height: auto;
313
+ }
314
+
315
+ .router-overlay-flow-stack--sheet > .screen-stack-item.phase-active {
316
+ position: relative;
317
+ inset: auto;
318
+ width: 100%;
319
+ }
320
+
321
+ .router-overlay-flow-stack--sheet .stack-screen-container,
322
+ .router-overlay-flow-stack--sheet .router-overlay-flow-screen {
323
+ height: auto;
324
+ overflow-y: visible;
325
+ }
326
+
327
+ .router-sheet-header,
328
+ .router-modal-header {
329
+ display: flex;
330
+ align-items: center;
331
+ gap: 12px;
332
+ background: var(--router-bg);
333
+ }
334
+
335
+ .router-sheet-header {
336
+ padding: 12px 16px;
337
+ border-radius: 28px 28px 0 0;
338
+ }
339
+
340
+ .router-modal-header {
341
+ padding: 20px 16px 12px;
342
+ }
343
+
344
+ .router-sheet-header--sticky,
345
+ .router-modal-header--sticky {
346
+ position: sticky;
347
+ top: 0;
348
+ z-index: 10;
349
+ }
350
+
351
+ .router-sheet-header-side,
352
+ .router-modal-header-side {
353
+ display: flex;
354
+ align-items: center;
355
+ min-width: 42px;
356
+ flex-shrink: 0;
357
+ }
358
+
359
+ .router-sheet-header-side--trailing,
360
+ .router-modal-header-side--trailing {
361
+ justify-content: flex-end;
362
+ }
363
+
364
+ .router-sheet-header-spacer {
365
+ flex: 1 1 auto;
366
+ }
367
+
368
+ .router-sheet-title,
369
+ .router-modal-title {
370
+ display: -webkit-box;
371
+ flex: 1 1 auto;
372
+ margin: 0;
373
+ overflow: hidden;
374
+ -webkit-box-orient: vertical;
375
+ -webkit-line-clamp: 2;
376
+ color: var(--router-text);
377
+ font-family: var(--router-title-font-family);
378
+ font-size: var(--router-title-font-size);
379
+ font-weight: var(--router-title-font-weight);
380
+ line-height: var(--router-title-line-height);
381
+ }
382
+
383
+ .router-sheet-title--center,
384
+ .router-modal-title {
385
+ text-align: center;
386
+ }
387
+
388
+ .router-sheet-content,
389
+ .router-modal-content {
390
+ display: flex;
391
+ flex: 1 1 auto;
392
+ min-height: 0;
393
+ flex-direction: column;
394
+ background: var(--router-bg);
395
+ }
396
+
397
+ .router-sheet-scroll-view,
398
+ .router-modal-scroll-view {
399
+ flex: 1 1 auto;
400
+ min-height: 0;
401
+ overflow-y: auto;
402
+ overscroll-behavior: none;
403
+ background: var(--router-bg);
404
+ }
405
+
406
+ .router-sheet-footer {
407
+ position: sticky;
408
+ bottom: 0;
409
+ padding: 8px 16px 12px;
410
+ background: var(--router-bg);
411
+ }
412
+
413
+ .router-sheet-footer--attached {
414
+ padding-bottom: calc(8px + var(--router-safe-area-bottom));
415
+ }
416
+
417
+ .router-modal-footer {
418
+ pointer-events: none;
419
+ position: absolute;
420
+ inset-inline: 0;
421
+ bottom: 0;
422
+ z-index: 30;
423
+ display: flex;
424
+ justify-content: center;
425
+ padding: 16px 16px calc(8px + var(--router-safe-area-bottom));
426
+ background: linear-gradient(
427
+ to top,
428
+ var(--router-footer-fade-bg) 0%,
429
+ var(--router-footer-fade-bg) 50%,
430
+ var(--router-footer-fade-transparent) 100%
431
+ );
432
+ }
433
+
434
+ .router-modal-footer-content {
435
+ pointer-events: auto;
436
+ width: 100%;
437
+ max-width: 424px;
438
+ }
439
+
440
+ html[data-router-shell='desktop-fullscreen'] #root {
441
+ max-width: none;
442
+ margin-inline: 0;
443
+ box-shadow: none;
444
+ }
445
+
446
+ .screen-stack[data-router-shell='desktop-fullscreen'] {
447
+ max-width: none;
448
+ width: 100vw;
449
+ }
450
+
451
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'] {
452
+ max-width: none;
453
+ width: 100vw;
454
+ margin-inline: 0;
455
+ }
456
+
457
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'].router-overlay-shell--fullscreen {
458
+ inset: 0;
459
+ }
460
+
461
+ @media (min-width: 640px) {
462
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'].router-modal-shell {
463
+ align-items: center;
464
+ justify-content: center;
465
+ }
466
+
467
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'] .router-modal-surface {
468
+ width: 600px;
469
+ max-width: calc(100vw - 48px);
470
+ height: 75dvh;
471
+ max-height: calc(100dvh - 48px);
472
+ border-radius: 38px;
473
+ }
474
+
475
+ .router-overlay-shell[data-router-shell='desktop-fullscreen']
476
+ .router-modal-surface.router-modal-surface--wide {
477
+ width: 860px;
478
+ height: 86dvh;
479
+ }
480
+
481
+ .router-overlay-shell[data-router-shell='desktop-fullscreen']
482
+ .router-modal-surface--content-sized {
483
+ height: auto;
484
+ }
485
+ }
486
+
487
+ /* ==================== SPLIT VIEW ==================== */
488
+
489
+ .sigmela-split-view {
490
+ --sigmela-split-primary-max-width: 390px;
491
+ position: relative;
492
+ display: block;
493
+ flex: 1 1 auto;
494
+ width: 100%;
495
+ min-width: 0;
496
+ height: 100%;
497
+ min-height: 0;
498
+ overflow: hidden;
499
+ background: var(--router-bg);
500
+ }
501
+
502
+ .sigmela-split-view .screen-stack {
503
+ min-width: 0;
504
+ }
505
+
506
+ .sigmela-split-pane-stack {
507
+ flex: 1 1 auto;
508
+ min-width: 0;
509
+ height: 100%;
510
+ min-height: 0;
511
+ }
512
+
513
+ .sigmela-split-view__primary {
514
+ position: relative;
515
+ display: flex;
516
+ flex-direction: column;
517
+ width: 100%;
518
+ height: 100%;
519
+ min-width: 0;
520
+ min-height: 0;
521
+ }
522
+
523
+ .sigmela-split-view__secondary {
524
+ position: absolute;
525
+ inset: 0;
526
+ z-index: 2;
527
+ display: flex;
528
+ width: 100%;
529
+ height: 100%;
530
+ min-width: 0;
531
+ min-height: 0;
532
+ }
533
+
534
+ .sigmela-split-view__primary > *,
535
+ .sigmela-split-view__secondary > * {
536
+ flex: 1 1 auto;
537
+ min-width: 0;
538
+ min-height: 0;
539
+ }
540
+
541
+ .sigmela-split-view[data-layout='narrow'] .sigmela-split-view__secondary:empty {
542
+ display: none;
543
+ }
544
+
545
+ .sigmela-split-view[data-layout='narrow']:has(.sigmela-split-view__secondary:not(:empty))
546
+ .sigmela-split-view__primary {
547
+ pointer-events: none;
548
+ }
549
+
550
+ .sigmela-split-view[data-layout='wide'] {
551
+ display: flex;
552
+ flex-direction: row;
553
+ }
554
+
555
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__primary {
556
+ flex: 0 0 auto;
557
+ width: min(100%, var(--sigmela-split-primary-max-width));
558
+ max-width: var(--sigmela-split-primary-max-width);
559
+ border-right: 1px solid var(--router-divider);
560
+ }
561
+
562
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__secondary {
563
+ position: relative;
564
+ inset: auto;
565
+ z-index: auto;
566
+ display: flex;
567
+ flex: 1 1 auto;
568
+ }
569
+
570
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__primary {
571
+ pointer-events: auto;
572
+ }
573
+
574
+ /* ==================== DRAWER ==================== */
575
+
576
+ .sigmela-drawer {
577
+ --sigmela-drawer-bg: var(--router-drawer-bg);
578
+ --sigmela-drawer-hover-bg: var(--router-drawer-hover-bg);
579
+ --sigmela-drawer-item-active-bg: var(--router-drawer-active-bg);
580
+ --sigmela-drawer-label: var(--router-drawer-text);
581
+ --sigmela-drawer-overlay: var(--router-drawer-overlay-color);
582
+ --sigmela-drawer-transition: 300ms cubic-bezier(0.22, 0.61, 0.36, 1);
583
+ --sigmela-drawer-width: 280px;
584
+
585
+ position: relative;
586
+ display: flex;
587
+ flex: 1 1 auto;
588
+ flex-direction: row;
589
+ width: 100%;
590
+ min-width: 0;
591
+ height: 100%;
592
+ min-height: 0;
593
+ overflow: hidden;
594
+ background: var(--router-bg);
595
+ color: var(--router-text);
596
+ }
597
+
598
+ .sigmela-drawer__sidebar {
599
+ display: flex;
600
+ flex: 0 0 var(--sigmela-drawer-width);
601
+ flex-direction: column;
602
+ width: var(--sigmela-drawer-width);
603
+ min-width: 0;
604
+ min-height: 0;
605
+ overflow: hidden;
606
+ background: var(--sigmela-drawer-bg);
607
+ }
608
+
609
+ .sigmela-drawer__sidebar-content {
610
+ display: flex;
611
+ flex: 1 1 auto;
612
+ flex-direction: column;
613
+ align-items: stretch;
614
+ min-height: 0;
615
+ gap: 4px;
616
+ overflow-x: hidden;
617
+ overflow-y: auto;
618
+ overscroll-behavior: contain;
619
+ padding: 12px;
620
+ }
621
+
622
+ .sigmela-drawer__footer {
623
+ display: flex;
624
+ flex: 0 0 auto;
625
+ flex-direction: column;
626
+ align-items: stretch;
627
+ padding: 12px;
628
+ padding-bottom: max(12px, env(safe-area-inset-bottom));
629
+ border-top: 1px solid var(--router-divider);
630
+ }
631
+
632
+ .sigmela-drawer__main {
633
+ position: relative;
634
+ display: flex;
635
+ flex: 1 1 auto;
636
+ min-width: 0;
637
+ min-height: 0;
638
+ }
639
+
640
+ .sigmela-drawer__main > * {
641
+ flex: 1 1 auto;
642
+ min-width: 0;
643
+ min-height: 0;
644
+ }
645
+
646
+ .sigmela-drawer__assistant {
647
+ position: relative;
648
+ z-index: 2;
649
+ display: flex;
650
+ flex: 0 0 auto;
651
+ min-width: 0;
652
+ min-height: 0;
653
+ background: transparent;
654
+ }
655
+
656
+ .sigmela-drawer__assistant > * {
657
+ min-width: 0;
658
+ min-height: 0;
659
+ }
660
+
661
+ .sigmela-drawer__overlay {
662
+ appearance: none;
663
+ display: none;
664
+ width: 100%;
665
+ height: 100%;
666
+ margin: 0;
667
+ padding: 0;
668
+ border: 0;
669
+ border-radius: 0;
670
+ background: var(--router-transparent);
671
+ }
672
+
673
+ .sigmela-drawer__item {
674
+ appearance: none;
675
+ display: flex;
676
+ flex: 0 0 auto;
677
+ flex-direction: row;
678
+ align-items: center;
679
+ justify-content: flex-start;
680
+ min-width: 0;
681
+ height: 44px;
682
+ margin: 0;
683
+ padding: 0 14px;
684
+ border: 0;
685
+ border-radius: 10px;
686
+ background: var(--router-transparent);
687
+ color: var(--sigmela-drawer-label);
688
+ cursor: pointer;
689
+ font: inherit;
690
+ text-align: left;
691
+ transition: background-color 200ms cubic-bezier(0.22, 0.61, 0.36, 1);
692
+ }
693
+
694
+ .sigmela-drawer__item[data-active='true'] {
695
+ background: var(--sigmela-drawer-item-active-bg);
696
+ }
697
+
698
+ .sigmela-drawer__item:hover:not([data-active='true']) {
699
+ background: var(--sigmela-drawer-hover-bg);
700
+ }
701
+
702
+ .sigmela-drawer__item:focus {
703
+ outline: none;
704
+ }
705
+
706
+ .sigmela-drawer__item:focus-visible {
707
+ box-shadow: 0 0 0 2px var(--router-drawer-focus-ring);
708
+ }
709
+
710
+ .sigmela-drawer__section-label {
711
+ flex: 0 0 auto;
712
+ min-width: 0;
713
+ margin: 12px 14px 2px;
714
+ overflow: hidden;
715
+ color: var(--router-text-secondary);
716
+ font-size: 12px;
717
+ font-weight: 600;
718
+ line-height: 16px;
719
+ text-overflow: ellipsis;
720
+ white-space: nowrap;
721
+ }
722
+
723
+ .sigmela-drawer__section-label:first-child {
724
+ margin-top: 4px;
725
+ }
726
+
727
+ .sigmela-drawer__item-icon {
728
+ display: flex;
729
+ flex: 0 0 24px;
730
+ align-items: center;
731
+ justify-content: center;
732
+ width: 24px;
733
+ height: 24px;
734
+ margin-right: 12px;
735
+ }
736
+
737
+ .sigmela-drawer__item-label {
738
+ flex: 1 1 auto;
739
+ min-width: 0;
740
+ overflow: hidden;
741
+ font-size: 14px;
742
+ font-weight: 600;
743
+ line-height: 20px;
744
+ text-align: left;
745
+ text-overflow: ellipsis;
746
+ white-space: nowrap;
747
+ }
748
+
749
+ .sigmela-drawer__item-badge {
750
+ display: inline-flex;
751
+ flex: 0 0 auto;
752
+ align-items: center;
753
+ justify-content: center;
754
+ min-width: 18px;
755
+ height: 18px;
756
+ margin-left: 8px;
757
+ padding: 0 6px;
758
+ border-radius: 9999px;
759
+ background: var(--router-drawer-badge-bg);
760
+ color: var(--router-drawer-badge-text);
761
+ font-size: 11px;
762
+ font-weight: 600;
763
+ line-height: 18px;
764
+ }
765
+
766
+ .sigmela-drawer__group-container,
767
+ .sigmela-drawer__group-items {
768
+ display: flex;
769
+ flex: 0 0 auto;
770
+ flex-direction: column;
771
+ gap: 4px;
772
+ }
773
+
774
+ .sigmela-drawer__group-label {
775
+ width: 100%;
776
+ }
777
+
778
+ .sigmela-drawer__group-chevron {
779
+ display: inline-flex;
780
+ flex: 0 0 auto;
781
+ align-items: center;
782
+ justify-content: center;
783
+ width: 24px;
784
+ height: 24px;
785
+ margin-left: 8px;
786
+ transition: transform 200ms cubic-bezier(0.22, 0.61, 0.36, 1);
787
+ }
788
+
789
+ .sigmela-drawer__group-chevron[data-expanded='true'] {
790
+ transform: rotate(180deg);
791
+ }
792
+
793
+ .sigmela-drawer__subitem {
794
+ height: 38px;
795
+ padding-left: 28px;
796
+ }
797
+
798
+ .sigmela-drawer__subitem .sigmela-drawer__item-label {
799
+ font-size: 13px;
800
+ line-height: 18px;
801
+ }
802
+
803
+ @media (max-width: 640px) {
804
+ .sigmela-drawer__sidebar {
805
+ position: absolute;
806
+ top: 0;
807
+ bottom: 0;
808
+ left: 0;
809
+ z-index: 101;
810
+ transform: translateX(calc(-1 * var(--sigmela-drawer-width)));
811
+ transition: transform var(--sigmela-drawer-transition);
812
+ }
813
+
814
+ .sigmela-drawer__main {
815
+ width: 100%;
816
+ transition: transform var(--sigmela-drawer-transition);
817
+ }
818
+
819
+ .sigmela-drawer__overlay {
820
+ position: absolute;
821
+ inset: 0;
822
+ z-index: 100;
823
+ display: block;
824
+ background: var(--router-drawer-overlay-bg);
825
+ opacity: 0;
826
+ pointer-events: none;
827
+ transition:
828
+ opacity var(--sigmela-drawer-transition),
829
+ background var(--sigmela-drawer-transition);
830
+ }
831
+
832
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__sidebar {
833
+ transform: translateX(0);
834
+ }
835
+
836
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__main {
837
+ transform: translateX(var(--sigmela-drawer-width));
838
+ }
839
+
840
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__overlay {
841
+ background: var(--router-drawer-overlay-open-bg);
842
+ opacity: 1;
843
+ pointer-events: auto;
844
+ }
845
+ }
846
+
847
+ @media (max-width: 1099px) {
848
+ .sigmela-drawer__assistant {
849
+ position: fixed;
850
+ inset: 0;
851
+ z-index: 120;
852
+ display: block;
853
+ width: 100%;
854
+ height: 100%;
855
+ pointer-events: none;
856
+ }
857
+ }
858
+
859
+ @media (min-width: 641px) {
860
+ .sigmela-drawer__sidebar {
861
+ border-right: 1px solid var(--router-divider);
862
+ transition: margin-left var(--sigmela-drawer-transition);
863
+ }
864
+
865
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__sidebar {
866
+ margin-left: calc(-1 * var(--sigmela-drawer-width));
867
+ border-right: none;
868
+ }
869
+ }
870
+
871
+ @media (prefers-reduced-motion: reduce) {
872
+ .screen-stack > .screen-stack-item {
873
+ transform: translate3d(0, 0, 0) !important;
874
+ transition: none !important;
875
+ }
876
+ }
877
+
878
+ /* ==================== ROUTER CLOSE BUTTON ==================== */
879
+ .router-close-button-circle {
880
+ width: 42px;
881
+ }
882
+
883
+ .router-close-button {
884
+ appearance: none;
885
+ height: 42px;
886
+ padding: 0;
887
+ border: 0;
888
+ border-radius: 42px;
889
+ background: var(--router-close-button-bg);
890
+ position: relative;
891
+ transition: transform 120ms cubic-bezier(0.22, 0.61, 0.36, 1);
892
+ cursor: pointer;
893
+ }
894
+
895
+ .router-close-button:disabled {
896
+ cursor: not-allowed;
897
+ opacity: 0.5;
898
+ }
899
+
900
+ .router-close-button:active {
901
+ transform: scale(1.1);
902
+ }
903
+
904
+ .router-close-button-inner {
905
+ position: absolute;
906
+ inset: 0;
907
+ z-index: 2;
908
+ height: 42px;
909
+ display: flex;
910
+ justify-content: center;
911
+ align-items: center;
912
+ color: var(--router-close-button-text);
913
+ }
914
+
915
+ .router-close-button--light .router-close-button-inner,
916
+ .router-close-button-inner.router-close-button--light {
917
+ color: var(--router-close-button-light-text);
918
+ }
919
+
920
+ .router-close-button-blur {
921
+ background: var(--router-close-button-glass-bg);
922
+ border-radius: 42px;
923
+ touch-action: none;
924
+ height: 42px;
925
+ cursor: pointer;
926
+ position: relative;
927
+ overflow: visible;
928
+ }
929
+
930
+ .router-close-mask-1 {
931
+ -webkit-backface-visibility: hidden;
932
+ backface-visibility: hidden;
933
+ border-radius: inherit;
934
+ inset: 0;
935
+ pointer-events: none;
936
+ position: absolute;
937
+ will-change: transform;
938
+ z-index: 1;
939
+ }
940
+
941
+ .router-close-mask-2 {
942
+ border-radius: inherit;
943
+ box-shadow: var(--router-close-button-shadow);
944
+ inset: 0;
945
+ pointer-events: none;
946
+ position: absolute;
947
+ will-change: transform;
948
+ z-index: 2;
949
+ }
950
+
951
+ .router-close-mask-3 {
952
+ -webkit-backface-visibility: hidden;
953
+ backface-visibility: hidden;
954
+ background: var(--router-close-button-shine);
955
+ border-radius: inherit;
956
+ inset: 0;
957
+ -webkit-mask:
958
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0) content-box,
959
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0);
960
+ mask:
961
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0) content-box,
962
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0);
963
+ -webkit-mask-composite: xor;
964
+ mask-composite: exclude;
965
+ padding: 1px;
966
+ pointer-events: none;
967
+ position: absolute;
968
+ will-change: transform;
969
+ z-index: 2;
970
+ mix-blend-mode: overlay;
971
+ }