@vixcom/ui 1.7.0 → 1.7.2

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.
@@ -8,28 +8,27 @@
8
8
  * 2. full-menu (fullscreen floating)
9
9
  * 2. float-menu (miniscreen corner floating)
10
10
  */
11
+ /* HACK: use 1% in css calc to insure the unit is applied to the variable ex: calc(1% * var(--the-variable)) */
12
+ :root {
13
+ --side-menu-width-sm: 80;
14
+ --side-menu-width-md: 15;
15
+ --side-menu-width-lg: 25;
16
+ --side-menu-width-lg-mini: 10;
17
+ }
11
18
 
12
19
  @mixin mini-side-menu-toggled {
13
- .menu-header {
14
- .menu-logo {
15
- display: none;
16
- }
17
- .menu-logo-alt {
18
- display: block;
19
- }
20
+ .menu-logo {
21
+ display: none;
22
+ }
20
23
 
21
- .title {
22
- opacity: 0;
23
- height: 0;
24
- margin-bottom: 0;
25
- }
24
+ .menu-logo-alt {
25
+ display: block;
26
26
  }
27
27
 
28
- nav,
29
- .nav {
30
- .item {
31
- justify-content: center;
32
- }
28
+ .nav .title {
29
+ opacity: 0;
30
+ height: 0;
31
+ margin-bottom: 0;
33
32
  }
34
33
 
35
34
  nav,
@@ -75,35 +74,20 @@ input.main-menu-trigger {
75
74
  }
76
75
 
77
76
  &:checked {
78
- ~,
79
- ~ * {
80
- main,
81
- .page {
82
- > footer,
83
- & + footer {
84
- background-color: var(--secondary);
85
- color: var(--secondary-c);
86
- }
87
- }
77
+ ~ {
88
78
  }
89
79
  }
90
80
 
91
81
  &:not(:checked) {
92
- ~,
93
- ~ * {
82
+ ~ {
94
83
  }
95
84
  }
96
85
  }
97
86
 
98
87
  .main-menu-toggle {
88
+ margin: auto;
99
89
  position: relative;
100
90
  font-size: 120%;
101
- z-index: 1;
102
- }
103
-
104
- .menu-container {
105
- max-width: 100%;
106
- overflow: hidden;
107
91
  }
108
92
 
109
93
  nav,
@@ -119,11 +103,12 @@ nav,
119
103
  align-items: center;
120
104
  }
121
105
 
122
- nav,
123
- .nav,
124
106
  .menu-container {
125
- flex: 1 1 100%;
126
- gap: 0.5rem;
107
+ &,
108
+ nav,
109
+ .nav {
110
+ gap: 0.5rem;
111
+ }
127
112
  }
128
113
 
129
114
  nav,
@@ -150,26 +135,11 @@ nav,
150
135
  height: 100%;
151
136
  transition: 0.5s;
152
137
 
153
- .side-menu {
154
- nav,
155
- .nav,
156
- .menu-container {
157
- flex-direction: column;
158
- }
159
- }
160
-
161
- .menu-logo {
162
- min-width: 7.5rem;
163
- }
164
-
165
- .menu-logo-alt {
166
- display: none;
167
- }
168
-
169
138
  &.rtl {
170
- .page {
171
- order: -1;
172
- }
139
+ // main,
140
+ // .main-page {
141
+ // order: -1;
142
+ // }
173
143
  }
174
144
 
175
145
  &:is(body) {
@@ -177,73 +147,83 @@ nav,
177
147
  height: 100vh;
178
148
  }
179
149
 
180
- &:has(> .side-menu) {
181
- &.grid {
182
- grid-template-columns: 1fr 4fr;
183
-
184
- > *:not(.main-menu) {
185
- grid-column: 2;
186
- }
187
- &:has(> header + main) {
188
- grid-auto-rows: 1fr;
189
-
190
- .main-menu {
191
- grid-row: span 20;
192
- }
193
- main {
194
- grid-row: span 18;
195
- }
196
- }
197
- }
198
-
199
- > {
200
- main,
201
- .page {
202
- section {
203
- height: 100%;
204
- min-height: unset;
205
- }
206
- }
207
- }
208
- }
150
+ &.flex {
151
+ display: flex;
209
152
 
210
- &:not(:has(> .side-menu)) {
211
- &.flex {
153
+ &:not(:has(> .side-menu)) {
212
154
  flex-direction: column;
213
155
  }
214
- }
215
-
216
- &.flex {
217
- display: flex;
218
156
 
219
157
  > .side-menu {
220
- flex-basis: 25%;
158
+ --side-menu-width: var(--side-menu-width-lg);
221
159
  }
222
160
  }
223
161
 
224
162
  &.grid {
225
163
  display: grid;
226
164
 
227
- > .side-menu {
228
- grid-row: 1 / -1;
165
+ &:has(> .side-menu) {
166
+ grid-auto-flow: column;
167
+ grid-template-columns: calc(1% * var(--side-menu-width)) 1fr;
168
+ grid-template-rows: 10% 80% 10%;
169
+
170
+ > {
171
+ *:not(.side-menu) {
172
+ grid-column: 2;
173
+ }
174
+
175
+ header {
176
+ grid-row: 1;
177
+ }
178
+
179
+ footer {
180
+ grid-row: 3;
181
+ }
182
+ }
183
+ }
184
+ }
185
+ > {
186
+ main,
187
+ .main-page,
188
+ .content {
189
+ width: 100%;
190
+ height: 100%;
191
+ overflow: scroll;
229
192
  }
230
193
  }
231
194
  }
232
195
 
233
- // FIXME: Grid parent overflow breaks
234
196
  .main-menu {
235
197
  display: flex;
236
198
  padding: 0;
237
199
  margin: 0;
238
200
  transition: transform 0.5s;
201
+ overflow: scroll;
239
202
  z-index: 1;
240
203
 
204
+ &:not(.side-menu) {
205
+ .menu-header,
206
+ .menu-footer {
207
+ flex: 1 1 auto;
208
+ }
209
+ }
210
+
241
211
  &:not(.side-menu:has(> .menu-snap)) {
242
212
  flex-direction: column;
243
213
  }
244
214
 
245
- img {
246
- max-height: 5rem;
215
+ .menu-snap img {
216
+ max-height: 2.5rem;
217
+ }
218
+
219
+ .main-logo {
220
+ img {
221
+ width: 100%;
222
+ }
223
+ }
224
+
225
+ .menu-logo-alt {
226
+ display: none;
247
227
  }
248
228
 
249
229
  nav,
@@ -270,6 +250,10 @@ nav,
270
250
  opacity: 0.125;
271
251
  }
272
252
 
253
+ .icon {
254
+ max-width: 2.5rem;
255
+ }
256
+
273
257
  .label {
274
258
  overflow: hidden;
275
259
  text-overflow: ellipsis;
@@ -291,7 +275,6 @@ nav,
291
275
 
292
276
  .item {
293
277
  padding: 0.125%;
294
- z-index: 1;
295
278
  }
296
279
  }
297
280
 
@@ -299,6 +282,8 @@ nav,
299
282
  .side-menu {
300
283
  position: relative;
301
284
  height: 100%;
285
+ grid-row: 1/-1;
286
+ flex-basis: calc(1% * var(--side-menu-width));
302
287
  transition: flex-basis 0.5s, transform 0.5s, opacity 0.25s;
303
288
  overflow: hidden;
304
289
 
@@ -317,31 +302,21 @@ nav,
317
302
  transition: height 0.5s linear 0.5s, opacity 0.5s linear 0.5s;
318
303
  }
319
304
  }
320
- #{selector.nest('nav, .nav','.item')} {
321
- min-width: auto;
322
- }
323
- }
324
305
 
325
- /* Page */
306
+ nav,
307
+ .nav,
308
+ .menu-container {
309
+ flex: 1 1 auto;
310
+ flex-direction: column;
311
+ }
326
312
 
327
- // FIXME: Scrolling breaks
328
- .page,
329
- main {
330
- display: flex;
331
- flex-direction: column;
332
- position: relative;
333
- width: 100%;
334
- height: 100%;
335
- margin: 0;
336
- flex: 1 1 100%;
337
- transition: width 0.5s;
338
- overflow-y: scroll;
339
- z-index: 0;
340
- }
313
+ .menu-container {
314
+ width: 100%;
315
+ }
341
316
 
342
- footer {
343
- background-color: var(--primary);
344
- color: var(--primary-c);
317
+ #{selector.nest('nav, .nav','.item')} {
318
+ min-width: auto;
319
+ }
345
320
  }
346
321
 
347
322
  /* Mobile or PC (Tablet Excluded) */
@@ -350,44 +325,51 @@ footer {
350
325
 
351
326
  /* Above Tablets/Mini PC */
352
327
  @media (min-width: 769px) {
353
- .main-menu-container {
354
- .float-menu,
355
- .full-menu {
356
- nav,
357
- .nav {
358
- overflow-x: scroll;
359
- }
328
+ .float-menu,
329
+ .full-menu {
330
+ nav,
331
+ .nav {
332
+ overflow-x: scroll;
360
333
  }
334
+ }
361
335
 
362
- #{selector.nest('input.main-menu-trigger:not(:checked)','~,~ *', '.side-menu > .menu-snap')} {
363
- /* flex-basis: 25%; */
364
- }
336
+ #{selector.nest('input.main-menu-trigger:not(:checked)','~', '.side-menu > .menu-snap')} {
337
+ /* flex-basis: 25%; */
338
+ }
365
339
 
340
+ .main-menu-container {
366
341
  &.grid:has(> .side-menu:not(.mini)):has(> input.main-menu-trigger:checked) {
367
- grid-template-columns: 0fr 1fr;
342
+ --side-menu-width: 0;
368
343
  }
369
344
 
370
345
  &.grid:has(> .side-menu.mini):has(> input.main-menu-trigger:checked) {
371
- grid-template-columns: 1fr 10fr;
372
- @include mini-side-menu-toggled;
346
+ --side-menu-width: calc(
347
+ var(--side-menu-width-lg-mini) /
348
+ ((var(--side-menu-width-lg-mini) / 100) + 1)
349
+ );
350
+
351
+ > .side-menu {
352
+ @include mini-side-menu-toggled;
353
+ }
373
354
  }
374
355
 
375
356
  &.flex {
376
357
  input.main-menu-trigger {
377
358
  &:checked {
378
- ~,
379
- ~ * {
359
+ ~ {
380
360
  .side-menu:not(.mini) {
381
- flex-basis: 0;
361
+ --side-menu-width: 0;
362
+ /* flex-basis: 0; */
382
363
  // opacity: 0;
383
364
  // padding: 0;
384
365
  }
385
366
  .side-menu.mini {
386
- flex-basis: 5%;
367
+ --side-menu-width: var(--side-menu-width-lg-mini);
387
368
 
388
- &:has(> .menu-snap) {
389
- flex-basis: 10%;
369
+ &:not(:has(> .menu-snap)) {
370
+ --side-menu-width: calc(var(--side-menu-width-lg-mini) / 2);
390
371
  }
372
+
391
373
  @include mini-side-menu-toggled;
392
374
  }
393
375
  }
@@ -399,31 +381,37 @@ footer {
399
381
 
400
382
  /* Above Mobile */
401
383
  @media (min-width: 577px) {
402
- .main-menu-container {
403
- .full-menu,
404
- .float-menu {
405
- .menu-container {
406
- &,
407
- nav,
408
- .nav {
409
- align-items: center;
410
- }
411
- nav,
412
- .nav {
413
- width: 100%;
414
- overflow-x: scroll;
415
- }
384
+ .full-menu,
385
+ .float-menu {
386
+ .menu-container {
387
+ &,
388
+ nav,
389
+ .nav {
390
+ align-items: center;
391
+ }
392
+ nav,
393
+ .nav {
394
+ width: 100%;
395
+ overflow-x: scroll;
416
396
  }
417
397
  }
418
398
  }
399
+
400
+ .main-menu-container {
401
+ &.grid:has(> .side-menu) {
402
+ --side-menu-width: calc(
403
+ var(--side-menu-width-lg) / ((var(--side-menu-width-lg) / 100) + 1)
404
+ );
405
+ }
406
+ }
419
407
  }
420
408
 
421
409
  /* Tablets/Mini PC (Tablet Only) */
422
410
  @media (min-width: 577px) and (max-width: 768px) {
423
411
  // DEBUG: https://sass-lang.com/d/bogus-combinators
424
412
  // input.main-menu-trigger:checked {
425
- // ~,
426
- // ~ * {
413
+ // ~
414
+ // {
427
415
  // @include unify-selector('.main-menu-container.grid', &) {
428
416
  // content: 'trigger in grid';
429
417
  // }
@@ -432,68 +420,77 @@ footer {
432
420
 
433
421
  .main-menu-container {
434
422
  // WARN: Browser compatibility on :has pseudo-property
423
+ &.grid {
424
+ &:has(> input.main-menu-trigger:checked) {
425
+ > .float-menu .menu-container {
426
+ width: 100%;
427
+ }
428
+ }
429
+
430
+ &:has(> .side-menu):has(> input.main-menu-trigger:not(:checked)) {
431
+ --side-menu-width: calc(
432
+ var(--side-menu-width-md) / ((var(--side-menu-width-md) / 100) + 1)
433
+ );
435
434
 
436
- &.grid:has(> .side-menu):has(> input.main-menu-trigger:not(:checked)) {
437
- grid-template-columns: 1fr 6fr;
438
- @include mini-side-menu-toggled;
435
+ > .side-menu {
436
+ @include mini-side-menu-toggled;
437
+ }
438
+ }
439
439
  }
440
440
 
441
441
  &.flex {
442
- #{selector.nest('input.main-menu-trigger:not(:checked)','~,~ *','.side-menu')} {
443
- flex-basis: 8.25%;
442
+ #{selector.nest('input.main-menu-trigger:checked','~','.float-menu .menu-container')} {
443
+ width: 100%;
444
+ }
444
445
 
445
- &:has(> .menu-snap) {
446
- flex-basis: 16.5%;
446
+ #{selector.nest('input.main-menu-trigger:not(:checked)','~','.side-menu')} {
447
+ --side-menu-width: var(--side-menu-width-md);
448
+
449
+ &:not(:has(> .menu-snap)) {
450
+ --side-menu-width: calc(var(--side-menu-width-md) / 2);
447
451
  }
448
452
 
449
453
  @include mini-side-menu-toggled;
450
454
  }
451
455
  }
452
456
  }
453
-
454
- .float-menu {
455
- /* width: 50%; */
456
- }
457
457
  }
458
458
 
459
459
  /* Tablet Below */
460
460
  @media (max-width: 768px) {
461
- .main-menu-container {
462
- #{selector.nest('input.main-menu-trigger:checked','~,~ *', '.side-menu > .menu-snap')} {
463
- /* flex-basis: 25%; */
464
- }
461
+ #{selector.nest('input.main-menu-trigger:checked','~', '.side-menu > .menu-snap')} {
462
+ /* flex-basis: 25%; */
463
+ }
465
464
 
466
- input.main-menu-trigger {
467
- &:not(:checked) {
468
- ~,
469
- ~ * {
470
- .full-menu,
471
- .float-menu {
472
- .menu-container {
473
- nav,
474
- .nav {
475
- max-height: 0;
476
- max-width: 0;
477
- }
465
+ input.main-menu-trigger {
466
+ &:not(:checked) {
467
+ ~ {
468
+ .full-menu,
469
+ .float-menu {
470
+ .menu-container {
471
+ nav,
472
+ .nav {
473
+ max-height: 0;
474
+ max-width: 0;
478
475
  }
479
476
  }
480
477
  }
481
478
  }
482
479
  }
480
+ }
483
481
 
484
- .float-menu {
485
- .menu-container {
486
- position: fixed;
487
- bottom: 0;
482
+ .float-menu {
483
+ .menu-container {
484
+ position: fixed;
485
+ bottom: 0;
488
486
 
489
- &.right,
490
- &:not(.left) {
491
- right: 0;
492
- }
487
+ &.right,
488
+ &:not(.left) {
489
+ right: 0;
490
+ }
493
491
 
494
- &.left {
495
- left: 0;
496
- }
492
+ &.left {
493
+ left: 0;
497
494
  }
498
495
  }
499
496
  }
@@ -501,6 +498,25 @@ footer {
501
498
 
502
499
  /* Mobile Below */
503
500
  @media (max-width: 576px) {
501
+ .side-menu {
502
+ --side-menu-width: var(--side-menu-width-sm);
503
+ position: fixed;
504
+ top: 0;
505
+ left: 0;
506
+ bottom: 0;
507
+ width: 80%;
508
+ transform: translateX(-100%);
509
+ opacity: 0;
510
+ box-shadow: 0 0 50px hsla(var(--black-hs), var(--black-l), 0.25);
511
+ }
512
+
513
+ .full-menu {
514
+ top: 0;
515
+ left: 0;
516
+ right: 0;
517
+ bottom: 0;
518
+ }
519
+
504
520
  // TODO: Move into main-menu-container
505
521
  input.main-menu-trigger {
506
522
  &:checked {
@@ -509,10 +525,16 @@ footer {
509
525
  background-color: hsla(var(--black-hs), var(--black-l), 0.2);
510
526
  z-index: 1;
511
527
 
512
- ~,
513
- ~ * {
528
+ ~ {
514
529
  .main-menu {
515
- &:not(:has(> .menu-snap)) {
530
+ --background-color: hsla(
531
+ var(--secondary-hs),
532
+ var(--secondary-l),
533
+ 0.125
534
+ );
535
+ --color: var(--secondary-c);
536
+
537
+ &:not(:has(> .menu-snap), .h) {
516
538
  flex-direction: column;
517
539
  }
518
540
 
@@ -527,13 +549,8 @@ footer {
527
549
  }
528
550
 
529
551
  %blur-behind {
530
- --background-color: hsla(
531
- var(--secondary-hs),
532
- var(--secondary-l),
533
- 0.125
534
- );
535
552
  background-color: var(--background-color);
536
- color: var(--secondary-c);
553
+ color: var(--color);
537
554
  backdrop-filter: blur(0.75rem);
538
555
  }
539
556
 
@@ -560,41 +577,14 @@ footer {
560
577
  }
561
578
  }
562
579
 
580
+ #{selector.nest('.main-menu', 'nav, .nav')} {
581
+ overflow-y: scroll;
582
+ }
583
+
563
584
  .main-menu-container {
564
- #{selector.nest('input.main-menu-trigger:checked','~,~ *','.main-menu', selector.unify('nav, .nav,.menu-container',':not(.menu-snap)'))},
585
+ #{selector.nest('input.main-menu-trigger:checked','~','.main-menu', selector.unify('nav, .nav,.menu-container',':not(.menu-snap)'))},
565
586
  &.flex {
566
587
  flex-direction: column;
567
588
  }
568
-
569
- &.grid:has(> .side-menu) {
570
- grid-template-columns: 1fr;
571
- }
572
-
573
- #{selector.nest('.main-menu', 'nav, .nav')} {
574
- overflow-y: scroll;
575
- }
576
-
577
- .side-menu {
578
- position: fixed;
579
- top: 0;
580
- left: 0;
581
- bottom: 0;
582
- width: 80%;
583
- flex-basis: 80%;
584
- transform: translateX(-100%);
585
- opacity: 0;
586
- box-shadow: 0 0 50px hsla(var(--black-hs), var(--black-l), 0.25);
587
- }
588
-
589
- .full-menu {
590
- top: 0;
591
- left: 0;
592
- right: 0;
593
- bottom: 0;
594
-
595
- .menu-header {
596
- width: 100%;
597
- }
598
- }
599
589
  }
600
590
  }