comand-component-library 3.1.95 → 3.1.97
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/comand-component-library.css +1 -1
- package/dist/comand-component-library.umd.min.js +1 -1
- package/package.json +1 -1
- package/src/App.vue +11 -0
- package/src/assets/data/box-user.json +9 -6
- package/src/components/CmdBox.vue +68 -37
- package/src/components/CmdBoxWrapper.vue +6 -0
- package/src/components/CmdMainNavigation.vue +0 -2
- package/src/documentation/generated/CmdBoxPropertyDescriptions.json +5 -0
package/package.json
CHANGED
package/src/App.vue
CHANGED
@@ -792,6 +792,10 @@
|
|
792
792
|
<a id="section-boxes"></a>
|
793
793
|
<CmdWidthLimitationWrapper>
|
794
794
|
<h2 class="headline-demopage">Boxes</h2>
|
795
|
+
<h3>Boxes in BoxWrapper with Flexbox</h3>
|
796
|
+
<CmdBoxWrapper :useFlexbox="true">
|
797
|
+
<CmdBox v-for="index in 14" :key="index" textBody="Content" :cmd-headline="{headlineText: 'Headline ' + index, headlineLevel: 5}" />
|
798
|
+
</CmdBoxWrapper>
|
795
799
|
<h3>Content boxes</h3>
|
796
800
|
<div class="grid-container-create-columns">
|
797
801
|
<div class="grid-small-item">
|
@@ -1329,6 +1333,7 @@ import CmdAddressData from "@/components/CmdAddressData"
|
|
1329
1333
|
import CmdBackToTopButton from "@/components/CmdBackToTopButton.vue"
|
1330
1334
|
import CmdBankAccountData from "./components/CmdBankAccountData"
|
1331
1335
|
import CmdBox from "@/components/CmdBox.vue"
|
1336
|
+
import CmdBoxWrapper from "@/components/CmdBoxWrapper.vue"
|
1332
1337
|
import CmdBreadcrumbs from "@/components/CmdBreadcrumbs.vue"
|
1333
1338
|
import CmdCompanyLogo from "@/components/CmdCompanyLogo.vue"
|
1334
1339
|
import CmdCopyrightInformation from "@/components/CmdCopyrightInformation.vue"
|
@@ -1380,6 +1385,7 @@ export default {
|
|
1380
1385
|
CmdBackToTopButton,
|
1381
1386
|
CmdBankAccountData,
|
1382
1387
|
CmdBox,
|
1388
|
+
CmdBoxWrapper,
|
1383
1389
|
CmdBreadcrumbs,
|
1384
1390
|
CmdCompanyLogo,
|
1385
1391
|
CmdCopyrightInformation,
|
@@ -1621,4 +1627,9 @@ export default {
|
|
1621
1627
|
background: none;
|
1622
1628
|
}
|
1623
1629
|
}
|
1630
|
+
|
1631
|
+
main .cmd-width-limitation-wrapper:not(:last-of-type) {
|
1632
|
+
border-bottom: var(--default-border);
|
1633
|
+
border-style: dashed;
|
1634
|
+
}
|
1624
1635
|
</style>
|
@@ -1,10 +1,13 @@
|
|
1
1
|
[
|
2
2
|
{
|
3
3
|
"name": "User name 1",
|
4
|
-
"image":
|
4
|
+
"image": {
|
5
|
+
"src": "/media/images/user-images/fake-user-1.jpg",
|
6
|
+
"alt": "Alternative text"
|
7
|
+
},
|
5
8
|
"profession": "User profession",
|
6
9
|
"position": "User position",
|
7
|
-
"description": "
|
10
|
+
"description": "User profile with image",
|
8
11
|
"links": [
|
9
12
|
{
|
10
13
|
"path": "mailto:",
|
@@ -15,9 +18,9 @@
|
|
15
18
|
},
|
16
19
|
{
|
17
20
|
"name": "User name 2",
|
18
|
-
"image": "",
|
19
21
|
"profession": "User profession",
|
20
22
|
"position": "User position",
|
23
|
+
"description": "User description",
|
21
24
|
"links": [
|
22
25
|
{
|
23
26
|
"path": "mailto:",
|
@@ -34,9 +37,9 @@
|
|
34
37
|
},
|
35
38
|
{
|
36
39
|
"name": "User name 3",
|
37
|
-
"image": "",
|
38
40
|
"profession": "User profession",
|
39
41
|
"position": "User position",
|
42
|
+
"description": "User with a long text as description that wraps over multiple lines",
|
40
43
|
"links": [
|
41
44
|
{
|
42
45
|
"path": "mailto:",
|
@@ -58,9 +61,9 @@
|
|
58
61
|
},
|
59
62
|
{
|
60
63
|
"name": "User name 4",
|
61
|
-
"image": "",
|
62
64
|
"profession": "User profession",
|
63
65
|
"position": "User position",
|
66
|
+
"description": "User description",
|
64
67
|
"links": [
|
65
68
|
{
|
66
69
|
"path": "mailto:",
|
@@ -82,9 +85,9 @@
|
|
82
85
|
},
|
83
86
|
{
|
84
87
|
"name": "User name 5",
|
85
|
-
"image": "",
|
86
88
|
"profession": "User profession",
|
87
89
|
"position": "User position",
|
90
|
+
"description": "User description",
|
88
91
|
"links": [
|
89
92
|
{
|
90
93
|
"path": "mailto:",
|
@@ -1,6 +1,6 @@
|
|
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}]">
|
3
|
+
<div v-if="boxType === 'content'" :class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically, 'stretch-horizontally': stretchHorizontally}]">
|
4
4
|
<template v-if="useSlots?.includes('header')">
|
5
5
|
<!-- begin collapsible header with slot -->
|
6
6
|
<div v-if="collapsible" class="box-header">
|
@@ -65,21 +65,20 @@
|
|
65
65
|
<!-- end boxType 'content' -->
|
66
66
|
|
67
67
|
<!-- begin boxType 'product' -->
|
68
|
-
<a v-else-if="boxType === 'product' && product" :class="['cmd-box box product', {'stretch-vertically': stretchVertically}]" href="#" @click.prevent="clickOnProduct(product)">
|
68
|
+
<a v-else-if="boxType === 'product' && product" :class="['cmd-box box product', {'stretch-vertically': stretchVertically, 'stretch-horizontally': stretchHorizontally}]" href="#" @click.prevent="clickOnProduct(product)">
|
69
69
|
<div class="box-header flex-container vertical">
|
70
|
-
<
|
70
|
+
<figure v-if="product.image">
|
71
|
+
<img :src="product.image.src" :alt="product.image.alt"/>
|
72
|
+
<figcaption>{{ product.name }}</figcaption>
|
73
|
+
</figure>
|
74
|
+
<p v-else>{{ product.name }}</p>
|
75
|
+
|
71
76
|
<div class="ribbon-new" v-if="product.new">
|
72
77
|
<span>{{ getMessage("cmdbox.productbox.new") }}</span>
|
73
78
|
</div>
|
74
79
|
<div v-if="product.discount" class="ribbon-discount">
|
75
80
|
<span>{{ product.discount }}</span>
|
76
81
|
</div>
|
77
|
-
<!-- begin CmdHeadline -->
|
78
|
-
<CmdHeadline
|
79
|
-
v-if="cmdHeadline?.headlineText || product.name"
|
80
|
-
v-bind="cmdHeadline || {}"
|
81
|
-
:headlineText="cmdHeadline?.headlineText ? cmdHeadline?.headlineText : product.name"/>
|
82
|
-
<!-- end CmdHeadline -->
|
83
82
|
</div>
|
84
83
|
<div class="box-body">
|
85
84
|
<p v-if="product.articleNumber">{{ getMessage("cmdbox.productbox.article_no") }} {{ product.articleNumber }}</p>
|
@@ -92,17 +91,16 @@
|
|
92
91
|
<!-- end boxType 'product' -->
|
93
92
|
|
94
93
|
<!-- begin boxType 'user' -->
|
95
|
-
<div v-else-if="boxType === 'user' && user" :class="['cmd-box box user', {'stretch-vertically': stretchVertically}]">
|
94
|
+
<div v-else-if="boxType === 'user' && user" :class="['cmd-box box user', {'stretch-vertically': stretchVertically,'stretch-horizontally': stretchHorizontally}]">
|
96
95
|
<div class="box-header flex-container vertical">
|
97
|
-
<
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
<!-- end CmdHeadline -->
|
96
|
+
<figure v-if="user.image">
|
97
|
+
<img :src="user.image.src" :alt="user.image.alt"/>
|
98
|
+
<figcaption>{{ user.name }}</figcaption>
|
99
|
+
</figure>
|
100
|
+
<div v-else>
|
101
|
+
<span :class="defaultProfileIconClass" :title="user.name"></span>
|
102
|
+
<p>{{ user.name }}</p>
|
103
|
+
</div>
|
106
104
|
</div>
|
107
105
|
<div class="box-body">
|
108
106
|
<p v-if="user.profession">{{ user.profession }}</p>
|
@@ -246,6 +244,13 @@ export default {
|
|
246
244
|
}
|
247
245
|
}
|
248
246
|
},
|
247
|
+
/**
|
248
|
+
* allow box to be stretched as wide as parent-element
|
249
|
+
*/
|
250
|
+
stretchHorizontally: {
|
251
|
+
type: Boolean,
|
252
|
+
default: true
|
253
|
+
},
|
249
254
|
/**
|
250
255
|
* allow box to be stretched as high as parent-element
|
251
256
|
*/
|
@@ -296,17 +301,29 @@ export default {
|
|
296
301
|
<style lang="scss">
|
297
302
|
/* begin cmd-box ---------------------------------------------------------------------------------------- */
|
298
303
|
.cmd-box {
|
299
|
-
display: flex;
|
304
|
+
display: inline-flex;
|
300
305
|
flex-direction: column;
|
301
306
|
padding: 0;
|
302
307
|
|
303
|
-
|
308
|
+
&.stretch-horizontally {
|
309
|
+
display: flex;
|
310
|
+
}
|
311
|
+
|
312
|
+
> .cmd-headline {
|
304
313
|
margin-bottom: 0;
|
305
314
|
}
|
306
315
|
|
307
316
|
&.collapsible {
|
308
317
|
.box-header {
|
309
318
|
justify-content: space-between;
|
319
|
+
|
320
|
+
&:hover, &:active, &:focus {
|
321
|
+
background: var(--pure-white);
|
322
|
+
|
323
|
+
* {
|
324
|
+
color: var(--text-color);
|
325
|
+
}
|
326
|
+
}
|
310
327
|
}
|
311
328
|
}
|
312
329
|
|
@@ -331,7 +348,7 @@ export default {
|
|
331
348
|
border-top-left-radius: var(--border-radius);
|
332
349
|
border-top-right-radius: var(--border-radius);
|
333
350
|
padding: calc(var(--default-padding) / 2) var(--default-padding);
|
334
|
-
background: var(--
|
351
|
+
background: var(--medium-gray);
|
335
352
|
color: var(--pure-white);
|
336
353
|
text-decoration: none;
|
337
354
|
|
@@ -349,16 +366,6 @@ export default {
|
|
349
366
|
}
|
350
367
|
}
|
351
368
|
|
352
|
-
.box-header {
|
353
|
-
&:hover, &:active, &:focus {
|
354
|
-
background: var(--pure-white);
|
355
|
-
|
356
|
-
* {
|
357
|
-
color: var(--primary-color);
|
358
|
-
}
|
359
|
-
}
|
360
|
-
}
|
361
|
-
|
362
369
|
.box-body {
|
363
370
|
flex-grow: 1;
|
364
371
|
padding: 0;
|
@@ -466,9 +473,15 @@ export default {
|
|
466
473
|
margin: 0 auto;
|
467
474
|
}
|
468
475
|
|
469
|
-
|
476
|
+
img {
|
470
477
|
border: 0;
|
471
478
|
}
|
479
|
+
|
480
|
+
figcaption {
|
481
|
+
font-size: 2rem;
|
482
|
+
font-weight: bold;
|
483
|
+
padding-top: var(--default-padding)
|
484
|
+
}
|
472
485
|
}
|
473
486
|
|
474
487
|
.box-body {
|
@@ -479,7 +492,7 @@ export default {
|
|
479
492
|
}
|
480
493
|
|
481
494
|
.price {
|
482
|
-
font-size:
|
495
|
+
font-size: 1.8rem;
|
483
496
|
font-weight: bold;
|
484
497
|
|
485
498
|
span:last-child {
|
@@ -495,6 +508,8 @@ export default {
|
|
495
508
|
|
496
509
|
&.user {
|
497
510
|
> .box-header {
|
511
|
+
--icon-size: 6rem;
|
512
|
+
|
498
513
|
padding: var(--default-padding);
|
499
514
|
|
500
515
|
.cmd-headline {
|
@@ -504,14 +519,30 @@ export default {
|
|
504
519
|
}
|
505
520
|
}
|
506
521
|
|
507
|
-
|
522
|
+
img, > div:first-child > [class*="icon"] {
|
508
523
|
display: table;
|
509
|
-
margin: 0 auto;
|
524
|
+
margin: 0 auto var(--default-margin) auto;
|
510
525
|
padding: calc(var(--default-padding) * 3);
|
511
526
|
border-radius: var(--full-circle);
|
512
527
|
background: var(--primary-color);
|
513
|
-
font-size: 6rem;
|
514
528
|
color: var(--pure-white);
|
529
|
+
|
530
|
+
& + p, & + figcaption {
|
531
|
+
margin: 0 auto;
|
532
|
+
text-align: center;
|
533
|
+
font-weight: bold;
|
534
|
+
font-size: 2rem;
|
535
|
+
}
|
536
|
+
}
|
537
|
+
|
538
|
+
img {
|
539
|
+
padding: 0;
|
540
|
+
width: calc(var(--icon-size) * 2);
|
541
|
+
aspect-ratio: 1/1;
|
542
|
+
}
|
543
|
+
|
544
|
+
> div:first-child > [class*="icon"] {
|
545
|
+
font-size: var(--icon-size);
|
515
546
|
}
|
516
547
|
}
|
517
548
|
|
@@ -41,8 +41,6 @@
|
|
41
41
|
v-if="navigationEntry.type === 'router'"
|
42
42
|
:to="getRoute(navigationEntry)"
|
43
43
|
:title="navigationEntry.tooltip"
|
44
|
-
:target="navigationEntry.target"
|
45
|
-
@click="executeLink($event, navigationEntry)"
|
46
44
|
>
|
47
45
|
<span v-if="navigationEntry.iconClass" :class="navigationEntry.iconClass"></span>
|
48
46
|
<span v-if="navigationEntry.text">{{ navigationEntry.text }}</span>
|