headmin 0.2.9 → 0.3.1

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 (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -3
  3. data/Gemfile.lock +12 -1
  4. data/README.md +64 -57
  5. data/app/assets/config/headmin_manifest.js +2 -0
  6. data/app/assets/javascripts/headmin/config/i18n.js +11 -0
  7. data/{src/js → app/assets/javascripts}/headmin/controllers/blocks_controller.js +0 -1
  8. data/{src/js → app/assets/javascripts}/headmin/controllers/date_range_controller.js +0 -2
  9. data/app/assets/javascripts/headmin/controllers/dropzone_controller.js +33 -0
  10. data/app/assets/javascripts/headmin/controllers/file_preview_controller.js +244 -0
  11. data/{src/js → app/assets/javascripts}/headmin/controllers/filter_controller.js +12 -6
  12. data/{src/js → app/assets/javascripts}/headmin/controllers/flatpickr_controller.js +2 -1
  13. data/app/assets/javascripts/headmin/controllers/hello_controller.js +7 -0
  14. data/app/assets/javascripts/headmin/controllers/notification_controller.js +8 -0
  15. data/{src/js → app/assets/javascripts}/headmin/controllers/popup_controller.js +0 -1
  16. data/app/assets/javascripts/headmin/controllers/redactorx_controller.js +13 -0
  17. data/app/assets/javascripts/headmin/controllers/select_controller.js +48 -0
  18. data/{src/js → app/assets/javascripts}/headmin/controllers/table_controller.js +1 -1
  19. data/app/assets/javascripts/headmin/index.js +41 -0
  20. data/app/assets/javascripts/headmin.js +15934 -0
  21. data/{src/scss → app/assets/stylesheets}/headmin/form.scss +51 -2
  22. data/app/assets/stylesheets/headmin/syntax.scss +349 -0
  23. data/app/assets/stylesheets/headmin/thumbnail.scss +20 -0
  24. data/app/assets/stylesheets/headmin/utilities.scss +68 -0
  25. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_accordion.scss +118 -0
  26. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_alert.scss +57 -0
  27. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_badge.scss +29 -0
  28. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_breadcrumb.scss +28 -0
  29. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_button-group.scss +139 -0
  30. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_buttons.scss +111 -0
  31. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_card.scss +216 -0
  32. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_carousel.scss +229 -0
  33. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_close.scss +40 -0
  34. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_containers.scss +41 -0
  35. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_dropdown.scss +240 -0
  36. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_forms.scss +9 -0
  37. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_functions.scss +302 -0
  38. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_grid.scss +33 -0
  39. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_helpers.scss +9 -0
  40. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_images.scss +42 -0
  41. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_list-group.scss +174 -0
  42. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_mixins.scss +43 -0
  43. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_modal.scss +209 -0
  44. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_nav.scss +139 -0
  45. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_navbar.scss +335 -0
  46. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_offcanvas.scss +83 -0
  47. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_pagination.scss +64 -0
  48. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_placeholders.scss +51 -0
  49. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_popover.scss +158 -0
  50. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_progress.scss +48 -0
  51. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_reboot.scss +625 -0
  52. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_root.scss +54 -0
  53. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_spinners.scss +69 -0
  54. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_tables.scss +155 -0
  55. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_toasts.scss +51 -0
  56. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_tooltip.scss +115 -0
  57. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_transitions.scss +27 -0
  58. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_type.scss +104 -0
  59. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_utilities.scss +630 -0
  60. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_variables.scss +1641 -0
  61. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-grid.scss +67 -0
  62. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-reboot.scss +13 -0
  63. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-utilities.scss +18 -0
  64. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap.scss +53 -0
  65. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_floating-labels.scss +63 -0
  66. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-check.scss +152 -0
  67. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-control.scss +219 -0
  68. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-range.scss +91 -0
  69. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-select.scss +72 -0
  70. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-text.scss +11 -0
  71. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_input-group.scss +121 -0
  72. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_labels.scss +36 -0
  73. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_validation.scss +12 -0
  74. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_clearfix.scss +3 -0
  75. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_colored-links.scss +12 -0
  76. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_position.scss +30 -0
  77. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_ratio.scss +26 -0
  78. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_stacks.scss +15 -0
  79. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  80. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  81. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  82. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_vr.scss +8 -0
  83. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_alert.scss +11 -0
  84. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_backdrop.scss +14 -0
  85. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_border-radius.scss +78 -0
  86. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  87. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  88. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_buttons.scss +133 -0
  89. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_caret.scss +64 -0
  90. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_clearfix.scss +9 -0
  91. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  92. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_container.scss +9 -0
  93. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_deprecate.scss +10 -0
  94. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_forms.scss +144 -0
  95. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_gradients.scss +47 -0
  96. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_grid.scss +151 -0
  97. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_image.scss +16 -0
  98. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_list-group.scss +24 -0
  99. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_lists.scss +7 -0
  100. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_pagination.scss +31 -0
  101. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_reset-text.scss +17 -0
  102. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_resize.scss +6 -0
  103. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_table-variants.scss +21 -0
  104. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  105. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_transition.scss +26 -0
  106. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_utilities.scss +89 -0
  107. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
  108. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/utilities/_api.scss +47 -0
  109. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/vendor/_rfs.scss +354 -0
  110. data/app/assets/stylesheets/headmin/vendor/flatpickr.css +903 -0
  111. data/app/assets/stylesheets/headmin/vendor/tom-select-bootstrap.css +537 -0
  112. data/app/assets/stylesheets/headmin.css +13454 -0
  113. data/app/assets/stylesheets/headmin.scss +65 -0
  114. data/app/helpers/headmin/admin_helper.rb +1 -0
  115. data/app/helpers/headmin/bootstrap_helper.rb +25 -3
  116. data/app/helpers/headmin/documentation_helper.rb +35 -0
  117. data/app/helpers/headmin/form_helper.rb +4 -0
  118. data/app/helpers/headmin/request_helper.rb +3 -8
  119. data/app/models/headmin/documentation_renderer.rb +32 -0
  120. data/app/models/headmin/form/base.rb +79 -0
  121. data/app/models/headmin/form/text.rb +53 -0
  122. data/app/services/block_service.rb +1 -1
  123. data/app/views/examples/admin.html.erb +1 -1
  124. data/app/views/headmin/_blocks.html.erb +2 -2
  125. data/app/views/headmin/_breadcrumbs.html.erb +1 -1
  126. data/app/views/headmin/_card.html.erb +8 -6
  127. data/app/views/headmin/_dropdown.html.erb +1 -1
  128. data/app/views/headmin/_filters.html.erb +20 -8
  129. data/app/views/headmin/_form.html.erb +14 -14
  130. data/app/views/headmin/_heading.html.erb +1 -1
  131. data/app/views/headmin/_notifications.html.erb +1 -1
  132. data/app/views/headmin/_pagination.html.erb +1 -1
  133. data/app/views/headmin/_popup.html.erb +10 -4
  134. data/app/views/headmin/_table.html.erb +2 -2
  135. data/app/views/headmin/_thumbnail.html.erb +47 -0
  136. data/app/views/headmin/dropdown/_devise.html.erb +2 -2
  137. data/app/views/headmin/dropdown/_list.html.erb +3 -6
  138. data/app/views/headmin/filters/_date.html.erb +4 -10
  139. data/app/views/headmin/filters/_flatpickr.html.erb +5 -5
  140. data/app/views/headmin/filters/_search.html.erb +5 -5
  141. data/app/views/headmin/filters/_select.html.erb +6 -6
  142. data/app/views/headmin/filters/filter/_button.html.erb +7 -7
  143. data/app/views/headmin/filters/filter/_template.html.erb +1 -1
  144. data/app/views/headmin/forms/_actions.html.erb +1 -1
  145. data/app/views/headmin/forms/_base.html.erb +98 -45
  146. data/app/views/headmin/forms/_blocks.html.erb +4 -4
  147. data/app/views/headmin/forms/_checkbox.html.erb +3 -3
  148. data/app/views/headmin/forms/_date.html.erb +29 -45
  149. data/app/views/headmin/forms/_date_range.html.erb +24 -66
  150. data/app/views/headmin/forms/_email.html.erb +35 -26
  151. data/app/views/headmin/forms/_file.html.erb +186 -34
  152. data/app/views/headmin/forms/_flatpickr.html.erb +18 -39
  153. data/app/views/headmin/forms/_flatpickr_range.html.erb +34 -45
  154. data/app/views/headmin/forms/_hidden.html.erb +13 -12
  155. data/app/views/headmin/forms/_image.html.erb +11 -45
  156. data/app/views/headmin/forms/_label.html.erb +18 -14
  157. data/app/views/headmin/forms/_number.html.erb +40 -37
  158. data/app/views/headmin/forms/_password.html.erb +37 -58
  159. data/app/views/headmin/forms/_redactorx.html.erb +8 -7
  160. data/app/views/headmin/forms/_repeater.html.erb +6 -6
  161. data/app/views/headmin/forms/_select.html.erb +43 -48
  162. data/app/views/headmin/forms/_text.html.erb +95 -58
  163. data/app/views/headmin/forms/_textarea.html.erb +37 -26
  164. data/app/views/headmin/forms/_url.html.erb +35 -26
  165. data/app/views/headmin/forms/_validation.html.erb +3 -3
  166. data/app/views/headmin/forms/_video.html.erb +21 -0
  167. data/app/views/headmin/forms/fields/_base.html.erb +3 -3
  168. data/app/views/headmin/forms/fields/_file.html.erb +2 -2
  169. data/app/views/headmin/forms/fields/_group.html.erb +3 -3
  170. data/app/views/headmin/forms/fields/_image.html.erb +2 -2
  171. data/app/views/headmin/forms/fields/_list.html.erb +3 -3
  172. data/app/views/headmin/forms/fields/_text.html.erb +2 -2
  173. data/app/views/headmin/forms/repeater/_row.html.erb +1 -1
  174. data/app/views/headmin/heading/_title.html.erb +1 -1
  175. data/app/views/headmin/layout/_body.html.erb +1 -1
  176. data/app/views/headmin/layout/_content.html.erb +1 -1
  177. data/app/views/headmin/layout/_footer.html.erb +1 -1
  178. data/app/views/headmin/layout/_header.html.erb +1 -1
  179. data/app/views/headmin/layout/_main.html.erb +1 -1
  180. data/app/views/headmin/layout/_sidebar.html.erb +3 -3
  181. data/app/views/headmin/layout/sidebar/_bottom.html.erb +1 -1
  182. data/app/views/headmin/layout/sidebar/_nav.html.erb +1 -1
  183. data/app/views/headmin/nav/_dropdown.html.erb +34 -0
  184. data/app/views/headmin/nav/_item.html.erb +22 -13
  185. data/app/views/headmin/table/_actions.html.erb +1 -1
  186. data/app/views/headmin/table/_body.html.erb +1 -1
  187. data/app/views/headmin/table/_foot.html.erb +1 -1
  188. data/app/views/headmin/table/_footer.html.erb +1 -1
  189. data/app/views/headmin/table/_head.html.erb +1 -1
  190. data/app/views/headmin/table/_header.html.erb +1 -1
  191. data/app/views/headmin/table/actions/_action.html.erb +4 -4
  192. data/app/views/headmin/table/actions/_delete.html.erb +1 -1
  193. data/app/views/headmin/table/actions/_export.html.erb +1 -1
  194. data/app/views/headmin/table/body/_row.html.erb +2 -2
  195. data/config/importmap.rb +2 -0
  196. data/config/locales/en.yml +0 -3
  197. data/config/locales/headmin/forms/en.yml +5 -0
  198. data/config/locales/headmin/forms/nl.yml +5 -0
  199. data/config/locales/headmin/popup/en.yml +4 -0
  200. data/config/locales/headmin/popup/nl.yml +4 -0
  201. data/config/locales/headmin/thumbnail/en.yml +4 -0
  202. data/config/locales/headmin/thumbnail/nl.yml +4 -0
  203. data/config/locales/nl.yml +0 -3
  204. data/esbuild-css.js +25 -0
  205. data/esbuild-js.js +11 -0
  206. data/headmin.gemspec +4 -1
  207. data/lib/headmin/engine.rb +15 -0
  208. data/lib/headmin/version.rb +1 -1
  209. data/lib/headmin.rb +1 -1
  210. data/package.json +18 -34
  211. data/src/js/headmin.js +1 -1
  212. data/src/scss/headmin.scss +1 -61
  213. data/yarn.lock +393 -5177
  214. metadata +183 -33
  215. data/.nvmrc +0 -1
  216. data/app/controllers/concerns/headmin/ckeditor.rb +0 -27
  217. data/app/views/headmin/forms/_ckeditor.html.erb +0 -42
  218. data/dist/css/headmin.css +0 -12357
  219. data/dist/js/headmin.js +0 -1115
  220. data/src/js/headmin/headmin.js +0 -158
  221. data/src/scss/headmin/utilities.scss +0 -19
  222. data/webpack.config.js +0 -30
  223. /data/{src/js → app/assets/javascripts}/headmin/controllers/filters_controller.js +0 -0
  224. /data/{src/js → app/assets/javascripts}/headmin/controllers/repeater_controller.js +0 -0
  225. /data/{src/js → app/assets/javascripts}/headmin/controllers/table_actions_controller.js +0 -0
  226. /data/{src/scss → app/assets/stylesheets}/headmin/filter.scss +0 -0
  227. /data/{src/scss → app/assets/stylesheets}/headmin/filters.scss +0 -0
  228. /data/{src/scss → app/assets/stylesheets}/headmin/general.scss +0 -0
  229. /data/{src/scss → app/assets/stylesheets}/headmin/layout/body.scss +0 -0
  230. /data/{src/scss → app/assets/stylesheets}/headmin/layout/sidebar.scss +0 -0
  231. /data/{src/scss → app/assets/stylesheets}/headmin/layout.scss +0 -0
  232. /data/{src/scss → app/assets/stylesheets}/headmin/login.scss +0 -0
  233. /data/{src/scss/vendor/bootstrap/variables.scss → app/assets/stylesheets/headmin/overrides/bootstrap.scss} +0 -0
  234. /data/{src/scss/vendor/redactorx/override.css → app/assets/stylesheets/headmin/overrides/redactorx.css} +0 -0
  235. /data/{src/scss → app/assets/stylesheets}/headmin/popup.scss +0 -0
  236. /data/{src/scss → app/assets/stylesheets}/headmin/table.scss +0 -0
  237. /data/{src/scss/vendor/redactorx → app/assets/stylesheets/headmin/vendor}/redactorx.css +0 -0
@@ -0,0 +1,42 @@
1
+ // Responsive images (ensure images don't scale beyond their parents)
2
+ //
3
+ // This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
4
+ // We previously tried the "images are responsive by default" approach in Bootstrap v2,
5
+ // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
6
+ // which weren't expecting the images within themselves to be involuntarily resized.
7
+ // See also https://github.com/twbs/bootstrap/issues/18178
8
+ .img-fluid {
9
+ @include img-fluid();
10
+ }
11
+
12
+
13
+ // Image thumbnails
14
+ .img-thumbnail {
15
+ padding: $thumbnail-padding;
16
+ background-color: $thumbnail-bg;
17
+ border: $thumbnail-border-width solid $thumbnail-border-color;
18
+ @include border-radius($thumbnail-border-radius);
19
+ @include box-shadow($thumbnail-box-shadow);
20
+
21
+ // Keep them at most 100% wide
22
+ @include img-fluid();
23
+ }
24
+
25
+ //
26
+ // Figures
27
+ //
28
+
29
+ .figure {
30
+ // Ensures the caption's text aligns with the image.
31
+ display: inline-block;
32
+ }
33
+
34
+ .figure-img {
35
+ margin-bottom: $spacer * .5;
36
+ line-height: 1;
37
+ }
38
+
39
+ .figure-caption {
40
+ @include font-size($figure-caption-font-size);
41
+ color: $figure-caption-color;
42
+ }
@@ -0,0 +1,174 @@
1
+ // Base class
2
+ //
3
+ // Easily usable on <ul>, <ol>, or <div>.
4
+
5
+ .list-group {
6
+ display: flex;
7
+ flex-direction: column;
8
+
9
+ // No need to set list-style: none; since .list-group-item is block level
10
+ padding-left: 0; // reset padding because ul and ol
11
+ margin-bottom: 0;
12
+ @include border-radius($list-group-border-radius);
13
+ }
14
+
15
+ .list-group-numbered {
16
+ list-style-type: none;
17
+ counter-reset: section;
18
+
19
+ > li::before {
20
+ // Increments only this instance of the section counter
21
+ content: counters(section, ".") ". ";
22
+ counter-increment: section;
23
+ }
24
+ }
25
+
26
+
27
+ // Interactive list items
28
+ //
29
+ // Use anchor or button elements instead of `li`s or `div`s to create interactive
30
+ // list items. Includes an extra `.active` modifier class for selected items.
31
+
32
+ .list-group-item-action {
33
+ width: 100%; // For `<button>`s (anchors become 100% by default though)
34
+ color: $list-group-action-color;
35
+ text-align: inherit; // For `<button>`s (anchors inherit)
36
+
37
+ // Hover state
38
+ &:hover,
39
+ &:focus {
40
+ z-index: 1; // Place hover/focus items above their siblings for proper border styling
41
+ color: $list-group-action-hover-color;
42
+ text-decoration: none;
43
+ background-color: $list-group-hover-bg;
44
+ }
45
+
46
+ &:active {
47
+ color: $list-group-action-active-color;
48
+ background-color: $list-group-action-active-bg;
49
+ }
50
+ }
51
+
52
+
53
+ // Individual list items
54
+ //
55
+ // Use on `li`s or `div`s within the `.list-group` parent.
56
+
57
+ .list-group-item {
58
+ position: relative;
59
+ display: block;
60
+ padding: $list-group-item-padding-y $list-group-item-padding-x;
61
+ color: $list-group-color;
62
+ text-decoration: if($link-decoration == none, null, none);
63
+ background-color: $list-group-bg;
64
+ border: $list-group-border-width solid $list-group-border-color;
65
+
66
+ &:first-child {
67
+ @include border-top-radius(inherit);
68
+ }
69
+
70
+ &:last-child {
71
+ @include border-bottom-radius(inherit);
72
+ }
73
+
74
+ &.disabled,
75
+ &:disabled {
76
+ color: $list-group-disabled-color;
77
+ pointer-events: none;
78
+ background-color: $list-group-disabled-bg;
79
+ }
80
+
81
+ // Include both here for `<a>`s and `<button>`s
82
+ &.active {
83
+ z-index: 2; // Place active items above their siblings for proper border styling
84
+ color: $list-group-active-color;
85
+ background-color: $list-group-active-bg;
86
+ border-color: $list-group-active-border-color;
87
+ }
88
+
89
+ & + & {
90
+ border-top-width: 0;
91
+
92
+ &.active {
93
+ margin-top: -$list-group-border-width;
94
+ border-top-width: $list-group-border-width;
95
+ }
96
+ }
97
+ }
98
+
99
+
100
+ // Horizontal
101
+ //
102
+ // Change the layout of list group items from vertical (default) to horizontal.
103
+
104
+ @each $breakpoint in map-keys($grid-breakpoints) {
105
+ @include media-breakpoint-up($breakpoint) {
106
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
107
+
108
+ .list-group-horizontal#{$infix} {
109
+ flex-direction: row;
110
+
111
+ > .list-group-item {
112
+ &:first-child {
113
+ @include border-bottom-start-radius($list-group-border-radius);
114
+ @include border-top-end-radius(0);
115
+ }
116
+
117
+ &:last-child {
118
+ @include border-top-end-radius($list-group-border-radius);
119
+ @include border-bottom-start-radius(0);
120
+ }
121
+
122
+ &.active {
123
+ margin-top: 0;
124
+ }
125
+
126
+ + .list-group-item {
127
+ border-top-width: $list-group-border-width;
128
+ border-left-width: 0;
129
+
130
+ &.active {
131
+ margin-left: -$list-group-border-width;
132
+ border-left-width: $list-group-border-width;
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+
141
+ // Flush list items
142
+ //
143
+ // Remove borders and border-radius to keep list group items edge-to-edge. Most
144
+ // useful within other components (e.g., cards).
145
+
146
+ .list-group-flush {
147
+ @include border-radius(0);
148
+
149
+ > .list-group-item {
150
+ border-width: 0 0 $list-group-border-width;
151
+
152
+ &:last-child {
153
+ border-bottom-width: 0;
154
+ }
155
+ }
156
+ }
157
+
158
+
159
+ // scss-docs-start list-group-modifiers
160
+ // List group contextual variants
161
+ //
162
+ // Add modifier classes to change text and background color on individual items.
163
+ // Organizationally, this must come after the `:hover` states.
164
+
165
+ @each $state, $value in $theme-colors {
166
+ $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);
167
+ $list-group-variant-color: shift-color($value, $list-group-item-color-scale);
168
+ @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {
169
+ $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));
170
+ }
171
+
172
+ @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);
173
+ }
174
+ // scss-docs-end list-group-modifiers
@@ -0,0 +1,43 @@
1
+ // Toggles
2
+ //
3
+ // Used in conjunction with global variables to enable certain theme features.
4
+
5
+ // Vendor
6
+ @import "vendor/rfs";
7
+
8
+ // Deprecate
9
+ @import "mixins/deprecate";
10
+
11
+ // Helpers
12
+ @import "mixins/breakpoints";
13
+ @import "mixins/color-scheme";
14
+ @import "mixins/image";
15
+ @import "mixins/resize";
16
+ @import "mixins/visually-hidden";
17
+ @import "mixins/reset-text";
18
+ @import "mixins/text-truncate";
19
+
20
+ // Utilities
21
+ @import "mixins/utilities";
22
+
23
+ // Components
24
+ @import "mixins/alert";
25
+ @import "mixins/backdrop";
26
+ @import "mixins/buttons";
27
+ @import "mixins/caret";
28
+ @import "mixins/pagination";
29
+ @import "mixins/lists";
30
+ @import "mixins/list-group";
31
+ @import "mixins/forms";
32
+ @import "mixins/table-variants";
33
+
34
+ // Skins
35
+ @import "mixins/border-radius";
36
+ @import "mixins/box-shadow";
37
+ @import "mixins/gradients";
38
+ @import "mixins/transition";
39
+
40
+ // Layout
41
+ @import "mixins/clearfix";
42
+ @import "mixins/container";
43
+ @import "mixins/grid";
@@ -0,0 +1,209 @@
1
+ // .modal-open - body class for killing the scroll
2
+ // .modal - container to scroll within
3
+ // .modal-dialog - positioning shell for the actual modal
4
+ // .modal-content - actual modal w/ bg and corners and stuff
5
+
6
+
7
+ // Container that the modal scrolls within
8
+ .modal {
9
+ position: fixed;
10
+ top: 0;
11
+ left: 0;
12
+ z-index: $zindex-modal;
13
+ display: none;
14
+ width: 100%;
15
+ height: 100%;
16
+ overflow-x: hidden;
17
+ overflow-y: auto;
18
+ // Prevent Chrome on Windows from adding a focus outline. For details, see
19
+ // https://github.com/twbs/bootstrap/pull/10951.
20
+ outline: 0;
21
+ // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
22
+ // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
23
+ // See also https://github.com/twbs/bootstrap/issues/17695
24
+ }
25
+
26
+ // Shell div to position the modal with bottom padding
27
+ .modal-dialog {
28
+ position: relative;
29
+ width: auto;
30
+ margin: $modal-dialog-margin;
31
+ // allow clicks to pass through for custom click handling to close modal
32
+ pointer-events: none;
33
+
34
+ // When fading in the modal, animate it to slide down
35
+ .modal.fade & {
36
+ @include transition($modal-transition);
37
+ transform: $modal-fade-transform;
38
+ }
39
+ .modal.show & {
40
+ transform: $modal-show-transform;
41
+ }
42
+
43
+ // When trying to close, animate focus to scale
44
+ .modal.modal-static & {
45
+ transform: $modal-scale-transform;
46
+ }
47
+ }
48
+
49
+ .modal-dialog-scrollable {
50
+ height: subtract(100%, $modal-dialog-margin * 2);
51
+
52
+ .modal-content {
53
+ max-height: 100%;
54
+ overflow: hidden;
55
+ }
56
+
57
+ .modal-body {
58
+ overflow-y: auto;
59
+ }
60
+ }
61
+
62
+ .modal-dialog-centered {
63
+ display: flex;
64
+ align-items: center;
65
+ min-height: subtract(100%, $modal-dialog-margin * 2);
66
+ }
67
+
68
+ // Actual modal
69
+ .modal-content {
70
+ position: relative;
71
+ display: flex;
72
+ flex-direction: column;
73
+ width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
74
+ // counteract the pointer-events: none; in the .modal-dialog
75
+ color: $modal-content-color;
76
+ pointer-events: auto;
77
+ background-color: $modal-content-bg;
78
+ background-clip: padding-box;
79
+ border: $modal-content-border-width solid $modal-content-border-color;
80
+ @include border-radius($modal-content-border-radius);
81
+ @include box-shadow($modal-content-box-shadow-xs);
82
+ // Remove focus outline from opened modal
83
+ outline: 0;
84
+ }
85
+
86
+ // Modal background
87
+ .modal-backdrop {
88
+ @include overlay-backdrop($zindex-modal-backdrop, $modal-backdrop-bg, $modal-backdrop-opacity);
89
+ }
90
+
91
+ // Modal header
92
+ // Top section of the modal w/ title and dismiss
93
+ .modal-header {
94
+ display: flex;
95
+ flex-shrink: 0;
96
+ align-items: center;
97
+ justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
98
+ padding: $modal-header-padding;
99
+ border-bottom: $modal-header-border-width solid $modal-header-border-color;
100
+ @include border-top-radius($modal-content-inner-border-radius);
101
+
102
+ .btn-close {
103
+ padding: ($modal-header-padding-y * .5) ($modal-header-padding-x * .5);
104
+ margin: ($modal-header-padding-y * -.5) ($modal-header-padding-x * -.5) ($modal-header-padding-y * -.5) auto;
105
+ }
106
+ }
107
+
108
+ // Title text within header
109
+ .modal-title {
110
+ margin-bottom: 0;
111
+ line-height: $modal-title-line-height;
112
+ }
113
+
114
+ // Modal body
115
+ // Where all modal content resides (sibling of .modal-header and .modal-footer)
116
+ .modal-body {
117
+ position: relative;
118
+ // Enable `flex-grow: 1` so that the body take up as much space as possible
119
+ // when there should be a fixed height on `.modal-dialog`.
120
+ flex: 1 1 auto;
121
+ padding: $modal-inner-padding;
122
+ }
123
+
124
+ // Footer (for actions)
125
+ .modal-footer {
126
+ display: flex;
127
+ flex-wrap: wrap;
128
+ flex-shrink: 0;
129
+ align-items: center; // vertically center
130
+ justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
131
+ padding: $modal-inner-padding - $modal-footer-margin-between * .5;
132
+ border-top: $modal-footer-border-width solid $modal-footer-border-color;
133
+ @include border-bottom-radius($modal-content-inner-border-radius);
134
+
135
+ // Place margin between footer elements
136
+ // This solution is far from ideal because of the universal selector usage,
137
+ // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
138
+ > * {
139
+ margin: $modal-footer-margin-between * .5;
140
+ }
141
+ }
142
+
143
+ // Scale up the modal
144
+ @include media-breakpoint-up(sm) {
145
+ // Automatically set modal's width for larger viewports
146
+ .modal-dialog {
147
+ max-width: $modal-md;
148
+ margin: $modal-dialog-margin-y-sm-up auto;
149
+ }
150
+
151
+ .modal-dialog-scrollable {
152
+ height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
153
+ }
154
+
155
+ .modal-dialog-centered {
156
+ min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
157
+ }
158
+
159
+ .modal-content {
160
+ @include box-shadow($modal-content-box-shadow-sm-up);
161
+ }
162
+
163
+ .modal-sm { max-width: $modal-sm; }
164
+ }
165
+
166
+ @include media-breakpoint-up(lg) {
167
+ .modal-lg,
168
+ .modal-xl {
169
+ max-width: $modal-lg;
170
+ }
171
+ }
172
+
173
+ @include media-breakpoint-up(xl) {
174
+ .modal-xl { max-width: $modal-xl; }
175
+ }
176
+
177
+ // scss-docs-start modal-fullscreen-loop
178
+ @each $breakpoint in map-keys($grid-breakpoints) {
179
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
180
+ $postfix: if($infix != "", $infix + "-down", "");
181
+
182
+ @include media-breakpoint-down($breakpoint) {
183
+ .modal-fullscreen#{$postfix} {
184
+ width: 100vw;
185
+ max-width: none;
186
+ height: 100%;
187
+ margin: 0;
188
+
189
+ .modal-content {
190
+ height: 100%;
191
+ border: 0;
192
+ @include border-radius(0);
193
+ }
194
+
195
+ .modal-header {
196
+ @include border-radius(0);
197
+ }
198
+
199
+ .modal-body {
200
+ overflow-y: auto;
201
+ }
202
+
203
+ .modal-footer {
204
+ @include border-radius(0);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // scss-docs-end modal-fullscreen-loop
@@ -0,0 +1,139 @@
1
+ // Base class
2
+ //
3
+ // Kickstart any navigation component with a set of style resets. Works with
4
+ // `<nav>`s, `<ul>`s or `<ol>`s.
5
+
6
+ .nav {
7
+ display: flex;
8
+ flex-wrap: wrap;
9
+ padding-left: 0;
10
+ margin-bottom: 0;
11
+ list-style: none;
12
+ }
13
+
14
+ .nav-link {
15
+ display: block;
16
+ padding: $nav-link-padding-y $nav-link-padding-x;
17
+ @include font-size($nav-link-font-size);
18
+ font-weight: $nav-link-font-weight;
19
+ color: $nav-link-color;
20
+ text-decoration: if($link-decoration == none, null, none);
21
+ @include transition($nav-link-transition);
22
+
23
+ &:hover,
24
+ &:focus {
25
+ color: $nav-link-hover-color;
26
+ text-decoration: if($link-hover-decoration == underline, none, null);
27
+ }
28
+
29
+ // Disabled state lightens text
30
+ &.disabled {
31
+ color: $nav-link-disabled-color;
32
+ pointer-events: none;
33
+ cursor: default;
34
+ }
35
+ }
36
+
37
+ //
38
+ // Tabs
39
+ //
40
+
41
+ .nav-tabs {
42
+ border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
43
+
44
+ .nav-link {
45
+ margin-bottom: -$nav-tabs-border-width;
46
+ background: none;
47
+ border: $nav-tabs-border-width solid transparent;
48
+ @include border-top-radius($nav-tabs-border-radius);
49
+
50
+ &:hover,
51
+ &:focus {
52
+ border-color: $nav-tabs-link-hover-border-color;
53
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
54
+ isolation: isolate;
55
+ }
56
+
57
+ &.disabled {
58
+ color: $nav-link-disabled-color;
59
+ background-color: transparent;
60
+ border-color: transparent;
61
+ }
62
+ }
63
+
64
+ .nav-link.active,
65
+ .nav-item.show .nav-link {
66
+ color: $nav-tabs-link-active-color;
67
+ background-color: $nav-tabs-link-active-bg;
68
+ border-color: $nav-tabs-link-active-border-color;
69
+ }
70
+
71
+ .dropdown-menu {
72
+ // Make dropdown border overlap tab border
73
+ margin-top: -$nav-tabs-border-width;
74
+ // Remove the top rounded corners here since there is a hard edge above the menu
75
+ @include border-top-radius(0);
76
+ }
77
+ }
78
+
79
+
80
+ //
81
+ // Pills
82
+ //
83
+
84
+ .nav-pills {
85
+ .nav-link {
86
+ background: none;
87
+ border: 0;
88
+ @include border-radius($nav-pills-border-radius);
89
+ }
90
+
91
+ .nav-link.active,
92
+ .show > .nav-link {
93
+ color: $nav-pills-link-active-color;
94
+ @include gradient-bg($nav-pills-link-active-bg);
95
+ }
96
+ }
97
+
98
+
99
+ //
100
+ // Justified variants
101
+ //
102
+
103
+ .nav-fill {
104
+ > .nav-link,
105
+ .nav-item {
106
+ flex: 1 1 auto;
107
+ text-align: center;
108
+ }
109
+ }
110
+
111
+ .nav-justified {
112
+ > .nav-link,
113
+ .nav-item {
114
+ flex-basis: 0;
115
+ flex-grow: 1;
116
+ text-align: center;
117
+ }
118
+ }
119
+
120
+ .nav-fill,
121
+ .nav-justified {
122
+ .nav-item .nav-link {
123
+ width: 100%; // Make sure button will grow
124
+ }
125
+ }
126
+
127
+
128
+ // Tabbable tabs
129
+ //
130
+ // Hide tabbable panes to start, show them when `.active`
131
+
132
+ .tab-content {
133
+ > .tab-pane {
134
+ display: none;
135
+ }
136
+ > .active {
137
+ display: block;
138
+ }
139
+ }