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