comand-component-library 4.0.2 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. package/README.md +32 -32
  2. package/dist/comand-component-library.js +3264 -1450
  3. package/dist/comand-component-library.umd.cjs +3 -4
  4. package/dist/index.html +16 -16
  5. package/dist/style.css +1 -1
  6. package/dist/styles/demopage-only.css +4 -0
  7. package/dist/styles/templates/casual.css +3 -0
  8. package/package.json +4 -4
  9. package/src/App.vue +2117 -0
  10. package/src/ComponentLibrary.vue +150 -586
  11. package/src/assets/data/fake-select-options.json +3 -2
  12. package/src/assets/data/form-elements.json +1 -1
  13. package/src/assets/styles/global-styles.scss +17 -4
  14. package/src/componentSettingsDataAndControls.vue +705 -0
  15. package/src/components/CmdAddressData.vue +1 -2
  16. package/src/components/CmdBox.vue +60 -42
  17. package/src/components/CmdCopyrightInformation.vue +5 -3
  18. package/src/components/CmdFakeSelect.vue +138 -67
  19. package/src/components/CmdFancyBox.vue +2 -2
  20. package/src/components/CmdFormElement.vue +53 -27
  21. package/src/components/CmdGoogleMaps.vue +5 -0
  22. package/src/components/CmdHeadline.vue +13 -5
  23. package/src/components/CmdIcon.vue +6 -2
  24. package/src/components/CmdImage.vue +6 -1
  25. package/src/components/CmdImageGallery.vue +15 -4
  26. package/src/components/CmdInputGroup.vue +76 -24
  27. package/src/components/CmdListOfLinks.vue +20 -7
  28. package/src/components/CmdListOfRequirements.vue +10 -18
  29. package/src/components/CmdLoginForm.vue +14 -2
  30. package/src/components/CmdMainNavigation.vue +5 -1
  31. package/src/components/CmdMultistepFormProgressBar.vue +12 -7
  32. package/src/components/CmdOpeningHoursItem.vue +1 -3
  33. package/src/components/CmdPagination.vue +5 -1
  34. package/src/components/CmdSiteFooter.vue +11 -1
  35. package/src/components/CmdSiteHeader.vue +1 -0
  36. package/src/components/CmdSlideButton.vue +7 -1
  37. package/src/components/CmdSlideshow.vue +33 -5
  38. package/src/components/CmdSocialNetworks.vue +18 -13
  39. package/src/components/CmdSocialNetworksItem.vue +5 -1
  40. package/src/components/CmdSystemMessage.vue +7 -1
  41. package/src/components/CmdTabs.vue +5 -5
  42. package/src/components/CmdTextImageBlock.vue +11 -2
  43. package/src/components/CmdThumbnailScroller.vue +22 -4
  44. package/src/components/CmdTooltip.vue +49 -14
  45. package/src/components/CmdTooltipForFormElements.vue +96 -0
  46. package/src/components/CmdUploadForm.vue +25 -20
  47. package/src/components/CmdWidthLimitationWrapper.vue +1 -1
  48. package/src/components/ComponentSettings.vue +1 -1
  49. package/src/main.js +1 -1
  50. package/src/assets/data/accordion.json +0 -45
@@ -28,7 +28,11 @@ export default {
28
28
  */
29
29
  type: {
30
30
  type: String,
31
- default: "auto"
31
+ default: "auto",
32
+ validator(value) {
33
+ return value === "auto" ||
34
+ value === "iconify"
35
+ }
32
36
  },
33
37
  /**
34
38
  * icon-class for icon from local iconfont
@@ -65,7 +69,7 @@ export default {
65
69
 
66
70
  <style>
67
71
  .iconify {
68
- font-size: var(--icon-size);
72
+ font-size: var(--default-icon-size);
69
73
  vertical-align: text-bottom;
70
74
 
71
75
  & + span, span + & {
@@ -376,6 +376,11 @@ export default {
376
376
  display: block;
377
377
  }
378
378
 
379
+ figcaption {
380
+ border-bottom-left-radius: var(--default-border-radius);
381
+ border-bottom-right-radius: var(--default-border-radius);
382
+ }
383
+
379
384
  &.text-center {
380
385
  figcaption {
381
386
  text-align: center;
@@ -401,7 +406,7 @@ export default {
401
406
  transform: translateX(-50%) translateY(-50%);
402
407
  font-size: 10rem;
403
408
  color: var(--pure-white);
404
- text-shadow: var(--text-shadow);
409
+ text-shadow: var(--default-text-shadow);
405
410
  z-index: 10;
406
411
  }
407
412
 
@@ -15,13 +15,13 @@
15
15
  href="#"
16
16
  @click.prevent="showFancyBox(index)"
17
17
  :title="getMessage('cmdimagegallery.tooltip.open_large_image')">
18
- <CmdImage :image="image.image" :figcaption="image.figcaption"/>
18
+ <CmdImage :image="image.image" :figcaption="figcaption(image)"/>
19
19
  </a>
20
20
  <!-- end images linked to fancybox -->
21
21
 
22
22
  <!-- begin images not linked to fancybox -->
23
23
  <div v-else v-for="(image, index) in images" :key="`i${index}`" class="image-wrapper">
24
- <CmdImage :image="image.image" :figcaption="image.figcaption"/>
24
+ <CmdImage :image="image.image" :figcaption="figcaption(image)"/>
25
25
  </div>
26
26
  <!-- end images not linked to fancybox -->
27
27
  </template>
@@ -89,7 +89,11 @@ export default {
89
89
  */
90
90
  figcaptionPosition: {
91
91
  type: String,
92
- default: "bottom"
92
+ required: false,
93
+ validator(value) {
94
+ return value === "top" ||
95
+ value === "bottom"
96
+ }
93
97
  }
94
98
  },
95
99
  methods: {
@@ -107,6 +111,13 @@ export default {
107
111
  }
108
112
  }
109
113
  },
114
+ figcaption(image) {
115
+ const figcaption = {...image.figcaption}
116
+ if(this.figcaptionPosition) {
117
+ figcaption.position = this.figcaptionPosition
118
+ }
119
+ return figcaption
120
+ },
110
121
  onAddItem() {
111
122
  this.editModeContext.content.addContent(
112
123
  buildComponentPath(this, 'props', 'images', -1),
@@ -162,7 +173,7 @@ export default {
162
173
 
163
174
  img {
164
175
  border: var(--default-border);
165
- border-radius: var(--border-radius);
176
+ border-radius: var(--default-border-radius);
166
177
  max-height: 30rem;
167
178
  }
168
179
 
@@ -2,19 +2,22 @@
2
2
  <div :class="[
3
3
  'cmd-input-group label',
4
4
  validationStatus,
5
- {inline: labelInline,
6
- 'multiple-switch': multipleSwitch,
7
- disabled: disabled,
8
- 'toggle-switch': toggleSwitch,
9
- 'has-state': validationStatus
5
+ {
6
+ inline: labelInline,
7
+ 'multiple-switch': multipleSwitch,
8
+ disabled: disabled,
9
+ 'toggle-switch': toggleSwitch,
10
+ 'has-state': validationStatus
10
11
  }
11
12
  ]"
12
13
  :aria-labelledby="htmlId">
14
+
15
+ <!-- begin label -->
13
16
  <span v-show="showLabel" class="label-text">
14
- <span :id="htmlId">{{ labelText }}<sup v-if="required">*</sup></span>
17
+ <span :id="htmlId">{{ labelText }}<sup v-if="required">*</sup></span>
15
18
 
16
- <!-- begin CmdTooltipForInputElements -->
17
- <CmdTooltipForInputElements
19
+ <!-- begin CmdTooltipForFormElements -->
20
+ <CmdTooltipForFormElements
18
21
  v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
19
22
  ref="tooltip"
20
23
  :showRequirements="showRequirements"
@@ -27,9 +30,10 @@
27
30
  :relatedId="tooltipId"
28
31
  :role="validationStatus === 'error' ? 'alert' : 'dialog'"
29
32
  />
30
- <!-- end CmdTooltipForInputElements -->
33
+ <!-- end CmdTooltipForFormElements -->
31
34
 
32
- <a v-if="required || inputRequirements.length"
35
+ <!-- begin status-icon -->
36
+ <a v-if="(required || inputRequirements.length > 0) && showStatusIcon"
33
37
  href="#"
34
38
  @click.prevent
35
39
  :title="validationTooltip"
@@ -40,7 +44,11 @@
40
44
  <CmdIcon :iconClass="getStatusIconClass"/>
41
45
  <!-- end CmdIcon -->
42
46
  </a>
47
+ <!-- end status-icon -->
43
48
  </span>
49
+ <!-- end label -->
50
+
51
+ <!-- begin view without slot -->
44
52
  <span v-if="!useSlot" :class="['flex-container', {'no-flex': !stretchHorizontally, 'no-gap': multipleSwitch}]">
45
53
  <label v-for="(inputElement, index) in inputElements" :key="index" :for="inputElement.id">
46
54
  <input
@@ -53,12 +61,16 @@
53
61
  :class="{'replace-input-type': replaceInputType, 'toggle-switch': toggleSwitch}"
54
62
  />
55
63
  <!-- begin CmdIcon -->
56
- <CmdIcon v-if="multipleSwitch && inputElement.iconClass" :iconClass="inputElement.iconClass"
57
- :type="inputElement.iconType"/>
64
+ <CmdIcon
65
+ v-if="multipleSwitch && inputElement.iconClass"
66
+ :iconClass="inputElement.iconClass"
67
+ :type="inputElement.iconType"
68
+ />
58
69
  <!-- end CmdIcon -->
59
- <span v-if="inputElement.labelText">{{ inputElement.labelText }}</span>
70
+ <span v-if="inputElement.labelText" class="label-text">{{ inputElement.labelText }}</span>
60
71
  </label>
61
72
  </span>
73
+ <!-- end view without slot -->
62
74
 
63
75
  <!-- begin useSlot -->
64
76
  <div v-else class="flex-container no-flex">
@@ -82,11 +94,6 @@ export default {
82
94
  Identifier,
83
95
  Tooltip
84
96
  ],
85
- data() {
86
- return {
87
- value: ""
88
- }
89
- },
90
97
  props: {
91
98
  /**
92
99
  * set value for v-model (must be named modelValue in vue3 if default v-model should be used)
@@ -102,6 +109,13 @@ export default {
102
109
  type: Boolean,
103
110
  default: false
104
111
  },
112
+ /**
113
+ * activate if interactive status-icon (to show requirements) should be shown inline with label
114
+ */
115
+ showStatusIcon: {
116
+ type: Boolean,
117
+ default: true
118
+ },
105
119
  /**
106
120
  * list of input-elements inside group
107
121
  *
@@ -118,18 +132,29 @@ export default {
118
132
  */
119
133
  inputTypes: {
120
134
  type: String,
121
- default: "radio"
135
+ default: "radio",
136
+ validator(value) {
137
+ return value === "checkbox" ||
138
+ value === "radio"
139
+ }
122
140
  },
123
141
  /**
124
142
  * set status for label and inner form-elements
125
143
  *
126
- * @allowedValues: error, warning, success, info
144
+ * @allowedValues: "", error, warning, success, info
127
145
  *
128
146
  * @affectsStyling: true
129
147
  */
130
148
  status: {
131
149
  type: String,
132
- required: false
150
+ required: false,
151
+ validator(value) {
152
+ return value === "" ||
153
+ value === "error" ||
154
+ value === "warning" ||
155
+ value === "success" ||
156
+ value === "info"
157
+ }
133
158
  },
134
159
  /**
135
160
  * for replacing native checkboxes/radio-buttons by custom ones (based on frontend-framework)
@@ -267,6 +292,7 @@ export default {
267
292
  </script>
268
293
 
269
294
  <style>
295
+ /* begin cmd-input-group ------------------------------------------------------------------------------------------ */
270
296
  .cmd-input-group {
271
297
  &.inline {
272
298
  display: flex;
@@ -279,24 +305,50 @@ export default {
279
305
  }
280
306
 
281
307
  /* overwrite default behavior from frontend-framework */
282
- .label-text {
308
+ > .label-text {
283
309
  display: inline-flex;
310
+ margin-bottom: calc(var(--default-margin) / 2);
284
311
 
285
- > span + a [class*="icon-"] {
312
+ > span + a:has([class*="icon-"]) {
286
313
  margin-left: calc(var(--default-margin) / 2);
287
314
  }
315
+
316
+ &:hover, &:active, &:focus {
317
+ span {
318
+ color: var(--hyperlink-color-highlighted)
319
+ }
320
+
321
+ & + .flex-container {
322
+ label:not(:has(input:checked)) .label-text {
323
+ color: var(--default-text-color);
324
+ }
325
+
326
+ input {
327
+ border-color: var(--default-border-color);
328
+ }
329
+ }
330
+ }
288
331
  }
289
332
 
290
333
  &.has-state {
291
- label {
334
+ &.error {
335
+ --status-color: var(--error-color);
336
+ }
337
+
338
+ label, [class*="icon-"] {
292
339
  color: var(--status-color);
293
340
  }
294
341
 
295
342
  &.multiple-switch {
296
343
  label {
297
344
  border-color: var(--status-color);
345
+
346
+ > * {
347
+ color: var(--status-color);
348
+ }
298
349
  }
299
350
  }
300
351
  }
301
352
  }
353
+ /* end cmd-input-group ------------------------------------------------------------------------------------------ */
302
354
  </style>
@@ -8,7 +8,7 @@
8
8
  <!-- end cmd-headline -->
9
9
 
10
10
  <!-- begin list of links -->
11
- <ul :class="['flex-container', {'no-gap': !useGap},'align-' + align, setStretchClass]">
11
+ <ul :class="['flex-container', {'no-gap': !useGap}, 'align-' + align, setStretchClass]">
12
12
  <CmdListOfLinksItem
13
13
  v-if="!editModeContext"
14
14
  v-for="(link, index) in links"
@@ -106,7 +106,12 @@ export default {
106
106
  */
107
107
  align: {
108
108
  type: String,
109
- default: "left"
109
+ default: "left",
110
+ validator(value) {
111
+ return value === "left" ||
112
+ value === "center" ||
113
+ value === "right"
114
+ }
110
115
  },
111
116
  /**
112
117
  * properties for CmdHeadline-component
@@ -129,7 +134,11 @@ export default {
129
134
  */
130
135
  orientation: {
131
136
  type: String,
132
- default: "vertical"
137
+ default: "vertical",
138
+ validator(value) {
139
+ return value === "horizontal" ||
140
+ value === "vertical"
141
+ }
133
142
  }
134
143
  },
135
144
  computed: {
@@ -183,6 +192,14 @@ export default {
183
192
  list-style: none;
184
193
  margin-left: 0;
185
194
  }
195
+
196
+ &.align-center {
197
+ justify-content: center;
198
+ }
199
+
200
+ &.align-right li {
201
+ text-align: right;
202
+ }
186
203
  }
187
204
 
188
205
  &.horizontal {
@@ -195,10 +212,6 @@ export default {
195
212
  display: flex;
196
213
  }
197
214
 
198
- &.align-center {
199
- justify-content: center;
200
- }
201
-
202
215
  &.align-right {
203
216
  justify-content: flex-end;
204
217
  }
@@ -2,7 +2,7 @@
2
2
  <div class="cmd-list-of-requirements">
3
3
  <!-- begin CmdHeadline -->
4
4
  <CmdHeadline v-if="showHeadline" :headline-level="cmdHeadline.headlineLevel">
5
- {{ headlineRequirements }}<template v-if="labelText"><br/><em>{{ labelText }}</em></template>
5
+ {{ headlineRequirements }}<template v-if="labelText"><br/><em>{{ labelText }}</em></template>
6
6
  </CmdHeadline>
7
7
  <!-- end CmdHeadline -->
8
8
 
@@ -154,27 +154,23 @@ export default {
154
154
  /* begin cmd-list-of-requirements ------------------------------------------------------------------------------------------ */
155
155
  .cmd-list-of-requirements {
156
156
  dl {
157
- .error {
158
- --status-color: var(--error-color);
157
+ span[class*="icon-"] {
158
+ color: var(--status-color);
159
+ }
159
160
 
160
- [class*="icon-"] {
161
- color: var(--status-color);
162
- }
161
+ .error, .error span {
162
+ --status-color: var(--error-color);
163
163
  }
164
164
 
165
- .warning {
165
+ .warning, .warning span {
166
166
  --status-color: var(--warning-color);
167
167
  }
168
168
 
169
- .success {
170
- --status-color: var(--success-color) !important;
171
-
172
- [class*="icon-"] {
173
- color: var(--status-color);
174
- }
169
+ .success, .success span {
170
+ --status-color: var(--success-color);
175
171
  }
176
172
 
177
- .info {
173
+ .info, .info span {
178
174
  --status-color: var(--info-color);
179
175
  }
180
176
 
@@ -182,10 +178,6 @@ export default {
182
178
  color: var(--status-color);
183
179
  }
184
180
 
185
- [class*="icon-"] {
186
- color: var(--status-color);
187
- }
188
-
189
181
  & ~ a {
190
182
  display: flex;
191
183
  align-items: center;
@@ -15,6 +15,7 @@
15
15
  <CmdFormElement
16
16
  element="input"
17
17
  type="text"
18
+ ref="username"
18
19
  :name="cmdFormElementUsername.name"
19
20
  :id="cmdFormElementUsername.id"
20
21
  v-model="username"
@@ -46,7 +47,7 @@
46
47
  <div class="option-wrapper flex-container">
47
48
  <template v-if="options.forgotPassword || options.createAccount">
48
49
  <!-- begin link for 'forgot password' -->
49
- <a v-if="options.forgotPassword" href="#" @click.prevent="sendLogin = true">
50
+ <a v-if="options.forgotPassword" href="#" @click.prevent="toggleSendLoginView">
50
51
  <!-- begin CmdIcon -->
51
52
  <CmdIcon v-if="options.forgotPassword.icon?.show && options.forgotPassword.icon?.iconClass"
52
53
  :iconClass="options.forgotPassword.icon.iconClass"
@@ -134,7 +135,7 @@
134
135
  <!-- end CmdFormElement -->
135
136
 
136
137
  <div class="option-wrapper flex-container">
137
- <a href="#" @click.prevent="sendLogin = false">
138
+ <a href="#" @click.prevent="toggleSendLoginView">
138
139
  <!-- begin CmdIcon -->
139
140
  <CmdIcon
140
141
  v-if="options.backToLoginForm && options.backToLoginForm.icon && options.backToLoginForm.icon.show && options.backToLoginForm.icon.iconClass"
@@ -392,6 +393,17 @@ export default {
392
393
  }
393
394
  },
394
395
  methods: {
396
+ toggleSendLoginView() {
397
+ this.sendLogin = !this.sendLogin
398
+
399
+ this.$nextTick(() => {
400
+ if(this.sendLogin) {
401
+ this.$refs.sendPassword.setFocus()
402
+ } else {
403
+ this.$refs.username.setFocus()
404
+ }
405
+ })
406
+ },
395
407
  modelChange() {
396
408
  this.$emit("update:modelValue", { "username": this.username, "password": this.password })
397
409
  },
@@ -219,7 +219,11 @@ export default {
219
219
  */
220
220
  offcanvasPosition: {
221
221
  type: String,
222
- default: "right"
222
+ default: "right",
223
+ validator(value) {
224
+ return value === "right" ||
225
+ value === "left"
226
+ }
223
227
  },
224
228
  /**
225
229
  * button to open off-canvas-navigation
@@ -119,7 +119,8 @@ export default {
119
119
  gap: var(--default-gap);
120
120
 
121
121
  li {
122
- border: var(--default-border) !important;
122
+ border: var(--default-border);
123
+ border-color: var(--primary-color-reduced-opacity);
123
124
  border-radius: var(--default-border-radius);;
124
125
 
125
126
  a, a.active {
@@ -138,6 +139,14 @@ export default {
138
139
  color: var(--default-text-color) !important;
139
140
  }
140
141
  }
142
+
143
+ &.active {
144
+ border-color: var(--primary-color);
145
+
146
+ & ~li {
147
+ border-color: var(--border-color);
148
+ }
149
+ }
141
150
  }
142
151
  }
143
152
 
@@ -174,7 +183,7 @@ export default {
174
183
  border: var(--default-border);
175
184
  border-radius: var(--full-circle);
176
185
  background: var(--pure-white);
177
- color: var(--text-color);
186
+ color: var(--default-text-color);
178
187
  margin: 0;
179
188
  position: absolute;
180
189
  right: 0;
@@ -219,10 +228,6 @@ export default {
219
228
  }
220
229
  }
221
230
 
222
- &:not(:first-child) {
223
- border-left: .2rem solid var(--border-color);
224
- }
225
-
226
231
  &:last-child {
227
232
  a {
228
233
  [class*="icon-"] {
@@ -247,7 +252,7 @@ export default {
247
252
 
248
253
  & + [class*="icon-"] {
249
254
  &:last-child {
250
- color: var(--text-color);
255
+ color: var(--default-text-color);
251
256
  }
252
257
  }
253
258
  }
@@ -197,13 +197,11 @@ export default {
197
197
  toggleClosedStatus(period) {
198
198
  period === 'am' ? this.editableDay.amClosed = !this.editableDay.amClosed : this.editableDay.pmClosed = !this.editableDay.pmClosed
199
199
  },
200
- getTime(time, suffix) {
200
+ getTime(time) {
201
201
  if (this.timeFormatter) {
202
202
  return this.timeFormatter(time.hours, time.mins)
203
203
  }
204
204
 
205
- console.log("suffix", suffix)
206
-
207
205
  return timeFormatting(":", " " + this.abbreviationTextAm, " " + this.abbreviationTextPm, false)(time.hours, time.mins)
208
206
  },
209
207
  updateHandlerProvider() {
@@ -90,7 +90,11 @@ export default {
90
90
  */
91
91
  linkType: {
92
92
  type: String,
93
- default: "href"
93
+ default: "href",
94
+ validator(value) {
95
+ return value === "href" ||
96
+ value === "button"
97
+ }
94
98
  },
95
99
  /**
96
100
  * link to switch to previous page
@@ -17,7 +17,11 @@ export default {
17
17
  */
18
18
  orientation: {
19
19
  type: String,
20
- default: 'horizontal'
20
+ default: "horizontal",
21
+ validator(value) {
22
+ return value === "horizontal" ||
23
+ value === "vertical"
24
+ }
21
25
  }
22
26
  }
23
27
  }
@@ -29,6 +33,8 @@ export default {
29
33
  padding: var(--grid-gap) 0;
30
34
  border-top: var(--default-border);
31
35
  background: var(--default-background-color);
36
+ margin-top: auto;
37
+ flex: none;
32
38
 
33
39
  footer {
34
40
  max-width: var(--max-width);
@@ -46,6 +52,10 @@ export default {
46
52
  width: 100%;
47
53
  flex: none;
48
54
  }
55
+
56
+ + .cmd-copyright-information {
57
+ margin-top: 0;
58
+ }
49
59
  }
50
60
  </style>
51
61
 
@@ -123,6 +123,7 @@ export default {
123
123
  grid-area: site-header;
124
124
  display: flex;
125
125
  flex-direction: column;
126
+ flex: none;
126
127
  border-bottom: var(--default-border);
127
128
  background: var(--color-scheme-background-color);
128
129
 
@@ -21,7 +21,13 @@ export default {
21
21
  */
22
22
  slideButtonType: {
23
23
  type: String,
24
- default: "next"
24
+ default: "next",
25
+ validator(value) {
26
+ return value === "next" ||
27
+ value === "prev" ||
28
+ value === "up" ||
29
+ value === "down"
30
+ }
25
31
  },
26
32
  /**
27
33
  * default slide-buttons
@@ -180,12 +180,15 @@ export default {
180
180
  }
181
181
  },
182
182
  beforeUnmount() {
183
- if (this.hnd !== null) {
184
- window.clearInterval(this.hnd);
185
- this.hnd = null;
186
- }
183
+ this.stopAutoplay()
187
184
  },
188
185
  methods: {
186
+ stopAutoplay() {
187
+ if (this.hnd !== null) {
188
+ window.clearInterval(this.hnd);
189
+ this.hnd = null;
190
+ }
191
+ },
189
192
  itemProvider() {
190
193
  return {
191
194
  "image": {
@@ -302,6 +305,19 @@ export default {
302
305
  immediate: true,
303
306
  deep: true
304
307
  },
308
+ autoplay() {
309
+ if(this.autoplay) {
310
+ this.setupSlider()
311
+ } else {
312
+ this.stopAutoplay()
313
+ }
314
+ },
315
+ autoplayInterval() {
316
+ if(this.autoplay) {
317
+ this.stopAutoplay()
318
+ this.setupSlider()
319
+ }
320
+ },
305
321
  currentItem() {
306
322
  // wait to nextTick to ensure ref is available
307
323
  this.$nextTick(() => {
@@ -334,6 +350,18 @@ export default {
334
350
  background: var(--primary-color);
335
351
  }
336
352
 
353
+ &:has(figcaption) {
354
+ img {
355
+ border-bottom-left-radius: 0;
356
+ border-bottom-right-radius: 0;
357
+ }
358
+
359
+ figcaption {
360
+ border-bottom-left-radius: var(--default-border-radius);
361
+ border-bottom-right-radius: var(--default-border-radius);
362
+ }
363
+ }
364
+
337
365
  .inner-slideshow-wrapper {
338
366
  display: flex;
339
367
  justify-content: center;
@@ -441,7 +469,7 @@ export default {
441
469
  top: .5rem;
442
470
  right: 5.5rem;
443
471
  padding: 0 0.2rem;
444
- border-radius: var(--border-radius);
472
+ border-radius: var(--default-border-radius);
445
473
  background: var(--pure-white-reduced-opacity);
446
474
  }
447
475
  }