@energie360/ui-library 0.1.4 → 0.1.6
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/components/card/card.scss +2 -25
- package/components/card-footer/card-footer.scss +5 -0
- package/components/card-footer/u-card-footer.vue +52 -0
- package/components/card-group/card-group.scss +29 -0
- package/components/card-group/u-card-group.vue +66 -0
- package/components/card-header/card-header.scss +1 -5
- package/components/card-section/card-section.scss +13 -0
- package/components/card-section/u-card-section.vue +7 -0
- package/components/tabs/tabs.scss +88 -0
- package/components/tabs/u-tabs.vue +142 -0
- package/dist/layout/split.css +6 -0
- package/dist/layout/split.css.map +1 -1
- package/elements/button/_button-base.scss +1 -1
- package/elements/form-field/form-field-base.scss +1 -1
- package/elements/icon-button/_icon-button-base.scss +1 -4
- package/elements/radio/index.js +1 -0
- package/elements/radio/radio.scss +7 -0
- package/elements/radio/u-radio.vue +33 -0
- package/elements/radio-group/index.js +1 -0
- package/elements/radio-group/radio-group-composables.ts +38 -0
- package/elements/radio-group/radio-group.scss +3 -0
- package/elements/radio-group/u-radio-group.vue +15 -0
- package/elements/select-chip/u-select-chip.vue +15 -21
- package/elements/select-chips/u-select-chips.vue +5 -8
- package/i18n/i18n.ts +5 -0
- package/layout/split/split.scss +5 -0
- package/modules/feedback/feedback-animations.scss +32 -0
- package/modules/feedback/feedback-form.scss +12 -0
- package/modules/feedback/feedback-vote-buttons.scss +73 -0
- package/modules/feedback/feedback.scss +31 -0
- package/modules/feedback/types/feedback.type.ts +33 -0
- package/modules/feedback/u-feedback-close.vue +32 -0
- package/modules/feedback/u-feedback-finish-view.vue +31 -0
- package/modules/feedback/u-feedback-form.vue +16 -0
- package/modules/feedback/u-feedback-vote-buttons.vue +59 -0
- package/modules/feedback/u-feedback.vue +58 -0
- package/modules/footer/footer.scss +13 -16
- package/modules/footer/u-footer.vue +4 -10
- package/package.json +3 -2
- package/utils/dom/dom.js +167 -0
- package/utils/functions/breakpoint.js +11 -0
- package/utils/functions/debounce.js +25 -0
- package/base-style.js +0 -1
- package/components/icon-teaser/icon-teaser.scss +0 -58
- package/components/icon-teaser/u-icon-teaser.vue +0 -35
- package/components/icon-teaser-group/icon-teaser-group.scss +0 -10
- package/components/icon-teaser-group/u-icon-teaser-group.vue +0 -19
- package/utility/utility-text.js +0 -1
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { useRadioGroup } from '../radio-group/radio-group-composables'
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
const updateActiveSelectChip = (id: string): void => {
|
|
6
|
-
activeSelectChip.value = id
|
|
7
|
-
}
|
|
4
|
+
const model = defineModel<string>()
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
useRadioGroup({
|
|
7
|
+
model,
|
|
8
|
+
provideKey: 'select-chip-group',
|
|
12
9
|
})
|
|
13
10
|
</script>
|
|
14
11
|
|
package/i18n/i18n.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// TODO: translate this, dude!!
|
|
1
2
|
const translations = {
|
|
2
3
|
DE: {
|
|
3
4
|
yes: 'Ja',
|
|
@@ -7,6 +8,7 @@ const translations = {
|
|
|
7
8
|
decreaseValue: 'Wert vermindern',
|
|
8
9
|
showPassword: 'Passwort anzeigen',
|
|
9
10
|
hidePassword: 'Passwort verbergen',
|
|
11
|
+
close: 'Schliessen',
|
|
10
12
|
},
|
|
11
13
|
FR: {
|
|
12
14
|
yes: 'Ja',
|
|
@@ -16,6 +18,7 @@ const translations = {
|
|
|
16
18
|
decreaseValue: 'Wert vermindern',
|
|
17
19
|
showPassword: 'Passwort anzeigen',
|
|
18
20
|
hidePassword: 'Passwort verbergen',
|
|
21
|
+
close: 'Fermer',
|
|
19
22
|
},
|
|
20
23
|
IT: {
|
|
21
24
|
yes: 'Ja',
|
|
@@ -25,6 +28,7 @@ const translations = {
|
|
|
25
28
|
decreaseValue: 'Wert vermindern',
|
|
26
29
|
showPassword: 'Passwort anzeigen',
|
|
27
30
|
hidePassword: 'Passwort verbergen',
|
|
31
|
+
close: 'Chiudere',
|
|
28
32
|
},
|
|
29
33
|
EN: {
|
|
30
34
|
yes: 'Ja',
|
|
@@ -34,6 +38,7 @@ const translations = {
|
|
|
34
38
|
decreaseValue: 'Wert vermindern',
|
|
35
39
|
showPassword: 'Passwort anzeigen',
|
|
36
40
|
hidePassword: 'Passwort verbergen',
|
|
41
|
+
close: 'Close',
|
|
37
42
|
},
|
|
38
43
|
}
|
|
39
44
|
|
package/layout/split/split.scss
CHANGED
|
@@ -6,7 +6,10 @@ $split-top-bar-height-mobile: 72px;
|
|
|
6
6
|
|
|
7
7
|
.split {
|
|
8
8
|
position: relative;
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
9
11
|
padding-left: 50%;
|
|
12
|
+
min-height: 100vh;
|
|
10
13
|
|
|
11
14
|
@include a.bp(lg) {
|
|
12
15
|
display: grid;
|
|
@@ -86,6 +89,8 @@ $split-top-bar-height-mobile: 72px;
|
|
|
86
89
|
}
|
|
87
90
|
|
|
88
91
|
.split__footer {
|
|
92
|
+
margin-top: auto;
|
|
93
|
+
|
|
89
94
|
@include a.bp(lg) {
|
|
90
95
|
grid-area: footer;
|
|
91
96
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
.fade-in {
|
|
2
|
+
animation: fadeIn var(--e-trs-duration-fast) var(--e-trs-easing-default);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/* stylelint-disable keyframes-name-pattern */
|
|
6
|
+
@keyframes fadeIn {
|
|
7
|
+
0% {
|
|
8
|
+
opacity: 0;
|
|
9
|
+
transform: translateY(20px);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
100% {
|
|
13
|
+
opacity: 1;
|
|
14
|
+
transform: translateY(0);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Fade (in) Feedback Transition for Feedback Form & Vote Buttons */
|
|
19
|
+
.fade-move,
|
|
20
|
+
.fade-enter-active,
|
|
21
|
+
.fade-leave-active {
|
|
22
|
+
transition: all var(--e-trs-duration-fast) var(--e-trs-easing-default);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.fade-enter-from,
|
|
26
|
+
.fade-leave-to {
|
|
27
|
+
opacity: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.fade-leave-active {
|
|
31
|
+
position: absolute;
|
|
32
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.feedback-form {
|
|
2
|
+
background-color: var(--e-c-mono-00);
|
|
3
|
+
border-radius: var(--e-brd-radius-2);
|
|
4
|
+
border: 1px solid var(--e-c-mono-100);
|
|
5
|
+
bottom: var(--e-space-10);
|
|
6
|
+
box-shadow: var(--e-elevation-xl);
|
|
7
|
+
padding-top: var(--e-space-3);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sections-container {
|
|
11
|
+
position: relative;
|
|
12
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
|
+
@use './feedback-animations';
|
|
3
|
+
|
|
4
|
+
.vote-buttons-wrapper {
|
|
5
|
+
transition: all var(--e-trs-duration-faster) var(--e-trs-easing-default);
|
|
6
|
+
background-color: var(--e-c-primary-01-700);
|
|
7
|
+
border-radius: var(--e-brd-radius-2);
|
|
8
|
+
box-shadow: var(--e-elevation-xl);
|
|
9
|
+
color: var(--e-c-mono-00);
|
|
10
|
+
padding: var(--e-space-8);
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
--fill-color: var(--e-c-mono-00);
|
|
14
|
+
|
|
15
|
+
// Overlay effect
|
|
16
|
+
margin-bottom: calc(var(--e-space-3) * -1);
|
|
17
|
+
transform: translateZ(0);
|
|
18
|
+
|
|
19
|
+
&.feedback-finished {
|
|
20
|
+
padding-top: var(--e-space-10);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@include a.bp(m) {
|
|
24
|
+
padding: var(--e-space-6);
|
|
25
|
+
padding-bottom: var(--e-space-8);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.feedback-title {
|
|
30
|
+
@include a.type(300, strong);
|
|
31
|
+
|
|
32
|
+
@include a.bp(m) {
|
|
33
|
+
width: calc(100% - var(--e-space-7));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.finish-text {
|
|
38
|
+
@include a.type(300, strong);
|
|
39
|
+
|
|
40
|
+
margin-top: var(--e-space-6);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.feedback-buttons {
|
|
44
|
+
display: flex;
|
|
45
|
+
justify-content: space-between;
|
|
46
|
+
margin-top: var(--e-space-6);
|
|
47
|
+
padding-bottom: var(--e-space-2);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.feedback-button {
|
|
51
|
+
align-items: center;
|
|
52
|
+
background-color: var(--e-c-mono-200);
|
|
53
|
+
border-radius: var(--e-space-12);
|
|
54
|
+
color: var(--e-c-primary-01-700);
|
|
55
|
+
display: flex;
|
|
56
|
+
height: var(--e-space-12);
|
|
57
|
+
justify-content: center;
|
|
58
|
+
width: var(--e-space-12);
|
|
59
|
+
opacity: 0.5;
|
|
60
|
+
|
|
61
|
+
&:hover {
|
|
62
|
+
background-color: var(--e-c-mono-00);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
&.filled {
|
|
66
|
+
opacity: 1;
|
|
67
|
+
background-color: var(--e-c-mono-00);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.vote-buttons-wrapper:has(.finish-text) .feedback-buttons {
|
|
72
|
+
margin-top: var(--e-space-2);
|
|
73
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
|
+
@use './feedback-animations';
|
|
3
|
+
|
|
4
|
+
.feedback-wrapper {
|
|
5
|
+
position: fixed;
|
|
6
|
+
|
|
7
|
+
// There is no space-13...
|
|
8
|
+
bottom: calc(var(--e-space-10) + var(--e-space-3));
|
|
9
|
+
right: var(--e-space-10);
|
|
10
|
+
width: 440px;
|
|
11
|
+
|
|
12
|
+
@include a.bp(m) {
|
|
13
|
+
width: calc(100% - var(--e-space-10));
|
|
14
|
+
bottom: var(--e-space-8);
|
|
15
|
+
right: var(--e-space-5);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Close Feedback / Fade out Transition */
|
|
20
|
+
.fade-out-move,
|
|
21
|
+
.fade-out-enter-active,
|
|
22
|
+
.fade-out-leave-active {
|
|
23
|
+
transition: all var(--e-trs-duration-faster) var(--e-trs-easing-default);
|
|
24
|
+
opacity: 0;
|
|
25
|
+
transform: translateY(20px);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.fade-out-leave-active {
|
|
29
|
+
position: absolute;
|
|
30
|
+
width: 100%;
|
|
31
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface FeedbackData {
|
|
2
|
+
title: string
|
|
3
|
+
voteButtons: FeedbackFormVoteButton[]
|
|
4
|
+
voteFinishText: string
|
|
5
|
+
finishedViewText?: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface FeedbackFormVoteData {
|
|
9
|
+
title: string
|
|
10
|
+
finishText: string
|
|
11
|
+
hasForm: boolean
|
|
12
|
+
voteButtons: FeedbackFormVoteButton[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface FeedbackFormVoteButton {
|
|
16
|
+
label: string
|
|
17
|
+
rating: number
|
|
18
|
+
icon: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface FeedbackFormSections {
|
|
22
|
+
title: string
|
|
23
|
+
references: string[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface FeedbackPayloadKeys {
|
|
27
|
+
feature: string
|
|
28
|
+
path: string
|
|
29
|
+
reference: string
|
|
30
|
+
}
|
|
31
|
+
export interface FeedbackPayload {
|
|
32
|
+
rating: number
|
|
33
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import UIcon from '../../elements/icon/u-icon.vue'
|
|
4
|
+
import { getTranslation } from '../../utils/translations/translate'
|
|
5
|
+
|
|
6
|
+
const { color = 'primary-01-700' } = defineProps<{ color?: string }>()
|
|
7
|
+
defineEmits<{ close: [] }>()
|
|
8
|
+
|
|
9
|
+
const closeColor = computed(() => `var(--e-c-${color})`)
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<div class="feedback-close-wrapper">
|
|
14
|
+
<button type="button" :aria-label="getTranslation('close')" @click="$emit('close')">
|
|
15
|
+
<UIcon name="close" />
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<style lang="scss" scoped>
|
|
21
|
+
.feedback-close-wrapper {
|
|
22
|
+
position: absolute;
|
|
23
|
+
padding: var(--e-space-2);
|
|
24
|
+
right: var(--e-space-2);
|
|
25
|
+
top: var(--e-space-2);
|
|
26
|
+
|
|
27
|
+
button {
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
color: v-bind('closeColor');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import UFeedbackClose from './u-feedback-close.vue'
|
|
3
|
+
defineProps<{ text: string }>()
|
|
4
|
+
defineEmits<{ close: [] }>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div class="finish-text-wrapper">
|
|
9
|
+
<UFeedbackClose color="mono-00" @close="$emit('close')" />
|
|
10
|
+
<h3 class="finish-text-title">
|
|
11
|
+
{{ text }}
|
|
12
|
+
</h3>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<style lang="scss" scoped>
|
|
17
|
+
@use '../../base/abstracts' as a;
|
|
18
|
+
|
|
19
|
+
.finish-text-wrapper {
|
|
20
|
+
border-radius: var(--e-brd-radius-2);
|
|
21
|
+
box-shadow: var(--e-elevation-xl);
|
|
22
|
+
padding: var(--e-space-6);
|
|
23
|
+
background-color: var(--e-c-primary-01-700);
|
|
24
|
+
color: var(--e-c-mono-00);
|
|
25
|
+
--fill-color: var(--e-c-mono-00);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.finish-text-title {
|
|
29
|
+
@include a.type(300, strong);
|
|
30
|
+
}
|
|
31
|
+
</style>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import UFeedbackClose from './u-feedback-close.vue'
|
|
3
|
+
|
|
4
|
+
defineEmits<{ close: [] }>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div class="feedback-form">
|
|
9
|
+
<div class="sections-container">
|
|
10
|
+
<slot />
|
|
11
|
+
<UFeedbackClose @close="$emit('close')" />
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<style lang="scss" scoped src="./feedback-form.scss" />
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, ref } from 'vue'
|
|
3
|
+
import UIconButton from '../../elements/icon-button/u-icon-button.vue'
|
|
4
|
+
import UFeedbackClose from './u-feedback-close.vue'
|
|
5
|
+
import type { FeedbackPayload, FeedbackFormVoteData } from './types/feedback.type'
|
|
6
|
+
|
|
7
|
+
const { hasForm, finishText } = defineProps<FeedbackFormVoteData>()
|
|
8
|
+
const emits = defineEmits<{
|
|
9
|
+
'send-feedback': [value: FeedbackPayload['rating']]
|
|
10
|
+
close: []
|
|
11
|
+
'animation-finished': []
|
|
12
|
+
}>()
|
|
13
|
+
|
|
14
|
+
const selectedVote = ref<FeedbackPayload['rating'] | null>(null)
|
|
15
|
+
const showCloseButton = computed(() => (!hasForm ? true : !finishText))
|
|
16
|
+
|
|
17
|
+
function onSendFeedback(value: FeedbackPayload['rating']) {
|
|
18
|
+
selectedVote.value = value
|
|
19
|
+
emits('send-feedback', value)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function setFilledClass(value: FeedbackPayload['rating']) {
|
|
23
|
+
return selectedVote.value === null || selectedVote.value === value
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<TransitionGroup
|
|
29
|
+
tag="div"
|
|
30
|
+
name="fade"
|
|
31
|
+
:class="['vote-buttons-wrapper', { 'feedback-finished': showCloseButton }]"
|
|
32
|
+
@after-leave="$emit('animation-finished')"
|
|
33
|
+
>
|
|
34
|
+
<UFeedbackClose v-if="showCloseButton" key="close" color="mono-00" @close="$emit('close')" />
|
|
35
|
+
|
|
36
|
+
<h3 v-if="!finishText" key="title" class="feedback-title">
|
|
37
|
+
{{ title }}
|
|
38
|
+
</h3>
|
|
39
|
+
|
|
40
|
+
<div key="voteButtons" class="feedback-buttons">
|
|
41
|
+
<UIconButton
|
|
42
|
+
v-for="{ label, rating, icon } in voteButtons"
|
|
43
|
+
:key="rating"
|
|
44
|
+
variant="filled-inverted"
|
|
45
|
+
:label
|
|
46
|
+
:icon
|
|
47
|
+
class="feedback-button"
|
|
48
|
+
:class="{ filled: setFilledClass(rating) }"
|
|
49
|
+
@click="onSendFeedback(rating)"
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<h3 v-if="finishText" key="finishText" class="finish-text">
|
|
54
|
+
{{ finishText }}
|
|
55
|
+
</h3>
|
|
56
|
+
</TransitionGroup>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<style lang="scss" scoped src="./feedback-vote-buttons.scss" />
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, ref, useSlots } from 'vue'
|
|
3
|
+
import UFeedbackForm from './u-feedback-form.vue'
|
|
4
|
+
import FeedbackFinishedView from './u-feedback-finish-view.vue'
|
|
5
|
+
import FeedbackVoteButtons from './u-feedback-vote-buttons.vue'
|
|
6
|
+
import type { FeedbackData, FeedbackPayload } from './types/feedback.type'
|
|
7
|
+
|
|
8
|
+
const { voteFinishText, finishedViewText = '' } = defineProps<FeedbackData>()
|
|
9
|
+
const emits = defineEmits<{ close: []; 'send-feedback': [value: FeedbackPayload['rating']] }>()
|
|
10
|
+
|
|
11
|
+
const showForm = ref(false)
|
|
12
|
+
const isFormSlotted = computed(() => useSlots().default !== undefined)
|
|
13
|
+
const showFeedbackForm = computed(() => showForm.value && isFormSlotted.value)
|
|
14
|
+
|
|
15
|
+
// Fire animation and when it's done, emit close event
|
|
16
|
+
const isFeedbackHidden = ref(false)
|
|
17
|
+
function onCloseEvent() {
|
|
18
|
+
isFeedbackHidden.value = true
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const showFeedback = ref(true)
|
|
22
|
+
function closeFeedback() {
|
|
23
|
+
emits('close')
|
|
24
|
+
showFeedback.value = false
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<Teleport to="body">
|
|
30
|
+
<TransitionGroup
|
|
31
|
+
v-if="showFeedback"
|
|
32
|
+
tag="div"
|
|
33
|
+
:name="isFeedbackHidden ? 'fade-out' : 'fade'"
|
|
34
|
+
:class="['feedback-wrapper', 'fade-in']"
|
|
35
|
+
@after-leave="closeFeedback"
|
|
36
|
+
>
|
|
37
|
+
<div :key="`${isFeedbackHidden}`">
|
|
38
|
+
<div v-if="!finishedViewText">
|
|
39
|
+
<FeedbackVoteButtons
|
|
40
|
+
:finish-text="voteFinishText"
|
|
41
|
+
:title
|
|
42
|
+
:has-form="isFormSlotted"
|
|
43
|
+
:vote-buttons="voteButtons"
|
|
44
|
+
@animation-finished="showForm = true"
|
|
45
|
+
@close="onCloseEvent"
|
|
46
|
+
@send-feedback="$emit('send-feedback', $event)"
|
|
47
|
+
/>
|
|
48
|
+
<UFeedbackForm v-if="showFeedbackForm" @close="onCloseEvent">
|
|
49
|
+
<slot />
|
|
50
|
+
</UFeedbackForm>
|
|
51
|
+
</div>
|
|
52
|
+
<FeedbackFinishedView v-else :text="finishedViewText" @close="onCloseEvent" />
|
|
53
|
+
</div>
|
|
54
|
+
</TransitionGroup>
|
|
55
|
+
</Teleport>
|
|
56
|
+
</template>
|
|
57
|
+
|
|
58
|
+
<style lang="scss" scoped src="./feedback.scss" />
|
|
@@ -44,34 +44,31 @@
|
|
|
44
44
|
grid-gap: var(--e-space-12);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
&:nth-child(3) {
|
|
51
|
-
margin-right: auto;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
&.service {
|
|
55
|
-
white-space: wrap;
|
|
47
|
+
.footer__addresses-column {
|
|
48
|
+
margin-right: auto;
|
|
49
|
+
}
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
51
|
+
.footer__addresses {
|
|
52
|
+
display: flex;
|
|
53
|
+
column-gap: var(--e-space-12);
|
|
63
54
|
|
|
64
55
|
@include a.type(200);
|
|
65
56
|
|
|
66
57
|
a {
|
|
67
58
|
@include t.text-link--secondary;
|
|
68
59
|
|
|
60
|
+
white-space: nowrap;
|
|
69
61
|
font-weight: var(--e-type-weight-strong);
|
|
70
62
|
-webkit-font-smoothing: antialiased; // This is an exception. Usually we only use this for large heading text.
|
|
71
63
|
}
|
|
72
64
|
|
|
65
|
+
@include a.bp(lg) {
|
|
66
|
+
@include a.type(100);
|
|
67
|
+
}
|
|
68
|
+
|
|
73
69
|
@include a.bp(m) {
|
|
74
|
-
flex:
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
row-gap: var(--e-space-6);
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
|
|
@@ -11,16 +11,10 @@ const { variant = 'normal' } = defineProps<Props>()
|
|
|
11
11
|
<div class="footer__top">
|
|
12
12
|
<div class="footer__container">
|
|
13
13
|
<div class="footer__top-row">
|
|
14
|
-
<div class="
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<div class="footer__top-column">
|
|
19
|
-
<slot name="contact"></slot>
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<div class="footer__top-column service">
|
|
23
|
-
<slot name="service"></slot>
|
|
14
|
+
<div class="footer__addresses-column">
|
|
15
|
+
<div class="footer__addresses">
|
|
16
|
+
<slot name="addressColumns"></slot>
|
|
17
|
+
</div>
|
|
24
18
|
</div>
|
|
25
19
|
|
|
26
20
|
<div class="footer__top-right-column">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@energie360/ui-library",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"./wizard": "./wizard/index.js",
|
|
18
18
|
"./wizard/*": "./wizard/*",
|
|
19
19
|
"./utility/elements/*": "./dist/elements/*",
|
|
20
|
-
"./utility/layout/*": "./dist/layout/*"
|
|
20
|
+
"./utility/layout/*": "./dist/layout/*",
|
|
21
|
+
"./abstracts": "./base/abstracts/index.scss"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [],
|
|
23
24
|
"author": "",
|