vanilla-framework 4.6.0 → 4.8.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 (37) hide show
  1. package/package.json +12 -13
  2. package/scss/_base.scss +2 -0
  3. package/scss/_base_background.scss +2 -6
  4. package/scss/_base_forms.scss +23 -104
  5. package/scss/_base_hr.scss +5 -39
  6. package/scss/_base_icon-definitions.scss +335 -46
  7. package/scss/_base_links.scss +2 -10
  8. package/scss/_base_placeholders.scss +1 -1
  9. package/scss/_base_tables.scss +2 -2
  10. package/scss/_base_themes.scss +52 -0
  11. package/scss/_base_typography-definitions.scss +1 -1
  12. package/scss/_global_functions.scss +10 -0
  13. package/scss/_layouts_application-panels.scss +1 -1
  14. package/scss/_patterns_chip.scss +156 -189
  15. package/scss/_patterns_contextual-menu.scss +16 -75
  16. package/scss/_patterns_divider.scss +5 -35
  17. package/scss/_patterns_form-help-text.scss +1 -29
  18. package/scss/_patterns_form-password-toggle.scss +1 -1
  19. package/scss/_patterns_form-tick-elements.scss +12 -129
  20. package/scss/_patterns_form-validation.scss +31 -229
  21. package/scss/_patterns_icons.scss +623 -442
  22. package/scss/_patterns_links.scss +12 -9
  23. package/scss/_patterns_lists.scss +0 -31
  24. package/scss/_patterns_navigation.scss +66 -13
  25. package/scss/_patterns_notifications.scss +21 -12
  26. package/scss/_patterns_search-box.scss +20 -99
  27. package/scss/_patterns_section.scss +12 -1
  28. package/scss/_patterns_side-navigation-expandable.scss +18 -55
  29. package/scss/_patterns_side-navigation.scss +117 -317
  30. package/scss/_patterns_strip.scss +87 -21
  31. package/scss/_patterns_suru.scss +126 -10
  32. package/scss/_patterns_table-mobile-card.scss +1 -1
  33. package/scss/_patterns_table-sortable.scss +2 -2
  34. package/scss/_patterns_tabs.scss +23 -74
  35. package/scss/_settings_colors.scss +164 -2
  36. package/scss/_settings_placeholders.scss +4 -1
  37. package/scss/_settings_themes.scss +6 -6
@@ -106,7 +106,9 @@
106
106
  }
107
107
 
108
108
  .p-side-navigation__drawer {
109
+ background: $colors--theme--background-default;
109
110
  bottom: 0;
111
+ color: $colors--theme--text-default;
110
112
  left: 0;
111
113
  overflow: auto;
112
114
  position: fixed;
@@ -155,6 +157,7 @@
155
157
  .p-side-navigation__overlay {
156
158
  @include vf-transition(opacity);
157
159
 
160
+ background: $colors--theme--background-overlay;
158
161
  bottom: 0;
159
162
  left: 0;
160
163
  opacity: 0;
@@ -176,8 +179,10 @@
176
179
  }
177
180
 
178
181
  .p-side-navigation__drawer-header {
182
+ background: $colors--theme--background-default;
179
183
  border-bottom-style: solid;
180
184
  border-bottom-width: 1px;
185
+ border-color: $colors--theme--border-low-contrast;
181
186
  margin-bottom: $spv--small;
182
187
  padding-bottom: calc($spv--small - 1px); // compensate for border thickness
183
188
  padding-left: 0.25rem; // nudge to visually align icon with text
@@ -190,7 +195,6 @@
190
195
  .p-side-navigation__toggle,
191
196
  .p-side-navigation__toggle--in-drawer {
192
197
  @extend %vf-button-base;
193
-
194
198
  &::before {
195
199
  @extend %icon;
196
200
 
@@ -200,18 +204,42 @@
200
204
  }
201
205
  }
202
206
 
207
+ // toggle to open side navigation is supposed to be in main content (on light background)
208
+ // it's using default 'neutral' button look regardless of the theme used by side navigation
203
209
  .p-side-navigation__toggle {
210
+ @include vf-button-pattern;
211
+
204
212
  &::before {
213
+ @include vf-icon-chevron; // this icon is not themed, as it's on a default 'neutral' button regardless of the theme
205
214
  transform: rotate(-90deg);
206
215
  }
207
216
  }
208
217
 
209
218
  .p-side-navigation__toggle--in-drawer {
219
+ @include vf-button-pattern(
220
+ $button-background-color: $color-transparent,
221
+ $button-border-color: $colors--theme--border-high-contrast,
222
+ $button-text-color: $colors--theme--text-inactive,
223
+ $button-hover-background-color: $colors--theme--background-hover,
224
+ $button-hover-border-color: $colors--theme--border-high-contrast,
225
+ $button-active-background-color: $colors--theme--background-active,
226
+ $button-active-border-color: $color-transparent
227
+ );
210
228
  margin-bottom: $sp-unit * 2 - $spv-nudge * 2;
211
229
 
212
230
  &::before {
231
+ @include vf-icon-chevron-themed;
213
232
  transform: rotate(90deg);
214
233
  }
234
+
235
+ &[aria-expanded='true'] {
236
+ background-color: $color-transparent;
237
+
238
+ &:hover {
239
+ background: $colors--theme--background-hover;
240
+ color: $colors--theme--text-default;
241
+ }
242
+ }
215
243
  }
216
244
 
217
245
  @media (min-width: $threshold-6-12-col) {
@@ -259,10 +287,12 @@
259
287
  %side-navigation__list {
260
288
  @extend %vf-list;
261
289
  @extend %vf-pseudo-border--bottom;
290
+ color: $colors--theme--text-inactive;
262
291
 
263
292
  &::after {
264
293
  @include vf-side-navigation-spacing-left($prop: left);
265
294
 
295
+ background: $colors--theme--border-low-contrast;
266
296
  bottom: -0.5 * $spv--x-large; // place border in the middle of the margin
267
297
  }
268
298
 
@@ -313,6 +343,7 @@
313
343
  padding-top: $spv--x-small;
314
344
 
315
345
  .p-side-navigation__item--title > & {
346
+ color: $colors--theme--text-default;
316
347
  font-weight: $font-weight-bold;
317
348
  }
318
349
  }
@@ -332,6 +363,32 @@
332
363
  %side-navigation__link {
333
364
  @include vf-focus;
334
365
 
366
+ &,
367
+ &:visited {
368
+ color: $colors--theme--text-inactive;
369
+ }
370
+
371
+ &:hover {
372
+ background: $colors--theme--background-hover;
373
+ color: $colors--theme--text-default;
374
+ text-decoration: none;
375
+ }
376
+
377
+ &:active,
378
+ &.is-active,
379
+ &[aria-current='page'],
380
+ &[aria-current='true'] {
381
+ background: $colors--theme--background-active;
382
+ color: $colors--theme--text-default;
383
+ cursor: default;
384
+ }
385
+
386
+ &.is-active,
387
+ &[aria-current='page'],
388
+ &[aria-current='true'] {
389
+ @include vf-highlight-bar($colors--theme--text-default, left);
390
+ }
391
+
335
392
  // vf-highlight-bar is rendered above focus outline
336
393
  // so we need to hide it on focus
337
394
  &:focus::before {
@@ -343,20 +400,22 @@
343
400
  &:focus:not(:focus-visible)::before {
344
401
  display: block;
345
402
  }
346
-
347
- &:hover {
348
- text-decoration: none;
349
- }
350
403
  }
351
404
 
352
405
  .p-side-navigation__link {
353
406
  @extend %side-navigation__link;
407
+
408
+ &:visited {
409
+ color: $colors--theme--text-inactive;
410
+ }
354
411
  }
355
412
 
356
413
  .p-side-navigation__accordion-button {
357
414
  // reset default button styles
415
+ background-color: inherit;
358
416
  border: 0;
359
417
  border-radius: 0;
418
+ color: inherit;
360
419
  font-size: inherit;
361
420
  justify-content: flex-start;
362
421
  margin-bottom: 0;
@@ -365,6 +424,7 @@
365
424
 
366
425
  &::before {
367
426
  @extend %icon;
427
+ @include vf-icon-chevron-themed;
368
428
  @include vf-transition($property: transform, $duration: fast);
369
429
 
370
430
  align-self: center;
@@ -374,13 +434,19 @@
374
434
  margin-right: $sph--large;
375
435
  }
376
436
 
437
+ &:hover {
438
+ background: $colors--theme--background-hover;
439
+ color: $colors--theme--text-default;
440
+ }
441
+
377
442
  // aria-selected controls the open and closed state for the accordion tab
378
443
  &[aria-expanded='true'] {
379
444
  // override base expanded button styles
380
445
  background-color: inherit;
381
446
 
382
447
  &:hover {
383
- background-color: $colors--light-theme--background-hover;
448
+ background: $colors--theme--background-hover;
449
+ color: $colors--theme--text-default;
384
450
  }
385
451
  @include vf-transition(#{background-color, border-color});
386
452
  }
@@ -468,6 +534,13 @@
468
534
  padding: 0; // padding will come from the link in heading
469
535
  }
470
536
 
537
+ .p-side-navigation__heading,
538
+ .p-side-navigation__heading--linked .p-side-navigation__link,
539
+ .p-side-navigation__item--title,
540
+ .p-side-navigation__item--title .p-side-navigation__link {
541
+ color: $colors--theme--text-default;
542
+ }
543
+
471
544
  // Styles for markup in raw HTML docs variant
472
545
  .p-side-navigation--raw-html {
473
546
  // stylelint-disable selector-max-type -- we support raw HTML markup for discourse-generated side nav
@@ -477,14 +550,39 @@
477
550
  h5,
478
551
  h6 {
479
552
  @extend %side-navigation__heading;
553
+ color: $colors--theme--text-default;
480
554
  }
481
555
 
482
556
  ul {
483
557
  @extend %side-navigation__list;
558
+
559
+ &::after {
560
+ background: $colors--theme--border-low-contrast;
561
+ }
484
562
  }
485
563
 
486
564
  li > a {
487
565
  @extend %side-navigation__link;
566
+
567
+ &,
568
+ &:visited {
569
+ color: $colors--theme--text-inactive;
570
+ }
571
+
572
+ &:hover {
573
+ background: $colors--theme--background-hover;
574
+ color: $colors--theme--text-default;
575
+ }
576
+
577
+ &:active,
578
+ &.is-active,
579
+ &[aria-current='page'],
580
+ &[aria-current='true'] {
581
+ @include vf-highlight-bar($colors--theme--text-default, left);
582
+
583
+ background: $colors--theme--background-active;
584
+ color: $colors--theme--text-default;
585
+ }
488
586
  }
489
587
 
490
588
  li > span,
@@ -509,47 +607,26 @@
509
607
  // stylelint-enable selector-max-type
510
608
  }
511
609
 
512
- // Theming
513
- @if ($theme-default-p-side-navigation == 'dark') {
514
- .p-side-navigation,
515
- [class*='p-side-navigation--'] {
516
- @include vf-side-navigation-theme-dark;
517
-
518
- &.is-light {
519
- @include vf-side-navigation-theme-light;
520
- }
521
- }
522
-
523
- .p-side-navigation--raw-html {
524
- @include vf-side-navigation-raw-html-theme-dark;
525
-
526
- &.is-light {
527
- @include vf-side-navigation-raw-html-theme-light;
528
- }
529
- }
530
- } @else {
531
- .p-side-navigation,
532
- [class*='p-side-navigation--'] {
533
- @include vf-side-navigation-theme-light;
610
+ @if mixin-exists(vf-application-layout--when-collapsed) {
611
+ .p-side-navigation__item.has-active-child {
612
+ // parent element that has active child should be selected when navigation is collapsed
613
+ @include vf-application-layout--when-collapsed() {
614
+ // @include vf-highlight-bar($color-sidenav-item-border-highlight, left);
615
+ @include vf-highlight-bar($colors--theme--text-default, left);
534
616
 
535
- &.is-dark {
536
- @include vf-side-navigation-theme-dark;
617
+ background: $colors--theme--background-hover;
618
+ color: $colors--theme--text-default;
537
619
  }
538
- }
539
620
 
540
- .p-side-navigation--raw-html {
541
- @include vf-side-navigation-raw-html-theme-light;
621
+ // parent element with active child should not be selected when navigation is expanded
622
+ @include vf-application-layout--when-expanded() {
623
+ @include vf-highlight-bar(transparent, left);
542
624
 
543
- &.is-dark {
544
- @include vf-side-navigation-raw-html-theme-dark;
625
+ background: transparent;
626
+ color: $colors--theme--text-inactive;
545
627
  }
546
628
  }
547
629
  }
548
-
549
- .is-paper .p-side-navigation__drawer,
550
- .is-paper .p-side-navigation__drawer-header {
551
- background: $color-paper;
552
- }
553
630
  }
554
631
 
555
632
  // helper
@@ -570,280 +647,3 @@
570
647
  #{$prop}: $multiplier * map-get($grid-margin-widths, default) + $offset;
571
648
  }
572
649
  }
573
-
574
- // theme
575
- @mixin vf-side-navigation-theme(
576
- // default text color in sidebar
577
- $color-sidenav-text-default,
578
- // default background color (for the drawer)
579
- $color-sidenav-background-default,
580
- // background color the overlay
581
- $color-sidenav-background-overlay,
582
- // text color of highlighted items
583
- $color-sidenav-text-active,
584
- // background color of active items
585
- $color-sidenav-item-background-active,
586
- // background color of hovered items
587
- $color-sidenav-item-background-hover,
588
- // border color of active item
589
- $color-sidenav-item-border-highlight,
590
- // border color of items list
591
- $color-sidenav-list-border,
592
- // color of toggle icon - needed because of lack of rgba support in icon mixin
593
- $color-sidenav-toggle-icon
594
- ) {
595
- & {
596
- color: $color-sidenav-text-default;
597
- }
598
-
599
- // toggle to open side navigation is supposed to be in main content (on light background)
600
- // it's using default 'neutral' button look regardless of the theme used by side navigation
601
- .p-side-navigation__toggle {
602
- @include vf-button-pattern;
603
-
604
- &::before {
605
- @include vf-icon-chevron;
606
- }
607
- }
608
-
609
- .p-side-navigation__toggle--in-drawer {
610
- @include vf-button-pattern(
611
- $button-background-color: $color-transparent,
612
- $button-border-color: $color-transparent,
613
- $button-text-color: $color-sidenav-text-default,
614
- $button-hover-background-color: $color-sidenav-item-background-hover,
615
- $button-hover-border-color: $color-transparent,
616
- $button-active-background-color: $color-sidenav-item-background-active,
617
- $button-active-border-color: $color-transparent
618
- );
619
-
620
- &::before {
621
- @include vf-icon-chevron($color-sidenav-toggle-icon);
622
- }
623
-
624
- &[aria-expanded='true'] {
625
- background-color: $color-transparent;
626
-
627
- &:hover {
628
- background: $color-sidenav-item-background-hover;
629
- color: $color-sidenav-text-active;
630
- }
631
- }
632
- }
633
-
634
- .p-side-navigation__drawer {
635
- background: $color-sidenav-background-default;
636
- }
637
-
638
- .p-side-navigation__overlay {
639
- background: $color-sidenav-background-overlay;
640
- }
641
-
642
- .p-side-navigation__drawer-header {
643
- background: $color-sidenav-background-default;
644
- border-color: $color-sidenav-list-border;
645
- }
646
-
647
- .p-side-navigation__list::after {
648
- background: $color-sidenav-list-border;
649
- }
650
-
651
- .p-side-navigation__link {
652
- &,
653
- &:visited {
654
- color: $color-sidenav-text-default;
655
- }
656
-
657
- &:hover {
658
- background: $color-sidenav-item-background-hover;
659
- color: $color-sidenav-text-active;
660
- }
661
-
662
- &:active,
663
- &.is-active,
664
- &[aria-current='page'],
665
- &[aria-current='true'] {
666
- background: $color-sidenav-item-background-active;
667
- color: $color-sidenav-text-active;
668
- cursor: default;
669
- }
670
-
671
- &.is-active,
672
- &[aria-current='page'],
673
- &[aria-current='true'] {
674
- @include vf-highlight-bar($color-sidenav-item-border-highlight, left);
675
- }
676
- }
677
-
678
- .p-side-navigation__heading,
679
- .p-side-navigation__heading--linked .p-side-navigation__link,
680
- .p-side-navigation__item--title,
681
- .p-side-navigation__item--title .p-side-navigation__link {
682
- color: $color-sidenav-text-active;
683
- }
684
-
685
- .p-side-navigation__accordion-button {
686
- background-color: inherit;
687
- color: inherit;
688
- &::before {
689
- @include vf-icon-chevron($color-sidenav-toggle-icon);
690
- }
691
-
692
- &:hover {
693
- background: $color-sidenav-item-background-hover;
694
- color: $color-sidenav-text-active;
695
- }
696
- }
697
-
698
- // styles applied when side nav is used in application layout
699
- @if mixin-exists(vf-application-layout--when-collapsed) {
700
- .p-side-navigation__item.has-active-child {
701
- // parent element that has active child should be selected when navigation is collapsed
702
- @include vf-application-layout--when-collapsed() {
703
- @include vf-highlight-bar($color-sidenav-item-border-highlight, left);
704
-
705
- background: $color-sidenav-item-background-hover;
706
- color: $color-sidenav-text-active;
707
- }
708
-
709
- // parent element with active child should not be selected when navigation is expanded
710
- @include vf-application-layout--when-expanded() {
711
- @include vf-highlight-bar(transparent, left);
712
-
713
- background: transparent;
714
- color: $color-sidenav-text-default;
715
- }
716
- }
717
- }
718
- }
719
-
720
- @mixin vf-side-navigation-theme-light {
721
- @include vf-side-navigation-theme(
722
- $color-sidenav-text-default: $colors--light-theme--text-inactive,
723
- $color-sidenav-background-default: $colors--light-theme--background-default,
724
- $color-sidenav-background-overlay: $colors--light-theme--background-overlay,
725
- $color-sidenav-text-active: $colors--light-theme--text-default,
726
- $color-sidenav-item-background-active: $colors--light-theme--background-active,
727
- $color-sidenav-item-background-hover: $colors--light-theme--background-hover,
728
- $color-sidenav-item-border-highlight: $colors--light-theme--text-default,
729
- $color-sidenav-list-border: $colors--light-theme--border-low-contrast,
730
- $color-sidenav-toggle-icon: $colors--light-theme--text-inactive
731
- );
732
-
733
- .is-paper & {
734
- @include vf-side-navigation-theme(
735
- $color-sidenav-text-default: $colors--light-theme--text-inactive,
736
- $color-sidenav-background-default: $color-paper,
737
- $color-sidenav-background-overlay: $colors--light-theme--background-overlay,
738
- $color-sidenav-text-active: $colors--light-theme--text-default,
739
- $color-sidenav-item-background-active: $colors--paper-theme--background-active,
740
- $color-sidenav-item-background-hover: $colors--paper-theme--background-hover,
741
- $color-sidenav-item-border-highlight: $colors--light-theme--text-default,
742
- $color-sidenav-list-border: $colors--light-theme--border-low-contrast,
743
- $color-sidenav-toggle-icon: $colors--light-theme--text-inactive
744
- );
745
- }
746
- }
747
-
748
- @mixin vf-side-navigation-theme-dark {
749
- // FIXME:
750
- // $color-sidenav-toggle-icon color should be same as $color-sidenav-text-default,
751
- // but vf-url-friendly-color doesn't support rgba(),
752
- // so we are using #999 as fallback for now
753
- @include vf-side-navigation-theme(
754
- $color-sidenav-text-default: $colors--dark-theme--text-inactive,
755
- $color-sidenav-background-default: $colors--dark-theme--background-default,
756
- $color-sidenav-background-overlay: $colors--dark-theme--background-overlay,
757
- $color-sidenav-text-active: $colors--dark-theme--text-default,
758
- $color-sidenav-item-background-active: $colors--dark-theme--background-active,
759
- $color-sidenav-item-background-hover: $colors--dark-theme--background-hover,
760
- $color-sidenav-item-border-highlight: $colors--dark-theme--text-default,
761
- $color-sidenav-list-border: $colors--dark-theme--border-low-contrast,
762
- $color-sidenav-toggle-icon: #999
763
- );
764
- }
765
-
766
- // Theme for markup in raw HTML docs variant
767
- @mixin vf-side-navigation-raw-html-theme(
768
- // default text color in sidebar
769
- $color-sidenav-text-default,
770
- // text color of highlighted items
771
- $color-sidenav-text-active,
772
- // background color of active items
773
- $color-sidenav-item-background-active,
774
- // background color of hovered items
775
- $color-sidenav-item-background-hover,
776
- // border color of active item
777
- $color-sidenav-item-border-highlight,
778
- // border color of items list
779
- $color-sidenav-list-border
780
- ) {
781
- // stylelint-disable selector-max-type
782
- ul::after {
783
- background: $color-sidenav-list-border;
784
- }
785
-
786
- li > a {
787
- &,
788
- &:visited {
789
- color: $color-sidenav-text-default;
790
- }
791
-
792
- &:hover {
793
- background: $color-sidenav-item-background-hover;
794
- color: $color-sidenav-text-active;
795
- }
796
-
797
- &:active,
798
- &.is-active,
799
- &[aria-current='page'],
800
- &[aria-current='true'] {
801
- @include vf-highlight-bar($color-sidenav-item-border-highlight, left);
802
-
803
- background: $color-sidenav-item-background-active;
804
- color: $color-sidenav-text-active;
805
- }
806
- }
807
-
808
- h2,
809
- h3,
810
- h4,
811
- h5,
812
- h6 {
813
- color: $color-sidenav-text-active;
814
- }
815
- // stylelint-enable selector-max-type
816
- }
817
-
818
- @mixin vf-side-navigation-raw-html-theme-light {
819
- @include vf-side-navigation-raw-html-theme(
820
- $color-sidenav-text-default: $colors--light-theme--text-inactive,
821
- $color-sidenav-text-active: $colors--light-theme--text-default,
822
- $color-sidenav-item-background-active: $colors--light-theme--background-active,
823
- $color-sidenav-item-background-hover: $colors--light-theme--background-hover,
824
- $color-sidenav-item-border-highlight: $colors--light-theme--text-default,
825
- $color-sidenav-list-border: $colors--light-theme--border-low-contrast
826
- );
827
-
828
- .is-paper {
829
- @include vf-side-navigation-raw-html-theme(
830
- $color-sidenav-text-default: $colors--light-theme--text-inactive,
831
- $color-sidenav-text-active: $colors--light-theme--text-default,
832
- $color-sidenav-item-background-active: $colors--paper-theme--background-active,
833
- $color-sidenav-item-background-hover: $colors--paper-theme--background-hover,
834
- $color-sidenav-item-border-highlight: $colors--light-theme--text-default,
835
- $color-sidenav-list-border: $colors--light-theme--border-low-contrast
836
- );
837
- }
838
- }
839
-
840
- @mixin vf-side-navigation-raw-html-theme-dark {
841
- @include vf-side-navigation-raw-html-theme(
842
- $color-sidenav-text-default: $colors--dark-theme--text-inactive,
843
- $color-sidenav-text-active: $colors--dark-theme--text-default,
844
- $color-sidenav-item-background-active: $colors--dark-theme--background-active,
845
- $color-sidenav-item-background-hover: $colors--dark-theme--background-hover,
846
- $color-sidenav-item-border-highlight: $colors--dark-theme--text-default,
847
- $color-sidenav-list-border: $colors--dark-theme--border-low-contrast
848
- );
849
- }