comand-component-library 3.3.84 → 3.3.86

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/dist/comand-component-library.js +5623 -3929
  2. package/dist/comand-component-library.umd.cjs +4 -4
  3. package/dist/style.css +1 -1
  4. package/package.json +2 -2
  5. package/src/App.vue +215 -112
  6. package/src/assets/data/component-structure.json +228 -0
  7. package/src/assets/data/form-elements.json +156 -0
  8. package/src/assets/data/opening-hours.json +79 -37
  9. package/src/components/CmdAddressData.vue +187 -201
  10. package/src/components/CmdAddressDataItem.vue +306 -0
  11. package/src/components/CmdBox.vue +1 -0
  12. package/src/components/CmdBoxWrapper.vue +53 -5
  13. package/src/components/CmdFancyBox.vue +31 -4
  14. package/src/components/CmdForm.vue +98 -4
  15. package/src/components/CmdFormElement.vue +5 -1
  16. package/src/components/CmdHeadline.vue +179 -52
  17. package/src/components/CmdImage.vue +205 -76
  18. package/src/components/CmdImageGallery.vue +88 -85
  19. package/src/components/CmdListOfLinks.vue +63 -43
  20. package/src/components/CmdListOfLinksItem.vue +97 -0
  21. package/src/components/CmdLoginForm.vue +3 -6
  22. package/src/components/CmdMultistepFormProgressBar.vue +37 -8
  23. package/src/components/CmdOpeningHours.vue +280 -63
  24. package/src/components/CmdOpeningHoursItem.vue +264 -0
  25. package/src/components/{CmdPager.vue → CmdPagination.vue} +2 -2
  26. package/src/components/CmdSlideshow.vue +137 -10
  27. package/src/components/CmdSocialNetworks.vue +115 -28
  28. package/src/components/CmdSocialNetworksItem.vue +184 -0
  29. package/src/components/CmdTable.vue +0 -1
  30. package/src/components/CmdTextImageBlock.vue +158 -0
  31. package/src/components/CmdThumbnailScroller.vue +132 -12
  32. package/src/components/CmdToggleDarkMode.vue +58 -1
  33. package/src/components/EditComponentWrapper.vue +553 -0
  34. package/src/index.js +2 -2
  35. package/src/mixins/EditMode.vue +28 -9
  36. package/src/utils/editmode.js +30 -5
  37. package/src/components/CmdTextBlock.vue +0 -73
  38. package/src/editmode/editModeContext.js +0 -50
@@ -1,52 +1,60 @@
1
1
  <template>
2
2
  <div :class="['cmd-list-of-links', {box: styleAsBox, horizontal: orientation === 'horizontal', 'section-anchors': sectionAnchors, 'large-icons': largeIcons}]">
3
- <!-- begin CmdHeadline -->
3
+ <!-- begin cmd-headline -->
4
4
  <CmdHeadline
5
- v-if="cmdHeadline"
5
+ v-if="cmdHeadline?.headlineText || editModeContext"
6
6
  v-bind="cmdHeadline"
7
7
  />
8
- <!-- end CmdHeadline -->
8
+ <!-- end cmd-headline -->
9
9
 
10
10
  <!-- begin list of links -->
11
11
  <ul :class="['flex-container', {'no-gap': !useGap},'align-' + align, setStretchClass]">
12
- <li v-for="(link, index) in links" :key="index" :class="{'active': sectionAnchors && activeSection === index}">
13
- <!-- begin use href -->
14
- <a v-if="link.type === 'href' || link.type === undefined"
15
- :href="link.path"
16
- :target="link.target"
17
- @click="executeLink(link, $event)"
18
- :title="link.tooltip && link.tooltip !== undefined ? link.tooltip : undefined">
19
- <!-- begin CmdIcon -->
20
- <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
21
- <!-- end CmdIcon -->
22
- <span v-if="link.text">{{ link.text }}</span>
23
- </a>
24
- <!-- end use href --->
25
-
26
- <!-- begin use router-link -->
27
- <router-link v-else-if="link.type === 'router'"
28
- :to="getRoute(link)"
29
- :title="link.tooltip">
30
- <!-- begin CmdIcon -->
31
- <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
32
- <!-- end CmdIcon -->
33
- <span v-if="link.text">{{ link.text }}</span>
34
- </router-link>
35
- <!-- end use router-link -->
12
+ <CmdListOfLinksItem
13
+ v-if="!editModeContext"
14
+ v-for="(link, index) in links"
15
+ :key="index"
16
+ :class="{'active': sectionAnchors && activeSection === index}"
17
+ :link="link"
18
+ />
19
+
20
+ <!-- begin edit-mode -->
21
+ <li v-else>
22
+ <EditComponentWrapper
23
+ v-for="(link, index) in links"
24
+ :key="'x' + index"
25
+ class="edit-items"
26
+ :showComponentName="false"
27
+ componentTag="ul"
28
+ componentName="CmdLinkItem"
29
+ :componentProps="link"
30
+ :allowedComponentTypes="[]"
31
+ :componentPath="['props', 'links', index]"
32
+ :itemProvider="itemProvider"
33
+ >
34
+ <CmdListOfLinksItem
35
+ :class="{'active': sectionAnchors && activeSection === index}"
36
+ :link="link"
37
+ />
38
+ </EditComponentWrapper>
39
+ <button v-if="links.length === 0" type="button" class="button confirm small" @click="onAddItem">
40
+ <span class="icon-plus"></span>
41
+ <span>Add new entry</span>
42
+ </button>
36
43
  </li>
44
+ <!-- end edit-mode -->
37
45
  </ul>
38
46
  <!-- end list of links -->
39
47
  </div>
40
48
  </template>
41
49
 
42
50
  <script>
43
- // import functions
44
- import {getRoute} from "../utilities.js"
45
- import {openFancyBox} from "./CmdFancyBox.vue"
51
+ import EditMode from "../mixins/EditMode.vue"
52
+ import {buildComponentPath, updateHandlerProvider} from "../utils/editmode.js"
46
53
 
47
54
  export default {
48
55
  name: "CmdListOfLinks",
49
56
  emits: ["click"],
57
+ mixins: [EditMode],
50
58
  props: {
51
59
  /**
52
60
  * activate if component should contain a list of anchors for the section within the page
@@ -133,16 +141,31 @@ export default {
133
141
  }
134
142
  },
135
143
  methods: {
136
- getRoute(link) {
137
- return getRoute(link)
144
+ onAddItem() {
145
+ this.editModeContext.content.addContent(
146
+ buildComponentPath(this, 'props', 'links', -1),
147
+ this.itemProvider)
148
+ },
149
+ itemProvider() {
150
+ return {
151
+ "iconClass": "icon-user-profile",
152
+ "type": "href",
153
+ "text": "Linktext",
154
+ "path": "#",
155
+ "tooltip": "Tooltip",
156
+ "target": "_blank"
157
+ }
138
158
  },
139
- executeLink(link, event) {
140
- if (link.fancybox) {
141
- event.preventDefault()
142
- openFancyBox({url: link.path, showSubmitButtons: link.showSubmitButtons})
143
- return
159
+ updateHandlerProvider() {
160
+ return updateHandlerProvider(this, {
161
+ update(props, childUpdateHandlers) {
162
+ const cmdHeadlineUpdateHandler = childUpdateHandlers?.find(handler => handler.name === "CmdHeadline")
163
+ if (cmdHeadlineUpdateHandler) {
164
+ props.cmdHeadline = props.cmdHeadline || {}
165
+ cmdHeadlineUpdateHandler.update(props.cmdHeadline)
144
166
  }
145
- this.$emit("click", {link, originalEvent: event})
167
+ }
168
+ })
146
169
  }
147
170
  }
148
171
  }
@@ -151,10 +174,7 @@ export default {
151
174
  <style lang="scss">
152
175
  /* begin cmd-list-of-links ---------------------------------------------------------------------------------------- */
153
176
  .cmd-list-of-links {
154
- display: flex;
155
- flex-direction: column;
156
-
157
- ul {
177
+ > ul {
158
178
  flex-direction: column;
159
179
  gap: calc(var(--default-gap) / 2);
160
180
  margin: 0;
@@ -166,7 +186,7 @@ export default {
166
186
  }
167
187
 
168
188
  &.horizontal {
169
- ul {
189
+ > ul {
170
190
  gap: var(--default-gap);
171
191
  flex-direction: row;
172
192
 
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <!-- begin default-view -->
3
+ <li v-if="!editing" class="cmd-list-of-links-item">
4
+ <!-- begin use href -->
5
+ <a v-if="link.type === 'href' || link.type === undefined"
6
+ :href="link.path"
7
+ :target="link.target"
8
+ @click="executeLink(link, $event)"
9
+ :title="link.tooltip && link.tooltip !== undefined ? link.tooltip : undefined">
10
+ <!-- begin CmdIcon -->
11
+ <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
12
+ <!-- end CmdIcon -->
13
+ <span v-if="link.text">{{ link.text }}</span>
14
+ </a>
15
+ <!-- end use href --->
16
+
17
+ <!-- begin use router-link -->
18
+ <router-link v-else-if="link.type === 'router'"
19
+ :to="getRoute(link)"
20
+ :title="link.tooltip">
21
+ <!-- begin CmdIcon -->
22
+ <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
23
+ <!-- end CmdIcon -->
24
+ <span v-if="link.text">{{ link.text }}</span>
25
+ </router-link>
26
+ <!-- end use router-link -->
27
+ </li>
28
+ <!-- end default-view -->
29
+
30
+ <!-- begin edit-mode -->
31
+ <template v-else>
32
+ <div class="input-wrapper">
33
+ <CmdFormElement
34
+ element="input"
35
+ type="text"
36
+ labelText="Linktext"
37
+ :showLabel="false"
38
+ placeholder="Linktext"
39
+ v-model="editableText"
40
+ />
41
+ </div>
42
+ </template>
43
+ <!-- end edit-mode -->
44
+ </template>
45
+
46
+ <script>
47
+ import EditMode from "../mixins/EditMode.vue"
48
+
49
+ // import functions
50
+ //import {getRoute} from 'comand-component-library'
51
+ import {openFancyBox} from "./CmdFancyBox.vue"
52
+ import {buildComponentPath, updateHandlerProvider} from "../utils/editmode.js"
53
+ export default {
54
+ name: "CmdListOfLinksItem",
55
+ inheritAttrs: false,
56
+ mixins: [EditMode],
57
+ data() {
58
+ return {
59
+ editableText: this.link.text
60
+ }
61
+ },
62
+ props: {
63
+ /**
64
+ * single link
65
+ */
66
+ link: {
67
+ type: Object,
68
+ required: false
69
+ }
70
+ },
71
+ methods: {
72
+ updateHandlerProvider() {
73
+ const text = this.editableText
74
+ return updateHandlerProvider(this, {
75
+ update(props) {
76
+ props.text = text
77
+ }
78
+ })
79
+ },
80
+ getRoute(link) {
81
+ return getRoute(link)
82
+ },
83
+ executeLink(link, event) {
84
+ if (link.fancybox) {
85
+ event.preventDefault()
86
+ openFancyBox({url: link.path, showSubmitButtons: link.showSubmitButtons})
87
+ return
88
+ }
89
+ this.$emit("click", {link, originalEvent: event})
90
+ },
91
+ }
92
+ }
93
+ </script>
94
+
95
+ <style lang="scss">
96
+
97
+ </style>
@@ -404,9 +404,10 @@ export default {
404
404
  if (event == null) {
405
405
  return
406
406
  }
407
- if(fieldType === "username") {
407
+
408
+ if (fieldType === "username") {
408
409
  this.usernameValidationStatus = event === "success";
409
- } else if(fieldType === "password") {
410
+ } else if (fieldType === "password") {
410
411
  this.passwordValidationStatus = event === "success";
411
412
  } else {
412
413
  this.emailValidationStatus = event === "success";
@@ -435,10 +436,6 @@ export default {
435
436
  align-items: center;
436
437
  text-decoration: none;
437
438
  flex: none;
438
-
439
- [class*="icon-"] {
440
- text-decoration: none;
441
- }
442
439
  }
443
440
 
444
441
  > .button {
@@ -124,8 +124,8 @@ export default {
124
124
  width: 100%;
125
125
  background: var(--primary-color-reduced-opacity);
126
126
 
127
- span, [class*="icon-"] {
128
- color: var(--default-background-color-reduced-opacity);
127
+ :is(span, [class*="icon-"]) {
128
+ color: var(--pure-white);
129
129
 
130
130
  & + [class*="icon-"] {
131
131
  &:last-child {
@@ -147,11 +147,17 @@ export default {
147
147
  }
148
148
  }
149
149
  }
150
+ }
150
151
 
151
- &:hover, &:active, &:focus {
152
- span, [class*="icon-"] {
153
- color: var(--pure-white);
154
- }
152
+ &:hover, &:active, &:focus {
153
+ background: var(--primary-color);
154
+
155
+ :is(span, [class*="icon-"]) {
156
+ color: var(--pure-white);
157
+ }
158
+
159
+ .number {
160
+ color: var(--primary-color);
155
161
  }
156
162
  }
157
163
 
@@ -165,7 +171,9 @@ export default {
165
171
  justify-content: center;
166
172
  border-radius: var(--full-circle);
167
173
  border: var(--default-border);
168
- color: var(--default-background-color-reduced-opacity);
174
+ border-color: var(--pure-white);
175
+ background: var(--pure-white);
176
+ color: var(--primary-color-reduced-opacity);
169
177
  }
170
178
  }
171
179
 
@@ -190,12 +198,24 @@ export default {
190
198
  span, [class*="icon-"] {
191
199
  color: var(--pure-white);
192
200
  }
201
+
202
+ &:hover, &:active, &:focus {
203
+ span, [class*="icon-"] {
204
+ color: var(--pure-white);
205
+
206
+ & + [class*="icon-"] {
207
+ &:last-child {
208
+ color: var(--text-color);
209
+ }
210
+ }
211
+ }
212
+ }
193
213
  }
194
214
 
195
215
  .number {
196
216
  background: var(--pure-white);
197
217
  border-color: var(--pure-white);
198
- color: var(--primary-color);
218
+ color: var(--primary-color) !important;
199
219
  }
200
220
 
201
221
  & ~ li {
@@ -224,8 +244,17 @@ export default {
224
244
  color: var(--primary-color);
225
245
  }
226
246
  }
247
+
248
+ .number {
249
+ border-color: var(--primary-color);
250
+ }
227
251
  }
228
252
  }
253
+
254
+ .number {
255
+ background: none;
256
+ border-color: var(--border-color);
257
+ }
229
258
  }
230
259
 
231
260
  & + li {