comand-component-library 4.0.2 → 4.0.4

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 (53) hide show
  1. package/README.md +32 -32
  2. package/dist/comand-component-library.js +3315 -1486
  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 +275 -610
  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 → component-library-global-styles.scss} +27 -14
  14. package/src/componentSettingsDataAndControls.vue +705 -0
  15. package/src/components/CmdAddressData.vue +1 -2
  16. package/src/components/CmdBox.vue +106 -52
  17. package/src/components/CmdCopyrightInformation.vue +5 -3
  18. package/src/components/CmdFakeSelect.vue +149 -78
  19. package/src/components/CmdFancyBox.vue +2 -2
  20. package/src/components/CmdFormElement.vue +62 -36
  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 +87 -35
  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 +13 -8
  32. package/src/components/CmdNewsletterSubscription.vue +18 -1
  33. package/src/components/CmdOpeningHoursItem.vue +1 -3
  34. package/src/components/CmdPagination.vue +5 -1
  35. package/src/components/CmdSiteFooter.vue +12 -2
  36. package/src/components/CmdSiteHeader.vue +2 -1
  37. package/src/components/CmdSlideButton.vue +7 -1
  38. package/src/components/CmdSlideshow.vue +33 -5
  39. package/src/components/CmdSocialNetworks.vue +18 -13
  40. package/src/components/CmdSocialNetworksItem.vue +5 -1
  41. package/src/components/CmdSystemMessage.vue +7 -1
  42. package/src/components/CmdTabs.vue +7 -7
  43. package/src/components/CmdTextImageBlock.vue +11 -2
  44. package/src/components/CmdThumbnailScroller.vue +23 -5
  45. package/src/components/CmdToggleDarkMode.vue +2 -2
  46. package/src/components/CmdTooltip.vue +50 -15
  47. package/src/components/CmdTooltipForFormElements.vue +96 -0
  48. package/src/components/CmdUploadForm.vue +29 -24
  49. package/src/components/CmdWidthLimitationWrapper.vue +1 -1
  50. package/src/components/ComponentSettings.vue +1 -1
  51. package/src/components/EditComponentWrapper.vue +1 -1
  52. package/src/main.js +2 -2
  53. package/src/assets/data/accordion.json +0 -45
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <!-- begin boxType 'content' -->
3
3
  <div v-if="boxType === 'content'"
4
+ ref="cmdBox"
4
5
  :class="[
5
6
  'cmd-box box content',
6
7
  {
@@ -57,7 +58,11 @@
57
58
 
58
59
  <!-- begin box-body -->
59
60
  <div v-show="open" :class="['box-body', boxBodyClass]" aria-expanded="true" role="article">
60
- <div v-if="useSlots?.includes('body')" :class="{'default-padding': useDefaultPadding, 'allow-scroll': allowContentToScroll}">
61
+ <div v-if="useSlots?.includes('body')"
62
+ :class="{'default-padding': useDefaultPadding, 'allow-scroll': allowContentToScroll}"
63
+ ref="boxBody"
64
+ :style="'max-height: ' + calculatedBodyHeight"
65
+ >
61
66
  <!-- begin slot 'body' -->
62
67
  <slot name="body">
63
68
  <transition-group :name="toggleTransition">
@@ -69,7 +74,9 @@
69
74
  {{ textBody }}
70
75
  </p>
71
76
  <a v-if="cutoffTextLines > 0" href="#" @click.prevent="toggleCutOffText">
72
- {{ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text") }}
77
+ {{
78
+ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text")
79
+ }}
73
80
  </a>
74
81
  </transition-group>
75
82
  </slot>
@@ -122,13 +129,17 @@
122
129
  </div>
123
130
  <!-- end ribbons -->
124
131
  </div>
132
+ <!-- begin box-body -->
125
133
  <div class="box-body">
126
- <p v-if="product.articleNumber">{{ getMessage("cmdbox.productbox.article_no") }} {{ product.articleNumber }}</p>
134
+ <p v-if="product.articleNumber">{{ getMessage("cmdbox.productbox.article_no") }} {{
135
+ product.articleNumber
136
+ }}</p>
127
137
  <p v-if="product.price" class="price">
128
138
  <span>{{ product.price }}</span><span :title="globalCurrency.name">{{ globalCurrency.symbol }}</span>
129
139
  </p>
130
140
  <p v-if="product.description">{{ product.description }}</p>
131
141
  </div>
142
+ <!-- end box-body -->
132
143
  </a>
133
144
  <!-- end boxType 'product' -->
134
145
 
@@ -143,30 +154,41 @@
143
154
  'row-view': rowView
144
155
  }
145
156
  ]">
157
+ <!-- begin box-header -->
146
158
  <div class="box-header flex-container vertical">
147
159
  <figure v-if="user.image">
148
160
  <img :src="user.image.src" :alt="user.image.alt"/>
149
- <figcaption>{{ user.name }} <span v-if="user.age">, {{user.age}}</span></figcaption>
161
+ <figcaption>{{ user.name }} <span v-if="user.age">, {{ user.age }}</span></figcaption>
150
162
  </figure>
151
163
  <div v-else>
152
164
  <span :class="defaultProfileIconClass" :title="user.name"></span>
153
165
  <p v-if="!rowView">{{ user.name }}</p>
154
166
  </div>
155
167
  </div>
168
+ <!-- end box-header -->
169
+
170
+ <!-- begin box-body -->
156
171
  <div class="box-body">
157
172
  <p v-if="rowView">{{ user.name }}</p>
158
173
  <p v-if="user.profession">{{ user.profession }}</p>
159
174
  <p v-if="user.position">{{ user.position }}</p>
160
175
  <p v-if="user.description" class="description">{{ user.description }}</p>
161
176
  </div>
162
- <ul class="tags">
177
+ <!-- end box-body -->
178
+
179
+ <!-- begin user-tags -->
180
+ <ul v-if="user.tags && user.tags.length" class="tags">
163
181
  <li v-for="(tag, index) in user.tags" :key="index">
164
- {{tag}}
182
+ {{ tag }}
165
183
  </li>
166
184
  </ul>
167
- <div v-if="user.links" class="box-footer">
185
+ <!-- end user-tags -->
186
+
187
+ <!-- begin box-footer -->
188
+ <div v-if="user.links && user.links.length" class="box-footer">
168
189
  <CmdListOfLinks :links="user.links" orientation="horizontal" :useGap="false"/>
169
190
  </div>
191
+ <!-- end box-footer -->
170
192
  </div>
171
193
  <!-- end boxType 'user' -->
172
194
  </template>
@@ -189,7 +211,8 @@ export default {
189
211
  return {
190
212
  open: this.collapsible ? this.openCollapsedBox : true,
191
213
  active: true,
192
- showCutOffText: false
214
+ showCutOffText: false,
215
+ calculatedBodyHeight: this.maxBoxBodyHeight
193
216
  }
194
217
  },
195
218
  props: {
@@ -217,7 +240,12 @@ export default {
217
240
  */
218
241
  boxType: {
219
242
  type: String,
220
- default: "content"
243
+ default: "content",
244
+ validator(value) {
245
+ return value === "content" ||
246
+ value === "product" ||
247
+ value === "user"
248
+ }
221
249
  },
222
250
  /**
223
251
  * set if content (in box-body) should scroll
@@ -232,8 +260,8 @@ export default {
232
260
  * set max-height for body (should only be used it allowContentToScroll-property is active)
233
261
  */
234
262
  maxBoxBodyHeight: {
235
- type: String,
236
- default: "10rem"
263
+ type: String,
264
+ default: "100rem"
237
265
  },
238
266
  /**
239
267
  * activate if box should be collapsible
@@ -324,7 +352,12 @@ export default {
324
352
  */
325
353
  profileType: {
326
354
  type: String,
327
- default: "business"
355
+ default: "business",
356
+ validator(value) {
357
+ return value === "business" ||
358
+ value === "influencer" ||
359
+ value === "dating"
360
+ }
328
361
  },
329
362
  /**
330
363
  * activated if all content (incl. headline) is given by slot
@@ -405,13 +438,13 @@ export default {
405
438
  required: false
406
439
  }
407
440
  },
441
+ mounted() {
442
+ if (this.allowContentToScroll && this.$refs.boxBody) {
443
+ const topPosition = this.$refs.boxBody.getBoundingClientRect().top
444
+ this.calculatedBodyHeight = (document.documentElement.clientHeight - topPosition) + "px"
445
+ }
446
+ },
408
447
  computed: {
409
- setMaxBoxBodyHeight() {
410
- if (this.allowContentToScroll && this.maxBoxBodyHeight) {
411
- return this.maxBoxBodyHeight
412
- }
413
- return null
414
- },
415
448
  toggleTransition() {
416
449
  if (this.useTransition) {
417
450
  return "fade"
@@ -435,6 +468,18 @@ export default {
435
468
  // for boxType === product
436
469
  clickOnProduct(product) {
437
470
  this.$emit('click', product)
471
+ },
472
+ // set focus on first input if box contains form-elements
473
+ setFocus() {
474
+ this.$nextTick(() => {
475
+ if(this.open) {
476
+ const firstFormElement = this.$refs.cmdBox.querySelector(":is(input, select, textarea):first-of-type")
477
+
478
+ if(firstFormElement) {
479
+ firstFormElement.focus()
480
+ }
481
+ }
482
+ })
438
483
  }
439
484
  },
440
485
  watch: {
@@ -442,7 +487,11 @@ export default {
442
487
  // toggle collapse-status of all boxes if changed in outer component
443
488
  if (this.collapsible) {
444
489
  this.open = this.openCollapsedBox
490
+ this.setFocus()
445
491
  }
492
+ },
493
+ open() {
494
+ this.setFocus()
446
495
  }
447
496
  }
448
497
  }
@@ -473,7 +522,8 @@ export default {
473
522
  &.collapsible {
474
523
  a.box-header {
475
524
  justify-content: space-between;
476
- background: var(--hyperlink-color);
525
+ background: var(--box-header-background);
526
+ border-radius: var(--box-border-radius);
477
527
 
478
528
  &:hover, &:active, &:focus {
479
529
  background: var(--pure-white);
@@ -488,7 +538,10 @@ export default {
488
538
  .box-body {
489
539
  .allow-scroll {
490
540
  overflow-y: auto;
491
- max-height: v-bind(maxBoxBodyHeight);
541
+
542
+ & * {
543
+ flex-shrink: 0;
544
+ }
492
545
  }
493
546
  }
494
547
 
@@ -505,15 +558,14 @@ export default {
505
558
  border-bottom-left-radius: 0;
506
559
  border-bottom-right-radius: 0;
507
560
  }
561
+
562
+ fieldset {
563
+ border: 0;
564
+ padding: var(--default-padding);
565
+ }
508
566
  }
509
567
 
510
568
  > .box-header {
511
- display: flex;
512
- align-items: center;
513
- border-radius: var(--border-radius);
514
- padding: calc(var(--default-padding) / 2) var(--default-padding);
515
- background: var(--secondary-color);
516
- color: var(--pure-white);
517
569
  text-decoration: none;
518
570
 
519
571
  > .cmd-custom-headline {
@@ -536,7 +588,7 @@ export default {
536
588
 
537
589
  .box-body {
538
590
  flex-grow: 1;
539
- border-top: var(--default-border);
591
+ border-top: var(--box-border);
540
592
 
541
593
  p.cutoff-text {
542
594
  padding: var(--default-padding);
@@ -551,7 +603,7 @@ export default {
551
603
  left: 0;
552
604
  bottom: 0;
553
605
  height: calc(var(--line-of-text-height) * 3);
554
- background: linear-gradient(to bottom, transparent 0%, var(--default-background-color) 100%);
606
+ background: linear-gradient(to bottom, transparent 0%, var(--default-background) 100%);
555
607
  }
556
608
 
557
609
  &.show-text {
@@ -559,7 +611,7 @@ export default {
559
611
  }
560
612
 
561
613
  & + a {
562
- border-top: var(--default-border);
614
+ border-top: var(--box-border);
563
615
  display: block;
564
616
  padding: var(--default-padding);
565
617
  margin: 0;
@@ -583,7 +635,7 @@ export default {
583
635
  display: block;
584
636
  padding: var(--default-padding);
585
637
  text-decoration: none;
586
- border-bottom: var(--default-border);
638
+ border-bottom: var(--box-border);
587
639
 
588
640
  &:hover, &:active, &:focus {
589
641
  background: var(--primary-color);
@@ -599,13 +651,6 @@ export default {
599
651
  }
600
652
  }
601
653
  }
602
-
603
- .box-footer {
604
- border-bottom-left-radius: var(--border-radius);
605
- border-bottom-right-radius: var(--border-radius);
606
- padding: var(--default-padding);
607
- border-top: var(--default-border);
608
- }
609
654
  }
610
655
 
611
656
  /* boyType === 'product' and boxType === 'user' */
@@ -660,6 +705,8 @@ export default {
660
705
  }
661
706
 
662
707
  > .box-header {
708
+ padding: 0;
709
+
663
710
  > img, > div {
664
711
  display: table;
665
712
  margin: 0 auto;
@@ -674,12 +721,14 @@ export default {
674
721
  figcaption {
675
722
  font-size: 2rem;
676
723
  font-weight: bold;
677
- padding-top: var(--default-padding)
724
+ padding: var(--default-padding);
678
725
  }
679
726
  }
680
727
 
681
728
  .box-body {
682
729
  flex-grow: 1;
730
+ padding: var(--default-padding);
731
+ padding-bottom: 0;
683
732
 
684
733
  > * {
685
734
  text-align: center;
@@ -703,15 +752,13 @@ export default {
703
752
  /* boxType === 'user' */
704
753
  &.user {
705
754
  > .box-header {
706
- --icon-size: 6rem;
755
+ --default-icon-size: 6rem;
756
+ --box-header-text-color: var(--primary-color);
707
757
 
708
- padding: var(--default-padding);
758
+ background: none;
709
759
 
710
- .cmd-headline {
711
- > * {
712
- display: block;
713
- text-align: center;
714
- }
760
+ > div:first-child > [class*="icon-"] {
761
+ aspect-ratio: 1/1;
715
762
  }
716
763
 
717
764
  img, > div:first-child > [class*="icon-"] {
@@ -719,7 +766,7 @@ export default {
719
766
  margin: 0 auto var(--default-margin) auto;
720
767
  padding: calc(var(--default-padding) * 3);
721
768
  border-radius: var(--full-circle);
722
- background: var(--primary-color);
769
+ background: var(--box-header-background);
723
770
  color: var(--pure-white);
724
771
 
725
772
  & + p, & + figcaption {
@@ -732,17 +779,20 @@ export default {
732
779
 
733
780
  img {
734
781
  padding: 0;
735
- width: calc(var(--icon-size) * 2);
782
+ width: calc(var(--default-icon-size) * 2);
736
783
  aspect-ratio: 1/1;
737
784
  }
738
785
 
739
786
  > div:first-child > [class*="icon-"] {
740
- font-size: var(--icon-size);
787
+ margin: 0;
788
+ font-size: var(--default-icon-size);
741
789
  }
742
790
  }
743
791
 
744
792
  .box-body {
745
793
  flex-grow: 1;
794
+ padding: var(--default-padding);
795
+ padding-top: 0;
746
796
 
747
797
  p {
748
798
  text-align: center;
@@ -760,7 +810,8 @@ export default {
760
810
 
761
811
  .box-footer {
762
812
  margin-top: auto;
763
- border-top: var(--default-border);
813
+ padding: 0;
814
+ border-top: var(--box-border);
764
815
 
765
816
  .cmd-list-of-links {
766
817
  ul {
@@ -769,13 +820,15 @@ export default {
769
820
 
770
821
  li {
771
822
  flex: 1;
823
+ border-radius: var(--box-border-radius);
772
824
 
773
825
  a {
774
826
  flex: 1;
775
827
  padding: var(--default-padding);
776
828
  text-align: center;
777
- background: var(--color-scheme-background-color);
778
- border-left: var(--default-border);
829
+ background: var(--color-scheme-background);
830
+ border-left: var(--box-border);
831
+ border-radius: var(--box-border-radius);
779
832
  }
780
833
 
781
834
  &:hover, &:active, &:focus {
@@ -801,7 +854,7 @@ export default {
801
854
 
802
855
  &.row-view {
803
856
  [class*="icon"] {
804
- --icon-size: 3rem;
857
+ --default-icon-size: 3rem;
805
858
  }
806
859
 
807
860
  .box-header > div:first-child > [class*="icon-"] {
@@ -814,6 +867,7 @@ export default {
814
867
 
815
868
  .box-footer {
816
869
  border: 0;
870
+ background: none;
817
871
 
818
872
  .cmd-list-of-links {
819
873
  background: none;
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="cmd-copyright-information" role="contentinfo">
3
- <a href="http://www.comand-cms.com" target="_blank" lang="en" title="CoManD-Website">&copy; CoManD</a>
3
+ <a href="http://www.comand-cms.com" target="comand-website" lang="en" title="CoManD-Website">&copy; CoManD</a>
4
4
  </div>
5
5
  </template>
6
6
 
@@ -13,10 +13,12 @@ export default {
13
13
  <style>
14
14
  /* begin cmd-copyright-information ---------------------------------------------------------------------------------------- */
15
15
  .cmd-copyright-information {
16
- background: var(--text-color);
17
- border-top: var(--border-width) var(--border-style) var(--pure-white);
16
+ background: var(--default-text-color);
17
+ border-top: var(--default-border-width) var(--default-border-style) var(--pure-white);
18
18
  text-align: center;
19
19
  padding: var(--default-padding);
20
+ margin-top: auto;
21
+ flex: none;
20
22
 
21
23
  a {
22
24
  text-decoration: none;