cm-admin 1.1.8 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.vscode/settings.json +3 -0
  4. data/Gemfile.lock +1 -1
  5. data/app/assets/javascripts/cm_admin/scaffolds.js +6 -0
  6. data/app/assets/javascripts/cm_admin/shared_scaffolds.js +97 -81
  7. data/app/assets/stylesheets/cm_admin/base/form.scss +31 -225
  8. data/app/assets/stylesheets/cm_admin/base/navbar.scss +11 -38
  9. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +3 -4
  10. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +8 -5
  11. data/app/assets/stylesheets/cm_admin/base/show.scss +17 -35
  12. data/app/assets/stylesheets/cm_admin/base/table.scss +8 -14
  13. data/app/assets/stylesheets/cm_admin/components/_buttons.scss +28 -140
  14. data/app/assets/stylesheets/cm_admin/components/_modal.scss +7 -30
  15. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_accordion.scss +158 -0
  16. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_alert.scss +68 -0
  17. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_badge.scss +38 -0
  18. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_breadcrumb.scss +40 -0
  19. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_button-group.scss +142 -0
  20. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_buttons.scss +207 -0
  21. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_card.scss +239 -0
  22. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_carousel.scss +244 -0
  23. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_close.scss +63 -0
  24. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_containers.scss +41 -0
  25. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_dropdown.scss +250 -0
  26. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_forms.scss +9 -0
  27. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_functions.scss +302 -0
  28. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_grid.scss +39 -0
  29. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_helpers.scss +12 -0
  30. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_images.scss +42 -0
  31. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_list-group.scss +197 -0
  32. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_maps.scss +174 -0
  33. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_mixins.scss +42 -0
  34. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_modal.scss +237 -0
  35. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_nav.scss +197 -0
  36. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_navbar.scss +289 -0
  37. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_offcanvas.scss +146 -0
  38. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_pagination.scss +109 -0
  39. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_placeholders.scss +51 -0
  40. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_popover.scss +196 -0
  41. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_progress.scss +68 -0
  42. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_reboot.scss +610 -0
  43. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_root.scss +184 -0
  44. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_spinners.scss +85 -0
  45. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_tables.scss +171 -0
  46. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_toasts.scss +73 -0
  47. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_tooltip.scss +119 -0
  48. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_transitions.scss +27 -0
  49. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_type.scss +106 -0
  50. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_utilities.scss +806 -0
  51. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_variables-dark.scss +85 -0
  52. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/_variables.scss +1745 -0
  53. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-grid.scss +62 -0
  54. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-reboot.scss +10 -0
  55. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap-utilities.scss +19 -0
  56. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/bootstrap.scss +52 -0
  57. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_floating-labels.scss +95 -0
  58. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-check.scss +188 -0
  59. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-control.scss +214 -0
  60. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-range.scss +91 -0
  61. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-select.scss +80 -0
  62. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_form-text.scss +11 -0
  63. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_input-group.scss +132 -0
  64. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_labels.scss +36 -0
  65. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/forms/_validation.scss +12 -0
  66. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_clearfix.scss +3 -0
  67. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_color-bg.scss +7 -0
  68. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_colored-links.scss +30 -0
  69. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  70. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_icon-link.scss +25 -0
  71. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_position.scss +36 -0
  72. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_ratio.scss +26 -0
  73. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_stacks.scss +15 -0
  74. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  75. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  76. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  77. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/helpers/_vr.scss +8 -0
  78. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_alert.scss +18 -0
  79. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_backdrop.scss +14 -0
  80. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_banner.scss +7 -0
  81. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_border-radius.scss +78 -0
  82. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  83. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  84. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_buttons.scss +70 -0
  85. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_caret.scss +69 -0
  86. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_clearfix.scss +9 -0
  87. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_color-mode.scss +21 -0
  88. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  89. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_container.scss +11 -0
  90. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_deprecate.scss +10 -0
  91. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_forms.scss +153 -0
  92. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_gradients.scss +47 -0
  93. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_grid.scss +151 -0
  94. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_image.scss +16 -0
  95. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_list-group.scss +26 -0
  96. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_lists.scss +7 -0
  97. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_pagination.scss +10 -0
  98. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_reset-text.scss +17 -0
  99. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_resize.scss +6 -0
  100. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_table-variants.scss +24 -0
  101. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  102. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_transition.scss +26 -0
  103. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_utilities.scss +97 -0
  104. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/mixins/_visually-hidden.scss +33 -0
  105. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/jasmine.js +16 -0
  106. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  107. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  108. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  109. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/sass-true/register.js +14 -0
  110. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/sass-true/runner.js +17 -0
  111. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  112. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/utilities/_api.scss +47 -0
  113. data/app/assets/stylesheets/cm_admin/dependency/bootstrap/scss/vendor/_rfs.scss +348 -0
  114. data/app/assets/stylesheets/cm_admin/dependency/bootstrap.min.css +4 -5
  115. data/app/assets/stylesheets/cm_admin/pages/import_page.scss +3 -10
  116. data/app/controllers/cm_admin/resource_controller.rb +22 -5
  117. data/app/helpers/cm_admin/application_helper.rb +4 -4
  118. data/app/views/cm_admin/main/_actions_dropdown.html.slim +3 -5
  119. data/app/views/cm_admin/main/_associated_table.html.slim +1 -1
  120. data/app/views/cm_admin/main/_custom_action_modal_form.html.slim +6 -0
  121. data/app/views/cm_admin/main/_nested_fields.html.slim +36 -16
  122. data/app/views/cm_admin/main/_nested_table_form.html.slim +17 -8
  123. data/app/views/cm_admin/main/_nested_table_section.html.slim +17 -0
  124. data/app/views/cm_admin/main/_show_section.html.slim +10 -0
  125. data/app/views/cm_admin/main/_tabs.html.slim +2 -2
  126. data/app/views/cm_admin/main/_top_navbar.html.slim +17 -17
  127. data/app/views/cm_admin/main/associated_show.html.slim +5 -4
  128. data/app/views/cm_admin/main/edit.html.slim +18 -18
  129. data/app/views/cm_admin/main/history.html.slim +5 -6
  130. data/app/views/cm_admin/main/import_form.html.slim +3 -3
  131. data/app/views/cm_admin/main/new.html.slim +17 -17
  132. data/app/views/cm_admin/main/show.html.slim +12 -13
  133. data/app/views/layouts/_custom_action_modal.html.slim +11 -0
  134. data/app/views/layouts/_custom_action_modals.html.slim +13 -9
  135. data/app/views/layouts/_destroy_action_modal.html.slim +16 -0
  136. data/app/views/layouts/_quick_links.html.slim +2 -2
  137. data/app/views/layouts/cm_admin.html.slim +13 -15
  138. data/config/routes.rb +1 -3
  139. data/lib/cm_admin/model.rb +1 -0
  140. data/lib/cm_admin/models/custom_action.rb +6 -0
  141. data/lib/cm_admin/models/dsl_method.rb +9 -4
  142. data/lib/cm_admin/models/field.rb +2 -1
  143. data/lib/cm_admin/models/form_field.rb +2 -1
  144. data/lib/cm_admin/models/row.rb +40 -0
  145. data/lib/cm_admin/models/section.rb +20 -3
  146. data/lib/cm_admin/version.rb +1 -1
  147. data/lib/cm_admin/view_helpers/field_display_helper.rb +3 -3
  148. data/lib/cm_admin/view_helpers/form_field_helper.rb +40 -14
  149. data/lib/cm_admin/view_helpers/form_helper.rb +60 -22
  150. data/lib/cm_admin/view_helpers/manage_column_popup_helper.rb +2 -2
  151. data/lib/cm_admin/view_helpers/page_info_helper.rb +4 -4
  152. data/lib/cm_admin/view_helpers.rb +3 -2
  153. metadata +108 -2
@@ -0,0 +1,244 @@
1
+ // Notes on the classes:
2
+ //
3
+ // 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
4
+ // even when their scroll action started on a carousel, but for compatibility (with Firefox)
5
+ // we're preventing all actions instead
6
+ // 2. The .carousel-item-start and .carousel-item-end is used to indicate where
7
+ // the active slide is heading.
8
+ // 3. .active.carousel-item is the current slide.
9
+ // 4. .active.carousel-item-start and .active.carousel-item-end is the current
10
+ // slide in its in-transition state. Only one of these occurs at a time.
11
+ // 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end
12
+ // is the upcoming slide in transition.
13
+
14
+ .carousel {
15
+ position: relative;
16
+ }
17
+
18
+ .carousel.pointer-event {
19
+ touch-action: pan-y;
20
+ }
21
+
22
+ .carousel-inner {
23
+ position: relative;
24
+ width: 100%;
25
+ overflow: hidden;
26
+ @include clearfix();
27
+ }
28
+
29
+ .carousel-item {
30
+ position: relative;
31
+ display: none;
32
+ float: left;
33
+ width: 100%;
34
+ margin-right: -100%;
35
+ backface-visibility: hidden;
36
+ @include transition($carousel-transition);
37
+ }
38
+
39
+ .carousel-item.active,
40
+ .carousel-item-next,
41
+ .carousel-item-prev {
42
+ display: block;
43
+ }
44
+
45
+ .carousel-item-next:not(.carousel-item-start),
46
+ .active.carousel-item-end {
47
+ transform: translateX(100%);
48
+ }
49
+
50
+ .carousel-item-prev:not(.carousel-item-end),
51
+ .active.carousel-item-start {
52
+ transform: translateX(-100%);
53
+ }
54
+
55
+
56
+ //
57
+ // Alternate transitions
58
+ //
59
+
60
+ .carousel-fade {
61
+ .carousel-item {
62
+ opacity: 0;
63
+ transition-property: opacity;
64
+ transform: none;
65
+ }
66
+
67
+ .carousel-item.active,
68
+ .carousel-item-next.carousel-item-start,
69
+ .carousel-item-prev.carousel-item-end {
70
+ z-index: 1;
71
+ opacity: 1;
72
+ }
73
+
74
+ .active.carousel-item-start,
75
+ .active.carousel-item-end {
76
+ z-index: 0;
77
+ opacity: 0;
78
+ @include transition(opacity 0s $carousel-transition-duration);
79
+ }
80
+ }
81
+
82
+
83
+ //
84
+ // Left/right controls for nav
85
+ //
86
+
87
+ .carousel-control-prev,
88
+ .carousel-control-next {
89
+ position: absolute;
90
+ top: 0;
91
+ bottom: 0;
92
+ z-index: 1;
93
+ // Use flex for alignment (1-3)
94
+ display: flex; // 1. allow flex styles
95
+ align-items: center; // 2. vertically center contents
96
+ justify-content: center; // 3. horizontally center contents
97
+ width: $carousel-control-width;
98
+ padding: 0;
99
+ color: $carousel-control-color;
100
+ text-align: center;
101
+ background: none;
102
+ border: 0;
103
+ opacity: $carousel-control-opacity;
104
+ @include transition($carousel-control-transition);
105
+
106
+ // Hover/focus state
107
+ &:hover,
108
+ &:focus {
109
+ color: $carousel-control-color;
110
+ text-decoration: none;
111
+ outline: 0;
112
+ opacity: $carousel-control-hover-opacity;
113
+ }
114
+ }
115
+ .carousel-control-prev {
116
+ left: 0;
117
+ background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);
118
+ }
119
+ .carousel-control-next {
120
+ right: 0;
121
+ background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);
122
+ }
123
+
124
+ // Icons for within
125
+ .carousel-control-prev-icon,
126
+ .carousel-control-next-icon {
127
+ display: inline-block;
128
+ width: $carousel-control-icon-width;
129
+ height: $carousel-control-icon-width;
130
+ background-repeat: no-repeat;
131
+ background-position: 50%;
132
+ background-size: 100% 100%;
133
+ }
134
+
135
+ /* rtl:options: {
136
+ "autoRename": true,
137
+ "stringMap":[ {
138
+ "name" : "prev-next",
139
+ "search" : "prev",
140
+ "replace" : "next"
141
+ } ]
142
+ } */
143
+ .carousel-control-prev-icon {
144
+ background-image: escape-svg($carousel-control-prev-icon-bg);
145
+ }
146
+ .carousel-control-next-icon {
147
+ background-image: escape-svg($carousel-control-next-icon-bg);
148
+ }
149
+
150
+ // Optional indicator pips/controls
151
+ //
152
+ // Add a container (such as a list) with the following class and add an item (ideally a focusable control,
153
+ // like a button) with data-bs-target for each slide your carousel holds.
154
+
155
+ .carousel-indicators {
156
+ position: absolute;
157
+ right: 0;
158
+ bottom: 0;
159
+ left: 0;
160
+ z-index: 2;
161
+ display: flex;
162
+ justify-content: center;
163
+ padding: 0;
164
+ // Use the .carousel-control's width as margin so we don't overlay those
165
+ margin-right: $carousel-control-width;
166
+ margin-bottom: 1rem;
167
+ margin-left: $carousel-control-width;
168
+
169
+ [data-bs-target] {
170
+ box-sizing: content-box;
171
+ flex: 0 1 auto;
172
+ width: $carousel-indicator-width;
173
+ height: $carousel-indicator-height;
174
+ padding: 0;
175
+ margin-right: $carousel-indicator-spacer;
176
+ margin-left: $carousel-indicator-spacer;
177
+ text-indent: -999px;
178
+ cursor: pointer;
179
+ background-color: $carousel-indicator-active-bg;
180
+ background-clip: padding-box;
181
+ border: 0;
182
+ // Use transparent borders to increase the hit area by 10px on top and bottom.
183
+ border-top: $carousel-indicator-hit-area-height solid transparent;
184
+ border-bottom: $carousel-indicator-hit-area-height solid transparent;
185
+ opacity: $carousel-indicator-opacity;
186
+ @include transition($carousel-indicator-transition);
187
+ }
188
+
189
+ .active {
190
+ opacity: $carousel-indicator-active-opacity;
191
+ }
192
+ }
193
+
194
+
195
+ // Optional captions
196
+ //
197
+ //
198
+
199
+ .carousel-caption {
200
+ position: absolute;
201
+ right: (100% - $carousel-caption-width) * .5;
202
+ bottom: $carousel-caption-spacer;
203
+ left: (100% - $carousel-caption-width) * .5;
204
+ padding-top: $carousel-caption-padding-y;
205
+ padding-bottom: $carousel-caption-padding-y;
206
+ color: $carousel-caption-color;
207
+ text-align: center;
208
+ }
209
+
210
+ // Dark mode carousel
211
+
212
+ @mixin carousel-dark() {
213
+ .carousel-control-prev-icon,
214
+ .carousel-control-next-icon {
215
+ filter: $carousel-dark-control-icon-filter;
216
+ }
217
+
218
+ .carousel-indicators [data-bs-target] {
219
+ background-color: $carousel-dark-indicator-active-bg;
220
+ }
221
+
222
+ .carousel-caption {
223
+ color: $carousel-dark-caption-color;
224
+ }
225
+ }
226
+
227
+ .carousel-dark {
228
+ @include carousel-dark();
229
+ }
230
+
231
+ @if $enable-dark-mode {
232
+ @include color-mode(dark) {
233
+ @if $color-mode-type == "media-query" {
234
+ .carousel {
235
+ @include carousel-dark();
236
+ }
237
+ } @else {
238
+ .carousel,
239
+ &.carousel {
240
+ @include carousel-dark();
241
+ }
242
+ }
243
+ }
244
+ }
@@ -0,0 +1,63 @@
1
+ // Transparent background and border properties included for button version.
2
+ // iOS requires the button element instead of an anchor tag.
3
+ // If you want the anchor version, it requires `href="#"`.
4
+ // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
5
+
6
+ .btn-close {
7
+ // scss-docs-start close-css-vars
8
+ --#{$prefix}btn-close-color: #{$btn-close-color};
9
+ --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };
10
+ --#{$prefix}btn-close-opacity: #{$btn-close-opacity};
11
+ --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};
12
+ --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};
13
+ --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};
14
+ --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};
15
+ --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};
16
+ // scss-docs-end close-css-vars
17
+
18
+ box-sizing: content-box;
19
+ width: $btn-close-width;
20
+ height: $btn-close-height;
21
+ padding: $btn-close-padding-y $btn-close-padding-x;
22
+ color: var(--#{$prefix}btn-close-color);
23
+ background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
24
+ border: 0; // for button elements
25
+ @include border-radius();
26
+ opacity: var(--#{$prefix}btn-close-opacity);
27
+
28
+ // Override <a>'s hover style
29
+ &:hover {
30
+ color: var(--#{$prefix}btn-close-color);
31
+ text-decoration: none;
32
+ opacity: var(--#{$prefix}btn-close-hover-opacity);
33
+ }
34
+
35
+ &:focus {
36
+ outline: 0;
37
+ box-shadow: var(--#{$prefix}btn-close-focus-shadow);
38
+ opacity: var(--#{$prefix}btn-close-focus-opacity);
39
+ }
40
+
41
+ &:disabled,
42
+ &.disabled {
43
+ pointer-events: none;
44
+ user-select: none;
45
+ opacity: var(--#{$prefix}btn-close-disabled-opacity);
46
+ }
47
+ }
48
+
49
+ @mixin btn-close-white() {
50
+ filter: var(--#{$prefix}btn-close-white-filter);
51
+ }
52
+
53
+ .btn-close-white {
54
+ @include btn-close-white();
55
+ }
56
+
57
+ @if $enable-dark-mode {
58
+ @include color-mode(dark) {
59
+ .btn-close {
60
+ @include btn-close-white();
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,41 @@
1
+ // Container widths
2
+ //
3
+ // Set the container width, and override it for fixed navbars in media queries.
4
+
5
+ @if $enable-container-classes {
6
+ // Single container class with breakpoint max-widths
7
+ .container,
8
+ // 100% wide container at all breakpoints
9
+ .container-fluid {
10
+ @include make-container();
11
+ }
12
+
13
+ // Responsive containers that are 100% wide until a breakpoint
14
+ @each $breakpoint, $container-max-width in $container-max-widths {
15
+ .container-#{$breakpoint} {
16
+ @extend .container-fluid;
17
+ }
18
+
19
+ @include media-breakpoint-up($breakpoint, $grid-breakpoints) {
20
+ %responsive-container-#{$breakpoint} {
21
+ max-width: $container-max-width;
22
+ }
23
+
24
+ // Extend each breakpoint which is smaller or equal to the current breakpoint
25
+ $extend-breakpoint: true;
26
+
27
+ @each $name, $width in $grid-breakpoints {
28
+ @if ($extend-breakpoint) {
29
+ .container#{breakpoint-infix($name, $grid-breakpoints)} {
30
+ @extend %responsive-container-#{$breakpoint};
31
+ }
32
+
33
+ // Once the current breakpoint is reached, stop extending
34
+ @if ($breakpoint == $name) {
35
+ $extend-breakpoint: false;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,250 @@
1
+ // The dropdown wrapper (`<div>`)
2
+ .dropup,
3
+ .dropend,
4
+ .dropdown,
5
+ .dropstart,
6
+ .dropup-center,
7
+ .dropdown-center {
8
+ position: relative;
9
+ }
10
+
11
+ .dropdown-toggle {
12
+ white-space: nowrap;
13
+
14
+ // Generate the caret automatically
15
+ @include caret();
16
+ }
17
+
18
+ // The dropdown menu
19
+ .dropdown-menu {
20
+ // scss-docs-start dropdown-css-vars
21
+ --#{$prefix}dropdown-zindex: #{$zindex-dropdown};
22
+ --#{$prefix}dropdown-min-width: #{$dropdown-min-width};
23
+ --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};
24
+ --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};
25
+ --#{$prefix}dropdown-spacer: #{$dropdown-spacer};
26
+ @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);
27
+ --#{$prefix}dropdown-color: #{$dropdown-color};
28
+ --#{$prefix}dropdown-bg: #{$dropdown-bg};
29
+ --#{$prefix}dropdown-border-color: #{$dropdown-border-color};
30
+ --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};
31
+ --#{$prefix}dropdown-border-width: #{$dropdown-border-width};
32
+ --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};
33
+ --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};
34
+ --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};
35
+ --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};
36
+ --#{$prefix}dropdown-link-color: #{$dropdown-link-color};
37
+ --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};
38
+ --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};
39
+ --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};
40
+ --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};
41
+ --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};
42
+ --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};
43
+ --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};
44
+ --#{$prefix}dropdown-header-color: #{$dropdown-header-color};
45
+ --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};
46
+ --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};
47
+ // scss-docs-end dropdown-css-vars
48
+
49
+ position: absolute;
50
+ z-index: var(--#{$prefix}dropdown-zindex);
51
+ display: none; // none by default, but block on "open" of the menu
52
+ min-width: var(--#{$prefix}dropdown-min-width);
53
+ padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);
54
+ margin: 0; // Override default margin of ul
55
+ @include font-size(var(--#{$prefix}dropdown-font-size));
56
+ color: var(--#{$prefix}dropdown-color);
57
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
58
+ list-style: none;
59
+ background-color: var(--#{$prefix}dropdown-bg);
60
+ background-clip: padding-box;
61
+ border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);
62
+ @include border-radius(var(--#{$prefix}dropdown-border-radius));
63
+ @include box-shadow(var(--#{$prefix}dropdown-box-shadow));
64
+
65
+ &[data-bs-popper] {
66
+ top: 100%;
67
+ left: 0;
68
+ margin-top: var(--#{$prefix}dropdown-spacer);
69
+ }
70
+
71
+ @if $dropdown-padding-y == 0 {
72
+ > .dropdown-item:first-child,
73
+ > li:first-child .dropdown-item {
74
+ @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));
75
+ }
76
+ > .dropdown-item:last-child,
77
+ > li:last-child .dropdown-item {
78
+ @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));
79
+ }
80
+
81
+ }
82
+ }
83
+
84
+ // scss-docs-start responsive-breakpoints
85
+ // We deliberately hardcode the `bs-` prefix because we check
86
+ // this custom property in JS to determine Popper's positioning
87
+
88
+ @each $breakpoint in map-keys($grid-breakpoints) {
89
+ @include media-breakpoint-up($breakpoint) {
90
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
91
+
92
+ .dropdown-menu#{$infix}-start {
93
+ --bs-position: start;
94
+
95
+ &[data-bs-popper] {
96
+ right: auto;
97
+ left: 0;
98
+ }
99
+ }
100
+
101
+ .dropdown-menu#{$infix}-end {
102
+ --bs-position: end;
103
+
104
+ &[data-bs-popper] {
105
+ right: 0;
106
+ left: auto;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ // scss-docs-end responsive-breakpoints
112
+
113
+ // Allow for dropdowns to go bottom up (aka, dropup-menu)
114
+ // Just add .dropup after the standard .dropdown class and you're set.
115
+ .dropup {
116
+ .dropdown-menu[data-bs-popper] {
117
+ top: auto;
118
+ bottom: 100%;
119
+ margin-top: 0;
120
+ margin-bottom: var(--#{$prefix}dropdown-spacer);
121
+ }
122
+
123
+ .dropdown-toggle {
124
+ @include caret(up);
125
+ }
126
+ }
127
+
128
+ .dropend {
129
+ .dropdown-menu[data-bs-popper] {
130
+ top: 0;
131
+ right: auto;
132
+ left: 100%;
133
+ margin-top: 0;
134
+ margin-left: var(--#{$prefix}dropdown-spacer);
135
+ }
136
+
137
+ .dropdown-toggle {
138
+ @include caret(end);
139
+ &::after {
140
+ vertical-align: 0;
141
+ }
142
+ }
143
+ }
144
+
145
+ .dropstart {
146
+ .dropdown-menu[data-bs-popper] {
147
+ top: 0;
148
+ right: 100%;
149
+ left: auto;
150
+ margin-top: 0;
151
+ margin-right: var(--#{$prefix}dropdown-spacer);
152
+ }
153
+
154
+ .dropdown-toggle {
155
+ @include caret(start);
156
+ &::before {
157
+ vertical-align: 0;
158
+ }
159
+ }
160
+ }
161
+
162
+
163
+ // Dividers (basically an `<hr>`) within the dropdown
164
+ .dropdown-divider {
165
+ height: 0;
166
+ margin: var(--#{$prefix}dropdown-divider-margin-y) 0;
167
+ overflow: hidden;
168
+ border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);
169
+ opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element
170
+ }
171
+
172
+ // Links, buttons, and more within the dropdown menu
173
+ //
174
+ // `<button>`-specific styles are denoted with `// For <button>s`
175
+ .dropdown-item {
176
+ display: block;
177
+ width: 100%; // For `<button>`s
178
+ padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);
179
+ clear: both;
180
+ font-weight: $font-weight-normal;
181
+ color: var(--#{$prefix}dropdown-link-color);
182
+ text-align: inherit; // For `<button>`s
183
+ text-decoration: if($link-decoration == none, null, none);
184
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
185
+ background-color: transparent; // For `<button>`s
186
+ border: 0; // For `<button>`s
187
+ @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));
188
+
189
+ &:hover,
190
+ &:focus {
191
+ color: var(--#{$prefix}dropdown-link-hover-color);
192
+ text-decoration: if($link-hover-decoration == underline, none, null);
193
+ @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));
194
+ }
195
+
196
+ &.active,
197
+ &:active {
198
+ color: var(--#{$prefix}dropdown-link-active-color);
199
+ text-decoration: none;
200
+ @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));
201
+ }
202
+
203
+ &.disabled,
204
+ &:disabled {
205
+ color: var(--#{$prefix}dropdown-link-disabled-color);
206
+ pointer-events: none;
207
+ background-color: transparent;
208
+ // Remove CSS gradients if they're enabled
209
+ background-image: if($enable-gradients, none, null);
210
+ }
211
+ }
212
+
213
+ .dropdown-menu.show {
214
+ display: block;
215
+ }
216
+
217
+ // Dropdown section headers
218
+ .dropdown-header {
219
+ display: block;
220
+ padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);
221
+ margin-bottom: 0; // for use with heading elements
222
+ @include font-size($font-size-sm);
223
+ color: var(--#{$prefix}dropdown-header-color);
224
+ white-space: nowrap; // as with > li > a
225
+ }
226
+
227
+ // Dropdown text
228
+ .dropdown-item-text {
229
+ display: block;
230
+ padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);
231
+ color: var(--#{$prefix}dropdown-link-color);
232
+ }
233
+
234
+ // Dark dropdowns
235
+ .dropdown-menu-dark {
236
+ // scss-docs-start dropdown-dark-css-vars
237
+ --#{$prefix}dropdown-color: #{$dropdown-dark-color};
238
+ --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};
239
+ --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};
240
+ --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};
241
+ --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};
242
+ --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};
243
+ --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};
244
+ --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};
245
+ --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};
246
+ --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};
247
+ --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};
248
+ --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};
249
+ // scss-docs-end dropdown-dark-css-vars
250
+ }
@@ -0,0 +1,9 @@
1
+ @import "forms/labels";
2
+ @import "forms/form-text";
3
+ @import "forms/form-control";
4
+ @import "forms/form-select";
5
+ @import "forms/form-check";
6
+ @import "forms/form-range";
7
+ @import "forms/floating-labels";
8
+ @import "forms/input-group";
9
+ @import "forms/validation";