jekyll-theme-conference 4.0.0 → 4.0.2

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -4
  3. data/_includes/get_program_config.html +5 -1
  4. data/_includes/get_start_times.html +12 -0
  5. data/_layouts/program.html +74 -30
  6. data/_sass/bootstrap/scss/_accordion.scss +153 -0
  7. data/_sass/bootstrap/scss/_alert.scss +68 -0
  8. data/_sass/bootstrap/scss/_badge.scss +38 -0
  9. data/_sass/bootstrap/scss/_breadcrumb.scss +40 -0
  10. data/_sass/bootstrap/scss/_button-group.scss +147 -0
  11. data/_sass/bootstrap/scss/_buttons.scss +216 -0
  12. data/_sass/bootstrap/scss/_card.scss +238 -0
  13. data/_sass/bootstrap/scss/_carousel.scss +226 -0
  14. data/_sass/bootstrap/scss/_close.scss +66 -0
  15. data/_sass/bootstrap/scss/_containers.scss +41 -0
  16. data/_sass/bootstrap/scss/_dropdown.scss +250 -0
  17. data/_sass/bootstrap/scss/_forms.scss +9 -0
  18. data/_sass/bootstrap/scss/_functions.scss +302 -0
  19. data/_sass/bootstrap/scss/_grid.scss +39 -0
  20. data/_sass/bootstrap/scss/_helpers.scss +12 -0
  21. data/_sass/bootstrap/scss/_images.scss +42 -0
  22. data/_sass/bootstrap/scss/_list-group.scss +199 -0
  23. data/_sass/bootstrap/scss/_maps.scss +174 -0
  24. data/_sass/bootstrap/scss/_mixins.scss +42 -0
  25. data/_sass/bootstrap/scss/_modal.scss +240 -0
  26. data/_sass/bootstrap/scss/_nav.scss +197 -0
  27. data/_sass/bootstrap/scss/_navbar.scss +289 -0
  28. data/_sass/bootstrap/scss/_offcanvas.scss +147 -0
  29. data/_sass/bootstrap/scss/_pagination.scss +109 -0
  30. data/_sass/bootstrap/scss/_placeholders.scss +51 -0
  31. data/_sass/bootstrap/scss/_popover.scss +196 -0
  32. data/_sass/bootstrap/scss/_progress.scss +68 -0
  33. data/_sass/bootstrap/scss/_reboot.scss +617 -0
  34. data/_sass/bootstrap/scss/_root.scss +187 -0
  35. data/_sass/bootstrap/scss/_spinners.scss +86 -0
  36. data/_sass/bootstrap/scss/_tables.scss +171 -0
  37. data/_sass/bootstrap/scss/_toasts.scss +73 -0
  38. data/_sass/bootstrap/scss/_tooltip.scss +119 -0
  39. data/_sass/bootstrap/scss/_transitions.scss +27 -0
  40. data/_sass/bootstrap/scss/_type.scss +106 -0
  41. data/_sass/bootstrap/scss/_utilities.scss +806 -0
  42. data/_sass/bootstrap/scss/_variables-dark.scss +102 -0
  43. data/_sass/bootstrap/scss/_variables.scss +1753 -0
  44. data/_sass/bootstrap/scss/bootstrap-grid.scss +62 -0
  45. data/_sass/bootstrap/scss/bootstrap-reboot.scss +10 -0
  46. data/_sass/bootstrap/scss/bootstrap-utilities.scss +19 -0
  47. data/_sass/bootstrap/scss/bootstrap.scss +52 -0
  48. data/_sass/bootstrap/scss/forms/_floating-labels.scss +97 -0
  49. data/_sass/bootstrap/scss/forms/_form-check.scss +189 -0
  50. data/_sass/bootstrap/scss/forms/_form-control.scss +214 -0
  51. data/_sass/bootstrap/scss/forms/_form-range.scss +91 -0
  52. data/_sass/bootstrap/scss/forms/_form-select.scss +80 -0
  53. data/_sass/bootstrap/scss/forms/_form-text.scss +11 -0
  54. data/_sass/bootstrap/scss/forms/_input-group.scss +132 -0
  55. data/_sass/bootstrap/scss/forms/_labels.scss +36 -0
  56. data/_sass/bootstrap/scss/forms/_validation.scss +12 -0
  57. data/_sass/bootstrap/scss/helpers/_clearfix.scss +3 -0
  58. data/_sass/bootstrap/scss/helpers/_color-bg.scss +7 -0
  59. data/_sass/bootstrap/scss/helpers/_colored-links.scss +30 -0
  60. data/_sass/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  61. data/_sass/bootstrap/scss/helpers/_icon-link.scss +25 -0
  62. data/_sass/bootstrap/scss/helpers/_position.scss +36 -0
  63. data/_sass/bootstrap/scss/helpers/_ratio.scss +26 -0
  64. data/_sass/bootstrap/scss/helpers/_stacks.scss +15 -0
  65. data/_sass/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  66. data/_sass/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  67. data/_sass/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  68. data/_sass/bootstrap/scss/helpers/_vr.scss +8 -0
  69. data/_sass/bootstrap/scss/mixins/_alert.scss +18 -0
  70. data/_sass/bootstrap/scss/mixins/_backdrop.scss +14 -0
  71. data/_sass/bootstrap/scss/mixins/_banner.scss +7 -0
  72. data/_sass/bootstrap/scss/mixins/_border-radius.scss +78 -0
  73. data/_sass/bootstrap/scss/mixins/_box-shadow.scss +24 -0
  74. data/_sass/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  75. data/_sass/bootstrap/scss/mixins/_buttons.scss +70 -0
  76. data/_sass/bootstrap/scss/mixins/_caret.scss +69 -0
  77. data/_sass/bootstrap/scss/mixins/_clearfix.scss +9 -0
  78. data/_sass/bootstrap/scss/mixins/_color-mode.scss +21 -0
  79. data/_sass/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  80. data/_sass/bootstrap/scss/mixins/_container.scss +11 -0
  81. data/_sass/bootstrap/scss/mixins/_deprecate.scss +10 -0
  82. data/_sass/bootstrap/scss/mixins/_forms.scss +163 -0
  83. data/_sass/bootstrap/scss/mixins/_gradients.scss +47 -0
  84. data/_sass/bootstrap/scss/mixins/_grid.scss +151 -0
  85. data/_sass/bootstrap/scss/mixins/_image.scss +16 -0
  86. data/_sass/bootstrap/scss/mixins/_list-group.scss +26 -0
  87. data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
  88. data/_sass/bootstrap/scss/mixins/_pagination.scss +10 -0
  89. data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
  90. data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
  91. data/_sass/bootstrap/scss/mixins/_table-variants.scss +24 -0
  92. data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  93. data/_sass/bootstrap/scss/mixins/_transition.scss +26 -0
  94. data/_sass/bootstrap/scss/mixins/_utilities.scss +97 -0
  95. data/_sass/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  96. data/_sass/bootstrap/scss/utilities/_api.scss +47 -0
  97. data/_sass/bootstrap/scss/vendor/_rfs.scss +348 -0
  98. data/_sass/bootstrap-icons/font/bootstrap-icons.css +2106 -0
  99. data/_sass/bootstrap-icons/font/bootstrap-icons.min.css +5 -0
  100. data/_sass/bootstrap-icons/font/bootstrap-icons.scss +2118 -0
  101. data/_sass/bootstrap.scss +45 -0
  102. data/_sass/conference.scss +19 -0
  103. data/_sass/leaflet/dist/leaflet.css +661 -0
  104. data/_sass/leaflet-easybutton/src/easy-button.css +56 -0
  105. data/_sass/leaflet.locatecontrol/dist/L.Control.Locate.css +61 -0
  106. data/_sass/theme.scss +217 -0
  107. data/assets/css/conference-only.bundle.css +1 -1
  108. data/assets/css/conference.bundle.css +1 -1
  109. data/assets/js/leaflet.bundle.js +3 -3
  110. metadata +104 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c96e48922c8ea2f0965338e8346f8067f7e03fc6617de038c20435aa35602b0
4
- data.tar.gz: ab8c87d65e78229960c8a32bf41fc0f13ac138862dc783978480f27e14c68c91
3
+ metadata.gz: fb6885a7dd29e4d0448899ed9ceb3697e4c662bf8d5d7526111b75cd74701686
4
+ data.tar.gz: 619841748b22d87bcc3f9e93d5ddc193fed314f8a52abd27853f1e1d7c4ce3a1
5
5
  SHA512:
6
- metadata.gz: d625a9484193c372c0d7709d864531b244e86e6e7782767574781869ae43d3dcd243d5adb8f82a32726d0714fdb1c116ae36df6c47ffe8a839c2d824fa8b7214
7
- data.tar.gz: 272153fd74d4b3d44f8c8fd2bef874881e908abbb2abcc0e718f5c4891d0bfc82cab143210249f6efe3c7a35564bfcf11727e8acc69a7d5edd179a899ab62061
6
+ metadata.gz: 87ed50dda511d8308a865682c62b91ab77050139543d39efdc4ff8958d698f9112be253d4a68c005e169215432baa1a8ef65075832ffa56a3408da5370aa5d3a
7
+ data.tar.gz: 492c12d703bcf061bee43117efcf04a197cc396349c77195c673191b670a4f5555975ef7352315d2c3f11f552d6b536c4f07a35c5b9c0d5178608f968786e98e
data/README.md CHANGED
@@ -127,15 +127,15 @@ To install:
127
127
  bundle
128
128
  ```
129
129
 
130
- 4. Add `remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@4.0.0"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
130
+ 4. Add `remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v4.0.1"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
131
131
 
132
132
  ```yaml
133
- remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@4.0.0"
133
+ remote_theme: "DigitaleGesellschaft/jekyll-theme-conference@v4.0.2"
134
134
  ```
135
135
 
136
136
  5. Continue with the [_Setup_](#setup) section below to customize the theme and add content for your conference.
137
137
 
138
- To update the theme, change the version tag in the `remote_theme` value (e.g., `@4.0.0` to `@v4.1.0`).
138
+ To update the theme, change the version tag in the `remote_theme` value (e.g., `@v4.0.0` to `@v4.1.0`).
139
139
 
140
140
 
141
141
  ## Setup
@@ -706,8 +706,10 @@ window.conference.awaitReady().then(async () => {
706
706
  Program settings are configured directly in the Front Matter of the program page (the page with `layout: program`). The program page's Front Matter supports the following properties:
707
707
 
708
708
  - `title`: The title shown on the program page (defaults to "Program")
709
- - `time_steps`: The time interval in minutes for each row in the schedule grid (default: `15`)
709
+ - `time_steps`: The time interval in minutes for each row in the schedule grid or `start` to show only the intervals that correspond to a talk start time (default: `15`)
710
710
  - `show_alltimes`: Show time labels for all intervals, not just full hours (default: `false`)
711
+ - `show_first_hour`: Always show hour in time label of first row (default: `false`)
712
+ - `hide_legend`: Hide track legends at the bottom of program table (default: `false`)
711
713
 
712
714
  ```yaml
713
715
  ---
@@ -12,7 +12,11 @@
12
12
  {%- if program_page -%}
13
13
  {%- assign program_url = program_page.url -%}
14
14
  {%- if program_page.time_steps -%}
15
- {%- assign program_time_steps = program_page.time_steps -%}
15
+ {%- if program_page.time_steps == "start" -%}
16
+ {%- assign program_time_steps = 1 -%}
17
+ {%- else -%}
18
+ {%- assign program_time_steps = program_page.time_steps -%}
19
+ {%- endif -%}
16
20
  {%- endif -%}
17
21
  {%- endif -%}
18
22
 
@@ -0,0 +1,12 @@
1
+ {%- assign selected_day = site.data.program.days | where: "date", d.date | first -%}
2
+ {%- assign start_times = "" | split: "," -%}
3
+
4
+ {%- if selected_day -%}
5
+ {%- for room in selected_day.rooms -%}
6
+ {%- for talk in room.talks -%}
7
+ {%- unless start_times contains talk.time_start -%}
8
+ {%- assign start_times = start_times | push: talk.time_start -%}
9
+ {%- endunless -%}
10
+ {%- endfor -%}
11
+ {%- endfor -%}
12
+ {%- endif -%}
@@ -64,32 +64,55 @@
64
64
  {%- assign day_end_hour = day_end_day | minus: day_start_day | times: 24 | plus: day_end_hour -%}
65
65
  {%- endif -%}
66
66
 
67
- {%- assign day_duration_min = day_end_hour | minus: day_start_hour | times: 60 | minus: day_start_min | plus: day_end_min -%}
68
- {%- assign nbr_steps = day_duration_min | divided_by: page.time_steps -%}
69
-
70
- {%- for i in (1..nbr_steps) -%}
71
- {%- assign current_day = 0 -%}
72
- {%- assign current_hour = i | minus: 1 | times: page.time_steps | plus: day_start_min | divided_by: 60 | floor | plus: day_start_hour -%}
73
- {%- if current_hour >= 24 -%}
74
- {%- assign current_day = current_hour | divided_by: 24 | floor -%}
75
- {%- assign current_hour = current_hour | modulo: 24 -%}
76
- {%- endif -%}
77
- {%- assign current_min = i | minus: 1 | times: page.time_steps | plus: day_start_min | modulo: 60 -%}
78
- {%- if current_min < 10 -%}
79
- {%- assign current_time = current_hour | append: ':0' | append: current_min -%}
67
+ {%- unless page.time_steps == "start" -%}
68
+ {%- assign time_steps = page.time_steps | default: 15 -%}
69
+
70
+ {%- assign day_duration_min = day_end_hour | minus: day_start_hour | times: 60 | minus: day_start_min | plus: day_end_min -%}
71
+ {%- assign nbr_steps = day_duration_min | divided_by: time_steps -%}
72
+ {%- else -%}
73
+ {%- assign time_steps = 1 -%}
74
+ {%- include get_start_times.html -%}
75
+ {%- assign nbr_steps = start_times.size %}
76
+ {%- endunless -%}
77
+
78
+ {%- for step_idx in (1..nbr_steps) -%}
79
+
80
+ {%- unless page.time_steps == "start" -%}
81
+ {%- assign current_hour = step_idx | minus: 1 | times: time_steps | plus: day_start_min | divided_by: 60 | floor | plus: day_start_hour | modulo: 24 -%}
82
+ {%- assign current_min = step_idx | minus: 1 | times: time_steps | plus: day_start_min | modulo: 60 -%}
80
83
  {%- else -%}
81
- {%- assign current_time = current_hour | append: ':' | append: current_min -%}
82
- {%- endif -%}
84
+ {% assign start_time_idx = step_idx | minus: 1 %}
85
+ {% assign current_time = start_times[start_time_idx] %}
86
+
87
+ {% assign current_hour = current_time | split: ":" | first | plus: 0 %}
88
+ {% assign current_min = current_time | split: ":" | last | plus: 0 %}
89
+ {%- endunless -%}
83
90
 
84
91
  <tr class="h-100">
85
92
 
86
- {%- if current_min == 0 -%}
93
+ {%- if current_min == 0 or page.time_steps == "start" -%}
87
94
  <th scope="row" class="program-time text-end">
88
- {{- current_time -}}
95
+ {%- if current_min < 10 -%}
96
+ {{- current_hour | append: ':0' | append: current_min -}}
97
+ {%- else -%}
98
+ {{- current_hour | append: ':' | append: current_min -}}
99
+ {%- endif -%}
89
100
  </th>
90
101
  {%- elsif page.show_alltimes -%}
91
102
  <th scope="row" class="program-time text-end text-muted fw-normal">
92
- :{{ current_min }}
103
+ {%- if page.show_first_hour and step_idx == 1 -%}
104
+ {%- if current_min < 10 -%}
105
+ {{- current_hour | append: ':0' | append: current_min -}}
106
+ {%- else -%}
107
+ {{- current_hour | append: ':' | append: current_min -}}
108
+ {%- endif -%}
109
+ {%- else -%}
110
+ {%- if current_min < 10 -%}
111
+ {{- ':0' | append: current_min -}}
112
+ {%- else -%}
113
+ {{- ':' | append: current_min -}}
114
+ {%- endif -%}
115
+ {%- endif -%}
93
116
  </th>
94
117
  {%- else -%}
95
118
  <th scope="row"></th>
@@ -105,24 +128,26 @@
105
128
 
106
129
  {%- include get_talk_time.html -%}
107
130
 
108
- {%- assign d_start_hour = current_day | minus: talk_start_day | times: 24 | plus: current_hour | minus: talk_start_hour -%}
131
+ {%- assign d_start_hour = current_hour | minus: talk_start_hour -%}
109
132
  {%- assign d_start_min = current_min | minus: talk_start_min -%}
110
- {%- assign d_end_hour = current_day | minus: talk_end_day | times: 24 | plus: current_hour | minus: talk_end_hour -%}
133
+ {%- assign d_end_hour = current_hour | minus: talk_end_hour -%}
111
134
  {%- assign d_end_min = current_min | minus: talk_end_min -%}
112
135
 
113
- {%- assign has_started = false -%}
114
- {%- if d_start_hour == 0 and d_start_min > 0 -%}
115
- {%- assign has_started = true -%}
136
+ {%- if talk_start_hour > talk_end_hour -%}
137
+ {%- if current_hour >= talk_start_hour -%}
138
+ {%- assign d_end_hour = current_hour | minus: 24 | minus: talk_end_hour -%}
139
+ {%- else -%}
140
+ {%- assign d_start_hour = current_hour | plus: 24 | minus: talk_start_hour -%}
141
+ {%- endif -%}
116
142
  {%- endif -%}
117
- {%- if d_start_hour > 0 -%}
143
+
144
+ {%- assign has_started = false -%}
145
+ {%- if d_start_hour > 0 or d_start_hour == 0 and d_start_min >= 0 -%}
118
146
  {%- assign has_started = true -%}
119
147
  {%- endif -%}
120
148
 
121
149
  {%- assign has_ended = false -%}
122
- {%- if d_end_hour == 0 and d_end_min >= 0 -%}
123
- {%- assign has_ended = true -%}
124
- {%- endif -%}
125
- {%- if d_end_hour > 0 -%}
150
+ {%- if d_end_hour > 0 or d_end_hour == 0 and d_end_min >= 0 -%}
126
151
  {%- assign has_ended = true -%}
127
152
  {%- endif -%}
128
153
 
@@ -132,7 +157,24 @@
132
157
 
133
158
  {%- if d_start_hour == 0 and d_start_min == 0 -%}
134
159
 
135
- {%- assign talk_nbr_steps = talk_duration_min | divided_by: page.time_steps -%}
160
+ {%- unless page.time_steps == "start" -%}
161
+ {%- assign talk_nbr_steps = talk_duration_min | divided_by: time_steps -%}
162
+ {%- else -%}
163
+ {%- assign talk_nbr_steps = 0 -%}
164
+ {%- for start_time in start_times -%}
165
+ {%- assign start_hour = start_time | split: ":" | first | plus: 0 -%}
166
+ {%- assign start_min = start_time | split: ":" | last | plus: 0 -%}
167
+ {%- assign d_start_hour = start_hour | minus: talk_start_hour -%}
168
+ {%- if talk_start_hour > talk_end_hour and start_hour < talk_start_hour -%}
169
+ {%- assign d_start_hour = d_start_hour | plus: 24 -%}
170
+ {%- endif -%}
171
+ {%- assign start_ts = d_start_hour | times: 60 | plus: start_min | minus: talk_start_min -%}
172
+ {%- if start_ts >= 0 and start_ts < talk_duration_min -%}
173
+ {%- assign talk_nbr_steps = talk_nbr_steps | plus: 1 -%}
174
+ {%- endif -%}
175
+ {%- endfor -%}
176
+ {%- endunless -%}
177
+
136
178
  {%- include get_track_properties.html -%}
137
179
  <td rowspan="{{ talk_nbr_steps }}" class="program-talk p-0 h-100">
138
180
  <div class="h-100 p-2 bg-{{ track_color }}-subtle text-{{ track_color }}-emphasis border-4 border-start border-{{ track_color }}-subtle shadow-sm overflow-hidden">
@@ -181,12 +223,14 @@
181
223
  {%- endif -%}
182
224
 
183
225
  {%- if site.conference.talks.tracks %}
184
- <h5 class="mt-4">{{ site.data.lang[site.conference.lang].program.legend | default: "Caption" }}</h5>
226
+ {%- unless page.hide_legend -%}
227
+ <h5 class="mt-4">{{ site.data.lang[site.conference.lang].program.legend | default: "Caption" }}</h5>
185
228
  {%- for track_prop in site.conference.talks.tracks %}
186
229
  <div class="d-block d-sm-inline-block m-1 p-1 ps-2 pe-2 bg-{{ track_prop.color | default: 'light' }}-subtle text-{{ track_prop.color | default: 'light' }}-emphasis border-start border-4 border-{{ track_prop.color | default: 'light' }}-subtle fw-normal">
187
230
  {{- track_prop.name -}}
188
231
  </div>
189
232
  {%- endfor -%}
233
+ {%- endunless -%}
190
234
  {%- endif -%}
191
235
 
192
236
  {% include footer.html %}
@@ -0,0 +1,153 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .accordion {
6
+ // scss-docs-start accordion-css-vars
7
+ --#{$prefix}accordion-color: #{$accordion-color};
8
+ --#{$prefix}accordion-bg: #{$accordion-bg};
9
+ --#{$prefix}accordion-transition: #{$accordion-transition};
10
+ --#{$prefix}accordion-border-color: #{$accordion-border-color};
11
+ --#{$prefix}accordion-border-width: #{$accordion-border-width};
12
+ --#{$prefix}accordion-border-radius: #{$accordion-border-radius};
13
+ --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
14
+ --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};
15
+ --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
16
+ --#{$prefix}accordion-btn-color: #{$accordion-button-color};
17
+ --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
18
+ --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};
19
+ --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};
20
+ --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
21
+ --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
22
+ --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
23
+ --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
24
+ --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
25
+ --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
26
+ --#{$prefix}accordion-active-color: #{$accordion-button-active-color};
27
+ --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};
28
+ // scss-docs-end accordion-css-vars
29
+ }
30
+
31
+ .accordion-button {
32
+ position: relative;
33
+ display: flex;
34
+ align-items: center;
35
+ width: 100%;
36
+ padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);
37
+ @include font-size($font-size-base);
38
+ color: var(--#{$prefix}accordion-btn-color);
39
+ text-align: left; // Reset button style
40
+ background-color: var(--#{$prefix}accordion-btn-bg);
41
+ border: 0;
42
+ @include border-radius(0);
43
+ overflow-anchor: none;
44
+ @include transition(var(--#{$prefix}accordion-transition));
45
+
46
+ &:not(.collapsed) {
47
+ color: var(--#{$prefix}accordion-active-color);
48
+ background-color: var(--#{$prefix}accordion-active-bg);
49
+ box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list
50
+
51
+ &::after {
52
+ background-image: var(--#{$prefix}accordion-btn-active-icon);
53
+ transform: var(--#{$prefix}accordion-btn-icon-transform);
54
+ }
55
+ }
56
+
57
+ // Accordion icon
58
+ &::after {
59
+ flex-shrink: 0;
60
+ width: var(--#{$prefix}accordion-btn-icon-width);
61
+ height: var(--#{$prefix}accordion-btn-icon-width);
62
+ margin-left: auto;
63
+ content: "";
64
+ background-image: var(--#{$prefix}accordion-btn-icon);
65
+ background-repeat: no-repeat;
66
+ background-size: var(--#{$prefix}accordion-btn-icon-width);
67
+ @include transition(var(--#{$prefix}accordion-btn-icon-transition));
68
+ }
69
+
70
+ &:hover {
71
+ z-index: 2;
72
+ }
73
+
74
+ &:focus {
75
+ z-index: 3;
76
+ outline: 0;
77
+ box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
78
+ }
79
+ }
80
+
81
+ .accordion-header {
82
+ margin-bottom: 0;
83
+ }
84
+
85
+ .accordion-item {
86
+ color: var(--#{$prefix}accordion-color);
87
+ background-color: var(--#{$prefix}accordion-bg);
88
+ border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);
89
+
90
+ &:first-of-type {
91
+ @include border-top-radius(var(--#{$prefix}accordion-border-radius));
92
+
93
+ > .accordion-header .accordion-button {
94
+ @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
95
+ }
96
+ }
97
+
98
+ &:not(:first-of-type) {
99
+ border-top: 0;
100
+ }
101
+
102
+ // Only set a border-radius on the last item if the accordion is collapsed
103
+ &:last-of-type {
104
+ @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
105
+
106
+ > .accordion-header .accordion-button {
107
+ &.collapsed {
108
+ @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
109
+ }
110
+ }
111
+
112
+ > .accordion-collapse {
113
+ @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
114
+ }
115
+ }
116
+ }
117
+
118
+ .accordion-body {
119
+ padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);
120
+ }
121
+
122
+
123
+ // Flush accordion items
124
+ //
125
+ // Remove borders and border-radius to keep accordion items edge-to-edge.
126
+
127
+ .accordion-flush {
128
+ > .accordion-item {
129
+ border-right: 0;
130
+ border-left: 0;
131
+ @include border-radius(0);
132
+
133
+ &:first-child { border-top: 0; }
134
+ &:last-child { border-bottom: 0; }
135
+
136
+ // stylelint-disable selector-max-class
137
+ > .accordion-collapse,
138
+ > .accordion-header .accordion-button,
139
+ > .accordion-header .accordion-button.collapsed {
140
+ @include border-radius(0);
141
+ }
142
+ // stylelint-enable selector-max-class
143
+ }
144
+ }
145
+
146
+ @if $enable-dark-mode {
147
+ @include color-mode(dark) {
148
+ .accordion-button::after {
149
+ --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};
150
+ --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};
151
+ }
152
+ }
153
+ }
@@ -0,0 +1,68 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .alert {
6
+ // scss-docs-start alert-css-vars
7
+ --#{$prefix}alert-bg: transparent;
8
+ --#{$prefix}alert-padding-x: #{$alert-padding-x};
9
+ --#{$prefix}alert-padding-y: #{$alert-padding-y};
10
+ --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};
11
+ --#{$prefix}alert-color: inherit;
12
+ --#{$prefix}alert-border-color: transparent;
13
+ --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);
14
+ --#{$prefix}alert-border-radius: #{$alert-border-radius};
15
+ --#{$prefix}alert-link-color: inherit;
16
+ // scss-docs-end alert-css-vars
17
+
18
+ position: relative;
19
+ padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);
20
+ margin-bottom: var(--#{$prefix}alert-margin-bottom);
21
+ color: var(--#{$prefix}alert-color);
22
+ background-color: var(--#{$prefix}alert-bg);
23
+ border: var(--#{$prefix}alert-border);
24
+ @include border-radius(var(--#{$prefix}alert-border-radius));
25
+ }
26
+
27
+ // Headings for larger alerts
28
+ .alert-heading {
29
+ // Specified to prevent conflicts of changing $headings-color
30
+ color: inherit;
31
+ }
32
+
33
+ // Provide class for links that match alerts
34
+ .alert-link {
35
+ font-weight: $alert-link-font-weight;
36
+ color: var(--#{$prefix}alert-link-color);
37
+ }
38
+
39
+
40
+ // Dismissible alerts
41
+ //
42
+ // Expand the right padding and account for the close button's positioning.
43
+
44
+ .alert-dismissible {
45
+ padding-right: $alert-dismissible-padding-r;
46
+
47
+ // Adjust close link position
48
+ .btn-close {
49
+ position: absolute;
50
+ top: 0;
51
+ right: 0;
52
+ z-index: $stretched-link-z-index + 1;
53
+ padding: $alert-padding-y * 1.25 $alert-padding-x;
54
+ }
55
+ }
56
+
57
+
58
+ // scss-docs-start alert-modifiers
59
+ // Generate contextual modifier classes for colorizing the alert
60
+ @each $state in map-keys($theme-colors) {
61
+ .alert-#{$state} {
62
+ --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis);
63
+ --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);
64
+ --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);
65
+ --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis);
66
+ }
67
+ }
68
+ // scss-docs-end alert-modifiers
@@ -0,0 +1,38 @@
1
+ // Base class
2
+ //
3
+ // Requires one of the contextual, color modifier classes for `color` and
4
+ // `background-color`.
5
+
6
+ .badge {
7
+ // scss-docs-start badge-css-vars
8
+ --#{$prefix}badge-padding-x: #{$badge-padding-x};
9
+ --#{$prefix}badge-padding-y: #{$badge-padding-y};
10
+ @include rfs($badge-font-size, --#{$prefix}badge-font-size);
11
+ --#{$prefix}badge-font-weight: #{$badge-font-weight};
12
+ --#{$prefix}badge-color: #{$badge-color};
13
+ --#{$prefix}badge-border-radius: #{$badge-border-radius};
14
+ // scss-docs-end badge-css-vars
15
+
16
+ display: inline-block;
17
+ padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);
18
+ @include font-size(var(--#{$prefix}badge-font-size));
19
+ font-weight: var(--#{$prefix}badge-font-weight);
20
+ line-height: 1;
21
+ color: var(--#{$prefix}badge-color);
22
+ text-align: center;
23
+ white-space: nowrap;
24
+ vertical-align: baseline;
25
+ @include border-radius(var(--#{$prefix}badge-border-radius));
26
+ @include gradient-bg();
27
+
28
+ // Empty badges collapse automatically
29
+ &:empty {
30
+ display: none;
31
+ }
32
+ }
33
+
34
+ // Quick fix for badges in buttons
35
+ .btn .badge {
36
+ position: relative;
37
+ top: -1px;
38
+ }
@@ -0,0 +1,40 @@
1
+ .breadcrumb {
2
+ // scss-docs-start breadcrumb-css-vars
3
+ --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};
4
+ --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};
5
+ --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};
6
+ @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);
7
+ --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};
8
+ --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};
9
+ --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};
10
+ --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};
11
+ --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};
12
+ // scss-docs-end breadcrumb-css-vars
13
+
14
+ display: flex;
15
+ flex-wrap: wrap;
16
+ padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);
17
+ margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);
18
+ @include font-size(var(--#{$prefix}breadcrumb-font-size));
19
+ list-style: none;
20
+ background-color: var(--#{$prefix}breadcrumb-bg);
21
+ @include border-radius(var(--#{$prefix}breadcrumb-border-radius));
22
+ }
23
+
24
+ .breadcrumb-item {
25
+ // The separator between breadcrumbs (by default, a forward-slash: "/")
26
+ + .breadcrumb-item {
27
+ padding-left: var(--#{$prefix}breadcrumb-item-padding-x);
28
+
29
+ &::before {
30
+ float: left; // Suppress inline spacings and underlining of the separator
31
+ padding-right: var(--#{$prefix}breadcrumb-item-padding-x);
32
+ color: var(--#{$prefix}breadcrumb-divider-color);
33
+ content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"};
34
+ }
35
+ }
36
+
37
+ &.active {
38
+ color: var(--#{$prefix}breadcrumb-item-active-color);
39
+ }
40
+ }
@@ -0,0 +1,147 @@
1
+ // Make the div behave like a button
2
+ .btn-group,
3
+ .btn-group-vertical {
4
+ position: relative;
5
+ display: inline-flex;
6
+ vertical-align: middle; // match .btn alignment given font-size hack above
7
+
8
+ > .btn {
9
+ position: relative;
10
+ flex: 1 1 auto;
11
+ }
12
+
13
+ // Bring the hover, focused, and "active" buttons to the front to overlay
14
+ // the borders properly
15
+ > .btn-check:checked + .btn,
16
+ > .btn-check:focus + .btn,
17
+ > .btn:hover,
18
+ > .btn:focus,
19
+ > .btn:active,
20
+ > .btn.active {
21
+ z-index: 1;
22
+ }
23
+ }
24
+
25
+ // Optional: Group multiple button groups together for a toolbar
26
+ .btn-toolbar {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ justify-content: flex-start;
30
+
31
+ .input-group {
32
+ width: auto;
33
+ }
34
+ }
35
+
36
+ .btn-group {
37
+ @include border-radius($btn-border-radius);
38
+
39
+ // Prevent double borders when buttons are next to each other
40
+ > :not(.btn-check:first-child) + .btn,
41
+ > .btn-group:not(:first-child) {
42
+ margin-left: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list
43
+ }
44
+
45
+ // Reset rounded corners
46
+ > .btn:not(:last-child):not(.dropdown-toggle),
47
+ > .btn.dropdown-toggle-split:first-child,
48
+ > .btn-group:not(:last-child) > .btn {
49
+ @include border-end-radius(0);
50
+ }
51
+
52
+ // The left radius should be 0 if the button is:
53
+ // - the "third or more" child
54
+ // - the second child and the previous element isn't `.btn-check` (making it the first child visually)
55
+ // - part of a btn-group which isn't the first child
56
+ > .btn:nth-child(n + 3),
57
+ > :not(.btn-check) + .btn,
58
+ > .btn-group:not(:first-child) > .btn {
59
+ @include border-start-radius(0);
60
+ }
61
+ }
62
+
63
+ // Sizing
64
+ //
65
+ // Remix the default button sizing classes into new ones for easier manipulation.
66
+
67
+ .btn-group-sm > .btn { @extend .btn-sm; }
68
+ .btn-group-lg > .btn { @extend .btn-lg; }
69
+
70
+
71
+ //
72
+ // Split button dropdowns
73
+ //
74
+
75
+ .dropdown-toggle-split {
76
+ padding-right: $btn-padding-x * .75;
77
+ padding-left: $btn-padding-x * .75;
78
+
79
+ &::after,
80
+ .dropup &::after,
81
+ .dropend &::after {
82
+ margin-left: 0;
83
+ }
84
+
85
+ .dropstart &::before {
86
+ margin-right: 0;
87
+ }
88
+ }
89
+
90
+ .btn-sm + .dropdown-toggle-split {
91
+ padding-right: $btn-padding-x-sm * .75;
92
+ padding-left: $btn-padding-x-sm * .75;
93
+ }
94
+
95
+ .btn-lg + .dropdown-toggle-split {
96
+ padding-right: $btn-padding-x-lg * .75;
97
+ padding-left: $btn-padding-x-lg * .75;
98
+ }
99
+
100
+
101
+ // The clickable button for toggling the menu
102
+ // Set the same inset shadow as the :active state
103
+ .btn-group.show .dropdown-toggle {
104
+ @include box-shadow($btn-active-box-shadow);
105
+
106
+ // Show no shadow for `.btn-link` since it has no other button styles.
107
+ &.btn-link {
108
+ @include box-shadow(none);
109
+ }
110
+ }
111
+
112
+
113
+ //
114
+ // Vertical button groups
115
+ //
116
+
117
+ .btn-group-vertical {
118
+ flex-direction: column;
119
+ align-items: flex-start;
120
+ justify-content: center;
121
+
122
+ > .btn,
123
+ > .btn-group {
124
+ width: 100%;
125
+ }
126
+
127
+ > .btn:not(:first-child),
128
+ > .btn-group:not(:first-child) {
129
+ margin-top: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list
130
+ }
131
+
132
+ // Reset rounded corners
133
+ > .btn:not(:last-child):not(.dropdown-toggle),
134
+ > .btn-group:not(:last-child) > .btn {
135
+ @include border-bottom-radius(0);
136
+ }
137
+
138
+ // The top radius should be 0 if the button is:
139
+ // - the "third or more" child
140
+ // - the second child and the previous element isn't `.btn-check` (making it the first child visually)
141
+ // - part of a btn-group which isn't the first child
142
+ > .btn:nth-child(n + 3),
143
+ > :not(.btn-check) + .btn,
144
+ > .btn-group:not(:first-child) > .btn {
145
+ @include border-top-radius(0);
146
+ }
147
+ }