hr-design-system-handlebars 1.107.1 → 1.108.1

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 (43) hide show
  1. package/.storybook/main.js +1 -0
  2. package/CHANGELOG.md +24 -0
  3. package/build/handlebars/helpers/handlebar-helpers.js +2 -2
  4. package/dist/assets/index.css +10 -3
  5. package/dist/assets/js/alpine.js +2 -1
  6. package/dist/assets/js/components/forms/contactForm.alpine.js +181 -18
  7. package/dist/assets/js/components/forms/inputHandler.alpine.js +52 -5
  8. package/dist/views/components/dataPolicySettings/data_policy_settings.hbs +8 -8
  9. package/dist/views/components/footer/page_footer_column.hbs +1 -1
  10. package/dist/views/components/footer/page_footer_content.hbs +4 -4
  11. package/dist/views/components/forms/controls.hbs +3 -2
  12. package/dist/views/components/forms/input.hbs +4 -0
  13. package/dist/views/components/forms/toggle_button.hbs +1 -1
  14. package/dist/views/components/forms/webform.hbs +37 -29
  15. package/dist/views/components/site_header/navigation_search/quick_search_form.hbs +9 -15
  16. package/dist/views/components/site_header/service_logo.hbs +2 -2
  17. package/dist/views_static/components/dataPolicySettings/data_policy_settings.hbs +8 -8
  18. package/dist/views_static/components/footer/page_footer_column.hbs +1 -1
  19. package/dist/views_static/components/footer/page_footer_content.hbs +4 -4
  20. package/dist/views_static/components/forms/controls.hbs +3 -2
  21. package/dist/views_static/components/forms/input.hbs +4 -0
  22. package/dist/views_static/components/forms/toggle_button.hbs +1 -1
  23. package/dist/views_static/components/forms/webform.hbs +37 -29
  24. package/dist/views_static/components/site_header/navigation_search/quick_search_form.hbs +9 -15
  25. package/dist/views_static/components/site_header/service_logo.hbs +2 -2
  26. package/package.json +2 -1
  27. package/src/assets/fixtures/content/copytext/copytext_webform.json +5 -58
  28. package/src/assets/js/alpine.js +2 -1
  29. package/src/stories/views/components/content/copytext/copytext-form.stories.js +41 -0
  30. package/src/stories/views/components/content/copytext/copytext.stories.js +0 -7
  31. package/src/stories/views/components/content/copytext/fixtures/copytext_webform.json +1 -1
  32. package/src/stories/views/components/dataPolicySettings/data_policy_settings.hbs +8 -8
  33. package/src/stories/views/components/footer/page_footer_column.hbs +1 -1
  34. package/src/stories/views/components/footer/page_footer_content.hbs +4 -4
  35. package/src/stories/views/components/forms/contactForm.alpine.js +181 -18
  36. package/src/stories/views/components/forms/controls.hbs +3 -2
  37. package/src/stories/views/components/forms/input.hbs +4 -0
  38. package/src/stories/views/components/forms/inputHandler.alpine.js +52 -5
  39. package/src/stories/views/components/forms/toggle_button.hbs +1 -1
  40. package/src/stories/views/components/forms/webform.hbs +37 -29
  41. package/src/stories/views/components/site_header/navigation_search/quick_search_form.hbs +9 -15
  42. package/src/stories/views/components/site_header/service_logo.hbs +2 -2
  43. package/tailwind.config.js +6 -10
@@ -1,36 +1,199 @@
1
- export default function contactForm(formId) {
1
+ export default function contactForm(formId, jsonURL, errorMessages, multipart, trackingInformations, jsonp = false) {
2
2
  return {
3
+ isPosting: false,
4
+ isWebview:false,
5
+ ajaxTimeout: 60 * 1000,
6
+ form: this.$refs[formId],
7
+ formWrapper: this.$refs[formId].closest("#formWrapper"),
8
+ actionUrl: this.form && this.form.getAttribute('action'),
9
+ checkForJsonURL () {
10
+ if (jsonURL) {
11
+ this.actionUrl = jsonURL
12
+ }
13
+ },
3
14
  formInit(){
4
- this.$store.forms.submissionAttempted[formId] = false;
5
- console.log("this.$store.forms.submissionAttempted",this.$store.forms.submissionAttempted[formId]);
15
+ this.checkForJsonURL()
16
+ console.log("%cformId:", 'color: green' ,formId);
17
+ console.log("%cform:", 'color: green' ,this.form);
18
+ console.log("%cformWrapper:", 'color: green' ,this.formWrapper);
19
+ console.log("%cactionUrl:", 'color: green' ,this.actionUrl);
20
+ console.log("%cjsonURL:", 'color: green', jsonURL);
21
+ console.log("%cerrorMessages:", 'color: green', errorMessages);
22
+ console.log("%cmultipart:", 'color: green', multipart);
23
+ console.log("%ctrackingInformations:", 'color: green', trackingInformations);
24
+
25
+ this.$store.forms.submissionAttempted[formId] = false;
6
26
  },
7
- clickHandler() {
8
- console.log('check for Error:',formId);
9
- const form = this.$refs[formId];
10
- console.log('form',form);
11
- const formData = new FormData(form);
12
- const fields = Array.from(form.elements); // Array of all form fields
13
-
14
- // Loop through each field, focus it, blur it, and serialize the data
15
-
16
- if(form.reportValidity()){
17
- this.submitData();
27
+ clickHandler(event) {
28
+ console.log("event:",event);
29
+ console.log('check for Error:',formId);
30
+ console.log('form:',this.form);
31
+
32
+ if(this.form.reportValidity()){
33
+ // this.logData(event,form);
34
+ this.handleSubmit(event,this.form)
18
35
  } else {
19
36
  this.$store.forms.submissionAttempted[formId] = true;
20
37
  }
21
38
  },
22
- submitData() {
23
- const formData = new FormData(this.$refs[formId]);
39
+ logData(event,form) {
40
+ // TODO - FOR DEBUGGIN CN BE REMOVED AT THE END
41
+ const formData = new FormData(form);
42
+ const fields = Array.from(form.elements);
43
+ // Log the serialized form data
44
+ console.log(fields);
45
+
24
46
  // Convert the FormData to a serialized string
25
47
  const serializedData = Array.from(formData.entries())
26
48
  .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
27
49
  .join('&');
28
50
 
29
51
  // Log the serialized form data
30
- console.log('DATA: ' + serializedData);
52
+ console.log('serialized DATA: ' + serializedData);
53
+ console.log('DATA:', new URLSearchParams(new FormData(form)).toString());
54
+
55
+ },
56
+ // TODO - Validation error handler (adapt to your case)
57
+ handleValidationErrors(errors) {
58
+ console.log('Validation Errors:', errors);
59
+ this.$store.forms.serverErrorFields[formId] = errors;
60
+ console.log('Validation Errors in Store:', this.$store.forms.serverErrorFields);
61
+ },
62
+ resetValidationErrors() {
63
+ this.$store.forms.serverErrorFields[formId] = {}
64
+ },
65
+
66
+ handleSubmit(event, form ) {
67
+ event.preventDefault();
68
+
69
+ if (!this.isWebview) {
70
+ //uxAction(trackingInformations); // Assuming this is a tracking library
71
+ }
72
+
73
+ if (this.isPosting) return;
74
+ this.isPosting = true;
75
+
76
+ // TODO mit alpine umsetzen
77
+ //const preloadIcon = formWrapper.querySelector('.js-preloadIcon');
78
+ //const loadingIcon = formWrapper.querySelector('.js-loadingIcon');
79
+
80
+ // Show loading indicator
81
+ //preloadIcon.classList.add('-isHidden');
82
+ //loadingIcon.classList.remove('-isHidden');
83
+
84
+ console.log('DATA:', new URLSearchParams(new FormData(form)).toString());
85
+
86
+ // Define ajaxOptions based on form type (without jQuery $.ajax)
87
+ let ajaxOptions = {
88
+ method: jsonp ? 'GET' : 'POST',
89
+ headers: {
90
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
91
+ },
92
+ timeout: this.ajaxTimeout,
93
+ body: new URLSearchParams(new FormData(form)),
94
+ };
95
+
96
+ if (jsonp) {
97
+ ajaxOptions.url = this.actionUrl;
98
+ ajaxOptions.headers['Content-Type'] = 'application/json; charset=utf-8';
99
+ ajaxOptions.body = new URLSearchParams(new FormData(form)).toString(); // For JSONP case
100
+ } else if (multipart) {
101
+ ajaxOptions = {
102
+ method: 'POST',
103
+ url: this.actionUrl,
104
+ timeout: 600 * 1000,
105
+ body: new FormData(form), // No URLSearchParams, we use FormData for multipart
106
+ processData: false,
107
+ headers: {}
108
+ };
109
+ } else {
110
+ ajaxOptions.url = `${this.actionUrl}?${responseFormatParam}`;
111
+ }
112
+
113
+ // Using fetch API instead of $.ajax
114
+ fetch(ajaxOptions.url, ajaxOptions)
115
+ .then(async (response) => {
116
+ const data = await response.text(); // Assuming the rponse is text or JSON
117
+ if (response.ok) {
118
+ console.log('Done');
119
+ console.log(data);
120
+ if (jsonURL) {
121
+ const responseData = JSON.parse(data);
122
+ switch (responseData.status) {
123
+ case 'VALIDATION_ERROR':
124
+ this.resetValidationErrors();
125
+ this.handleValidationErrors(responseData.errors);
126
+ break;
127
+ case 'OK':
128
+ console.log("OK");
129
+ this.replaceAnimated(
130
+ this.formWrapper,
131
+ this.form.querySelector('#successMessage').innerHTML,
132
+ true
133
+ );
134
+ break;
135
+ default:
136
+ console.log("default");
137
+ replaceAnimated(
138
+ this.formWrapper,
139
+ this.form.querySelector('#errorMessage').innerHTML,
140
+ true
141
+ );
142
+ break;
143
+ }
144
+ } else {
145
+ replaceAnimated(this.formWrapper, data, true);
146
+ }
147
+ /*
148
+ if (eventOnSuccess) {
149
+ fireEvent(eventOnSuccess, true);
150
+ } */
151
+
152
+ /* if (rootElement.id) {
153
+ window.location.hash = rootElement.id;
154
+ } */
155
+ } else {
156
+ throw new Error('Network response was not ok.');
157
+ }
158
+ })
159
+ .catch((error) => {
160
+ console.error('Fail:', error);
161
+ replaceAnimated(
162
+ this.formWrapper,
163
+ '<div class="c-form success">Das hat leider nicht funktioniert!</div>',
164
+ true
165
+ );
166
+ })
167
+ .finally(() => {
168
+ console.log('Always');
169
+ // TODO MIT ALPINE UMSETZEN
170
+ //preloadIcon.classList.remove('-isHidden');
171
+ //loadingIcon.classList.add('-isHidden');
172
+ this.isPosting = false;
173
+ });
174
+ },
175
+ // Helper function to replace content with animation (replacing hrQuery's replaceAnimated)
176
+ replaceAnimated(wrapper, newContent, withFade = true) {
177
+ if (withFade) {
178
+ wrapper.style.opacity = 0;
179
+ setTimeout(() => {
180
+ wrapper.innerHTML = newContent;
181
+ wrapper.style.opacity = 1;
182
+ }, 300);
183
+ } else {
184
+ wrapper.innerHTML = newContent;
185
+ }
186
+ },
187
+ // Fire event utility (could be Alpine.js specific or custom)
188
+ fireEvent(eventName, success){
189
+ const event = new CustomEvent(eventName, { detail: success });
190
+ document.dispatchEvent(event);
31
191
  },
32
192
  getSubmissionAttempted() {
33
193
  return this.$store.forms.submissionAttempted[formId]
34
194
  }
195
+
35
196
  }
36
- }
197
+ }
198
+
199
+
@@ -2,8 +2,9 @@
2
2
  <div class="text-xs text-gray-500 font-headingSerif">Pflichtfeld*</div>
3
3
  <div class="flex items-center">
4
4
  <label class="order-2 cursor-pointer {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
5
- {{> components/base/image/icon _icon="send-ds" _addClass="w-5 h-5 fill-white dark:fill-text-dark "}}
6
- <input type="submit" class="pl-2 cursor-pointer" value="Absenden" @click.prevent="clickHandler"/>
5
+ <span class="hidden" :class="{'hidden': !isPosting}">{{> components/base/image/icon _icon="reload" _addClass="w-5 h-5 fill-white dark:fill-text-dark animate-spin"}}</span>
6
+ <span class="" :class="{'hidden': isPosting}">{{> components/base/image/icon _icon="send-ds" _addClass="w-5 h-5 fill-white dark:fill-text-dark "}}</span>
7
+ <input type="submit" class="pl-2 cursor-pointer" value="Absenden" @click.prevent="clickHandler($event)"/>
7
8
  </label>
8
9
 
9
10
  {{#> components/button/button _variant="tertiary"_size="lg" _css="order-1 mr-4" _type="reset"}}
@@ -77,6 +77,7 @@
77
77
  DEBUG
78
78
  </div>
79
79
  <div class="px-4 py-3 text-red-700 bg-red-100 border border-t-0 border-red-400 rounded-b">
80
+ <div>name:<span x-text="name" class="font-bold" ></span></div>
80
81
  <div>isFocused:<span x-text="isFocused" class="font-bold" :class="isFocused ? 'text-green-800' : 'text-red-700'"></span></div>
81
82
  <div>wasFocused:<span x-text="wasFocused" class="font-bold" :class="wasFocused ? 'text-green-800' : 'text-red-700'"></span></div>
82
83
  <div>valid:<span x-text="valid" class="font-bold" :class="valid ? 'text-green-800' : 'text-red-700'"></span></div>
@@ -88,6 +89,9 @@
88
89
  <div>errorMessage:<span x-text="errorMessage" class="font-bold" ></span></div>
89
90
  <div>valueMissing:<span x-text="valueMissing" class="font-bold" ></span></div>
90
91
  <div>typeMismatch:<span x-text="typeMismatch" class="font-bold" ></span></div>
92
+ <div>serverErrorFields[form{{getRandom}}][name]:<span x-text="getServerErrorFields('{{_name}}')" class="font-bold" ></span></div>
93
+ <div>submissionAttempted[form{{getRandom}}]:<span x-text="getSubmissionAttempted()" class="font-bold" :class="getSubmissionAttempted() ? 'text-green-800' : 'text-red-700'"></span></div>
94
+
91
95
  </div>
92
96
  </div>
93
97
  </div>
@@ -1,6 +1,7 @@
1
1
  export default function inputHandler(element, formId, errorMandatory, type, errorEmail, prefilledText = '') {
2
2
  return {
3
3
  [element]: prefilledText,
4
+ name: document.getElementById(element).getAttribute("name"),
4
5
  valid: false,
5
6
  wasFocused: false,
6
7
  isFocused: false,
@@ -13,19 +14,23 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
13
14
  return this.valueMissing ? errorMandatory : errorEmail
14
15
  }
15
16
  else {
16
- return errorMandatory
17
+ if(this.hasServerError()){
18
+ return this.getServerError()
19
+ } else {
20
+ return errorMandatory
21
+ }
17
22
  }
18
23
  },
19
24
  hideDescription() {
20
25
  switch (type) {
21
26
  case "email":
22
- return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (this.typeMismatch && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]));
27
+ return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (this.typeMismatch && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
23
28
  case "checkbox":
24
- return Boolean(!this.valid && this.wasFocused && !this.isFocused && !this.isChecked || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]));
29
+ return Boolean(!this.valid && this.wasFocused && !this.isFocused && !this.isChecked || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
25
30
  case "select":
26
- return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]))
31
+ return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ))
27
32
  default:
28
- return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]));
33
+ return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
29
34
  }
30
35
  },
31
36
  hideError() {
@@ -36,6 +41,48 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
36
41
  this.typeMismatch = field.validity.typeMismatch;
37
42
  this.valueMissing = field.validity.valueMissing;
38
43
  this.valid = field.checkValidity()
44
+ },
45
+ hasServerError() {
46
+ return Boolean(this.$store.forms.serverErrorFields[formId][this.name])
47
+ },
48
+ getServerError() {
49
+ let serverError = "Server Error: "
50
+ switch (this.$store.forms.serverErrorFields[formId][this.name]) {
51
+
52
+ case 'form_error_required':
53
+ serverError += "Pflichtfeld"
54
+ break
55
+ case 'form_error_max':
56
+ serverError += "Zu viele Zeichen"
57
+ break
58
+ case 'form_error_validurl':
59
+ serverError += "Ungültige URL"
60
+ break
61
+ case 'form_error_empty':
62
+ serverError += "Darf nicht ausgefüllt werden"
63
+ break
64
+ case 'form_error_constants_or_null':
65
+ serverError += "Ungültiger Wert"
66
+ break
67
+ case 'form_error_constants':
68
+ serverError += "Ungültiger Wert"
69
+ break
70
+ case 'form_error_max_multivalue':
71
+ serverError += "Die maximale Anzahl an Antwortmöglichkeiten wurde überschritten"
72
+ break
73
+ case 'vote_error_identity_already_used':
74
+ serverError += "Unter dieser E-Mail-Adresse wurde bereits abgestimmt. Eine weitere Abstimmung ist nicht möglich."
75
+ break
76
+ case 'vote_error_token_request_count_exceeded':
77
+ serverError += "Die maximale Anzahl an Bestätigungs-E-Mails wurde bereits verschickt."
78
+ break
79
+ case 'form_error_email':
80
+ serverError += "Ungültige E-Mail-Adresse"
81
+ break
82
+ default:
83
+ return false
84
+ }
85
+ return serverError
39
86
  }
40
87
  };
41
88
  }
@@ -1,4 +1,4 @@
1
1
  <input class="h-0 w-0 opacity-0 toggleSwitch-checkbox {{_addClass}}" type="checkbox" id="{{_id}}" {{#if _whitelisted}}data-whitelist="true"{{else}}data-whitelist="false"{{/if}}/>
2
2
  <label class="bg-toggle-default cursor-pointer w-[50px] h-[25px] block rounded-3xl relative toggleSwitch-label" for="{{_id}}">
3
3
  <span class="sr-only">{{_screenReaderText}}</span>
4
- {{> components/base/image/icon _icon="check" _addClass="fill-white inline absolute h-[19px] w-[19px] left-[4px] top-[3px] toggleSwitch-labelIcon"}}</label>
4
+ {{> components/base/image/icon _icon="check" _addClass="fill-white inline absolute h-[19px] w-[19px] left-[4px] top-[3px]"}}</label>
@@ -5,38 +5,46 @@
5
5
  <h3 class="mb-6 text-2xl font-headingSerif sm:mb-12">
6
6
  {{this.title}}
7
7
  </h3>
8
-
9
- <form
10
- x-ref="form{{nextRandom}}"
11
- ax-load
12
- x-data="contactForm('form{{getRandom}}')"
13
- x-init="formInit()"
14
- x-ignore
8
+ <div id="formWrapper">
9
+ <form
10
+ x-ref="form{{nextRandom}}"
11
+ ax-load
12
+ x-data="contactForm('form{{getRandom}}','{{this.jsonURL}}','{{this.errorMessages}}','{{this.isMultipart}}','{{this.trackingInformations}}')"
13
+ x-init="formInit()"
14
+ x-ignore
15
15
 
16
- @submit.prevent="submitData"
17
- id="form{{getRandom}}"
18
- class="relative flex flex-col justify-center overflow-hidden group"
19
- action="{{this.url}}"
20
- method="post"
21
- enctype="{{if this.isMultipart 'multipart/form-data' 'application/x-www-form-urlencoded'}}"
22
- accept-charset="utf-8"
23
-
24
- >
25
-
26
- <div class="">
27
- <div class="px-4 py-2 font-bold text-white bg-red-500 rounded-t">
28
- DEBUG
16
+ @submit.prevent="submitData"
17
+ id="form{{getRandom}}"
18
+ class="relative flex flex-col justify-center overflow-hidden group"
19
+ action="{{this.url}}"
20
+ method="post"
21
+ enctype="{{if this.isMultipart 'multipart/form-data' 'application/x-www-form-urlencoded'}}"
22
+ accept-charset="utf-8"
23
+
24
+ >
25
+
26
+ <div class="">
27
+ <div class="px-4 py-2 font-bold text-white bg-red-500 rounded-t">
28
+ DEBUG
29
+ </div>
30
+ <div class="px-4 py-3 text-red-700 bg-red-100 border border-t-0 border-red-400 rounded-b">
31
+ <div>submissionAttempted[form{{getRandom}}]:<span x-text="getSubmissionAttempted()" class="font-bold" :class="getSubmissionAttempted() ? 'text-green-800' : 'text-red-700'"></span></div>
32
+ <div>isPosting:<span x-text="isPosting" class="font-bold" :class="isPosting ? 'text-green-800' : 'text-red-700'"></span></div>
33
+
34
+ </div>
29
35
  </div>
30
- <div class="px-4 py-3 text-red-700 bg-red-100 border border-t-0 border-red-400 rounded-b">
31
- <div>submissionAttempted[form{{getRandom}}]:<span x-text="getSubmissionAttempted()" class="font-bold" :class="getSubmissionAttempted() ? 'text-green-800' : 'text-red-700'"></span></div>
32
- </div>
33
- </div>
34
- {{> components/forms/fields _formId=(joinStrings 'form' (getRandom)) }}
36
+ {{> components/forms/fields _formId=(joinStrings 'form' (getRandom)) }}
35
37
 
36
- {{> components/forms/controls }}
37
-
38
- </form>
39
-
38
+ {{> components/forms/controls }}
39
+ <template id="successMessage">
40
+ <h2>SUPER DAS HAT ALLES FUNKTIONIERT</h2>
41
+ </template>
42
+ <template id="errorMessage">
43
+ <h2>DAS HAT LEIDER NICHT FUNKTIONIERT</h2>
44
+ </template>
45
+
46
+ </form>
47
+ </div>
40
48
  {{/components/forms/backgroundBox }}
41
49
  {{~else~}}
42
50
  {{> content/webform/components/webform _addClass="print:hidden copytext__clearBox marginTrailer--m"}}
@@ -31,7 +31,7 @@
31
31
  aria-controls="suggestionlist--{{getRandom}}"
32
32
  >
33
33
  <div
34
- class="{{~#unless _footer}} absolute {{/unless}}left-0 w-auto min-w-full z-100 top-8 lg:top-10"
34
+ class="absolute left-0 w-auto min-w-full z-100{{#if _footer}} bottom-11{{else}} top-8 lg:top-10{{/if}}"
35
35
  x-show="query.length > 1 && active && suggestions.length"
36
36
  x-cloak
37
37
  x-transition:leave="transition ease-in duration-100"
@@ -43,7 +43,7 @@
43
43
  id="suggestionlist--{{getRandom}}"
44
44
  aria-label="Suche öffnen"
45
45
  x-effect="$el.setAttribute('aria-expanded', query.length > 1 && active && suggestions.length > 0);$el.setAttribute('aria-hidden', !(query.length > 1 && active && suggestions.length > 0))"
46
- class=" w-full mt-1 lg:mt-0.5 bg-white border rounded divide-y shadow-xl top-100"
46
+ class=" w-full mt-1 lg:mt-0.5 bg-white border rounded divide-y shadow-xl"
47
47
  x-ref="list"
48
48
  >
49
49
 
@@ -63,22 +63,16 @@
63
63
  </div>
64
64
  </div>
65
65
 
66
- {{#if _footer}}
67
66
  <button
68
67
  aria-label='{{loca "search_input_aria_submit" }}'
69
68
  type="submit"
70
- class="pl-2 pr-2 bg-white border-l rounded-r cursor-pointer lg:search-border-color-desktop link-focus-inset md:bg-white text-primary ">
71
- {{> components/base/image/icon _icon="suche-ds" _addClass="w-7 h-7 text-search-footer-text fill-current bg-transparent"}}
72
- </button>
73
- {{else}}
74
- <button
75
- aria-label='{{loca "search_input_aria_submit" }}'
76
- type="submit"
77
- class="pl-2 pr-2 bg-white border-l rounded-r cursor-pointer lg:search-border-color-desktop link-focus-inset md:bg-white text-primary ">
78
- {{> components/base/image/icon _icon="suche-ds" _addClass="w-7 h-7 text-search-footer-text fill-search bg-transparent"}}
79
- </button>
80
- {{/if}}
81
-
69
+ class="pl-2 pr-2 bg-white border-l rounded-r cursor-pointer link-focus-inset md:bg-white text-primary ">
70
+ {{#if _footer}}
71
+ {{> components/base/image/icon _icon="suche-ds" _addClass="w-7 h-7 text-search-footer-text fill-current bg-transparent"}}
72
+ {{else}}
73
+ {{> components/base/image/icon _icon="suche-ds" _addClass="w-7 h-7 text-search-footer-text fill-search bg-transparent"}}
74
+ {{/if}}
75
+ </button>
82
76
  </form>
83
77
 
84
78
  <script type="text/javascript">
@@ -12,7 +12,7 @@
12
12
  {{/if}}
13
13
  >
14
14
  <img src="{{resourceUrl "assets/base/icons/logo/brandlogo--mobile.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
15
- class="w-auto h-full logo-compact" alt="{{loca "meta_application_name"}}">
15
+ class="w-auto h-full" alt="{{loca "meta_application_name"}}">
16
16
  </div>
17
17
 
18
18
  <div
@@ -24,7 +24,7 @@
24
24
  {{/if}}
25
25
  >
26
26
  <img src="{{resourceUrl "assets/base/icons/logo/brandlogo--desk.min.svg" _brand=(defaultIfEmpty this.brand "hessenschau")}}"
27
- class="w-auto h-full logo-desk" alt="{{loca "meta_application_name"}}">
27
+ class="w-auto h-full" alt="{{loca "meta_application_name"}}">
28
28
  </div>
29
29
 
30
30
  </a>
@@ -146,11 +146,16 @@ module.exports = {
146
146
  '9.5': '2.375rem',
147
147
  '11.5': '2.875rem',
148
148
  '13': '3.25rem',
149
+ '14': '3.5rem',
150
+ '15': '3.75rem',
149
151
  '18': '4.5rem',
150
152
  '22': '5.5rem',
151
153
  '26': '6.5rem',
152
154
  '30': '7.5rem',
153
155
  '35': '8.75rem',
156
+ '37': '9.25rem',
157
+ '-37': '-9.25rem',
158
+ '38': '9.5rem',
154
159
  '42': '10.5rem',
155
160
  '45': '11.25rem',
156
161
  '46': '11.5rem',
@@ -195,16 +200,6 @@ module.exports = {
195
200
  margin: {
196
201
  'half-screen': '50vw',
197
202
  },
198
- inset: {
199
- '13': '3.375rem',
200
- '14': '3.5rem',
201
- '15': '3.75rem',
202
- '35': '8.625rem',
203
- '37': '9.125rem',
204
- '-37': '-9.375rem',
205
- '38': '9.5rem',
206
- '42': '10.5rem',
207
- },
208
203
  opacity: {
209
204
  85: '.85',
210
205
  },
@@ -379,6 +374,7 @@ module.exports = {
379
374
  'footer-heading': 'var(--color-footer-heading)',
380
375
  'footer-border': 'var(--color-footer-border)',
381
376
  'search-footer-text': 'var(--color-search-footer-text)',
377
+ 'search-border-desktop': 'var(--search-border-color-desktop)',
382
378
  'labelMedia': 'var(--color-label-media)',
383
379
  'labelEvent': 'var(--color-label-event)',
384
380
  'labelBreakingnews': 'var(--color-label-breakingnews)',