comand-component-library 3.2.8 → 3.3.0
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 +2 -2
- package/src/App.vue +43 -19
- package/src/assets/data/fake-select-options-with-icons.json +5 -0
- package/src/assets/data/icon.json +17 -0
- package/src/assets/data/tabs.json +3 -1
- package/src/components/CmdAddressData.vue +2 -2
- package/src/components/CmdBox.vue +1 -1
- package/src/components/CmdFakeSelect.vue +55 -15
- package/src/components/CmdFancyBox.vue +22 -19
- package/src/components/CmdFormFilters.vue +2 -2
- package/src/components/CmdIcon.vue +47 -10
- package/src/components/CmdListOfRequirements.vue +0 -5
- package/src/components/CmdLoginForm.vue +9 -10
- package/src/components/CmdMainNavigation.vue +1 -1
- package/src/components/CmdMultistepFormProgressBar.vue +2 -2
- package/src/components/CmdPager.vue +1 -1
- package/src/components/CmdSiteSearch.vue +1 -1
- package/src/components/CmdTable.vue +2 -2
- package/src/components/CmdTabs.vue +10 -6
- package/src/components/CmdTooltip.vue +1 -1
- package/src/components/CmdUploadForm.vue +2 -3
- package/src/directives/focus.js +1 -1
- package/src/documentation/generated/CmdFakeSelectPropertyDescriptions.json +5 -0
- package/src/documentation/generated/CmdIconPropertyDescriptions.json +32 -0
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "comand-component-library",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.3.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.
|
21
|
+
"comand-frontend-framework": "^3.2.95",
|
22
22
|
"core-js": "^3.20.1",
|
23
23
|
"prismjs": "^1.27.0",
|
24
24
|
"sass": "^1.54.9",
|
package/src/App.vue
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
<template>
|
3
3
|
<div id="page-wrapper">
|
4
4
|
<a id="anchor-back-to-top"></a>
|
5
|
-
<Icon icon="mdi-light:home" class="icon-" />
|
6
|
-
ICON: <Icon icon="mdi:account-cowboy-hat" />
|
7
5
|
<!-- begin site-header --------------------------------------------------------------------------------------------------------------------------------------------------->
|
8
6
|
<CmdSiteHeader :sticky="true">
|
9
7
|
<template v-slot:top-header>
|
@@ -41,24 +39,25 @@
|
|
41
39
|
<li><a href="#section-fancybox">Fancybox</a></li>
|
42
40
|
</ul>
|
43
41
|
<ul>
|
44
|
-
<li><a href="#section-google-
|
42
|
+
<li><a href="#section-google-mapsn">Google-Maps™</a></li>
|
43
|
+
<li><a href="#section-icons">Icons</a></li>
|
45
44
|
<li><a href="#section-image-gallery">Image Gallery</a></li>
|
46
45
|
<li><a href="#section-image-zoom">Image-Zoom</a></li>
|
47
46
|
<li><a href="#section-list-of-links">List Of Links</a></li>
|
48
47
|
<li><a href="#section-login-form">Login Form</a></li>
|
49
48
|
<li><a href="#section-main-navigation">Main-Navigation</a></li>
|
50
|
-
<li><a href="#section-multistep-form-progress-bar">Multistepform-Progressbar</a></li>
|
51
49
|
</ul>
|
52
50
|
<ul>
|
51
|
+
<li><a href="#section-multistep-form-progress-bar">Multistepform-Progressbar</a></li>
|
53
52
|
<li><a href="#section-pager">Pager</a></li>
|
54
53
|
<li><a href="#section-share-buttons">Share Buttons</a></li>
|
55
54
|
<li><a href="#section-site-header">Site Header</a></li>
|
56
55
|
<li><a href="#section-site-search">Site Search</a></li>
|
57
56
|
<li><a href="#section-slideshow">Slideshow</a></li>
|
58
57
|
<li><a href="#section-system-message">System-Message</a></li>
|
59
|
-
<li><a href="#section-tables">Tables</a></li>
|
60
58
|
</ul>
|
61
59
|
<ul>
|
60
|
+
<li><a href="#section-tables">Tables</a></li>
|
62
61
|
<li><a href="#section-tabs">Tabs</a></li>
|
63
62
|
<li><a href="#section-thumbnail-scroller">Thumbnail-Scroller</a></li>
|
64
63
|
<li><a href="#section-toggle-darkmode">ToggleDarkMode</a></li>
|
@@ -932,7 +931,7 @@
|
|
932
931
|
<h2 class="headline-demopage">Fancybox</h2>
|
933
932
|
<a href="#" @click.prevent="showFancyBox('text','Some text')">Open FancyBox with text</a>
|
934
933
|
<a href="#"
|
935
|
-
@click.prevent="showFancyBox('image', 'media/images/content-images/landscape-large.jpg', 'Alternative text')"
|
934
|
+
@click.prevent="showFancyBox('image', 'media/images/content-images/landscape-large.jpg', 'Alternative text', 'figcaption')"
|
936
935
|
title="Open FancyBox with large image"
|
937
936
|
>
|
938
937
|
<img src="media/images/content-images/landscape-small.jpg" alt="Alternative text"/>
|
@@ -940,25 +939,49 @@
|
|
940
939
|
</CmdWidthLimitationWrapper>
|
941
940
|
<!-- end fancybox ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
942
941
|
|
943
|
-
|
942
|
+
<!-- begin google-maps ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
943
|
+
<a id="section-google-maps"></a>
|
944
944
|
<CmdWidthLimitationWrapper>
|
945
|
-
<h2 class="headline-demopage">Google Maps&trade
|
945
|
+
<h2 class="headline-demopage">Google Maps™</h2>
|
946
946
|
<CmdGoogleMaps :address="addressData"/>
|
947
947
|
</CmdWidthLimitationWrapper>
|
948
|
+
<!-- end google-maps ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
949
|
+
|
950
|
+
<!-- begin icons ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
951
|
+
<a id="section-icons"></a>
|
952
|
+
<CmdWidthLimitationWrapper>
|
953
|
+
<h2 class="headline-demopage">Icons</h2>
|
954
|
+
<ul>
|
955
|
+
<li><span>Icon from local iconfont</span><CmdIcon iconClass="icon-home" /></li>
|
956
|
+
<li><span>Icon from iconify-api (icomoon-font)</span><CmdIcon iconClass="icomoon-free:home" /></li>
|
957
|
+
<li><span>Icon from iconify-api (bootstrap-font)</span><CmdIcon iconClass="bi:house-fill" /></li>
|
958
|
+
<li><span>Icon from iconify-api (material-design-font)</span><CmdIcon iconClass="mdi:home" /></li>
|
959
|
+
<li><span>Icon from iconify-api (font-awesome-solid-font)</span><CmdIcon iconClass="fa6-solid:house-chimney" /></li>
|
960
|
+
|
961
|
+
</ul>
|
962
|
+
</CmdWidthLimitationWrapper>
|
963
|
+
<!-- end icons ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
948
964
|
|
965
|
+
<!-- begin image-gallery------------------------------------------------------------------------------------------------------------------------------------------------------->
|
949
966
|
<a id="section-image-gallery"></a>
|
950
967
|
<CmdWidthLimitationWrapper>
|
951
968
|
<h2 class="headline-demopage">Image-Gallery</h2>
|
952
|
-
<CmdImageGallery :images="imageGalleryData"/>
|
969
|
+
<CmdImageGallery :images="imageGalleryData" />
|
953
970
|
</CmdWidthLimitationWrapper>
|
971
|
+
<!-- end image-gallery ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
954
972
|
|
973
|
+
<!-- begin image-zoom ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
955
974
|
<a id="section-image-zoom"></a>
|
956
975
|
<CmdWidthLimitationWrapper>
|
957
976
|
<h2 class="headline-demopage">Image-Zoom</h2>
|
958
|
-
<CmdImageZoom
|
959
|
-
|
977
|
+
<CmdImageZoom
|
978
|
+
small-image-url="media/images/content-images/logo-business-edition-landscape.jpg"
|
979
|
+
large-image-url="media/images/content-images/logo-business-edition-landscape-large.jpg"
|
980
|
+
/>
|
960
981
|
</CmdWidthLimitationWrapper>
|
982
|
+
<!-- end image-zoom ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
961
983
|
|
984
|
+
<!-- begin login-form ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
962
985
|
<a id="section-login-form"></a>
|
963
986
|
<CmdWidthLimitationWrapper>
|
964
987
|
<h2 class="headline-demopage">Login Form</h2>
|
@@ -967,13 +990,15 @@
|
|
967
990
|
</CmdForm>
|
968
991
|
<p>LoginData: {{ loginData }}</p>
|
969
992
|
</CmdWidthLimitationWrapper>
|
993
|
+
<!-- end list-of-links ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
994
|
+
|
970
995
|
|
971
996
|
<!-- begin list-of-links ------------------------------------------------------------------------------------------------------------------------------------------------------->
|
972
997
|
<a id="section-list-of-links"></a>
|
973
998
|
<CmdWidthLimitationWrapper>
|
974
999
|
<h2 class="headline-demopage">List Of Links</h2>
|
975
1000
|
<h3>Vertical</h3>
|
976
|
-
<CmdListOfLinks :links="listOfLinksData"/>
|
1001
|
+
<CmdListOfLinks :links="listOfLinksData" />
|
977
1002
|
<h3>Horizontal (aligned left, with headline)</h3>
|
978
1003
|
<CmdListOfLinks
|
979
1004
|
orientation="horizontal"
|
@@ -1007,6 +1032,7 @@
|
|
1007
1032
|
<a id="section-multistep-form-progress-bar"></a>
|
1008
1033
|
<CmdWidthLimitationWrapper>
|
1009
1034
|
<h2 class="headline-demopage">Multistepform-Progressbar</h2>
|
1035
|
+
<h3>Steps with icons</h3>
|
1010
1036
|
<CmdMultistepFormProgressBar
|
1011
1037
|
:multisteps="multistepsData.withIcon"
|
1012
1038
|
separatorIconClass="icon-single-arrow-right"
|
@@ -1015,7 +1041,7 @@
|
|
1015
1041
|
<div>
|
1016
1042
|
<p>Page {{ showPageMultistep }}</p>
|
1017
1043
|
</div>
|
1018
|
-
<
|
1044
|
+
<h3>Steps with number</h3>
|
1019
1045
|
<CmdMultistepFormProgressBar
|
1020
1046
|
:showStepNumber="true"
|
1021
1047
|
:multisteps="multistepsData.withoutIcon"
|
@@ -1318,9 +1344,6 @@
|
|
1318
1344
|
</template>
|
1319
1345
|
|
1320
1346
|
<script>
|
1321
|
-
import {Icon} from "@iconify/vue"
|
1322
|
-
|
1323
|
-
|
1324
1347
|
// import used example data
|
1325
1348
|
import accordionData from '@/assets/data/accordion.json'
|
1326
1349
|
import addressData from '@/assets/data/address-data.json'
|
@@ -1369,6 +1392,7 @@ import CmdForm from "@/components/CmdForm.vue"
|
|
1369
1392
|
import CmdFormElement from "@/components/CmdFormElement.vue"
|
1370
1393
|
import CmdFormFilters from "@/components/CmdFormFilters.vue"
|
1371
1394
|
import CmdGoogleMaps from "./components/CmdGoogleMaps"
|
1395
|
+
import CmdIcon from "./components/CmdIcon"
|
1372
1396
|
import CmdImageGallery from "@/components/CmdImageGallery.vue"
|
1373
1397
|
import CmdImageZoom from "@/components/CmdImageZoom.vue"
|
1374
1398
|
import CmdInputGroup from "./components/CmdInputGroup"
|
@@ -1404,7 +1428,6 @@ import {localizedTime} from "./components/CmdOpeningHours"
|
|
1404
1428
|
export default {
|
1405
1429
|
name: "App",
|
1406
1430
|
components: {
|
1407
|
-
Icon,
|
1408
1431
|
CmdListOfLinks,
|
1409
1432
|
CmdAddressData,
|
1410
1433
|
CmdBackToTopButton,
|
@@ -1422,6 +1445,7 @@ export default {
|
|
1422
1445
|
CmdFormFilters,
|
1423
1446
|
CmdFormElement,
|
1424
1447
|
CmdGoogleMaps,
|
1448
|
+
CmdIcon,
|
1425
1449
|
CmdImageGallery,
|
1426
1450
|
CmdImageZoom,
|
1427
1451
|
CmdInputGroup,
|
@@ -1604,11 +1628,11 @@ export default {
|
|
1604
1628
|
showError() {
|
1605
1629
|
alert("Error")
|
1606
1630
|
},
|
1607
|
-
showFancyBox(type, content, altText) {
|
1631
|
+
showFancyBox(type, content, altText, figcaption) {
|
1608
1632
|
if (type === 'text') {
|
1609
1633
|
openFancyBox({content: content, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}})
|
1610
1634
|
} else if (type === 'image') {
|
1611
|
-
openFancyBox({url: content, altText: altText, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}})
|
1635
|
+
openFancyBox({url: content, altText: altText, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}, figcaption: figcaption})
|
1612
1636
|
}
|
1613
1637
|
},
|
1614
1638
|
getOptionName(option) {
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"prefix": "cmd",
|
3
|
+
"icons": {
|
4
|
+
"3d-cursor": {
|
5
|
+
"body": "<path d=\"M13 4H4v9.01h2V6h7V4z\" fill=\"currentColor\"/><path d=\"M29.49 13.12l-9-5a1 1 0 0 0-1 0l-9 5A1 1 0 0 0 10 14v10a1 1 0 0 0 .52.87l9 5A1 1 0 0 0 20 30a1.05 1.05 0 0 0 .49-.13l9-5A1 1 0 0 0 30 24V14a1 1 0 0 0-.51-.88zM19 27.3l-7-3.89v-7.72l7 3.89zm1-9.45L13.06 14L20 10.14L26.94 14zm8 5.56l-7 3.89v-7.72l7-3.89z\" fill=\"currentColor\"/>",
|
6
|
+
"hidden": true
|
7
|
+
},
|
8
|
+
"building": {
|
9
|
+
"body": "<path fill=\"currentColor\" d=\"M28 2H16a2.002 2.002 0 0 0-2 2v10H4a2.002 2.002 0 0 0-2 2v14h28V4a2.002 2.002 0 0 0-2-2ZM9 28v-7h4v7Zm19 0H15v-8a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v8H4V16h12V4h12Z\"/><path fill=\"currentColor\" d=\"M18 8h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2z\"/>"
|
10
|
+
},
|
11
|
+
"linkedin": {
|
12
|
+
"body": "<path fill=\"currentColor\" d=\"M12,12h5.535v2.837h0.078C18.384,13.456,20.27,12,23.078,12C28.92,12,30,15.637,30,20.367V30h-5.77v-8.54\n\tc0-2.037-0.041-4.657-3-4.657c-3.006,0-3.463,2.219-3.463,4.51V30H12V12z\"/>\n<path fill=\"currentColor\" d=\"M2,12h6v18H2V12z\"/>\n<path fill=\"currentColor\" d=\"M8,7c0,1.657-1.343,3-3,3S2,8.657,2,7s1.343-3,3-3S8,5.343,8,7z\"/>"
|
13
|
+
}
|
14
|
+
},
|
15
|
+
"width": 32,
|
16
|
+
"height": 32
|
17
|
+
}
|
@@ -3,19 +3,21 @@
|
|
3
3
|
"name": "Tab 1",
|
4
4
|
"headlineText": "Tab 1 Headline",
|
5
5
|
"headlineLevel": 4,
|
6
|
-
"iconClass": "
|
6
|
+
"iconClass": "icomoon-free:airplane",
|
7
7
|
"htmlContent": "<p>Inhalt 1</p>"
|
8
8
|
},
|
9
9
|
{
|
10
10
|
"name": "Tab 2",
|
11
11
|
"headlineText": "Tab 2 Headline",
|
12
12
|
"headlineLevel": 4,
|
13
|
+
"iconClass": "icomoon-free:blocked",
|
13
14
|
"htmlContent": "<p>Inhalt 2</p>"
|
14
15
|
},
|
15
16
|
{
|
16
17
|
"name": "Tab 3",
|
17
18
|
"headlineText": "Tab 3 Headline",
|
18
19
|
"headlineLevel": 4,
|
20
|
+
"iconClass": "cmd:linkedin",
|
19
21
|
"htmlContent": "<p>Inhalt 3</p>"
|
20
22
|
}
|
21
23
|
]
|
@@ -51,7 +51,7 @@
|
|
51
51
|
</dd>
|
52
52
|
<!-- end telephone -->
|
53
53
|
|
54
|
-
<!-- begin
|
54
|
+
<!-- begin mobile phone -->
|
55
55
|
<dt v-if="addressData.mobilephone?.value">
|
56
56
|
<span v-if="addressData.mobilephone.iconClass && showLabelIcons" :class="addressData.mobilephone.iconClass" :title="getMessage('cmdaddressdata.labeltext.mobile_phone')"></span>
|
57
57
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.mobile_phone')}}</span>
|
@@ -59,7 +59,7 @@
|
|
59
59
|
<dd v-if="addressData.mobilephone?.value">
|
60
60
|
<a :href="'tel:' + addressData.mobilephone" title="Call number" class="tel" v-telephone="addressData.mobilephone.value">{{ addressData.mobilephone.value }}</a>
|
61
61
|
</dd>
|
62
|
-
<!-- end
|
62
|
+
<!-- end mobile phone -->
|
63
63
|
|
64
64
|
<!-- begin fax -->
|
65
65
|
<dt v-if="addressData.fax?.value">
|
@@ -47,12 +47,26 @@
|
|
47
47
|
<ul :class="{'open': showOptions}" @clickout="closeOptions" :aria-expanded="showOptions">
|
48
48
|
<li>
|
49
49
|
<!-- begin default/selected-option -->
|
50
|
-
<a href="#" @click.prevent="toggleOptions" @blur="onBlur">
|
50
|
+
<a href="#" @click.prevent="toggleOptions" @blur="onBlur" :title="optionIcon?.tooltip">
|
51
|
+
<!-- begin show flag -->
|
51
52
|
<img v-if="type === 'country' && optionCountry" :src="pathFlag(optionCountry)" :alt="optionCountry" :class="['flag', optionCountry]"/>
|
53
|
+
<!-- end show flag -->
|
54
|
+
|
55
|
+
<!-- begin show color-box -->
|
52
56
|
<span v-else-if="type === 'color'" :style="'background: ' + optionColor"></span>
|
53
|
-
|
54
|
-
|
57
|
+
<!-- end show color-box -->
|
58
|
+
|
59
|
+
<!-- begin optional icon -->
|
60
|
+
<span v-if="optionIcon?.iconClass" :class="optionIcon?.iconClass"></span>
|
61
|
+
<!-- end optional icon -->
|
62
|
+
|
63
|
+
<!-- begin text -->
|
64
|
+
<span v-if="optionName" class="option-name" :style="limitWidthStyle">{{ optionName }}</span>
|
65
|
+
<!-- end text -->
|
66
|
+
|
67
|
+
<!-- begin custom dropdown-icon -->
|
55
68
|
<span v-if="dropdownIcon" :class="dropdownIcon.iconClass" :title="dropdownIcon.tooltip"></span>
|
69
|
+
<!-- end custom dropdown-icon -->
|
56
70
|
</a>
|
57
71
|
<!-- end default/selected-option-->
|
58
72
|
|
@@ -60,9 +74,13 @@
|
|
60
74
|
<ul v-if="type === 'default' && showOptions" role="listbox">
|
61
75
|
<li v-for="(option, index) in selectData" :key="index" role="option" :aria-selected="option.value === modelValue">
|
62
76
|
<!-- begin type 'href' -->
|
63
|
-
<a v-if="optionLinkType === 'href'"
|
77
|
+
<a v-if="optionLinkType === 'href'"
|
78
|
+
href="#" @click.prevent="selectOption(option.value)"
|
79
|
+
:class="{'active' : option.value === modelValue}"
|
80
|
+
:title="option.tooltip"
|
81
|
+
>
|
64
82
|
<span v-if="option.iconClass" :class="option.iconClass"></span>
|
65
|
-
<span>{{ option.text }}</span>
|
83
|
+
<span v-if="option.text">{{ option.text }}</span>
|
66
84
|
</a>
|
67
85
|
<!-- end type 'href' -->
|
68
86
|
|
@@ -76,27 +94,34 @@
|
|
76
94
|
</ul>
|
77
95
|
<!-- end default dropdown (incl. optional icon) -->
|
78
96
|
|
79
|
-
<!-- begin dropdown with checkboxes -->
|
97
|
+
<!-- begin dropdown with checkboxes/countries/colors -->
|
80
98
|
<ul v-else-if="type !== 'default' && type !== 'content' && showOptions" :class="{'checkbox-options': type === 'checkboxOptions'}" :aria-expanded="showOptions">
|
81
99
|
<li v-for="(option, index) in selectData" :key="index">
|
100
|
+
<!-- begin checkboxes -->
|
82
101
|
<label v-if="type === 'checkboxOptions'" :for="'option-' + (index + 1)" :class="{'active' : modelValue.includes(`${option.value}`)}">
|
83
102
|
<input type="checkbox" :value="option.value" @change="optionSelect"
|
84
103
|
:checked="compareValues(option.value)" :id="'option-' + (index + 1)"/>
|
85
104
|
<span>{{ option.text }}</span>
|
86
105
|
</label>
|
106
|
+
<!-- end checkboxes -->
|
87
107
|
|
108
|
+
<!-- begin country-flags -->
|
88
109
|
<a v-else-if="type === 'country'" href="#"
|
89
110
|
@click.prevent="selectOption(option.value)" :class="{'active' : option.value === modelValue}">
|
90
111
|
<img class="flag" :src="pathFlag(option.value)"
|
91
112
|
:alt="option.text"/>
|
92
113
|
<span>{{ option.text }}</span>
|
93
114
|
</a>
|
115
|
+
<!-- end country-flags -->
|
94
116
|
|
117
|
+
<!-- begin color-boxes -->
|
95
118
|
<a v-else-if="type === 'color'" href="#" @click.prevent="selectOption(option.value)" :class="{'active' : option.value === modelValue}">
|
96
119
|
<span class="color" :style="'background: ' + option.value"></span>
|
97
120
|
<span>{{ option.text }}</span>
|
98
121
|
</a>
|
122
|
+
<!-- end color-boxe -->
|
99
123
|
</li>
|
124
|
+
|
100
125
|
<!-- begin (de)select all options -->
|
101
126
|
<li v-if="showSelectAllOptions && type === 'checkboxOptions'" class="select-all-options">
|
102
127
|
<a href="#" @click.prevent="toggleAllOptions">
|
@@ -106,7 +131,7 @@
|
|
106
131
|
</li>
|
107
132
|
<!-- end (de)select all options -->
|
108
133
|
</ul>
|
109
|
-
<!-- end dropdown with checkboxes -->
|
134
|
+
<!-- end dropdown with checkboxes/countries/colors -->
|
110
135
|
|
111
136
|
<!-- begin dropdown with slot -->
|
112
137
|
<template v-else-if="type === 'content' && showOptions" :aria-expanded="showOptions">
|
@@ -240,6 +265,13 @@ export default {
|
|
240
265
|
pathFlags: {
|
241
266
|
type: String,
|
242
267
|
default: "/media/images/flags"
|
268
|
+
},
|
269
|
+
/**
|
270
|
+
* default text if no option is selected (and first option is not used)
|
271
|
+
*/
|
272
|
+
textPleaseSelect: {
|
273
|
+
type: String,
|
274
|
+
default: "Please select\u2026"
|
243
275
|
}
|
244
276
|
},
|
245
277
|
computed: {
|
@@ -260,11 +292,11 @@ export default {
|
|
260
292
|
optionName() {
|
261
293
|
// fake a native selectbox
|
262
294
|
if (this.type !== "checkboxOptions" && this.type !== "content" && this.modelValue) {
|
263
|
-
const result = this.selectData.find(option => option.value === this.modelValue)
|
295
|
+
const result = this.selectData.find(option => option.value === this.modelValue)
|
264
296
|
|
265
297
|
// if find() returns some data, return this data
|
266
298
|
if (result) {
|
267
|
-
|
299
|
+
return result.text
|
268
300
|
}
|
269
301
|
}
|
270
302
|
|
@@ -276,29 +308,37 @@ export default {
|
|
276
308
|
return this.modelValue.length + " options selected"
|
277
309
|
}
|
278
310
|
} else if (this.selectData?.length) {
|
311
|
+
// return text of first option nothing is selected (and type !== checkboxOptions && type !== content)
|
279
312
|
return this.selectData[0].text
|
280
313
|
}
|
281
314
|
|
282
|
-
return
|
315
|
+
// return default text if nothing is selected (and no modelValue exists) (and type !== checkboxOptions && type !== content)
|
316
|
+
return this.textPleaseSelect
|
283
317
|
},
|
284
318
|
// get the displayed icon (only available for default selectbox)
|
285
319
|
optionIcon() {
|
286
320
|
if (this.type === "default") {
|
287
|
-
|
321
|
+
|
322
|
+
const selectedOption = this.selectData.find(option => {
|
288
323
|
return option.value === this.modelValue
|
289
|
-
})
|
324
|
+
})
|
325
|
+
|
326
|
+
return {
|
327
|
+
iconClass: selectedOption?.iconClass,
|
328
|
+
tooltip: selectedOption?.tooltip
|
329
|
+
}
|
290
330
|
}
|
291
331
|
return null
|
292
332
|
},
|
293
333
|
optionCountry() {
|
294
334
|
if (this.type === "country") {
|
295
|
-
|
335
|
+
return this.modelValue || this.selectData?.[0]?.value
|
296
336
|
}
|
297
337
|
return null
|
298
338
|
},
|
299
339
|
optionColor() {
|
300
340
|
if (this.type === "color") {
|
301
|
-
return this.modelValue
|
341
|
+
return this.modelValue || this.selectData?.[0]?.value
|
302
342
|
}
|
303
343
|
return null
|
304
344
|
},
|
@@ -464,7 +504,7 @@ export default {
|
|
464
504
|
|
465
505
|
> [class*="icon-"]:last-child {
|
466
506
|
margin-left: auto;
|
467
|
-
font-size:
|
507
|
+
font-size: var(--icon-size-small);
|
468
508
|
}
|
469
509
|
|
470
510
|
&:hover, &:active, &:focus {
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<teleport to="body">
|
3
3
|
<dialog
|
4
4
|
ref="dialog"
|
5
|
-
:class="['cmd-fancybox', {'show-overlay': showOverlay, 'image' : fancyBoxImageUrl || fancyBoxGallery}]"
|
5
|
+
:class="['cmd-fancybox', {'show-overlay': showOverlay, 'image' : fancyBoxImageUrl || fancyBoxGallery, 'image-gallery': fancyBoxGallery}]"
|
6
6
|
:aria-label="ariaLabelText"
|
7
7
|
>
|
8
8
|
<header class="flex-container">
|
@@ -45,6 +45,7 @@
|
|
45
45
|
id="close-dialog"
|
46
46
|
:class="fancyboxOptions.closeIcon.iconClass"
|
47
47
|
:title="fancyboxOptions.closeIcon.tooltip"
|
48
|
+
ref="close-dialog"
|
48
49
|
@click.prevent="close">
|
49
50
|
</a>
|
50
51
|
<!-- end close-icon -->
|
@@ -54,7 +55,7 @@
|
|
54
55
|
<div :class="['outer-content-wrapper', {'grayscale' : printInGrayscale}]">
|
55
56
|
<div v-if="fancyBoxImageUrl" class="content">
|
56
57
|
<figure>
|
57
|
-
<img :src="fancyBoxImageUrl" :alt="altText"
|
58
|
+
<img :src="fancyBoxImageUrl" :alt="altText" />
|
58
59
|
<figcaption v-if="figcaption">{{ figcaption }}</figcaption>
|
59
60
|
</figure>
|
60
61
|
</div>
|
@@ -108,8 +109,8 @@ import CmdSlideButton from "./CmdSlideButton.vue"
|
|
108
109
|
import CmdThumbnailScroller from './CmdThumbnailScroller.vue'
|
109
110
|
|
110
111
|
const openFancyBox = (config) => {
|
111
|
-
const node = document.createElement(
|
112
|
-
document.querySelector(
|
112
|
+
const node = document.createElement("div");
|
113
|
+
document.querySelector("body").appendChild(node);
|
113
114
|
const fb = createApp(FancyBox, {
|
114
115
|
...config,
|
115
116
|
show: true
|
@@ -280,10 +281,8 @@ const FancyBox = defineComponent({
|
|
280
281
|
)
|
281
282
|
},
|
282
283
|
mounted() {
|
283
|
-
// avoid scrolling if fancybox is shown
|
284
284
|
if (this.showFancyBox) {
|
285
|
-
|
286
|
-
this.$refs.dialog.showModal()
|
285
|
+
this.showDialog()
|
287
286
|
}
|
288
287
|
},
|
289
288
|
beforeUnmount() {
|
@@ -293,6 +292,14 @@ const FancyBox = defineComponent({
|
|
293
292
|
}
|
294
293
|
},
|
295
294
|
methods: {
|
295
|
+
showDialog() {
|
296
|
+
// avoid scrolling if fancybox is shown
|
297
|
+
document.querySelector("body").classList.add("avoid-scrolling")
|
298
|
+
this.$refs.dialog.showModal()
|
299
|
+
|
300
|
+
// overwrite default behavior of dialog-element, which sets focus on first focusable element inside
|
301
|
+
this.$refs["close-dialog"].focus()
|
302
|
+
},
|
296
303
|
updateContentOnPropertyChange() {
|
297
304
|
this.fancyBoxImageUrl = this.fancyBoxContent = this.fancyBoxElements = null
|
298
305
|
if (this.url) {
|
@@ -359,21 +366,13 @@ const FancyBox = defineComponent({
|
|
359
366
|
showFancyBox: {
|
360
367
|
handler() {
|
361
368
|
if (this.showFancyBox) {
|
362
|
-
|
363
|
-
// this.$_FancyBox_verticalScrollPosition = window.scrollY
|
364
|
-
document.querySelector("body").classList.add("avoid-scrolling")
|
365
|
-
// window.addEventListener("scroll", this.$_FancyBox_scrollHandler)
|
366
|
-
this.$refs.dialog.showModal()
|
369
|
+
this.showDialog()
|
367
370
|
} else {
|
368
371
|
// remove class to re-enable scrolling
|
369
372
|
document.querySelector("body").classList.remove("avoid-scrolling")
|
370
|
-
// window.removeEventListener("scroll", this.$_FancyBox_scrollHandler)
|
371
|
-
// console.log("$_FancyBox_verticalScrollPosition", this.$_FancyBox_verticalScrollPosition)
|
372
|
-
// window.scrollTo(0, this.$_FancyBox_verticalScrollPosition)
|
373
373
|
this.$refs.dialog.close()
|
374
374
|
}
|
375
|
-
}
|
376
|
-
immediate: false
|
375
|
+
}
|
377
376
|
}
|
378
377
|
}
|
379
378
|
})
|
@@ -405,6 +404,10 @@ export default FancyBox
|
|
405
404
|
overflow: hidden;
|
406
405
|
gap: calc(var(--default-gap) / 2);
|
407
406
|
|
407
|
+
&.image-gallery {
|
408
|
+
margin-top: calc(var(--default-margin) * 2)
|
409
|
+
}
|
410
|
+
|
408
411
|
// detect open-attribute (will be added to dom automatically)
|
409
412
|
&[open] {
|
410
413
|
display: flex;
|
@@ -429,7 +432,7 @@ export default FancyBox
|
|
429
432
|
|
430
433
|
&.image {
|
431
434
|
.outer-content-wrapper {
|
432
|
-
|
435
|
+
max-height: none;
|
433
436
|
}
|
434
437
|
|
435
438
|
img {
|
@@ -559,7 +562,7 @@ export default FancyBox
|
|
559
562
|
|
560
563
|
@media only screen and (max-width: $medium-max-width) {
|
561
564
|
dialog {
|
562
|
-
top: var(--default-margin);
|
565
|
+
margin-top: var(--default-margin);
|
563
566
|
}
|
564
567
|
}
|
565
568
|
/* end cmd-fancybox ------------------------------------------------------------------------------------------ */
|
@@ -113,7 +113,7 @@ export default {
|
|
113
113
|
margin-right: var(--default-margin);
|
114
114
|
border: var(--default-border);
|
115
115
|
background: var(--pure-white);
|
116
|
-
font-size:
|
116
|
+
font-size: var(--font-size-small);
|
117
117
|
|
118
118
|
&:hover, &:active, &:focus {
|
119
119
|
border-color: var(--primary-color);
|
@@ -131,7 +131,7 @@ export default {
|
|
131
131
|
}
|
132
132
|
|
133
133
|
[class*="icon-"] {
|
134
|
-
font-size:
|
134
|
+
font-size: var(--icon-size-small);
|
135
135
|
}
|
136
136
|
}
|
137
137
|
}
|