comand-component-library 3.1.98 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "comand-component-library",
3
- "version": "3.1.98",
3
+ "version": "3.2.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "dependencies": {
20
20
  "clickout-event": "^1.1.2",
21
- "comand-frontend-framework": "^3.2.77",
21
+ "comand-frontend-framework": "^3.2.84",
22
22
  "core-js": "^3.20.1",
23
23
  "prismjs": "^1.27.0",
24
24
  "sass": "^1.54.9",
package/src/App.vue CHANGED
@@ -960,7 +960,7 @@
960
960
  <CmdWidthLimitationWrapper>
961
961
  <h2 class="headline-demopage">Login Form</h2>
962
962
  <CmdForm :use-validation="true" :use-fieldset="false">
963
- <CmdLoginForm v-model="loginData" textLegendLoginForm="Please log in"/>
963
+ <CmdLoginForm v-model="loginData" textLegendLoginForm="Please log in" />
964
964
  </CmdForm>
965
965
  <p>LoginData: {{ loginData }}</p>
966
966
  </CmdWidthLimitationWrapper>
@@ -52,7 +52,7 @@
52
52
  }
53
53
 
54
54
  #component-library {
55
- scroll-padding-top: unset !important;
55
+ /*scroll-padding-top: unset !important;*/
56
56
  scroll-snap-type: unset !important;
57
57
  }
58
58
 
@@ -298,5 +298,4 @@ html {
298
298
  }
299
299
  }
300
300
  }
301
-
302
- /* ---------------------------------------------- END COLORS-SCHEMES (LIGHT-/DARK-MODE) -------------------------------------------------- */
301
+ /* ---------------------------------------------- END COLORS-SCHEMES (LIGHT-/DARK-MODE) -------------------------------------------------- */
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <!-- begin boxType 'content' -->
3
- <div v-if="boxType === 'content'" :class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically, 'stretch-horizontally': stretchHorizontally}]">
3
+ <div v-if="boxType === 'content'"
4
+ :class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically, 'stretch-horizontally': stretchHorizontally}]">
4
5
  <template v-if="useSlots?.includes('header')">
5
6
  <!-- begin collapsible header with slot -->
6
7
  <div v-if="collapsible" class="box-header">
@@ -67,7 +68,7 @@
67
68
  <!-- begin boxType 'product' -->
68
69
  <a v-else-if="boxType === 'product' && product" :class="['cmd-box box product', {'stretch-vertically': stretchVertically, 'stretch-horizontally': stretchHorizontally}]" href="#" @click.prevent="clickOnProduct(product)">
69
70
  <div class="box-header flex-container vertical">
70
- <figure v-if="product.image">
71
+ <figure v-if="product.image !== undefined">
71
72
  <img :src="product.image.src" :alt="product.image.alt"/>
72
73
  <figcaption>{{ product.name }}</figcaption>
73
74
  </figure>
@@ -141,7 +142,7 @@ export default {
141
142
  active: true
142
143
  }
143
144
  },
144
- emits: ["click"],
145
+ emits: ["click", "toggle-collapse"],
145
146
  props: {
146
147
  collapsingBoxesOpen: {
147
148
  type: Boolean,
@@ -314,14 +315,15 @@ export default {
314
315
  }
315
316
 
316
317
  &.collapsible {
317
- .box-header {
318
+ a.box-header {
318
319
  justify-content: space-between;
320
+ background: var(--primary-color);
319
321
 
320
322
  &:hover, &:active, &:focus {
321
323
  background: var(--pure-white);
322
324
 
323
325
  * {
324
- color: var(--text-color);
326
+ color: var(--primary-color);
325
327
  }
326
328
  }
327
329
  }
@@ -3,7 +3,7 @@
3
3
  <div v-if="showFancyBox"
4
4
  :class="['cmd-fancybox', {'show-overlay': showOverlay}]"
5
5
  role="dialog"
6
- :aria-labelledby="htmlId">
6
+ :aria-labelledby="ariaLabelText">
7
7
  <div class="popup" :class="{'image' : fancyBoxImageUrl || fancyBoxGallery }">
8
8
  <!-- begin print buttons -->
9
9
  <div class="button-wrapper no-flex"
@@ -36,7 +36,7 @@
36
36
  <div :class="{'grayscale' : printInGrayscale}">
37
37
  <!-- begin CmdHeadline -->
38
38
  <CmdHeadline
39
- v-show="cmdHeadline?.show"
39
+ v-if="cmdHeadline?.show"
40
40
  :headlineText="cmdHeadline?.headlineText"
41
41
  :headlineLevel="cmdHeadline?.headlineLevel"
42
42
  :id="htmlId"
@@ -49,6 +49,7 @@
49
49
  <div v-else-if="fancyBoxContent" class="content" v-html="fancyBoxContent"></div>
50
50
  <div v-else-if="fancyBoxElements" class="content"></div>
51
51
  <div v-else-if="fancyBoxGallery" class="content">
52
+
52
53
  <!-- begin CmdSlideButton -->
53
54
  <CmdSlideButton @click.prevent="showPrevItem" slideButtonType="prev" />
54
55
  <!-- end CmdSlideButton -->
@@ -126,6 +127,15 @@
126
127
  }
127
128
  },
128
129
  props: {
130
+ /**
131
+ * sets aria-label-text on component
132
+ *
133
+ * @requiredForAccessibility: true
134
+ */
135
+ ariaLabelText: {
136
+ type: String,
137
+ required: true
138
+ },
129
139
  /**
130
140
  * set if content should be loaded by url
131
141
  */
@@ -218,6 +218,8 @@ import Tooltip from "../mixins/Tooltip.js"
218
218
  // import components
219
219
  import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
220
220
 
221
+ const TYPES_WITHOUT_MAXLENGTH = ["color", "date", "datetime-local", "file", "number", "range"]
222
+
221
223
  export default {
222
224
  inheritAttrs: false,
223
225
  name: "CmdFormElement",
@@ -708,7 +710,7 @@ export default {
708
710
  return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 5000
709
711
  }
710
712
 
711
- if (this.$attrs.type !== 'file' && this.$attrs.type !== 'number' && this.$attrs.type !== 'date') {
713
+ if (!TYPES_WITHOUT_MAXLENGTH.includes(this.$attrs.type)) {
712
714
  return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 255
713
715
  }
714
716
  return null
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <ul class="cmd-form-filters">
2
+ <ul v-if="options.length" class="cmd-form-filters">
3
3
  <li v-if="options.length > 1">
4
4
  <a href="#" @click.prevent="deleteAllFilters">
5
5
  <span v-if="linkDeleteAllFilters.icon && linkDeleteAllFilters.icon.show" :class="linkDeleteAllFilters.icon.iconClass" :title="linkDeleteAllFilters.icon.tooltip"></span>
@@ -18,7 +18,7 @@
18
18
  v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
19
19
  ref="tooltip"
20
20
  :showRequirements="showRequirements"
21
- :inputRequirements="inputRequirements"
21
+ :cmdListOfRequirements="listOfRequirements"
22
22
  :validationStatus="validationStatus"
23
23
  :validationMessage="getValidationMessage"
24
24
  :inputAttributes="$attrs"
@@ -43,7 +43,7 @@
43
43
  </div>
44
44
  <!-- end form elements -->
45
45
 
46
- <div class="option-wrapper flex-container" v-focus>
46
+ <div class="option-wrapper flex-container">
47
47
  <template v-if="options.forgotPassword || options.createAccount">
48
48
  <!-- begin link for 'forgot password' -->
49
49
  <a v-if="options.forgotPassword" href="#" @click.prevent="sendLogin = true">
@@ -14,6 +14,7 @@
14
14
  :key="shareButton.path" :class="['button', {disabled: userMustAcceptDataPrivacy && !dataPrivacyAccepted}]"
15
15
  :id="shareButton.id"
16
16
  :href="getUrl(shareButton)"
17
+ @click="preventOnDisabled"
17
18
  target="_blank"
18
19
  :title="tooltip(shareButton.tooltip)">
19
20
  <span v-if="shareButton.iconClass && shareButton.iconPosition !== 'right'" :class="shareButton.iconClass"></span>
@@ -139,7 +140,20 @@ export default {
139
140
  // if path is given completely by json-data
140
141
  return shareButton.path
141
142
  }
142
- return null
143
+ return "#"
144
+ },
145
+ preventOnDisabled(event) {
146
+ let clickedElement = event.target
147
+
148
+ if(clickedElement.tagName !== "A") {
149
+ // get surrounding <a> if inner <span> is clicked
150
+ clickedElement = clickedElement.closest("a")
151
+ }
152
+
153
+ // href must be set due to html-validity, so click must be prevented if href contains "#" only (equals button is styled as disabled)
154
+ if(clickedElement.getAttribute("href") === "#") {
155
+ event.preventDefault()
156
+ }
143
157
  },
144
158
  tooltip(tooltip) {
145
159
  if(this.userMustAcceptDataPrivacy && this.dataPrivacyAccepted) {
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div :class="['cmd-site-header', { sticky: sticky, 'navigation-inline': navigationInline }]" role="banner">
2
+ <div :class="['cmd-site-header', {sticky: sticky, 'navigation-inline': navigationInline }]" role="banner">
3
3
  <!-- begin slot for elements above header -->
4
4
  <div v-if="$slots.topheader" class="top-header">
5
5
  <slot name="topheader"></slot>
@@ -7,14 +7,19 @@
7
7
  <!-- end for elements above header -->
8
8
 
9
9
  <!-- begin header-wrapper with slots for logo and other header elements -->
10
- <header v-if="$slots.logo || $slots.header || $slots.navigation" :class="useGrid ? 'grid-container-create-columns': 'flex-container'">
10
+ <header
11
+ v-if="$slots.logo || $slots.header || $slots.navigation"
12
+ :class="[useGrid ? 'grid-container-create-columns': 'flex-container', {'has-navigation': cmdMainNavigation || $slots.navigation, 'one-child-only' : oneChildOnly},]">
11
13
  <slot name="logo"></slot>
12
14
  <slot name="header"></slot>
13
15
  <slot name="navigation"></slot>
14
16
  </header>
15
17
  <!-- end header-wrapper with slots for logo and other header elements -->
16
18
 
17
- <header v-if="cmdCompanyLogo || cmdMainNavigation?.navigationEntries?.length" :class="useGrid ? 'grid-container-create-columns': 'flex-container'">
19
+ <header
20
+ v-if="cmdCompanyLogo || cmdMainNavigation?.navigationEntries?.length"
21
+ :class="[{'has-navigation': cmdMainNavigation, 'one-child-only' : oneChildOnly}, useGrid ? 'grid-container-create-columns': 'flex-container']">
22
+
18
23
  <!-- begin CmdCompanyLogo -->
19
24
  <CmdCompanyLogo
20
25
  v-if="cmdCompanyLogo"
@@ -78,7 +83,7 @@ export default {
78
83
  default: true
79
84
  },
80
85
  /**
81
- * properties for cmdCompanyLogo-component
86
+ * properties for CmdCompanyLogo-component
82
87
  */
83
88
  cmdCompanyLogo: {
84
89
  type: Object,
@@ -91,6 +96,12 @@ export default {
91
96
  type: Object,
92
97
  required: false
93
98
  }
99
+ },
100
+ computed: {
101
+ oneChildOnly() {
102
+ // check if sum of children equals "1" by turning objects into booleans, which will be converted to numbers by using "+".
103
+ return (!!this.cmdCompanyLogo + !!this.cmdMainNavigation + !!this.$slots.logo + !!this.$slots.header + !!this.$slots.navigation) === 1
104
+ }
94
105
  }
95
106
  }
96
107
  </script>
@@ -118,10 +129,6 @@ export default {
118
129
  padding: 0 var(--default-padding);
119
130
  }
120
131
 
121
- &:not(.navigation-inline) header {
122
- padding-bottom: 0;
123
- }
124
-
125
132
  .cmd-main-navigation nav {
126
133
  width: auto;
127
134
  }
@@ -148,11 +155,21 @@ export default {
148
155
  border-bottom: 0;
149
156
  }
150
157
 
158
+
159
+
151
160
  header {
152
161
  padding-top: calc(var(--default-padding) * 2);
153
162
  padding-bottom: calc(var(--default-padding) * 2);
154
- grid-template-rows: 1fr min-content;
155
- grid-template-areas: "company-logo" "main-navigation";
163
+
164
+ &.has-navigation {
165
+ grid-template-rows: 1fr min-content;
166
+ grid-template-areas: "company-logo" "main-navigation";
167
+ padding-bottom: 0;
168
+ }
169
+
170
+ &.one-child-only {
171
+ gap: 0;
172
+ }
156
173
 
157
174
  &.flex-container {
158
175
  width: 100%;
@@ -175,12 +192,19 @@ export default {
175
192
  .cmd-company-logo {
176
193
  grid-column: span var(--grid-small-span);
177
194
  }
195
+
196
+ > *:only-child {
197
+ gap: 0;
198
+ }
178
199
  }
179
200
 
180
201
  &.navigation-inline {
181
202
  header {
182
- grid-template-rows: 1fr;
183
- grid-template-areas: "company-logo main-navigation";
203
+ &.has-navigation {
204
+ grid-template-rows: 1fr;
205
+ grid-template-areas: "company-logo main-navigation";
206
+ padding-bottom: calc(var(--default-padding) * 2);
207
+ }
184
208
 
185
209
  .cmd-company-logo {
186
210
  grid-column: span var(--grid-small-span);
@@ -188,6 +212,7 @@ export default {
188
212
 
189
213
  #main-navigation-wrapper {
190
214
  display: flex;
215
+ align-items: center;
191
216
  border: 0;
192
217
  grid-column: span var(--grid-large-span);
193
218
  background: none;
@@ -141,13 +141,35 @@ export default {
141
141
  }
142
142
 
143
143
  > a[class*="icon-"]:not(.button) {
144
- font-size: 1rem;
145
- color: var(--pure-white) !important;
146
- padding: 0;
144
+ font-size: 0.8rem;
145
+ font-weight: bold;
146
+ color: var(--pure-white);
147
147
  position: absolute;
148
148
  right: 0.5rem;
149
149
  text-decoration: none;
150
150
  top: 0.5rem;
151
+ border: var(--default-border);
152
+ border-color: var(--pure-white);
153
+ border-radius: var(--full-circle);
154
+ padding: calc(var(--default-padding) / 2);
155
+
156
+ &:hover, &:active, &:focus {
157
+ color: var(--hyperlink-color);
158
+ border-color: var(--hyperlink-color);
159
+ background: var(--pure-white);
160
+ }
161
+ }
162
+
163
+ &.warning {
164
+ > a[class*="icon-"]:not(.button) {
165
+ color: var(--text-color);
166
+ border-color: var(--text-color);
167
+
168
+ &:hover, &:active, &:focus {
169
+ color: var(--hyperlink-color);
170
+ border-color: var(--hyperlink-color);
171
+ }
172
+ }
151
173
  }
152
174
  }
153
175
 
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <div class="cmd-tabs">
3
3
  <ul :class="{'stretch-tabs' : stretchTabs}" role="tablist">
4
- <li :class="{active : showTab === index}" v-for="(tab, index) in tabs" :key="index" role="tab">
5
- <a @click.prevent="setActiveTab(index)" :title="!tab.name ? tab.tooltip : false">
4
+ <li v-for="(tab, index) in tabs" :key="index" role="tab">
5
+ <a :class="{active : showTab === index}" @click.prevent="setActiveTab(index)" :title="!tab.name ? tab.tooltip : false" href="#">
6
6
  <span v-if="tab.iconClass" :class="tab.iconClass"></span>
7
7
  <span v-if="tab.name">{{ tab.name }}</span>
8
8
  </a>
@@ -112,8 +112,6 @@ export default {
112
112
  border-top-right-radius: var(--border-radius);
113
113
  list-style-type: none;
114
114
  background: var(--color-scheme-background-color);
115
- border: var(--default-border);
116
- border-bottom: 0;
117
115
 
118
116
  &.active {
119
117
  border-color: var(--primary-color);
@@ -125,12 +123,16 @@ export default {
125
123
  justify-content: center;
126
124
  padding: var(--default-padding);
127
125
  color: var(--color-scheme-text-color);
126
+ border: var(--default-border);
127
+ border-bottom: 0;
128
128
  border-top-left-radius: var(--border-radius);
129
129
  border-top-right-radius: var(--border-radius);
130
+ text-decoration: none;
130
131
 
131
- &:hover, &:active, &:focus {
132
+ &:hover, &:active, &:focus, &.active {
132
133
  cursor: pointer;
133
- color: var(--primary-color);
134
+ color: var(--hyperlink-color);
135
+ border-color: var(--hyperlink-color);
134
136
  }
135
137
  }
136
138
  }
@@ -2,6 +2,15 @@
2
2
  <div class="cmd-width-limitation-wrapper" :class="{'sticky': sticky}">
3
3
  <section v-if="innerWrapper" :class="setInnerClass">
4
4
  <a v-if="anchorId" :id="anchorId"></a>
5
+ <!-- begin cmd-headline -->
6
+ <CmdHeadline
7
+ v-if="cmdHeadline"
8
+ :pre-headline-text="cmdHeadline.preHeadlineLevel"
9
+ :headline-text="cmdHeadline.headlineText"
10
+ :headline-level="cmdHeadline.headlineLevel"
11
+ />
12
+ <!-- end cmd-headline -->
13
+
5
14
  <!-- begin slot-content -->
6
15
  <slot></slot>
7
16
  <!-- end slot-content -->
@@ -16,8 +25,14 @@
16
25
  </template>
17
26
 
18
27
  <script>
28
+ // import components
29
+ import CmdHeadline from "./CmdHeadline"
30
+
19
31
  export default {
20
32
  name: "CmdWidthLimitationWrapper",
33
+ components: {
34
+ CmdHeadline
35
+ },
21
36
  props: {
22
37
  /**
23
38
  * set a html-tag as inner tag
@@ -67,7 +82,16 @@ export default {
67
82
  anchorId: {
68
83
  type: String,
69
84
  required: false
70
- }
85
+ },
86
+ /**
87
+ * properties for CmdHeadline-component
88
+ *
89
+ * @requiredForAccessibilty
90
+ */
91
+ cmdHeadline: {
92
+ type: Object,
93
+ required: false
94
+ },
71
95
  },
72
96
  computed: {
73
97
  setInnerClass() {
@@ -1,4 +1,14 @@
1
1
  {
2
+ "ariaLabelText": {
3
+ "comments": [
4
+ "sets aria-label-text on component"
5
+ ],
6
+ "annotations": {
7
+ "requiredForAccessibility": [
8
+ "true"
9
+ ]
10
+ }
11
+ },
2
12
  "url": {
3
13
  "comments": [
4
14
  "set if content should be loaded by url"
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "cmdCompanyLogo": {
33
33
  "comments": [
34
- "properties for cmdCompanyLogo-component"
34
+ "properties for CmdCompanyLogo-component"
35
35
  ]
36
36
  },
37
37
  "cmdMainNavigation": {
@@ -37,5 +37,12 @@
37
37
  "comments": [
38
38
  "set id for (invisible) anchor to enable shortcuts"
39
39
  ]
40
+ },
41
+ "cmdHeadline": {
42
+ "comments": [
43
+ "properties for CmdHeadline-component",
44
+ "",
45
+ "@requiredForAccessibilty"
46
+ ]
40
47
  }
41
48
  }
package/src/index.js CHANGED
@@ -47,5 +47,8 @@ export { default as CmdWidthLimitationWrapper } from '@/components/CmdWidthLimit
47
47
  export { default as DirFocus } from '@/directives/focus'
48
48
  export { default as DirTelephone } from '@/directives/telephone'
49
49
 
50
+ // export directives
51
+ export { createUuid, createHtmlId } from '@/utils/common'
52
+
50
53
  // export composables
51
54
  export { useSequence } from '@/composables/sequence'
package/src/main.js CHANGED
@@ -13,6 +13,7 @@ import 'comand-frontend-framework/src/assets/css/framework-iconfont.css'
13
13
  /* end imports css from comand-frontend-framework ---------------------------------------------------------------------------------------- */
14
14
 
15
15
  import { createApp } from 'vue'
16
+
16
17
  // import App from './App.vue'
17
18
  import App from './App'
18
19
  //import { createRouter, createWebHistory } from 'vue-router'
@@ -21,10 +22,9 @@ import "clickout-event"
21
22
  /* import directives */
22
23
  // directive to format telephone- and fax-number
23
24
  import directiveTelephone from "./directives/telephone"
25
+
24
26
  // directive to set focus on specific form-elements
25
27
  import directiveFocus from "./directives/focus"
26
- // directive to set scroll-padding to place anchors correctly below sticky header
27
- import directiveScrollPadding from "./directives/scrollPadding"
28
28
 
29
29
  /* begin imports css from comand-component-library ---------------------------------------------------------------------------------------- */
30
30
  /* import additional iconfont containing company-logos */
@@ -60,4 +60,4 @@ import router from "./router"
60
60
  // })
61
61
 
62
62
  // createApp(App).use(router).directive('telephone', directiveTelephone).directive('focus', directiveFocus).mount('#app')
63
- createApp(App).use(router).directive('telephone', directiveTelephone).directive('focus', directiveFocus).directive('scrollPadding', directiveScrollPadding).mount('#app')
63
+ createApp(App).use(router).directive('telephone', directiveTelephone).directive('focus', directiveFocus).mount('#app')
@@ -1,8 +1,3 @@
1
- function isFrameMode() {
2
- const frameUrl = new URL(location)
3
- return frameUrl.searchParams.has("frameMode")
4
- }
5
-
6
1
  function createUuid(){
7
2
  let dt = new Date().getTime()
8
3
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
@@ -16,4 +11,4 @@ function createHtmlId() {
16
11
  return "cmd-" + createUuid()
17
12
  }
18
13
 
19
- export {isFrameMode, createUuid, createHtmlId}
14
+ export {createUuid, createHtmlId}
@@ -1,118 +0,0 @@
1
- <template>
2
- <div :class="['cmd-multiple-switch multiple-switch label', {disabled: status === 'disabled', error: status === 'error'}]" :aria-labelledby="labelId">
3
- <span v-show="showLabel" :id="htmlId">{{ labelText }}</span>
4
- <span class="flex-container no-gap no-flex">
5
- <label :class="{disabled: status === 'disabled'}" :for="multipleswitch.id"
6
- v-for="(multipleswitch, index) in multipleSwitches" :key="index">
7
- <input :type="switchTypes"
8
- :id="multipleswitch.id"
9
- :disabled="status === 'disabled'"
10
- :name="switchNames"
11
- :value="multipleswitch.value"
12
- :checked="isChecked(multipleswitch)"
13
- @change="onChange"
14
- />
15
- <span v-if="multipleswitch.iconClass" :class="multipleswitch.iconClass"></span>
16
- <span v-if="multipleswitch.labelText">{{ multipleswitch.labelText }}</span>
17
- </label>
18
- </span>
19
- </div>
20
- </template>
21
-
22
- <script>
23
- // import mixins
24
- import Identifier from "../mixins/Identifier"
25
-
26
- export default {
27
- name: "CmdMultipleSwitch",
28
- mixins: [Identifier],
29
- props: {
30
- /**
31
- * value for v-model
32
- */
33
- value: {
34
- type: [String, Array],
35
- required: false,
36
- default: ""
37
- },
38
- /**
39
- * toggle label visibility
40
- */
41
- showLabel: {
42
- type: Boolean,
43
- default: true
44
- },
45
- /**
46
- * text for label
47
- *
48
- * @requiredForAccessibility: true
49
- */
50
- labelText: {
51
- type: String,
52
- required: false
53
- },
54
- /**
55
- * list of switches
56
- */
57
- multipleSwitches: {
58
- type: Array,
59
- required: true
60
- },
61
- /**
62
- * set type for switches
63
- *
64
- * @allowedValues: checkbox, radio
65
- */
66
- switchTypes: {
67
- type: String,
68
- required: true
69
- },
70
- /**
71
- * name-attribute for switches
72
- */
73
- switchNames: {
74
- type: String,
75
- required: true
76
- },
77
- /**
78
- * status for all switches
79
- *
80
- * @allowedValues: error, disabled
81
- */
82
- status: {
83
- type: String,
84
- required: false
85
- }
86
- },
87
- methods: {
88
- onChange(e) {
89
- if (typeof this.value === "string") {
90
- this.$emit("update:value", e.target.value)
91
- } else if (this.value !== undefined) {
92
- let values = [...this.value]
93
- if (e.target.checked) {
94
- values.push(e.target.value)
95
- } else {
96
- values = values.filter(value => value !== e.target.value)
97
- }
98
- this.$emit("update:value", values)
99
- }
100
- },
101
- isChecked(multipleswitch) {
102
- if (typeof this.value === "string") {
103
- return this.value === multipleswitch.value
104
- }
105
- if (this.value !== undefined) {
106
- return this.value.includes(multipleswitch.value)
107
- }
108
- return false
109
- }
110
- }
111
- }
112
- </script>
113
-
114
- <style lang="scss">
115
- /* begin cmd-multiple-switch ------------------------------------------------------------------------------------------ */
116
-
117
- /* end cmd-multiple-switch ------------------------------------------------------------------------------------------ */
118
- </style>
@@ -1,6 +0,0 @@
1
- export default {
2
- mounted(el) {
3
- const heightHeader = el.outerHeight
4
- document.documentElement.style.scrollPaddingTop = (heightHeader / 10) + "rem"
5
- }
6
- }