comand-component-library 3.1.64 → 3.1.67
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 +2 -2
- package/src/App.vue +77 -42
- package/src/assets/data/box-user.json +0 -8
- package/src/assets/data/cookie-disclaimer.json +3 -3
- package/src/assets/data/list-of-links.json +0 -17
- package/src/assets/data/tabs.json +6 -3
- package/src/components/CmdBox.vue +18 -5
- package/src/components/CmdBoxSiteSearch.vue +1 -1
- package/src/components/CmdCompanyLogo.vue +4 -4
- package/src/components/CmdCookieDisclaimer.vue +121 -91
- package/src/components/CmdCustomHeadline.vue +3 -3
- package/src/components/CmdFakeSelect.vue +12 -2
- package/src/components/CmdFormElement.vue +78 -21
- package/src/components/CmdFormFilters.vue +1 -1
- package/src/components/CmdInputGroup.vue +38 -0
- package/src/components/CmdLoginForm.vue +3 -3
- package/src/components/CmdMultipleSwitch.vue +1 -1
- package/src/components/CmdProgressBar.vue +1 -0
- package/src/components/CmdSiteHeader.vue +3 -1
- package/src/components/CmdTabs.vue +1 -1
- package/src/components/CmdUploadForm.vue +200 -111
- package/src/mixins/CmdUploadForm/DefaultMessageProperties.js +1 -1
- package/src/mixins/FieldValidation.js +8 -8
- package/src/utils/common.js +10 -1
| @@ -3,80 +3,84 @@ | |
| 3 3 | 
             
                    <div class="cmd-cookie-disclaimer flex-container vertical">
         | 
| 4 4 | 
             
                        <!-- begin CmdCustomHeadline -->
         | 
| 5 5 | 
             
                        <CmdCustomHeadline
         | 
| 6 | 
            -
                            v-if=" | 
| 7 | 
            -
                            v-bind=" | 
| 6 | 
            +
                            v-if="cmdCustomHeadlineCookieDisclaimer?.show && cmdCustomHeadlineCookieDisclaimer?.headlineText && cmdCustomHeadlineCookieDisclaimer?.headlineLevel"
         | 
| 7 | 
            +
                            v-bind="cmdCustomHeadlineCookieDisclaimer"
         | 
| 8 | 
            +
                            :headlineText="cmdCustomHeadlineCookieDisclaimer.headlineText"
         | 
| 9 | 
            +
                            :headlineLevel="cmdCustomHeadlineCookieDisclaimer.headlineLevel"
         | 
| 8 10 | 
             
                        />
         | 
| 9 11 | 
             
                        <!-- end CmdCustomHeadline -->
         | 
| 10 12 |  | 
| 11 13 | 
             
                        <!-- begin slot for cookie-options -->
         | 
| 12 14 | 
             
                        <slot name="cookie-options">
         | 
| 13 | 
            -
                            <div v-if="cookieOptions.required">
         | 
| 14 | 
            -
                                < | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
            <!-- | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
            <!-- | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
            <!-- | 
| 47 | 
            -
            <!--                    <!– end CmdAccordion –>-->
         | 
| 15 | 
            +
                            <div v-if="cookieOptions.required" class="flex-container vertical">
         | 
| 16 | 
            +
                                <CmdCustomHeadline v-if="cmdBoxRequiredCookies?.showHeadline" :headline-text="cmdBoxRequiredCookies?.headlineText" :headline-level="cmdBoxRequiredCookies?.headlineLevel "/>
         | 
| 17 | 
            +
                                <!-- begin CmdBox -->
         | 
| 18 | 
            +
                                <CmdBox v-for="(cookie, index) in cookieOptions.required.cookies"
         | 
| 19 | 
            +
                                        :useSlots="['header', 'body']"
         | 
| 20 | 
            +
                                        v-bind="cmdBoxRequiredCookies"
         | 
| 21 | 
            +
                                        :key="index"
         | 
| 22 | 
            +
                                >
         | 
| 23 | 
            +
                                    <template v-slot:header>
         | 
| 24 | 
            +
                                        <!-- begin CmdSwitchButton -->
         | 
| 25 | 
            +
                                        <CmdSwitchButton
         | 
| 26 | 
            +
                                            type="checkbox"
         | 
| 27 | 
            +
                                            :id="cookie.id"
         | 
| 28 | 
            +
                                            :labelText="cookie.labelText"
         | 
| 29 | 
            +
                                            v-model="cookie.checked"
         | 
| 30 | 
            +
                                            :status="cookie.status"
         | 
| 31 | 
            +
                                            disabled="disabled"
         | 
| 32 | 
            +
                                        />
         | 
| 33 | 
            +
                                        <!-- end CmdSwitchButton -->
         | 
| 34 | 
            +
                                    </template>
         | 
| 35 | 
            +
                                    <template v-slot:body>
         | 
| 36 | 
            +
                                        <p v-if="cookie.description">{{ cookie.description }}</p>
         | 
| 37 | 
            +
                                        <p v-if="cookie.linkDataPrivacy">
         | 
| 38 | 
            +
                                            {{ cookie.linkDataPrivacy.label }}
         | 
| 39 | 
            +
                                            <a @click="openDataPrivacy"
         | 
| 40 | 
            +
                                               :href="cookie.linkDataPrivacy.link"
         | 
| 41 | 
            +
                                               :target="cookie.linkDataPrivacy.target">
         | 
| 42 | 
            +
                                                {{ cookie.linkDataPrivacy.linkText }}
         | 
| 43 | 
            +
                                            </a>
         | 
| 44 | 
            +
                                        </p>
         | 
| 45 | 
            +
                                        <div v-if="dataPrivacyContent" v-html="dataPrivacyContent"></div>
         | 
| 46 | 
            +
                                    </template>
         | 
| 47 | 
            +
                                </CmdBox>
         | 
| 48 | 
            +
                                <!-- end CmdBox -->
         | 
| 48 49 | 
             
                            </div>
         | 
| 49 | 
            -
                            <hr | 
| 50 | 
            -
                            <div v-if="cookieOptions.optional">
         | 
| 51 | 
            -
                                < | 
| 52 | 
            -
            <!-- | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
            <!-- | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
            <!-- | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 50 | 
            +
                            <hr/>
         | 
| 51 | 
            +
                            <div v-if="cookieOptions.optional" class="flex-container vertical">
         | 
| 52 | 
            +
                                <CmdCustomHeadline v-if="cmdBoxOptionalCookies?.showHeadline" :headline-text="cmdBoxOptionalCookies?.headlineText" :headline-level="cmdBoxOptionalCookies?.headlineLevel "/>
         | 
| 53 | 
            +
                                <!-- begin CmdBox -->
         | 
| 54 | 
            +
                                <CmdBox v-for="(cookie, index) in cookieOptions.optional.cookies"
         | 
| 55 | 
            +
                                        :useSlots="['header', 'body']"
         | 
| 56 | 
            +
                                        v-bind="cmdBoxOptionalCookies"
         | 
| 57 | 
            +
                                        :key="index"
         | 
| 58 | 
            +
                                >
         | 
| 59 | 
            +
                                    <template v-slot:header>
         | 
| 60 | 
            +
                                        <!-- begin CmdSwitchButton -->
         | 
| 61 | 
            +
                                        <CmdSwitchButton
         | 
| 62 | 
            +
                                            type="checkbox"
         | 
| 63 | 
            +
                                            :id="cookie.id"
         | 
| 64 | 
            +
                                            :labelText="cookie.labelText"
         | 
| 65 | 
            +
                                            v-model="cookie.checked"
         | 
| 66 | 
            +
                                            :status="cookie.status"
         | 
| 67 | 
            +
                                        />
         | 
| 68 | 
            +
                                        <!-- end CmdSwitchButton -->
         | 
| 69 | 
            +
                                    </template>
         | 
| 70 | 
            +
                                    <template v-slot:body>
         | 
| 71 | 
            +
                                        <p v-if="cookie.description">{{ cookie.description }}</p>
         | 
| 72 | 
            +
                                        <p v-if="cookie.linkDataPrivacy">
         | 
| 73 | 
            +
                                            {{ cookie.linkDataPrivacy.label }}
         | 
| 74 | 
            +
                                            <a @click="openDataPrivacy"
         | 
| 75 | 
            +
                                               :href="cookie.linkDataPrivacy.link"
         | 
| 76 | 
            +
                                               :target="cookie.linkDataPrivacy.target">
         | 
| 77 | 
            +
                                                {{ cookie.linkDataPrivacy.linkText }}
         | 
| 78 | 
            +
                                            </a>
         | 
| 79 | 
            +
                                        </p>
         | 
| 80 | 
            +
                                        <div v-if="dataPrivacyContent" v-html="dataPrivacyContent"></div>
         | 
| 81 | 
            +
                                    </template>
         | 
| 82 | 
            +
                                </CmdBox>
         | 
| 83 | 
            +
                                <!-- end CmdBox -->
         | 
| 80 84 | 
             
                            </div>
         | 
| 81 85 | 
             
                        </slot>
         | 
| 82 86 | 
             
                        <!-- end slot for cookie-options -->
         | 
| @@ -87,7 +91,7 @@ | |
| 87 91 |  | 
| 88 92 | 
             
                        <!-- begin button-wrapper for 'accept'-buttons -->
         | 
| 89 93 | 
             
                        <div class="button-wrapper align-center">
         | 
| 90 | 
            -
                            <button | 
| 94 | 
            +
                            <button v-if="buttonLabelAcceptCurrentSettings" type="button" @click="acceptCookies('currentSettings')">
         | 
| 91 95 | 
             
                                <span>{{ buttonLabelAcceptCurrentSettings }}</span>
         | 
| 92 96 | 
             
                            </button>
         | 
| 93 97 | 
             
                            <button v-if="buttonLabelAcceptAllCookies" type="button" class="primary" @click="acceptCookies('allCookies')">
         | 
| @@ -101,14 +105,16 @@ | |
| 101 105 |  | 
| 102 106 | 
             
            <script>
         | 
| 103 107 | 
             
            // import components
         | 
| 108 | 
            +
            import CmdBox from "./CmdBox"
         | 
| 104 109 | 
             
            import CmdCustomHeadline from "./CmdCustomHeadline"
         | 
| 105 | 
            -
             | 
| 110 | 
            +
            import CmdSwitchButton from "./CmdSwitchButton"
         | 
| 106 111 |  | 
| 107 112 | 
             
            export default {
         | 
| 108 113 | 
             
                name: "CmdCookieDisclaimer",
         | 
| 109 114 | 
             
                components: {
         | 
| 110 | 
            -
                     | 
| 111 | 
            -
                     | 
| 115 | 
            +
                    CmdBox,
         | 
| 116 | 
            +
                    CmdCustomHeadline,
         | 
| 117 | 
            +
                    CmdSwitchButton
         | 
| 112 118 | 
             
                },
         | 
| 113 119 | 
             
                data() {
         | 
| 114 120 | 
             
                    return {
         | 
| @@ -118,11 +124,45 @@ export default { | |
| 118 124 | 
             
                },
         | 
| 119 125 | 
             
                props: {
         | 
| 120 126 | 
             
                    /**
         | 
| 121 | 
            -
                     * properties for CmdCustomHeadline-component
         | 
| 127 | 
            +
                     * properties for CmdCustomHeadline-component at top of cookie disclaimer
         | 
| 122 128 | 
             
                     */
         | 
| 123 | 
            -
                     | 
| 129 | 
            +
                    cmdCustomHeadlineCookieDisclaimer: {
         | 
| 124 130 | 
             
                        type: Object,
         | 
| 125 | 
            -
                         | 
| 131 | 
            +
                        default() {
         | 
| 132 | 
            +
                            return {
         | 
| 133 | 
            +
                                show: true,
         | 
| 134 | 
            +
                                headlineText: "Cookie disclaimer",
         | 
| 135 | 
            +
                                headlineLevel: 2
         | 
| 136 | 
            +
                            }
         | 
| 137 | 
            +
                        }
         | 
| 138 | 
            +
                    },
         | 
| 139 | 
            +
                    /**
         | 
| 140 | 
            +
                     * property for CmdBox-component surrounding the required cookies
         | 
| 141 | 
            +
                     */
         | 
| 142 | 
            +
                    cmdBoxRequiredCookies: {
         | 
| 143 | 
            +
                        type: Object,
         | 
| 144 | 
            +
                        default() {
         | 
| 145 | 
            +
                            return {
         | 
| 146 | 
            +
                                collapsible: true,
         | 
| 147 | 
            +
                                showHeadline: true,
         | 
| 148 | 
            +
                                headlineText: "Required cookies",
         | 
| 149 | 
            +
                                headlineLevel: 3
         | 
| 150 | 
            +
                            }
         | 
| 151 | 
            +
                        }
         | 
| 152 | 
            +
                    },
         | 
| 153 | 
            +
                    /**
         | 
| 154 | 
            +
                     * property for CmdBox-component surrounding the optional cookies
         | 
| 155 | 
            +
                     */
         | 
| 156 | 
            +
                    cmdBoxOptionalCookies: {
         | 
| 157 | 
            +
                        type: Object,
         | 
| 158 | 
            +
                        default() {
         | 
| 159 | 
            +
                            return {
         | 
| 160 | 
            +
                                collapsible: true,
         | 
| 161 | 
            +
                                showHeadline: true,
         | 
| 162 | 
            +
                                headlineText: "Optional cookies",
         | 
| 163 | 
            +
                                headlineLevel: 3
         | 
| 164 | 
            +
                            }
         | 
| 165 | 
            +
                        }
         | 
| 126 166 | 
             
                    },
         | 
| 127 167 | 
             
                    /**
         | 
| 128 168 | 
             
                     * list of cookie-options
         | 
| @@ -175,6 +215,12 @@ export default { | |
| 175 215 | 
             
                bottom: 0;
         | 
| 176 216 | 
             
                top: auto;
         | 
| 177 217 |  | 
| 218 | 
            +
                .cmd-box {
         | 
| 219 | 
            +
                    .box-body {
         | 
| 220 | 
            +
                        padding: var(--default-padding);
         | 
| 221 | 
            +
                    }
         | 
| 222 | 
            +
                }
         | 
| 223 | 
            +
             | 
| 178 224 | 
             
                h1 {
         | 
| 179 225 | 
             
                    text-align: center;
         | 
| 180 226 | 
             
                }
         | 
| @@ -191,22 +237,6 @@ export default { | |
| 191 237 | 
             
                    margin-bottom: var(--default-margin);
         | 
| 192 238 | 
             
                }
         | 
| 193 239 |  | 
| 194 | 
            -
                .cmd-accordion {
         | 
| 195 | 
            -
                    .accordion-headline {
         | 
| 196 | 
            -
                        &:hover, &:active, &:focus {
         | 
| 197 | 
            -
                            label, .label {
         | 
| 198 | 
            -
                                span {
         | 
| 199 | 
            -
                                    color: var(--pure-white) !important;
         | 
| 200 | 
            -
                                }
         | 
| 201 | 
            -
                            }
         | 
| 202 | 
            -
                        }
         | 
| 203 | 
            -
                    }
         | 
| 204 | 
            -
             | 
| 205 | 
            -
                    .toggle-switch {
         | 
| 206 | 
            -
                        display: flex;
         | 
| 207 | 
            -
                    }
         | 
| 208 | 
            -
                }
         | 
| 209 | 
            -
             | 
| 210 240 | 
             
                p {
         | 
| 211 241 | 
             
                    a {
         | 
| 212 242 | 
             
                        text-decoration: underline;
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            <template>
         | 
| 2 | 
            -
                < | 
| 2 | 
            +
                <div :class="['cmd-custom-headline', { 'has-pre-headline-text': preHeadlineText}]">
         | 
| 3 3 | 
             
                    <span v-if="iconClass" :class="iconClass"></span>
         | 
| 4 4 | 
             
                    <div v-if="preHeadlineText">
         | 
| 5 5 | 
             
                        <span class="pre-headline-text">{{ preHeadlineText }}</span>
         | 
| @@ -10,7 +10,7 @@ | |
| 10 10 | 
             
                    <component v-else :is="getHeadlineTag">
         | 
| 11 11 | 
             
                        <slot>{{ headlineText }}</slot>
         | 
| 12 12 | 
             
                    </component>
         | 
| 13 | 
            -
                </ | 
| 13 | 
            +
                </div>
         | 
| 14 14 | 
             
            </template>
         | 
| 15 15 |  | 
| 16 16 | 
             
            <script>
         | 
| @@ -22,7 +22,7 @@ export default { | |
| 22 22 | 
             
                     */
         | 
| 23 23 | 
             
                    headlineText: {
         | 
| 24 24 | 
             
                        type: String,
         | 
| 25 | 
            -
                        required:  | 
| 25 | 
            +
                        required: false
         | 
| 26 26 | 
             
                    },
         | 
| 27 27 | 
             
                    /**
         | 
| 28 28 | 
             
                     * level for headline
         | 
| @@ -8,13 +8,13 @@ | |
| 8 8 | 
             
                            'has-state': validationStatus && validationStatus !== 'none'
         | 
| 9 9 | 
             
                        }
         | 
| 10 10 | 
             
                    ]"
         | 
| 11 | 
            -
                    :aria-labelledby=" | 
| 11 | 
            +
                    :aria-labelledby="labelId"
         | 
| 12 12 | 
             
                    :aria-required="$attrs.required !== undefined"
         | 
| 13 13 | 
             
                    ref="fakeselect"
         | 
| 14 14 | 
             
                >
         | 
| 15 15 | 
             
                    <span v-if="showLabel">
         | 
| 16 16 | 
             
                        <!-- begin label -->
         | 
| 17 | 
            -
                        <span>
         | 
| 17 | 
            +
                        <span :id="labelId">
         | 
| 18 18 | 
             
                            {{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup>
         | 
| 19 19 | 
             
                        </span>
         | 
| 20 20 | 
             
                        <!-- end label -->
         | 
| @@ -149,6 +149,9 @@ | |
| 149 149 | 
             
            </template>
         | 
| 150 150 |  | 
| 151 151 | 
             
            <script>
         | 
| 152 | 
            +
            // import utils
         | 
| 153 | 
            +
            import {createUuid} from "../utils/common.js"
         | 
| 154 | 
            +
             | 
| 152 155 | 
             
            // import mixins
         | 
| 153 156 | 
             
            import I18n from "../mixins/I18n"
         | 
| 154 157 | 
             
            import DefaultMessageProperties from "../mixins/CmdBox/DefaultMessageProperties"
         | 
| @@ -327,6 +330,13 @@ export default { | |
| 327 330 | 
             
                    },
         | 
| 328 331 | 
             
                    selectAllOptionsIcon() {
         | 
| 329 332 | 
             
                        return "icon-check"
         | 
| 333 | 
            +
                    },
         | 
| 334 | 
            +
                    // get ID for accessibility
         | 
| 335 | 
            +
                    labelId() {
         | 
| 336 | 
            +
                        if(this.$attrs.id !== undefined) {
         | 
| 337 | 
            +
                            return this.$attrs.id
         | 
| 338 | 
            +
                        }
         | 
| 339 | 
            +
                        return "label-" + createUuid()
         | 
| 330 340 | 
             
                    }
         | 
| 331 341 | 
             
                },
         | 
| 332 342 | 
             
                mounted() {
         | 
| @@ -13,7 +13,7 @@ | |
| 13 13 | 
             
                        off: colored && !isChecked,
         | 
| 14 14 | 
             
                        'has-state': validationStatus
         | 
| 15 15 | 
             
                       }]"
         | 
| 16 | 
            -
                       :for=" | 
| 16 | 
            +
                       :for="labelId"
         | 
| 17 17 | 
             
                       ref="label">
         | 
| 18 18 |  | 
| 19 19 | 
             
                    <!-- begin label-text (+ required asterisk) -->
         | 
| @@ -50,17 +50,17 @@ | |
| 50 50 | 
             
                    <template
         | 
| 51 51 | 
             
                        v-if="element === 'input' && $attrs.type !== 'checkbox' && $attrs.type !== 'radio' && $attrs.type !== 'search'">
         | 
| 52 52 | 
             
                        <input v-bind="$attrs"
         | 
| 53 | 
            -
                               :id=" | 
| 53 | 
            +
                               :id="labelId"
         | 
| 54 54 | 
             
                               :class="htmlClass"
         | 
| 55 55 | 
             
                               @focus="tooltip = true"
         | 
| 56 56 | 
             
                               @blur="onBlur"
         | 
| 57 57 | 
             
                               @input="onInput"
         | 
| 58 58 | 
             
                               @mouseover="datalistFocus"
         | 
| 59 59 | 
             
                               @keyup="checkForCapsLock"
         | 
| 60 | 
            -
                               :autocomplete=" | 
| 61 | 
            -
                               :list="datalist ? datalist.id :  | 
| 60 | 
            +
                               :autocomplete="autocomplete"
         | 
| 61 | 
            +
                               :list="datalist ? datalist.id : null"
         | 
| 62 62 | 
             
                               :value="modelValue"
         | 
| 63 | 
            -
                               :maxlength=" | 
| 63 | 
            +
                               :maxlength="getMaxLength()"
         | 
| 64 64 | 
             
                               ref="input"
         | 
| 65 65 | 
             
                        />
         | 
| 66 66 | 
             
                    </template>
         | 
| @@ -92,27 +92,24 @@ | |
| 92 92 | 
             
                               @change="onChange"
         | 
| 93 93 | 
             
                               @blur="onBlur"
         | 
| 94 94 | 
             
                               :checked="isChecked"
         | 
| 95 | 
            -
                               :role="$attrs.type"
         | 
| 96 | 
            -
                               :aria-checked="isChecked"
         | 
| 97 95 | 
             
                               :value="inputValue"
         | 
| 98 96 | 
             
                               :class="[htmlClass, validationStatus, { 'replace-input-type': replaceInputType, 'toggle-switch': toggleSwitch }]"
         | 
| 99 | 
            -
                               :id=" | 
| 97 | 
            +
                               :id="labelId"
         | 
| 100 98 | 
             
                               :aria-invalid="validationStatus === 'error'"
         | 
| 101 | 
            -
                               :aria-describedby="`status-message-${id}`"
         | 
| 102 99 | 
             
                        />
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                        <!-- begin labels for toggle-switch -->
         | 
| 105 100 | 
             
                        <span v-if="!(onLabel && offLabel)" :class="{ hidden: !showLabel }">
         | 
| 106 101 | 
             
                            <span v-if="labelText">{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
         | 
| 107 102 | 
             
                        </span>
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                        <!-- begin labels for toggle-switch -->
         | 
| 108 105 | 
             
                        <template v-else-if="onLabel && offLabel">
         | 
| 109 106 | 
             
                            <span v-if="labelText">
         | 
| 110 107 | 
             
                                <span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
         | 
| 111 108 | 
             
                            </span>
         | 
| 112 | 
            -
                            < | 
| 109 | 
            +
                            <span class="toggle-switch switch-label">
         | 
| 113 110 | 
             
                                <span class="label">{{ onLabel }}</span>
         | 
| 114 111 | 
             
                                <span class="label">{{ offLabel }}</span>
         | 
| 115 | 
            -
                            </ | 
| 112 | 
            +
                            </span>
         | 
| 116 113 | 
             
                        </template>
         | 
| 117 114 | 
             
                        <slot v-else></slot>
         | 
| 118 115 | 
             
                        <!-- end labels for toggle-switch -->
         | 
| @@ -122,7 +119,7 @@ | |
| 122 119 | 
             
                    <!-- begin selectbox -->
         | 
| 123 120 | 
             
                    <select v-if="element === 'select'"
         | 
| 124 121 | 
             
                            v-bind="$attrs"
         | 
| 125 | 
            -
                            :id=" | 
| 122 | 
            +
                            :id="labelId"
         | 
| 126 123 | 
             
                            @blur="onBlur"
         | 
| 127 124 | 
             
                            @change="$emit('update:modelValue', $event.target.value)">
         | 
| 128 125 | 
             
                        <option v-for="(option, index) in selectOptions" :key="index" :value="option.value"
         | 
| @@ -134,9 +131,9 @@ | |
| 134 131 | 
             
                    <!-- begin textarea -->
         | 
| 135 132 | 
             
                    <textarea v-if="element === 'textarea'"
         | 
| 136 133 | 
             
                              v-bind="$attrs"
         | 
| 137 | 
            -
                              :id=" | 
| 134 | 
            +
                              :id="labelId"
         | 
| 138 135 | 
             
                              :value="modelValue"
         | 
| 139 | 
            -
                              :maxlength="getMaxLength"
         | 
| 136 | 
            +
                              :maxlength="getMaxLength()"
         | 
| 140 137 | 
             
                              @input="onInput"
         | 
| 141 138 | 
             
                              @focus="tooltip = true"
         | 
| 142 139 | 
             
                              @blur="onBlur">
         | 
| @@ -150,15 +147,15 @@ | |
| 150 147 | 
             
                            <a v-if="iconDelete.show" href="#" @click.prevent="$emit('update:modelValue', '')" :class="iconDelete.iconClass" :title="iconDelete.tooltip"/>
         | 
| 151 148 | 
             
                            <input
         | 
| 152 149 | 
             
                                v-bind="$attrs"
         | 
| 153 | 
            -
                                :id=" | 
| 150 | 
            +
                                :id="labelId"
         | 
| 154 151 | 
             
                                @input="onInput"
         | 
| 155 152 | 
             
                                :maxlength="$attrs.maxlength > 0 ? $attrs.maxlength : 255"
         | 
| 156 153 | 
             
                                :value="modelValue"
         | 
| 157 154 | 
             
                            />
         | 
| 158 155 | 
             
                        </div>
         | 
| 159 | 
            -
                        < | 
| 156 | 
            +
                        <a v-if="showSearchButton" href="#" class="button no-flex" :title="iconSearch.tooltip" @click.prevent="executeSearch">
         | 
| 160 157 | 
             
                            <span :class="iconSearch.iconClass"></span>
         | 
| 161 | 
            -
                        </ | 
| 158 | 
            +
                        </a>
         | 
| 162 159 | 
             
                    </template>
         | 
| 163 160 | 
             
                </label>
         | 
| 164 161 | 
             
                <!-- end searchfield -->
         | 
| @@ -215,6 +212,9 @@ | |
| 215 212 | 
             
            </template>
         | 
| 216 213 |  | 
| 217 214 | 
             
            <script>
         | 
| 215 | 
            +
            // import utils
         | 
| 216 | 
            +
            import {createUuid} from "../utils/common.js"
         | 
| 217 | 
            +
             | 
| 218 218 | 
             
            // import mixins
         | 
| 219 219 | 
             
            import I18n from "../mixins/I18n"
         | 
| 220 220 | 
             
            import DefaultMessageProperties from "../mixins/CmdBox/DefaultMessageProperties"
         | 
| @@ -546,7 +546,40 @@ export default { | |
| 546 546 | 
             
                                tooltip: "Info"
         | 
| 547 547 | 
             
                            }
         | 
| 548 548 | 
             
                        }
         | 
| 549 | 
            -
                    }
         | 
| 549 | 
            +
                    },
         | 
| 550 | 
            +
                    /**
         | 
| 551 | 
            +
                     * icon to toggle password-visibility
         | 
| 552 | 
            +
                     *
         | 
| 553 | 
            +
                     * element-property must me set to 'input'
         | 
| 554 | 
            +
                     * type-property must be set to 'password'
         | 
| 555 | 
            +
                     *
         | 
| 556 | 
            +
                     */
         | 
| 557 | 
            +
                    iconPasswordVisible: {
         | 
| 558 | 
            +
                        type: Object,
         | 
| 559 | 
            +
                        default() {
         | 
| 560 | 
            +
                            return {
         | 
| 561 | 
            +
                                show: true,
         | 
| 562 | 
            +
                                iconClass: "icon-visible",
         | 
| 563 | 
            +
                                tooltip: "Show password"
         | 
| 564 | 
            +
                            }
         | 
| 565 | 
            +
                        }
         | 
| 566 | 
            +
                    },
         | 
| 567 | 
            +
                    /**
         | 
| 568 | 
            +
                     * icon to toggle password-visibility
         | 
| 569 | 
            +
                     *
         | 
| 570 | 
            +
                     * element-property must me set to 'input'
         | 
| 571 | 
            +
                     * type-property must be set to 'password'
         | 
| 572 | 
            +
                     *
         | 
| 573 | 
            +
                     */
         | 
| 574 | 
            +
                    iconPasswordInvisible: {
         | 
| 575 | 
            +
                        type: Object,
         | 
| 576 | 
            +
                        default() {
         | 
| 577 | 
            +
                            return {
         | 
| 578 | 
            +
                                show: true,
         | 
| 579 | 
            +
                                iconClass: "icon-not-visible",
         | 
| 580 | 
            +
                            }
         | 
| 581 | 
            +
                        }
         | 
| 582 | 
            +
                    },
         | 
| 550 583 | 
             
                },
         | 
| 551 584 | 
             
                computed: {
         | 
| 552 585 | 
             
                    buttonAttrs() {
         | 
| @@ -598,6 +631,19 @@ export default { | |
| 598 631 | 
             
                            return this.getMessage("cmdformelement.validationTooltip.caps_lock_is_activated")
         | 
| 599 632 | 
             
                        }
         | 
| 600 633 | 
             
                        return this.getMessage("cmdformelement.validationTooltip.open_field_requirements")
         | 
| 634 | 
            +
                    },
         | 
| 635 | 
            +
                    autocomplete() {
         | 
| 636 | 
            +
                        if(this.$attrs.type !== 'file') {
         | 
| 637 | 
            +
                            return this.datalist ? 'off' : 'on'
         | 
| 638 | 
            +
                        }
         | 
| 639 | 
            +
                        return null
         | 
| 640 | 
            +
                    },
         | 
| 641 | 
            +
                    // get ID for accessibility
         | 
| 642 | 
            +
                    labelId() {
         | 
| 643 | 
            +
                        if(this.$attrs.id !== undefined) {
         | 
| 644 | 
            +
                            return this.$attrs.id
         | 
| 645 | 
            +
                        }
         | 
| 646 | 
            +
                        return "label-" + createUuid()
         | 
| 601 647 | 
             
                    }
         | 
| 602 648 | 
             
                },
         | 
| 603 649 | 
             
                methods: {
         | 
| @@ -605,7 +651,15 @@ export default { | |
| 605 651 | 
             
                        return this.$refs.label
         | 
| 606 652 | 
             
                    },
         | 
| 607 653 | 
             
                    getMaxLength() {
         | 
| 608 | 
            -
                         | 
| 654 | 
            +
                        if (this.$attrs.element === 'textarea') {
         | 
| 655 | 
            +
                            return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 5000
         | 
| 656 | 
            +
                        }
         | 
| 657 | 
            +
             | 
| 658 | 
            +
                        if (this.$attrs.type !== 'file') {
         | 
| 659 | 
            +
                          return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 255
         | 
| 660 | 
            +
                        }
         | 
| 661 | 
            +
             | 
| 662 | 
            +
                        return null
         | 
| 609 663 | 
             
                    },
         | 
| 610 664 | 
             
                    onBlur(event) {
         | 
| 611 665 | 
             
                        // check if surrounding form with data-use-validation exists
         | 
| @@ -678,6 +732,9 @@ export default { | |
| 678 732 | 
             
                    hidePassword() {
         | 
| 679 733 | 
             
                        this.$refs.input.nextElementSibling.classList.replace(this.iconPasswordInvisible.iconClass, this.iconPasswordVisible.iconClass)
         | 
| 680 734 | 
             
                        this.$refs.input.setAttribute("type", "password")
         | 
| 735 | 
            +
                    },
         | 
| 736 | 
            +
                    executeSearch() {
         | 
| 737 | 
            +
                        this.$emit("search", this.value)
         | 
| 681 738 | 
             
                    }
         | 
| 682 739 | 
             
                },
         | 
| 683 740 | 
             
                watch: {
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            <template>
         | 
| 2 | 
            +
                <div class="cmd-input-group">
         | 
| 3 | 
            +
                    <span :class="['label', { hidden: !showLabel, inline: labelInline }]">{{ labelText }}</span>
         | 
| 4 | 
            +
                    <div class="flex-container no-flex">
         | 
| 5 | 
            +
                        <slot></slot>
         | 
| 6 | 
            +
                    </div>
         | 
| 7 | 
            +
                </div>
         | 
| 8 | 
            +
            </template>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            <script>
         | 
| 11 | 
            +
            export default {
         | 
| 12 | 
            +
                props: {
         | 
| 13 | 
            +
                    /**
         | 
| 14 | 
            +
                     * toggle label-text visibility
         | 
| 15 | 
            +
                     */
         | 
| 16 | 
            +
                    showLabel: {
         | 
| 17 | 
            +
                        type: Boolean,
         | 
| 18 | 
            +
                        default: true
         | 
| 19 | 
            +
                    },
         | 
| 20 | 
            +
                    /**
         | 
| 21 | 
            +
                     * label-text for input-group
         | 
| 22 | 
            +
                     *
         | 
| 23 | 
            +
                     * @requiredForAccessibility: true
         | 
| 24 | 
            +
                     */
         | 
| 25 | 
            +
                    labelText: {
         | 
| 26 | 
            +
                        type: String,
         | 
| 27 | 
            +
                        required: true
         | 
| 28 | 
            +
                    },
         | 
| 29 | 
            +
                    /**
         | 
| 30 | 
            +
                     * toggle label-position (inline/left of input-elements or above input-elements)
         | 
| 31 | 
            +
                     */
         | 
| 32 | 
            +
                    labelInline: {
         | 
| 33 | 
            +
                        type: Boolean,
         | 
| 34 | 
            +
                        default: false
         | 
| 35 | 
            +
                    }
         | 
| 36 | 
            +
                }
         | 
| 37 | 
            +
            }
         | 
| 38 | 
            +
            </script>
         | 
| @@ -16,7 +16,7 @@ | |
| 16 16 | 
             
                            :name="cmdFormElementUsername.name"
         | 
| 17 17 | 
             
                            :id="cmdFormElementUsername.id"
         | 
| 18 18 | 
             
                            v-model="username"
         | 
| 19 | 
            -
                            : | 
| 19 | 
            +
                            :fieldIconClass="cmdFormElementUsername.innerIconClass"
         | 
| 20 20 | 
             
                            :labelText="cmdFormElementUsername.labelText"
         | 
| 21 21 | 
             
                            :placeholder="cmdFormElementUsername.placeholder"
         | 
| 22 22 | 
             
                        />
         | 
| @@ -28,7 +28,7 @@ | |
| 28 28 | 
             
                            type="password"
         | 
| 29 29 | 
             
                            :name="cmdFormElementPassword.name"
         | 
| 30 30 | 
             
                            :id="cmdFormElementPassword.id"
         | 
| 31 | 
            -
                            : | 
| 31 | 
            +
                            :fieldIconClass="cmdFormElementPassword.innerIconClass"
         | 
| 32 32 | 
             
                            v-model="password"
         | 
| 33 33 | 
             
                            :labelText="cmdFormElementPassword.labelText"
         | 
| 34 34 | 
             
                            :placeholder="cmdFormElementPassword.placeholder"
         | 
| @@ -133,7 +133,7 @@ | |
| 133 133 | 
             
                    <CmdFormElement
         | 
| 134 134 | 
             
                        element="input"
         | 
| 135 135 | 
             
                        type="email"
         | 
| 136 | 
            -
                        : | 
| 136 | 
            +
                        :fieldIconClass="cmdFormElementSendLogin.innerIconClass"
         | 
| 137 137 | 
             
                        :labelText="cmdFormElementSendLogin.labelText"
         | 
| 138 138 | 
             
                        :placeholder="cmdFormElementSendLogin.placeholder"
         | 
| 139 139 | 
             
                        :name="cmdFormElementSendLogin.name"
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            <template>
         | 
| 2 2 | 
             
                <div :class="['label', 'multiple-switch', {disabled: status === 'disabled', error: status === 'error'}]">
         | 
| 3 | 
            -
                    <span :class="{hidden: ! | 
| 3 | 
            +
                    <span :class="{hidden: !showLabel}">{{ labelText }}</span>
         | 
| 4 4 | 
             
                    <span class="flex-container no-gap no-flex">
         | 
| 5 5 | 
             
                        <label :class="{disabled: status === 'disabled'}" :for="multipleswitch.id"
         | 
| 6 6 | 
             
                               v-for="(multipleswitch, index) in multipleSwitches" :key="index">
         | 
| @@ -81,7 +81,7 @@ export default { | |
| 81 81 | 
             
                    z-index: 300;
         | 
| 82 82 | 
             
                }
         | 
| 83 83 |  | 
| 84 | 
            -
                header, .cmd-main-navigation nav, .cmd- | 
| 84 | 
            +
                header, .cmd-main-navigation nav, .cmd-list-of-links > ul {
         | 
| 85 85 | 
             
                    max-width: var(--max-width);
         | 
| 86 86 | 
             
                    margin: 0 auto;
         | 
| 87 87 | 
             
                    padding: 0 var(--default-padding);
         | 
| @@ -92,6 +92,8 @@ export default { | |
| 92 92 | 
             
                }
         | 
| 93 93 |  | 
| 94 94 | 
             
                header {
         | 
| 95 | 
            +
                    padding: calc(var(--default-padding) * 2) 0;
         | 
| 96 | 
            +
             | 
| 95 97 | 
             
                    &.flex-container {
         | 
| 96 98 | 
             
                        width: 100%;
         | 
| 97 99 |  | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            <template>
         | 
| 2 2 | 
             
                <div class="cmd-tabs">
         | 
| 3 | 
            -
                    <ul :class="{'stretch-tabs' : stretchTabs}">
         | 
| 3 | 
            +
                    <ul :class="{'stretch-tabs' : stretchTabs}" role="tablist">
         | 
| 4 4 | 
             
                        <li :class="{active : showTab === index}" v-for="(tab, index) in tabs" :key="index" role="tab">
         | 
| 5 5 | 
             
                            <a @click.prevent="setActiveTab(index)" :title="!tab.name ? tab.tooltip : false">
         | 
| 6 6 | 
             
                                <span v-if="tab.iconClass">{{ tab.iconClass }}</span>
         |