comand-component-library 3.1.90 → 3.1.92

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.css +1 -1
  2. package/dist/comand-component-library.umd.min.js +1 -1
  3. package/package.json +2 -2
  4. package/src/App.vue +119 -45
  5. package/src/assets/data/main-navigation.json +1 -0
  6. package/src/assets/data/tabs.json +1 -0
  7. package/src/assets/styles/global-styles.scss +0 -1
  8. package/src/components/CmdBox.vue +15 -9
  9. package/src/components/CmdCookieDisclaimer.vue +38 -9
  10. package/src/components/CmdFakeSelect.vue +11 -19
  11. package/src/components/CmdFancyBox.vue +46 -13
  12. package/src/components/CmdFormElement.vue +29 -32
  13. package/src/components/CmdImageGallery.vue +2 -2
  14. package/src/components/CmdInputGroup.vue +9 -16
  15. package/src/components/CmdLoginForm.vue +80 -103
  16. package/src/components/CmdMainNavigation.vue +6 -6
  17. package/src/components/CmdMultipleSwitch.vue +4 -12
  18. package/src/components/CmdNewsletterSubscription.vue +205 -0
  19. package/src/components/CmdShareButtons.vue +100 -27
  20. package/src/components/{CmdBoxSiteSearch.vue → CmdSiteSearch.vue} +34 -13
  21. package/src/components/CmdSystemMessage.vue +6 -0
  22. package/src/components/CmdTabs.vue +5 -5
  23. package/src/components/CmdThumbnailScroller.vue +9 -1
  24. package/src/components/CmdTooltip.vue +1 -1
  25. package/src/components/CmdTooltipForInputElements.vue +1 -19
  26. package/src/documentation/generated/CmdFancyBoxPropertyDescriptions.json +10 -0
  27. package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +0 -5
  28. package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +3 -3
  29. package/src/documentation/generated/CmdNewsletterSubscriptionPropertyDescriptions.json +42 -0
  30. package/src/documentation/generated/CmdShareButtonsPropertyDescriptions.json +24 -0
  31. package/src/documentation/generated/CmdSiteSearchPropertyDescriptions.json +79 -0
  32. package/src/documentation/generated/CmdTooltipForInputElementsPropertyDescriptions.json +1 -6
  33. package/src/index.js +1 -1
  34. package/src/mixins/CmdFormElement/DefaultMessageProperties.js +2 -1
  35. package/src/mixins/CmdThumbnailScroller/DefaultMessageProperties.js +9 -0
  36. package/src/mixins/FieldValidation.js +19 -7
  37. package/src/mixins/Identifier.js +28 -0
  38. package/src/utils/common.js +5 -1
@@ -1,10 +1,12 @@
1
1
  <template>
2
2
  <!-- begin login-form -->
3
- <fieldset v-if="!sendLogin" class="cmd-login-form flex-container">
4
- <legend :class="{hidden : !showLegend}">{{ textLegend }}</legend>
3
+ <fieldset v-show="!sendLogin" class="cmd-login-form flex-container">
4
+ <legend :class="{hidden : !showLegend}">{{ textLegendLoginForm }}</legend>
5
5
  <!-- begin CmdHeadline -->
6
- <CmdHeadline v-if="cmdHeadlineLoginForm"
7
- v-bind="cmdHeadlineLoginForm"/>
6
+ <CmdHeadline
7
+ v-if="cmdHeadlineLoginForm"
8
+ v-bind="cmdHeadlineLoginForm"
9
+ />
8
10
  <!-- end CmdHeadline -->
9
11
 
10
12
  <!-- being form elements -->
@@ -19,6 +21,8 @@
19
21
  :fieldIconClass="cmdFormElementUsername.innerIconClass"
20
22
  :labelText="cmdFormElementUsername.labelText"
21
23
  :placeholder="cmdFormElementUsername.placeholder"
24
+ :required="cmdFormElementUsername.required"
25
+ @validationStatusChange="checkValidationStatus($event, 'username')"
22
26
  />
23
27
  <!-- end CmdFormElement -->
24
28
 
@@ -32,6 +36,8 @@
32
36
  v-model="password"
33
37
  :labelText="cmdFormElementPassword.labelText"
34
38
  :placeholder="cmdFormElementPassword.placeholder"
39
+ :required="cmdFormElementPassword.required"
40
+ @validationStatusChange="checkValidationStatus($event, 'password')"
35
41
  />
36
42
  <!-- end CmdFormElement -->
37
43
  </div>
@@ -39,6 +45,7 @@
39
45
 
40
46
  <div class="option-wrapper flex-container" v-focus>
41
47
  <template v-if="options.forgotPassword || options.createAccount">
48
+ <!-- begin link for 'forgot password' -->
42
49
  <a v-if="options.forgotPassword" href="#" @click.prevent="sendLogin = true">
43
50
  <span v-if="options.forgotPassword.icon && options.forgotPassword.icon.show && options.forgotPassword.icon.iconClass"
44
51
  :class="options.forgotPassword.icon.iconClass"
@@ -46,7 +53,9 @@
46
53
  </span>
47
54
  <span v-if="options.forgotPassword.text">{{ options.forgotPassword.text }}</span>
48
55
  </a>
49
- <!-- begin link-type 'href' -->
56
+ <!-- end link for 'forgot password' -->
57
+
58
+ <!-- begin link-type 'href' for 'create account' -->
50
59
  <a v-if="options.createAccount && options.createAccount.linkType === 'href'" :href="options.createAccount.path">
51
60
  <span v-if="options.createAccount.icon && options.createAccount.icon.show && options.createAccount.icon.iconClass"
52
61
  :class="options.createAccount.icon.iconClass"
@@ -54,9 +63,9 @@
54
63
  </span>
55
64
  <span v-if="options.createAccount.text">{{ options.createAccount.text }}</span>
56
65
  </a>
57
- <!-- end link-type 'href' -->
66
+ <!-- end link-type 'href' for 'create account' -->
58
67
 
59
- <!-- begin link-type 'router' -->
68
+ <!-- begin link-type 'router' for 'create account' -->
60
69
  <router-link v-else-if="options.createAccount && options.createAccount.linkType === 'router'" :to="options.createAccount.path">
61
70
  <span v-if="options.createAccount.icon && options.createAccount.icon.show && options.createAccount.icon.iconClass"
62
71
  :class="options.createAccount.icon.iconClass"
@@ -64,47 +73,16 @@
64
73
  </span>
65
74
  <span v-if="options.createAccount.text">{{ options.createAccount.text }}</span>
66
75
  </router-link>
67
- <!-- end link-type 'router -->
76
+ <!-- end link-type 'router' for 'create account' -->
68
77
  </template>
69
78
 
70
- <!-- begin link-type 'href' -->
71
- <a
72
- v-if="buttons.login.linkType === 'href'"
73
- :class="['button', { primary: buttons.login.primary }]"
74
- :href="buttons.login.path"
75
- @click.prevent="onClick"
76
- >
77
- <span
78
- v-if="buttons.login.icon.iconClass"
79
- :class="buttons.login.icon.iconClass"
80
- :title="buttons.login.icon.tooltip"
81
- ></span>
82
- <span v-if="buttons.login.text">{{ buttons.login.text }}</span>
83
- </a>
84
- <!-- begin link-type 'href' -->
85
-
86
- <!-- begin link-type 'router' -->
87
- <router-link
88
- v-if="buttons.login.linkType === 'router'"
89
- :class="['button', { primary: buttons.login.primary }]"
90
- :to="buttons.login.path"
91
- @click.prevent="onClick"
92
- >
93
- <span
94
- v-if="buttons.login.icon.iconClass"
95
- :class="buttons.login.icon.iconClass"
96
- :title="buttons.login.icon.tooltip"
97
- ></span>
98
- <span v-if="buttons.login.text">{{ buttons.login.text }}</span>
99
- </router-link>
100
- <!-- begin link-type 'router' -->
101
-
102
79
  <!-- begin link-type 'button' -->
103
80
  <button
104
81
  v-if="buttons.login.linkType === 'button'"
105
82
  :type="buttons.login.type === 'submit' ? 'submit' : 'button'"
106
83
  :class="['button', { primary: buttons.login.primary }]"
107
84
  @click="onClick"
85
+ :disabled="buttonLoginDisabled"
108
86
  >
109
87
  <span
110
88
  v-if="buttons.login.icon.iconClass"
@@ -119,14 +97,13 @@
119
97
  <!-- end login-form -->
120
98
 
121
99
  <!-- begin send-login-form -->
122
- <fieldset v-else class="cmd-login-form flex-container">
123
- <legend :class="{'hidden' : !legendSendLoginForm.show}">{{ legendSendLoginForm.text }}</legend>
100
+ <fieldset v-show="sendLogin" class="cmd-login-form flex-container">
101
+ <legend :class="{'hidden' : !showLegend}">{{ textLegendForgotLoginForm }}</legend>
124
102
  <!-- begin CmdHeadline -->
125
- <CmdHeadline v-if="cmdHeadlineSendLoginForm"
126
- :iconClass="cmdHeadlineSendLoginForm.iconClass"
127
- :preHeadline="cmdHeadlineSendLoginForm.preHeadline"
128
- :headlineLevel="cmdHeadlineSendLoginForm.preHeadline"
129
- :headlineText="cmdHeadlineSendLoginForm.headlineText"/>
103
+ <CmdHeadline
104
+ v-if="cmdHeadlineSendLoginForm"
105
+ v-bind="cmdHeadlineSendLoginForm"
106
+ />
130
107
  <!-- end CmdHeadline -->
131
108
 
132
109
  <!-- begin CmdFormElement -->
@@ -137,8 +114,10 @@
137
114
  :labelText="cmdFormElementSendLogin.labelText"
138
115
  :placeholder="cmdFormElementSendLogin.placeholder"
139
116
  :name="cmdFormElementSendLogin.name"
117
+ :required="cmdFormElementSendLogin.required"
140
118
  :id="cmdFormElementSendLogin.id"
141
- v-model:value="sendLoginMail"
119
+ @validationStatusChange="checkValidationStatus($event, 'email')"
120
+ v-model="sendLoginMail"
142
121
  />
143
122
  <!-- end CmdFormElement -->
144
123
 
@@ -153,43 +132,12 @@
153
132
  </span>
154
133
  </a>
155
134
 
156
- <!-- begin link-type 'href' -->
157
- <a
158
- v-if="buttons.sendLogin.linkType === 'href'"
159
- :class="['button', { primary: buttons.sendLogin.primary }]"
160
- :href="buttons.sendLogin.path"
161
- @click.prevent="sendLogin"
162
- >
163
- <span
164
- v-if="buttons.sendLogin.icon.iconClass"
165
- :class="buttons.sendLogin.icon.iconClass"
166
- :title="buttons.sendLogin.icon.tooltip"
167
- ></span>
168
- <span v-if="buttons.sendLogin.text">{{ buttons.sendLogin.text }}</span>
169
- </a>
170
- <!-- end link-type 'href' -->
171
-
172
- <!-- begin link-type 'router' -->
173
- <router-link
174
- v-if="buttons.sendLogin.linkType === 'router'"
175
- :class="['button', { primary: buttons.sendLogin.primary }]"
176
- :to="buttons.sendLogin.path"
177
- @click.prevent="sendLogin"
178
- >
179
- <span
180
- v-if="buttons.sendLogin.icon.iconClass"
181
- :class="buttons.sendLogin.icon.iconClass"
182
- :title="buttons.sendLogin.icon.tooltip"
183
- ></span>
184
- <span v-if="buttons.sendLogin.text">{{ buttons.sendLogin.text }}</span>
185
- </router-link>
186
- <!-- end link-type 'router' -->
187
-
188
135
  <!-- begin link-type 'button' -->
189
136
  <button
190
137
  v-if="buttons.sendLogin.linkType === 'button'"
191
138
  :type="buttons.sendLogin.type === 'submit' ? 'submit' : 'button'"
192
139
  :class="['button', { primary: buttons.sendLogin.primary }]"
140
+ :disabled="buttonSendLoginDisabled"
193
141
  >
194
142
  <span
195
143
  v-if="buttons.sendLogin.icon?.iconClass"
@@ -216,8 +164,9 @@ export default {
216
164
  name: "CmdLoginForm",
217
165
  data() {
218
166
  return {
219
- username: "",
220
- password: "",
167
+ usernameValidationStatus: false,
168
+ passwordValidationStatus: false,
169
+ emailValidationStatus: false,
221
170
  sendLoginMail: "",
222
171
  sendLogin: false
223
172
  }
@@ -244,7 +193,7 @@ export default {
244
193
  *
245
194
  * @requiredForAccessibility: true
246
195
  */
247
- textLegend: {
196
+ textLegendLoginForm: {
248
197
  type: String,
249
198
  default: "Login form"
250
199
  },
@@ -256,18 +205,13 @@ export default {
256
205
  default: true
257
206
  },
258
207
  /**
259
- * legend for send-login-fieldset
208
+ * legend for forgot-login-fieldset
260
209
  *
261
210
  * @requiredForAccessibility: true
262
- */
263
- legendSendLoginForm: {
264
- type: Object,
265
- default() {
266
- return {
267
- show: false,
268
- text: "Forgot login form"
269
- }
270
- }
211
+ */
212
+ textLegendForgotLoginForm: {
213
+ type: String,
214
+ default: "Forgot login form"
271
215
  },
272
216
  /**
273
217
  * properties for CmdHeadline-component for login-form
@@ -281,13 +225,7 @@ export default {
281
225
  */
282
226
  cmdHeadlineSendLoginForm: {
283
227
  type: Object,
284
- default() {
285
- return {
286
- show: true,
287
- headlineText: "Send Login",
288
- headlineLevel: 2
289
- }
290
- }
228
+ required: false
291
229
  },
292
230
  /**
293
231
  * properties for CmdFormElement-component for username-field
@@ -302,7 +240,8 @@ export default {
302
240
  placeholder: "Type in username",
303
241
  innerIconClass: "icon-user-profile",
304
242
  name: "login-username",
305
- id: "login-username"
243
+ id: "login-username",
244
+ required: true
306
245
  }
307
246
  }
308
247
  },
@@ -319,7 +258,8 @@ export default {
319
258
  placeholder: "Type in password",
320
259
  innerIconClass: "icon-security-settings",
321
260
  name: "login-password",
322
- id: "login-password"
261
+ id: "login-password",
262
+ required: true
323
263
  }
324
264
  }
325
265
  },
@@ -336,7 +276,8 @@ export default {
336
276
  placeholder: "Type in email-address you are registered with",
337
277
  innerIconClass: "icon-mail",
338
278
  name: "login-send-login",
339
- id: "login-send-login"
279
+ id: "login-send-login",
280
+ required: true
340
281
  }
341
282
  }
342
283
  },
@@ -416,6 +357,30 @@ export default {
416
357
  }
417
358
  }
418
359
  },
360
+ computed: {
361
+ buttonLoginDisabled() {
362
+ return !(this.usernameValidationStatus && this.passwordValidationStatus)
363
+ },
364
+ buttonSendLoginDisabled() {
365
+ return !this.emailValidationStatus
366
+ },
367
+ username: {
368
+ get() {
369
+ return this.modelValue.username
370
+ },
371
+ set(value) {
372
+ this.$emit("update:modelValue", {username: value, password: this.password})
373
+ }
374
+ },
375
+ password: {
376
+ get() {
377
+ return this.modelValue.password
378
+ },
379
+ set(value) {
380
+ this.$emit("update:modelValue", {username: this.username, password: value})
381
+ }
382
+ }
383
+ },
419
384
  methods: {
420
385
  modelChange() {
421
386
  this.$emit("update:modelValue", { "username": this.username, "password": this.password })
@@ -425,6 +390,18 @@ export default {
425
390
  },
426
391
  getRoute(language) {
427
392
  return getRoute(language)
393
+ },
394
+ checkValidationStatus(event, fieldType) {
395
+ if (event == null) {
396
+ return
397
+ }
398
+ if(fieldType === "username") {
399
+ this.usernameValidationStatus = event === "success";
400
+ } else if(fieldType === "password") {
401
+ this.passwordValidationStatus = event === "success";
402
+ } else {
403
+ this.emailValidationStatus = event === "success";
404
+ }
428
405
  }
429
406
  },
430
407
  watch: {
@@ -31,7 +31,7 @@
31
31
  <span v-if="navigationEntry.iconClass" :class="navigationEntry.iconClass"></span>
32
32
  <span v-if="navigationEntry.text">{{ navigationEntry.text }}</span>
33
33
  <span v-if="navigationEntry?.subentries?.length"
34
- :class="subentriesIconClass"
34
+ :class="['subentry-icon', subentriesIconClass]"
35
35
  ></span>
36
36
  </a>
37
37
  <!-- end type === href -->
@@ -47,7 +47,7 @@
47
47
  <span v-if="navigationEntry.iconClass" :class="navigationEntry.iconClass"></span>
48
48
  <span v-if="navigationEntry.text">{{ navigationEntry.text }}</span>
49
49
  <span v-if="navigationEntry.subentries && navigationEntry.subentries.length > 0"
50
- :class="subentriesIconClass"></span>
50
+ :class="['subentry-icon', subentriesIconClass]"></span>
51
51
  </router-link>
52
52
  <!-- end type === router -->
53
53
 
@@ -64,7 +64,7 @@
64
64
  <span v-if="navigationSubEntry.iconClass" :class="navigationSubEntry.iconClass"></span>
65
65
  <span v-if="navigationSubEntry.text">{{ navigationSubEntry.text }}</span>
66
66
  <span v-if="navigationSubEntry.subentries && navigationSubEntry.subentries.length > 0"
67
- :class="subentriesIconClass"
67
+ :class="['subentry-icon', subentriesIconClass]"
68
68
  ></span>
69
69
  </a>
70
70
  <!-- end type === href -->
@@ -78,7 +78,7 @@
78
78
  <span v-if="navigationSubEntry.iconClass" :class="navigationSubEntry.iconClass"></span>
79
79
  <span v-if="navigationSubEntry.text">{{ navigationSubEntry.text }}</span>
80
80
  <span v-if="navigationSubEntry.subentries && navigationSubEntry.subentries.length > 0"
81
- :class="subentriesIconClass"></span>
81
+ :class="['subentry-icon', subentriesIconClass]"></span>
82
82
  </router-link>
83
83
  <!-- end type === router -->
84
84
 
@@ -95,7 +95,7 @@
95
95
  <span v-if="navigationSubSubEntry.iconClass" :class="navigationSubSubEntry.iconClass"></span>
96
96
  <span v-if="navigationSubSubEntry.text">{{ navigationSubSubEntry.text }}</span>
97
97
  <span v-if="navigationSubSubEntry.subentries && navigationSubSubEntry.subentries.length > 0"
98
- :class="subentriesIconClass"
98
+ :class="['subentry-icon', subentriesIconClass]"
99
99
  ></span>
100
100
  </a>
101
101
  <!-- end type === href -->
@@ -109,7 +109,7 @@
109
109
  <span v-if="navigationSubSubEntry.iconClass" :class="navigationSubSubEntry.iconClass"></span>
110
110
  <span v-if="navigationSubSubEntry.text">{{ navigationSubSubEntry.text }}</span>
111
111
  <span v-if="navigationSubSubEntry.subentries && navigationSubSubEntry.subentries.length > 0"
112
- :class="subentriesIconClass"></span>
112
+ :class="['subentry-icon', subentriesIconClass]"></span>
113
113
  </router-link>
114
114
  <!-- end type === router -->
115
115
  </li>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div :class="['cmd-multiple-switch multiple-switch label', {disabled: status === 'disabled', error: status === 'error'}]" :aria-labelledby="labelId">
3
- <span :class="{hidden: !showLabel}" :id="labelId">{{ labelText }}</span>
3
+ <span v-show="showLabel" :id="htmlId">{{ labelText }}</span>
4
4
  <span class="flex-container no-gap no-flex">
5
5
  <label :class="{disabled: status === 'disabled'}" :for="multipleswitch.id"
6
6
  v-for="(multipleswitch, index) in multipleSwitches" :key="index">
@@ -20,11 +20,12 @@
20
20
  </template>
21
21
 
22
22
  <script>
23
- // import utils
24
- import {createUuid} from "../utils/common.js"
23
+ // import mixins
24
+ import Identifier from "../mixins/Identifier"
25
25
 
26
26
  export default {
27
27
  name: "CmdMultipleSwitch",
28
+ mixins: [Identifier],
28
29
  props: {
29
30
  /**
30
31
  * value for v-model
@@ -83,15 +84,6 @@ export default {
83
84
  required: false
84
85
  }
85
86
  },
86
- computed: {
87
- // get ID for accessibility
88
- labelId() {
89
- if(this.$attrs.id !== undefined) {
90
- return this.$attrs.id
91
- }
92
- return "label-" + createUuid()
93
- }
94
- },
95
87
  methods: {
96
88
  onChange(e) {
97
89
  if (typeof this.value === "string") {
@@ -0,0 +1,205 @@
1
+ <template>
2
+ <fieldset class="cmd-newsletter-subscription flex-container">
3
+ <!-- begin legend -->
4
+ <legend :class="{'hidden' : !showLegend}">{{ textLegend }}</legend>
5
+ <!-- end legend -->
6
+
7
+ <!-- begin cmd-input-group -->
8
+ <CmdInputGroup
9
+ inputTypes="radio"
10
+ :labelText="cmdInputGroup.labelText"
11
+ :showLabel="cmdInputGroup.showLabel"
12
+ :inputElements="cmdInputGroup.inputElements"
13
+ v-model="subscription"
14
+ />
15
+ <!-- end cmd-input-group -->
16
+
17
+ <!-- begin cmd-form-element -->
18
+ <CmdFormElement
19
+ element="input"
20
+ type="email"
21
+ :placeholder="cmdFormElementEmail.placeholder"
22
+ :labelText="cmdFormElementEmail.labelText"
23
+ id="cmd-email-newsletter-subscription"
24
+ :required="cmdFormElementEmail.required"
25
+ :useCustomTooltip="cmdFormElementEmail.useCustomTooltip"
26
+ v-model="email"
27
+ @validationStatusChange="checkValidationStatus"
28
+ />
29
+ <!-- end cmd-form-element -->
30
+
31
+ <div class="button-wrapper">
32
+ <!-- begin cmd-form-element -->
33
+ <CmdFormElement
34
+ element="button"
35
+ :type="buttonType"
36
+ :disabled="buttonDisabled"
37
+ :nativeButton="cmdFormElementSubmit"
38
+ @click="sendData"
39
+ />
40
+ <!-- end cmd-form-element -->
41
+ </div>
42
+ </fieldset>
43
+ </template>
44
+
45
+ <script>
46
+ // import components
47
+ import CmdFormElement from "./CmdFormElement"
48
+ import CmdInputGroup from "./CmdInputGroup"
49
+
50
+ export default {
51
+ name: "CmdNewsletterSubscription",
52
+ emits: ["button-click"],
53
+ components: {
54
+ CmdFormElement,
55
+ CmdInputGroup
56
+ },
57
+ data() {
58
+ return {
59
+ buttonDisabled: true
60
+ }
61
+ },
62
+ props: {
63
+ /**
64
+ * set value for v-model (must be named modelValue in vue3 if default v-model should be used)
65
+ */
66
+ modelValue: {
67
+ type: Object,
68
+ default() {
69
+ return {
70
+ subscription: "subscribe",
71
+ email: ""
72
+ }
73
+ }
74
+ },
75
+ buttonType: {
76
+ type: String,
77
+ default: "button",
78
+ validator(value) {
79
+ return value === "submit" || value === "button"
80
+ }
81
+ },
82
+ /**
83
+ * text used as legend for login-fieldset
84
+ *
85
+ * @requiredForAccessibility: true
86
+ */
87
+ textLegend: {
88
+ type: String,
89
+ default: "Stay up-to-date"
90
+ },
91
+ /**
92
+ * toggle legend visibility
93
+ */
94
+ showLegend: {
95
+ type: Boolean,
96
+ default: true
97
+ },
98
+ /**
99
+ * properties for CmdInputGroup-component
100
+ */
101
+ cmdInputGroup: {
102
+ type: Object,
103
+ default: function () {
104
+ return {
105
+ labelText: "Choose option",
106
+ showLabel: false,
107
+ inputElements: [
108
+ {
109
+ labelText: "Subscribe",
110
+ id: "radio-subscribe",
111
+ name: "cmd-subscribe-group",
112
+ value: "subscribe"
113
+ },
114
+ {
115
+ labelText: "Unsubscribe",
116
+ id: "radio-unsubscribe",
117
+ name: "cmd-subscribe-group",
118
+ value: "unsubscribe"
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ },
124
+ /**
125
+ * properties for CmdFormElement-component for email-field
126
+ */
127
+ cmdFormElementEmail: {
128
+ type: Object,
129
+ default: function () {
130
+ return {
131
+ labelText: "Email-Address:",
132
+ placeholder: "Enter your email-address",
133
+ required: true
134
+ }
135
+ }
136
+ },
137
+ /**
138
+ * properties for CmdFormElement-component for submit-button
139
+ */
140
+ cmdFormElementSubmit: {
141
+ type: Object,
142
+ default: function () {
143
+ return {
144
+ text: "Submit",
145
+ icon: {
146
+ show: true,
147
+ iconClass: "icon-message-send",
148
+ position: "before",
149
+ tooltip: ""
150
+ }
151
+ }
152
+ }
153
+ }
154
+ },
155
+ computed: {
156
+ subscription: {
157
+ get() {
158
+ return this.modelValue.subscription || "subscribe"
159
+ },
160
+ set(value) {
161
+ this.$emit("update:modelValue", {subscription: value, email: this.email})
162
+ }
163
+ },
164
+ email: {
165
+ get() {
166
+ return this.modelValue.email
167
+ },
168
+ set(value) {
169
+ this.$emit("update:modelValue", {subscription: this.subscription, email: value})
170
+ }
171
+ }
172
+ },
173
+ methods: {
174
+ sendData(event) {
175
+ this.$emit("button-click", {subscription: this.subscription, email: this.email, originalEvent: event})
176
+ },
177
+ checkValidationStatus(event) {
178
+ this.buttonDisabled = event !== "success"
179
+ }
180
+ }
181
+ }
182
+ </script>
183
+
184
+ <style lang="scss">
185
+ /* begin cmd-back-to-top-button ---------------------------------------------------------------------------------------- */
186
+ .cmd-back-to-top-button {
187
+ padding: var(--default-padding);
188
+ display: inline-block;
189
+ position: fixed;
190
+ right: 1rem;
191
+ bottom: 1rem;
192
+ text-decoration: none;
193
+ z-index: 1000;
194
+ border: var(--default-border);
195
+ background: var(--color-scheme-background-color);
196
+ border-radius: var(--full-circle);
197
+
198
+ &:hover, &:active, &:focus {
199
+ border-color: var(--primary-color);
200
+ transition: var(--default-transition);
201
+ }
202
+ }
203
+
204
+ /* cmd-back-to-top-button ------------------------------------------------------------------------------------------ */
205
+ </style>