@energie360/ui-library 0.1.17 → 0.1.18
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/badge/badge.scss +56 -0
- package/components/badge/u-badge.vue +47 -0
- package/components/card-contact/card-contact.scss +39 -0
- package/components/card-contact/u-card-contact.vue +44 -0
- package/components/card-cta-bar/card-cta-bar.scss +4 -0
- package/components/card-cta-bar/u-card-cta-bar.vue +24 -0
- package/components/card-cta-header/u-card-cta-header.vue +10 -7
- package/components/card-footer/u-card-footer.vue +5 -3
- package/components/card-group/u-card-group.vue +1 -1
- package/components/card-header/card-header.scss +29 -4
- package/components/card-header/u-card-header.vue +22 -3
- package/components/card-highlight/card-highlight.scss +70 -0
- package/components/card-highlight/u-card-highlight.vue +41 -0
- package/components/card-price-list/card-price-list.scss +39 -0
- package/components/card-price-list/u-card-price-list.vue +37 -0
- package/components/card-section/card-section.scss +21 -1
- package/components/card-section/u-card-section.vue +9 -1
- package/components/data-card/data-card.scss +34 -0
- package/components/data-card/u-data-card.vue +49 -0
- package/components/data-card-group/data-card-group.scss +12 -0
- package/components/data-card-group/u-data-card-group.vue +7 -0
- package/components/download-list/download-list.scss +58 -0
- package/components/download-list/u-download-list.vue +44 -0
- package/components/download-list-item/download-list-item.scss +267 -0
- package/components/download-list-item/u-download-list-item.vue +65 -0
- package/components/file-upload/file-list.scss +68 -0
- package/components/file-upload/file-upload.scss +119 -0
- package/components/file-upload/u-file-list.vue +55 -0
- package/components/file-upload/u-file-upload.vue +220 -0
- package/components/hint/hint.scss +67 -6
- package/components/hint/u-hint.vue +11 -1
- package/components/index.js +12 -0
- package/components/progress-avatar/u-progress-avatar.vue +27 -3
- package/components/search-group/search-group.scss +59 -0
- package/components/search-group/u-search-group.vue +32 -0
- package/components/skeleton-loader/skeleton-loader.scss +39 -0
- package/components/skeleton-loader/u-skeleton-loader.vue +28 -0
- package/components/table/cell-ctas.scss +1 -7
- package/components/table/cell-icon-text.scss +15 -4
- package/components/table/table-cell.mixins.scss +3 -2
- package/components/table/table-cell.scss +5 -0
- package/components/table/table-heading.scss +7 -0
- package/components/table/u-cell-ctas.vue +15 -6
- package/components/table/u-cell-icon-text.vue +13 -5
- package/components/table/u-table-cell.vue +3 -1
- package/components/table/u-table-heading.vue +2 -1
- package/components/tabs/tabs.scss +10 -1
- package/components/tabs/u-tabs.vue +64 -25
- package/dist/layout/split.css.map +1 -1
- package/elements/button/_button-plain-small-spaceless.scss +10 -0
- package/elements/button/button.scss +32 -0
- package/elements/button/u-button.vue +47 -4
- package/elements/form-field/form-field-base.scss +4 -0
- package/elements/select/u-select.vue +6 -6
- package/elements/text-field/text-field.scss +15 -0
- package/elements/text-field/text-field.types.ts +1 -0
- package/elements/text-field/u-text-field.vue +27 -6
- package/elements/toggle-switch/toggle-switch-small.scss +10 -0
- package/elements/toggle-switch/toggle-switch.scss +25 -21
- package/elements/toggle-switch/u-toggle-switch.vue +22 -12
- package/i18n/i18n.ts +32 -0
- package/layout/container/container.scss +18 -0
- package/layout/index.js +2 -0
- package/layout/portal/portal.scss +35 -7
- package/layout/portal/u-portal.vue +33 -4
- package/layout/settings/settings.scss +2 -2
- package/layout/tile-grid/tile-grid.scss +13 -0
- package/layout/tile-grid/tile-item.scss +31 -0
- package/layout/tile-grid/u-tile-grid.vue +7 -0
- package/layout/tile-grid/u-tile-item.vue +15 -0
- package/modules/content-title/content-title.scss +43 -0
- package/modules/content-title/u-content-title.vue +19 -0
- package/modules/dialog/dialog.scss +7 -3
- package/modules/dialog/u-dialog.vue +6 -1
- package/modules/footer/footer.scss +8 -1
- package/modules/footer/u-footer.vue +1 -1
- package/modules/index.js +2 -0
- package/modules/search-filter/search-filter.scss +106 -0
- package/modules/search-filter/u-search-filter.vue +54 -0
- package/package.json +2 -1
- package/utils/array/intersect.js +7 -0
- package/utils/functions/breakpoint.js +4 -9
- package/utils/functions/format-bytes.js +17 -0
- package/utils/global/mime-types.js +8 -0
- package/utils/translations/translate.js +10 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@use '../../base/abstracts
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
2
|
@use './toggle-switch-small';
|
|
3
3
|
|
|
4
4
|
.toggle-switch {
|
|
@@ -31,6 +31,18 @@
|
|
|
31
31
|
background-color: var(--e-c-mono-200);
|
|
32
32
|
border-radius: calc(var(--height) * 0.5);
|
|
33
33
|
transition: background-color var(--e-trs-duration-faster) var(--e-trs-easing-default);
|
|
34
|
+
|
|
35
|
+
&:hover {
|
|
36
|
+
background-color: var(--e-c-mono-500);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&:active {
|
|
40
|
+
background-color: var(--e-c-mono-700);
|
|
41
|
+
|
|
42
|
+
.toggle-switch__text {
|
|
43
|
+
color: var(--e-c-mono-00);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
34
46
|
}
|
|
35
47
|
|
|
36
48
|
.toggle-switch__handle {
|
|
@@ -71,22 +83,6 @@
|
|
|
71
83
|
}
|
|
72
84
|
}
|
|
73
85
|
|
|
74
|
-
&:hover {
|
|
75
|
-
.toggle-switch__toggle {
|
|
76
|
-
background-color: var(--e-c-mono-500);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
&:active {
|
|
81
|
-
.toggle-switch__toggle {
|
|
82
|
-
background-color: var(--e-c-mono-700);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.toggle-switch__text {
|
|
86
|
-
color: var(--e-c-mono-00);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
86
|
// States
|
|
91
87
|
&.error {
|
|
92
88
|
.toggle-switch__error-text {
|
|
@@ -97,11 +93,19 @@
|
|
|
97
93
|
&.checked {
|
|
98
94
|
.toggle-switch__toggle {
|
|
99
95
|
background-color: var(--e-c-primary-01-900);
|
|
96
|
+
|
|
97
|
+
&:hover {
|
|
98
|
+
background-color: var(--e-c-secondary-01-900);
|
|
99
|
+
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
.toggle-switch__handle {
|
|
103
103
|
transform: translateX(calc(var(--width) - var(--handle-size) - var(--inner-padding) * 2));
|
|
104
104
|
color: var(--e-c-primary-01-900);
|
|
105
|
+
|
|
106
|
+
&:hover {
|
|
107
|
+
color: var(--e-c-secondary-01-900);
|
|
108
|
+
}
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
.toggle-switch__text {
|
|
@@ -117,10 +121,6 @@
|
|
|
117
121
|
}
|
|
118
122
|
|
|
119
123
|
&:hover {
|
|
120
|
-
.toggle-switch__toggle {
|
|
121
|
-
background-color: var(--e-c-secondary-01-900);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
124
|
.toggle-switch__handle {
|
|
125
125
|
color: var(--e-c-secondary-01-900);
|
|
126
126
|
}
|
|
@@ -157,3 +157,7 @@
|
|
|
157
157
|
margin-top: var(--e-space-1);
|
|
158
158
|
color: var(--e-c-signal-03-700);
|
|
159
159
|
}
|
|
160
|
+
|
|
161
|
+
.toggle-switch__additional-label {
|
|
162
|
+
display: none;
|
|
163
|
+
}
|
|
@@ -7,9 +7,9 @@ export interface ToggleSwitch {
|
|
|
7
7
|
name: string
|
|
8
8
|
label?: string
|
|
9
9
|
disabled?: boolean
|
|
10
|
-
error
|
|
10
|
+
error?: boolean
|
|
11
11
|
errorMessage?: string
|
|
12
|
-
variant?: '
|
|
12
|
+
variant?: 'big' | 'small'
|
|
13
13
|
labelPosition?: 'left' | 'right'
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -18,7 +18,7 @@ const {
|
|
|
18
18
|
labelPosition = 'right',
|
|
19
19
|
disabled = false,
|
|
20
20
|
errorMessage = '',
|
|
21
|
-
error,
|
|
21
|
+
error = false,
|
|
22
22
|
} = defineProps<ToggleSwitch>()
|
|
23
23
|
|
|
24
24
|
const model = defineModel<boolean>({ default: false })
|
|
@@ -42,8 +42,12 @@ const classes = computed(() => ({
|
|
|
42
42
|
|
|
43
43
|
<template>
|
|
44
44
|
<div :class="['toggle-switch', classes]">
|
|
45
|
-
<
|
|
46
|
-
<
|
|
45
|
+
<div class="toggle-switch__wrapper">
|
|
46
|
+
<label class="toggle-switch__toggle">
|
|
47
|
+
<slot name="input">
|
|
48
|
+
<input v-model="model" type="checkbox" :name :disabled v-bind="$attrs" />
|
|
49
|
+
</slot>
|
|
50
|
+
|
|
47
51
|
<span class="toggle-switch__text yes" :aria-hidden="model ? 'false' : 'true'">
|
|
48
52
|
{{ getTranslation('yes') }}
|
|
49
53
|
</span>
|
|
@@ -53,14 +57,12 @@ const classes = computed(() => ({
|
|
|
53
57
|
<span class="toggle-switch__handle">
|
|
54
58
|
<UIcon :name="model ? checkIcon : uncheckIcon" custom-size />
|
|
55
59
|
</span>
|
|
56
|
-
</
|
|
57
|
-
|
|
58
|
-
<slot name="label">{{ label }}</slot>
|
|
60
|
+
</label>
|
|
59
61
|
|
|
60
|
-
<
|
|
61
|
-
<
|
|
62
|
-
</
|
|
63
|
-
</
|
|
62
|
+
<span class="toggle-switch__additional-label">
|
|
63
|
+
<slot name="label"><span v-html="label"></span></slot>
|
|
64
|
+
</span>
|
|
65
|
+
</div>
|
|
64
66
|
|
|
65
67
|
<div class="toggle-switch__error-text">
|
|
66
68
|
<slot name="error-message">{{ errorMessage }}</slot>
|
|
@@ -69,3 +71,11 @@ const classes = computed(() => ({
|
|
|
69
71
|
</template>
|
|
70
72
|
|
|
71
73
|
<style scoped lang="scss" src="./toggle-switch.scss"></style>
|
|
74
|
+
<style lang="scss">
|
|
75
|
+
@use '../../elements/text-link/text-link' as t;
|
|
76
|
+
.toggle-switch__wrapper {
|
|
77
|
+
a {
|
|
78
|
+
@include t.text-link;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
</style>
|
package/i18n/i18n.ts
CHANGED
|
@@ -13,6 +13,14 @@ const translations = {
|
|
|
13
13
|
cancel: 'Abbrechen',
|
|
14
14
|
openMenu: 'Menu öffnen',
|
|
15
15
|
closeMenu: 'Menu schliessen',
|
|
16
|
+
dragFileHereOr: 'Datei hierher ziehen oder',
|
|
17
|
+
chooseFile: 'Datei wählen',
|
|
18
|
+
maxSizePerFile: 'Max. $SIZE pro Datei',
|
|
19
|
+
incorrectFileFormat: 'Dateiformat ist nicht zugelassen.',
|
|
20
|
+
fileTooLarge: 'Datei zu gross.',
|
|
21
|
+
maxFileCountAllowed: 'Maximal $COUNT Dateien erlaubt.',
|
|
22
|
+
cancelSearch: 'Suche abbrechen',
|
|
23
|
+
download: 'Herunterladen',
|
|
16
24
|
},
|
|
17
25
|
FR: {
|
|
18
26
|
yes: 'Ja',
|
|
@@ -28,6 +36,14 @@ const translations = {
|
|
|
28
36
|
cancel: 'Annuler',
|
|
29
37
|
openMenu: 'Ouvrir le menu',
|
|
30
38
|
closeMenu: 'Fermer le menu',
|
|
39
|
+
dragFileHereOr: 'Faites glisser le fichier ici ou',
|
|
40
|
+
chooseFile: 'Choisir un fichier',
|
|
41
|
+
maxSizePerFile: 'Max. $SIZE par fichier',
|
|
42
|
+
incorrectFileFormat: "Le format de fichier n'est pas autorisé.",
|
|
43
|
+
fileTooLarge: 'Fichier trop volumineux',
|
|
44
|
+
maxFileCountAllowed: 'Maximum de $COUNT fichiers autorisés',
|
|
45
|
+
cancelSearch: 'Annuler la recherche',
|
|
46
|
+
download: 'Télécharger',
|
|
31
47
|
},
|
|
32
48
|
IT: {
|
|
33
49
|
yes: 'Ja',
|
|
@@ -43,6 +59,14 @@ const translations = {
|
|
|
43
59
|
cancel: 'cancellare',
|
|
44
60
|
openMenu: 'Apri il menu',
|
|
45
61
|
closeMenu: 'Chiudi menù',
|
|
62
|
+
dragFileHereOr: 'Trascina il file qui o',
|
|
63
|
+
chooseFile: 'scegli il file',
|
|
64
|
+
maxSizePerFile: 'Max. $SIZE per file',
|
|
65
|
+
incorrectFileFormat: 'Formato file non consentito.',
|
|
66
|
+
fileTooLarge: 'File troppo grande',
|
|
67
|
+
maxFileCountAllowed: 'Sono consentiti al massimo $COUNT file',
|
|
68
|
+
cancelSearch: 'annullare la ricerca',
|
|
69
|
+
download: 'scaricamento',
|
|
46
70
|
},
|
|
47
71
|
EN: {
|
|
48
72
|
yes: 'Ja',
|
|
@@ -58,6 +82,14 @@ const translations = {
|
|
|
58
82
|
cancel: 'Cancel',
|
|
59
83
|
openMenu: 'Open menu',
|
|
60
84
|
closeMenu: 'Close menu',
|
|
85
|
+
dragFileHereOr: 'Drag file here or',
|
|
86
|
+
chooseFile: 'Choose file',
|
|
87
|
+
maxSizePerFile: 'Max. $SIZE per file',
|
|
88
|
+
incorrectFileFormat: 'File format is not allowed.',
|
|
89
|
+
fileTooLarge: 'File too large',
|
|
90
|
+
maxFileCountAllowed: 'Maximum $COUNT files allowed',
|
|
91
|
+
cancelSearch: 'Cancel search',
|
|
92
|
+
download: 'Download',
|
|
61
93
|
},
|
|
62
94
|
}
|
|
63
95
|
|
|
@@ -25,6 +25,24 @@
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
@mixin portal-content-container {
|
|
29
|
+
margin: 0 auto;
|
|
30
|
+
max-width: a.rem(1282);
|
|
31
|
+
width: 100%;
|
|
32
|
+
padding-left: var(--e-space-10);
|
|
33
|
+
padding-right: var(--e-space-10);
|
|
34
|
+
|
|
35
|
+
@include a.bp(lg) {
|
|
36
|
+
padding-left: var(--e-space-8);
|
|
37
|
+
padding-right: var(--e-space-8);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@include a.bp(m) {
|
|
41
|
+
padding-left: var(--e-space-5);
|
|
42
|
+
padding-right: var(--e-space-5);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
28
46
|
.container {
|
|
29
47
|
@include grid-container;
|
|
30
48
|
}
|
package/layout/index.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { default as USettingsLayout } from './settings/u-settings-layout.vue'
|
|
2
2
|
export { default as UPortalLayout } from './portal/u-portal.vue'
|
|
3
|
+
export { default as UTileGrid } from './tile-grid/u-tile-grid.vue'
|
|
4
|
+
export { default as UTileItem } from './tile-grid/u-tile-item.vue'
|
|
@@ -1,19 +1,47 @@
|
|
|
1
1
|
@use '../../base/abstracts' as a;
|
|
2
|
+
@use '../../layout/container/container' as c;
|
|
2
3
|
|
|
3
4
|
.portal {
|
|
4
|
-
|
|
5
|
+
--side-nav-width: 80px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.portal__side-navigation {
|
|
9
|
+
position: fixed;
|
|
5
10
|
height: 100vh;
|
|
11
|
+
display: flex;
|
|
6
12
|
}
|
|
7
13
|
|
|
8
14
|
.portal__top-navigation {
|
|
9
15
|
display: none;
|
|
10
16
|
}
|
|
11
17
|
|
|
18
|
+
.portal__sub-navigation {
|
|
19
|
+
position: sticky;
|
|
20
|
+
top: 0;
|
|
21
|
+
z-index: 10;
|
|
22
|
+
background-color: var(--e-c-mono-00);
|
|
23
|
+
}
|
|
24
|
+
|
|
12
25
|
.portal__main {
|
|
13
|
-
flex: 1 1 auto;
|
|
14
26
|
display: flex;
|
|
15
27
|
flex-direction: column;
|
|
16
|
-
|
|
28
|
+
padding-left: var(--side-nav-width);
|
|
29
|
+
min-height: 100vh;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.portal__content-container {
|
|
33
|
+
@include c.portal-content-container;
|
|
34
|
+
|
|
35
|
+
padding-top: var(--e-space-10);
|
|
36
|
+
padding-bottom: var(--e-space-10);
|
|
37
|
+
|
|
38
|
+
@include a.bp(lg) {
|
|
39
|
+
padding-top: var(--e-space-8);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@include a.bp(m) {
|
|
43
|
+
padding-top: var(--e-space-6);
|
|
44
|
+
}
|
|
17
45
|
}
|
|
18
46
|
|
|
19
47
|
.portal__footer {
|
|
@@ -21,10 +49,6 @@
|
|
|
21
49
|
}
|
|
22
50
|
|
|
23
51
|
@include a.bp(lg) {
|
|
24
|
-
.portal {
|
|
25
|
-
flex-direction: column;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
52
|
.portal__top-navigation {
|
|
29
53
|
display: block;
|
|
30
54
|
}
|
|
@@ -32,4 +56,8 @@
|
|
|
32
56
|
.portal__side-navigation {
|
|
33
57
|
display: none;
|
|
34
58
|
}
|
|
59
|
+
|
|
60
|
+
.portal__sub-navigation {
|
|
61
|
+
background-color: var(--e-c-mono-50);
|
|
62
|
+
}
|
|
35
63
|
}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useTemplateRef, onMounted, ref } from 'vue'
|
|
3
|
+
|
|
4
|
+
const sideNavObserver = new ResizeObserver((entries) => {
|
|
5
|
+
for (const entry of entries) {
|
|
6
|
+
if (entry.target === sideNavEl.value) {
|
|
7
|
+
sideNavWidth.value = entry.contentBoxSize[0].inlineSize
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
const sideNavEl = useTemplateRef('sideNavigation')
|
|
13
|
+
const sideNavWidth = ref(0)
|
|
14
|
+
|
|
15
|
+
onMounted(() => {
|
|
16
|
+
sideNavObserver.observe(sideNavEl.value)
|
|
17
|
+
})
|
|
18
|
+
</script>
|
|
19
|
+
|
|
1
20
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
21
|
+
<div
|
|
22
|
+
class="portal"
|
|
23
|
+
:style="{
|
|
24
|
+
'--side-nav-width': `${sideNavWidth}px`,
|
|
25
|
+
}"
|
|
26
|
+
>
|
|
27
|
+
<div ref="sideNavigation" class="portal__side-navigation">
|
|
4
28
|
<slot name="side-navigation"></slot>
|
|
5
29
|
</div>
|
|
6
30
|
|
|
@@ -9,7 +33,13 @@
|
|
|
9
33
|
</div>
|
|
10
34
|
|
|
11
35
|
<div class="portal__main">
|
|
12
|
-
<
|
|
36
|
+
<div class="portal__sub-navigation">
|
|
37
|
+
<slot name="sub-navigation"></slot>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div class="portal__content-container">
|
|
41
|
+
<slot></slot>
|
|
42
|
+
</div>
|
|
13
43
|
|
|
14
44
|
<div class="portal__footer">
|
|
15
45
|
<slot name="footer"></slot>
|
|
@@ -18,5 +48,4 @@
|
|
|
18
48
|
</div>
|
|
19
49
|
</template>
|
|
20
50
|
|
|
21
|
-
<script setup lang="ts"></script>
|
|
22
51
|
<style scoped lang="scss" src="./portal.scss"></style>
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
grid-template-rows: repeat(2, auto);
|
|
7
7
|
grid-column-gap: var(--e-space-24);
|
|
8
8
|
grid-row-gap: var(--e-space-12);
|
|
9
|
-
padding: var(--e-space-10);
|
|
9
|
+
padding: var(--e-space-10) 0;
|
|
10
10
|
|
|
11
11
|
@include a.bp(lg) {
|
|
12
12
|
display: flex;
|
|
13
13
|
flex-direction: column;
|
|
14
14
|
row-gap: var(--e-space-6);
|
|
15
|
-
padding: var(--e-space-6)
|
|
15
|
+
padding: var(--e-space-6) 0 var(--e-space-10);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
|
+
|
|
3
|
+
.tile-item {
|
|
4
|
+
grid-column: span 12;
|
|
5
|
+
|
|
6
|
+
&[data-width='1'] {
|
|
7
|
+
grid-column: span 12;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
&[data-width='1/2'] {
|
|
11
|
+
grid-column: span 6;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&[data-width='1/3'] {
|
|
15
|
+
grid-column: span 4;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&[data-width='2/3'] {
|
|
19
|
+
grid-column: span 8;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@container tile-grid (width < 920px) {
|
|
24
|
+
.tile-item {
|
|
25
|
+
&[data-width='1/2'],
|
|
26
|
+
&[data-width='1/3'],
|
|
27
|
+
&[data-width='2/3'] {
|
|
28
|
+
grid-column: span 12;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
width?: '1' | '1/2' | '1/3' | '2/3'
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const { width = '1' } = defineProps<Props>()
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<div class="tile-item" :data-width="width">
|
|
11
|
+
<slot />
|
|
12
|
+
</div>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<style scoped lang="scss" src="./tile-item.scss"></style>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
|
+
|
|
3
|
+
.content-title {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: var(--e-space-8);
|
|
7
|
+
justify-content: flex-end;
|
|
8
|
+
|
|
9
|
+
@include a.bp(xl) {
|
|
10
|
+
flex-wrap: wrap;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@include a.bp(m) {
|
|
14
|
+
row-gap: var(--e-space-6);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.content-title__content {
|
|
19
|
+
margin-right: auto;
|
|
20
|
+
|
|
21
|
+
@include a.bp(xl) {
|
|
22
|
+
width: 100%;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.content-title__title {
|
|
27
|
+
@include a.type(500, strong);
|
|
28
|
+
|
|
29
|
+
min-width: max-content;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.content-title__text {
|
|
33
|
+
@include a.type(100);
|
|
34
|
+
|
|
35
|
+
margin-top: var(--e-space-2);
|
|
36
|
+
color: var(--e-c-mono-700);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.content-title__custom-content {
|
|
40
|
+
@include a.bp(xl) {
|
|
41
|
+
width: 100%;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="content-title">
|
|
3
|
+
<div class="content-title__content">
|
|
4
|
+
<h1 class="content-title__title">
|
|
5
|
+
<slot />
|
|
6
|
+
</h1>
|
|
7
|
+
|
|
8
|
+
<p v-if="$slots.text" class="content-title__text">
|
|
9
|
+
<slot name="text" />
|
|
10
|
+
</p>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div v-if="$slots['custom']" class="content-title__custom-content">
|
|
14
|
+
<slot name="custom"></slot>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<style scoped lang="scss" src="./content-title.scss"></style>
|
|
@@ -50,15 +50,17 @@
|
|
|
50
50
|
padding: var(--e-space-7) var(--e-space-7) 0;
|
|
51
51
|
height: a.rem(670);
|
|
52
52
|
max-height: 80vh;
|
|
53
|
-
max-width: a.rem(
|
|
54
|
-
width:
|
|
53
|
+
max-width: a.rem(540);
|
|
54
|
+
min-width: a.rem(480);
|
|
55
55
|
|
|
56
56
|
* + .dialog__content-image {
|
|
57
57
|
margin-top: var(--e-space-5);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
@include a.bp(m) {
|
|
61
|
+
width: 100%;
|
|
61
62
|
max-width: none;
|
|
63
|
+
min-width: 0;
|
|
62
64
|
height: auto;
|
|
63
65
|
min-height: a.rem(440);
|
|
64
66
|
padding-left: var(--e-space-5);
|
|
@@ -89,7 +91,8 @@
|
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
|
|
92
|
-
.content-title + .content-text
|
|
94
|
+
.content-title + .content-text,
|
|
95
|
+
.content-title + .content-custom {
|
|
93
96
|
margin-top: var(--e-space-2);
|
|
94
97
|
|
|
95
98
|
@include a.bp(m) {
|
|
@@ -109,6 +112,7 @@
|
|
|
109
112
|
position: sticky;
|
|
110
113
|
display: flex;
|
|
111
114
|
flex-direction: column;
|
|
115
|
+
row-gap: var(--e-space-4);
|
|
112
116
|
bottom: 0;
|
|
113
117
|
margin-top: var(--overflow-gradient-height);
|
|
114
118
|
padding: var(--e-space-8) var(--e-space-1) var(--e-space-7);
|
|
@@ -96,7 +96,7 @@ watch(visible, (newV) => {
|
|
|
96
96
|
</h3>
|
|
97
97
|
</div>
|
|
98
98
|
|
|
99
|
-
<div class="content-text">
|
|
99
|
+
<div v-if="$slots.text || text" class="content-text">
|
|
100
100
|
<div class="richtext">
|
|
101
101
|
<slot name="text">
|
|
102
102
|
<div v-html="text"></div>
|
|
@@ -104,6 +104,10 @@ watch(visible, (newV) => {
|
|
|
104
104
|
</div>
|
|
105
105
|
</div>
|
|
106
106
|
|
|
107
|
+
<div v-if="$slots.custom" class="content-custom">
|
|
108
|
+
<slot name="custom"></slot>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
107
111
|
<div class="dialog__content-image">
|
|
108
112
|
<slot name="content-image">
|
|
109
113
|
<img v-bind="contentImage" />
|
|
@@ -112,6 +116,7 @@ watch(visible, (newV) => {
|
|
|
112
116
|
</div>
|
|
113
117
|
|
|
114
118
|
<div class="cta-container">
|
|
119
|
+
<slot name="cta"></slot>
|
|
115
120
|
<UButton @click="visible = false">{{ closeBtnLabel }}</UButton>
|
|
116
121
|
</div>
|
|
117
122
|
</div>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
@use '../../base/abstracts
|
|
1
|
+
@use '../../base/abstracts' as a;
|
|
2
2
|
@use '../../elements/text-link/text-link.scss' as t;
|
|
3
3
|
@use '../../layout/container/container.scss' as l;
|
|
4
4
|
|
|
5
5
|
.footer {
|
|
6
|
+
&.portal,
|
|
6
7
|
&.reduced {
|
|
7
8
|
.footer__top {
|
|
8
9
|
display: none;
|
|
@@ -25,6 +26,12 @@
|
|
|
25
26
|
position: static;
|
|
26
27
|
}
|
|
27
28
|
}
|
|
29
|
+
|
|
30
|
+
&.portal {
|
|
31
|
+
.footer__container {
|
|
32
|
+
@include l.portal-content-container;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
28
35
|
}
|
|
29
36
|
|
|
30
37
|
.footer__top {
|
package/modules/index.js
CHANGED
|
@@ -8,3 +8,5 @@ export { default as UProgressIndicator } from './progress-indicator/u-progress-i
|
|
|
8
8
|
export { default as UToast } from './toast/u-toast.vue'
|
|
9
9
|
export { toast } from './toast/useToast.ts'
|
|
10
10
|
export { default as UDialog } from './dialog/u-dialog.vue'
|
|
11
|
+
export { default as USearchFilter } from './search-filter/u-search-filter.vue'
|
|
12
|
+
export { default as UContentTitle } from './content-title/u-content-title.vue'
|