comand-component-library 3.3.83 → 3.3.85

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 +5630 -3936
  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 +150 -21
  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,31 +1,85 @@
1
1
  <template>
2
- <div v-if="!editModeContext?.editing" :class="['cmd-headline', {'has-pre-headline-text': preHeadlineText, 'has-icon': headlineIcon?.iconClass}, getTextAlign]">
2
+ <div v-if="!editModeContext || settingsContext || mainSidebarContext"
3
+ :class="['cmd-headline', {'has-pre-headline-text': preHeadlineText, 'has-icon': headlineIcon?.iconClass}, getTextAlign]">
3
4
  <!-- begin CmdIcon -->
4
5
  <CmdIcon v-if="headlineIcon" :iconClass="headlineIcon?.iconClass" :type="headlineIcon?.iconType" />
5
6
  <!-- end CmdIcon -->
6
7
 
7
8
  <div v-if="preHeadlineText">
8
9
  <span class="pre-headline-text">{{ preHeadlineText }}</span>
9
- <component :is="getHeadlineTag">
10
+ <component v-if="headlineText" :is="headlineTag">
10
11
  <!-- being slot -->
11
12
  <slot>{{ headlineText }}</slot>
12
13
  <!-- end slot -->
13
14
  </component>
14
15
  </div>
15
- <component v-else :is="getHeadlineTag">
16
+ <component v-else-if="headlineText" :is="headlineTag">
16
17
  <!-- being slot -->
17
18
  <slot>{{ headlineText }}</slot>
18
19
  <!-- end slot -->
19
20
  </component>
20
21
  </div>
21
22
  <!-- begin edit-mode -->
22
- <input v-else type="text" :class="['edit-mode', 'headline', 'h'+ headlineLevel]" v-model="editableHeadlineText" />
23
+ <EditComponentWrapper
24
+ v-else
25
+ ref="editComponentWrapper"
26
+ class="edit-items"
27
+ :showComponentName="false"
28
+ :allowedComponentTypes="[]"
29
+ componentName="CmdHeadline"
30
+ :componentProps="{headlineText, headlineLevel}"
31
+ :componentPath="headlineComponentPath"
32
+ :allowDeleteComponent="!!headlineText"
33
+ >
34
+ <template v-slot="slotProps">
35
+ <CmdFormElement
36
+ v-if="slotProps.editing"
37
+ element="input"
38
+ type="text"
39
+ :class="['edit-mode', 'headline', 'h'+ headlineLevel, getTextAlign]"
40
+ labelText="Headline"
41
+ :showLabel="false"
42
+ placeholder="Headline"
43
+ v-model="editableHeadlineText"
44
+ />
45
+ <div v-else-if="headlineText"
46
+ :class="['cmd-headline', {'has-pre-headline-text': preHeadlineText, 'has-icon': headlineIcon?.iconClass}, getTextAlign]">
47
+ <!-- begin CmdIcon -->
48
+ <CmdIcon v-if="headlineIcon" :iconClass="headlineIcon?.iconClass" :type="headlineIcon?.iconType"/>
49
+ <!-- end CmdIcon -->
50
+
51
+ <div v-if="preHeadlineText">
52
+ <span class="pre-headline-text">{{ preHeadlineText }}</span>
53
+ <component v-if="headlineText" :is="headlineTag">
54
+ <!-- being slot -->
55
+ <slot>{{ headlineText }}</slot>
56
+ <!-- end slot -->
57
+ </component>
58
+ </div>
59
+ <component v-else-if="headlineText" :is="headlineTag">
60
+ <!-- being slot -->
61
+ <slot>{{ headlineText }}</slot>
62
+ <!-- end slot -->
63
+ </component>
64
+ </div>
65
+ <!-- begin show placeholder if no image exists (and component is not edited) -->
66
+ <button v-else-if="componentActive" type="button" class="button confirm" @click="onAddItem">
67
+ <span class="icon-plus"></span>
68
+ <span>Add new headline</span>
69
+ </button>
70
+ <!-- end show placeholder if no image exists (and component is not edited) -->
71
+ </template>
72
+ </EditComponentWrapper>
23
73
  <!-- end edit-mode -->
24
74
  </template>
25
75
 
26
76
  <script>
77
+ import EditMode from "../mixins/EditMode.vue"
78
+ import {buildComponentPath, findEditComponentWrapper, updateHandlerProvider} from "../utils/editmode.js"
79
+
27
80
  export default {
28
81
  name: "CmdHeadline",
82
+ mixins: [EditMode],
29
83
  inject: {
30
84
  editModeContext: {
31
85
  default: null
@@ -33,7 +87,8 @@ export default {
33
87
  },
34
88
  data() {
35
89
  return {
36
- editableHeadlineText: this.headlineText
90
+ editableHeadlineText: null,
91
+ editablePreHeadlineText: null
37
92
  }
38
93
  },
39
94
  props: {
@@ -49,7 +104,7 @@ export default {
49
104
  */
50
105
  headlineLevel: {
51
106
  type: [String, Number],
52
- required: true
107
+ default: "2"
53
108
  },
54
109
  /**
55
110
  * small pre-headline-text above main-headline
@@ -73,16 +128,16 @@ export default {
73
128
  textAlign: {
74
129
  type: String,
75
130
  default: null
76
- },
77
- editModeContextData: {
78
- type: Object
79
131
  }
80
132
  },
81
- mounted() {
82
- this.editModeContext?.addSaveHandler(this.onSave)
83
- },
84
133
  computed: {
85
- getHeadlineTag() {
134
+ componentActive() {
135
+ return this.editModeContext?.system.isActiveComponent(buildComponentPath(findEditComponentWrapper(this)))
136
+ },
137
+ headlineComponentPath() {
138
+ return this.componentPath || ["props", "cmdHeadline"]
139
+ },
140
+ headlineTag() {
86
141
  if(this.headlineLevel) {
87
142
  return "h" + this.headlineLevel
88
143
  }
@@ -96,17 +151,36 @@ export default {
96
151
  }
97
152
  },
98
153
  methods: {
99
- onSave() {
154
+ updateHandlerProvider() {
100
155
  const headlineText = this.editableHeadlineText
101
- return {
102
- editModeContextData: {
103
- ...(this.editModeContextData || {})
104
- },
105
- headlineText,
156
+ const preHeadlineText = this.editablePreHeadlineText
157
+ const headlineLevel = this.headlineLevel
158
+
159
+ return updateHandlerProvider(this, {
106
160
  update(props) {
107
161
  props.headlineText = headlineText
162
+ props.preHeadlineText = preHeadlineText
163
+ props.headlineLevel = headlineLevel
108
164
  }
165
+ })
166
+ },
167
+ onAddItem() {
168
+ // execute editComponent-function from editComponentWrapper to enter editMode directly on "add"
169
+ this.$refs.editComponentWrapper.editComponent()
109
170
  }
171
+ },
172
+ watch: {
173
+ headlineText: {
174
+ handler() {
175
+ this.editableHeadlineText = this.headlineText
176
+ },
177
+ immediate: true
178
+ },
179
+ preHeadlineText: {
180
+ handler() {
181
+ this.editablePreHeadlineText = this.preHeadlineText
182
+ },
183
+ immediate: true
110
184
  }
111
185
  }
112
186
  }
@@ -117,50 +191,103 @@ export default {
117
191
  //@import '../assets/styles/variables';
118
192
 
119
193
  .cmd-headline {
120
- margin-bottom: var(--default-margin);
121
- gap: calc(var(--default-gap) / 2);
194
+ margin-bottom: var(--default-margin);
195
+ gap: calc(var(--default-gap) / 2);
196
+
197
+ &.text-center > * {
198
+ text-align: center;
199
+ }
200
+
201
+ &.text-right > * {
202
+ text-align: right;
203
+ }
204
+
205
+ &.has-pre-headline-text {
206
+ text-align: inherit;
207
+ }
208
+
209
+ p {
210
+ margin-bottom: 0;
211
+ }
212
+
213
+ &:has(span[class*="icon"]) {
214
+ display: flex;
215
+ align-items: center;
216
+ }
217
+
218
+ &:has(h1) span[class*="icon"] {
219
+ font-size: calc(var(--headline-font-size-h1) * 1.6);
220
+ }
221
+
222
+ &:has(h2) span[class*="icon"] {
223
+ font-size: calc(var(--headline-font-size-h2) * 1.8);
224
+ }
122
225
 
123
- &.text-center > * {
124
- text-align: center;
125
- }
226
+ &:has(h3) span[class*="icon"] {
227
+ font-size: calc(var(--headline-font-size-h3) * 1.9);
228
+ }
229
+
230
+ &:has(h4) span[class*="icon"] {
231
+ font-size: calc(var(--headline-font-size-h4) * 2);
232
+ }
126
233
 
127
- &.text-right > * {
128
- text-align: right;
129
- }
234
+ &:has(h5) span[class*="icon"] {
235
+ font-size: calc(var(--headline-font-size-h5) * 2.1);
236
+ }
130
237
 
131
- &.has-icon {
132
- display: flex;
133
- align-items: center;
134
- }
238
+ &:has(h6) span[class*="icon"] {
239
+ font-size: calc(var(--headline-font-size-h6) * 2.2);
240
+ }
135
241
 
136
- &.has-pre-headline-text {
137
- text-align: inherit;
242
+ &:has(h4, h5, h6) .pre-headline-text {
243
+ font-size: var(--font-size-small);
244
+ }
138
245
 
139
- [class*="icon-"] {
140
- font-size: 5rem;
246
+ .pre-headline-text {
247
+ line-height: 1;
141
248
  }
142
- }
143
249
 
144
- p {
145
- margin-bottom: 0;
146
- }
250
+ h1, h2, h3, h4, h5, h6 {
251
+ margin: 0;
147
252
 
148
- h1, h2, h3, h4, h5, h6 {
149
- margin: 0;
253
+ &:only-child {
254
+ flex: none;
255
+ width: 100%;
256
+ }
257
+ }
258
+ }
150
259
 
151
- &:only-child {
152
- flex: none;
153
- width: 100%;
260
+ .edit-mode label.headline {
261
+ input {
262
+ padding: 0;
263
+ height: auto;
264
+ font-weight: var(--headline-font-weight);
154
265
  }
155
- }
156
266
 
157
- //@media only screen and (max-width: $small-max-width) {
158
- // flex-direction: column;
159
- //
160
- // h1 {
161
- // margin-bottom: calc(var(--default-margin) * 2);
162
- // }
163
- //}
267
+ &.h1 input {
268
+ font-size: var(--headline-font-size-h1);
269
+ text-transform: var(--headline-text-transform);
270
+ }
271
+
272
+ &.h2 input {
273
+ font-size: var(--headline-font-size-h2);
274
+ }
275
+
276
+ &.h3 input {
277
+ font-size: var(--headline-font-size-h3);
278
+ }
279
+
280
+ &.h4 input {
281
+ font-size: var(--headline-font-size-h4);
282
+ }
283
+
284
+ &.h5 input {
285
+ font-size: var(--headline-font-size-h5);
286
+ }
287
+
288
+ &.h6 input {
289
+ font-size: var(--headline-font-size-h6);
290
+ }
164
291
  }
165
292
  /* end cmd-headline ------------------------------------------------------------------------------------------ */
166
293
  </style>
@@ -1,42 +1,105 @@
1
1
  <template>
2
2
  <!-- begin edit-mode -->
3
- <figure v-if="editing" :class="['cmd-image flex-container vertical', getTextAlign]">
4
- <template v-if="figcaption?.position === 'top'">
3
+ <EditComponentWrapper
4
+ v-if="editModeContext"
5
+ ref="editComponentWrapper"
6
+ class="edit-items"
7
+ :showComponentName="false"
8
+ :allowedComponentTypes="[]"
9
+ componentName="CmdImage"
10
+ :componentProps="{image, figcaption}"
11
+ :componentPath="imageComponentPath"
12
+ :allowDeleteComponent="!!imageSource"
13
+ :itemProvider="editModeConfig?.allowAddItem !== false ? itemProvider : null"
14
+ >
15
+ <template v-slot="slotProps">
16
+ <figure :class="['cmd-image flex-container no-gap vertical', textAlign]">
17
+ <!-- begin figcaption above image -->
18
+ <template v-if="figcaption.show && figcaption?.position === 'top'">
5
19
  <CmdFormElement
20
+ v-if="slotProps.editing"
6
21
  element="input"
7
22
  type="text"
23
+ :class="[textAlign, 'edit-mode']"
8
24
  :required="true"
9
25
  labelText="Text figcaption"
10
26
  v-model="editableFigcaptionText"
11
27
  />
28
+ <figcaption v-else-if="figcaption?.text">{{ figcaption?.text }}</figcaption>
12
29
  </template>
13
- <div :class="['box drop-area flex-container vertical', { 'allow-drop': allowDrop }]" v-on="dragAndDropHandler" title="Drag new image to this area to replace old one!">
30
+ <!-- end figcaption above image -->
31
+
32
+ <!-- begin image-wrapper -->
33
+ <template v-if="slotProps.editing">
34
+ <!-- begin image with drop-area -->
35
+ <a href="#" :class="['box drop-area flex-container vertical', { 'allow-drop': allowDrop }]"
36
+ v-on="dragAndDropHandler"
37
+ @click.prevent="selectFiles"
38
+ title="Drag new image to this area to replace old one!">
14
39
  <span class="icon-image"></span>
15
- <img :src="imageSource" :alt="image.alt" :title="image.tooltip"/>
16
- </div>
40
+ <img :src="imageSource" :alt="image?.alt" :title="image?.tooltip"/>
41
+ </a>
42
+ <!-- end image with drop-area -->
43
+
44
+ <!-- begin CmdFormElement -->
45
+ <CmdFormElement
46
+ class="hidden"
47
+ element="input"
48
+ type="file"
49
+ labelText="Select new image"
50
+ :disabled="uploadInitiated"
51
+ @change="fileSelected"
52
+ ref="formElement"
53
+ />
54
+ <!-- end CmdFormElement -->
55
+ </template>
56
+ <template v-else-if="imageSource">
57
+ <!-- begin image without drop-area -->
58
+ <img :src="imageSource" :alt="image?.alt" :title="image?.tooltip"/>
59
+ <!-- end image without drop-area -->
60
+ </template>
61
+ <!-- end image-wrapper -->
17
62
 
18
- <template v-if="figcaption?.position !== 'top'">
63
+ <!-- begin figcaption below image -->
64
+ <template v-if="figcaption.show && figcaption?.position !== 'top'">
19
65
  <CmdFormElement
66
+ v-if="slotProps.editing"
20
67
  element="input"
21
68
  type="text"
22
- :class="getTextAlign"
69
+ :class="[textAlign, 'edit-mode']"
23
70
  :required="true"
24
71
  labelText="Text figcaption"
25
72
  :showLabel="false"
26
73
  v-model="editableFigcaptionText"
74
+ placeholder="figcaption"
27
75
  />
76
+ <figcaption v-else-if="figcaption?.text">{{ figcaption?.text }}</figcaption>
28
77
  </template>
78
+ <!-- end figcaption below image -->
79
+
80
+ <!-- begin show placeholder if no image exists (and component is not edited) -->
81
+ <button v-if="!slotProps.editing && !imageSource" type="button" class="button confirm"
82
+ @click="onAddItem">
83
+ <span class="icon-add"></span>
84
+ <span>Add new image</span>
85
+ </button>
86
+ <!-- end show placeholder if no image exists (and component is not edited) -->
29
87
  </figure>
88
+ </template>
89
+ </EditComponentWrapper>
30
90
  <!-- end edit-mode -->
31
91
 
32
- <figure v-else :class="['cmd-image', getTextAlign]">
92
+ <!-- begin default-view -->
93
+ <figure v-else :class="['cmd-image', textAlign]">
33
94
  <figcaption v-if="figcaption?.show && figcaption?.position === 'top'">{{ figcaption?.text }}</figcaption>
34
- <img :src="imageSource" :alt="image.alt" :title="image.tooltip"/>
95
+ <img :src="imageSource" :alt="image?.alt" :title="image?.tooltip"/>
35
96
  <figcaption v-if="figcaption?.show && figcaption?.position !== 'top'">{{ figcaption?.text }}</figcaption>
36
97
  </figure>
98
+ <!-- end default-view -->
37
99
  </template>
38
100
 
39
101
  <script>
102
+ import {createUuid} from "../utils/common.js"
40
103
  import {checkAndUploadFile} from "../utils/checkAndUploadFile"
41
104
  import EditMode from "../mixins/EditMode.vue"
42
105
  import {updateHandlerProvider} from "../utils/editmode.js"
@@ -53,6 +116,7 @@ export default {
53
116
  uploadInitiated: false,
54
117
  allowDrop: false,
55
118
  showFigcaption: true,
119
+ figcaptionText: null,
56
120
  figcaptionPosition: null,
57
121
  figcaptionTextAlign: null,
58
122
  tooltip: null,
@@ -81,8 +145,7 @@ export default {
81
145
  text: "Right",
82
146
  value: "right"
83
147
  }
84
- ],
85
- figcaptionText: null
148
+ ]
86
149
  }
87
150
  },
88
151
  props: {
@@ -91,7 +154,7 @@ export default {
91
154
  */
92
155
  image: {
93
156
  type: Object,
94
- required: true
157
+ required: false
95
158
  },
96
159
  /**
97
160
  * figcaption-object including visibility, position (top/bottom), text
@@ -101,12 +164,15 @@ export default {
101
164
  required: false
102
165
  },
103
166
  /**
104
- * max file size (in bytes) for file to upload
167
+ * maximum file size (in bytes) for file to upload
105
168
  */
106
169
  maxFileUploadSize: {
107
170
  type: Number,
108
171
  default: 500000
109
172
  },
173
+ /**
174
+ * minimum image width (in pixels) for file to upload
175
+ */
110
176
  minImageWidth: {
111
177
  type: Number,
112
178
  default: 600
@@ -125,6 +191,9 @@ export default {
125
191
  window.removeEventListener("resize", this.updateWindowWidth)
126
192
  },
127
193
  computed: {
194
+ imageComponentPath() {
195
+ return this.componentPath || ["props", "cmdImage"]
196
+ },
128
197
  imageSource() {
129
198
  // check if a new image is provided
130
199
  if(this.newImageSource) {
@@ -132,7 +201,11 @@ export default {
132
201
  }
133
202
 
134
203
  // if only one src exists
135
- const imgSrc = this.image.src
204
+ const imgSrc = this.image?.src
205
+
206
+ if (!imgSrc) {
207
+ return null
208
+ }
136
209
 
137
210
  if(typeof imgSrc === "string") {
138
211
  return imgSrc
@@ -150,7 +223,7 @@ export default {
150
223
  // else return large (will be used if images for small-and -medium-devices do not exist or if screen resolution is larger than mediumMaxWidth)
151
224
  return imgSrc.large
152
225
  },
153
- getTextAlign() {
226
+ textAlign() {
154
227
  if (this.figcaption?.textAlign) {
155
228
  return "text-" + this.figcaption.textAlign
156
229
  }
@@ -167,7 +240,7 @@ export default {
167
240
  },
168
241
  editableFigcaptionText: {
169
242
  get() {
170
- return this.figcaptionText == null ? this.figcaption.text : this.figcaptionText
243
+ return this.figcaptionText == null ? this.figcaption?.text : this.figcaptionText
171
244
  },
172
245
  set(value) {
173
246
  this.figcaptionText = value
@@ -175,6 +248,36 @@ export default {
175
248
  }
176
249
  },
177
250
  methods: {
251
+ itemProvider() {
252
+ const editModeConfig = this.editModeConfig?.itemProviderOverwrite?.()
253
+ return {
254
+ "image": {
255
+ "src": "/media/images/demo-images/medium/landscape-01.jpg",
256
+ "alt": "Alternative Text",
257
+ // add additional keys from editModeConfig
258
+ ...editModeConfig?.image || {}
259
+ },
260
+ "figcaption": {
261
+ "text": "Figcaption DE",
262
+ "position": "bottom",
263
+ "textAlign": "center",
264
+ "show": true
265
+ }
266
+ }
267
+ },
268
+ onAddItem() {
269
+ // execute editComponent-function from editComponentWrapper to enter editMode directly on "add"
270
+ this.$refs.editComponentWrapper.editComponent()
271
+ },
272
+ selectFiles() {
273
+ let inputFile = this.$refs.formElement.getDomElement().querySelector("input[type='file']")
274
+ inputFile.click()
275
+ },
276
+ fileSelected(event) {
277
+ if (event.target.files.length > 0) {
278
+ checkAndUploadFile(event.target.files[0], this.allowedFileExtensions, this.minImageWidth, this.maxFileUploadSize, (imageSource) => this.newImageSource = imageSource)
279
+ }
280
+ },
178
281
  updateWindowWidth() {
179
282
  this.currentWindowWidth = window.innerWidth
180
283
  },
@@ -182,10 +285,10 @@ export default {
182
285
  return {
183
286
  image: {...this.image},
184
287
  figcaption: {
185
- show: this.editableShowFigcaption,
186
- position: this.editableFigcaptionPosition,
187
- textAlign: this.editableFigcaptionTextAlign,
188
- text: this.editableFigcaptionText
288
+ show: this.showFigcaption,
289
+ position: this.figcaptionPosition,
290
+ textAlign: this.figcaptionTextAlign,
291
+ text: this.figcaptionText
189
292
  }
190
293
  }
191
294
  },
@@ -238,7 +341,9 @@ export default {
238
341
  })
239
342
  },
240
343
  updateHandlerProvider() {
241
- const figcaptionText = this.editableFigcaptionText
344
+ const figcaptionText = this.figcaptionText
345
+ this.figcaptionText = null // reset data-property
346
+
242
347
  return updateHandlerProvider(this, {
243
348
  update(props) {
244
349
  if (!props.figcaption) {
@@ -248,6 +353,18 @@ export default {
248
353
  }
249
354
  })
250
355
  }
356
+ },
357
+ watch: {
358
+ figcaption: {
359
+ handler() {
360
+ this.showFigcaption = this.figcaption?.show
361
+ this.figcaptionText = this.figcaption?.text
362
+ this.figcaptionPosition = this.figcaption?.position
363
+ this.figcaptionTextAlign = this.figcaption?.textAlign
364
+ },
365
+ immediate: true,
366
+ deep: true
367
+ }
251
368
  }
252
369
  }
253
370
  </script>
@@ -296,9 +413,21 @@ export default {
296
413
  opacity: 1;
297
414
  transition: var(--default-transition);
298
415
  }
416
+
417
+ &:not([src]) {
418
+ display: block;
419
+ width: 100%;
420
+ min-height: 30rem;
421
+ }
299
422
  }
300
423
  }
301
424
  }
302
425
 
426
+ .edit-mode .edit-component-wrapper .cmd-image {
427
+ label.edit-mode input {
428
+ padding: calc(var(--default-padding) / 2);
429
+ }
430
+ }
431
+
303
432
  /* end cmd-image ------------------------------------------------------------------------------------------ */
304
433
  </style>