@sigmela/router 0.3.7 → 0.5.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 +38 -0
  2. package/LICENSE +2 -1
  3. package/README.md +127 -471
  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 +56 -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 +3696 -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 +975 -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 +73 -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 -80
  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,975 @@
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--fullscreen {
282
+ height: 100%;
283
+ }
284
+
285
+ .router-sheet-frame-scroll {
286
+ max-height: inherit;
287
+ overflow-y: auto;
288
+ overscroll-behavior: none;
289
+ }
290
+
291
+ .router-overlay-flow-stack {
292
+ flex: 1 1 auto;
293
+ min-width: 0;
294
+ min-height: 0;
295
+ height: 100%;
296
+ }
297
+
298
+ .router-overlay-flow-screen {
299
+ position: relative;
300
+ display: flex;
301
+ flex: 1 0 100%;
302
+ flex-direction: column;
303
+ width: 100%;
304
+ min-width: 0;
305
+ min-height: 0;
306
+ height: 100%;
307
+ background: var(--router-bg);
308
+ }
309
+
310
+ .router-overlay-flow-stack--modal .stack-screen-container {
311
+ overflow-y: hidden;
312
+ }
313
+
314
+ .router-overlay-flow-stack--sheet {
315
+ flex: 0 0 auto;
316
+ height: auto;
317
+ }
318
+
319
+ .router-overlay-flow-stack--sheet > .screen-stack-item.phase-active {
320
+ position: relative;
321
+ inset: auto;
322
+ width: 100%;
323
+ }
324
+
325
+ .router-overlay-flow-stack--sheet .stack-screen-container,
326
+ .router-overlay-flow-stack--sheet .router-overlay-flow-screen {
327
+ height: auto;
328
+ overflow-y: visible;
329
+ }
330
+
331
+ .router-sheet-header,
332
+ .router-modal-header {
333
+ display: flex;
334
+ align-items: center;
335
+ gap: 12px;
336
+ background: var(--router-bg);
337
+ }
338
+
339
+ .router-sheet-header {
340
+ padding: 12px 16px;
341
+ border-radius: 28px 28px 0 0;
342
+ }
343
+
344
+ .router-modal-header {
345
+ padding: 20px 16px 12px;
346
+ }
347
+
348
+ .router-sheet-header--sticky,
349
+ .router-modal-header--sticky {
350
+ position: sticky;
351
+ top: 0;
352
+ z-index: 10;
353
+ }
354
+
355
+ .router-sheet-header-side,
356
+ .router-modal-header-side {
357
+ display: flex;
358
+ align-items: center;
359
+ min-width: 42px;
360
+ flex-shrink: 0;
361
+ }
362
+
363
+ .router-sheet-header-side--trailing,
364
+ .router-modal-header-side--trailing {
365
+ justify-content: flex-end;
366
+ }
367
+
368
+ .router-sheet-header-spacer {
369
+ flex: 1 1 auto;
370
+ }
371
+
372
+ .router-sheet-title,
373
+ .router-modal-title {
374
+ display: -webkit-box;
375
+ flex: 1 1 auto;
376
+ margin: 0;
377
+ overflow: hidden;
378
+ -webkit-box-orient: vertical;
379
+ -webkit-line-clamp: 2;
380
+ color: var(--router-text);
381
+ font-family: var(--router-title-font-family);
382
+ font-size: var(--router-title-font-size);
383
+ font-weight: var(--router-title-font-weight);
384
+ line-height: var(--router-title-line-height);
385
+ }
386
+
387
+ .router-sheet-title--center,
388
+ .router-modal-title {
389
+ text-align: center;
390
+ }
391
+
392
+ .router-sheet-content,
393
+ .router-modal-content {
394
+ display: flex;
395
+ flex: 1 1 auto;
396
+ min-height: 0;
397
+ flex-direction: column;
398
+ background: var(--router-bg);
399
+ }
400
+
401
+ .router-sheet-scroll-view,
402
+ .router-modal-scroll-view {
403
+ flex: 1 1 auto;
404
+ min-height: 0;
405
+ overflow-y: auto;
406
+ overscroll-behavior: none;
407
+ background: var(--router-bg);
408
+ }
409
+
410
+ .router-sheet-footer {
411
+ position: sticky;
412
+ bottom: 0;
413
+ padding: 8px 16px 12px;
414
+ background: var(--router-bg);
415
+ }
416
+
417
+ .router-sheet-footer--attached {
418
+ padding-bottom: calc(8px + var(--router-safe-area-bottom));
419
+ }
420
+
421
+ .router-modal-footer {
422
+ pointer-events: none;
423
+ position: absolute;
424
+ inset-inline: 0;
425
+ bottom: 0;
426
+ z-index: 30;
427
+ display: flex;
428
+ justify-content: center;
429
+ padding: 16px 16px calc(8px + var(--router-safe-area-bottom));
430
+ background: linear-gradient(
431
+ to top,
432
+ var(--router-footer-fade-bg) 0%,
433
+ var(--router-footer-fade-bg) 50%,
434
+ var(--router-footer-fade-transparent) 100%
435
+ );
436
+ }
437
+
438
+ .router-modal-footer-content {
439
+ pointer-events: auto;
440
+ width: 100%;
441
+ max-width: 424px;
442
+ }
443
+
444
+ html[data-router-shell='desktop-fullscreen'] #root {
445
+ max-width: none;
446
+ margin-inline: 0;
447
+ box-shadow: none;
448
+ }
449
+
450
+ .screen-stack[data-router-shell='desktop-fullscreen'] {
451
+ max-width: none;
452
+ width: 100vw;
453
+ }
454
+
455
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'] {
456
+ max-width: none;
457
+ width: 100vw;
458
+ margin-inline: 0;
459
+ }
460
+
461
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'].router-overlay-shell--fullscreen {
462
+ inset: 0;
463
+ }
464
+
465
+ @media (min-width: 640px) {
466
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'].router-modal-shell {
467
+ align-items: center;
468
+ justify-content: center;
469
+ }
470
+
471
+ .router-overlay-shell[data-router-shell='desktop-fullscreen'] .router-modal-surface {
472
+ width: 600px;
473
+ max-width: calc(100vw - 48px);
474
+ height: 75dvh;
475
+ max-height: calc(100dvh - 48px);
476
+ border-radius: 38px;
477
+ }
478
+
479
+ .router-overlay-shell[data-router-shell='desktop-fullscreen']
480
+ .router-modal-surface.router-modal-surface--wide {
481
+ width: 860px;
482
+ height: 86dvh;
483
+ }
484
+
485
+ .router-overlay-shell[data-router-shell='desktop-fullscreen']
486
+ .router-modal-surface--content-sized {
487
+ height: auto;
488
+ }
489
+ }
490
+
491
+ /* ==================== SPLIT VIEW ==================== */
492
+
493
+ .sigmela-split-view {
494
+ --sigmela-split-primary-max-width: 390px;
495
+ position: relative;
496
+ display: block;
497
+ flex: 1 1 auto;
498
+ width: 100%;
499
+ min-width: 0;
500
+ height: 100%;
501
+ min-height: 0;
502
+ overflow: hidden;
503
+ background: var(--router-bg);
504
+ }
505
+
506
+ .sigmela-split-view .screen-stack {
507
+ min-width: 0;
508
+ }
509
+
510
+ .sigmela-split-pane-stack {
511
+ flex: 1 1 auto;
512
+ min-width: 0;
513
+ height: 100%;
514
+ min-height: 0;
515
+ }
516
+
517
+ .sigmela-split-view__primary {
518
+ position: relative;
519
+ display: flex;
520
+ flex-direction: column;
521
+ width: 100%;
522
+ height: 100%;
523
+ min-width: 0;
524
+ min-height: 0;
525
+ }
526
+
527
+ .sigmela-split-view__secondary {
528
+ position: absolute;
529
+ inset: 0;
530
+ z-index: 2;
531
+ display: flex;
532
+ width: 100%;
533
+ height: 100%;
534
+ min-width: 0;
535
+ min-height: 0;
536
+ }
537
+
538
+ .sigmela-split-view__primary > *,
539
+ .sigmela-split-view__secondary > * {
540
+ flex: 1 1 auto;
541
+ min-width: 0;
542
+ min-height: 0;
543
+ }
544
+
545
+ .sigmela-split-view[data-layout='narrow'] .sigmela-split-view__secondary:empty {
546
+ display: none;
547
+ }
548
+
549
+ .sigmela-split-view[data-layout='narrow']:has(.sigmela-split-view__secondary:not(:empty))
550
+ .sigmela-split-view__primary {
551
+ pointer-events: none;
552
+ }
553
+
554
+ .sigmela-split-view[data-layout='wide'] {
555
+ display: flex;
556
+ flex-direction: row;
557
+ }
558
+
559
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__primary {
560
+ flex: 0 0 auto;
561
+ width: min(100%, var(--sigmela-split-primary-max-width));
562
+ max-width: var(--sigmela-split-primary-max-width);
563
+ border-right: 1px solid var(--router-divider);
564
+ }
565
+
566
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__secondary {
567
+ position: relative;
568
+ inset: auto;
569
+ z-index: auto;
570
+ display: flex;
571
+ flex: 1 1 auto;
572
+ }
573
+
574
+ .sigmela-split-view[data-layout='wide'] .sigmela-split-view__primary {
575
+ pointer-events: auto;
576
+ }
577
+
578
+ /* ==================== DRAWER ==================== */
579
+
580
+ .sigmela-drawer {
581
+ --sigmela-drawer-bg: var(--router-drawer-bg);
582
+ --sigmela-drawer-hover-bg: var(--router-drawer-hover-bg);
583
+ --sigmela-drawer-item-active-bg: var(--router-drawer-active-bg);
584
+ --sigmela-drawer-label: var(--router-drawer-text);
585
+ --sigmela-drawer-overlay: var(--router-drawer-overlay-color);
586
+ --sigmela-drawer-transition: 300ms cubic-bezier(0.22, 0.61, 0.36, 1);
587
+ --sigmela-drawer-width: 280px;
588
+
589
+ position: relative;
590
+ display: flex;
591
+ flex: 1 1 auto;
592
+ flex-direction: row;
593
+ width: 100%;
594
+ min-width: 0;
595
+ height: 100%;
596
+ min-height: 0;
597
+ overflow: hidden;
598
+ background: var(--router-bg);
599
+ color: var(--router-text);
600
+ }
601
+
602
+ .sigmela-drawer__sidebar {
603
+ display: flex;
604
+ flex: 0 0 var(--sigmela-drawer-width);
605
+ flex-direction: column;
606
+ width: var(--sigmela-drawer-width);
607
+ min-width: 0;
608
+ min-height: 0;
609
+ overflow: hidden;
610
+ background: var(--sigmela-drawer-bg);
611
+ }
612
+
613
+ .sigmela-drawer__sidebar-content {
614
+ display: flex;
615
+ flex: 1 1 auto;
616
+ flex-direction: column;
617
+ align-items: stretch;
618
+ min-height: 0;
619
+ gap: 4px;
620
+ overflow-x: hidden;
621
+ overflow-y: auto;
622
+ overscroll-behavior: contain;
623
+ padding: 12px;
624
+ }
625
+
626
+ .sigmela-drawer__footer {
627
+ display: flex;
628
+ flex: 0 0 auto;
629
+ flex-direction: column;
630
+ align-items: stretch;
631
+ padding: 12px;
632
+ padding-bottom: max(12px, env(safe-area-inset-bottom));
633
+ border-top: 1px solid var(--router-divider);
634
+ }
635
+
636
+ .sigmela-drawer__main {
637
+ position: relative;
638
+ display: flex;
639
+ flex: 1 1 auto;
640
+ min-width: 0;
641
+ min-height: 0;
642
+ }
643
+
644
+ .sigmela-drawer__main > * {
645
+ flex: 1 1 auto;
646
+ min-width: 0;
647
+ min-height: 0;
648
+ }
649
+
650
+ .sigmela-drawer__assistant {
651
+ position: relative;
652
+ z-index: 2;
653
+ display: flex;
654
+ flex: 0 0 auto;
655
+ min-width: 0;
656
+ min-height: 0;
657
+ background: transparent;
658
+ }
659
+
660
+ .sigmela-drawer__assistant > * {
661
+ min-width: 0;
662
+ min-height: 0;
663
+ }
664
+
665
+ .sigmela-drawer__overlay {
666
+ appearance: none;
667
+ display: none;
668
+ width: 100%;
669
+ height: 100%;
670
+ margin: 0;
671
+ padding: 0;
672
+ border: 0;
673
+ border-radius: 0;
674
+ background: var(--router-transparent);
675
+ }
676
+
677
+ .sigmela-drawer__item {
678
+ appearance: none;
679
+ display: flex;
680
+ flex: 0 0 auto;
681
+ flex-direction: row;
682
+ align-items: center;
683
+ justify-content: flex-start;
684
+ min-width: 0;
685
+ height: 44px;
686
+ margin: 0;
687
+ padding: 0 14px;
688
+ border: 0;
689
+ border-radius: 10px;
690
+ background: var(--router-transparent);
691
+ color: var(--sigmela-drawer-label);
692
+ cursor: pointer;
693
+ font: inherit;
694
+ text-align: left;
695
+ transition: background-color 200ms cubic-bezier(0.22, 0.61, 0.36, 1);
696
+ }
697
+
698
+ .sigmela-drawer__item[data-active='true'] {
699
+ background: var(--sigmela-drawer-item-active-bg);
700
+ }
701
+
702
+ .sigmela-drawer__item:hover:not([data-active='true']) {
703
+ background: var(--sigmela-drawer-hover-bg);
704
+ }
705
+
706
+ .sigmela-drawer__item:focus {
707
+ outline: none;
708
+ }
709
+
710
+ .sigmela-drawer__item:focus-visible {
711
+ box-shadow: 0 0 0 2px var(--router-drawer-focus-ring);
712
+ }
713
+
714
+ .sigmela-drawer__section-label {
715
+ flex: 0 0 auto;
716
+ min-width: 0;
717
+ margin: 12px 14px 2px;
718
+ overflow: hidden;
719
+ color: var(--router-text-secondary);
720
+ font-size: 12px;
721
+ font-weight: 600;
722
+ line-height: 16px;
723
+ text-overflow: ellipsis;
724
+ white-space: nowrap;
725
+ }
726
+
727
+ .sigmela-drawer__section-label:first-child {
728
+ margin-top: 4px;
729
+ }
730
+
731
+ .sigmela-drawer__item-icon {
732
+ display: flex;
733
+ flex: 0 0 24px;
734
+ align-items: center;
735
+ justify-content: center;
736
+ width: 24px;
737
+ height: 24px;
738
+ margin-right: 12px;
739
+ }
740
+
741
+ .sigmela-drawer__item-label {
742
+ flex: 1 1 auto;
743
+ min-width: 0;
744
+ overflow: hidden;
745
+ font-size: 14px;
746
+ font-weight: 600;
747
+ line-height: 20px;
748
+ text-align: left;
749
+ text-overflow: ellipsis;
750
+ white-space: nowrap;
751
+ }
752
+
753
+ .sigmela-drawer__item-badge {
754
+ display: inline-flex;
755
+ flex: 0 0 auto;
756
+ align-items: center;
757
+ justify-content: center;
758
+ min-width: 18px;
759
+ height: 18px;
760
+ margin-left: 8px;
761
+ padding: 0 6px;
762
+ border-radius: 9999px;
763
+ background: var(--router-drawer-badge-bg);
764
+ color: var(--router-drawer-badge-text);
765
+ font-size: 11px;
766
+ font-weight: 600;
767
+ line-height: 18px;
768
+ }
769
+
770
+ .sigmela-drawer__group-container,
771
+ .sigmela-drawer__group-items {
772
+ display: flex;
773
+ flex: 0 0 auto;
774
+ flex-direction: column;
775
+ gap: 4px;
776
+ }
777
+
778
+ .sigmela-drawer__group-label {
779
+ width: 100%;
780
+ }
781
+
782
+ .sigmela-drawer__group-chevron {
783
+ display: inline-flex;
784
+ flex: 0 0 auto;
785
+ align-items: center;
786
+ justify-content: center;
787
+ width: 24px;
788
+ height: 24px;
789
+ margin-left: 8px;
790
+ transition: transform 200ms cubic-bezier(0.22, 0.61, 0.36, 1);
791
+ }
792
+
793
+ .sigmela-drawer__group-chevron[data-expanded='true'] {
794
+ transform: rotate(180deg);
795
+ }
796
+
797
+ .sigmela-drawer__subitem {
798
+ height: 38px;
799
+ padding-left: 28px;
800
+ }
801
+
802
+ .sigmela-drawer__subitem .sigmela-drawer__item-label {
803
+ font-size: 13px;
804
+ line-height: 18px;
805
+ }
806
+
807
+ @media (max-width: 640px) {
808
+ .sigmela-drawer__sidebar {
809
+ position: absolute;
810
+ top: 0;
811
+ bottom: 0;
812
+ left: 0;
813
+ z-index: 101;
814
+ transform: translateX(calc(-1 * var(--sigmela-drawer-width)));
815
+ transition: transform var(--sigmela-drawer-transition);
816
+ }
817
+
818
+ .sigmela-drawer__main {
819
+ width: 100%;
820
+ transition: transform var(--sigmela-drawer-transition);
821
+ }
822
+
823
+ .sigmela-drawer__overlay {
824
+ position: absolute;
825
+ inset: 0;
826
+ z-index: 100;
827
+ display: block;
828
+ background: var(--router-drawer-overlay-bg);
829
+ opacity: 0;
830
+ pointer-events: none;
831
+ transition:
832
+ opacity var(--sigmela-drawer-transition),
833
+ background var(--sigmela-drawer-transition);
834
+ }
835
+
836
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__sidebar {
837
+ transform: translateX(0);
838
+ }
839
+
840
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__main {
841
+ transform: translateX(var(--sigmela-drawer-width));
842
+ }
843
+
844
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__overlay {
845
+ background: var(--router-drawer-overlay-open-bg);
846
+ opacity: 1;
847
+ pointer-events: auto;
848
+ }
849
+ }
850
+
851
+ @media (max-width: 1099px) {
852
+ .sigmela-drawer__assistant {
853
+ position: fixed;
854
+ inset: 0;
855
+ z-index: 120;
856
+ display: block;
857
+ width: 100%;
858
+ height: 100%;
859
+ pointer-events: none;
860
+ }
861
+ }
862
+
863
+ @media (min-width: 641px) {
864
+ .sigmela-drawer__sidebar {
865
+ border-right: 1px solid var(--router-divider);
866
+ transition: margin-left var(--sigmela-drawer-transition);
867
+ }
868
+
869
+ .sigmela-drawer[data-drawer-open='true'] .sigmela-drawer__sidebar {
870
+ margin-left: calc(-1 * var(--sigmela-drawer-width));
871
+ border-right: none;
872
+ }
873
+ }
874
+
875
+ @media (prefers-reduced-motion: reduce) {
876
+ .screen-stack > .screen-stack-item {
877
+ transform: translate3d(0, 0, 0) !important;
878
+ transition: none !important;
879
+ }
880
+ }
881
+
882
+ /* ==================== ROUTER CLOSE BUTTON ==================== */
883
+ .router-close-button-circle {
884
+ width: 42px;
885
+ }
886
+
887
+ .router-close-button {
888
+ appearance: none;
889
+ height: 42px;
890
+ padding: 0;
891
+ border: 0;
892
+ border-radius: 42px;
893
+ background: var(--router-close-button-bg);
894
+ position: relative;
895
+ transition: transform 120ms cubic-bezier(0.22, 0.61, 0.36, 1);
896
+ cursor: pointer;
897
+ }
898
+
899
+ .router-close-button:disabled {
900
+ cursor: not-allowed;
901
+ opacity: 0.5;
902
+ }
903
+
904
+ .router-close-button:active {
905
+ transform: scale(1.1);
906
+ }
907
+
908
+ .router-close-button-inner {
909
+ position: absolute;
910
+ inset: 0;
911
+ z-index: 2;
912
+ height: 42px;
913
+ display: flex;
914
+ justify-content: center;
915
+ align-items: center;
916
+ color: var(--router-close-button-text);
917
+ }
918
+
919
+ .router-close-button--light .router-close-button-inner,
920
+ .router-close-button-inner.router-close-button--light {
921
+ color: var(--router-close-button-light-text);
922
+ }
923
+
924
+ .router-close-button-blur {
925
+ background: var(--router-close-button-glass-bg);
926
+ border-radius: 42px;
927
+ touch-action: none;
928
+ height: 42px;
929
+ cursor: pointer;
930
+ position: relative;
931
+ overflow: visible;
932
+ }
933
+
934
+ .router-close-mask-1 {
935
+ -webkit-backface-visibility: hidden;
936
+ backface-visibility: hidden;
937
+ border-radius: inherit;
938
+ inset: 0;
939
+ pointer-events: none;
940
+ position: absolute;
941
+ will-change: transform;
942
+ z-index: 1;
943
+ }
944
+
945
+ .router-close-mask-2 {
946
+ border-radius: inherit;
947
+ box-shadow: var(--router-close-button-shadow);
948
+ inset: 0;
949
+ pointer-events: none;
950
+ position: absolute;
951
+ will-change: transform;
952
+ z-index: 2;
953
+ }
954
+
955
+ .router-close-mask-3 {
956
+ -webkit-backface-visibility: hidden;
957
+ backface-visibility: hidden;
958
+ background: var(--router-close-button-shine);
959
+ border-radius: inherit;
960
+ inset: 0;
961
+ -webkit-mask:
962
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0) content-box,
963
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0);
964
+ mask:
965
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0) content-box,
966
+ linear-gradient(var(--router-mask-fill), var(--router-mask-fill) 0);
967
+ -webkit-mask-composite: xor;
968
+ mask-composite: exclude;
969
+ padding: 1px;
970
+ pointer-events: none;
971
+ position: absolute;
972
+ will-change: transform;
973
+ z-index: 2;
974
+ mix-blend-mode: overlay;
975
+ }