nfg_ui 0.11.2 → 0.11.7

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_badge.scss +4 -1
  4. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_buttons.scss +4 -1
  5. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_custom-forms.scss +4 -1
  6. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_custom.scss +1 -0
  7. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/custom/_activity_feed.scss +7 -0
  8. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_custom.scss +3 -0
  9. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_modal.scss +16 -0
  10. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_activity_feed.scss +34 -0
  11. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_builder_layout.scss +3 -2
  12. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_card.scss +1 -1
  13. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_gallery.scss +46 -0
  14. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_interaction.scss +1 -1
  15. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_overlay_blocker.scss +1 -1
  16. data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_sortable.scss +29 -0
  17. data/app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/_custom.scss +1 -0
  18. data/app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_icon.scss +5 -0
  19. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_alert.scss +4 -4
  20. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_badge.scss +3 -0
  21. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_buttons.scss +3 -0
  22. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_card.scss +5 -1
  23. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_custom-forms.scss +15 -2
  24. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_custom.scss +2 -0
  25. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_dropdown.scss +9 -1
  26. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_reboot.scss +4 -0
  27. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_sizing.scss +11 -0
  28. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_avatar.scss +1 -1
  29. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_icon.scss +34 -0
  30. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_skeleton.scss +50 -0
  31. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_slat.scss +0 -18
  32. data/app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_tile.scss +4 -4
  33. data/lib/nfg_ui/bootstrap/components/modal.rb +5 -1
  34. data/lib/nfg_ui/components/patterns/modal.rb +7 -0
  35. data/lib/nfg_ui/components/traits.rb +1 -0
  36. data/lib/nfg_ui/components/traits/modal.rb +15 -0
  37. data/lib/nfg_ui/version.rb +1 -1
  38. metadata +12 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfa9be2c77b91ed1c24ae28636c7681863e33774499320ca482863400c2b26fd
4
- data.tar.gz: c60da4d8004d53286ac26adc94efe9f290fc4d80ddef8ebba8d62c002bb56018
3
+ metadata.gz: 25be62c4490a2e758f4a9163d6955c7a7a42afe7023cba02cfbb2288a5b11a30
4
+ data.tar.gz: 0b5da4a8e9d44c8fa8b1c0df33d26aac74d77d204919140ad541fba75e8e8b52
5
5
  SHA512:
6
- metadata.gz: f349175b3e76009cf9d231b3b55843921c8d73365f67f35f1abe89dc0b8d52762d7d76c9cf856a091f92ddaccbb8176f987ff8500245030a4c933df69dbcc2b5
7
- data.tar.gz: d8a30ea0e5fbb65c42921c7b76a0906240cc9d0c647c3652263651cfa465a296215d5e895b74351d633e54d638c2d7c16dac8fde16759828d973a87768ba4bb8
6
+ metadata.gz: ba0eb2b78b235995105c2d54601fb3dd51f2ef8f1d5d15b6af0d245dc209597ef25fa3a088b8ca44d9439a6083faf3e7371f7e7ebfffad1c612706b08a7afccb
7
+ data.tar.gz: 3614b0132a97c5f9989898a85aa12ec5a98f185dfa3ae1d65738be2a961093d0b406d9aac4cfbfc83cf447f7ba2b973c2869e4eb6ce2d188d260d317bc812de9
data/Rakefile CHANGED
@@ -36,7 +36,7 @@ task :publish, %i[override_flag] do |_, override_flag: nil|
36
36
  subtask_args << ",#{override_flag}" if override_flag
37
37
 
38
38
  Dir.chdir("#{__dir__}/publisher") do
39
- Bundler.with_clean_env do
39
+ Bundler.with_unbundled_env do
40
40
  sh "RAILS_ENV=production bundle exec rake publish[#{subtask_args}]" do |ok, _|
41
41
  puts 'unable to publish assets' unless ok
42
42
  end
@@ -1,5 +1,8 @@
1
1
  @each $color, $value in $colors {
2
2
  .#{$color} {
3
- .badge-primary { @include badge-variant($value); }
3
+ .badge-primary {
4
+ @include badge-variant($value);
5
+ color: $white !important;
6
+ }
4
7
  }
5
8
  }
@@ -1,6 +1,9 @@
1
1
  @each $color, $value in $colors {
2
2
  .#{$color} {
3
- .btn-primary { @include button-variant($value, $value); }
3
+ .btn-primary {
4
+ @include button-variant($value, $value);
5
+ color: $white !important;
6
+ }
4
7
  .show > .btn-primary.dropdown-toggle {
5
8
  background-color: darken($value, 10%);
6
9
  border-color: darken($value, 10%);
@@ -20,6 +20,9 @@
20
20
  }
21
21
  }
22
22
  }
23
- .custom-select { color: $value; }
23
+ .custom-select {
24
+ color: $value;
25
+ &:focus { border-color: $value; }
26
+ }
24
27
  }
25
28
  }
@@ -1,3 +1,4 @@
1
1
  // Our custom styles
2
+ @import 'custom/activity_feed';
2
3
  @import 'custom/icons';
3
4
  @import 'custom/nav_step';
@@ -0,0 +1,7 @@
1
+ @each $color, $value in $colors {
2
+ .activity-feed-item {
3
+ &.#{nth($color, 1)} {
4
+ .activity-icon { background-color: $value; }
5
+ }
6
+ }
7
+ }
@@ -1,4 +1,5 @@
1
1
  // Our custom styles
2
+ @import 'custom/activity_feed';
2
3
  @import 'custom/builder_layout';
3
4
  @import 'custom/campaign_card';
4
5
  @import 'custom/campaign_preview';
@@ -7,11 +8,13 @@
7
8
  @import 'custom/custom_receipt_language';
8
9
  @import 'custom/email_preview';
9
10
  @import 'custom/free_trial';
11
+ @import 'custom/gallery';
10
12
  @import 'custom/icomoon';
11
13
  @import 'custom/interaction';
12
14
  @import 'custom/overlay_blocker';
13
15
  @import 'custom/page_header';
14
16
  @import 'custom/share_dropdown';
17
+ @import 'custom/sortable';
15
18
  @import 'custom/status_indicator';
16
19
  @import 'custom/tile';
17
20
  @import 'custom/video_countdown';
@@ -4,3 +4,19 @@
4
4
  + #quick-add-modal { display: none !important; }
5
5
  ~ .modal-backdrop.show ~ .modal-backdrop.show { display: none !important; }
6
6
  }
7
+
8
+
9
+ // Full page cover modal option
10
+ .modal-cover {
11
+ margin: 0;
12
+ width: 100%;
13
+ max-width: 100%;
14
+ height: 100%;
15
+ transform: none !important; // removes default 50px transform that occurs on modal showing (.fade and .show)
16
+ .modal-content {
17
+ display: block;
18
+ height: 100%;
19
+ border: none;
20
+ border-radius: 0;
21
+ }
22
+ }
@@ -0,0 +1,34 @@
1
+ // Activity feed list items
2
+ .activity-feed-item {
3
+ position: relative;
4
+ padding: 0 0 $spacer ($spacer * 1.5);
5
+ border: none;
6
+ z-index: 0;
7
+ &::after {
8
+ position: absolute;
9
+ top: 0;
10
+ left: 12px;
11
+ bottom: 0;
12
+ z-index: 0;
13
+ border-left: $border-width solid $border-color;
14
+ content: "";
15
+ }
16
+ &:last-child {
17
+ padding-bottom: 0;
18
+ &::after { display: none; }
19
+ }
20
+ .activity-icon {
21
+ position: absolute;
22
+ top: 2px;
23
+ left: 0;
24
+ display: block;
25
+ width: $spacer;
26
+ height: $spacer;
27
+ font-size: $font-size-sm;
28
+ line-height: $spacer;
29
+ z-index: 1;
30
+ text-align: center;
31
+ @include border-radius(50%);
32
+ box-shadow: 0 0 0 2px rgba(255,255,255,1);
33
+ }
34
+ }
@@ -80,10 +80,11 @@ $builder-preview-padding: ($spacer * 2);
80
80
  }
81
81
  }
82
82
  .builder-preview {
83
+ background-color: $body-bg;
83
84
  padding: $builder-preview-padding ($builder-preview-padding / 2);
84
85
  @include media-breakpoint-up(lg) {
85
86
  float: left;
86
- width: 67vw;
87
+ width: 67%;
87
88
  height: 100%;
88
89
  overflow-y: auto;
89
90
  > :last-child { margin-bottom: $builder-preview-padding; }
@@ -95,7 +96,7 @@ $builder-preview-padding: ($spacer * 2);
95
96
  @include media-breakpoint-down(md) { border-bottom: $border-width solid $border-color; }
96
97
  @include media-breakpoint-up(lg) {
97
98
  float: right;
98
- width: 33vw;
99
+ width: 33%;
99
100
  height: 100%;
100
101
  border-left: $border-width solid $border-color;
101
102
  overflow-y: auto;
@@ -3,4 +3,4 @@
3
3
  height: ($spacer * 8);
4
4
  overflow: hidden;
5
5
  .card-img { min-height: 100%; }
6
- }
6
+ }
@@ -0,0 +1,46 @@
1
+ // Gallery styles
2
+ .card-gallery {
3
+
4
+ // Gallery image styles
5
+ .card-gallery-img {
6
+ height: ($spacer * 14); // sets height of gallery image preview
7
+ overflow: hidden;
8
+ z-index: 0;
9
+ .card-img {
10
+ min-height: 100%;
11
+ z-index: 0;
12
+ }
13
+ .card-img-overlay { z-index: 1; }
14
+ .card-gallery-img-overlay {
15
+ display: block;
16
+ position: absolute;
17
+ top: 0;
18
+ right: 0;
19
+ bottom: 0;
20
+ left: 0;
21
+ text-align: center;
22
+ background-color: $modal-backdrop-bg;
23
+ transition: $transition-fade;
24
+ opacity: 0;
25
+ z-index: 10;
26
+ @include hover { opacity: 1; }
27
+ > .card-gallery-img-overlay-text {
28
+ position: absolute;
29
+ top: 50%;
30
+ left: 50%;
31
+ width: 100%;
32
+ transform: translate(-50%, -50%);
33
+ }
34
+ }
35
+ }
36
+
37
+ // Gallery card body styles
38
+ .card-body { z-index: 10; }
39
+ .badge-highlight {
40
+ position: absolute;
41
+ top: -($card-spacer-y * .5);
42
+ left: $card-spacer-y;
43
+ }
44
+ }
45
+
46
+
@@ -1,2 +1,2 @@
1
1
  // Sort
2
- [class*='sort']:not(.sort_link) { cursor: move; }
2
+ .ui-sortable-handle, [data-sortable="handle"] { cursor: move; }
@@ -40,7 +40,7 @@ $redacted-font-family: "BLOKK";
40
40
  font-family: $font-family-base;
41
41
  letter-spacing: 0;
42
42
  word-spacing: 0;
43
- background-color: rgba(255,255,255,0.9);
43
+ background-color: transparentize($white, 0.2);
44
44
  }
45
45
  .overlay-blur {
46
46
  transition: $transition-base;
@@ -0,0 +1,29 @@
1
+ // Shared sorting styles
2
+ .slat, .option {
3
+ &.ui-sortable-placeholder {
4
+ visibility: visible !important;
5
+ background: theme-color("light");
6
+ border: $border-width dashed $border-color;
7
+ }
8
+ &.ui-sortable-helper { opacity: .5; }
9
+ }
10
+ // Slat
11
+ .slat {
12
+ &.ui-sortable-placeholder {
13
+ + .slat { border-top: none; }
14
+ + &.ui-sortable-helper {
15
+ border-top-style: dashed;
16
+ + &.slat { border-top: none; }
17
+ }
18
+ }
19
+ &.ui-sortable-helper {
20
+ border-top: none;
21
+ border-top: none;
22
+ + &.ui-sortable-placeholder { border-top: $border-width dashed $border-color; }
23
+ }
24
+ }
25
+
26
+ // Sortable options (used on form fields for checkboxes/radios/select options)
27
+ .option {
28
+ &.ui-sortable-placeholder { margin-bottom: ($spacer * .25); }
29
+ }
@@ -1,6 +1,7 @@
1
1
  // Our custom styles
2
2
  @import 'custom/avatar';
3
3
  @import 'custom/everyday_giving';
4
+ @import 'custom/icon';
4
5
  @import 'custom/nav_step';
5
6
  @import 'custom/slat';
6
7
  @import 'custom/video_countdown';
@@ -0,0 +1,5 @@
1
+ .icon-circle {
2
+ display: -ms-inline-flexbox;
3
+ -ms-flex-align: center;
4
+ -ms-flex-pack: center;
5
+ }
@@ -6,11 +6,11 @@
6
6
  &:hover, &:active { text-decoration: none; }
7
7
  }
8
8
  }
9
- .alert-success a:not(.btn) { color: $success; }
10
- .alert-info a:not(.btn) { color: $info; }
11
- .alert-warning a:not(.btn) { color: $warning; }
9
+ .alert-success a:not(.btn) { color: $success !important; }
10
+ .alert-info a:not(.btn) { color: $info !important; }
11
+ .alert-warning a:not(.btn) { color: $warning !important; }
12
12
  .alert-danger, .alert-error {
13
- a:not(.btn) { color: $danger; }
13
+ a:not(.btn) { color: $danger !important; }
14
14
  }
15
15
  .alert-gray, .alert-notice,
16
16
  .alert-light, .alert-dark {
@@ -0,0 +1,3 @@
1
+ // overrides color contrast settings
2
+ .badge-secondary { color: $white !important; }
3
+ .badge-warning { color: $white !important; }
@@ -15,3 +15,6 @@
15
15
  }
16
16
  }
17
17
  .btn-link { font-weight: $btn-font-weight; }
18
+
19
+ // overrides color contrast settings
20
+ .btn-warning { color: $white !important; }
@@ -13,6 +13,10 @@
13
13
  .card-footer { border-top: none; }
14
14
 
15
15
  // Card image
16
- .card-img-overlay { @include gradient-y(transparentize($black, 1), transparentize($black, .5)); }
16
+ .card-img-overlay {
17
+ top: auto; // makes the overlay gradient and container "stick" to bottom of parent container
18
+ min-height: ($spacer * 2);
19
+ @include gradient-y(transparentize($black, 1), transparentize($black, .5));
20
+ }
17
21
 
18
22
  .card-img { @include border-radius(0); }
@@ -3,6 +3,7 @@
3
3
  // Base class takes care of all the key behavioral aspects.
4
4
 
5
5
  .custom-control {
6
+ padding-left: 0;
6
7
  .custom-control-input {
7
8
  &:checked {
8
9
  ~ .custom-control-label,
@@ -10,6 +11,7 @@
10
11
  }
11
12
  &:focus:not(:checked) ~ .custom-control-label::before { border-color: $input-border-color; }
12
13
  }
14
+ + .custom-control:not(.custom-control-inline) { margin-top: ($spacer * .25); }
13
15
  }
14
16
 
15
17
  // Custom control indicators
@@ -17,11 +19,17 @@
17
19
  // Build the custom controls out of pseudo-elements.
18
20
 
19
21
  .custom-control-label {
22
+ padding-left: $custom-control-gutter + $custom-control-indicator-size;
23
+ min-width: $custom-control-gutter + $custom-control-indicator-size;
24
+ min-height: $custom-control-indicator-size;
20
25
  font-weight: $font-weight-normal;
21
26
  cursor: pointer;
22
27
 
23
28
  // Background-color and icon
24
- &::before, &::after { top: .3rem; }
29
+ &::before, &::after {
30
+ top: .3rem;
31
+ left: 0;
32
+ }
25
33
  &::before { border: $border-width solid $border-color; }
26
34
  &::after { cursor: pointer; }
27
35
  }
@@ -41,6 +49,9 @@
41
49
  //
42
50
 
43
51
  .custom-select {
52
+ display: block;
53
+ width: auto;
54
+ max-width: 100%;
44
55
  font-weight: $btn-font-weight;
45
56
  cursor: pointer;
46
57
  box-shadow: none;
@@ -97,7 +108,10 @@
97
108
  // Tweak a few things for switches
98
109
 
99
110
  .custom-switch {
111
+ padding-left: 0;
100
112
  .custom-control-label {
113
+ padding-left: $custom-switch-width + $custom-control-gutter;
114
+ &::before, &::after { left: 0; }
101
115
  &::before {
102
116
  padding-left: 28px;
103
117
  font-size: 12px;
@@ -109,7 +123,6 @@
109
123
  }
110
124
  &::after {
111
125
  top: 0;
112
- left: -($custom-switch-width + $custom-control-gutter);
113
126
  background-color: $white;
114
127
  border: $border-width solid $border-color;
115
128
  border-radius: 50%;
@@ -1,11 +1,13 @@
1
1
  // Our custom styles
2
2
  @import 'custom/avatar';
3
3
  @import 'custom/device_preview';
4
+ @import 'custom/icon';
4
5
  @import 'custom/illustration';
5
6
  @import 'custom/mobile';
6
7
  @import 'custom/nav_step';
7
8
  @import 'custom/redactor';
8
9
  @import 'custom/social_share';
10
+ @import 'custom/skeleton';
9
11
  @import 'custom/slat';
10
12
  @import 'custom/ticket';
11
13
  @import 'custom/tile';
@@ -9,6 +9,7 @@
9
9
  cursor: default;
10
10
  pointer-events: none;
11
11
  }
12
+ &:not(.text-danger) { color: inherit !important; }
12
13
  }
13
14
 
14
15
 
@@ -21,7 +22,14 @@
21
22
 
22
23
 
23
24
  // Sizing
24
- .dropdown-menu-md { min-width: ($spacer * 12); }
25
+ .dropdown-menu-md, .dropdown-menu-lg { min-width: ($spacer * 10); }
26
+ .dropdown-menu-md {
27
+ @include media-breakpoint-up(sm) { min-width: ($spacer * 12); }
28
+ }
29
+ .dropdown-menu-lg {
30
+ @include media-breakpoint-up(sm) { min-width: ($spacer * 24); }
31
+ }
32
+
25
33
 
26
34
 
27
35
  // Styles for wider "My Tools" dropdown in top nav
@@ -18,6 +18,10 @@ body {
18
18
 
19
19
  div { position: relative; } // setting this as a base to avoid improper absolute positioning elements
20
20
 
21
+ p {
22
+ &.disabled { opacity: .4; } // used on filter bars on list pages for bulk actions
23
+ }
24
+
21
25
  ol,
22
26
  ul,
23
27
  dl {
@@ -0,0 +1,11 @@
1
+ // Width and height based on viewport
2
+ @each $breakpoint in map-keys($grid-breakpoints) {
3
+ @include media-breakpoint-up($breakpoint) {
4
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
5
+ @each $prop, $abbrev in (width: w, height: h) {
6
+ @each $size, $length in $sizes {
7
+ .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }
8
+ }
9
+ }
10
+ }
11
+ }
@@ -21,7 +21,7 @@
21
21
  .avatar-text {
22
22
  font-weight: $font-weight-bold;
23
23
  font-size: $font-size-base;
24
- line-height: 1;
24
+ line-height: 1.2;
25
25
  color: $body-color;
26
26
  text-align: center;
27
27
  white-space: nowrap;
@@ -0,0 +1,34 @@
1
+ // Custom icon styles
2
+ // icons shouldn't be larger than the h1 font-size. use illustrations for larger visuals.
3
+ // don't use icon circles for icons smaller than icon-circle-sm size. use just an icon.
4
+ .icon-circle {
5
+ position: relative;
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ vertical-align: middle;
10
+ width: ($spacer * 1.5);
11
+ height: ($spacer * 1.5);
12
+ font-size: $font-size-base;
13
+ background-color: $border-color;
14
+ border-radius: 50%;
15
+ &.icon-circle-outline {
16
+ background-color: $white;
17
+ border: $border-width solid $border-color;
18
+ }
19
+ &.icon-circle-sm {
20
+ width: $spacer;
21
+ height: $spacer;
22
+ font-size: $font-size-sm;
23
+ }
24
+ &.icon-circle-lg {
25
+ width: ($spacer * 2);
26
+ height: ($spacer * 2);
27
+ font-size: $font-size-lg;
28
+ }
29
+ &.icon-circle-xl {
30
+ width: ($spacer * 3);
31
+ height: ($spacer * 3);
32
+ font-size: $h1-font-size;
33
+ }
34
+ }
@@ -0,0 +1,50 @@
1
+ // Skeleton styles for placheholder content
2
+ .skeleton-avatar, .skeleton-heading, .skeleton-paragraph {
3
+ display: inline-block;
4
+ margin-bottom: ($spacer * .5);
5
+ background-color: $border-color;
6
+ overflow: hidden;
7
+ &::after {
8
+ position: absolute;
9
+ top: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ left: 0;
13
+ width: 100%;
14
+ height: 100%;
15
+ background-color: $body-bg;
16
+ animation: skeleton-sheen 1s linear infinite alternate;
17
+ content: '';
18
+
19
+ // any skeleton element inside a container with the the .loaded class removes the sheen animation.
20
+ .loaded & {
21
+ background-color: transparent;
22
+ animation: none;
23
+ }
24
+ }
25
+ }
26
+ .skeleton-avatar {
27
+ width: ($spacer * 1.5);
28
+ height: ($spacer * 1.5);
29
+ border-radius: 50%;
30
+ }
31
+ .skeleton-heading {
32
+ width: 70%;
33
+ height: $spacer;
34
+ border-radius: ($spacer * .5);
35
+ &:nth-child(even) { width: 45%; }
36
+ }
37
+ .skeleton-paragraph {
38
+ width: 100%;
39
+ height: ($spacer * .5);
40
+ border-radius: ($spacer * .25);
41
+ &:nth-child(2n+1) { width: 90%; }
42
+ &:nth-child(3n+1) { width: 75%; }
43
+ &:nth-child(4n+1) { width: 80%; }
44
+ }
45
+
46
+ // Sheen animation used on skeleton elements
47
+ @keyframes skeleton-sheen {
48
+ 0% { opacity: .45; }
49
+ to { opacity: .9; }
50
+ }
@@ -36,24 +36,6 @@ $slat-actions-lg-width: 108px;
36
36
  padding-top: ($spacer * 1.5);
37
37
  padding-bottom: ($spacer * 1.5);
38
38
  }
39
-
40
- // Various states
41
- &.ui-sortable-placeholder {
42
- visibility: visible !important;
43
- background: theme-color("light");
44
- border: $border-width dashed $border-color;
45
- + .slat { border-top: none; }
46
- + &.ui-sortable-helper {
47
- border-top-style: dashed;
48
- + &.slat { border-top: none; }
49
- }
50
- }
51
- &.ui-sortable-helper {
52
- border-top: none;
53
- opacity: .5;
54
- border-top: none;
55
- + &.ui-sortable-placeholder { border-top: $border-width dashed $border-color; }
56
- }
57
39
  }
58
40
 
59
41
 
@@ -22,13 +22,13 @@
22
22
  display: block;
23
23
  margin-right: auto;
24
24
  margin-left: auto;
25
- @include media-breakpoint-down(sm) { padding-bottom: $grid-gutter-width; }
26
- @include media-breakpoint-up(sm) { padding-bottom: ($grid-gutter-width * 1.5); }
25
+ @include media-breakpoint-down(sm) { padding-bottom: ($grid-gutter-width * 1.5); }
26
+ @include media-breakpoint-up(sm) { padding-bottom: ($grid-gutter-width * 2); }
27
27
  &:last-child { padding-bottom: 0; }
28
28
  + .tile-section {
29
29
  border-top: $border-width solid $border-color;
30
- @include media-breakpoint-down(sm) { padding-top: $grid-gutter-width; }
31
- @include media-breakpoint-up(sm) { padding-top: ($grid-gutter-width * 1.5); }
30
+ @include media-breakpoint-down(sm) { padding-top: ($grid-gutter-width * 1.5); }
31
+ @include media-breakpoint-up(sm) { padding-top: ($grid-gutter-width * 2); }
32
32
  }
33
33
  }
34
34
 
@@ -28,7 +28,11 @@ module NfgUi
28
28
  content_tag(:div, class: modal_dialog_css_classes, role: 'document') do
29
29
  content_tag(:div, class: 'modal-content') do
30
30
  capture do
31
- concat(NfgUi::Bootstrap::Components::ModalHeader.new({ title: title }, view_context).render)
31
+ # Optionally, leave title nil
32
+ # and the title / dismiss functionality is left out.
33
+ if title.present?
34
+ concat(NfgUi::Bootstrap::Components::ModalHeader.new({ title: title }, view_context).render)
35
+ end
32
36
  if render_in_body
33
37
  concat(NfgUi::Bootstrap::Components::ModalBody.new({ body: (block_given? ? yield : body) }, view_context).render)
34
38
  else
@@ -10,7 +10,14 @@ module NfgUi
10
10
  include NfgUi::Components::Utilities::Renderable
11
11
  include NfgUi::Components::Utilities::Titleable
12
12
 
13
+ include NfgUi::Components::Traits::Modal
13
14
  include NfgUi::Components::Traits::Size
15
+
16
+ private
17
+
18
+ def resized?
19
+ [:sm, :lg, :xl, :cover].include?(size)
20
+ end
14
21
  end
15
22
  end
16
23
  end
@@ -18,6 +18,7 @@ module NfgUi
18
18
  DropdownToggle
19
19
  Icon
20
20
  ListGroup
21
+ Modal
21
22
  Muted
22
23
  Nav
23
24
  Navbar
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NfgUi
4
+ module Components
5
+ module Traits
6
+ module Modal
7
+ TRAITS = %i[cover].freeze
8
+
9
+ def cover_trait
10
+ options[:size] = :cover
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NfgUi
4
- VERSION = '0.11.2'
4
+ VERSION = '0.11.7'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nfg_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.11.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Roehm
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-29 00:00:00.000000000 Z
12
+ date: 2020-11-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bootstrap
@@ -407,6 +407,7 @@ files:
407
407
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_reboot.scss
408
408
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_type.scss
409
409
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/_utilities.scss
410
+ - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/custom/_activity_feed.scss
410
411
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/custom/_icons.scss
411
412
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/nfg_theme/custom/_nav_step.scss
412
413
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/color_variations/plugins/_datetimepicker.scss
@@ -419,6 +420,7 @@ files:
419
420
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_nav.scss
420
421
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_navbar.scss
421
422
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_tables.scss
423
+ - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_activity_feed.scss
422
424
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_builder_layout.scss
423
425
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_card.scss
424
426
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_preview.scss
@@ -427,11 +429,13 @@ files:
427
429
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_custom_receipt_language.scss
428
430
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_email_preview.scss
429
431
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_free_trial.scss
432
+ - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_gallery.scss
430
433
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_icomoon.scss
431
434
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_interaction.scss
432
435
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_overlay_blocker.scss
433
436
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_page_header.scss
434
437
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_share_dropdown.scss
438
+ - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_sortable.scss
435
439
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_status_indicator.scss
436
440
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_tile.scss
437
441
  - app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_video_countdown.scss
@@ -475,6 +479,7 @@ files:
475
479
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/_utilities.scss
476
480
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_avatar.scss
477
481
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_everyday_giving.scss
482
+ - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_icon.scss
478
483
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_nav_step.scss
479
484
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_slat.scss
480
485
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/custom/_video_countdown.scss
@@ -485,6 +490,7 @@ files:
485
490
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/nfg_theme/utilities/_flex.scss
486
491
  - app/assets/stylesheets/nfg_ui/network_for_good/core/legacy_browser_support/plugins/_sticky_div.scss
487
492
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_alert.scss
493
+ - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_badge.scss
488
494
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_button-group.scss
489
495
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_buttons.scss
490
496
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_card.scss
@@ -495,14 +501,17 @@ files:
495
501
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_nav.scss
496
502
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_progress.scss
497
503
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_reboot.scss
504
+ - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_sizing.scss
498
505
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_tooltip.scss
499
506
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/_type.scss
500
507
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_avatar.scss
501
508
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_device_preview.scss
509
+ - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_icon.scss
502
510
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_illustration.scss
503
511
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_mobile.scss
504
512
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_nav_step.scss
505
513
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_redactor.scss
514
+ - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_skeleton.scss
506
515
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_slat.scss
507
516
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_social_share.scss
508
517
  - app/assets/stylesheets/nfg_ui/network_for_good/core/nfg_theme/custom/_ticket.scss
@@ -739,6 +748,7 @@ files:
739
748
  - lib/nfg_ui/components/traits/dropdown_toggle.rb
740
749
  - lib/nfg_ui/components/traits/icon.rb
741
750
  - lib/nfg_ui/components/traits/list_group.rb
751
+ - lib/nfg_ui/components/traits/modal.rb
742
752
  - lib/nfg_ui/components/traits/muted.rb
743
753
  - lib/nfg_ui/components/traits/nav.rb
744
754
  - lib/nfg_ui/components/traits/nav_item.rb