@energie360/ui-library 0.1.16 → 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.
Files changed (102) hide show
  1. package/components/badge/badge.scss +56 -0
  2. package/components/badge/u-badge.vue +47 -0
  3. package/components/card-contact/card-contact.scss +39 -0
  4. package/components/card-contact/u-card-contact.vue +44 -0
  5. package/components/card-cta-bar/card-cta-bar.scss +4 -0
  6. package/components/card-cta-bar/u-card-cta-bar.vue +24 -0
  7. package/components/card-cta-header/u-card-cta-header.vue +10 -7
  8. package/components/card-footer/u-card-footer.vue +5 -3
  9. package/components/card-group/u-card-group.vue +1 -1
  10. package/components/card-header/card-header.scss +29 -4
  11. package/components/card-header/u-card-header.vue +22 -3
  12. package/components/card-highlight/card-highlight.scss +70 -0
  13. package/components/card-highlight/u-card-highlight.vue +41 -0
  14. package/components/card-info/card-info.scss +40 -0
  15. package/components/card-info/u-card-info.vue +35 -0
  16. package/components/card-price-list/card-price-list.scss +39 -0
  17. package/components/card-price-list/u-card-price-list.vue +37 -0
  18. package/components/card-section/card-section.scss +21 -1
  19. package/components/card-section/u-card-section.vue +9 -1
  20. package/components/data-card/data-card.scss +34 -0
  21. package/components/data-card/u-data-card.vue +49 -0
  22. package/components/data-card-group/data-card-group.scss +12 -0
  23. package/components/data-card-group/u-data-card-group.vue +7 -0
  24. package/components/download-list/download-list.scss +58 -0
  25. package/components/download-list/u-download-list.vue +44 -0
  26. package/components/download-list-item/download-list-item.scss +267 -0
  27. package/components/download-list-item/u-download-list-item.vue +65 -0
  28. package/components/file-upload/file-list.scss +68 -0
  29. package/components/file-upload/file-upload.scss +119 -0
  30. package/components/file-upload/u-file-list.vue +55 -0
  31. package/components/file-upload/u-file-upload.vue +220 -0
  32. package/components/hint/hint.scss +67 -6
  33. package/components/hint/u-hint.vue +11 -1
  34. package/components/index.js +13 -0
  35. package/components/inline-edit/inline-edit.scss +5 -1
  36. package/components/inline-edit/u-inline-edit.vue +21 -12
  37. package/components/progress-avatar/u-progress-avatar.vue +27 -3
  38. package/components/richtext/richtext.scss +9 -2
  39. package/components/richtext/u-richtext.vue +3 -1
  40. package/components/search-group/search-group.scss +59 -0
  41. package/components/search-group/u-search-group.vue +32 -0
  42. package/components/skeleton-loader/skeleton-loader.scss +39 -0
  43. package/components/skeleton-loader/u-skeleton-loader.vue +28 -0
  44. package/components/table/cell-ctas.scss +1 -7
  45. package/components/table/cell-icon-text.scss +15 -4
  46. package/components/table/table-cell.mixins.scss +3 -2
  47. package/components/table/table-cell.scss +5 -0
  48. package/components/table/table-heading.scss +7 -0
  49. package/components/table/u-cell-ctas.vue +15 -6
  50. package/components/table/u-cell-icon-text.vue +13 -5
  51. package/components/table/u-table-cell.vue +3 -1
  52. package/components/table/u-table-heading.vue +2 -1
  53. package/components/tabs/tabs.scss +10 -1
  54. package/components/tabs/u-tabs.vue +64 -25
  55. package/dist/elements/form.css +170 -0
  56. package/dist/elements/form.css.map +1 -0
  57. package/dist/layout/form-grid.css +184 -0
  58. package/dist/layout/form-grid.css.map +1 -0
  59. package/dist/layout/split.css.map +1 -1
  60. package/elements/button/_button-plain-small-spaceless.scss +10 -0
  61. package/elements/button/button.scss +32 -0
  62. package/elements/button/u-button.vue +47 -4
  63. package/elements/form/form.scss +1 -1
  64. package/elements/form-field/form-field-base.scss +4 -0
  65. package/elements/form-field/form-field-prefix-suffix.scss +5 -0
  66. package/elements/select/u-select.vue +6 -6
  67. package/elements/text-field/text-field.scss +15 -0
  68. package/elements/text-field/text-field.types.ts +1 -0
  69. package/elements/text-field/u-text-field.vue +44 -8
  70. package/elements/toggle-switch/toggle-switch-small.scss +10 -0
  71. package/elements/toggle-switch/toggle-switch.scss +25 -21
  72. package/elements/toggle-switch/u-toggle-switch.vue +22 -12
  73. package/i18n/i18n.ts +32 -0
  74. package/layout/container/container.scss +18 -0
  75. package/layout/index.js +4 -0
  76. package/layout/portal/portal.scss +63 -0
  77. package/layout/portal/u-portal.vue +51 -0
  78. package/layout/settings/settings.scss +33 -0
  79. package/layout/settings/u-settings-layout.vue +19 -0
  80. package/layout/tile-grid/tile-grid.scss +13 -0
  81. package/layout/tile-grid/tile-item.scss +31 -0
  82. package/layout/tile-grid/u-tile-grid.vue +7 -0
  83. package/layout/tile-grid/u-tile-item.vue +15 -0
  84. package/modules/content-title/content-title.scss +43 -0
  85. package/modules/content-title/u-content-title.vue +19 -0
  86. package/modules/dialog/_animations.scss +49 -0
  87. package/modules/dialog/dialog.scss +172 -0
  88. package/modules/dialog/u-dialog.vue +139 -0
  89. package/modules/footer/footer.scss +8 -1
  90. package/modules/footer/u-footer.vue +1 -1
  91. package/modules/index.js +3 -0
  92. package/modules/inline-edit-group/u-inline-edit-group.vue +2 -0
  93. package/modules/search-filter/search-filter.scss +106 -0
  94. package/modules/search-filter/u-search-filter.vue +54 -0
  95. package/package.json +3 -1
  96. package/utility/elements/form.scss +1 -0
  97. package/utility/layout/form-grid.scss +1 -0
  98. package/utils/array/intersect.js +7 -0
  99. package/utils/functions/breakpoint.js +4 -9
  100. package/utils/functions/format-bytes.js +17 -0
  101. package/utils/global/mime-types.js +8 -0
  102. package/utils/translations/translate.js +10 -2
@@ -0,0 +1,170 @@
1
+ /* easeOutCubic */
2
+ /* prettier-ignore */
3
+ .form .form__messages {
4
+ display: none;
5
+ }
6
+ .form .form__title {
7
+ font-size: var(--e-type-size-800);
8
+ line-height: var(--e-type-line-height-800);
9
+ letter-spacing: 0.025rem;
10
+ font-weight: var(--e-type-weight-strong);
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+ color: var(--e-c-primary-01-500);
14
+ }
15
+ @media (max-width: 1020px) {
16
+ .form .form__title {
17
+ font-size: var(--e-type-size-700);
18
+ line-height: var(--e-type-line-height-700);
19
+ letter-spacing: 0.025rem;
20
+ font-weight: var(--e-type-weight-strong);
21
+ -webkit-font-smoothing: antialiased;
22
+ -moz-osx-font-smoothing: grayscale;
23
+ }
24
+ }
25
+ .form .form__lead {
26
+ font-size: var(--e-type-size-200);
27
+ line-height: var(--e-type-line-height-200);
28
+ letter-spacing: 0.01875rem;
29
+ font-weight: var(--e-type-weight-weak);
30
+ }
31
+ .form .form__lead .form__subtitle-info {
32
+ color: var(--e-c-secondary-01-900);
33
+ margin-left: var(--e-space-1);
34
+ }
35
+ .form .form__lead .form__subtitle-info e-icon {
36
+ display: inline-block;
37
+ vertical-align: middle;
38
+ }
39
+ .form .form__title + .form__lead {
40
+ font-size: var(--e-type-size-300);
41
+ line-height: var(--e-type-line-height-300);
42
+ letter-spacing: 0.01875rem;
43
+ }
44
+ @media (max-width: 1020px) {
45
+ .form .form__title + .form__lead {
46
+ font-size: var(--e-type-size-200);
47
+ line-height: var(--e-type-line-height-200);
48
+ letter-spacing: 0.01875rem;
49
+ }
50
+ }
51
+ .form .form__subtitle {
52
+ font-size: var(--e-type-size-300);
53
+ line-height: var(--e-type-line-height-300);
54
+ letter-spacing: 0.01875rem;
55
+ font-weight: var(--e-type-weight-strong);
56
+ -webkit-font-smoothing: antialiased;
57
+ -moz-osx-font-smoothing: grayscale;
58
+ color: var(--e-c-primary-01-500);
59
+ }
60
+ .form .form__subtitle .form__subtitle-info {
61
+ color: var(--e-c-secondary-01-900);
62
+ margin-left: var(--e-space-1);
63
+ }
64
+ .form .form__subtitle .form__subtitle-info e-icon {
65
+ display: inline-block;
66
+ vertical-align: middle;
67
+ }
68
+ .form .form__cta-group {
69
+ display: flex;
70
+ grid-gap: var(--e-space-5);
71
+ }
72
+ @media (max-width: 740px) {
73
+ .form .form__cta-group {
74
+ flex-direction: column;
75
+ }
76
+ }
77
+ .form .form__title + .form__lead,
78
+ .form .form__subtitle + .form__lead {
79
+ margin-top: var(--e-space-3);
80
+ }
81
+ @media (max-width: 1020px) {
82
+ .form .form__title + .form__lead,
83
+ .form .form__subtitle + .form__lead {
84
+ margin-top: var(--e-space-1_5);
85
+ }
86
+ }
87
+ .form .form__lead-row + * {
88
+ margin-top: var(--e-space-5);
89
+ }
90
+ @media (max-width: 1020px) {
91
+ .form .form__lead-row + * {
92
+ margin-top: var(--e-space-3);
93
+ }
94
+ }
95
+ .form .form__subtitle-row + *,
96
+ .form .form__lead-row.form__subtitle-row + * {
97
+ margin-top: var(--e-space-6);
98
+ }
99
+ @media (max-width: 1020px) {
100
+ .form .form__subtitle-row + *,
101
+ .form .form__lead-row.form__subtitle-row + * {
102
+ margin-top: var(--e-space-3);
103
+ }
104
+ }
105
+ .form .form__input-row + .form__input-row,
106
+ .form .form__title-row + *,
107
+ .form *:not(legend) + .form__lead-row {
108
+ margin-top: var(--e-space-10);
109
+ }
110
+ @media (max-width: 1020px) {
111
+ .form .form__input-row + .form__input-row,
112
+ .form .form__title-row + *,
113
+ .form *:not(legend) + .form__lead-row {
114
+ margin-top: var(--e-space-6);
115
+ }
116
+ }
117
+ .form .form__input-row.form__input-row--compact + .form__input-row.form__input-row--compact {
118
+ margin-top: var(--e-space-6);
119
+ }
120
+ .form *:not(legend) + .form__title-row,
121
+ .form *:not(legend) + .form__cta-row,
122
+ .form *:not(legend) + .form__subtitle-row {
123
+ margin-top: var(--e-space-16);
124
+ }
125
+ @media (max-width: 1020px) {
126
+ .form *:not(legend) + .form__title-row,
127
+ .form *:not(legend) + .form__cta-row,
128
+ .form *:not(legend) + .form__subtitle-row {
129
+ margin-top: var(--e-space-10);
130
+ }
131
+ }
132
+ @media (max-width: 1020px) {
133
+ .form .form__input-col + .form__input-col {
134
+ margin-top: var(--e-space-6);
135
+ }
136
+ }
137
+ .form .form__messages-row {
138
+ display: none;
139
+ margin-top: var(--e-space-10);
140
+ }
141
+ .form .form__cookiebot-message {
142
+ margin-bottom: var(--e-space-6);
143
+ }
144
+ .form.form--has-general-error .form__messages-row,
145
+ .form.form--has-general-error .form__messages {
146
+ display: block;
147
+ }
148
+ .form.form--hide-form-elements > *:not(.success-screen) {
149
+ display: none;
150
+ }
151
+ .form.form--is-submitting .form-row:not(.form__cta-row) {
152
+ opacity: 0.6;
153
+ pointer-events: none;
154
+ }
155
+ .form .form__recaptcha {
156
+ font-size: 0.625rem;
157
+ line-height: 1.5;
158
+ margin-top: var(--e-space-6);
159
+ color: var(--e-c-mono-700);
160
+ }
161
+ .form .form__recaptcha a {
162
+ color: var(--e-c-primary-01-700);
163
+ text-underline-offset: var(--e-space-1);
164
+ }
165
+
166
+ .grecaptcha-badge {
167
+ visibility: hidden;
168
+ }
169
+
170
+ /*# sourceMappingURL=form.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../base/abstracts/_variables.scss","../../base/abstracts/_functions.scss","../../elements/form/form.scss","../../base/abstracts/_mixins.scss"],"names":[],"mappings":"AAqCiF;AChCjF;ACFE;EACE;;AAGF;ECoCA;EACA;EAGE;EAMA;EAKE;EACA;EDjDF;;ACWF;EDdA;ICoCA;IACA;IAGE;IAMA;IAKE;IACA;;;AD1CJ;EC0BA;EACA;EAKE;EAIA;;ADjCA;EACE;EACA;;AAEA;EACE;EACA;;AAKN;ECYA;EACA;EAKE;;AA5BF;EDUA;ICYA;IACA;IAKE;;;ADVF;ECIA;EACA;EAGE;EAMA;EAKE;EACA;EDjBF;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;;ACpCF;EDkCA;IAKI;;;AAKJ;AAAA;EAEE;;AC9CF;ED4CA;AAAA;IAKI;;;AAQJ;EACE;;AC1DF;EDyDA;IAII;;;AAIJ;AAAA;EAEE;;ACnEF;EDiEA;AAAA;IAKI;;;AAIJ;AAAA;AAAA;EAGE;;AC7EF;ED0EA;AAAA;AAAA;IAMI;;;AAIJ;EACE;;AAGF;AAAA;AAAA;EAGE;;AC3FF;EDwFA;AAAA;AAAA;IAMI;;;AC9FJ;EDkGA;IAEI;;;AAIJ;EACE;EACA;;AAGF;EACE;;AASA;AAAA;EAEE;;AAKF;EACE;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAKN;EACE","file":"form.css"}
@@ -0,0 +1,184 @@
1
+ /* easeOutCubic */
2
+ /* prettier-ignore */
3
+ /**
4
+ Helper to colculate col width in %.
5
+ Looks complicated because we use grid-gap on the row, which takes away from available width.
6
+ */
7
+ /**
8
+ Mixin to create a grid column cell.
9
+
10
+ $cols: Column width of cell.
11
+ $columns: Grid size (in columns). Default is set by global variable $grid-columns (defined via design token).
12
+ */
13
+ .form-grid {
14
+ width: 100%;
15
+ }
16
+
17
+ .form-row {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ grid-gap: 2.6315789474%;
21
+ }
22
+ @media (max-width: 1020px) {
23
+ .form-row {
24
+ grid-gap: 2.5531914894%;
25
+ }
26
+ }
27
+ @media (max-width: 740px) {
28
+ .form-row {
29
+ grid-gap: 3.6363636364%;
30
+ }
31
+ }
32
+ @media (max-width: 520px) {
33
+ .form-row {
34
+ grid-gap: 4.1666666667%;
35
+ }
36
+ }
37
+ .form-row .form-col {
38
+ flex: 0 0 48.6842105263%;
39
+ max-width: 48.6842105263%;
40
+ }
41
+ @media (max-width: 1020px) {
42
+ .form-row .form-col {
43
+ flex: 0 0 48.7234042553%;
44
+ max-width: 48.7234042553%;
45
+ }
46
+ }
47
+ @media (max-width: 740px) {
48
+ .form-row .form-col {
49
+ flex: 0 0 48.1818181818%;
50
+ max-width: 48.1818181818%;
51
+ }
52
+ }
53
+ @media (max-width: 520px) {
54
+ .form-row .form-col {
55
+ flex: 0 0 47.9166666667%;
56
+ max-width: 47.9166666667%;
57
+ }
58
+ }
59
+ .form-row .form-col-1\/4 {
60
+ flex: 0 0 23.0263157895%;
61
+ max-width: 23.0263157895%;
62
+ }
63
+ @media (max-width: 1020px) {
64
+ .form-row .form-col-1\/4 {
65
+ flex: 0 0 23.085106383%;
66
+ max-width: 23.085106383%;
67
+ }
68
+ }
69
+ @media (max-width: 740px) {
70
+ .form-row .form-col-1\/4 {
71
+ flex: 0 0 22.2727272727%;
72
+ max-width: 22.2727272727%;
73
+ }
74
+ }
75
+ @media (max-width: 520px) {
76
+ .form-row .form-col-1\/4 {
77
+ flex: 0 0 21.875%;
78
+ max-width: 21.875%;
79
+ }
80
+ }
81
+ .form-row .form-col-2\/4 {
82
+ flex: 0 0 48.6842105263%;
83
+ max-width: 48.6842105263%;
84
+ }
85
+ @media (max-width: 1020px) {
86
+ .form-row .form-col-2\/4 {
87
+ flex: 0 0 48.7234042553%;
88
+ max-width: 48.7234042553%;
89
+ }
90
+ }
91
+ @media (max-width: 740px) {
92
+ .form-row .form-col-2\/4 {
93
+ flex: 0 0 48.1818181818%;
94
+ max-width: 48.1818181818%;
95
+ }
96
+ }
97
+ @media (max-width: 520px) {
98
+ .form-row .form-col-2\/4 {
99
+ flex: 0 0 47.9166666667%;
100
+ max-width: 47.9166666667%;
101
+ }
102
+ }
103
+ .form-row .form-col-3\/4 {
104
+ flex: 0 0 74.3421052632%;
105
+ max-width: 74.3421052632%;
106
+ }
107
+ @media (max-width: 1020px) {
108
+ .form-row .form-col-3\/4 {
109
+ flex: 0 0 74.3617021277%;
110
+ max-width: 74.3617021277%;
111
+ }
112
+ }
113
+ @media (max-width: 740px) {
114
+ .form-row .form-col-3\/4 {
115
+ flex: 0 0 74.0909090909%;
116
+ max-width: 74.0909090909%;
117
+ }
118
+ }
119
+ @media (max-width: 520px) {
120
+ .form-row .form-col-3\/4 {
121
+ flex: 0 0 73.9583333333%;
122
+ max-width: 73.9583333333%;
123
+ }
124
+ }
125
+ .form-row .form-col-4\/4 {
126
+ flex: 0 0 100%;
127
+ max-width: 100%;
128
+ }
129
+ @media (max-width: 1020px) {
130
+ .form-row .form-col-4\/4 {
131
+ flex: 0 0 100%;
132
+ max-width: 100%;
133
+ }
134
+ }
135
+ @media (max-width: 740px) {
136
+ .form-row .form-col-4\/4 {
137
+ flex: 0 0 100%;
138
+ max-width: 100%;
139
+ }
140
+ }
141
+ @media (max-width: 520px) {
142
+ .form-row .form-col-4\/4 {
143
+ flex: 0 0 100%;
144
+ max-width: 100%;
145
+ }
146
+ }
147
+ @media (max-width: 1020px) {
148
+ .form-row .form-col,
149
+ .form-row .form-col-1\/4,
150
+ .form-row .form-col-2\/4,
151
+ .form-row .form-col-3\/4 {
152
+ flex: 0 0 100%;
153
+ max-width: 100%;
154
+ }
155
+ }
156
+ @media (max-width: 1020px) and (max-width: 1020px) {
157
+ .form-row .form-col,
158
+ .form-row .form-col-1\/4,
159
+ .form-row .form-col-2\/4,
160
+ .form-row .form-col-3\/4 {
161
+ flex: 0 0 100%;
162
+ max-width: 100%;
163
+ }
164
+ }
165
+ @media (max-width: 1020px) and (max-width: 740px) {
166
+ .form-row .form-col,
167
+ .form-row .form-col-1\/4,
168
+ .form-row .form-col-2\/4,
169
+ .form-row .form-col-3\/4 {
170
+ flex: 0 0 100%;
171
+ max-width: 100%;
172
+ }
173
+ }
174
+ @media (max-width: 1020px) and (max-width: 520px) {
175
+ .form-row .form-col,
176
+ .form-row .form-col-1\/4,
177
+ .form-row .form-col-2\/4,
178
+ .form-row .form-col-3\/4 {
179
+ flex: 0 0 100%;
180
+ max-width: 100%;
181
+ }
182
+ }
183
+
184
+ /*# sourceMappingURL=form-grid.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../base/abstracts/_variables.scss","../../base/abstracts/_functions.scss","../../layout/grid/grid.mixin.scss","../../layout/form-grid/form-grid.scss","../../base/abstracts/_mixins.scss"],"names":[],"mappings":"AAqCiF;AChCjF;ACFA;AAAA;AAAA;AAAA;AA0BA;AAAA;;AAAA;AAAA;AAAA;ACzBA;EACE;;;AAGF;EDIE;EACA;EACA,UFgBgB;;AIThB;EDbF;IDSI,UFca;;;AIVf;EDbF;IDaI,UFWY;;;AIXd;EDbF;IDiBI,UFQY;;;AGtBd;ED2BA;EACA,WAHY;;AEfZ;EDVA;IDiCE;IACA,WAHW;;;AErBb;EDVA;IDwCE;IACA,WAHU;;;AE5BZ;EDVA;ID+CE;IACA,WAHU;;;ACxCZ;EDsBA;EACA,WAHY;;AEfZ;EDLA;ID4BE;IACA,WAHW;;;AErBb;EDLA;IDmCE;IACA,WAHU;;;AE5BZ;EDLA;ID0CE;IACA,WAHU;;;ACpCZ;EDkBA;EACA,WAHY;;AEfZ;EDDA;IDwBE;IACA,WAHW;;;AErBb;EDDA;ID+BE;IACA,WAHU;;;AE5BZ;EDDA;IDsCE;IACA,WAHU;;;AC/BZ;EDaA;EACA,WAHY;;AEfZ;EDIA;IDmBE;IACA,WAHW;;;AErBb;EDIA;ID0BE;IACA,WAHU;;;AE5BZ;EDIA;IDiCE;IACA,WAHU;;;AC3BZ;EDSA;EACA,WAHY;;AEfZ;EDQA;IDeE;IACA,WAHW;;;AErBb;EDQA;IDsBE;IACA,WAHU;;;AE5BZ;EDQA;ID6BE;IACA,WAHU;;;AEnCZ;EDYA;AAAA;AAAA;AAAA;IDKA;IACA,WAHY;;;AEfZ;EDYA;AAAA;AAAA;AAAA;IDWE;IACA,WAHW;;;AErBb;EDYA;AAAA;AAAA;AAAA;IDkBE;IACA,WAHU;;;AE5BZ;EDYA;AAAA;AAAA;AAAA;IDyBE;IACA,WAHU","file":"form-grid.css"}
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../base/abstracts/_variables.scss","../../base/abstracts/_functions.scss","../../layout/container/container.scss","../../base/abstracts/_mixins.scss","../../layout/split/split.scss"],"names":[],"mappings":"AAqCiF;AChCjF;ACsBA;EAtBE;EACA;EACA;EACA;EACA;;ACYA;EDMF;IAfI;IACA;;;ACQF;EDMF;IAVI;IACA;;;ACGF;EDMF;IALI;IACA;;;;AEjBJ;EACE;EACA;EACA;EACA;EACA;;ADUA;ECfF;IAQI;IACA;IACA;IACA;IACA;IACA,qBACE;;;ADCJ;ECfF;IAmBI;IACA;;;;AAIJ;EACE;EACA;;ADXA;ECSF;IAKI;IACA;;;ADfF;ECSF;IAUI;IACA;IACA;;;;AAIJ;EACE;;AD1BA;ECyBF;IAII;IACA;;;AD9BF;ECyBF;IASI;;;;AAIJ;EACE;EACA;EACA;EACA;;AD1CA;ECsCF;IAOI;IAIA;IACA;;;ADlDF;ECsCF;IAgBI;IACA;IACA;IACA;IACA;IACA;;;AD3DF;ECsCF;IAyBI;IACA;IACA;;;;AAIJ;EACE;;ADtEA;ECqEF;IAII;;;ADzEF;ECqEF;IAQI","file":"split.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../base/abstracts/_variables.scss","../../base/abstracts/_functions.scss","../../layout/container/container.scss","../../base/abstracts/_mixins.scss","../../layout/split/split.scss"],"names":[],"mappings":"AAqCiF;AChCjF;ACwCA;EAxCE;EACA;EACA;EACA;EACA;;ACYA;EDwBF;IAjCI;IACA;;;ACQF;EDwBF;IA5BI;IACA;;;ACGF;EDwBF;IAvBI;IACA;;;;AEjBJ;EACE;EACA;EACA;EACA;EACA;;ADUA;ECfF;IAQI;IACA;IACA;IACA;IACA;IACA,qBACE;;;ADCJ;ECfF;IAmBI;IACA;;;;AAIJ;EACE;EACA;;ADXA;ECSF;IAKI;IACA;;;ADfF;ECSF;IAUI;IACA;IACA;;;;AAIJ;EACE;;AD1BA;ECyBF;IAII;IACA;;;AD9BF;ECyBF;IASI;;;;AAIJ;EACE;EACA;EACA;EACA;;AD1CA;ECsCF;IAOI;IAIA;IACA;;;ADlDF;ECsCF;IAgBI;IACA;IACA;IACA;IACA;IACA;;;AD3DF;ECsCF;IAyBI;IACA;IACA;;;;AAIJ;EACE;;ADtEA;ECqEF;IAII;;;ADzEF;ECqEF;IAQI","file":"split.css"}
@@ -0,0 +1,10 @@
1
+ @use '../../base/abstracts' as a;
2
+ @use './button-plain' as *;
3
+
4
+ @mixin button-plain-small-spaceless {
5
+ @include button-plain;
6
+ @include a.type(100, strong);
7
+
8
+ padding: 0;
9
+ border-radius: var(--e-brd-radius-1); // For nicer focus outline.
10
+ }
@@ -4,6 +4,7 @@
4
4
  @use 'button-plain' as *;
5
5
  @use 'button-plain-spaceless' as *;
6
6
  @use 'button-plain-small' as *;
7
+ @use 'button-plain-small-spaceless' as *;
7
8
  @use 'button-filled-inverted' as *;
8
9
  @use 'button-outlined-inverted' as *;
9
10
  @use 'button-secondary-outlined' as *;
@@ -41,6 +42,10 @@
41
42
  @include button-plain-small;
42
43
  }
43
44
 
45
+ &.plain-small-spaceless {
46
+ @include button-plain-small-spaceless;
47
+ }
48
+
44
49
  &.filled-inverted {
45
50
  @include button-filled-inverted;
46
51
  }
@@ -70,4 +75,31 @@
70
75
  --icon-fill-color: transparent;
71
76
  }
72
77
  }
78
+
79
+ // Modifiers
80
+ &.nowrap {
81
+ white-space: nowrap;
82
+ }
83
+
84
+ // In some cases we need to force full width of a button.
85
+ // Is mostly the case when the button is wrapped by another element.
86
+ &.full-width {
87
+ width: 100%;
88
+ }
89
+
90
+ &.hide-label-lg {
91
+ @include a.bp(lg) {
92
+ .button__label {
93
+ @include a.visually-hidden;
94
+ }
95
+ }
96
+ }
97
+
98
+ &.hide-label-m {
99
+ @include a.bp(m) {
100
+ .button__label {
101
+ @include a.visually-hidden;
102
+ }
103
+ }
104
+ }
73
105
  }
@@ -12,6 +12,10 @@ interface ButtonProps {
12
12
  target?: string
13
13
  variant?: string
14
14
  asSpan?: boolean
15
+ nowrap?: boolean
16
+ fullWidth?: boolean
17
+ hideLabelM?: boolean
18
+ hideLabelLg?: boolean
15
19
  }
16
20
 
17
21
  const { asSpan = false } = defineProps<ButtonProps>()
@@ -21,20 +25,59 @@ const buttonTag = computed(() => (asSpan ? 'span' : 'button'))
21
25
 
22
26
  <template>
23
27
  <template v-if="href">
24
- <a :class="['button', variant]" :href :target>
28
+ <a
29
+ :class="[
30
+ 'button',
31
+ variant,
32
+ {
33
+ nowrap,
34
+ 'full-width': fullWidth,
35
+ 'hide-label-m': hideLabelM,
36
+ 'hide-label-lg': hideLabelLg,
37
+ },
38
+ ]"
39
+ :href
40
+ :target
41
+ v-bind="$attrs"
42
+ >
25
43
  <UIcon v-if="icon" :name="icon"></UIcon>
26
- <slot>{{ label }}</slot>
44
+
45
+ <span v-if="hideLabelM || hideLabelLg" class="button__label">
46
+ <slot>{{ label }}</slot>
47
+ </span>
48
+
49
+ <template v-else>
50
+ <slot>{{ label }}</slot>
51
+ </template>
27
52
  </a>
28
53
  </template>
29
54
 
30
55
  <template v-else>
31
56
  <component
32
57
  :is="buttonTag"
33
- :class="['button', variant, { loading: loading, disabled }]"
58
+ :class="[
59
+ 'button',
60
+ variant,
61
+ {
62
+ nowrap,
63
+ 'full-width': fullWidth,
64
+ 'hide-label-m': hideLabelM,
65
+ 'hide-label-lg': hideLabelLg,
66
+ loading: loading,
67
+ disabled,
68
+ },
69
+ ]"
34
70
  :disabled="disabled || null"
35
71
  >
36
72
  <UIcon v-if="icon" :name="icon" />
37
- <slot>{{ label }}</slot>
73
+
74
+ <span v-if="hideLabelM || hideLabelLg" class="button__label">
75
+ <slot>{{ label }}</slot>
76
+ </span>
77
+
78
+ <template v-else>
79
+ <slot>{{ label }}</slot>
80
+ </template>
38
81
 
39
82
  <span v-if="loading" class="button__loader">
40
83
  <ULoader />
@@ -1,4 +1,4 @@
1
- @use '../../base/abstracts/' as a;
1
+ @use '../../base/abstracts' as a;
2
2
 
3
3
  .form {
4
4
  .form__messages {
@@ -23,6 +23,10 @@
23
23
  font-size a.$trs-default,
24
24
  color a.$trs-default,
25
25
  line-height a.$trs-default;
26
+ white-space: nowrap;
27
+ max-width: calc(100% - var(--e-space-6));
28
+ overflow: hidden;
29
+ text-overflow: ellipsis;
26
30
  }
27
31
 
28
32
  .control {
@@ -48,6 +48,10 @@
48
48
  transform: translateY(-50%);
49
49
  }
50
50
 
51
+ .suffix-action {
52
+ display: flex;
53
+ }
54
+
51
55
  .suffix-text {
52
56
  @include a.type(200);
53
57
  }
@@ -70,6 +74,7 @@
70
74
  }
71
75
  }
72
76
 
77
+ &:has(.suffix-action),
73
78
  &:has(.suffix-text) {
74
79
  // A suffix only makes sense for an <input>. That's why we select only input here.
75
80
  .control input {
@@ -51,7 +51,7 @@ const onHoverOut = () => {
51
51
  }
52
52
 
53
53
  const hasHelpText = computed(() => {
54
- return !!helpText || !!slots.helpText || required
54
+ return !!helpText || !!slots.helpText || !required
55
55
  })
56
56
 
57
57
  const needsHelpTextSpacer = computed(() => {
@@ -70,7 +70,7 @@ const needsHelpTextSpacer = computed(() => {
70
70
  hover: isHovering,
71
71
  'float-label': true,
72
72
  'has-error': error,
73
- 'show-help-text': !required || hasHelpText,
73
+ 'show-help-text': hasHelpText,
74
74
  },
75
75
  ]"
76
76
  @mouseenter="onHover"
@@ -111,10 +111,10 @@ const needsHelpTextSpacer = computed(() => {
111
111
  </div>
112
112
 
113
113
  <div class="help-text">
114
- <span class="optional-text"
115
- >{{ getTranslation('optional')
116
- }}<span v-if="needsHelpTextSpacer" v-html="spacer"></span></span
117
- ><slot name="helpText">{{ helpText }}</slot>
114
+ <span class="optional-text">
115
+ {{ getTranslation('optional') }}<span v-if="needsHelpTextSpacer" v-html="spacer"></span>
116
+ </span>
117
+ <slot name="helpText">{{ helpText }}</slot>
118
118
  </div>
119
119
 
120
120
  <div class="error-messages-container">
@@ -28,4 +28,19 @@
28
28
  color: var(--e-c-secondary-01-700);
29
29
  }
30
30
  }
31
+
32
+ // Type: Search
33
+ .cancel-search {
34
+ display: block;
35
+ border-radius: var(--e-brd-radius-1);
36
+ color: var(--e-c-primary-01-900);
37
+ visibility: hidden;
38
+ pointer-events: none;
39
+
40
+ &.visible {
41
+ visibility: visible;
42
+ pointer-events: auto;
43
+ cursor: pointer;
44
+ }
45
+ }
31
46
  }
@@ -4,4 +4,5 @@ export enum TextFieldTypes {
4
4
  email = 'email',
5
5
  password = 'password',
6
6
  date = 'date',
7
+ search = 'search',
7
8
  }
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import UIcon from '../icon/u-icon.vue'
3
3
  import { TextFieldTypes } from './text-field.types'
4
- import { computed, ref, useSlots, useTemplateRef, useId, watch } from 'vue'
4
+ import { computed, ref, useId, useSlots, useTemplateRef, watch } from 'vue'
5
5
  import { FormFieldBase } from '../form-field/form-field.types'
6
6
  import { getTranslation } from '../../utils/translations/translate'
7
7
 
@@ -95,6 +95,10 @@ const passwordA11yText = computed(() => {
95
95
  return _inputType.value === TextFieldTypes.password ? 'showPassword' : 'hidePassword'
96
96
  })
97
97
 
98
+ const onCancelSearch = () => {
99
+ model.value = ''
100
+ }
101
+
98
102
  watch(
99
103
  () => type,
100
104
  () => {
@@ -129,9 +133,9 @@ watch(
129
133
  >
130
134
  <div class="wrapper">
131
135
  <div class="label">
132
- <slot name="label">
133
- <label :for="inputId">{{ label }}</label>
134
- </slot>
136
+ <label :for="inputId">
137
+ <slot name="label">{{ label }}</slot>
138
+ </label>
135
139
  </div>
136
140
 
137
141
  <div class="control">
@@ -165,14 +169,36 @@ watch(
165
169
  </button>
166
170
  </span>
167
171
 
172
+ <!-- TYPE: DATE -->
173
+ <span v-if="type === TextFieldTypes.date" class="suffix-icon">
174
+ <UIcon name="calendar" />
175
+ </span>
176
+
177
+ <!-- TYPE: SEARCH -->
178
+ <span v-if="type === TextFieldTypes.search" class="prefix-icon">
179
+ <UIcon name="search" />
180
+ </span>
181
+
182
+ <span v-if="type === TextFieldTypes.search" class="suffix-action">
183
+ <button
184
+ type="button"
185
+ :class="['cancel-search', { visible: hasValue && (isHovering || isFocused) }]"
186
+ tabindex="-1"
187
+ @click="onCancelSearch"
188
+ >
189
+ <span class="visually-hidden">{{ getTranslation('cancelSearch') }}</span>
190
+ <UIcon name="close-circle-filled"></UIcon>
191
+ </button>
192
+ </span>
193
+
168
194
  <!-- UNIT -->
169
195
  <span v-if="unit" class="suffix-text">
170
196
  {{ unit }}
171
197
  </span>
172
198
 
173
- <!-- DATE -->
174
- <span v-if="type === TextFieldTypes.date" class="suffix-icon">
175
- <UIcon name="calendar"></UIcon>
199
+ <!-- ACTION -->
200
+ <span v-if="!!slots.action" class="suffix-action custom-action">
201
+ <slot name="action"></slot>
176
202
  </span>
177
203
  </div>
178
204
 
@@ -191,6 +217,16 @@ watch(
191
217
  </div>
192
218
  </template>
193
219
 
220
+ <style scoped lang="scss" src="./text-field.scss"></style>
221
+
194
222
  <style scoped lang="scss">
195
- @use './text-field.scss';
223
+ .suffix-action.custom-action {
224
+ :slotted(button) {
225
+ cursor: pointer;
226
+ }
227
+
228
+ :slotted(.icon) {
229
+ color: var(--e-c-secondary-05-700);
230
+ }
231
+ }
196
232
  </style>