comand-component-library 3.3.86 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. package/dist/comand-component-library.js +856 -835
  2. package/dist/comand-component-library.umd.cjs +4 -4
  3. package/dist/media/images/slideshow-images/large/slide1.jpg +0 -0
  4. package/dist/media/images/slideshow-images/large/slide2.jpg +0 -0
  5. package/dist/media/images/slideshow-images/large/slide3.jpg +0 -0
  6. package/dist/media/images/slideshow-images/large/slide4.jpg +0 -0
  7. package/dist/media/images/slideshow-images/medium/slide1.jpg +0 -0
  8. package/dist/media/images/slideshow-images/medium/slide2.jpg +0 -0
  9. package/dist/media/images/slideshow-images/medium/slide3.jpg +0 -0
  10. package/dist/media/images/slideshow-images/medium/slide4.jpg +0 -0
  11. package/dist/media/images/slideshow-images/small/slide1.jpg +0 -0
  12. package/dist/media/images/slideshow-images/small/slide2.jpg +0 -0
  13. package/dist/media/images/slideshow-images/small/slide3.jpg +0 -0
  14. package/dist/media/images/slideshow-images/small/slide4.jpg +0 -0
  15. package/dist/style.css +1 -1
  16. package/package.json +2 -2
  17. package/src/App.vue +680 -632
  18. package/src/assets/data/address-data.json +3 -3
  19. package/src/components/CmdAddressData.vue +90 -96
  20. package/src/components/CmdAddressDataItem.vue +60 -52
  21. package/src/components/CmdBankAccountData.vue +1 -1
  22. package/src/components/CmdBox.vue +10 -10
  23. package/src/components/CmdBoxWrapper.vue +8 -4
  24. package/src/components/CmdBreadcrumbs.vue +1 -1
  25. package/src/components/CmdCompanyLogo.vue +14 -11
  26. package/src/components/CmdContainer.vue +24 -0
  27. package/src/components/CmdCookieDisclaimer.vue +1 -1
  28. package/src/components/CmdCopyrightInformation.vue +1 -1
  29. package/src/components/CmdFancyBox.vue +9 -6
  30. package/src/components/CmdForm.vue +7 -1
  31. package/src/components/CmdFormElement.vue +21 -75
  32. package/src/components/CmdFormFilters.vue +2 -1
  33. package/src/components/CmdGoogleMaps.vue +1 -1
  34. package/src/components/CmdHeadline.vue +20 -25
  35. package/src/components/CmdIcon.vue +1 -1
  36. package/src/components/CmdImage.vue +1 -1
  37. package/src/components/CmdImageGallery.vue +1 -1
  38. package/src/components/CmdImageZoom.vue +1 -1
  39. package/src/components/CmdInputGroup.vue +2 -2
  40. package/src/components/CmdListOfLinks.vue +1 -1
  41. package/src/components/CmdListOfLinksItem.vue +0 -4
  42. package/src/components/CmdListOfRequirements.vue +10 -2
  43. package/src/components/CmdLoginForm.vue +1 -1
  44. package/src/components/CmdMainNavigation.vue +18 -17
  45. package/src/components/CmdMultistepFormProgressBar.vue +7 -3
  46. package/src/components/CmdNewsletterSubscription.vue +1 -8
  47. package/src/components/CmdOpeningHours.vue +1 -1
  48. package/src/components/CmdOpeningHoursItem.vue +1 -1
  49. package/src/components/CmdPagination.vue +21 -15
  50. package/src/components/CmdProgressBar.vue +1 -1
  51. package/src/components/CmdSidebar.vue +7 -1
  52. package/src/components/CmdSiteFooter.vue +14 -14
  53. package/src/components/CmdSiteHeader.vue +12 -29
  54. package/src/components/CmdSlideButton.vue +9 -7
  55. package/src/components/CmdSlideshow.vue +14 -12
  56. package/src/components/CmdSocialNetworks.vue +11 -4
  57. package/src/components/CmdSocialNetworksItem.vue +2 -7
  58. package/src/components/CmdSwitchLanguage.vue +1 -1
  59. package/src/components/CmdSystemMessage.vue +10 -6
  60. package/src/components/CmdTable.vue +72 -17
  61. package/src/components/CmdTabs.vue +2 -2
  62. package/src/components/CmdTextImageBlock.vue +1 -1
  63. package/src/components/CmdThumbnailScroller.vue +157 -152
  64. package/src/components/CmdToggleDarkMode.vue +1 -1
  65. package/src/components/CmdTooltip.vue +1 -1
  66. package/src/components/CmdUploadForm.vue +2 -2
  67. package/src/components/CmdWidthLimitationWrapper.vue +7 -3
  68. package/src/index.js +1 -0
  69. package/src/mixins/FieldValidation.js +0 -17
@@ -434,7 +434,7 @@ export default {
434
434
  }
435
435
  </script>
436
436
 
437
- <style lang="scss">
437
+ <style>
438
438
  /* begin cmd-opening-hours ------------------------------------------------------------------------------------------ */
439
439
  .cmd-opening-hours {
440
440
  > a, > span {
@@ -246,7 +246,7 @@ export default {
246
246
  }
247
247
  </script>
248
248
 
249
- <style lang="scss">
249
+ <style>
250
250
  .edit-mode-opening-hours-item {
251
251
  .am-wrapper, .pm-wrapper {
252
252
  align-items: center;
@@ -23,7 +23,7 @@
23
23
  v-for="(page, index) in pages"
24
24
  :key="index"
25
25
  @click.stop.prevent="showPage(page)" aria-live="polite">
26
- <span :class="{hidden: !showPageNumbers}">{{ index + 1 }}</span>
26
+ <span :class="{hidden: !showPageNumbers}">{{ index + 1 }}</span>
27
27
  </a>
28
28
  </div>
29
29
  </div>
@@ -48,11 +48,12 @@
48
48
  // import mixins
49
49
  import I18n from "../mixins/I18n"
50
50
  import DefaultMessageProperties from "../mixins/CmdPager/DefaultMessageProperties"
51
+
51
52
  export default {
52
53
  name: "CmdPager",
53
54
  mixins: [
54
- I18n,
55
- DefaultMessageProperties
55
+ I18n,
56
+ DefaultMessageProperties
56
57
  ],
57
58
  emits: ['click'],
58
59
  data() {
@@ -165,10 +166,8 @@ export default {
165
166
  }
166
167
  </script>
167
168
 
168
- <style lang="scss">
169
+ <style>
169
170
  /* begin cmd-pagination ---------------------------------------------------------------------------------------- */
170
- @import '../assets/styles/variables';
171
-
172
171
  .cmd-pager {
173
172
  display: flex;
174
173
  justify-content: space-between;
@@ -208,7 +207,14 @@ export default {
208
207
  }
209
208
  }
210
209
 
211
- @media only screen and (max-width: $medium-max-width) {
210
+ }
211
+ </style>
212
+
213
+ <style lang="scss">
214
+ @import '../assets/styles/variables';
215
+
216
+ @media only screen and (max-width: $medium-max-width) {
217
+ .cmd-pager {
212
218
  > a.button {
213
219
  span {
214
220
  margin: 0;
@@ -218,16 +224,16 @@ export default {
218
224
  }
219
225
  }
220
226
  }
221
- }
222
227
 
223
- @media only screen and (max-width: $small-max-width) {
224
- .button {
225
- width: auto; /* overwrite default settings from framework.css */
226
- }
228
+ @media only screen and (max-width: $small-max-width) {
229
+ .button {
230
+ width: auto; /* overwrite default settings from framework.css */
231
+ }
227
232
 
228
- .page-index {
229
- .flex-container {
230
- flex-direction: row; /* overwrite default settings from framework.css */
233
+ .page-index {
234
+ .flex-container {
235
+ flex-direction: row; /* overwrite default settings from framework.css */
236
+ }
231
237
  }
232
238
  }
233
239
  }
@@ -54,7 +54,7 @@ export default {
54
54
  }
55
55
  </script>
56
56
 
57
- <style lang="scss">
57
+ <style>
58
58
  /* begin cmd-progressbar ---------------------------------------------------------------------------------------- */
59
59
  .cmd-progressbar {
60
60
  .progressbar {
@@ -122,7 +122,8 @@ export default {
122
122
  }
123
123
  </script>
124
124
 
125
- <style lang="scss">
125
+ <style>
126
+ /* begin cmd-sidebar ---------------------------------------------------------------------------------------- */
126
127
  .cmd-sidebar {
127
128
  display: flex;
128
129
  height: 100%;
@@ -131,6 +132,10 @@ export default {
131
132
  padding: 0;
132
133
  }
133
134
 
135
+ .cmd-box-wrapper > .grid-container-create-columns {
136
+ grid-template-columns: repeat(1, minmax(0, 1fr));
137
+ }
138
+
134
139
  .inner-sidebar-wrapper {
135
140
  flex: 1;
136
141
  display: flex;
@@ -164,4 +169,5 @@ export default {
164
169
  }
165
170
  }
166
171
  }
172
+ /* end cmd-sidebar ---------------------------------------------------------------------------------------- */
167
173
  </style>
@@ -23,10 +23,8 @@ export default {
23
23
  }
24
24
  </script>
25
25
 
26
- <style lang="scss">
26
+ <style>
27
27
  /* begin cmd-site-footer ---------------------------------------------------------------------------------------- */
28
- @import '../assets/styles/variables';
29
-
30
28
  .cmd-site-footer {
31
29
  padding: var(--grid-gap) 0;
32
30
  border-top: var(--default-border);
@@ -49,6 +47,10 @@ export default {
49
47
  flex: none;
50
48
  }
51
49
  }
50
+ </style>
51
+
52
+ <style lang="scss">
53
+ @import '../assets/styles/variables';
52
54
 
53
55
  @media only screen and (max-width: $medium-max-width) {
54
56
  .cmd-site-footer {
@@ -57,21 +59,19 @@ export default {
57
59
  margin-bottom: calc(var(--default-margin) * 2);
58
60
  }
59
61
  }
60
- }
61
- }
62
62
 
63
- @media only screen and (max-width: $small-max-width) {
64
- .cmd-site-footer {
65
- a {
66
- text-decoration: underline;
63
+ @media only screen and (max-width: $small-max-width) {
64
+ a {
65
+ text-decoration: underline;
67
66
 
68
- &:active {
69
- text-decoration: none;
67
+ &:active {
68
+ text-decoration: none;
69
+ }
70
70
  }
71
- }
72
71
 
73
- h4, h5, h6 {
74
- margin-top: var(--default-margin);
72
+ h4, h5, h6 {
73
+ margin-top: var(--default-margin);
74
+ }
75
75
  }
76
76
  }
77
77
  }
@@ -1,5 +1,7 @@
1
1
  <template>
2
- <div :class="['cmd-site-header', {sticky: sticky, 'navigation-inline': navigationInline, 'off-canvas-right': cmdMainNavigation?.offcanvasPosition === 'right'}]" role="banner">
2
+ <div
3
+ :class="['cmd-site-header site-header', {sticky: sticky, 'navigation-inline': navigationInline, 'off-canvas-right': cmdMainNavigation?.offcanvasPosition === 'right'}]"
4
+ role="banner">
3
5
  <!-- begin slot for elements above header -->
4
6
  <div v-if="$slots.topheader" class="top-header">
5
7
  <slot name="topheader"></slot>
@@ -106,7 +108,7 @@ export default {
106
108
  }
107
109
  },
108
110
  methods: {
109
- emitOffcanvasStatus(event){
111
+ emitOffcanvasStatus(event) {
110
112
  this.$emit("offcanvas", event)
111
113
  }
112
114
  }
@@ -115,8 +117,6 @@ export default {
115
117
 
116
118
  <style lang="scss">
117
119
  /* begin cmd-site-header ---------------------------------------------------------------------------------------- */
118
- @import '../assets/styles/variables';
119
-
120
120
  .cmd-site-header {
121
121
  grid-area: site-header;
122
122
  display: flex;
@@ -152,7 +152,7 @@ export default {
152
152
  border-bottom: 0;
153
153
  }
154
154
 
155
- // use id to ensure high specificity
155
+ /* use id to ensure high specificity */
156
156
  > .cmd-main-navigation#main-navigation-wrapper:last-child {
157
157
  border-bottom: 0;
158
158
  }
@@ -183,14 +183,10 @@ export default {
183
183
  .cmd-main-navigation,
184
184
  nav ul li {
185
185
  border-bottom: 0;
186
- background: none;
187
- }
188
-
189
- .cmd-company-logo {
190
- grid-column: span var(--grid-small-span);
191
186
  }
192
187
  }
193
188
 
189
+ /* begin inline-navigation (shares spaces with company-logo */
194
190
  &.navigation-inline {
195
191
  header {
196
192
  &.has-navigation {
@@ -209,26 +205,7 @@ export default {
209
205
  display: flex;
210
206
  align-items: center;
211
207
  justify-content: flex-end;
212
- border: 0;
213
208
  grid-column: span var(--grid-large-span);
214
- background: none;
215
-
216
- :where(nav, .nav) {
217
- margin-right: 0;
218
-
219
- > ul {
220
- border: 0;
221
- background: none;
222
-
223
- li {
224
- border: 0;
225
-
226
- ul {
227
- border-top: var(--default-border);
228
- }
229
- }
230
- }
231
- }
232
209
 
233
210
  &:not(.persist-on-mobile) {
234
211
  padding-left: 0 !important;
@@ -244,7 +221,13 @@ export default {
244
221
  }
245
222
  }
246
223
  }
224
+
225
+ /* end inline-navigation (shares spaces with company-logo */
247
226
  }
227
+ </style>
228
+
229
+ <style lang="scss">
230
+ @import '../assets/styles/variables';
248
231
 
249
232
  @media only screen and (max-width: $medium-max-width) {
250
233
  .cmd-site-header {
@@ -66,8 +66,6 @@ export default {
66
66
 
67
67
  <style lang="scss">
68
68
  /* begin cmd-slide-button ---------------------------------------------------------------------------------------- */
69
- @import '../assets/styles/variables';
70
-
71
69
  .cmd-slide-button {
72
70
  &.button {
73
71
  font-size: 2rem;
@@ -84,10 +82,6 @@ export default {
84
82
  align-self: center;
85
83
  }
86
84
 
87
- &:hover, &:active, &:focus {
88
- transition: var(--default-transition);
89
- }
90
-
91
85
  &.prev {
92
86
  left: 0;
93
87
  top: 0;
@@ -111,7 +105,15 @@ export default {
111
105
  }
112
106
  }
113
107
 
114
- @media only screen and (max-width: $small-max-width) {
108
+
109
+ }
110
+ </style>
111
+
112
+ <style lang="scss">
113
+ @import '../assets/styles/variables';
114
+
115
+ @media only screen and (max-width: $small-max-width) {
116
+ .cmd-slide-button {
115
117
  &.button {
116
118
  width: auto; /* overwrite button-behavior for small-devices from frontend-framework */
117
119
  }
@@ -313,10 +313,8 @@ export default {
313
313
  }
314
314
  </script>
315
315
 
316
- <style lang="scss">
316
+ <style>
317
317
  /* begin cmd-slideshow ---------------------------------------------------------------------------------------- */
318
- @import '../assets/styles/variables';
319
-
320
318
  .cmd-slideshow {
321
319
  figure a, img {
322
320
  display: block;
@@ -375,12 +373,11 @@ export default {
375
373
 
376
374
  .image-wrapper {
377
375
  width: 100%;
378
- min-width: 11.1rem; // assure to be as wide as action-buttons in edit-mode
376
+ min-width: 11.1rem; /* assure to be as wide as action-buttons in edit-mode */
379
377
  min-height: 50rem;
380
378
  }
381
379
 
382
380
  > ol {
383
- display: -webkit-flex; /* Safari 6-8 */
384
381
  display: flex;
385
382
  margin: 0 auto;
386
383
  position: absolute;
@@ -404,7 +401,7 @@ export default {
404
401
  }
405
402
 
406
403
  &:hover, &:active, &:focus, &.active {
407
- border-color: var(--pure-white);
404
+ border-color: var(--hyperlink-color);
408
405
 
409
406
  a {
410
407
  background: var(--pure-white);
@@ -448,12 +445,6 @@ export default {
448
445
  background: var(--pure-white-reduced-opacity);
449
446
  }
450
447
  }
451
-
452
- @media only screen and (max-width: $medium-max-width) {
453
- figcaption {
454
- font-size: 2rem;
455
- }
456
- }
457
448
  }
458
449
 
459
450
  .edit-mode .cmd-slideshow .image-wrapper.edit-items {
@@ -464,6 +455,17 @@ export default {
464
455
  font-size: 3rem;
465
456
  }
466
457
  }
458
+ </style>
467
459
 
460
+ <style lang="scss">
461
+ @import '../assets/styles/variables';
462
+
463
+ @media only screen and (max-width: $medium-max-width) {
464
+ .cmd-slideshow {
465
+ figcaption {
466
+ font-size: 2rem;
467
+ }
468
+ }
469
+ }
468
470
  /* end cmd-slideshow ------------------------------------------------------------------------------------------ */
469
471
  </style>
@@ -21,12 +21,17 @@
21
21
 
22
22
  <!-- begin list of networks -->
23
23
  <ul v-if="validNetworks.length > 0" :class="['button-wrapper', {'no-gap': !useGap}]">
24
+ <!-- begin cmd-social-networks (default view) -->
24
25
  <CmdSocialNetworksItem
25
26
  v-if="!editModeContext"
26
27
  v-for="(entry, index) in validNetworks"
27
28
  :key="index"
28
29
  :network="entry"
29
- />
30
+ :userMustAcceptDataPrivacy="userMustAcceptDataPrivacy"
31
+ :buttonTextAlign="buttonTextAlign"
32
+ :dataPrivacyAccepted="dataPrivacyAccepted"
33
+ />
34
+ <!-- end cmd-social-networks (default view) -->
30
35
 
31
36
  <!-- begin edit-mode -->
32
37
  <EditComponentWrapper
@@ -254,8 +259,6 @@ export default {
254
259
 
255
260
  <style lang="scss">
256
261
  /* begin cmd-social-networks -------------------------------------------------------------------------------------------- */
257
- @import "../assets/styles/variables";
258
-
259
262
  .cmd-social-networks {
260
263
  display: flex;
261
264
  flex-direction: column;
@@ -285,7 +288,7 @@ export default {
285
288
  margin: 0;
286
289
  }
287
290
 
288
- &.text-align-right {
291
+ &.text-align-right {
289
292
  flex-direction: row-reverse;
290
293
  }
291
294
  }
@@ -401,6 +404,10 @@ export default {
401
404
  --social-network-color: #0077b5;
402
405
  }
403
406
  }
407
+ </style>
408
+
409
+ <style lang="scss">
410
+ @import "../assets/styles/variables";
404
411
 
405
412
  @container (max-width: #{$small-max-width}) {
406
413
  .button-wrapper {
@@ -10,11 +10,7 @@
10
10
  :title="tooltip(network.tooltip)">
11
11
 
12
12
  <!-- begin CmdIcon -->
13
- <CmdIcon
14
- v-if="network.iconClass"
15
- :iconClass="network.iconClass"
16
- :type="network.iconType"
17
- />
13
+ <CmdIcon v-if="network.iconClass" :iconClass="network.iconClass" :type="network.iconType" />
18
14
  <!-- end CmdIcon -->
19
15
 
20
16
  <span v-if="network.linkText">{{ network.linkText }}</span>
@@ -46,8 +42,7 @@ export default {
46
42
  * toggle if user has to accept that anonymous data will be send while sharing
47
43
  */
48
44
  userMustAcceptDataPrivacy: {
49
- type: Boolean,
50
- default: true
45
+ type: Boolean
51
46
  },
52
47
  /**
53
48
  * alignment for buttons
@@ -80,7 +80,7 @@ export default {
80
80
  }
81
81
  </script>
82
82
 
83
- <style lang="scss">
83
+ <style>
84
84
  /* begin cmd-switch-language ---------------------------------------------------------------------------------------- */
85
85
  .cmd-switch-language {
86
86
  ul {
@@ -130,7 +130,7 @@ export default {
130
130
  }
131
131
  </script>
132
132
 
133
- <style lang="scss">
133
+ <style>
134
134
  /* begin cmd-system-message ---------------------------------------------------------------------------------------- */
135
135
  .cmd-system-message {
136
136
  margin: var(--default-margin) 0;
@@ -158,31 +158,35 @@ export default {
158
158
  text-decoration: none;
159
159
  z-index: 100;
160
160
  line-height: 1;
161
+ background: var(--pure-white);
162
+ border-radius: var(--full-circle);
161
163
 
162
164
  [class*="icon-"] {
163
- color: var(--pure-white);
165
+ color: var(--default-text-color);
164
166
  }
165
167
 
166
168
  &:hover, &:active, &:focus {
169
+ background: none;
170
+
167
171
  [class*="icon-"] {
168
- color: var(--hyperlink-color);
172
+ color: var(--pure-white);
169
173
  }
170
174
  }
171
175
  }
172
176
 
173
177
  &.warning {
174
178
  > a:not(.button) {
175
- border-color: var(--text-color);
179
+ border-color: var(--default-text-color);
176
180
 
177
181
  [class*="icon-"] {
178
- color: var(--text-color);
182
+ color: var(--default-text-color);
179
183
  }
180
184
 
181
185
  &:hover, &:active, &:focus {
182
186
  border-color: var(--hyperlink-color);
183
187
 
184
188
  [class*="icon-"] {
185
- color: var(--hyperlink-color);
189
+ color: var(--pure-white);
186
190
  }
187
191
  }
188
192
  }
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- :class="['cmd-table-wrapper', {'collapsed': !showTableData, 'full-width': fullWidth, 'has-caption': hasCaption}]">
3
+ :class="['cmd-table-wrapper', {'collapsed': !showTableData, 'full-width': fullWidth, 'has-caption': hasCaption, 'has-overflow': hasOverflow}]">
4
4
  <div v-if="collapsible || userCanToggleWidth" class="button-wrapper">
5
5
  <a v-if="userCanToggleWidth" class="button"
6
6
  href="#" @click.prevent="fullWidth = !fullWidth"
@@ -20,7 +20,7 @@
20
20
  <!-- end CmdIcon -->
21
21
  </a>
22
22
  </div>
23
- <div class="inner-wrapper">
23
+ <div class="inner-wrapper" ref="innerWrapper" @scroll="updatePosition">
24
24
  <!-- begin CmdSlideButton -->
25
25
  <CmdSlideButton
26
26
  v-if="showSlideButtons"
@@ -30,7 +30,7 @@
30
30
  <!-- end CmdSlideButton -->
31
31
 
32
32
  <!-- begin table -->
33
- <table ref="table" :class="{'full-width': fullWidth, 'has-overflow': hasOverflow}">
33
+ <table ref="table" :class="{'full-width': fullWidth}">
34
34
  <caption v-if="tableData.caption?.text || caption?.text" :class="{ hidden: hideCaption }">
35
35
  {{ caption?.text || tableData.caption?.text }}
36
36
  </caption>
@@ -76,13 +76,15 @@
76
76
  </template>
77
77
 
78
78
  <script>
79
- import { ref } from 'vue'
79
+ import {ref} from 'vue'
80
+
80
81
  export default {
81
82
  name: "CmdTable",
82
83
  data() {
83
84
  return {
84
85
  showTableData: true,
85
- fullWidth: this.fullWidthOnDefault
86
+ fullWidth: this.fullWidthOnDefault,
87
+ hasOverflow: false
86
88
  }
87
89
  },
88
90
  props: {
@@ -187,6 +189,9 @@ export default {
187
189
  }
188
190
  }
189
191
  },
192
+ mounted() {
193
+ this.hasOverflow = this.$refs.table.clientWidth > this.$refs.innerWrapper.clientWidth
194
+ },
190
195
  computed: {
191
196
  hasCaption() {
192
197
  if (this.hideCaption) {
@@ -198,24 +203,66 @@ export default {
198
203
  },
199
204
  hideCaption() {
200
205
  return this.caption?.show === false || (this.caption?.show !== true && !this.tableData.caption?.show)
201
- },
202
- hasOverflow() {
203
- console.log("this.$refs.table", this.$refs.table)
204
- // return this.$refs.table.scrollWidth > this.$refs.table.clientWidth
205
206
  }
206
207
  },
207
208
  methods: {
208
209
  scrollLeft() {
209
- this.$refs.table.scrollLeft = 0
210
+ this.$refs.innerWrapper.scrollLeft = 0
211
+ this.$refs.table.previousElementSibling.style.cssText = "left: 0;"
212
+ this.updatePosition()
210
213
  },
211
214
  scrollRight() {
212
- this.$refs.table.scrollRight = 0
215
+ this.$refs.table.querySelector("th:last-child").scrollIntoView()
216
+ this.$refs.table.nextElementSibling.style.cssText = "right: auto;"
217
+ this.updatePosition()
218
+ },
219
+ updatePosition() {
220
+ const leftSlidebutton = this.$refs.table.previousElementSibling
221
+ const rightSlidebutton = this.$refs.table.nextElementSibling
222
+ const innerWrapper = this.$refs.innerWrapper
223
+
224
+ const parentRect = innerWrapper.getBoundingClientRect();
225
+ const newRight = parentRect.width + innerWrapper.scrollLeft - rightSlidebutton.getBoundingClientRect().width
226
+ const newLeft = innerWrapper.scrollLeft
227
+
228
+ console.log("parentRect", parentRect)
229
+
230
+ leftSlidebutton.style.left = `${newLeft}px`
231
+ rightSlidebutton.style.left = `${newRight}px`;
232
+
233
+ if(newLeft === 0) {
234
+ leftSlidebutton.style.display = "none"
235
+ } else {
236
+ leftSlidebutton.style.display = "flex"
237
+ }
238
+
239
+ if(newLeft === innerWrapper.scrollLeftMax) {
240
+ rightSlidebutton.style.display = "none"
241
+ } else {
242
+ rightSlidebutton.style.display = "flex"
243
+ }
244
+
245
+ // const parentRect = this.$refs.innerWrapper.getBoundingClientRect();
246
+ // const rightSlidebutton = this.$refs.table.nextElementSibling.getBoundingClientRect();
247
+ // const leftSlidebutton = this.$refs.table.previousElementSibling.getBoundingClientRect();
248
+ //
249
+ // // Calculate the new right position
250
+ // const newRight = rightSlidebutton.width + parentRect.right;
251
+ // const newLeft = parentRect.width - parentRect.left;
252
+ // console.log("parentRect.width", parentRect.width)
253
+ // console.log("parentRect.right", parentRect.right)
254
+ // console.log("parentRect.left", parentRect.left)
255
+ //
256
+ // // Apply the new right position
257
+ // this.$refs.table.nextElementSibling.style.left = `${newRight}px`;
258
+ // this.$refs.table.previousElementSibling.style.right = `${newLeft}px`;
213
259
  }
260
+
214
261
  }
215
262
  }
216
263
  </script>
217
264
 
218
- <style lang="scss">
265
+ <style>
219
266
  /* begin cmd-table-wrapper ---------------------------------------------------------------------------------------- */
220
267
  .cmd-table-wrapper {
221
268
  display: inline-flex;
@@ -250,19 +297,22 @@ export default {
250
297
  }
251
298
  }
252
299
 
300
+ .cmd-slide-button {
301
+ display: none;
302
+ }
303
+
253
304
  .inner-wrapper {
254
305
  display: flex;
255
306
  overflow-x: auto;
256
307
  width: 100%;
257
- padding: 0 4rem;
258
308
 
259
309
  .cmd-slide-button {
260
310
  left: 0;
261
- }
262
311
 
263
- .cmd-slide-button:last-child {
264
- right: 0;
265
- left: auto;
312
+ &:last-child {
313
+ right: 0;
314
+ left: auto;
315
+ }
266
316
  }
267
317
 
268
318
  table {
@@ -292,6 +342,11 @@ export default {
292
342
  }
293
343
  }
294
344
 
345
+ &.has-overflow {
346
+ .cmd-slide-button {
347
+ display: flex;
348
+ }
349
+ }
295
350
  }
296
351
 
297
352
  /* end cmd-table-wrapper ------------------------------------------------------------------------------------------ */