@windward/core 0.2.1 → 0.2.2

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 (33) hide show
  1. package/components/Content/Blocks/Accordion.vue +13 -4
  2. package/components/Content/Blocks/Email.vue +61 -23
  3. package/components/Content/Blocks/Feedback.vue +2 -1
  4. package/components/Content/Blocks/Image.vue +7 -0
  5. package/components/Content/Blocks/OpenResponseCollate.vue +1 -1
  6. package/components/Content/Blocks/UserUpload.vue +2 -2
  7. package/components/Settings/AccordionSettings.vue +36 -11
  8. package/components/Settings/EmailSettings.vue +61 -19
  9. package/components/Settings/MathSettings.vue +6 -4
  10. package/components/Settings/ScenarioChoiceSettings.vue +54 -47
  11. package/components/Settings/TabSettings.vue +3 -1
  12. package/components/Settings/TextEditorSettings.vue +72 -30
  13. package/components/Settings/UserUploadSettings.vue +3 -3
  14. package/components/Settings/VideoSettings.vue +2 -2
  15. package/components/utils/MathExpressionEditor.vue +4 -5
  16. package/components/utils/TinyMCEWrapper.vue +33 -8
  17. package/components/utils/glossary/CourseGlossary.vue +45 -32
  18. package/config/tinymce.config.ts +2 -1
  19. package/helpers/tinymce/plugin.ts +18 -4
  20. package/i18n/en-US/components/content/blocks/email.ts +2 -0
  21. package/i18n/en-US/components/settings/accordion.ts +2 -1
  22. package/i18n/en-US/components/settings/email.ts +1 -0
  23. package/i18n/en-US/components/settings/text_editor.ts +4 -1
  24. package/i18n/es-ES/components/content/blocks/email.ts +2 -0
  25. package/i18n/es-ES/components/settings/accordion.ts +2 -1
  26. package/i18n/es-ES/components/settings/email.ts +1 -0
  27. package/i18n/es-ES/components/settings/text_editor.ts +4 -1
  28. package/i18n/sv-SE/components/content/blocks/email.ts +2 -0
  29. package/i18n/sv-SE/components/settings/accordion.ts +1 -0
  30. package/i18n/sv-SE/components/settings/email.ts +1 -0
  31. package/i18n/sv-SE/components/settings/text_editor.ts +4 -1
  32. package/package.json +1 -1
  33. package/test/Components/Settings/EmailSettings.spec.js +18 -2
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <v-container>
3
+ <v-container class="pa-0">
4
4
  <v-col class="pa-0">
5
5
  <v-text-field
6
6
  v-model="block.metadata.config.title"
@@ -47,28 +47,8 @@
47
47
  )
48
48
  "
49
49
  ></v-switch>
50
-
51
- <v-btn
52
- color="primary"
53
- outlined
54
- block
55
- :disabled="block.metadata.config.items.length > 26"
56
- @click="onAddElement"
57
- >
58
- <v-icon>mdi-plus</v-icon>
59
- <span v-if="block.metadata.config.items.length <= 26">
60
- {{ $t('shared.forms.add') }}
61
- </span>
62
- <span v-else>
63
- {{
64
- $t(
65
- 'windward.core.components.settings.scenario_choice.over_item_limit'
66
- )
67
- }}
68
- </span>
69
- </v-btn>
70
50
  </v-col>
71
- <v-col>
51
+ <v-col class="pa-0">
72
52
  <SortableExpansionPanel
73
53
  v-model="block.metadata.config.items"
74
54
  @click:close="onRemoveElement"
@@ -84,37 +64,64 @@
84
64
  </span>
85
65
  </template>
86
66
  <template #body="{ index }">
87
- <v-text-field
88
- v-model="block.metadata.config.items[index].title"
89
- :id="'item-' + index + '-title'"
90
- :label="
91
- $t(
92
- 'windward.core.components.settings.scenario_choice.item_title'
93
- )
94
- "
95
- ></v-text-field>
67
+ <v-container>
68
+ <v-text-field
69
+ v-model="
70
+ block.metadata.config.items[index].title
71
+ "
72
+ :id="'item-' + index + '-title'"
73
+ :label="
74
+ $t(
75
+ 'windward.core.components.settings.scenario_choice.item_title'
76
+ )
77
+ "
78
+ ></v-text-field>
96
79
 
97
- <v-switch
98
- v-model="block.metadata.config.items[index].correct"
99
- :label="
80
+ <v-switch
81
+ v-model="
82
+ block.metadata.config.items[index].correct
83
+ "
84
+ :label="
85
+ $t(
86
+ 'windward.core.components.settings.scenario_choice.correct_choice'
87
+ )
88
+ "
89
+ ></v-switch>
90
+
91
+ <span>{{
100
92
  $t(
101
- 'windward.core.components.settings.scenario_choice.correct_choice'
93
+ 'windward.core.components.settings.scenario_choice.item_text'
102
94
  )
103
- "
104
- ></v-switch>
105
-
106
- <span>{{
107
- $t(
108
- 'windward.core.components.settings.scenario_choice.item_text'
109
- )
110
- }}</span>
111
- <TextEditor
112
- v-model="block.metadata.config.items[index].body"
113
- :height="200"
114
- ></TextEditor>
95
+ }}</span>
96
+ <TextEditor
97
+ v-model="
98
+ block.metadata.config.items[index].body
99
+ "
100
+ :height="200"
101
+ ></TextEditor>
102
+ </v-container>
115
103
  </template>
116
104
  </SortableExpansionPanel>
117
105
  </v-col>
106
+ <v-row justify="center" class="my-4">
107
+ <v-btn
108
+ color="primary"
109
+ :disabled="block.metadata.config.items.length > 26"
110
+ @click="onAddElement"
111
+ >
112
+ <v-icon>mdi-plus</v-icon>
113
+ <span v-if="block.metadata.config.items.length <= 26">
114
+ {{ $t('shared.forms.add') }}
115
+ </span>
116
+ <span v-else>
117
+ {{
118
+ $t(
119
+ 'windward.core.components.settings.scenario_choice.over_item_limit'
120
+ )
121
+ }}
122
+ </span>
123
+ </v-btn>
124
+ </v-row>
118
125
  </v-container>
119
126
 
120
127
  <DialogBox
@@ -29,15 +29,17 @@
29
29
  "
30
30
  :placeholder="'item ' + (index + 1)"
31
31
  ></v-text-field>
32
- <v-btn @click="onToggleExpand(index)" class="mb-3">
32
+ <v-btn @click="onToggleExpand(index)" text class="mb-3">
33
33
  <v-icon
34
34
  v-if="
35
35
  !block.metadata.config.items[index].expand
36
36
  "
37
+ color="primary"
37
38
  >mdi-arrow-expand-all</v-icon
38
39
  >
39
40
  <v-icon
40
41
  v-if="block.metadata.config.items[index].expand"
42
+ color="primary"
41
43
  >
42
44
  mdi-arrow-collapse-all
43
45
  </v-icon>
@@ -2,37 +2,79 @@
2
2
  <div>
3
3
  <br />
4
4
  <v-card elevation="0">
5
- <v-btn-toggle v-model="settingSelector" multiple>
6
- <v-btn>
7
- <v-icon>mdi-comment-text-multiple</v-icon>
8
- {{
9
- $t(
10
- 'windward.core.components.settings.text_editor.glossary'
11
- )
12
- }}
13
- </v-btn>
14
- <v-btn>
15
- <v-icon> mdi-text-long</v-icon>
16
- {{
17
- $t(
18
- 'windward.core.components.settings.text_editor.Text_editor'
19
- )
20
- }}
21
- </v-btn>
22
- <v-btn
23
- v-if="settingSelector.includes(1)"
24
- @click="
25
- block.metadata.config.expand =
26
- !block.metadata.config.expand
27
- "
28
- >
29
- <v-icon v-if="!block.metadata.config.expand"
30
- >mdi-arrow-expand-all</v-icon
5
+ <v-btn-toggle v-model="settingSelector" multiple borderless>
6
+ <v-tooltip top>
7
+ <template #activator="{ on, attrs }">
8
+ <v-btn v-bind="attrs" v-on="on" text>
9
+ <v-icon>mdi-comment-text-multiple</v-icon>
10
+ {{
11
+ $t(
12
+ 'windward.core.components.settings.text_editor.glossary'
13
+ )
14
+ }}
15
+ </v-btn>
16
+ </template>
17
+ <span>
18
+ {{
19
+ $t(
20
+ 'windward.core.components.settings.text_editor.click_to_hide_glossary'
21
+ )
22
+ }}</span
23
+ >
24
+ </v-tooltip>
25
+
26
+ <v-tooltip top>
27
+ <template #activator="{ on, attrs }">
28
+ <v-btn v-bind="attrs" v-on="on" text>
29
+ <v-icon> mdi-text-long</v-icon>
30
+ {{
31
+ $t(
32
+ 'windward.core.components.settings.text_editor.text_editor'
33
+ )
34
+ }}
35
+ </v-btn>
36
+ </template>
37
+ <span>
38
+ {{
39
+ $t(
40
+ 'windward.core.components.settings.text_editor.click_to_hide_editor'
41
+ )
42
+ }}</span
43
+ >
44
+ </v-tooltip>
45
+
46
+ <v-tooltip top v-if="settingSelector.includes(1)">
47
+ <template #activator="{ on, attrs }">
48
+ <v-btn
49
+ v-bind="attrs"
50
+ v-on="on"
51
+ @click="
52
+ block.metadata.config.expand =
53
+ !block.metadata.config.expand
54
+ "
55
+ text
56
+ >
57
+ <v-icon
58
+ v-if="!block.metadata.config.expand"
59
+ color="primary"
60
+ >mdi-arrow-expand-all</v-icon
61
+ >
62
+ <v-icon
63
+ v-if="block.metadata.config.expand"
64
+ color="primary"
65
+ >
66
+ mdi-arrow-collapse-all
67
+ </v-icon>
68
+ </v-btn>
69
+ </template>
70
+ <span>
71
+ {{
72
+ $t(
73
+ 'windward.core.components.settings.text_editor.click_to_expand'
74
+ )
75
+ }}</span
31
76
  >
32
- <v-icon v-if="block.metadata.config.expand">
33
- mdi-arrow-collapse-all
34
- </v-icon>
35
- </v-btn>
77
+ </v-tooltip>
36
78
  </v-btn-toggle>
37
79
  <br />
38
80
  </v-card>
@@ -20,11 +20,11 @@
20
20
  $t('windward.core.components.settings.user_upload.accept_types')
21
21
  "
22
22
  ></v-select>
23
- <v-btn @click="onToggleExpand()" class="mt-4">
24
- <v-icon v-if="!block.metadata.config.expand"
23
+ <v-btn @click="onToggleExpand()" text class="mt-4">
24
+ <v-icon v-if="!block.metadata.config.expand" color="primary"
25
25
  >mdi-arrow-expand-all</v-icon
26
26
  >
27
- <v-icon v-if="block.metadata.config.expand">
27
+ <v-icon v-if="block.metadata.config.expand" color="primary">
28
28
  mdi-arrow-collapse-all
29
29
  </v-icon>
30
30
  </v-btn>
@@ -257,7 +257,7 @@
257
257
  <v-btn
258
258
  v-bind="attrs"
259
259
  v-on="on"
260
- outlined
260
+ text
261
261
  color="error"
262
262
  :disabled="
263
263
  block.metadata.config.playlist.length <= 1
@@ -287,7 +287,7 @@
287
287
  v-bind="attrs"
288
288
  v-on="on"
289
289
  color="primary"
290
- outlined
290
+ text
291
291
  @click="onAddPlaylistItem"
292
292
  >
293
293
  <v-icon>mdi-plus</v-icon>
@@ -34,17 +34,16 @@
34
34
  >
35
35
  <v-container>
36
36
  <div class="flex-wrap col-12">
37
- <v-btn
38
- :min-height="index < 4 ? 40 : 60"
37
+ <button
39
38
  v-for="(
40
39
  button, buttonIndex
41
40
  ) in keyboard.buttons"
42
41
  :key="buttonIndex"
43
42
  class="btn"
44
43
  @click="insert(button)"
45
- v-html="convertLatexToMarkup(button.text)"
44
+ v-html="'<strong>'+convertLatexToMarkup(button.text)+'</strong>'"
46
45
  >
47
- </v-btn>
46
+ </button>
48
47
  </div>
49
48
  </v-container>
50
49
  </v-tab-item>
@@ -134,7 +133,7 @@ export default {
134
133
  options: {
135
134
  smartFence: true,
136
135
  smartMode: false,
137
- virtualKeyboardMode: 'auto',
136
+ virtualKeyboardMode: 'none',
138
137
  keypressSound: 'none',
139
138
  plonkSound: 'none',
140
139
  readOnly: false,
@@ -10,13 +10,30 @@
10
10
  tag-name="div"
11
11
  model-events="change keydown blur focus mouseDown paste input submit SetContent"
12
12
  @onfocus="onEditorFocus"
13
+ v-click-outside="{
14
+ handler: onClickOutside,
15
+ include,
16
+ }"
13
17
  >
14
18
  </editor>
15
19
  </div>
20
+
16
21
  <v-btn-toggle dense multiple class="pt-1 d-flex justify-end">
17
- <v-btn v-if="render" color="primary" @click="onClickCollapse">{{
18
- $t('windward.core.components.utils.tiny_mce_wrapper.minimize')
19
- }}</v-btn>
22
+ <slot name="actions-prepend" :render="render"></slot>
23
+ <slot name="actions" :render="render">
24
+ <v-btn
25
+ v-if="render"
26
+ color="primary"
27
+ outlined
28
+ @click="onClickOutside"
29
+ >{{
30
+ $t(
31
+ 'windward.core.components.utils.tiny_mce_wrapper.minimize'
32
+ )
33
+ }}
34
+ </v-btn>
35
+ </slot>
36
+ <slot name="actions-append" :render="render"></slot>
20
37
  </v-btn-toggle>
21
38
  </div>
22
39
  </template>
@@ -45,9 +62,10 @@ export default {
45
62
  type: String,
46
63
  required: false,
47
64
  default:
48
- 'undo redo | formatselect | fontsizeselect | bold italic underline strikethrough removeformat | alignleft aligncenter alignright | table bullist numlist outdent indent | mathButton ',
65
+ 'undo redo | formatselect | fontsizeselect | bold italic underline strikethrough removeformat | alignleft aligncenter alignright | table bullist numlist outdent indent | glossaryButton fibButton mathButton ',
49
66
  },
50
67
  root_block: { type: String, required: false, default: 'div' },
68
+ label: { type: String, required: true, default: '' },
51
69
  },
52
70
  beforeMount() {
53
71
  this.text = this.value
@@ -90,6 +108,7 @@ export default {
90
108
  },
91
109
  config() {
92
110
  return {
111
+ draggable_modal: true,
93
112
  height: this.filteredHeight,
94
113
  visual: false,
95
114
  forced_root_block: this.root_block,
@@ -263,9 +282,11 @@ export default {
263
282
  },
264
283
  ],
265
284
  style_formats_merge: true,
266
- placeholder: this.$t(
267
- 'windward.core.shared.settings.title.placeholder'
268
- ),
285
+ placeholder: this.label
286
+ ? this.label
287
+ : this.$t(
288
+ 'windward.core.shared.settings.title.placeholder'
289
+ ),
269
290
  //required as it will be displayed as inline style in tinymce renderer
270
291
 
271
292
  skin: this.$vuetify.theme.isDark ? 'oxide-dark' : 'oxide',
@@ -292,12 +313,16 @@ export default {
292
313
  this.render = true
293
314
  }
294
315
  },
295
- onClickCollapse() {
316
+ onClickOutside() {
296
317
  if (this.render) {
297
318
  this.seed = Crypto.id()
298
319
  this.render = false
299
320
  }
300
321
  },
322
+ include() {
323
+ // vuetify function to include an element with this class into clickable area without close
324
+ return [document.querySelector('.included')]
325
+ },
301
326
  },
302
327
  }
303
328
  </script>
@@ -94,36 +94,45 @@
94
94
  <td>{{ item.related_term }}</td>
95
95
 
96
96
  <td>
97
- <v-btn
98
- class="primary"
99
- :disabled="
100
- !$PermissionService.userHasAccessTo(
101
- 'windward.global.course,windward.organization.course.contentBlock',
102
- 'writable'
103
- )
104
- "
105
- @click="editTerm(item)"
97
+ <SpeedDial
98
+ direction="left"
99
+ transition="slide-x-reverse-transition"
106
100
  >
107
- <v-icon small> mdi-pencil </v-icon>
108
- <span class="sr-only">{{
109
- $t('forms.edit')
110
- }}</span>
111
- </v-btn>
112
- <v-btn
113
- class="primary"
114
- :disabled="
115
- !$PermissionService.userHasAccessTo(
116
- 'windward.global.course,windward.organization.course.contentBlock',
117
- 'writable'
118
- )
119
- "
120
- @click="onDelete(item)"
121
- >
122
- <v-icon small> mdi-delete </v-icon>
123
- <span class="sr-only">{{
124
- $t('shared.forms.delete')
125
- }}</span>
126
- </v-btn>
101
+ <v-btn
102
+ color="error"
103
+ class="outlined"
104
+ outlined
105
+ :disabled="
106
+ !$PermissionService.userHasAccessTo(
107
+ 'windward.global.course,windward.organization.course.contentBlock',
108
+ 'writable'
109
+ )
110
+ "
111
+ @click="onDelete(item)"
112
+ >
113
+ {{ $t('shared.forms.delete') }}
114
+ <span class="sr-only">{{
115
+ $t('shared.forms.delete')
116
+ }}</span>
117
+ </v-btn>
118
+ <v-btn
119
+ color="primary"
120
+ class="outlined"
121
+ outlined
122
+ :disabled="
123
+ !$PermissionService.userHasAccessTo(
124
+ 'windward.global.course,windward.organization.course.contentBlock',
125
+ 'writable'
126
+ )
127
+ "
128
+ @click="editTerm(item)"
129
+ >
130
+ {{ $t('shared.forms.edit') }}
131
+ <span class="sr-only">{{
132
+ $t('forms.edit')
133
+ }}</span>
134
+ </v-btn>
135
+ </SpeedDial>
127
136
  </td>
128
137
  </tr>
129
138
  </template>
@@ -138,11 +147,12 @@ import { mapGetters, mapMutations } from 'vuex'
138
147
  import _ from 'lodash'
139
148
  import Crypto from '~/helpers/Crypto'
140
149
  import Course from '~/models/Course'
150
+ import SpeedDial from '~/components/SpeedDial.vue'
141
151
 
142
152
  import CourseGlossaryForm from './CourseGlossaryForm'
143
153
  export default {
144
154
  name: 'CourseGlossary',
145
- components: { CourseGlossaryForm },
155
+ components: { CourseGlossaryForm, SpeedDial },
146
156
  layout: 'course',
147
157
  middleware: ['auth'],
148
158
  props: {},
@@ -176,6 +186,11 @@ export default {
176
186
  sortable: true,
177
187
  value: 'related_term',
178
188
  },
189
+ {
190
+ text: this.$t('shared.forms.actions'),
191
+ value: 'actions',
192
+ sortable: false,
193
+ },
179
194
  ],
180
195
  dialog: false,
181
196
  editMode: false,
@@ -297,5 +312,3 @@ export default {
297
312
  },
298
313
  }
299
314
  </script>
300
-
301
- <!--<style scoped></style>-->
@@ -25,8 +25,9 @@ export default {
25
25
  text: 'i',
26
26
  },
27
27
  {
28
- cmd: false,
28
+ cmd: true,
29
29
  text: '\\pi',
30
+ latex: '\\pi',
30
31
  },
31
32
  {
32
33
  cmd: true,
@@ -12,8 +12,8 @@ const WindwardPlugins = function (editor: any) {
12
12
  return editor.windowManager.openUrl({
13
13
  url: '/plugins/tinymce/math',
14
14
  title: 'Equation editor',
15
- width: 1000,
16
- height: 900,
15
+ width: window.innerWidth*.50,
16
+ height: window.innerHeight*.75,
17
17
  buttons: [
18
18
  {
19
19
  type: 'cancel',
@@ -100,8 +100,8 @@ const WindwardPlugins = function (editor: any) {
100
100
  return editor.windowManager.openUrl({
101
101
  url: '/plugins/tinymce/FIB',
102
102
  title: 'Fill in the blank',
103
- width: 1024,
104
- height: 768,
103
+ width: window.innerWidth*.50,
104
+ height: window.innerHeight*.75,
105
105
  buttons: [
106
106
  {
107
107
  type: 'cancel',
@@ -152,6 +152,20 @@ const WindwardPlugins = function (editor: any) {
152
152
  'insertFIB',
153
153
  '<svg width="20px" height="20px" viewBox="0 0 24 24"><path d="M17,7H22V17H17V19A1,1 0 0,0 18,20H20V22H17.5C16.95,22 16,21.55 16,21C16,21.55 15.05,22 14.5,22H12V20H14A1,1 0 0,0 15,19V5A1,1 0 0,0 14,4H12V2H14.5C15.05,2 16,2.45 16,3C16,2.45 16.95,2 17.5,2H20V4H18A1,1 0 0,0 17,5V7M2,7H13V9H4V15H13V17H2V7M20,15V9H17V15H20Z" /></svg>'
154
154
  )
155
+
156
+ editor.ui.registry.addIcon(
157
+ 'glossaryIcon',
158
+ '<svg viewBox="0 0 24 24" width="20px" height="20px" ><path d="M3,15H1V3A2,2 0 0,1 3,1H19V3H3V15M12,23A1,1 0 0,1 11,22V19H7A2,2 0 0,1 5,17V7A2,2 0 0,1 7,5H21A2,2 0 0,1 23,7V17A2,2 0 0,1 21,19H16.9L13.2,22.71C13,22.89 12.76,23 12.5,23H12M9,9V11H19V9H9M9,13V15H17V13H9Z"></path></svg>'
159
+ )
160
+
161
+ /* Add a button that opens a window */
162
+ editor.ui.registry.addButton('glossaryButton', {
163
+ icon: 'glossaryIcon',
164
+ onAction: function () {
165
+ /* apply format */
166
+ editor.formatter.apply('glossary')
167
+ },
168
+ })
155
169
  /* Add a button that opens a window */
156
170
  editor.ui.registry.addButton('fibButton', {
157
171
  icon: 'insertFIB',
@@ -3,10 +3,12 @@ export default {
3
3
  from: 'From',
4
4
  to: 'To',
5
5
  cc: 'CC',
6
+ subject: 'Subject',
6
7
  body: 'Email Body',
7
8
  simulation: 'Email Simulation',
8
9
  reply: 'Reply',
9
10
  reply_all: 'Reply All',
10
11
  forward: 'Forward',
11
12
  reset: 'Reset',
13
+ email: 'Email',
12
14
  }
@@ -1,5 +1,6 @@
1
1
  export default {
2
2
  items: 'Accordion Items',
3
- add: 'Add Accordion',
3
+ add: 'Add Accordion Item',
4
4
  accordion: 'Accordion',
5
+ label: 'Accordion body text',
5
6
  }
@@ -6,4 +6,5 @@ export default {
6
6
  to: 'To',
7
7
  cc: 'CC',
8
8
  body: 'Email Body',
9
+ placeholder: 'Email body text',
9
10
  }
@@ -1,7 +1,10 @@
1
1
  export default {
2
2
  glossary: 'Glossary',
3
- Text_editor: 'Editor',
3
+ text_editor: 'Editor',
4
4
  verified_terms: 'verified terms',
5
5
  unverified_terms: 'unverified terms',
6
6
  no_glossary: 'No glossary Terms detected',
7
+ click_to_expand: 'Click to expand editor',
8
+ click_to_hide_editor: 'Click to hide editor',
9
+ click_to_hide_glossary: 'Click to hide glossary',
7
10
  }
@@ -3,10 +3,12 @@ export default {
3
3
  from: 'De',
4
4
  to: 'Para',
5
5
  cc: 'CC',
6
+ subject: 'Sujeto',
6
7
  body: 'Cuerpo del correo electrónico',
7
8
  simulation: 'Simulación de correo electrónico',
8
9
  reply: 'Responder',
9
10
  reply_all: 'Responder a todos',
10
11
  forward: 'Adelante',
11
12
  reset: 'reiniciar',
13
+ email: 'Correo Electrónico',
12
14
  }
@@ -1,5 +1,6 @@
1
1
  export default {
2
2
  items: 'Artículos de acordeón',
3
- add: 'Agregar Acordeón',
3
+ add: 'Añadir acordeón',
4
4
  accordion: 'Acordeón',
5
+ label: 'Texto del cuerpo del acordeón',
5
6
  }
@@ -6,4 +6,5 @@ export default {
6
6
  to: 'Para',
7
7
  cc: 'CC',
8
8
  body: 'Cuerpo del correo electrónico',
9
+ placeholder: 'Texto del cuerpo del correo electrónico',
9
10
  }