hr-design-system-handlebars 1.111.3 → 1.111.5

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 (48) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/assets/brand/hessenschau/conf/locatags.merged.json +1 -0
  3. package/dist/assets/brand/hr/conf/locatags.merged.json +1 -0
  4. package/dist/assets/brand/hr-bigband/conf/locatags.merged.json +1 -0
  5. package/dist/assets/brand/hr-fernsehen/conf/locatags.merged.json +1 -0
  6. package/dist/assets/brand/hr-inforadio/conf/locatags.merged.json +1 -0
  7. package/dist/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +1 -0
  8. package/dist/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +1 -0
  9. package/dist/assets/brand/hr-werbung/conf/locatags.merged.json +1 -0
  10. package/dist/assets/brand/hr1/conf/locatags.merged.json +1 -0
  11. package/dist/assets/brand/hr2/conf/locatags.merged.json +1 -0
  12. package/dist/assets/brand/hr3/conf/locatags.merged.json +1 -0
  13. package/dist/assets/brand/hr4/conf/locatags.merged.json +1 -0
  14. package/dist/assets/brand/you-fm/conf/locatags.merged.json +1 -0
  15. package/dist/assets/index.css +41 -6
  16. package/dist/assets/js/components/forms/js/inputHandler.alpine.js +31 -0
  17. package/dist/views/components/forms/components/choice.hbs +2 -2
  18. package/dist/views/components/forms/components/fields.hbs +5 -4
  19. package/dist/views/components/forms/components/upload.hbs +73 -0
  20. package/dist/views_static/components/forms/components/choice.hbs +2 -2
  21. package/dist/views_static/components/forms/components/fields.hbs +5 -4
  22. package/dist/views_static/components/forms/components/upload.hbs +73 -0
  23. package/package.json +1 -1
  24. package/src/assets/brand/_default/conf/locatags.json +2 -1
  25. package/src/assets/brand/hessenschau/conf/locatags.merged.json +1 -0
  26. package/src/assets/brand/hr/conf/locatags.merged.json +1 -0
  27. package/src/assets/brand/hr-bigband/conf/locatags.merged.json +1 -0
  28. package/src/assets/brand/hr-fernsehen/conf/locatags.merged.json +1 -0
  29. package/src/assets/brand/hr-inforadio/conf/locatags.merged.json +1 -0
  30. package/src/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +1 -0
  31. package/src/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +1 -0
  32. package/src/assets/brand/hr-werbung/conf/locatags.merged.json +1 -0
  33. package/src/assets/brand/hr1/conf/locatags.merged.json +1 -0
  34. package/src/assets/brand/hr2/conf/locatags.merged.json +1 -0
  35. package/src/assets/brand/hr3/conf/locatags.merged.json +1 -0
  36. package/src/assets/brand/hr4/conf/locatags.merged.json +1 -0
  37. package/src/assets/brand/you-fm/conf/locatags.merged.json +1 -0
  38. package/src/assets/css/custom-utilities.css +3 -3
  39. package/src/assets/fixtures/content/copytext/copytext_webform.json +10 -0
  40. package/src/assets/fixtures/forms/form_fields.inc.json +4 -4
  41. package/src/assets/fixtures/forms/form_upload.json +8 -0
  42. package/src/stories/views/components/content/copytext/fixtures/copytext_webform.json +1 -1
  43. package/src/stories/views/components/forms/components/choice.hbs +2 -2
  44. package/src/stories/views/components/forms/components/fields.hbs +5 -4
  45. package/src/stories/views/components/forms/components/upload.hbs +73 -0
  46. package/src/stories/views/components/forms/fixtures/form_upload.json +1 -0
  47. package/src/stories/views/components/forms/form_upload.stories.js +34 -0
  48. package/src/stories/views/components/forms/js/inputHandler.alpine.js +31 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ # v1.111.5 (Tue Oct 22 2024)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - some bugfixes for UploadForm [#1124](https://github.com/mumprod/hr-design-system-handlebars/pull/1124) (saad.elbaciri@hr.de [@selbaciri](https://github.com/selbaciri))
6
+
7
+ #### Authors: 2
8
+
9
+ - Saad El Baciri ([@selbaciri](https://github.com/selbaciri))
10
+ - selbaciri (saad.elbaciri@hr.de)
11
+
12
+ ---
13
+
14
+ # v1.111.4 (Fri Oct 18 2024)
15
+
16
+ #### 🐛 Bug Fix
17
+
18
+ - DPE-3307: Upload [#1123](https://github.com/mumprod/hr-design-system-handlebars/pull/1123) (saad.elbaciri@hr.de [@vascoeduardo](https://github.com/vascoeduardo) [@selbaciri](https://github.com/selbaciri))
19
+
20
+ #### Authors: 3
21
+
22
+ - Saad El Baciri ([@selbaciri](https://github.com/selbaciri))
23
+ - selbaciri (saad.elbaciri@hr.de)
24
+ - Vasco ([@vascoeduardo](https://github.com/vascoeduardo))
25
+
26
+ ---
27
+
1
28
  # v1.111.3 (Fri Oct 18 2024)
2
29
 
3
30
  #### 🐛 Bug Fix
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hessenschau . d e",
196
197
  "meta_application_name": "hessenschau.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr . d e",
196
197
  "meta_application_name": "hr.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-bigband . d e",
196
197
  "meta_application_name": "hr-bigband.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-fernsehen . d e",
196
197
  "meta_application_name": "hr-fernsehen.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-inforadio . d e",
196
197
  "meta_application_name": "hr-inforadio.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-rundfunkrat . d e",
196
197
  "meta_application_name": "hr-rundfunkrat.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-sinfonieorchester . d e",
196
197
  "meta_application_name": "hr-sinfonieorchester.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-werbung . d e",
196
197
  "meta_application_name": "hr-werbung.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr1 . d e",
196
197
  "meta_application_name": "hr1.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr2 . d e",
196
197
  "meta_application_name": "hr2.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr3 . d e",
196
197
  "meta_application_name": "hr3.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr4 . d e",
196
197
  "meta_application_name": "hr4.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite you-fm . d e",
196
197
  "meta_application_name": "you-fm.de"
197
198
  }
@@ -1852,6 +1852,11 @@ article.indexTextDS .indexTextHighlighted .link {
1852
1852
  .min-w-full {
1853
1853
  min-width: 100%;
1854
1854
  }
1855
+ .min-w-min {
1856
+ min-width: -webkit-min-content;
1857
+ min-width: -moz-min-content;
1858
+ min-width: min-content;
1859
+ }
1855
1860
  .max-w-3\/4 {
1856
1861
  max-width: 75%;
1857
1862
  }
@@ -2118,6 +2123,9 @@ article.indexTextDS .indexTextHighlighted .link {
2118
2123
  .justify-around {
2119
2124
  justify-content: space-around;
2120
2125
  }
2126
+ .gap-2 {
2127
+ gap: 0.5rem;
2128
+ }
2121
2129
  .gap-3 {
2122
2130
  gap: 0.75rem;
2123
2131
  }
@@ -2256,6 +2264,9 @@ article.indexTextDS .indexTextHighlighted .link {
2256
2264
  .whitespace-pre-wrap {
2257
2265
  white-space: pre-wrap;
2258
2266
  }
2267
+ .text-nowrap {
2268
+ text-wrap: nowrap;
2269
+ }
2259
2270
  .break-words {
2260
2271
  word-wrap: break-word;
2261
2272
  }
@@ -2537,6 +2548,11 @@ article.indexTextDS .indexTextHighlighted .link {
2537
2548
  background-color: rgba(243, 244, 246, 1);
2538
2549
  background-color: rgba(243, 244, 246, var(--tw-bg-opacity));
2539
2550
  }
2551
+ .bg-gray-300 {
2552
+ --tw-bg-opacity: 1;
2553
+ background-color: rgba(209, 213, 219, 1);
2554
+ background-color: rgba(209, 213, 219, var(--tw-bg-opacity));
2555
+ }
2540
2556
  .bg-gray-500 {
2541
2557
  --tw-bg-opacity: 1;
2542
2558
  background-color: rgba(107, 114, 128, 1);
@@ -2774,6 +2790,9 @@ article.indexTextDS .indexTextHighlighted .link {
2774
2790
  fill: #006eb7;
2775
2791
  fill: var(--color-link);
2776
2792
  }
2793
+ .fill-red-600 {
2794
+ fill: #dc2626;
2795
+ }
2777
2796
  .fill-search {
2778
2797
  fill: #000000;
2779
2798
  fill: var(--search-icon-color);
@@ -2980,6 +2999,9 @@ article.indexTextDS .indexTextHighlighted .link {
2980
2999
  .pl-9 {
2981
3000
  padding-left: 2.25rem;
2982
3001
  }
3002
+ .pr-1 {
3003
+ padding-right: 0.25rem;
3004
+ }
2983
3005
  .pr-10 {
2984
3006
  padding-right: 2.5rem;
2985
3007
  }
@@ -3252,6 +3274,11 @@ article.indexTextDS .indexTextHighlighted .link {
3252
3274
  color: #000000;
3253
3275
  color: var(--color-footer-text);
3254
3276
  }
3277
+ .text-gray-500 {
3278
+ --tw-text-opacity: 1;
3279
+ color: rgba(107, 114, 128, 1);
3280
+ color: rgba(107, 114, 128, var(--tw-text-opacity));
3281
+ }
3255
3282
  .text-gray-dark {
3256
3283
  --tw-text-opacity: 1;
3257
3284
  color: rgba(112, 112, 112, 1);
@@ -3570,7 +3597,7 @@ article.indexTextDS .indexTextHighlighted .link {
3570
3597
  border-bottom-color: var(--color-secondary-ds);
3571
3598
  }
3572
3599
  .counter-reset {
3573
- counter-reset: cnt1729261006294;
3600
+ counter-reset: cnt1729601409591;
3574
3601
  }
3575
3602
  .placeholder-text-xs::-webkit-input-placeholder {
3576
3603
  font-size: 0.75rem;
@@ -3984,7 +4011,7 @@ article.indexTextDS .indexTextHighlighted .link {
3984
4011
  --tw-ring-color: rgba(255, 255, 255, 0.5);
3985
4012
  }
3986
4013
  .-ordered {
3987
- counter-increment: cnt1729261006294 1;
4014
+ counter-increment: cnt1729601409591 1;
3988
4015
  }
3989
4016
  .-ordered::before {
3990
4017
  position: absolute;
@@ -4002,7 +4029,7 @@ article.indexTextDS .indexTextHighlighted .link {
4002
4029
  --tw-text-opacity: 1;
4003
4030
  color: rgba(0, 0, 0, 1);
4004
4031
  color: rgba(0, 0, 0, var(--tw-text-opacity));
4005
- content: counter(cnt1729261006294);
4032
+ content: counter(cnt1729601409591);
4006
4033
  }
4007
4034
  /*! ****************************/
4008
4035
  /*! DataPolicy stuff */
@@ -4138,7 +4165,7 @@ select:has(option:checked:not([value=''])) + label {
4138
4165
  select:has(option:checked[value='']) {
4139
4166
  color: transparent;
4140
4167
  }
4141
- input[type='checkbox']:checked::after {
4168
+ .form-checkbox:checked::after {
4142
4169
  position: absolute;
4143
4170
  content: '';
4144
4171
  width: 15px;
@@ -4151,7 +4178,7 @@ input[type='checkbox']:checked::after {
4151
4178
  border-right: none;
4152
4179
  transform: rotate(-45deg);
4153
4180
  }
4154
- input[type='radio']::after {
4181
+ .form-radio::after {
4155
4182
  content: '';
4156
4183
  position: absolute;
4157
4184
  width: 16px;
@@ -4163,7 +4190,7 @@ input[type='radio']::after {
4163
4190
  background-color: var(--color-primary-ds);
4164
4191
  border-radius: 50%;
4165
4192
  }
4166
- input[type='radio']:checked::after {
4193
+ .form-radio:checked::after {
4167
4194
  transform: translate(-50%, -50%) scale(1);
4168
4195
  }
4169
4196
  .\[-T\:\+Z\] {
@@ -7307,6 +7334,10 @@ input[type='radio']:checked::after {
7307
7334
  padding-left: 0.75rem;
7308
7335
  }
7309
7336
 
7337
+ .md\:pl-4 {
7338
+ padding-left: 1rem;
7339
+ }
7340
+
7310
7341
  .md\:pl-5 {
7311
7342
  padding-left: 1.25rem;
7312
7343
  }
@@ -7315,6 +7346,10 @@ input[type='radio']:checked::after {
7315
7346
  padding-right: 0px;
7316
7347
  }
7317
7348
 
7349
+ .md\:pr-2 {
7350
+ padding-right: 0.5rem;
7351
+ }
7352
+
7318
7353
  .md\:pr-5 {
7319
7354
  padding-right: 1.25rem;
7320
7355
  }
@@ -6,6 +6,30 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
6
6
  isFocused: false,
7
7
  typeMismatch: true,
8
8
  valueMissing: true,
9
+ outputText: "",
10
+ isFileSelected: false,
11
+
12
+ setFile(event) {
13
+ const file = event.target.files[0];
14
+ if (file) {
15
+ this.fileName = file.name;
16
+ this.isFileSelected = true;
17
+ }
18
+ else{
19
+ this.fileName = "";
20
+ this.isFileSelected = false;
21
+ }
22
+ },
23
+ getFileName() {
24
+ return this.fileName;
25
+ },
26
+ clearFile() {
27
+ this.fileName = "";
28
+ this.isFileSelected = false;
29
+ this.valid = false;
30
+ var uploadEelement = document.getElementById(element);
31
+ uploadEelement.value = null;
32
+ },
9
33
 
10
34
  errorMessage() {
11
35
  if( type == "email"){
@@ -37,7 +61,10 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
37
61
  case "select":
38
62
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
39
63
  case "choice-group":
64
+ //to-do: Server error
40
65
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]));
66
+ case "upload":
67
+ return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
41
68
  default:
42
69
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
43
70
  }
@@ -55,6 +82,10 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
55
82
  var choice = document.getElementById(element)
56
83
  this.valid = choice.checkValidity()
57
84
  },
85
+ validateUpload() {
86
+ var choice = document.getElementById(element)
87
+ this.valid = choice.checkValidity()
88
+ },
58
89
  hasServerError() {
59
90
  return Boolean(this.$store.forms.serverErrorFields[formId]?.[name]);
60
91
  },
@@ -10,7 +10,7 @@
10
10
  {{/unless}}
11
11
  >
12
12
  <div class="flex flex-row items-center w-full cursor-pointer ">
13
- <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight"," checked:bg-white checked:border-form-highlight rounded-full",""]'}}"
13
+ <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight form-checkbox"," checked:bg-white checked:border-form-highlight rounded-full form-radio",""]'}}"
14
14
  {{#if _required}}
15
15
  :class="{' border-form-highlight dark:border-form-highlight-dark': hideError(),'border-error dark:border-error-dark': hideDescription() }"
16
16
  {{/if}}
@@ -60,7 +60,7 @@
60
60
  {{/if}}
61
61
  {{/if~}}
62
62
  >
63
- <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 text-xs cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-sm font-headingSerif ">
63
+ <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm">
64
64
  {{#if _hasBody}}
65
65
  {{decorator_body}}{{#unless _inGroup}}{{#if _required}}*{{/if}}{{/unless}}
66
66
  {{else}}
@@ -4,11 +4,11 @@
4
4
  {{#if this.caption}}
5
5
  <fieldset>
6
6
  <legend class="mb-5 text-lg font-bold text-text dark:text-text-dark md:text-xl font-heading">{{this.caption}}</legend>
7
- {{~> components/forms/components/fields}}
7
+ {{~> components/forms/components/fields _formId=../_formId}}
8
8
  </fieldset>
9
9
  {{else}}
10
10
  <fieldset>
11
- {{~> components/forms/components/fields}}
11
+ {{~> components/forms/components/fields _formId=../_formId}}
12
12
  </fieldset>
13
13
  {{/if}}
14
14
 
@@ -86,14 +86,15 @@
86
86
  }}
87
87
  {{/if}}
88
88
  {{else if this.type.isUpload}}
89
- {{~> components/forms/upload
89
+ {{~> components/forms/components/upload
90
90
  _name=this.name
91
91
  _label=this.label
92
92
  _description=this.description
93
93
  _multiple=false
94
94
  _required=this.isRequired
95
- _locaKeyButton="uploadForm_label_file_button"
95
+ _errorMandatory="Bitte laden Sie eine Datei hoch"
96
96
  _formId=../_formId
97
+ _type=(if this.type.isUpload "upload")
97
98
  }}
98
99
  {{/if}}
99
100
  </div>
@@ -0,0 +1,73 @@
1
+ <div class="relative flex flex-col w-full mb-6 gap-y-1 md:mb-12"
2
+ ax-load
3
+ x-data="inputHandler('input{{nextRandom}}','{{_formId}}','{{_errorMandatory}}','{{_type}}','', '', '{{_name}}')"
4
+ x-init="validateUpload()"
5
+ x-ignore
6
+ >
7
+ <div @change="setFile($event)" class="relative flex flex-row items-center w-full gap-x-2 md:gap-x-3">
8
+ <input class="absolute w-2 opacity-0 appearance-none cursor-pointer -z-1"
9
+ type="file"
10
+ size="36700160" {{!-- 35MB --}}
11
+ id="input{{getRandom}}"
12
+ {{#if _required}}
13
+ @focus="isFocused = true"
14
+ @blur="wasFocused = true; isFocused=false"
15
+ {{/if}}
16
+
17
+ {{#if _required}}
18
+ @change="validateUpload()"
19
+ {{/if}}
20
+
21
+ {{#if _multiple}}
22
+ multiple
23
+ data-multiple-caption="{count} Dateien ausgewählt"
24
+ {{/if}}
25
+ name="{{#if _name}}{{_name}}{{/if}}"
26
+ {{#if _accept}}
27
+ accept="{{_accept}}"
28
+ {{/if}}
29
+
30
+ {{#if _locaKeyButton}}
31
+ title="{{~loca _locaKeyButton}}"
32
+ {{else}}
33
+ {{#if _label}}
34
+ title="{{_label}}{{#if _required}}*{{/if}}"
35
+ {{/if}}
36
+ {{/if}}
37
+
38
+ {{#if _formField.forHtmlAttribute}}
39
+ value="{{_formField.forHtmlAttribute}}"
40
+ {{else}}
41
+ {{#if _value}}
42
+ value="{{_value}}"
43
+ {{else}}
44
+ value="{{_defaultValue}}"
45
+ {{/if}}
46
+ {{/if}}
47
+
48
+ {{#if _required}}required{{/if}}
49
+ />
50
+ <label for="input{{getRandom}}" class="cursor-pointer min-w-min {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
51
+ <span class="pr-1 md:pr-2">
52
+ {{> components/base/image/icon _icon="upload" _addClass="w-6 h-6 fill-white dark:fill-text-dark"}}
53
+ </span>
54
+ <span class="text-nowrap">{{loca "webform_upload_label" }}</span>
55
+ </label>
56
+ <span x-show="!isFileSelected" class="items-center justify-center text-sm text-text dark:text-text-dark md:text-base" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-cloak x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300">
58
+ <span x-text="getFileName" class="items-center justify-center text-black overflow-anywhere" ></span>
59
+ <button class="flex-shrink-0" @click="clearFile" type="button">
60
+ <span >{{~> components/base/image/icon _icon="close" _addClass="h-3 w-3 fill-red-600" _iconmap="icons"~}}</span>
61
+ </button>
62
+ </div>
63
+ </div>
64
+ <div class="font-heading">
65
+ {{#if _description}}
66
+ <div class="pl-3 text-xs text-gray-500 md:pl-4 dark:text-text-dark" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-error dark:text-error-dark md:pl-4" :class="{'hidden': hideError()}" x-text="errorMessage"></div>
70
+ {{/if}}
71
+ </div>
72
+ </div>
73
+
@@ -10,7 +10,7 @@
10
10
  {{/unless}}
11
11
  >
12
12
  <div class="flex flex-row items-center w-full cursor-pointer ">
13
- <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight"," checked:bg-white checked:border-form-highlight rounded-full",""]'}}"
13
+ <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight form-checkbox"," checked:bg-white checked:border-form-highlight rounded-full form-radio",""]'}}"
14
14
  {{#if _required}}
15
15
  :class="{' border-form-highlight dark:border-form-highlight-dark': hideError(),'border-error dark:border-error-dark': hideDescription() }"
16
16
  {{/if}}
@@ -60,7 +60,7 @@
60
60
  {{/if}}
61
61
  {{/if~}}
62
62
  >
63
- <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 text-xs cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-sm font-headingSerif ">
63
+ <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm">
64
64
  {{#if _hasBody}}
65
65
  {{decorator_body}}{{#unless _inGroup}}{{#if _required}}*{{/if}}{{/unless}}
66
66
  {{else}}
@@ -4,11 +4,11 @@
4
4
  {{#if this.caption}}
5
5
  <fieldset>
6
6
  <legend class="mb-5 text-lg font-bold text-text dark:text-text-dark md:text-xl font-heading">{{this.caption}}</legend>
7
- {{~> components/forms/components/fields}}
7
+ {{~> components/forms/components/fields _formId=../_formId}}
8
8
  </fieldset>
9
9
  {{else}}
10
10
  <fieldset>
11
- {{~> components/forms/components/fields}}
11
+ {{~> components/forms/components/fields _formId=../_formId}}
12
12
  </fieldset>
13
13
  {{/if}}
14
14
 
@@ -86,14 +86,15 @@
86
86
  }}
87
87
  {{/if}}
88
88
  {{else if this.type.isUpload}}
89
- {{~> components/forms/upload
89
+ {{~> components/forms/components/upload
90
90
  _name=this.name
91
91
  _label=this.label
92
92
  _description=this.description
93
93
  _multiple=false
94
94
  _required=this.isRequired
95
- _locaKeyButton="uploadForm_label_file_button"
95
+ _errorMandatory="Bitte laden Sie eine Datei hoch"
96
96
  _formId=../_formId
97
+ _type=(if this.type.isUpload "upload")
97
98
  }}
98
99
  {{/if}}
99
100
  </div>
@@ -0,0 +1,73 @@
1
+ <div class="relative flex flex-col w-full mb-6 gap-y-1 md:mb-12"
2
+ ax-load
3
+ x-data="inputHandler('input{{nextRandom}}','{{_formId}}','{{_errorMandatory}}','{{_type}}','', '', '{{_name}}')"
4
+ x-init="validateUpload()"
5
+ x-ignore
6
+ >
7
+ <div @change="setFile($event)" class="relative flex flex-row items-center w-full gap-x-2 md:gap-x-3">
8
+ <input class="absolute w-2 opacity-0 appearance-none cursor-pointer -z-1"
9
+ type="file"
10
+ size="36700160" {{!-- 35MB --}}
11
+ id="input{{getRandom}}"
12
+ {{#if _required}}
13
+ @focus="isFocused = true"
14
+ @blur="wasFocused = true; isFocused=false"
15
+ {{/if}}
16
+
17
+ {{#if _required}}
18
+ @change="validateUpload()"
19
+ {{/if}}
20
+
21
+ {{#if _multiple}}
22
+ multiple
23
+ data-multiple-caption="{count} Dateien ausgewählt"
24
+ {{/if}}
25
+ name="{{#if _name}}{{_name}}{{/if}}"
26
+ {{#if _accept}}
27
+ accept="{{_accept}}"
28
+ {{/if}}
29
+
30
+ {{#if _locaKeyButton}}
31
+ title="{{~loca _locaKeyButton}}"
32
+ {{else}}
33
+ {{#if _label}}
34
+ title="{{_label}}{{#if _required}}*{{/if}}"
35
+ {{/if}}
36
+ {{/if}}
37
+
38
+ {{#if _formField.forHtmlAttribute}}
39
+ value="{{_formField.forHtmlAttribute}}"
40
+ {{else}}
41
+ {{#if _value}}
42
+ value="{{_value}}"
43
+ {{else}}
44
+ value="{{_defaultValue}}"
45
+ {{/if}}
46
+ {{/if}}
47
+
48
+ {{#if _required}}required{{/if}}
49
+ />
50
+ <label for="input{{getRandom}}" class="cursor-pointer min-w-min {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
51
+ <span class="pr-1 md:pr-2">
52
+ {{> components/base/image/icon _icon="upload" _addClass="w-6 h-6 fill-white dark:fill-text-dark"}}
53
+ </span>
54
+ <span class="text-nowrap">{{loca "webform_upload_label" }}</span>
55
+ </label>
56
+ <span x-show="!isFileSelected" class="items-center justify-center text-sm text-text dark:text-text-dark md:text-base" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-cloak x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300">
58
+ <span x-text="getFileName" class="items-center justify-center text-black overflow-anywhere" ></span>
59
+ <button class="flex-shrink-0" @click="clearFile" type="button">
60
+ <span >{{~> components/base/image/icon _icon="close" _addClass="h-3 w-3 fill-red-600" _iconmap="icons"~}}</span>
61
+ </button>
62
+ </div>
63
+ </div>
64
+ <div class="font-heading">
65
+ {{#if _description}}
66
+ <div class="pl-3 text-xs text-gray-500 md:pl-4 dark:text-text-dark" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-error dark:text-error-dark md:pl-4" :class="{'hidden': hideError()}" x-text="errorMessage"></div>
70
+ {{/if}}
71
+ </div>
72
+ </div>
73
+
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "repository": "https://github.com/szuelch/hr-design-system-handlebars",
9
- "version": "1.111.3",
9
+ "version": "1.111.5",
10
10
  "scripts": {
11
11
  "test": "echo \"Error: no test specified\" && exit 1",
12
12
  "storybook": "storybook dev -p 6006 public",
@@ -191,5 +191,6 @@
191
191
  "teaser_more_video_livestream_brand_sr": "zum {0} Livestream",
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
- "webform_send_text_error": "Das Formular konnte nicht versendet werden."
194
+ "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen"
195
196
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hessenschau . d e",
196
197
  "meta_application_name": "hessenschau.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr . d e",
196
197
  "meta_application_name": "hr.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-bigband . d e",
196
197
  "meta_application_name": "hr-bigband.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-fernsehen . d e",
196
197
  "meta_application_name": "hr-fernsehen.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-inforadio . d e",
196
197
  "meta_application_name": "hr-inforadio.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-rundfunkrat . d e",
196
197
  "meta_application_name": "hr-rundfunkrat.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-sinfonieorchester . d e",
196
197
  "meta_application_name": "hr-sinfonieorchester.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr-werbung . d e",
196
197
  "meta_application_name": "hr-werbung.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr1 . d e",
196
197
  "meta_application_name": "hr1.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr2 . d e",
196
197
  "meta_application_name": "hr2.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr3 . d e",
196
197
  "meta_application_name": "hr3.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite hr4 . d e",
196
197
  "meta_application_name": "hr4.de"
197
198
  }
@@ -192,6 +192,7 @@
192
192
  "teaser_more_video_livestream_sr": "zum Livestream",
193
193
  "webform_send_text_success": "Das Formular wurde erfolgreich versendet.",
194
194
  "webform_send_text_error": "Das Formular konnte nicht versendet werden.",
195
+ "webform_upload_label": "Datei auswählen",
195
196
  "header_homepage_link_title": "Startseite you-fm . d e",
196
197
  "meta_application_name": "you-fm.de"
197
198
  }
@@ -465,7 +465,7 @@
465
465
  @apply text-transparent;
466
466
  }
467
467
 
468
- input[type='checkbox']:checked::after {
468
+ .form-checkbox:checked::after {
469
469
  position: absolute;
470
470
  content: '';
471
471
  width: 15px;
@@ -479,7 +479,7 @@
479
479
  transform: rotate(-45deg);
480
480
  }
481
481
 
482
- input[type='radio']::after {
482
+ .form-radio::after {
483
483
  content: '';
484
484
  position: absolute;
485
485
  width: 16px;
@@ -491,7 +491,7 @@
491
491
  border-radius: 50%;
492
492
  }
493
493
 
494
- input[type='radio']:checked::after {
494
+ .form-radio:checked::after {
495
495
  transform: translate(-50%, -50%) scale(1);
496
496
  }
497
497
  }
@@ -22,6 +22,16 @@
22
22
  "@->jsoninclude": "forms/form_fields.inc.json",
23
23
  "@->contentpath": "input-text-nachname-required"
24
24
  },
25
+ {
26
+ "@->jsoninclude": "forms/form_fields.inc.json",
27
+ "@->contentpath": "upload",
28
+ "@->overrides": [
29
+ {
30
+ "@->contentpath": "isRequired",
31
+ "@->value": true
32
+ }
33
+ ]
34
+ },
25
35
  {
26
36
  "@->jsoninclude": "forms/form_fields.inc.json",
27
37
  "@->contentpath": "select"
@@ -242,9 +242,9 @@
242
242
  "isUpload":true,
243
243
  "asString":"upload"
244
244
  },
245
- "name":"lieblingsfarbe",
246
- "label":"Wählen Sie Ihre Lieblingsfarbe",
247
- "description":"Bitte wählen Sie eine der folgenden Farben aus.",
248
- "isRequired":false
245
+ "name":"Datei Hochladen",
246
+ "label":"Wählen Sie eine Datei zum Hochladen",
247
+ "description":"Maximale Dateigröße: 35 MB.",
248
+ "isRequired":true
249
249
  }
250
250
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "fields":[
3
+ {
4
+ "@->jsoninclude": "forms/form_fields.inc.json",
5
+ "@->contentpath": "upload"
6
+ }
7
+ ]
8
+ }
@@ -1 +1 @@
1
- {"copytextParagraph":[{"isHeadline":true,"text":"Copytext mit Formular"},{"paragraphBoxItem":{"isWebForm":true,"hasNewWebForm":true,"title":"Kontaktformular","jsonUrl":"https://ugc-hessenschau.dev-ext.hrcms.gcp.cloud.hr.de","errorMessages":"errorMessages","isMultipart":"isMultipart","trackingInformations":"trackingInformations","fields":[{"type":{"isText":true,"asString":"text"},"name":"vorname","label":"Vorname","description":"Das ist der Beschreibungstext (*Pflichtfeld)","defaultValue":"","isHidden":false,"isRequired":true,"maxLength":"140"},{"type":{"isText":true,"asString":"text"},"name":"nachname","label":"Nachname","description":"","defaultValue":"","isHidden":false,"isRequired":true,"maxLength":"140"},{"type":{"isSelect":true,"asString":"select"},"name":"Select Name","label":"Wen möchten Sie erreichen?","description":"Das ist der Beschreibungstext von Select","defaultValue":"","isHidden":false,"isRequired":true,"options":[{"id":"option1","value":"option1","selected":false,"label":"Option 1"},{"id":"option2","value":"option2","selected":false,"label":"Option 2"},{"id":"option3","value":"option3","selected":false,"label":"Option 3"},{"id":"option4","value":"option4","selected":false,"label":"Option 4"}]},{"isGrouped":true,"type":{"isChoice":true,"asString":"checkbox"},"name":"interessen","label":"Wählen Sie Ihre Interessen","isMeta":false,"description":"Bitte kreuzen Sie alle Interessen an, die auf Sie zutreffen. Ihre Auswahl hilft uns, Ihnen relevante Inhalte anzubieten.","isRequired":false,"options":[{"value":"sport","label":"sport","title":"sport","isSelected":false},{"value":"musik","label":"musik","title":"musik","isSelected":false},{"value":"lesen","label":"lesen","title":"lesen","isSelected":false},{"value":"reisen","label":"reisen","title":"reisen","isSelected":false},{"value":"kochen","label":"kochen","title":"kochen","isSelected":false},{"value":"filme","label":"filme","title":"filme","isSelected":false},{"value":"tanzen","label":"tanzen","title":"tanzen","isSelected":false},{"value":"fotografie","label":"fotografie","title":"fotografie","isSelected":false}]},{"isGrouped":true,"type":{"isChoice":true,"isRadioChoice":true,"asString":"radio"},"name":"lieblingsfarbe","label":"Wählen Sie Ihre Lieblingsfarbe","isMeta":false,"description":"Bitte wählen Sie eine der folgenden Farben aus.","isRequired":true,"options":[{"value":"rot","label":"rot","title":"rot","isSelected":false},{"value":"blau","label":"blau","title":"blau","isSelected":false},{"value":"grün","label":"grün","title":"grün","isSelected":false}]},{"isGrouped":true,"type":{"isChoice":true,"isRadioChoice":true,"asString":"radio"},"name":"lieblingsfarbe","label":"Wählen Sie Ihre Lieblingsfarbe","isMeta":false,"description":"Bitte wählen Sie eine der folgenden Farben aus.","isRequired":false,"options":[{"value":"rot","label":"rot","title":"rot","isSelected":false},{"value":"blau","label":"blau","title":"blau","isSelected":false},{"value":"grün","label":"grün","title":"grün","isSelected":false}]},{"isGrouped":false,"type":{"isChoice":true,"asString":"checkbox"},"name":"checkbox","label":"Ich bin damit einverstanden.","isMeta":false,"description":"Das ist der Beschreibungstext von Checkbox","isRequired":false},{"isGrouped":false,"type":{"isChoice":true,"asString":"checkbox"},"name":"checkbox","label":"Ich bin damit einverstanden, dass der hr die von mir im vorstehenden Formular angegebenen personenbezogenen Daten für den Zweck der Kontaktaufnahme mit Upload verarbeitet. Eine Weitergabe an Dritte findet nicht statt, es sei denn, es wird ausdrücklich darauf hingewiesen. Unsere Datenschutzerklärung mit sämtlichen Informationen gemäß Art 13 DSGVO zur Datenverarbeitung durch den hr und zu Ihren Rechten können Sie unter Datenschutzerklärung einsehen. Den Datenschutzbeauftragten des hr erreichen Sie unter datenschutz@hr.de.","isMeta":false,"description":"Das ist der Beschreibungstext von Checkbox","isRequired":true}]}}]}
1
+ {"copytextParagraph":[{"isHeadline":true,"text":"Copytext mit Formular"},{"paragraphBoxItem":{"isWebForm":true,"hasNewWebForm":true,"title":"Kontaktformular","jsonUrl":"https://ugc-hessenschau.dev-ext.hrcms.gcp.cloud.hr.de","errorMessages":"errorMessages","isMultipart":"isMultipart","trackingInformations":"trackingInformations","fields":[{"type":{"isText":true,"asString":"text"},"name":"vorname","label":"Vorname","description":"Das ist der Beschreibungstext (*Pflichtfeld)","defaultValue":"","isHidden":false,"isRequired":true,"maxLength":"140"},{"type":{"isText":true,"asString":"text"},"name":"nachname","label":"Nachname","description":"","defaultValue":"","isHidden":false,"isRequired":true,"maxLength":"140"},{"type":{"isUpload":true,"asString":"upload"},"name":"Datei Hochladen","label":"Wählen Sie eine Datei zum Hochladen","description":"Maximale Dateigröße: 35 MB.","isRequired":true},{"type":{"isSelect":true,"asString":"select"},"name":"Select Name","label":"Wen möchten Sie erreichen?","description":"Das ist der Beschreibungstext von Select","defaultValue":"","isHidden":false,"isRequired":true,"options":[{"id":"option1","value":"option1","selected":false,"label":"Option 1"},{"id":"option2","value":"option2","selected":false,"label":"Option 2"},{"id":"option3","value":"option3","selected":false,"label":"Option 3"},{"id":"option4","value":"option4","selected":false,"label":"Option 4"}]},{"isGrouped":true,"type":{"isChoice":true,"asString":"checkbox"},"name":"interessen","label":"Wählen Sie Ihre Interessen","isMeta":false,"description":"Bitte kreuzen Sie alle Interessen an, die auf Sie zutreffen. Ihre Auswahl hilft uns, Ihnen relevante Inhalte anzubieten.","isRequired":false,"options":[{"value":"sport","label":"sport","title":"sport","isSelected":false},{"value":"musik","label":"musik","title":"musik","isSelected":false},{"value":"lesen","label":"lesen","title":"lesen","isSelected":false},{"value":"reisen","label":"reisen","title":"reisen","isSelected":false},{"value":"kochen","label":"kochen","title":"kochen","isSelected":false},{"value":"filme","label":"filme","title":"filme","isSelected":false},{"value":"tanzen","label":"tanzen","title":"tanzen","isSelected":false},{"value":"fotografie","label":"fotografie","title":"fotografie","isSelected":false}]},{"isGrouped":true,"type":{"isChoice":true,"isRadioChoice":true,"asString":"radio"},"name":"lieblingsfarbe","label":"Wählen Sie Ihre Lieblingsfarbe","isMeta":false,"description":"Bitte wählen Sie eine der folgenden Farben aus.","isRequired":true,"options":[{"value":"rot","label":"rot","title":"rot","isSelected":false},{"value":"blau","label":"blau","title":"blau","isSelected":false},{"value":"grün","label":"grün","title":"grün","isSelected":false}]},{"isGrouped":true,"type":{"isChoice":true,"isRadioChoice":true,"asString":"radio"},"name":"lieblingsfarbe","label":"Wählen Sie Ihre Lieblingsfarbe","isMeta":false,"description":"Bitte wählen Sie eine der folgenden Farben aus.","isRequired":false,"options":[{"value":"rot","label":"rot","title":"rot","isSelected":false},{"value":"blau","label":"blau","title":"blau","isSelected":false},{"value":"grün","label":"grün","title":"grün","isSelected":false}]},{"isGrouped":false,"type":{"isChoice":true,"asString":"checkbox"},"name":"checkbox","label":"Ich bin damit einverstanden.","isMeta":false,"description":"Das ist der Beschreibungstext von Checkbox","isRequired":false},{"isGrouped":false,"type":{"isChoice":true,"asString":"checkbox"},"name":"checkbox","label":"Ich bin damit einverstanden, dass der hr die von mir im vorstehenden Formular angegebenen personenbezogenen Daten für den Zweck der Kontaktaufnahme mit Upload verarbeitet. Eine Weitergabe an Dritte findet nicht statt, es sei denn, es wird ausdrücklich darauf hingewiesen. Unsere Datenschutzerklärung mit sämtlichen Informationen gemäß Art 13 DSGVO zur Datenverarbeitung durch den hr und zu Ihren Rechten können Sie unter Datenschutzerklärung einsehen. Den Datenschutzbeauftragten des hr erreichen Sie unter datenschutz@hr.de.","isMeta":false,"description":"Das ist der Beschreibungstext von Checkbox","isRequired":true}]}}]}
@@ -10,7 +10,7 @@
10
10
  {{/unless}}
11
11
  >
12
12
  <div class="flex flex-row items-center w-full cursor-pointer ">
13
- <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight"," checked:bg-white checked:border-form-highlight rounded-full",""]'}}"
13
+ <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight form-checkbox"," checked:bg-white checked:border-form-highlight rounded-full form-radio",""]'}}"
14
14
  {{#if _required}}
15
15
  :class="{' border-form-highlight dark:border-form-highlight-dark': hideError(),'border-error dark:border-error-dark': hideDescription() }"
16
16
  {{/if}}
@@ -60,7 +60,7 @@
60
60
  {{/if}}
61
61
  {{/if~}}
62
62
  >
63
- <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 text-xs cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-sm font-headingSerif ">
63
+ <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm">
64
64
  {{#if _hasBody}}
65
65
  {{decorator_body}}{{#unless _inGroup}}{{#if _required}}*{{/if}}{{/unless}}
66
66
  {{else}}
@@ -4,11 +4,11 @@
4
4
  {{#if this.caption}}
5
5
  <fieldset>
6
6
  <legend class="mb-5 text-lg font-bold text-text dark:text-text-dark md:text-xl font-heading">{{this.caption}}</legend>
7
- {{~> components/forms/components/fields}}
7
+ {{~> components/forms/components/fields _formId=../_formId}}
8
8
  </fieldset>
9
9
  {{else}}
10
10
  <fieldset>
11
- {{~> components/forms/components/fields}}
11
+ {{~> components/forms/components/fields _formId=../_formId}}
12
12
  </fieldset>
13
13
  {{/if}}
14
14
 
@@ -86,14 +86,15 @@
86
86
  }}
87
87
  {{/if}}
88
88
  {{else if this.type.isUpload}}
89
- {{~> components/forms/upload
89
+ {{~> components/forms/components/upload
90
90
  _name=this.name
91
91
  _label=this.label
92
92
  _description=this.description
93
93
  _multiple=false
94
94
  _required=this.isRequired
95
- _locaKeyButton="uploadForm_label_file_button"
95
+ _errorMandatory="Bitte laden Sie eine Datei hoch"
96
96
  _formId=../_formId
97
+ _type=(if this.type.isUpload "upload")
97
98
  }}
98
99
  {{/if}}
99
100
  </div>
@@ -0,0 +1,73 @@
1
+ <div class="relative flex flex-col w-full mb-6 gap-y-1 md:mb-12"
2
+ ax-load
3
+ x-data="inputHandler('input{{nextRandom}}','{{_formId}}','{{_errorMandatory}}','{{_type}}','', '', '{{_name}}')"
4
+ x-init="validateUpload()"
5
+ x-ignore
6
+ >
7
+ <div @change="setFile($event)" class="relative flex flex-row items-center w-full gap-x-2 md:gap-x-3">
8
+ <input class="absolute w-2 opacity-0 appearance-none cursor-pointer -z-1"
9
+ type="file"
10
+ size="36700160" {{!-- 35MB --}}
11
+ id="input{{getRandom}}"
12
+ {{#if _required}}
13
+ @focus="isFocused = true"
14
+ @blur="wasFocused = true; isFocused=false"
15
+ {{/if}}
16
+
17
+ {{#if _required}}
18
+ @change="validateUpload()"
19
+ {{/if}}
20
+
21
+ {{#if _multiple}}
22
+ multiple
23
+ data-multiple-caption="{count} Dateien ausgewählt"
24
+ {{/if}}
25
+ name="{{#if _name}}{{_name}}{{/if}}"
26
+ {{#if _accept}}
27
+ accept="{{_accept}}"
28
+ {{/if}}
29
+
30
+ {{#if _locaKeyButton}}
31
+ title="{{~loca _locaKeyButton}}"
32
+ {{else}}
33
+ {{#if _label}}
34
+ title="{{_label}}{{#if _required}}*{{/if}}"
35
+ {{/if}}
36
+ {{/if}}
37
+
38
+ {{#if _formField.forHtmlAttribute}}
39
+ value="{{_formField.forHtmlAttribute}}"
40
+ {{else}}
41
+ {{#if _value}}
42
+ value="{{_value}}"
43
+ {{else}}
44
+ value="{{_defaultValue}}"
45
+ {{/if}}
46
+ {{/if}}
47
+
48
+ {{#if _required}}required{{/if}}
49
+ />
50
+ <label for="input{{getRandom}}" class="cursor-pointer min-w-min {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
51
+ <span class="pr-1 md:pr-2">
52
+ {{> components/base/image/icon _icon="upload" _addClass="w-6 h-6 fill-white dark:fill-text-dark"}}
53
+ </span>
54
+ <span class="text-nowrap">{{loca "webform_upload_label" }}</span>
55
+ </label>
56
+ <span x-show="!isFileSelected" class="items-center justify-center text-sm text-text dark:text-text-dark md:text-base" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-cloak x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300">
58
+ <span x-text="getFileName" class="items-center justify-center text-black overflow-anywhere" ></span>
59
+ <button class="flex-shrink-0" @click="clearFile" type="button">
60
+ <span >{{~> components/base/image/icon _icon="close" _addClass="h-3 w-3 fill-red-600" _iconmap="icons"~}}</span>
61
+ </button>
62
+ </div>
63
+ </div>
64
+ <div class="font-heading">
65
+ {{#if _description}}
66
+ <div class="pl-3 text-xs text-gray-500 md:pl-4 dark:text-text-dark" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-error dark:text-error-dark md:pl-4" :class="{'hidden': hideError()}" x-text="errorMessage"></div>
70
+ {{/if}}
71
+ </div>
72
+ </div>
73
+
@@ -0,0 +1 @@
1
+ {"fields":[{"type":{"isUpload":true,"asString":"upload"},"name":"Datei Hochladen","label":"Wählen Sie eine Datei zum Hochladen","description":"Maximale Dateigröße: 35 MB.","isRequired":true}]}
@@ -0,0 +1,34 @@
1
+
2
+ import uploadJson from './fixtures/form_upload.json'
3
+
4
+ const handlebars = require('hrHandlebars')
5
+
6
+
7
+ export default {
8
+ title: 'Komponenten/Formulare',
9
+ decorators: [
10
+ (Story) => {
11
+ return `<div class="grid grid-page">
12
+ <div class="grid bg-white grid-article">
13
+ ${Story()}
14
+ </div>
15
+ </div>`
16
+ },
17
+ ],
18
+ }
19
+ const Template = (args) => {
20
+ let hbsTemplate = handlebars.compile(`
21
+ {{#>components/forms/backgroundBox }}
22
+ <form class="relative flex flex-col justify-center overflow-hidden group" id="form{{nextRandom}}" action="{{this.url}}" method="post" enctype="{{if this.isMultipart 'multipart/form-data' 'application/x-www-form-urlencoded'}}" accept-charset="utf-8" >
23
+ {{> components/forms/components/fields }}
24
+ </form>
25
+ {{/components/forms/backgroundBox }}
26
+ `)
27
+ return hbsTemplate({ ...args })
28
+ }
29
+
30
+ export const Upload = {
31
+ render: Template.bind({}),
32
+ name: 'Upload',
33
+ args: uploadJson,
34
+ }
@@ -6,6 +6,30 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
6
6
  isFocused: false,
7
7
  typeMismatch: true,
8
8
  valueMissing: true,
9
+ outputText: "",
10
+ isFileSelected: false,
11
+
12
+ setFile(event) {
13
+ const file = event.target.files[0];
14
+ if (file) {
15
+ this.fileName = file.name;
16
+ this.isFileSelected = true;
17
+ }
18
+ else{
19
+ this.fileName = "";
20
+ this.isFileSelected = false;
21
+ }
22
+ },
23
+ getFileName() {
24
+ return this.fileName;
25
+ },
26
+ clearFile() {
27
+ this.fileName = "";
28
+ this.isFileSelected = false;
29
+ this.valid = false;
30
+ var uploadEelement = document.getElementById(element);
31
+ uploadEelement.value = null;
32
+ },
9
33
 
10
34
  errorMessage() {
11
35
  if( type == "email"){
@@ -37,7 +61,10 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
37
61
  case "select":
38
62
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
39
63
  case "choice-group":
64
+ //to-do: Server error
40
65
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]));
66
+ case "upload":
67
+ return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
41
68
  default:
42
69
  return Boolean((!this.valid && this.wasFocused && !this.isFocused) || (!this.valid && !this.isFocused && this.$store.forms.submissionAttempted[formId]) || (this.hasServerError() && !this.isFocused ));
43
70
  }
@@ -55,6 +82,10 @@ export default function inputHandler(element, formId, errorMandatory, type, erro
55
82
  var choice = document.getElementById(element)
56
83
  this.valid = choice.checkValidity()
57
84
  },
85
+ validateUpload() {
86
+ var choice = document.getElementById(element)
87
+ this.valid = choice.checkValidity()
88
+ },
58
89
  hasServerError() {
59
90
  return Boolean(this.$store.forms.serverErrorFields[formId]?.[name]);
60
91
  },