trestle 0.10.0.pre → 0.10.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +26 -0
  3. data/.github/workflows/rspec.yml +6 -2
  4. data/Gemfile +14 -5
  5. data/app/assets/bundle/trestle/admin.css +4 -4
  6. data/app/assets/bundle/trestle/admin.js +2 -2
  7. data/app/controllers/concerns/trestle/controller/turbo_stream.rb +12 -0
  8. data/app/controllers/concerns/trestle/resource/controller/actions.rb +3 -3
  9. data/app/controllers/trestle/application_controller.rb +1 -1
  10. data/app/helpers/trestle/modal_helper.rb +0 -5
  11. data/app/helpers/trestle/turbo/frame_helper.rb +29 -0
  12. data/app/helpers/trestle/turbo/stream_helper.rb +9 -0
  13. data/app/helpers/trestle/turbo/tag_builder.rb +21 -0
  14. data/app/helpers/trestle/url_helper.rb +1 -1
  15. data/app/views/layouts/trestle/admin.html.erb +1 -1
  16. data/app/views/layouts/trestle/admin.turbo_stream.erb +2 -9
  17. data/app/views/trestle/application/_header.html.erb +12 -10
  18. data/app/views/trestle/resource/create.turbo_stream.erb +1 -5
  19. data/app/views/trestle/resource/destroy.turbo_stream.erb +1 -1
  20. data/app/views/trestle/resource/edit.html.erb +2 -0
  21. data/app/views/trestle/resource/index.html.erb +5 -0
  22. data/app/views/trestle/resource/new.html.erb +5 -0
  23. data/app/views/trestle/resource/show.html.erb +2 -0
  24. data/app/views/trestle/resource/update.turbo_stream.erb +1 -5
  25. data/app/views/trestle/shared/_sidebar.html.erb +2 -2
  26. data/frontend/css/components/_alerts.scss +22 -20
  27. data/frontend/css/components/_avatar.scss +12 -12
  28. data/frontend/css/components/_background.scss +1 -1
  29. data/frontend/css/components/_breadcrumbs.scss +8 -29
  30. data/frontend/css/components/_buttons.scss +3 -3
  31. data/frontend/css/components/_datepicker.scss +3 -3
  32. data/frontend/css/components/_dropdown.scss +18 -26
  33. data/frontend/css/components/_forms.scss +4 -4
  34. data/frontend/css/components/_grid.scss +29 -0
  35. data/frontend/css/components/_media-grid.scss +1 -1
  36. data/frontend/css/components/_modal.scss +4 -4
  37. data/frontend/css/components/_pagination.scss +4 -8
  38. data/frontend/css/components/_popover.scss +1 -1
  39. data/frontend/css/components/_scopes.scss +4 -10
  40. data/frontend/css/components/_select.scss +8 -9
  41. data/frontend/css/components/_sort.scss +1 -1
  42. data/frontend/css/components/_table.scss +5 -5
  43. data/frontend/css/components/_tabs.scss +11 -18
  44. data/frontend/css/components/_tags.scss +16 -6
  45. data/frontend/css/components/_toolbars.scss +9 -9
  46. data/frontend/css/core/_functions.scss +0 -8
  47. data/frontend/css/core/_theme.scss +3 -0
  48. data/frontend/css/core/_typography.scss +12 -19
  49. data/frontend/css/index.scss +3 -1
  50. data/frontend/css/layout/_base.scss +4 -2
  51. data/frontend/css/layout/_content-header.scss +71 -0
  52. data/frontend/css/layout/_footer.scss +5 -7
  53. data/frontend/css/layout/_main-content.scss +107 -0
  54. data/frontend/css/layout/_navigation.scss +111 -49
  55. data/frontend/css/layout/_sidebar.scss +58 -34
  56. data/frontend/css/variables/_bootstrap.scss +30 -21
  57. data/frontend/css/variables/_trestle.scss +17 -17
  58. data/frontend/js/controllers/batch_action_controller.js +59 -0
  59. data/frontend/js/controllers/checkbox_select_controller.js +3 -0
  60. data/lib/trestle/engine.rb +18 -16
  61. data/lib/trestle/resource/toolbar.rb +18 -8
  62. data/lib/trestle/sprockets_compressor.rb +16 -0
  63. data/lib/trestle/toolbar/context.rb +7 -4
  64. data/lib/trestle/toolbar/menu.rb +8 -5
  65. data/lib/trestle/version.rb +1 -1
  66. data/package.json +1 -1
  67. data/trestle.gemspec +5 -9
  68. data/yarn.lock +17 -32
  69. metadata +34 -69
  70. data/app/controllers/concerns/trestle/controller/turbo.rb +0 -21
  71. data/app/helpers/trestle/turbo_frame_helper.rb +0 -34
  72. data/frontend/css/layout/_content.scss +0 -173
@@ -61,7 +61,7 @@
61
61
  }
62
62
 
63
63
  .modal-title {
64
- font-size: 1.3rem;
64
+ font-size: 1.125rem;
65
65
  font-weight: 500;
66
66
  text-shadow: rgba(black, 0.5) 0 1px 1px;
67
67
  color: white;
@@ -70,7 +70,7 @@
70
70
  .modal-tabs {
71
71
  .nav-tabs {
72
72
  background: $body-bg;
73
- padding: 10px 15px 0 15px;
73
+ padding: 0.625rem 1rem 0 1rem;
74
74
  }
75
75
  }
76
76
 
@@ -112,11 +112,11 @@
112
112
  }
113
113
 
114
114
  h3 {
115
- font-size: 1.25rem;
115
+ font-size: 1.125rem;
116
116
  }
117
117
 
118
118
  p {
119
- font-size: 0.9rem;
119
+ font-size: 0.825rem;
120
120
  }
121
121
  }
122
122
  }
@@ -3,10 +3,11 @@
3
3
 
4
4
  display: inline-flex;
5
5
  align-items: center;
6
+ gap: 0.75rem;
6
7
 
7
8
  p {
8
- font-size: 0.85rem;
9
- margin: 0 10px 0 0;
9
+ font-size: 0.75rem;
10
+ margin: 0;
10
11
  }
11
12
 
12
13
  strong {
@@ -32,16 +33,11 @@
32
33
  display: flex;
33
34
  flex-direction: column;
34
35
  align-items: center;
36
+ gap: 0.375rem;
35
37
 
36
38
  .pagination {
37
39
  margin: 0 auto;
38
40
  order: -1;
39
41
  }
40
-
41
- p {
42
- display: block;
43
- margin-right: 0;
44
- margin-top: 5px;
45
- }
46
42
  }
47
43
  }
@@ -1,5 +1,5 @@
1
1
  .popover-header {
2
2
  font-weight: 500;
3
- font-size: 0.85rem;
3
+ font-size: 0.75rem;
4
4
  border-bottom-color: $popover-header-border;
5
5
  }
@@ -35,7 +35,7 @@
35
35
 
36
36
  .scope-group {
37
37
  line-height: 2;
38
- font-size: 0.85rem;
38
+ font-size: 0.75rem;
39
39
  padding: 0.5rem 1rem 0.25rem 0.75rem;
40
40
 
41
41
  background: #f7f7f7;
@@ -47,19 +47,13 @@
47
47
  display: flex;
48
48
  flex-wrap: wrap;
49
49
 
50
+ gap: 0.25rem 0.35rem;
51
+
50
52
  position: relative;
51
53
  align-items: center;
52
54
 
53
55
  margin-bottom: 0;
54
56
  padding: 0;
55
-
56
- li {
57
- margin: 0.125rem 0.35rem 0.125rem 0;
58
-
59
- &:last-child {
60
- margin-right: 0;
61
- }
62
- }
63
57
  }
64
58
 
65
59
  .scope {
@@ -67,7 +61,7 @@
67
61
 
68
62
  background-color: $scope-bg;
69
63
 
70
- font-size: 0.8rem;
64
+ font-size: 0.6875rem;
71
65
  font-weight: normal;
72
66
  white-space: nowrap;
73
67
 
@@ -23,7 +23,7 @@
23
23
  padding: $s2bs5-padding-y $s2bs5-indicator-padding $s2bs5-padding-y $s2bs5-padding-x;
24
24
 
25
25
  &:has(.select2-selection__clear) {
26
- padding-right: $s2bs5-indicator-padding + 1rem;
26
+ padding-right: $s2bs5-indicator-padding + 0.875rem;
27
27
  }
28
28
  }
29
29
  }
@@ -46,7 +46,7 @@
46
46
 
47
47
  .select2-search--inline {
48
48
  width: auto;
49
- margin-left: 0.12rem;
49
+ margin-left: 0.1rem;
50
50
 
51
51
  &:first-child {
52
52
  margin-left: 0.375rem;
@@ -103,7 +103,7 @@
103
103
  background: $s2bs5-clear-tag-bg;
104
104
 
105
105
  margin-right: 0;
106
- margin-left: 4px;
106
+ margin-left: 0.25rem;
107
107
  font-size: 0;
108
108
  line-height: 1.2;
109
109
 
@@ -137,10 +137,9 @@
137
137
 
138
138
  // Prevent input zooming on mobile devices
139
139
  @include media-breakpoint-down(sm) {
140
- .select2-search--inline {
141
- .select2-search__field {
142
- font-size: 16px;
143
- }
140
+ .select2-selection,
141
+ .select2-dropdown .select2-search .select2-search__field {
142
+ font-size: 1rem;
144
143
  }
145
144
  }
146
145
  }
@@ -154,7 +153,7 @@
154
153
  padding: map-get($s2bs5-small, padding-y) map-get($s2bs5-small, padding-x);
155
154
 
156
155
  &:has(.select2-selection__clear) {
157
- padding-right: $s2bs5-indicator-padding + 1rem;
156
+ padding-right: $s2bs5-indicator-padding + 0.875rem;
158
157
  }
159
158
  }
160
159
  }
@@ -170,7 +169,7 @@
170
169
  padding: map-get($s2bs5-large, padding-y) map-get($s2bs5-large, padding-x);
171
170
 
172
171
  &:has(.select2-selection__clear) {
173
- padding-right: $s2bs5-indicator-padding + 1.5rem;
172
+ padding-right: $s2bs5-indicator-padding + 1.375rem;
174
173
  }
175
174
  }
176
175
  }
@@ -8,7 +8,7 @@
8
8
  @include icon-fa($fa-var-bars);
9
9
 
10
10
  font-size: 75%;
11
- margin-left: 5px;
11
+ margin-left: 0.325rem;
12
12
  opacity: 0.25;
13
13
  }
14
14
 
@@ -82,8 +82,8 @@
82
82
  }
83
83
 
84
84
  .avatar {
85
- width: 32px;
86
- height: 32px;
85
+ width: 2rem;
86
+ height: 2rem;
87
87
  vertical-align: middle;
88
88
  }
89
89
 
@@ -109,9 +109,9 @@
109
109
  line-height: 1;
110
110
 
111
111
  i {
112
- font-size: 0.85rem;
112
+ font-size: 0.75rem;
113
113
 
114
- width: 1.25rem;
114
+ width: 1.125rem;
115
115
  text-align: center;
116
116
  }
117
117
 
@@ -124,7 +124,7 @@
124
124
  .btn-group {
125
125
  + .btn,
126
126
  + .btn-group {
127
- margin-left: 4px;
127
+ margin-left: 0.25rem;
128
128
  }
129
129
  }
130
130
 
@@ -5,6 +5,11 @@
5
5
  flex-wrap: nowrap;
6
6
  white-space: nowrap;
7
7
 
8
+ gap: 0.325rem;
9
+
10
+ --#{$prefix}nav-link-padding-x: 1.25rem;
11
+ --#{$prefix}nav-link-padding-y: 0.625rem;
12
+
8
13
  &::-webkit-scrollbar {
9
14
  height: 4px;
10
15
  }
@@ -22,9 +27,6 @@
22
27
  }
23
28
 
24
29
  .nav-link {
25
- margin-right: 4px;
26
- padding: 10px 20px;
27
-
28
30
  font-weight: 500;
29
31
 
30
32
  transition: $nav-tabs-link-transition;
@@ -41,11 +43,6 @@
41
43
  .align-right {
42
44
  margin-left: auto;
43
45
 
44
- .nav-link {
45
- margin-right: 0;
46
- margin-left: 4px;
47
- }
48
-
49
46
  & + .align-right {
50
47
  margin-left: 0;
51
48
  }
@@ -53,7 +50,7 @@
53
50
 
54
51
  .badge {
55
52
  font-size: 0.65em;
56
- margin-left: 0.35rem;
53
+ margin-left: 0.3125rem;
57
54
  vertical-align: 1px;
58
55
 
59
56
  // Default badge color when no badge- classes specified
@@ -66,16 +63,12 @@
66
63
 
67
64
  @include media-breakpoint-down(md) {
68
65
  .nav-tabs {
69
- .nav-link {
70
- font-size: 0.95rem;
71
- padding: 10px;
72
- margin-right: 2px;
73
- }
66
+ --#{$prefix}nav-link-padding-x: 0.625rem;
74
67
 
75
- .align-right {
76
- .nav-link {
77
- margin-left: 2px;
78
- }
68
+ gap: 0.175rem;
69
+
70
+ .nav-link {
71
+ font-size: 0.8125rem;
79
72
  }
80
73
  }
81
74
  }
@@ -17,21 +17,23 @@
17
17
  }
18
18
 
19
19
  .tag {
20
- --tag-padding-y: 0.25rem;
21
- --tag-padding-x: 6px;
20
+ --tag-padding-y: 0.375em;
21
+ --tag-padding-x: 0.5em;
22
22
 
23
23
  --tag-border-width: 0.325rem;
24
24
  --tag-border-radius: 0.25rem;
25
25
 
26
- --tag-font-size: 0.8rem;
26
+ --tag-font-size: 0.825em;
27
27
  --tag-font-weight: normal;
28
28
  --tag-line-height: 1.1;
29
29
 
30
- --tag-bg: #{shift-color($primary, $tag-bg-scale)};
31
- --tag-border-color: #{rgba(black, 0.25)};
32
30
  --tag-color: white;
33
31
 
34
- --tag-hover-border-color: #{rgba(black, 0.35)};
32
+ --tag-bg: #{shift-color($primary, $tag-bg-scale)};
33
+ --tag-border-color: #{$primary};
34
+
35
+ --tag-hover-bg: #{shift-color($primary, $tag-hover-bg-scale)};
36
+ --tag-hover-border-color: #{shift-color($primary, $tag-hover-border-scale)};
35
37
 
36
38
  display: inline-block;
37
39
  padding: var(--tag-padding-y) var(--tag-padding-x) var(--tag-padding-y) calc(var(--tag-padding-x) - var(--tag-border-width) / 2);
@@ -62,6 +64,14 @@
62
64
  }
63
65
  }
64
66
 
67
+ .tag {
68
+ --tag-bg: #{adjust-theme-hsl(primary, $lightness: -$tag-bg-scale)};
69
+ --tag-border-color: var(--primary);
70
+
71
+ --tag-hover-bg: #{adjust-theme-hsl(primary, $lightness: -$tag-hover-bg-scale)};
72
+ --tag-hover-border-color: #{adjust-theme-hsl(primary, $lightness: -$tag-hover-border-scale)};
73
+ }
74
+
65
75
  @each $state, $value in $theme-colors {
66
76
  .tag-#{$state} {
67
77
  @include tag-variant($value);
@@ -1,17 +1,17 @@
1
1
  .btn-toolbar {
2
- gap: 5px;
2
+ gap: 0.375rem;
3
3
  }
4
4
 
5
5
  .primary-toolbar {
6
6
  .btn {
7
- --#{$prefix}btn-padding-x: 1.25rem;
8
- --#{$prefix}btn-padding-y: 0.5rem;
9
- --#{$prefix}btn-font-size: 1.35rem;
7
+ --#{$prefix}btn-padding-x: 1.125rem;
8
+ --#{$prefix}btn-padding-y: 0.5rem;
9
+ --#{$prefix}btn-font-size: 1.125rem;
10
10
 
11
11
  @include media-breakpoint-down(md) {
12
12
  --#{$prefix}btn-padding-x: 0.75rem;
13
- --#{$prefix}btn-padding-y: 0.35rem;
14
- --#{$prefix}btn-font-size: 1.25rem;
13
+ --#{$prefix}btn-padding-y: 0.25rem;
14
+ --#{$prefix}btn-font-size: 1.0625rem;
15
15
  --#{$prefix}btn-border-radius: #{$btn-border-radius-sm};
16
16
  }
17
17
  }
@@ -27,14 +27,14 @@
27
27
  font-size: 80%;
28
28
 
29
29
  + .btn-label {
30
- margin-left: 3px;
30
+ margin-left: 0.25rem;
31
31
  }
32
32
  }
33
33
 
34
34
  @include media-breakpoint-down(md) {
35
35
  --#{$prefix}btn-padding-x: 0.5rem;
36
- --#{$prefix}btn-padding-y: 0.2rem;
37
- --#{$prefix}btn-font-size: 0.75rem;
36
+ --#{$prefix}btn-padding-y: 0.25rem;
37
+ --#{$prefix}btn-font-size: 0.6875rem;
38
38
  --#{$prefix}btn-border-radius: #{$btn-border-radius-sm};
39
39
  }
40
40
  }
@@ -13,14 +13,6 @@
13
13
  @return $val;
14
14
  }
15
15
 
16
- @function strip-units($number) {
17
- @return $number / ($number * 0 + 1);
18
- }
19
-
20
- @function em($rem) {
21
- @return strip-units($rem) * 1em;
22
- }
23
-
24
16
  @function adjust-theme-hsl($name, $hue: null, $saturation: null, $lightness: null, $wrap: true) {
25
17
  $hsl:
26
18
  adjust-css-value(var(--#{$name}-h), $hue)
@@ -30,6 +30,9 @@ $theme-colors: (
30
30
  --#{$prefix}#{$color}-border-subtle: #{adjust-theme-hsl($color, $lightness: 60%)};
31
31
  }
32
32
 
33
+ --theme-texture: url(../images/bright-squares.png);
34
+ --theme-gradient: #{linear-gradient(rgba(white, 0.05), rgba(black, 0.05))};
35
+
33
36
  --#{$prefix}link-color: var(--primary);
34
37
  --#{$prefix}link-color-rgb: var(--primary-rgb);
35
38
  --#{$prefix}link-color-hsl: var(--primary-hsl);
@@ -1,7 +1,3 @@
1
- html {
2
- font-size: 14px;
3
- }
4
-
5
1
  body {
6
2
  @include font-smoothing;
7
3
  }
@@ -14,6 +10,15 @@ img {
14
10
  max-width: 100%;
15
11
  }
16
12
 
13
+ .error-iframe {
14
+ display: block;
15
+ width: 100%;
16
+ border: 0;
17
+ flex: 1;
18
+ min-height: 60vh;
19
+ max-height: 75vh;
20
+ }
21
+
17
22
  .empty, .blank {
18
23
  font-style: italic;
19
24
  opacity: 0.5;
@@ -28,12 +33,7 @@ img {
28
33
  }
29
34
 
30
35
  .main-content-header {
31
- h1, .h1 { font-size: $h1-font-size * $header-font-size-scale; }
32
- h2, .h2 { font-size: $h2-font-size * $header-font-size-scale; }
33
- h3, .h3 { font-size: $h3-font-size * $header-font-size-scale; }
34
- h4, .h4 { font-size: $h4-font-size * $header-font-size-scale; }
35
- h5, .h5 { font-size: $h5-font-size * $header-font-size-scale; }
36
- h6, .h6 { font-size: $h6-font-size * $header-font-size-scale; }
36
+ font-size: 1rem * $header-font-size-scale;
37
37
  }
38
38
 
39
39
  .main-content-sidebar {
@@ -42,20 +42,13 @@ img {
42
42
  h1, h2, h3, h4, h5, h6,
43
43
  .h1, .h2, .h3, .h4, .h5, .h6 {
44
44
  border-bottom: $headings-border;
45
- padding-bottom: 0.325rem;
45
+ padding-bottom: 0.275rem;
46
46
 
47
47
  &:not(:first-child) {
48
- margin-top: 1.75rem;
48
+ margin-top: 1.5rem;
49
49
  }
50
50
  }
51
51
 
52
- h1, .h1 { font-size: $h1-font-size * $sidebar-font-size-scale; }
53
- h2, .h2 { font-size: $h2-font-size * $sidebar-font-size-scale; }
54
- h3, .h3 { font-size: $h3-font-size * $sidebar-font-size-scale; }
55
- h4, .h4 { font-size: $h4-font-size * $sidebar-font-size-scale; }
56
- h5, .h5 { font-size: $h5-font-size * $sidebar-font-size-scale; }
57
- h6, .h6 { font-size: $h6-font-size * $sidebar-font-size-scale; }
58
-
59
52
  .card-header,
60
53
  .card-body,
61
54
  .card-footer {
@@ -26,7 +26,8 @@
26
26
  @import "layout/footer";
27
27
  @import "layout/sidebar";
28
28
  @import "layout/navigation";
29
- @import "layout/content";
29
+ @import "layout/content-header";
30
+ @import "layout/main-content";
30
31
 
31
32
  // Components
32
33
  @import "components/alerts";
@@ -38,6 +39,7 @@
38
39
  @import "components/datepicker";
39
40
  @import "components/dropdown";
40
41
  @import "components/forms";
42
+ @import "components/grid";
41
43
  @import "components/media-grid";
42
44
  @import "components/modal";
43
45
  @import "components/pagination";
@@ -1,5 +1,5 @@
1
1
  html, body {
2
- min-height: 100vh;
2
+ min-height: 100dvh;
3
3
  height: 100%;
4
4
  }
5
5
 
@@ -8,7 +8,6 @@ html {
8
8
  }
9
9
 
10
10
  body {
11
- display: flex;
12
11
  overflow: hidden;
13
12
  }
14
13
 
@@ -22,7 +21,10 @@ body {
22
21
  overflow: hidden;
23
22
 
24
23
  width: 100%;
24
+ height: 100%;
25
+
25
26
  min-width: 0;
27
+ min-height: 100dvh;
26
28
  }
27
29
 
28
30
  .app-container {
@@ -0,0 +1,71 @@
1
+ .content-header {
2
+ display: grid;
3
+ grid-template-columns: auto auto;
4
+ grid-template-areas: "title toolbars"
5
+ "breadcrumbs toolbars";
6
+ align-items: start;
7
+
8
+ background: $content-header-bg;
9
+ padding: 0.875rem 1.25rem;
10
+
11
+ @include media-breakpoint-down(md) {
12
+ padding: 0.625rem;
13
+ }
14
+
15
+ @include media-breakpoint-down(sm) {
16
+ grid-template-areas: "title toolbars"
17
+ "breadcrumbs breadcrumbs";
18
+ }
19
+ }
20
+
21
+ .content-header-title {
22
+ grid-area: title;
23
+
24
+ margin: 0.25rem 0 1.125rem;
25
+
26
+ @include media-breakpoint-down(md) {
27
+ margin-top: 0.125rem;
28
+ }
29
+
30
+ h1 {
31
+ font-size: 2.125rem;
32
+ font-weight: 200;
33
+
34
+ margin: 0;
35
+
36
+ @include media-breakpoint-down(md) {
37
+ font-size: 2rem;
38
+ }
39
+
40
+ @include media-breakpoint-down(md) {
41
+ font-size: 1.75rem;
42
+ }
43
+ }
44
+ }
45
+
46
+ .content-header-toolbars {
47
+ grid-area: toolbars;
48
+
49
+ display: grid;
50
+ gap: 0.5rem;
51
+
52
+ .btn {
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .btn-toolbar {
57
+ flex-direction: row-reverse;
58
+ }
59
+
60
+ @include media-breakpoint-down(md) {
61
+ gap: 0.25rem;
62
+ }
63
+ }
64
+
65
+ .content-header-breadcrumbs {
66
+ grid-area: breadcrumbs;
67
+
68
+ .breadcrumb {
69
+ margin: 0;
70
+ }
71
+ }
@@ -4,16 +4,14 @@
4
4
  background: $footer-bg;
5
5
  color: $footer-color;
6
6
 
7
- padding: 0.5rem 1.4rem;
8
- font-size: 0.75rem;
7
+ padding: $footer-padding;
8
+ font-size: 0.625rem;
9
9
 
10
10
  display: flex;
11
11
  justify-content: space-between;
12
- }
13
12
 
14
- @include media-breakpoint-down(md) {
15
- .app-footer {
16
- padding-left: 10px;
17
- padding-right: 10px;
13
+ @include media-breakpoint-down(md) {
14
+ padding-left: 0.625rem;
15
+ padding-right: 0.625rem;
18
16
  }
19
17
  }
@@ -0,0 +1,107 @@
1
+ .main-content-area {
2
+ --content-area-margin: 1.25rem;
3
+ --content-area-padding: 1.25rem;
4
+
5
+ --content-area-sidebar-width: #{$content-sidebar-width};
6
+ --content-area-sidebar-bg: #{$content-sidebar-bg};
7
+
8
+ --content-area-header-padding: 0.625rem 1.125rem;
9
+ --content-area-header-bg: #{$main-content-header-bg};
10
+ --content-area-header-border: #{$main-content-header-border};
11
+
12
+ --content-area-footer-padding: 0.625rem 1.125rem;
13
+ --content-area-footer-bg: #{$main-content-footer-bg};
14
+ --content-area-footer-border: #{$main-content-footer-border};
15
+
16
+ margin: var(--content-area-margin);
17
+ scroll-margin: var(--content-area-margin);
18
+ }
19
+
20
+ .main-content-container {
21
+ background: white;
22
+ display: flex;
23
+ }
24
+
25
+ .main-content,
26
+ .main-content-sidebar {
27
+ padding: var(--content-area-padding);
28
+ }
29
+
30
+ .main-content {
31
+ // Allow nesting of tab panes directly within
32
+ @extend .tab-content;
33
+
34
+ flex: 1;
35
+ min-width: 0;
36
+ }
37
+
38
+ .main-content-header,
39
+ .main-content-footer {
40
+ display: flex;
41
+ justify-content: space-between;
42
+ }
43
+
44
+ .main-content-header {
45
+ margin: calc(var(--content-area-padding) * -1) calc(var(--content-area-padding) * -1) var(--content-area-padding) !important;
46
+ padding: var(--content-area-header-padding);
47
+ background: var(--content-area-header-bg);
48
+ border-bottom: var(--content-area-header-border)
49
+ }
50
+
51
+ .main-content-footer {
52
+ margin: var(--content-area-padding) calc(var(--content-area-padding) * -1) calc(var(--content-area-padding) * -1) !important;
53
+ padding: var(--content-area-footer-padding);
54
+ background: var(--content-area-footer-bg);
55
+ border-top: var(--content-area-footer-border);
56
+ }
57
+
58
+ .main-content,
59
+ .main-content-sidebar,
60
+ .tab-pane {
61
+ > *:first-child {
62
+ margin-top: 0;
63
+ }
64
+
65
+ > *:last-child {
66
+ margin-bottom: 0;
67
+ }
68
+ }
69
+
70
+ .main-content-sidebar {
71
+ background: var(--content-area-sidebar-bg);
72
+ flex: 0 0 var(--content-area-sidebar-width);
73
+ max-width: var(--content-area-sidebar-width);
74
+ }
75
+
76
+ .utilities {
77
+ display: flex;
78
+ justify-content: flex-start;
79
+ margin-bottom: 0.75rem;
80
+ }
81
+
82
+ @include media-breakpoint-down(lg) {
83
+ .main-content-container {
84
+ flex-direction: column;
85
+ }
86
+
87
+ .main-content-sidebar {
88
+ flex-basis: 0;
89
+ max-width: none;
90
+ }
91
+ }
92
+
93
+ @include media-breakpoint-down(md) {
94
+ .main-content-area {
95
+ --content-area-margin: 0.625rem;
96
+ --content-area-padding: 0.875rem;
97
+
98
+ --content-area-header-padding: 0.625rem 0.875rem;
99
+ --content-area-footer-padding: 0.625rem 0.875rem;
100
+ }
101
+
102
+ .main-content-header,
103
+ .main-content-footer {
104
+ flex-direction: column;
105
+ align-items: center;
106
+ }
107
+ }