hr-design-system-handlebars 1.111.3 → 1.111.4

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 +14 -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 +46 -6
  16. package/dist/assets/js/components/forms/js/inputHandler.alpine.js +31 -0
  17. package/dist/views/components/forms/components/choice.hbs +1 -1
  18. package/dist/views/components/forms/components/fields.hbs +2 -2
  19. package/dist/views/components/forms/components/upload.hbs +73 -0
  20. package/dist/views_static/components/forms/components/choice.hbs +1 -1
  21. package/dist/views_static/components/forms/components/fields.hbs +2 -2
  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 +1 -1
  44. package/src/stories/views/components/forms/components/fields.hbs +2 -2
  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,17 @@
1
+ # v1.111.4 (Fri Oct 18 2024)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - 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))
6
+
7
+ #### Authors: 3
8
+
9
+ - Saad El Baciri ([@selbaciri](https://github.com/selbaciri))
10
+ - selbaciri (saad.elbaciri@hr.de)
11
+ - Vasco ([@vascoeduardo](https://github.com/vascoeduardo))
12
+
13
+ ---
14
+
1
15
  # v1.111.3 (Fri Oct 18 2024)
2
16
 
3
17
  #### 🐛 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);
@@ -3298,6 +3325,11 @@ article.indexTextDS .indexTextHighlighted .link {
3298
3325
  color: #005293;
3299
3326
  color: var(--color-primary-ds);
3300
3327
  }
3328
+ .text-red-700 {
3329
+ --tw-text-opacity: 1;
3330
+ color: rgba(185, 28, 28, 1);
3331
+ color: rgba(185, 28, 28, var(--tw-text-opacity));
3332
+ }
3301
3333
  .text-search-footer-text {
3302
3334
  color: #000000;
3303
3335
  color: var(--color-search-footer-text);
@@ -3570,7 +3602,7 @@ article.indexTextDS .indexTextHighlighted .link {
3570
3602
  border-bottom-color: var(--color-secondary-ds);
3571
3603
  }
3572
3604
  .counter-reset {
3573
- counter-reset: cnt1729261006294;
3605
+ counter-reset: cnt1729262089915;
3574
3606
  }
3575
3607
  .placeholder-text-xs::-webkit-input-placeholder {
3576
3608
  font-size: 0.75rem;
@@ -3984,7 +4016,7 @@ article.indexTextDS .indexTextHighlighted .link {
3984
4016
  --tw-ring-color: rgba(255, 255, 255, 0.5);
3985
4017
  }
3986
4018
  .-ordered {
3987
- counter-increment: cnt1729261006294 1;
4019
+ counter-increment: cnt1729262089915 1;
3988
4020
  }
3989
4021
  .-ordered::before {
3990
4022
  position: absolute;
@@ -4002,7 +4034,7 @@ article.indexTextDS .indexTextHighlighted .link {
4002
4034
  --tw-text-opacity: 1;
4003
4035
  color: rgba(0, 0, 0, 1);
4004
4036
  color: rgba(0, 0, 0, var(--tw-text-opacity));
4005
- content: counter(cnt1729261006294);
4037
+ content: counter(cnt1729262089915);
4006
4038
  }
4007
4039
  /*! ****************************/
4008
4040
  /*! DataPolicy stuff */
@@ -4138,7 +4170,7 @@ select:has(option:checked:not([value=''])) + label {
4138
4170
  select:has(option:checked[value='']) {
4139
4171
  color: transparent;
4140
4172
  }
4141
- input[type='checkbox']:checked::after {
4173
+ .form-checkbox:checked::after {
4142
4174
  position: absolute;
4143
4175
  content: '';
4144
4176
  width: 15px;
@@ -4151,7 +4183,7 @@ input[type='checkbox']:checked::after {
4151
4183
  border-right: none;
4152
4184
  transform: rotate(-45deg);
4153
4185
  }
4154
- input[type='radio']::after {
4186
+ .form-radio::after {
4155
4187
  content: '';
4156
4188
  position: absolute;
4157
4189
  width: 16px;
@@ -4163,7 +4195,7 @@ input[type='radio']::after {
4163
4195
  background-color: var(--color-primary-ds);
4164
4196
  border-radius: 50%;
4165
4197
  }
4166
- input[type='radio']:checked::after {
4198
+ .form-radio:checked::after {
4167
4199
  transform: translate(-50%, -50%) scale(1);
4168
4200
  }
4169
4201
  .\[-T\:\+Z\] {
@@ -7307,6 +7339,10 @@ input[type='radio']:checked::after {
7307
7339
  padding-left: 0.75rem;
7308
7340
  }
7309
7341
 
7342
+ .md\:pl-4 {
7343
+ padding-left: 1rem;
7344
+ }
7345
+
7310
7346
  .md\:pl-5 {
7311
7347
  padding-left: 1.25rem;
7312
7348
  }
@@ -7315,6 +7351,10 @@ input[type='radio']:checked::after {
7315
7351
  padding-right: 0px;
7316
7352
  }
7317
7353
 
7354
+ .md\:pr-2 {
7355
+ padding-right: 0.5rem;
7356
+ }
7357
+
7318
7358
  .md\:pr-5 {
7319
7359
  padding-right: 1.25rem;
7320
7360
  }
@@ -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}}
@@ -86,13 +86,13 @@
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
97
  }}
98
98
  {{/if}}
@@ -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-base text-black md:text-lg" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300 md:text-base">
58
+ <span x-text="getFileName" class="items-center justify-center text-black" ></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" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-red-700 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}}
@@ -86,13 +86,13 @@
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
97
  }}
98
98
  {{/if}}
@@ -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-base text-black md:text-lg" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300 md:text-base">
58
+ <span x-text="getFileName" class="items-center justify-center text-black" ></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" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-red-700 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.4",
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":"Erlaubte Dateiformate: PDF, DOCX, PNG, JPG. Maximale Dateigröße: 5 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":"Erlaubte Dateiformate: PDF, DOCX, PNG, JPG. Maximale Dateigröße: 5 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}}
@@ -86,13 +86,13 @@
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
97
  }}
98
98
  {{/if}}
@@ -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-base text-black md:text-lg" >{{_label}}{{#if _required}}*{{/if}}</span>
57
+ <div x-show="isFileSelected" class="flex items-center gap-2 p-1 text-sm bg-gray-300 md:text-base">
58
+ <span x-text="getFileName" class="items-center justify-center text-black" ></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" {{#if _required}}:class="{'hidden': hideDescription()}"{{/if}}>{{_description}}</div>
67
+ {{/if}}
68
+ {{#if _required}}
69
+ <div class="hidden pl-3 text-xs text-red-700 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":"Erlaubte Dateiformate: PDF, DOCX, PNG, JPG. Maximale Dateigröße: 5 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
  },