comand-component-library 3.2.7 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +3 -3
- package/src/assets/data/fake-select-options-with-icons.json +5 -0
- package/src/components/CmdFakeSelect.vue +42 -11
- package/src/components/CmdFancyBox.vue +16 -17
- package/src/components/CmdTabs.vue +8 -0
- package/src/directives/focus.js +1 -1
package/package.json
CHANGED
package/src/App.vue
CHANGED
@@ -932,7 +932,7 @@
|
|
932
932
|
<h2 class="headline-demopage">Fancybox</h2>
|
933
933
|
<a href="#" @click.prevent="showFancyBox('text','Some text')">Open FancyBox with text</a>
|
934
934
|
<a href="#"
|
935
|
-
@click.prevent="showFancyBox('image', 'media/images/content-images/landscape-large.jpg', 'Alternative text')"
|
935
|
+
@click.prevent="showFancyBox('image', 'media/images/content-images/landscape-large.jpg', 'Alternative text', 'figcaption')"
|
936
936
|
title="Open FancyBox with large image"
|
937
937
|
>
|
938
938
|
<img src="media/images/content-images/landscape-small.jpg" alt="Alternative text"/>
|
@@ -1604,11 +1604,11 @@ export default {
|
|
1604
1604
|
showError() {
|
1605
1605
|
alert("Error")
|
1606
1606
|
},
|
1607
|
-
showFancyBox(type, content, altText) {
|
1607
|
+
showFancyBox(type, content, altText, figcaption) {
|
1608
1608
|
if (type === 'text') {
|
1609
1609
|
openFancyBox({content: content, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}})
|
1610
1610
|
} else if (type === 'image') {
|
1611
|
-
openFancyBox({url: content, altText: altText, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}})
|
1611
|
+
openFancyBox({url: content, altText: altText, cmdHeadline: {show: true, headlineText: "Fancybox headline", headlineLevel: 3}, figcaption: figcaption})
|
1612
1612
|
}
|
1613
1613
|
},
|
1614
1614
|
getOptionName(option) {
|
@@ -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">
|
@@ -260,11 +285,11 @@ export default {
|
|
260
285
|
optionName() {
|
261
286
|
// fake a native selectbox
|
262
287
|
if (this.type !== "checkboxOptions" && this.type !== "content" && this.modelValue) {
|
263
|
-
const result = this.selectData.find(option => option.value === this.modelValue)
|
288
|
+
const result = this.selectData.find(option => option.value === this.modelValue)
|
264
289
|
|
265
290
|
// if find() returns some data, return this data
|
266
291
|
if (result) {
|
267
|
-
|
292
|
+
return result.text
|
268
293
|
}
|
269
294
|
}
|
270
295
|
|
@@ -284,9 +309,15 @@ export default {
|
|
284
309
|
// get the displayed icon (only available for default selectbox)
|
285
310
|
optionIcon() {
|
286
311
|
if (this.type === "default") {
|
287
|
-
|
312
|
+
|
313
|
+
const selectedOption = this.selectData.find(option => {
|
288
314
|
return option.value === this.modelValue
|
289
|
-
})
|
315
|
+
})
|
316
|
+
|
317
|
+
return {
|
318
|
+
iconClass: selectedOption?.iconClass,
|
319
|
+
tooltip: selectedOption?.tooltip
|
320
|
+
}
|
290
321
|
}
|
291
322
|
return null
|
292
323
|
},
|
@@ -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
|
})
|
@@ -429,7 +428,7 @@ export default FancyBox
|
|
429
428
|
|
430
429
|
&.image {
|
431
430
|
.outer-content-wrapper {
|
432
|
-
|
431
|
+
max-height: none;
|
433
432
|
}
|
434
433
|
|
435
434
|
img {
|
package/src/directives/focus.js
CHANGED
@@ -2,7 +2,7 @@ export default {
|
|
2
2
|
// el = real dom-element
|
3
3
|
mounted(el) {
|
4
4
|
// check if element is native input-element
|
5
|
-
if(el.tagName === "INPUT" || el.tagName === "SELECT" || el.tagName === "TEXTAREA") {
|
5
|
+
if(el.tagName === "INPUT" || el.tagName === "SELECT" || el.tagName === "TEXTAREA" || el.tagName === "A") {
|
6
6
|
el.focus()
|
7
7
|
} else {
|
8
8
|
// check if component is used, which contains a native input-element
|