@energie360/ui-library 0.1.13 → 0.1.15

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.
Files changed (37) hide show
  1. package/base/abstracts/_layers.scss +1 -0
  2. package/base/abstracts/_resets.scss +1 -0
  3. package/components/card-header/card-header.scss +32 -32
  4. package/components/context-menu/context-menu.scss +1 -0
  5. package/components/hint/hint.scss +126 -0
  6. package/components/hint/u-hint.vue +54 -0
  7. package/components/index.js +2 -0
  8. package/components/inline-edit/u-inline-edit.vue +3 -1
  9. package/components/navigation-panel-tile/navigation-panel-tile.scss +105 -0
  10. package/components/navigation-panel-tile/u-navigation-panel-tile.vue +78 -0
  11. package/components/navigation-toolbar-link/navigation-toolbar-link.scss +23 -11
  12. package/components/navigation-toolbar-link/u-navigation-toolbar-link.vue +1 -1
  13. package/components/richtext/richtext.scss +24 -3
  14. package/components/richtext/u-richtext.vue +1 -3
  15. package/components/welcome/welcome.scss +1 -0
  16. package/dist/base-style.css +1 -0
  17. package/dist/base-style.css.map +1 -1
  18. package/elements/form/form.scss +3 -2
  19. package/elements/form-field/form-field-prefix-suffix.scss +1 -2
  20. package/elements/icon/u-icon.vue +34 -24
  21. package/elements/select/u-select.vue +5 -5
  22. package/elements/text-field/text-field.types.ts +1 -0
  23. package/elements/text-field/u-text-field.vue +19 -13
  24. package/modules/index.js +1 -0
  25. package/modules/navigation-panel/navigation-panel.scss +64 -0
  26. package/modules/navigation-panel/u-navigation-panel.vue +22 -0
  27. package/modules/navigation-toolbar-side/navigation-toolbar-side.scss +1 -1
  28. package/modules/navigation-toolbar-top/navigation-toolbar-top.scss +1 -0
  29. package/package.json +1 -1
  30. package/utils/translations/translate.js +0 -10
  31. package/elements/button/button.js +0 -12
  32. package/elements/elements.js +0 -35
  33. package/elements/icon/icon.js +0 -13
  34. package/elements/icon-button/icon-button.js +0 -12
  35. package/elements/loader/loader.js +0 -13
  36. package/modules/feedback/index.js +0 -1
  37. package/modules/inline-edit-group/index.js +0 -1
@@ -2,5 +2,6 @@
2
2
  // z-index layers
3
3
  $layer-tooltip: 100;
4
4
  $layer-nav-flyout: 200;
5
+ $layer-nav-panel: 200;
5
6
  $layer-mobile-menu: 200;
6
7
  $layer-message: 300;
@@ -7,5 +7,6 @@
7
7
  font-family: inherit;
8
8
  font-size: inherit;
9
9
  background: none;
10
+ text-align: left;
10
11
  }
11
12
  }
@@ -9,6 +9,38 @@ $image-col-width-small: 100px;
9
9
  display: flex;
10
10
  column-gap: var(--e-space-2);
11
11
 
12
+ .image-background {
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ width: 100%;
17
+ aspect-ratio: 1;
18
+ background-color: var(--e-c-primary-01-100);
19
+ border-radius: 100%;
20
+ }
21
+
22
+ .badge {
23
+ @include a.type(100, strong);
24
+
25
+ position: absolute;
26
+ padding: a.rem(6) a.rem(8) a.rem(4);
27
+ color: var(--e-c-mono-00);
28
+ background-color: var(--e-c-secondary-05-500);
29
+ border-radius: var(--e-brd-radius-1);
30
+ top: a.rem(-16);
31
+ right: a.rem(-16);
32
+
33
+ @include a.bp(m) {
34
+ top: a.rem(-12);
35
+ right: a.rem(-12);
36
+ }
37
+
38
+ @include a.bp(s) {
39
+ top: a.rem(-10);
40
+ right: a.rem(-10);
41
+ }
42
+ }
43
+
12
44
  @container (max-width: 260px) {
13
45
  flex-direction: column-reverse;
14
46
  }
@@ -64,35 +96,3 @@ $image-col-width-small: 100px;
64
96
  flex-basis: a.rem($image-col-width-small);
65
97
  }
66
98
  }
67
-
68
- .image-background {
69
- display: flex;
70
- align-items: center;
71
- justify-content: center;
72
- width: 100%;
73
- aspect-ratio: 1;
74
- background-color: var(--e-c-primary-01-100);
75
- border-radius: 100%;
76
- }
77
-
78
- .badge {
79
- @include a.type(100, strong);
80
-
81
- position: absolute;
82
- padding: a.rem(6) a.rem(8) a.rem(4);
83
- color: var(--e-c-mono-00);
84
- background-color: var(--e-c-secondary-05-500);
85
- border-radius: var(--e-brd-radius-1);
86
- top: a.rem(-16);
87
- right: a.rem(-16);
88
-
89
- @include a.bp(m) {
90
- top: a.rem(-12);
91
- right: a.rem(-12);
92
- }
93
-
94
- @include a.bp(s) {
95
- top: a.rem(-10);
96
- right: a.rem(-10);
97
- }
98
- }
@@ -15,6 +15,7 @@
15
15
  box-shadow: var(--e-elevation-md);
16
16
  background-color: var(--e-c-mono-00);
17
17
  min-width: a.rem(240);
18
+ z-index: a.$layer-tooltip;
18
19
  }
19
20
 
20
21
  .menu-enter-active,
@@ -0,0 +1,126 @@
1
+ @use '../../base/abstracts' as a;
2
+ @use '../../elements/text-link/text-link.scss' as t;
3
+
4
+ .hint {
5
+ @mixin type-neutral {
6
+ background-color: var(--e-c-secondary-05-100);
7
+ color: var(--e-c-secondary-05-900);
8
+
9
+ &::before {
10
+ background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2Zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1Zm1-8h-2V7h2v2Z' fill='%230096DC'/%3E%3C/svg%3E");
11
+ }
12
+
13
+ // override some richtext styles.
14
+ .richtext {
15
+ a {
16
+ font-size: 100px;
17
+ color: inherit;
18
+
19
+ &:active,
20
+ &:hover {
21
+ text-decoration-color: var(--e-c-secondary-05-200);
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ @mixin type-warning {
28
+ background-color: var(--e-c-signal-02-100);
29
+ color: var(--e-c-signal-02-900);
30
+
31
+ &::before {
32
+ background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 21 12 2l11 19H1Zm11-3c.283 0 .52-.096.713-.288A.968.968 0 0 0 13 17a.968.968 0 0 0-.287-.712A.968.968 0 0 0 12 16a.968.968 0 0 0-.713.288A.968.968 0 0 0 11 17c0 .283.096.52.287.712.192.192.43.288.713.288Zm-1-3h2v-5h-2v5Z' fill='%23FF9800'/%3E%3C/svg%3E");
33
+ }
34
+
35
+ // override some richtext styles.
36
+ .richtext {
37
+ a {
38
+ color: inherit;
39
+
40
+ &:active,
41
+ &:hover {
42
+ text-decoration-color: var(--e-c-signal-02-100);
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ @mixin type-legal {
49
+ background-color: var(--e-c-mono-00);
50
+ border: 1px solid var(--e-c-mono-500);
51
+ border-left-width: 4px;
52
+ border-left-color: var(--e-c-mono-700);
53
+ color: var(--e-c-mono-900);
54
+
55
+ &::before {
56
+ background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='m12.86 3.404-.81.81 3.352 3.352.81-.81-3.353-3.352Zm.707-1.697a1 1 0 0 0-1.415 0l-1.8 1.8a1 1 0 0 0-.01 1.404L6.952 8.303a1 1 0 0 0-1.404.01l-1.84 1.84a1 1 0 0 0 0 1.414l4.342 4.342a1 1 0 0 0 1.414 0l1.84-1.84a1 1 0 0 0 0-1.414l-.092-.092.93-.93L20.6 20l1.4-1.4-8.46-8.366 1.063-1.062.091.091a1 1 0 0 0 1.415 0l1.8-1.8a1 1 0 0 0 0-1.414l-4.342-4.342ZM6.253 10.01l-.85.85 3.352 3.352.85-.85-3.352-3.352Zm1.975-.581 3.235-3.235L13.32 8.05l-3.235 3.235L8.23 9.429ZM16 21H4v-2h12v2Z' fill='%236B6B6B'/%3E%3C/svg%3E");
57
+ top: 0;
58
+ left: calc(
59
+ -24px - 12px - 4px
60
+ ); // 24px: icon width, 12px: distance to box, 4px: additonal border-width
61
+ }
62
+
63
+ > p,
64
+ .richtext {
65
+ margin-left: 0;
66
+ }
67
+
68
+ @include a.bp(lg) {
69
+ margin-top: calc(4px + 4px + 24px);
70
+ border: 1px solid var(--e-c-mono-500);
71
+ border-top-width: 4px;
72
+ border-top-color: var(--e-c-mono-700);
73
+
74
+ &::before {
75
+ left: 0;
76
+ top: calc(
77
+ -24px - 4px - 4px
78
+ ); // 24px: icon height, 12px: distance to box, 4px: additonal border-width
79
+ }
80
+ }
81
+ }
82
+
83
+ // Default type
84
+ @include type-neutral;
85
+
86
+ position: relative;
87
+ padding: var(--e-space-5) var(--e-space-4);
88
+ border-radius: var(--e-brd-radius-1);
89
+
90
+ &::before {
91
+ content: '';
92
+ position: absolute;
93
+ top: var(--e-space-5);
94
+ left: var(--e-space-4);
95
+ width: a.rem(24);
96
+ height: a.rem(24);
97
+ }
98
+
99
+ > p,
100
+ .richtext {
101
+ margin-left: var(--e-space-9);
102
+ }
103
+
104
+ > p {
105
+ @include a.type(200, strong);
106
+
107
+ margin-bottom: var(--e-space-1);
108
+ }
109
+
110
+ @include a.bp(lg) {
111
+ padding: var(--e-space-4);
112
+
113
+ &::before {
114
+ top: var(--e-space-4);
115
+ }
116
+ }
117
+
118
+ // Modifiers
119
+ &.hint--warning {
120
+ @include type-warning;
121
+ }
122
+
123
+ &.hint--legal {
124
+ @include type-legal;
125
+ }
126
+ }
@@ -0,0 +1,54 @@
1
+ <script setup lang="ts">
2
+ import { URichtext } from '../'
3
+
4
+ interface Props {
5
+ type?: 'neutral' | 'warning' | 'legal'
6
+ label?: string
7
+ text?: string
8
+ }
9
+
10
+ const { type = 'neutral' } = defineProps<Props>()
11
+ </script>
12
+
13
+ <template>
14
+ <div :class="['hint', `hint--${type}`]">
15
+ <p class="hint__label">
16
+ <slot name="label">{{ label }}</slot>
17
+ </p>
18
+
19
+ <URichtext class="hint__richtext" small :text><slot></slot></URichtext>
20
+ </div>
21
+ </template>
22
+
23
+ <style scoped lang="scss" src="./hint.scss"></style>
24
+
25
+ <style lang="scss">
26
+ .hint__richtext {
27
+ a {
28
+ color: inherit;
29
+
30
+ &:active,
31
+ &:hover {
32
+ text-decoration-color: var(--e-c-secondary-05-200);
33
+ }
34
+ }
35
+ }
36
+
37
+ .hint--warning {
38
+ .hint__richtext a {
39
+ &:active,
40
+ &:hover {
41
+ text-decoration-color: var(--e-c-signal-02-100);
42
+ }
43
+ }
44
+ }
45
+
46
+ .hint--legal {
47
+ .hint__richtext a {
48
+ &:active,
49
+ &:hover {
50
+ text-decoration-color: var(--e-c-mono-100);
51
+ }
52
+ }
53
+ }
54
+ </style>
@@ -49,3 +49,5 @@ export { default as UContextMenuDivider } from './context-menu-divider/u-context
49
49
  export { default as UCircularProgress } from './circular-progress/u-circular-progress.vue'
50
50
  export { default as UProgressAvatar } from './progress-avatar/u-progress-avatar.vue'
51
51
  export { default as UWelcome } from './welcome/u-welcome.vue'
52
+ export { default as UHint } from './hint/u-hint.vue'
53
+ export { default as UNavigationPanelTile } from './navigation-panel-tile/u-navigation-panel-tile.vue'
@@ -74,7 +74,9 @@ defineExpose({ collapse })
74
74
  <div class="inline-edit__heading-col">
75
75
  <p :id="headingId" class="inline-edit__title">{{ title }}</p>
76
76
 
77
- <p class="inline-edit__summary" v-html="summary"></p>
77
+ <p class="inline-edit__summary">
78
+ <slot name="summary">{{ summary }}</slot>
79
+ </p>
78
80
  <p class="inline-edit__description" v-html="description"></p>
79
81
  </div>
80
82
  <div class="inline-edit__heading-cta-col">
@@ -0,0 +1,105 @@
1
+ @use '../../base/abstracts/' as a;
2
+
3
+ .navigation-panel-tile {
4
+ display: flex;
5
+ column-gap: var(--e-space-2);
6
+ align-items: flex-start;
7
+ border: 2px solid var(--e-c-secondary-01-100);
8
+ border-radius: var(--e-brd-radius-2);
9
+ padding: var(--e-space-4);
10
+ transition: background-color a.$trs-ease-out;
11
+ background-color: var(--e-c-mono-00);
12
+
13
+ &.active:not(.disabled) {
14
+ background-color: var(--e-c-secondary-01-1000);
15
+ border-color: var(--e-c-secondary-01-1000);
16
+
17
+ .navigation-panel-tile__title,
18
+ .navigation-panel-tile__description,
19
+ .navigation-panel-tile__icon-wrapper {
20
+ color: var(--e-c-mono-00);
21
+ }
22
+ }
23
+
24
+ &.greyed:not(.disabled):not(:hover):not(.active) {
25
+ background-color: var(--e-c-mono-50);
26
+ border-color: var(--e-c-mono-200);
27
+ }
28
+
29
+ &.disabled {
30
+ pointer-events: none;
31
+ border-color: var(--e-c-mono-200);
32
+
33
+ .navigation-panel-tile__title,
34
+ .navigation-panel-tile__description,
35
+ .navigation-panel-tile__icon-wrapper {
36
+ color: var(--e-c-mono-500);
37
+ }
38
+ }
39
+
40
+ &:hover {
41
+ background-color: var(--e-c-primary-01-50);
42
+
43
+ .navigation-panel-tile__title,
44
+ .navigation-panel-tile__description {
45
+ color: var(--e-c-primary-01-700);
46
+ }
47
+ }
48
+
49
+ &:active {
50
+ background-color: var(--e-c-primary-01-100);
51
+ }
52
+
53
+ @include a.bp(lg) {
54
+ height: a.rem(82);
55
+ width: a.rem(260);
56
+ }
57
+ }
58
+
59
+ .navigation-panel-tile__title {
60
+ @include a.type(200, strong);
61
+
62
+ transition: color a.$trs-ease-out;
63
+ }
64
+
65
+ .navigation-panel-tile__icon-wrapper {
66
+ position: relative;
67
+ transition: color a.$trs-ease-out;
68
+ }
69
+
70
+ .navigation-panel-tile__description {
71
+ @include a.type(100);
72
+
73
+ color: var(--e-c-mono-700);
74
+ transition: color a.$trs-ease-out;
75
+
76
+ @include a.bp(lg) {
77
+ width: a.rem(192);
78
+ height: a.rem(22);
79
+ white-space: nowrap;
80
+ overflow: hidden;
81
+ text-overflow: ellipsis;
82
+ }
83
+ }
84
+
85
+ .badge {
86
+ position: absolute;
87
+ top: -2px;
88
+ right: -2px;
89
+ width: a.rem(13);
90
+ height: a.rem(13);
91
+ background-color: var(--e-c-mono-900);
92
+ border-radius: 100%;
93
+
94
+ &.inactive {
95
+ background-image: url("data:image/svg+xml,%3Csvg width='13' height='13' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='6.5' cy='6.5' r='6.5' fill='%23333'/%3E%3Cpath d='m4.414 3 2.12 2.121L8.658 3l1.414 1.414-2.122 2.122 2.122 2.121-1.414 1.414-2.122-2.12-2.12 2.12L3 8.656l2.12-2.12L3 4.412 4.414 3Z' fill='%23fff'/%3E%3C/svg%3E");
96
+ }
97
+ }
98
+
99
+ .navigation-panel-tile__text-column {
100
+ flex: 1 1 auto;
101
+ }
102
+
103
+ .badge + .icon {
104
+ color: var(--e-c-mono-500);
105
+ }
@@ -0,0 +1,78 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+ import { UIcon } from '../../elements'
4
+
5
+ enum IconBadge {
6
+ Inactive = 'inactive',
7
+ }
8
+
9
+ interface Props {
10
+ title: string
11
+ description: string
12
+ icon: string
13
+ iconBadge?: IconBadge
14
+ href?: string
15
+ target?: string
16
+ active?: boolean
17
+ greyed?: boolean
18
+ disabled?: boolean
19
+ }
20
+
21
+ const {
22
+ href = '',
23
+ target = '_self',
24
+ active = false,
25
+ disabled = false,
26
+ greyed = false,
27
+ } = defineProps<Props>()
28
+
29
+ const tag = computed(() => (href ? 'a' : 'div'))
30
+ </script>
31
+
32
+ <template>
33
+ <component
34
+ :is="tag"
35
+ :href="tag === 'a' ? href : null"
36
+ :target="tag === 'a' ? target : null"
37
+ :class="['navigation-panel-tile', { active, disabled, greyed }]"
38
+ >
39
+ <div class="navigation-panel-tile__text-column">
40
+ <div class="navigation-panel-tile__title">
41
+ {{ title }}
42
+ </div>
43
+ <div class="navigation-panel-tile__description" v-html="description" />
44
+ </div>
45
+
46
+ <div class="navigation-panel-tile__icon-column">
47
+ <div class="navigation-panel-tile__icon-wrapper">
48
+ <span v-if="iconBadge" :class="['badge', iconBadge]" />
49
+
50
+ <UIcon :name="icon" />
51
+ </div>
52
+ </div>
53
+ </component>
54
+ </template>
55
+
56
+ <style lang="scss" scoped src="./navigation-panel-tile.scss"></style>
57
+ <style lang="scss">
58
+ @use '../../base/abstracts/' as a;
59
+
60
+ .navigation-panel-tile__description {
61
+ @include a.bp(lg) {
62
+ p {
63
+ width: a.rem(192);
64
+ white-space: nowrap;
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ }
68
+
69
+ br {
70
+ content: '';
71
+
72
+ &::after {
73
+ content: ' ';
74
+ }
75
+ }
76
+ }
77
+ }
78
+ </style>
@@ -1,8 +1,6 @@
1
- // TODO: How to handle text overflow?
2
-
3
1
  @use '../../base/abstracts/' as a;
4
2
 
5
- @keyframes fadeInLabel {
3
+ @keyframes fade-in-label {
6
4
  0% {
7
5
  opacity: 0;
8
6
  transform: translateX(calc(100% + #{a.rem(8)}));
@@ -14,7 +12,7 @@
14
12
  }
15
13
  }
16
14
 
17
- @keyframes fadeOutLabel {
15
+ @keyframes fade-out-label {
18
16
  0% {
19
17
  opacity: 1;
20
18
  transform: translateX(100%);
@@ -36,7 +34,7 @@
36
34
  0% {
37
35
  overflow: hidden;
38
36
  padding: var(--e-space-1_5) var(--e-space-3);
39
- width: 100%;
37
+ width: var(--nav-toolbar-link-width);
40
38
  }
41
39
 
42
40
  100% {
@@ -56,11 +54,13 @@
56
54
  100% {
57
55
  overflow: hidden;
58
56
  padding: var(--e-space-1_5) var(--e-space-3);
59
- width: 100%;
57
+ width: var(--nav-toolbar-link-width);
60
58
  }
61
59
  }
62
60
 
63
61
  .navigation-toolbar-link {
62
+ // We assume that the width of the link is fixed.
63
+ --nav-toolbar-link-width: #{a.rem(232)};
64
64
  --transition-ease-out: cubic-bezier(0.215, 0.61, 0.355, 1); /* easeOutCubic */
65
65
 
66
66
  position: relative;
@@ -71,7 +71,7 @@
71
71
  align-items: center;
72
72
  flex-wrap: nowrap;
73
73
  white-space: nowrap;
74
- width: 100%;
74
+ width: var(--nav-toolbar-link-width);
75
75
  column-gap: var(--e-space-2);
76
76
  background-color: var(--e-c-secondary-01-1000);
77
77
  color: var(--e-c-mono-00);
@@ -124,7 +124,7 @@
124
124
  &.hover-out:not(.is-expanding, .is-collapsing, .label-hidden) {
125
125
  .navigation-toolbar-link__label {
126
126
  // TODO: Maybe just use transitions instead of keyframe animations
127
- animation-name: fadeOutLabel;
127
+ animation-name: fade-out-label;
128
128
  animation-duration: var(--e-trs-duration-faster);
129
129
  animation-timing-function: ease-out;
130
130
  }
@@ -132,10 +132,9 @@
132
132
 
133
133
  &:hover:not(.is-expanding, .is-collapsing, .label-hidden) {
134
134
  .navigation-toolbar-link__label {
135
- animation-name: fadeInLabel;
135
+ animation-name: fade-in-label;
136
136
  animation-duration: var(--e-trs-duration-faster);
137
137
  animation-timing-function: ease-out;
138
-
139
138
  padding: var(--e-space-1_5) var(--e-space-2);
140
139
  transform: translateX(100%);
141
140
  width: auto;
@@ -146,16 +145,29 @@
146
145
  }
147
146
  }
148
147
 
148
+ .navigation-toolbar-link__label {
149
+ // internal CSS variable
150
+ --label-width: calc(
151
+ var(--nav-toolbar-link-width) - var(--e-space-2) - 24px - 2 * var(--e-space-3)
152
+ );
153
+
154
+ width: var(--label-width);
155
+ text-overflow: ellipsis;
156
+ overflow: hidden;
157
+ }
158
+
149
159
  // Animation
150
160
  .navigation-toolbar-link {
151
161
  &.is-collapsing,
152
162
  &.is-expanding {
153
163
  animation-duration: var(--e-trs-duration-faster);
154
164
 
165
+ // animation-duration: 5s;
166
+
155
167
  .navigation-toolbar-link__label {
156
168
  animation: none;
157
169
  position: static;
158
- width: auto;
170
+ width: var(--label-width);
159
171
  height: auto;
160
172
  opacity: 1;
161
173
  background-color: transparent;
@@ -99,7 +99,7 @@ const tag = computed(() => {
99
99
  @mouseleave="onHoverOut"
100
100
  >
101
101
  <UIcon :name="icon" />
102
- <span ref="label" class="navigation-toolbar-link__label">
102
+ <span ref="label" class="navigation-toolbar-link__label" :title="label">
103
103
  <slot>{{ label }}</slot>
104
104
  </span>
105
105
  </component>
@@ -1,5 +1,4 @@
1
1
  @use '../../base/abstracts/' as a;
2
- @use '../../elements/text-link/text-link.scss' as t;
3
2
 
4
3
  .richtext {
5
4
  // Spacing rules
@@ -74,7 +73,21 @@
74
73
  }
75
74
 
76
75
  a {
77
- @include t.text-link;
76
+ font-weight: var(--e-type-weight-strong);
77
+ color: var(--e-c-primary-01-700);
78
+ text-decoration: underline;
79
+ text-underline-offset: 0.3em;
80
+ transition:
81
+ text-decoration-color a.$trs-default,
82
+ color a.$trs-default;
83
+
84
+ &:hover {
85
+ text-decoration-color: var(--e-c-primary-01-50);
86
+ }
87
+
88
+ &:active {
89
+ text-decoration-color: var(--e-c-primary-01-700);
90
+ }
78
91
  }
79
92
 
80
93
  ul,
@@ -168,7 +181,15 @@
168
181
  }
169
182
 
170
183
  a {
171
- @include t.text-link--inverted;
184
+ color: var(--e-c-primary-01-50);
185
+
186
+ &:hover {
187
+ text-decoration-color: var(--e-c-primary-01-200);
188
+ }
189
+
190
+ &:active {
191
+ text-decoration-color: var(--e-c-primary-01-50);
192
+ }
172
193
  }
173
194
 
174
195
  ul > li::before {
@@ -16,6 +16,4 @@ const classes = ['richtext', { 'richtext--small': small, 'richtext--inverted': i
16
16
  <div v-else :class="classes"><slot></slot></div>
17
17
  </template>
18
18
 
19
- <style lang="scss">
20
- @use './richtext.scss';
21
- </style>
19
+ <style lang="scss" src="./richtext.scss"></style>
@@ -2,6 +2,7 @@
2
2
 
3
3
  .welcome-container {
4
4
  @include a.type(500, strong);
5
+
5
6
  background-color: var(--e-c-primary-01-100);
6
7
  border-radius: var(--e-brd-radius-2);
7
8
  color: var(--e-c-primary-01-950);
@@ -61,6 +61,7 @@ button {
61
61
  font-family: inherit;
62
62
  font-size: inherit;
63
63
  background: none;
64
+ text-align: left;
64
65
  }
65
66
 
66
67
  ul,
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../base/main-base.scss","../node_modules/@energie360/design-tokens/dist/fonts/fonts.css","../base/_resets.scss","../base/abstracts/_resets.scss","../base/abstracts/_variables.scss","../base/abstracts/_functions.scss","../base/_input-resets.scss","../base/abstracts/_mixins.scss","../base/_html.scss","../base/_body.scss","../base/_focus-handling.scss","../node_modules/@energie360/design-tokens/dist/css/design-tokens.css"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;AACQ;ACpBR;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;EAGE;;;AC1BA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ADwBJ;AAAA;EAEE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;;;AErB+E;AChCjF;ACHA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;EC8BE;EACA;EAKE;;;AD7BF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;;;AAIJ;EACE;;;AAIA;EAEE;EACA;;;AEpDJ;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;;;ACTF;EACE;EACA;EACA;EACA;EACA;;;ACAF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;ATQF;AACA;AACA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;AACA;EACE;EACA;EACA;EACA;EACA,KACE;;AU3CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;;;AX7MA;AAAA;AAAA;AAAA;EACE","file":"base-style.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../base/main-base.scss","../node_modules/@energie360/design-tokens/dist/fonts/fonts.css","../base/_resets.scss","../base/abstracts/_resets.scss","../base/abstracts/_variables.scss","../base/abstracts/_functions.scss","../base/_input-resets.scss","../base/abstracts/_mixins.scss","../base/_html.scss","../base/_body.scss","../base/_focus-handling.scss","../node_modules/@energie360/design-tokens/dist/css/design-tokens.css"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;AACQ;ACpBR;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;AAAA;EAGE;;;AC1BA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADuBJ;AAAA;EAEE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;;;AErB+E;AChCjF;ACHA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;EC8BE;EACA;EAKE;;;AD7BF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;;;AAIJ;EACE;;;AAIA;EAEE;EACA;;;AEpDJ;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;;;ACTF;EACE;EACA;EACA;EACA;EACA;;;ACAF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;ATQF;AACA;AACA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;AACA;EACE;EACA;EACA;EACA;EACA,KACE;;AU3CJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;;;AX7MA;AAAA;AAAA;AAAA;EACE","file":"base-style.css"}
@@ -131,9 +131,10 @@
131
131
  .form__cookiebot-message {
132
132
  margin-bottom: var(--e-space-6);
133
133
  }
134
- //.alert + .button {
134
+
135
+ // .alert + .button {
135
136
  // margin-top: var(--e-space-6);
136
- //}
137
+ // }
137
138
 
138
139
  // States
139
140
  &.form--has-general-error {
@@ -70,8 +70,7 @@
70
70
  }
71
71
  }
72
72
 
73
- &:has(.suffix-text),
74
- &:has(.suffix-icon) {
73
+ &:has(.suffix-text) {
75
74
  // A suffix only makes sense for an <input>. That's why we select only input here.
76
75
  .control input {
77
76
  padding-right: var(--e-space-12);
@@ -1,3 +1,10 @@
1
+ <script lang="ts">
2
+ /**
3
+ * This object will hold all icon fetch promises. Should minimize unnecesary requests. It's just a cache.
4
+ */
5
+ const fetchPromises = {}
6
+ </script>
7
+
1
8
  <script setup lang="ts">
2
9
  import { ref } from 'vue'
3
10
  import { assetsPath } from '../../globals.js'
@@ -14,11 +21,6 @@ interface Props {
14
21
  */
15
22
  const iconPath = assetsPath + 'icons/'
16
23
 
17
- /**
18
- * This map will hold all fetched icons. Should minimize unnecesary requests. It's just a cache.
19
- */
20
- const iconMap = new Map()
21
-
22
24
  /**
23
25
  * A simple (non-visible) placeholder, which is used when an error happened or the icon couldn't be found.
24
26
  */
@@ -29,31 +31,39 @@ const svgPlaceholder = `
29
31
  const svgContent = ref(svgPlaceholder)
30
32
 
31
33
  /**
32
- * Fetches an icon from the assets folder. Or if already fecthed gets it from `iconMap`.
34
+ * Fetches an icon from the assets folder. Or if already fetched gets it from `iconMap`.
33
35
  */
34
36
  const getIcon = (name: string): string => {
35
- // Check if icon has already been fetched.
36
- if (iconMap.has(name)) {
37
- svgContent.value = iconMap.get(name)
37
+ if (Object.hasOwn(fetchPromises, name)) {
38
+ // Prevents fetching the same icon multiple times when multiple UIcon instances are loaded at the same time.
39
+ fetchPromises[name].then((data) => {
40
+ svgContent.value = data
41
+ })
42
+
38
43
  return svgContent.value
39
44
  }
40
45
 
41
- fetch(`${iconPath}${name}.svg`)
42
- .then((response) => {
43
- if (!response.ok) {
44
- throw new Error('Something went wrong when fetching the icon.')
45
- }
46
+ fetchPromises[name] = new Promise((resolve, reject) => {
47
+ fetch(`${iconPath}${name}.svg`)
48
+ .then((response) => {
49
+ if (!response.ok) {
50
+ throw new Error('Something went wrong when fetching the icon.')
51
+ }
46
52
 
47
- return response.text()
48
- })
49
- .then((text) => {
50
- iconMap.set(name, text)
51
- svgContent.value = text
52
- })
53
- .catch((err) => {
54
- console.error(err)
55
- svgContent.value = svgPlaceholder
56
- })
53
+ return response.text()
54
+ })
55
+ .then((text) => {
56
+ resolve(text)
57
+ })
58
+ .catch((err) => {
59
+ console.error(err)
60
+ resolve(svgPlaceholder)
61
+ })
62
+ })
63
+
64
+ fetchPromises[name].then((data) => {
65
+ svgContent.value = data
66
+ })
57
67
 
58
68
  return svgContent.value
59
69
  }
@@ -2,7 +2,7 @@
2
2
  import { FormFieldBase } from '../form-field/form-field.types'
3
3
  import { computed, ref, useId, useSlots } from 'vue'
4
4
  import { SelectOption } from '../types'
5
- import { translate } from '../../utils/translations/translate'
5
+ import { getTranslation } from '../../utils/translations/translate'
6
6
 
7
7
  interface Props extends FormFieldBase {
8
8
  name: string
@@ -112,15 +112,15 @@ const needsHelpTextSpacer = computed(() => {
112
112
 
113
113
  <div class="help-text">
114
114
  <span class="optional-text"
115
- >{{ translate('common.optional')
115
+ >{{ getTranslation('optional')
116
116
  }}<span v-if="needsHelpTextSpacer" v-html="spacer"></span></span
117
117
  ><slot name="helpText">{{ helpText }}</slot>
118
118
  </div>
119
119
 
120
120
  <div class="error-messages-container">
121
- <slot name="error-message"
122
- ><span>{{ errorMessage }}</span></slot
123
- >
121
+ <slot name="error-message">
122
+ <span>{{ errorMessage }}</span>
123
+ </slot>
124
124
  </div>
125
125
  </div>
126
126
  </template>
@@ -3,4 +3,5 @@ export enum TextFieldTypes {
3
3
  number = 'number',
4
4
  email = 'email',
5
5
  password = 'password',
6
+ date = 'date',
6
7
  }
@@ -128,14 +128,14 @@ watch(
128
128
  >
129
129
  <div class="wrapper">
130
130
  <div class="label">
131
- <slot name="label"
132
- ><label :for="inputId">{{ label }}</label></slot
133
- >
131
+ <slot name="label">
132
+ <label :for="inputId">{{ label }}</label>
133
+ </slot>
134
134
  </div>
135
135
 
136
136
  <div class="control">
137
- <slot
138
- ><input
137
+ <slot>
138
+ <input
139
139
  :id="inputId"
140
140
  ref="input"
141
141
  v-model="model"
@@ -149,7 +149,8 @@ watch(
149
149
  @focus="onFocus"
150
150
  @focusout="$emit('focusout', $event.target)"
151
151
  @blur="onBlur"
152
- /></slot>
152
+ />
153
+ </slot>
153
154
 
154
155
  <div class="control-border"></div>
155
156
  </div>
@@ -166,19 +167,24 @@ watch(
166
167
  <span v-if="unit" class="suffix-text">
167
168
  {{ unit }}
168
169
  </span>
170
+
171
+ <!-- DATE -->
172
+ <span v-if="type === TextFieldTypes.date" class="suffix-icon">
173
+ <UIcon name="calendar"></UIcon>
174
+ </span>
169
175
  </div>
170
176
 
171
177
  <div class="help-text">
172
- <span class="optional-text"
173
- >{{ getTranslation('optional')
174
- }}<span v-if="needsHelpTextSpacer" v-html="spacer"></span></span
175
- ><slot name="helpText">{{ helpText }}</slot>
178
+ <span class="optional-text">
179
+ {{ getTranslation('optional') }}<span v-if="needsHelpTextSpacer" v-html="spacer"></span>
180
+ </span>
181
+ <slot name="helpText">{{ helpText }}</slot>
176
182
  </div>
177
183
 
178
184
  <div class="error-messages-container">
179
- <slot name="error-message"
180
- ><span>{{ errorMessage }}</span></slot
181
- >
185
+ <slot name="error-message">
186
+ <span>{{ errorMessage }}</span>
187
+ </slot>
182
188
  </div>
183
189
  </div>
184
190
  </template>
package/modules/index.js CHANGED
@@ -3,3 +3,4 @@ export { default as UFooter } from './footer/u-footer.vue'
3
3
  export { default as UInlineEditGroup } from './inline-edit-group/u-inline-edit-group.vue'
4
4
  export { default as UNavigationToolbarTop } from './navigation-toolbar-top/u-navigation-toolbar-top.vue'
5
5
  export { default as UNavigationToolbarSide } from './navigation-toolbar-side/u-navigation-toolbar-side.vue'
6
+ export { default as UNavigationPanel } from './navigation-panel/u-navigation-panel.vue'
@@ -0,0 +1,64 @@
1
+ @use '../../base/abstracts/' as a;
2
+
3
+ .navigation-panel {
4
+ overflow: auto;
5
+ padding: var(--e-space-6);
6
+ background-color: var(--e-c-mono-50);
7
+ border-right: 1px solid var(--e-c-mono-200);
8
+ width: a.rem(300);
9
+ height: 100vh;
10
+
11
+ @include a.bp(lg) {
12
+ width: 100%;
13
+ height: auto;
14
+ padding: var(--e-space-4) var(--e-space-5) 0;
15
+ }
16
+ }
17
+
18
+ .navigation-panel__tiles {
19
+ display: flex;
20
+ flex-direction: column;
21
+ row-gap: var(--e-space-3);
22
+
23
+ @include a.bp(lg) {
24
+ overflow: auto;
25
+ flex-direction: row;
26
+ flex-wrap: nowrap;
27
+ column-gap: var(--e-space-3);
28
+ margin-left: calc(var(--e-space-5) * -1);
29
+ margin-right: calc(var(--e-space-5) * -1);
30
+ padding-left: var(--e-space-5);
31
+ padding-right: var(--e-space-5);
32
+ padding-bottom: var(--e-space-5); // This makes scrollbar not run appear over the tiles
33
+ }
34
+ }
35
+
36
+ .navigation-panel__label-tiles,
37
+ .navigation-panel__label-info {
38
+ @include a.type(50, strong);
39
+
40
+ color: var(--e-c-mono-700);
41
+ }
42
+
43
+ .navigation-panel__label-info {
44
+ margin-bottom: var(--e-space-1);
45
+ }
46
+
47
+ .navigation-panel__label-tiles {
48
+ margin-bottom: var(--e-space-2);
49
+
50
+ @include a.bp(lg) {
51
+ @include a.visually-hidden;
52
+ }
53
+ }
54
+
55
+ .navigation-panel__info {
56
+ @include a.type(300, strong);
57
+
58
+ margin-bottom: var(--e-space-6);
59
+
60
+ @include a.bp(lg) {
61
+ @include a.type(200, strong);
62
+ margin-bottom: var(--e-space-4);
63
+ }
64
+ }
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ infoLabel: string
4
+ tilesLabel: string
5
+ }
6
+
7
+ defineProps<Props>()
8
+ </script>
9
+
10
+ <template>
11
+ <div class="navigation-panel">
12
+ <p class="navigation-panel__label-info">{{ infoLabel }}</p>
13
+ <div class="navigation-panel__info"><slot name="info"></slot></div>
14
+
15
+ <p class="navigation-panel__label-tiles">{{ tilesLabel }}</p>
16
+ <div class="navigation-panel__tiles">
17
+ <slot></slot>
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <style scoped lang="scss" src="./navigation-panel.scss"></style>
@@ -19,7 +19,7 @@
19
19
  }
20
20
 
21
21
  .navigation-toolbar-side__nav-links,
22
- .navigation-toolbar-side__menu-cta {
22
+ .navigation-toolbar-side__menu-ctas {
23
23
  padding: 0 var(--e-space-0_5);
24
24
  }
25
25
  }
@@ -45,6 +45,7 @@
45
45
  width: 100%;
46
46
  height: 100%;
47
47
  transform: translate3d(100%, 0, 0);
48
+ z-index: a.$layer-nav-panel;
48
49
 
49
50
  .navigation-toolbar-mobile-open & {
50
51
  transform: translate3d(0, 0, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@energie360/ui-library",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,17 +1,7 @@
1
- import { deepGetByPath } from '../object/deep-get.js'
2
1
  import translations from '../../i18n/i18n.ts'
3
2
 
4
3
  const DEFAULT_LANGUAGE = 'DE'
5
4
 
6
- /**
7
- *
8
- * @param {string} translationKeyPath
9
- * @param {string} defaultValue
10
- * @returns {string}
11
- */
12
- export const translate = (translationKeyPath, defaultValue = '') =>
13
- deepGetByPath(window._EC.translations, translationKeyPath) || defaultValue
14
-
15
5
  const getLanguage = () => {
16
6
  const langAttr = document.documentElement.lang.split('-')[0].toUpperCase()
17
7
 
@@ -1,12 +0,0 @@
1
- import { defineCustomElement } from 'vue'
2
- import Button from './u-button.vue'
3
- import customElementBaseStyle from '../../base/custom-element-base.scss?inline'
4
- import styles from './button.scss?inline'
5
-
6
- Button.styles = [customElementBaseStyle, styles]
7
-
8
- export const ButtonElement = {
9
- register: () => {
10
- customElements.define('u-button', defineCustomElement(Button))
11
- },
12
- }
@@ -1,35 +0,0 @@
1
- // All `elements` Custom Elements. Needs some refactoring.
2
-
3
- import { ButtonElement as Button } from './button/button.js'
4
- import { IconButtonElement as IconButton } from './icon-button/icon-button.js'
5
- import { IconElement as Icon } from './icon/icon.js'
6
- import { LoaderElement as Loader } from './loader/loader.js'
7
-
8
- /**
9
- * These exports allow best tree-shaking behaviour.
10
- * Obviously you'll have to import 'manually' all the elements you need.
11
- *
12
- * @example
13
- * import { IconButton } from '@energie360/ui-library'
14
- * IconButton.register()
15
- */
16
- export { Button, IconButton, Icon, Loader }
17
-
18
- /**
19
- * With this export you get all the elements. Meaning all the elements will be inlcuded in your bundle, even if you register only one element.
20
- *
21
- * @example
22
- * import { Elements } from '@energie360/ui-library'
23
- * Elements.Button.register()
24
- */
25
-
26
- /**
27
- *
28
- * @type {{IconButton: {register: function(): void}, Button: {register: function(): void}, Loader: {register: function(): void}, Icon: {register: function(): void}}}
29
- */
30
- export const Elements = {
31
- Button,
32
- IconButton,
33
- Icon,
34
- Loader,
35
- }
@@ -1,13 +0,0 @@
1
- import { defineCustomElement } from 'vue'
2
- import Icon from './u-icon.vue'
3
- import customElementBaseStyle from '../../base/custom-element-base.scss?inline'
4
- import ceStyles from './icon.ce.scss?inline'
5
- import styles from './icon.scss?inline'
6
-
7
- Icon.styles = [customElementBaseStyle, ceStyles, styles]
8
-
9
- export const IconElement = {
10
- register: () => {
11
- customElements.define('u-icon', defineCustomElement(Icon))
12
- },
13
- }
@@ -1,12 +0,0 @@
1
- import { defineCustomElement } from 'vue'
2
- import IconButton from './u-icon-button.vue'
3
- import customElementBaseStyle from '../../base/custom-element-base.scss?inline'
4
- import styles from './icon-button.scss?inline'
5
-
6
- IconButton.styles = [customElementBaseStyle, styles]
7
-
8
- export const IconButtonElement = {
9
- register: () => {
10
- customElements.define('u-icon-button', defineCustomElement(IconButton))
11
- },
12
- }
@@ -1,13 +0,0 @@
1
- import { defineCustomElement } from 'vue'
2
- import Loader from './u-loader.vue'
3
- import customElementBaseStyle from '../../base/custom-element-base.scss?inline'
4
- import ceStyles from './loader.ce.scss?inline'
5
- import styles from './loader.scss?inline'
6
-
7
- Loader.styles = [customElementBaseStyle, ceStyles, styles]
8
-
9
- export const LoaderElement = {
10
- register: () => {
11
- customElements.define('u-loader', defineCustomElement(Loader))
12
- },
13
- }
@@ -1 +0,0 @@
1
- export { default as UFeedback } from './u-feedback.vue'
@@ -1 +0,0 @@
1
- export { default as UInlineEditGroup } from './u-inline-edit-group.vue'