@projectcaluma/ember-form-builder 11.0.0-beta.4 → 11.0.0-beta.40

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 (64) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/addon/components/cfb-code-editor.hbs +26 -9
  3. package/addon/components/cfb-code-editor.js +60 -11
  4. package/addon/components/cfb-form-editor/general.hbs +1 -3
  5. package/addon/components/cfb-form-editor/general.js +6 -7
  6. package/addon/components/cfb-form-editor/question/default.hbs +11 -9
  7. package/addon/components/cfb-form-editor/question/default.js +9 -4
  8. package/addon/components/cfb-form-editor/question/options.hbs +3 -3
  9. package/addon/components/cfb-form-editor/question/validation.hbs +16 -14
  10. package/addon/components/cfb-form-editor/question/validation.js +17 -13
  11. package/addon/components/cfb-form-editor/question-list/item.hbs +44 -38
  12. package/addon/components/cfb-form-editor/question-list.hbs +2 -2
  13. package/addon/components/cfb-form-editor/question-list.js +9 -3
  14. package/addon/components/cfb-form-editor/question.hbs +55 -96
  15. package/addon/components/cfb-form-editor/question.js +53 -34
  16. package/addon/components/cfb-form-list.hbs +7 -7
  17. package/addon/components/cfb-form-list.js +44 -11
  18. package/addon/controllers/index.js +6 -0
  19. package/addon/engine.js +1 -1
  20. package/addon/gql/mutations/add-form-question.graphql +1 -1
  21. package/addon/gql/mutations/remove-form-question.graphql +1 -1
  22. package/addon/gql/mutations/reorder-form-questions.graphql +1 -1
  23. package/addon/gql/mutations/save-calculated-float-question.graphql +1 -0
  24. package/addon/gql/mutations/save-choice-question.graphql +1 -0
  25. package/addon/gql/mutations/save-date-question.graphql +3 -0
  26. package/addon/gql/mutations/save-dynamic-choice-question.graphql +1 -0
  27. package/addon/gql/mutations/save-dynamic-multiple-choice-question.graphql +1 -0
  28. package/addon/gql/mutations/save-files-question.graphql +14 -0
  29. package/addon/gql/mutations/save-float-question.graphql +1 -0
  30. package/addon/gql/mutations/save-integer-question.graphql +1 -0
  31. package/addon/gql/mutations/save-multiple-choice-question.graphql +1 -0
  32. package/addon/gql/mutations/save-table-question.graphql +1 -0
  33. package/addon/gql/mutations/save-text-question.graphql +1 -0
  34. package/addon/gql/mutations/save-textarea-question.graphql +1 -0
  35. package/addon/gql/queries/all-format-validators.graphql +10 -0
  36. package/addon/gql/queries/check-form-slug.graphql +1 -1
  37. package/addon/gql/queries/check-question-slug.graphql +1 -1
  38. package/addon/gql/queries/form-editor-general.graphql +1 -1
  39. package/addon/gql/queries/form-editor-question.graphql +30 -2
  40. package/addon/gql/queries/search-form-question.graphql +3 -3
  41. package/addon/instance-initializers/form-builder-widget-overrides.js +15 -0
  42. package/addon/routes/edit/questions/edit.js +2 -1
  43. package/addon/routes/edit.js +1 -1
  44. package/addon/templates/index.hbs +8 -1
  45. package/addon/validations/question.js +13 -4
  46. package/addon/validators/gt-lt.js +17 -38
  47. package/addon/validators/jexl.js +49 -0
  48. package/app/instance-initializers/form-builder-widget-overrides.js +4 -0
  49. package/app/styles/@projectcaluma/ember-form-builder.scss +2 -2
  50. package/app/styles/_cfb-uikit-powerselect.scss +2 -0
  51. package/blueprints/@projectcaluma/ember-form-builder/index.js +1 -1
  52. package/config/environment.js +0 -7
  53. package/index.js +4 -2
  54. package/package.json +57 -46
  55. package/translations/de.yaml +7 -6
  56. package/translations/en.yaml +4 -3
  57. package/translations/fr.yaml +154 -1
  58. package/addon/components/cfb-float-input.hbs +0 -14
  59. package/addon/components/cfb-label.hbs +0 -12
  60. package/addon/gql/fragments/field.graphql +0 -247
  61. package/addon/gql/mutations/save-file-question.graphql +0 -11
  62. package/app/components/cfb-float-input.js +0 -1
  63. package/app/components/cfb-label.js +0 -1
  64. package/app/styles/_cfb-powerselect.scss +0 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcaluma/ember-form-builder",
3
- "version": "11.0.0-beta.4",
3
+ "version": "11.0.0-beta.40",
4
4
  "description": "Ember engine for building Caluma forms.",
5
5
  "keywords": [
6
6
  "ember-addon",
@@ -10,83 +10,94 @@
10
10
  "homepage": "https://docs.caluma.io/ember-caluma",
11
11
  "repository": "github:projectcaluma/ember-caluma",
12
12
  "scripts": {
13
- "test": "npm-run-all test:*",
13
+ "test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"",
14
14
  "test:ember": "ember test",
15
15
  "test:ember-compatibility": "ember try:each"
16
16
  },
17
17
  "peerDependencies": {
18
- "ember-engines": ">= 0.8"
18
+ "ember-engines": ">= 0.8",
19
+ "ember-source": "^3.28.0 || ^4.0.0"
19
20
  },
20
21
  "dependencies": {
21
- "@ember/render-modifiers": "^2.0.3",
22
- "@glimmer/component": "^1.0.4",
23
- "@glimmer/tracking": "^1.0.4",
24
- "@projectcaluma/ember-core": "^11.0.0-beta.2",
25
- "@projectcaluma/ember-form": "^11.0.0-beta.4",
26
- "codejar": "^3.5.0",
27
- "ember-apollo-client": "^3.2.0",
28
- "ember-auto-import": "^2.4.0",
29
- "ember-changeset": "^4.0.0-beta.2",
30
- "ember-changeset-validations": "^4.0.0-beta.2",
22
+ "@ember/legacy-built-in-components": "^0.4.1",
23
+ "@ember/render-modifiers": "^2.0.4",
24
+ "@ember/string": "^3.0.0",
25
+ "@embroider/macros": "^1.10.0",
26
+ "@glimmer/component": "^1.1.2",
27
+ "@glimmer/tracking": "^1.1.2",
28
+ "@projectcaluma/ember-core": "^11.0.0-beta.40",
29
+ "@projectcaluma/ember-form": "^11.0.0-beta.40",
30
+ "codejar": "^3.6.0",
31
+ "ember-apollo-client": "~4.0.2",
32
+ "ember-auto-import": "^2.5.0",
33
+ "ember-changeset": "^4.1.2",
34
+ "ember-changeset-validations": "^4.1.1",
31
35
  "ember-cli-babel": "^7.26.11",
32
- "ember-cli-htmlbars": "^6.0.1",
36
+ "ember-cli-htmlbars": "^6.1.1",
33
37
  "ember-composable-helpers": "^5.0.0",
34
- "ember-concurrency": "^2.2.0",
38
+ "ember-concurrency": "^2.3.7",
35
39
  "ember-engines-router-service": "^0.3.0",
36
- "ember-fetch": "^8.1.1",
37
- "ember-math-helpers": "^2.18.1",
38
- "ember-pikaday": "^3.0.0",
39
- "ember-power-select": "^5.0.3",
40
- "ember-resources": "^4.2.0",
40
+ "ember-fetch": "^8.1.2",
41
+ "ember-flatpickr": "^3.2.3",
42
+ "ember-intl": "^5.7.2",
43
+ "ember-math-helpers": "^3.0.0",
44
+ "ember-power-select": "^6.0.1",
45
+ "ember-resources": "^5.6.0",
41
46
  "ember-test-selectors": "^6.0.0",
42
- "ember-uikit": "^5.0.0-beta.9",
43
- "ember-validated-form": "^5.1.1",
47
+ "ember-uikit": "^6.1.1",
48
+ "ember-validated-form": "^6.1.2",
44
49
  "graphql": "^15.8.0",
45
50
  "graphql-tag": "^2.12.6",
46
- "jexl": "^2.3.0",
47
- "moment": "^2.29.1",
48
- "prismjs": "^1.26.0"
51
+ "highlight.js": "^11.7.0",
52
+ "highlightjs-jexl": "^0.0.5",
53
+ "jexl": "^2.3.0"
49
54
  },
50
- "//": "TODO: remove ember-data when https://github.com/ember-engines/ember-engines/pull/794 is released",
55
+ "//": [
56
+ "TODO: remove obsolete dependency to `ember-data` which is only necessary",
57
+ "because @embroider/macros `dependencySatisfies` still resolves to `true`",
58
+ "even if the dependency is only present in the workspace (because of the",
59
+ "docs app) but not as direct dependency of the package."
60
+ ],
51
61
  "devDependencies": {
52
62
  "@ember/optional-features": "2.0.0",
53
- "@ember/test-helpers": "2.6.0",
54
- "@embroider/test-setup": "1.0.0",
55
- "@faker-js/faker": "6.0.0-alpha.5",
56
- "@projectcaluma/ember-testing": "10.2.0-beta.2",
63
+ "@ember/test-helpers": "2.7.0",
64
+ "@embroider/test-setup": "2.0.2",
65
+ "@faker-js/faker": "7.6.0",
66
+ "@projectcaluma/ember-testing": "11.0.0-beta.40",
57
67
  "broccoli-asset-rev": "3.0.0",
58
- "ember-cli": "3.28.5",
68
+ "concurrently": "7.6.0",
69
+ "ember-autoresize-modifier": "^0.6.0",
70
+ "ember-cli": "4.9.2",
59
71
  "ember-cli-code-coverage": "1.0.3",
60
- "ember-cli-dependency-checker": "3.2.0",
72
+ "ember-cli-dependency-checker": "3.3.1",
61
73
  "ember-cli-inject-live-reload": "2.1.0",
62
- "ember-cli-mirage": "2.4.0",
74
+ "ember-cli-mirage": "3.0.0-alpha.3",
63
75
  "ember-cli-sri": "2.1.1",
64
76
  "ember-cli-terser": "4.0.2",
65
- "ember-data": "3.28.7",
66
- "ember-disable-prototype-extensions": "1.1.3",
67
- "ember-engines": "0.8.20",
68
- "ember-export-application-global": "2.0.1",
77
+ "ember-data": "4.7.3",
78
+ "ember-engines": "0.8.23",
69
79
  "ember-load-initializers": "2.1.2",
70
- "ember-maybe-import-regenerator": "1.0.0",
71
- "ember-qunit": "5.1.5",
80
+ "ember-qunit": "6.1.1",
72
81
  "ember-resolver": "8.0.3",
73
- "ember-source": "3.28.8",
82
+ "ember-source": "4.9.3",
74
83
  "ember-source-channel-url": "3.0.0",
75
84
  "ember-try": "2.0.0",
76
85
  "loader.js": "4.7.0",
77
- "miragejs": "0.1.43",
78
- "npm-run-all": "4.1.5",
79
- "qunit": "2.17.2",
86
+ "miragejs": "0.1.46",
87
+ "qunit": "2.19.3",
80
88
  "qunit-dom": "2.0.0",
81
- "webpack": "5.68.0"
89
+ "webpack": "5.75.0"
82
90
  },
83
91
  "engines": {
84
- "node": "12.* || 14.* || >= 16"
92
+ "node": "14.* || 16.* || >= 18"
85
93
  },
86
94
  "ember": {
87
95
  "edition": "octane"
88
96
  },
89
97
  "ember-addon": {
90
- "configPath": "tests/dummy/config"
98
+ "configPath": "tests/dummy/config",
99
+ "before": [
100
+ "ember-validated-form"
101
+ ]
91
102
  }
92
103
  }
@@ -10,7 +10,7 @@ caluma:
10
10
  empty-search: "Keine Resultate gefunden. Passen Sie Ihre Suche an um bessere Resultate zu erhalten."
11
11
 
12
12
  not-found:
13
- title: "Du siehst verloren aus"
13
+ title: "Sie sehen verloren aus"
14
14
  subtitle: "Die angefrage Seite existiert nicht!"
15
15
  home: "Zurück zum Start"
16
16
 
@@ -21,14 +21,13 @@ caluma:
21
21
  isArchived: "Archiviert"
22
22
  widgetOverride: "Spezialelement"
23
23
  isPublished: "Publiziert"
24
- archived: "Archivierte"
25
24
  draft: "Entwurf"
26
- active: "Aktive"
25
+ active: "Aktiv"
27
26
  all: "Alle"
28
27
 
29
28
  allForms: "Alle Formulare"
30
29
  new: "Neues Formular"
31
- empty: "Wir haben keine Formulare gefunden. Klicken Sie den Knopf im der rechten oberen Ecke um ein Formular zu Erstellen!"
30
+ empty: "Wir haben keine Formulare gefunden. Klicken Sie den Knopf im der rechten oberen Ecke um ein Formular zu erstellen!"
32
31
  loadMore: "Mehr Formulare laden"
33
32
 
34
33
  not-found: "Kein Formular mit dem Slug '{slug}' gefunden"
@@ -52,6 +51,7 @@ caluma:
52
51
  isRequired: "Pflichtfeld"
53
52
  staticContent: "Statischer Inhalt"
54
53
  infoText: "Infotext"
54
+ hintText: "Hinweistext"
55
55
  confirmationText: "Bestätigungstext"
56
56
  placeholder: "Platzhalter"
57
57
  isHidden: "Versteckt (JEXL)"
@@ -63,6 +63,7 @@ caluma:
63
63
  dataSource: "Datenquelle"
64
64
  formatValidators: "Validierung"
65
65
  defaultValue: "Standardwert"
66
+ meta: "Metainformationen"
66
67
 
67
68
  general: "Allgemein"
68
69
  options: "Optionen"
@@ -73,7 +74,7 @@ caluma:
73
74
  max-length: "Maximale Länge"
74
75
  rowForm: "Formular für Tabelleneinträge"
75
76
  subForm: "Formular für Einträge"
76
- choose: "-- bitte wählen --"
77
+ no-selection: "Keine Auswahl"
77
78
  search-placeholder: "Hier tippen um zu suchen"
78
79
  search-empty: "Keine Formulare gefunden"
79
80
  columnsToDisplay: "Spalten zur Anzeige im Formular"
@@ -102,7 +103,7 @@ caluma:
102
103
  TextareaQuestion: "Text (mehrzeilig)"
103
104
  TableQuestion: "Tabelle"
104
105
  FormQuestion: "Formular"
105
- FileQuestion: "Datei"
106
+ FilesQuestion: "Dateien"
106
107
  StaticQuestion: "Nichtinteraktiver Inhalt"
107
108
  DateQuestion: "Datum"
108
109
  DynamicMultipleChoiceQuestion: "Dynamische Mehrfachauswahl"
@@ -21,7 +21,6 @@ caluma:
21
21
  isArchived: "Archived"
22
22
  widgetOverride: "Custom widget"
23
23
  isPublished: "Published"
24
- archived: "Archived"
25
24
  draft: "Draft"
26
25
  active: "Active"
27
26
  all: "All"
@@ -52,6 +51,7 @@ caluma:
52
51
  isRequired: "Required"
53
52
  staticContent: "Static content"
54
53
  infoText: "Information text"
54
+ hintText: "Hint text"
55
55
  confirmationText: "Confirmation text"
56
56
  placeholder: "Placeholder"
57
57
  isHidden: "Hidden (JEXL)"
@@ -63,6 +63,7 @@ caluma:
63
63
  dataSource: "Data source"
64
64
  formatValidators: "Validation"
65
65
  defaultValue: "Default value"
66
+ meta: "Meta information"
66
67
 
67
68
  general: "General"
68
69
  options: "Options"
@@ -73,7 +74,7 @@ caluma:
73
74
  max-length: "Maximum length"
74
75
  rowForm: "Form to use for rows"
75
76
  subForm: "Form to use for entries"
76
- choose: "-- please choose --"
77
+ no-selection: "No selection"
77
78
  search-placeholder: "Type here to search forms"
78
79
  search-empty: "Search didn't match any forms"
79
80
  columnsToDisplay: "Columns to be shown in the form"
@@ -102,7 +103,7 @@ caluma:
102
103
  TextareaQuestion: "Textarea"
103
104
  TableQuestion: "Table"
104
105
  FormQuestion: "Form"
105
- FileQuestion: "File"
106
+ FilesQuestion: "Files"
106
107
  StaticQuestion: "Non-interactive content"
107
108
  DateQuestion: "Date"
108
109
  DynamicMultipleChoiceQuestion: "Dynamic choices"
@@ -1,9 +1,41 @@
1
1
  caluma:
2
2
  form-builder:
3
+ global:
4
+ save: "Enregistrer"
5
+ loading: "Télécharger"
6
+ cancel: "Annuler"
7
+ search: "Chercher"
8
+ optional: "Facultatif"
9
+
10
+ empty-search: "Aucun résultat trouvé. Adaptez votre recherche pour obtenir de meilleurs résultats."
11
+
12
+ not-found:
13
+ title: "Vous avez l'air perdu"
14
+ subtitle: "La page demandée n'existe pas !"
15
+ home: "Retour au départ"
16
+
17
+ form:
18
+ name: "Nom"
19
+ slug: "Slug"
20
+ description: "Description"
21
+ isArchived: "Archivé"
22
+ widgetOverride: "Élément spécial"
23
+ isPublished: "Publié"
24
+ draft: "Brouillon"
25
+ active: "Actif"
26
+ all: "Tous"
27
+
28
+ allForms: "Tous les formulaires"
29
+ new: "Nouveau formulaire"
30
+ empty: "Nous n'avons trouvé aucun formulaire. Cliquez sur le bouton dans le coin supérieur droit pour créer un formulaire !"
31
+ loadMore: "Télécharger plus de formulaires"
32
+
33
+ not-found: "Aucun formulaire trouvé avec le slug '{slug}'"
34
+
3
35
  question-list:
4
36
  required:
5
37
  label: "Obligatoire (JEXL)"
6
- not-required: "Optionnel"
38
+ not-required: "Facultatif"
7
39
  required: "Obligatoire"
8
40
  conditional: "Conditionnellement obligatoire"
9
41
  hidden:
@@ -13,11 +45,132 @@ caluma:
13
45
  conditional: "Conditionnellement caché"
14
46
 
15
47
  question:
48
+ label: "Étiquette"
49
+ slug: "Slug"
50
+ type: "Type"
51
+ isRequired: "Champ obligatoire"
52
+ staticContent: "Contenu statique"
53
+ infoText: "Texte d'information"
54
+ confirmationText: "Texte de confirmation"
55
+ placeholder: "Caractère générique"
56
+ isHidden: "Caché (JEXL)"
57
+ widgetOverride: "Type d'affichage"
58
+ isArchived: "Archivé"
59
+ type-disabled: "Le type de question ne peut pas être modifié après la création d'une question afin d'éviter les données corrompues."
60
+ supportsMarkdownPrefix: "Ce champ supporte"
61
+ markdown: "Markdown"
62
+ dataSource: "Source des données"
63
+ formatValidators: "Validation"
16
64
  defaultValue: "Valeur par défaut"
65
+ meta: "Méta-informations"
66
+
67
+ general: "Général"
68
+ options: "Options"
69
+
70
+ min-value: "Valeur minimale"
71
+ max-value: "Valeur maximale"
72
+ min-length: "Longueur minimale"
73
+ max-length: "Longueur maximale"
74
+ rowForm: "Formulaire pour les entrées de tableau"
75
+ subForm: "Formulaire pour les entrées"
76
+ no-selection: "Aucune sélection"
17
77
  search-placeholder: "Tapez ici pour rechercher"
18
78
  search-empty: "Pas de formulaires trouvés"
79
+ columnsToDisplay: "Colonnes à afficher dans le formulaire"
80
+ calcExpression: "Formule de calcul (JEXL)"
81
+
82
+ new: "Nouvelle question"
83
+
84
+ minor-info-title: "Important !"
85
+ minor-info: "L'adaptation d'une question ne doit jamais modifier le sens de la question afin de maintenir la cohérence des données."
86
+
87
+ remove: "Supprimer la question"
88
+ add: "Ajouter une question nouvelle ou existante"
89
+ search: "Chercher une question (étiquette ou slug)"
90
+ create: "ou créer une nouvelle question"
91
+ loadMore: "Télécharger plus de questions"
92
+
93
+ empty: "Vous n'avez pas encore ajouté de questions. Appuyez sur le bouton ci-dessus pour le faire !"
94
+ advancedSettings: "Paramètres avancés"
95
+
96
+ types:
97
+ IntegerQuestion: "Nombre entier"
98
+ FloatQuestion: "Nombre à virgule flottante"
99
+ MultipleChoiceQuestion: "Sélection multiple"
100
+ ChoiceQuestion: "Sélection individuel"
101
+ TextQuestion: "Texte"
102
+ TextareaQuestion: "Texte (plusieurs lignes)"
103
+ TableQuestion: "Tableau"
104
+ FormQuestion: "Formulaire"
105
+ FilesQuestion: "Fichiers"
106
+ StaticQuestion: "Contenu non interactif"
107
+ DateQuestion: "Date"
108
+ DynamicMultipleChoiceQuestion: "Sélection multiple dynamique"
109
+ DynamicChoiceQuestion: "Sélection individuel dynamique"
110
+ CalculatedFloatQuestion: "Calcul (nombre à virgule flottante)"
111
+ ActionButtonQuestion: "Bouton d'action"
112
+
113
+ confirmText: "Texte de confirmation"
114
+ action: "Action"
115
+ color: "Couleur"
116
+ validateOnEnter: "Validation lors de l'entrée dans la fenêtre"
117
+
118
+ actions:
119
+ COMPLETE: "Conclure"
120
+ SKIP: "Sauter"
121
+
122
+ colors:
123
+ PRIMARY: "Primaire"
124
+ SECONDARY: "Secondaire"
125
+ DEFAULT: "Défaut"
126
+
127
+ widgetOverrides:
128
+ powerselect: "Power Select"
129
+ hidden: "Caché"
130
+
131
+ not-found: "Aucune question trouvée avec le slug '{slug}'"
132
+
133
+ hideLabel: "Cacher l'étiquette"
19
134
 
20
135
  options:
21
136
  delete: "Supprimer l'option"
22
137
  archive: "Archiver (masquer) l'option"
23
138
  restore: "Restaurer l'option"
139
+
140
+ notification:
141
+ form:
142
+ save:
143
+ success: "Votre formulaire a été enregistré avec succès !"
144
+ error: "Oups, quelque chose s'est mal passé lors de l'enregistrement du formulaire..."
145
+
146
+ create:
147
+ success: "Votre formulaire a été créé avec succès !"
148
+ error: "Oups, quelque chose s'est mal passé lors de la création du formulaire..."
149
+
150
+ reorder-questions:
151
+ success: "Vos questions ont été triées avec succès !"
152
+ error: "Oups, quelque chose s'est mal passé lors du tri des questions..."
153
+
154
+ reorder-options:
155
+ success: "Vos options ont été triées avec succès !"
156
+ error: "Oups, quelque chose s'est mal passé lors du tri des options..."
157
+
158
+ add-question:
159
+ success: "La question a été ajoutée avec succès à votre formulaire !"
160
+ error: "Oups, quelque chose s'est mal passé lors de l'ajout de la question..."
161
+
162
+ remove-question:
163
+ success: "La question a été supprimée avec succès de votre formulaire !"
164
+ error: "Oups, quelque chose s'est mal passé lors de la suppression de la question..."
165
+
166
+ question:
167
+ save:
168
+ success: "Votre question a été enregistrée avec succès !"
169
+ error: "Oups, quelque chose s'est mal passé lors de l'enregistrement de la question..."
170
+
171
+ validations:
172
+ form:
173
+ slug: "Un formulaire avec ce slug existe déjà"
174
+
175
+ question:
176
+ slug: "Une question avec ce slug existe déjà"
@@ -1,14 +0,0 @@
1
- {{component @labelComponent}}
2
-
3
- <input
4
- class="uk-input"
5
- name={{@name}}
6
- ...attributes
7
- step="any"
8
- type="number"
9
- value={{@value}}
10
- {{on "change" this.onUpdate}}
11
- />
12
-
13
- {{component @hintComponent}}
14
- {{component @errorComponent}}
@@ -1,12 +0,0 @@
1
- <label
2
- class="uk-form-label uk-flex uk-flex-between"
3
- for={{@inputId}}
4
- ...attributes
5
- >
6
- {{yield}}{{@label}}
7
- {{#unless @required}}
8
- <span class="uk-text-muted uk-text-lowercase">
9
- ({{t "caluma.form-builder.global.optional"}})
10
- </span>
11
- {{/unless}}
12
- </label>