@capillarytech/creatives-library 3.0.3 → 3.0.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 (43) hide show
  1. package/assets/android-message-gui-2.svg +55 -0
  2. package/components/CallTaskPreview/_callTaskPreview.scss +17 -0
  3. package/components/CallTaskPreview/images/Footer.png +0 -0
  4. package/components/CallTaskPreview/images/Header.png +0 -0
  5. package/components/CallTaskPreview/index.js +37 -0
  6. package/components/CallTaskPreview/messages.js +13 -0
  7. package/components/CallTaskPreview/tests/index.test.js +15 -0
  8. package/components/CmsTemplatesComponent/index.js +33 -0
  9. package/components/CmsTemplatesComponent/messages.js +17 -0
  10. package/components/CmsTemplatesComponent/tests/index.test.js +10 -0
  11. package/components/EmailMobilePreview/index.js +129 -0
  12. package/components/EmailMobilePreview/index.scss +55 -0
  13. package/components/EmailPreviewV2/_emailPreviewV2.scss +69 -0
  14. package/components/EmailPreviewV2/index.js +132 -0
  15. package/components/EmailPreviewV2/messages.js +41 -0
  16. package/components/EmailPreviewV2/tests/index.test.js +10 -0
  17. package/components/MobilePushPreviewV2/index.js +120 -0
  18. package/components/MobilePushPreviewV2/messages.js +13 -0
  19. package/components/MobilePushPreviewV2/tests/index.test.js +10 -0
  20. package/components/NewCallTask/_newCallTask.scss +9 -0
  21. package/components/NewCallTask/index.js +152 -0
  22. package/components/NewCallTask/messages.js +29 -0
  23. package/components/NewCallTask/tests/index.test.js +10 -0
  24. package/components/SmsPreviewV2/_smsPreviewV2.scss +353 -0
  25. package/components/SmsPreviewV2/index.js +69 -0
  26. package/components/SmsPreviewV2/messages.js +13 -0
  27. package/components/SmsPreviewV2/tests/index.test.js +10 -0
  28. package/containers/Ebill/index.js +5 -4
  29. package/package.json +1 -1
  30. package/v2Components/FormBuilder/index.js +38 -35
  31. package/v2Components/NewCallTask/index.js +1 -1
  32. package/v2Components/NewCallTask/messages.js +1 -1
  33. package/v2Containers/Cap/index.js +1 -1
  34. package/v2Containers/Ebill/index.js +5 -5
  35. package/v2Containers/Email/index.js +3 -2
  36. package/v2Containers/Line/Create/index.js +6 -6
  37. package/v2Containers/Line/Edit/index.js +5 -5
  38. package/v2Containers/MobilePush/Create/index.js +36 -36
  39. package/v2Containers/MobilePush/Edit/index.js +6 -5
  40. package/v2Containers/MobilePush/initialSchema.js +3 -0
  41. package/v2Containers/Sms/Create/index.js +0 -2
  42. package/v2Containers/Sms/Edit/index.js +0 -2
  43. package/v2Containers/WeChat/MapTemplates/index.js +5 -6
@@ -0,0 +1,120 @@
1
+ /**
2
+ *
3
+ * PreviewSideBar
4
+ *
5
+ */
6
+
7
+ import PropTypes from 'prop-types';
8
+
9
+ import React from 'react';
10
+ import { CapButton } from '@capillarytech/cap-ui-library';
11
+ // import styled from 'styled-components';
12
+
13
+ import { FormattedMessage } from 'react-intl';
14
+ import { Button } from 'antd';
15
+ import { get, map, isEmpty} from 'lodash';
16
+ import TemplatePreview from '../TemplatePreview';
17
+ import '../PreviewSideBar/_previewsidebar.scss';
18
+ import messages from './messages';
19
+ const ButtonGroup = Button.Group;
20
+
21
+ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react/prefer-stateless-function
22
+ constructor(props) {
23
+ super(props);
24
+ this.goToEdit = this.goToEdit.bind(this);
25
+ this.goToDuplicate = this.goToDuplicate.bind(this);
26
+ this.changeDevice = this.changeDevice.bind(this);
27
+ const hasAndroid = get(props, 'templateData.versions.base.ANDROID') || get(props, 'templateData.androidContent');
28
+ const hasIos = get(props, 'templateData.versions.base.IOS') || get(props, 'templateData.iosContent');
29
+ let device = "android";
30
+ if (hasAndroid) {
31
+ device = 'android';
32
+ } else if (hasIos) {
33
+ device = 'ios';
34
+ }
35
+ this.state = {
36
+ device,
37
+ content: this.setContent(props.templateData, device),
38
+ };
39
+ }
40
+
41
+ setContent = (templateData, device) => {
42
+ const androidContent = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
43
+ const iosContent = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent');
44
+
45
+ const data = device === "android" ? androidContent : iosContent;
46
+ const content = {
47
+ header: data.title,
48
+ bodyText: data.message,
49
+ bodyImage: data.expandableDetails && data.expandableDetails.image,
50
+ actions: [],
51
+ appName: templateData.appName,
52
+ };
53
+ if (data.expandableDetails && data.expandableDetails.ctas && data.expandableDetails.ctas.length) {
54
+ if (device === "android" ) {
55
+ content.actions = map(data.expandableDetails.ctas, (cta) => ({label: cta.actionText}));
56
+ } else {
57
+ content.actions = [{label: data.expandableDetails.ctas[0].actionLabel}, {label: data.expandableDetails.ctas[0].actionLabel2}];
58
+ }
59
+ }
60
+ return content;
61
+ }
62
+ goToDuplicate() {
63
+ this.props.onDuplicateClick(this.props.templateData);
64
+ this.props.handleClose();
65
+ }
66
+ changeDevice(ev) {
67
+ const device = ev.target.value;
68
+ const content = this.setContent(this.props.templateData, device);
69
+ this.setState({device, content });
70
+ }
71
+ goToEdit(e, path) {
72
+ this.props.onEditClick(e, this.props.templateData._id, this.props.templateData.modeType, path);
73
+ }
74
+ render() {
75
+ const {templateData, channel} = this.props;
76
+
77
+ const hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
78
+ const hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent');
79
+
80
+ const {device, content} = this.state;
81
+
82
+ return (
83
+
84
+ <div>
85
+ <div className="devices">
86
+ {!isEmpty(templateData) && hasAndroid && hasIos &&
87
+ <ButtonGroup onClick={this.changeDevice}>
88
+ <CapButton type={device === "android" ? "primary" : "secondary"} value={"android"}>Android</CapButton>
89
+ <CapButton type={device === "iphone" ? "primary" : "secondary"} value={"iphone"}>IOS</CapButton>
90
+ </ButtonGroup>}
91
+ </div>
92
+ <TemplatePreview
93
+ device={device === "android" ? "android" : "iphone"}
94
+ channel={channel}
95
+ content={content || ''}
96
+ templateData={templateData}
97
+ >
98
+ </TemplatePreview>
99
+
100
+
101
+ </div>
102
+
103
+
104
+ );
105
+ }
106
+
107
+ }
108
+
109
+ MobilePushPreviewV2.propTypes = {
110
+ templateData: PropTypes.object.isRequired,
111
+ channel: PropTypes.string.isRequired,
112
+ showPreview: PropTypes.bool,
113
+ handleClose: PropTypes.func,
114
+ onEditClick: PropTypes.func,
115
+ onDuplicateClick: PropTypes.func,
116
+ location: PropTypes.object,
117
+ embedded: PropTypes.bool,
118
+ };
119
+
120
+ export default MobilePushPreviewV2;
@@ -0,0 +1,13 @@
1
+ /*
2
+ * MobilePushPreviewV2 Messages
3
+ *
4
+ * This contains all the text for the MobilePushPreviewV2 component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.components.MobilePushPreviewV2.header',
11
+ defaultMessage: 'This is the MobilePushPreviewV2 component !',
12
+ },
13
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import MobilePushPreviewV2 from '../index';
5
+
6
+ describe('<MobilePushPreviewV2 />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,9 @@
1
+ .new-call-task-done-button {
2
+ margin-top: 24px;
3
+ }
4
+
5
+ .new-call-task-tagList {
6
+ position: absolute;
7
+ right: 0;
8
+ top: -10px;
9
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ *
3
+ * NewCallTask
4
+ *
5
+ */
6
+
7
+ import React from 'react';
8
+ import PropTypes from 'prop-types';
9
+ import { CapRow, CapColumn, CapInput, CapButton, CapSpin } from '@capillarytech/cap-ui-library';
10
+ import { injectIntl, intlShape } from 'react-intl';
11
+ import TagList from '../../containers/TagList';
12
+ import CallTaskPreview from '../CallTaskPreview';
13
+ import messages from './messages';
14
+ import './_newCallTask.scss';
15
+
16
+ class NewCallTask extends React.Component { // eslint-disable-line react/prefer-stateless-function
17
+ constructor(props) {
18
+ super(props);
19
+ this.state = this.getInitialState();
20
+ }
21
+
22
+ getInitialState = () => {
23
+ const { templateData } = this.props;
24
+ return {
25
+ subject: templateData && templateData.subject ? templateData.subject : '',
26
+ messageBody: templateData && templateData.messageBody ? templateData.messageBody : '',
27
+ description: templateData && templateData.description ? templateData.description : '',
28
+ };
29
+ }
30
+
31
+ onTagSelect = (data) => {
32
+ this.insertAtCursor(`{{${data}}}`);
33
+ }
34
+
35
+ setInputRef = (textarea) => {
36
+ this.textArea = textarea;
37
+ }
38
+
39
+ insertAtCursor = (myValue) => {
40
+ this.textArea.focus();
41
+ const textAreaRef = this.textArea.textAreaRef;
42
+ let pos = textAreaRef.selectionEnd + myValue.length;
43
+ //IE support
44
+ let newMessage = textAreaRef.value + myValue;
45
+ if (document.selection) {
46
+ this.textArea.focus();
47
+ const sel = document.selection.createRange();
48
+ sel.text = myValue;
49
+ } else if (textAreaRef.selectionStart || textAreaRef.selectionStart === '0') { //MOZILLA and others
50
+ const startPos = textAreaRef.selectionStart;
51
+ const endPos = textAreaRef.selectionEnd;
52
+ newMessage = textAreaRef.value.substring(0, startPos) + myValue + textAreaRef.value.substring(endPos, textAreaRef.value.length);
53
+ pos = startPos + myValue.length;
54
+ }
55
+ this.setState({
56
+ messageBody: newMessage,
57
+ }, () => {
58
+ textAreaRef.selectionStart = pos;
59
+ textAreaRef.selectionEnd = pos;
60
+ });
61
+ };
62
+
63
+ updateSubject = (e) => {
64
+ this.setState({
65
+ subject: e.target.value,
66
+ });
67
+ }
68
+
69
+ updateMessageBody = (e) => {
70
+ this.setState({
71
+ messageBody: e.target.value,
72
+ });
73
+ }
74
+
75
+ updateDescription = (e) => {
76
+ this.setState({
77
+ description: e.target.value,
78
+ });
79
+ }
80
+
81
+ submitForm = () => {
82
+ this.props.onCallTaskSubmit(this.state);
83
+ }
84
+
85
+ render() {
86
+ const { intl, isLoading, metaEntities } = this.props;
87
+ const { formatMessage } = intl;
88
+ const { subject, messageBody, description } = this.state;
89
+ const tags = metaEntities && metaEntities.tags ? metaEntities.tags.standard : [];
90
+ return (
91
+ <CapSpin spinning={isLoading}>
92
+ <CapRow gutter={16}>
93
+ <CapColumn span={12}>
94
+ <div style={{ height: 'calc(100vh - 187px)', overflowY: 'auto', paddingRight: "8px" }}>
95
+ <div style={{ marginBottom: '34px' }}>
96
+ <CapInput
97
+ label={formatMessage(messages.callTaskTitle)}
98
+ onChange={this.updateSubject}
99
+ value={subject}
100
+ isRequired
101
+ />
102
+ </div>
103
+ <div style={{ position: 'relative', marginBottom: '34px' }}>
104
+ <TagList
105
+ className="new-call-task-tagList"
106
+ label={formatMessage(messages.personalisationTags)}
107
+ tags={tags}
108
+ onTagSelect={this.onTagSelect}
109
+ />
110
+ <CapInput.TextArea
111
+ setInputRef={this.setInputRef}
112
+ label={formatMessage(messages.messageHeader)}
113
+ onChange={this.updateMessageBody}
114
+ value={messageBody}
115
+ isRequired
116
+ />
117
+ </div>
118
+ <CapInput.TextArea
119
+ label={formatMessage(messages.description)}
120
+ onChange={this.updateDescription}
121
+ value={description}
122
+ isRequired
123
+ />
124
+ </div>
125
+ <CapButton
126
+ disabled={!subject || !messageBody || !description}
127
+ className="new-call-task-done-button"
128
+ onClick={this.submitForm}>
129
+ {formatMessage(messages.done)}
130
+ </CapButton>
131
+ </CapColumn>
132
+ <CapColumn span={12}>
133
+ <CallTaskPreview
134
+ subject={subject}
135
+ messageBody={messageBody}
136
+ />
137
+ </CapColumn>
138
+ </CapRow>
139
+ </CapSpin>
140
+ );
141
+ }
142
+ }
143
+
144
+ NewCallTask.propTypes = {
145
+ intl: intlShape.isRequired,
146
+ onCallTaskSubmit: PropTypes.func,
147
+ templateData: PropTypes.object,
148
+ isLoading: PropTypes.bool,
149
+ metaEntities: PropTypes.object,
150
+ };
151
+
152
+ export default injectIntl(NewCallTask);
@@ -0,0 +1,29 @@
1
+ /*
2
+ * NewCallTask Messages
3
+ *
4
+ * This contains all the text for the NewCallTask component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ callTaskTitle: {
10
+ id: 'app.components.NewCallTask.callTaskTitle',
11
+ defaultMessage: 'Call Task title',
12
+ },
13
+ messageHeader: {
14
+ id: 'app.components.NewCallTask.messageHeader',
15
+ defaultMessage: 'Message',
16
+ },
17
+ description: {
18
+ id: 'app.components.NewCallTask.description',
19
+ defaultMessage: 'Description',
20
+ },
21
+ done: {
22
+ id: 'app.components.NewCallTask.done',
23
+ defaultMessage: 'Done',
24
+ },
25
+ personalisationTags: {
26
+ id: 'app.components.NewCallTask.personalisationTags',
27
+ defaultMessage: 'Personalisation tags',
28
+ },
29
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import NewCallTask from '../index';
5
+
6
+ describe('<NewCallTask />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(false).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,353 @@
1
+ .shell {
2
+ position: relative;
3
+ -webkit-transform: translate(-50%);
4
+ transform: translate(-50%);
5
+ left: 50%;
6
+ padding: 0 10px;
7
+ width: 450px;
8
+
9
+ .preview-image {
10
+ width: 51%;
11
+ &.sms {
12
+ width: 45%;
13
+ }
14
+ }
15
+
16
+ .msgContainer {
17
+ position: absolute;
18
+ top: 18%;
19
+ left: 28.8%;
20
+ width: 42%;
21
+ height: 336px;
22
+ display: -webkit-box;
23
+ display: -ms-flexbox;
24
+ display: flex;
25
+
26
+ .sms-icon{
27
+ top: 0;
28
+ left: 2px;
29
+ width: 25px;
30
+ position: absolute;
31
+ }
32
+ &.sms{
33
+ height: 290px;
34
+ width: 40%;
35
+ .sms-icon{
36
+ width: 20px;
37
+ left: 14px;
38
+ }
39
+ }
40
+
41
+ .message-pop{
42
+ .unicode-disabled{
43
+ font-size: 16px;
44
+ }
45
+ &.sms {
46
+ max-height: 100%;
47
+ position: absolute;
48
+ // width: initial;
49
+ overflow: auto;
50
+ top: 0;
51
+ left: 17%;
52
+ white-space: pre-wrap;
53
+ word-break: break-word;
54
+ line-height: 14px;
55
+ padding: 0 8px 8px 8px;
56
+ font-size: 10px;
57
+ width: 80%;
58
+ font-family: 'open-sans';
59
+ .message-pop-item{
60
+ padding: 4px;
61
+ background: #3F51B5;
62
+ color: #FFFFFF;
63
+ margin-top: 8px;
64
+ border-radius: 4px;
65
+ min-height: 26px;
66
+ &:first-child{
67
+ margin-top: 0;
68
+ }
69
+ }
70
+ }
71
+ &:not(.sms){
72
+ padding: 4px;
73
+ background: #3F51B5;
74
+ position: absolute;
75
+ // width: initial;
76
+ overflow: auto;
77
+ top: 0;
78
+ left: 17%;
79
+ white-space: pre-wrap;
80
+ word-break: break-word;
81
+ border-radius: 4px;
82
+ max-height: 100%;
83
+ color: #FFFFFF;
84
+ width: 70%;
85
+ min-height: 26px;
86
+ line-height: 14px;
87
+ padding: 8px;
88
+ font-size: 10px;
89
+ font-family: 'open-sans';
90
+ }
91
+ }
92
+ }
93
+ .android-push-message-Container, .iphone-push-message-Container{
94
+ position: absolute;
95
+ top: 11%;
96
+ left: 28.8%;
97
+ width: 42%;
98
+ height: 336px;
99
+ overflow: auto;
100
+ display: -webkit-box;
101
+ display: -ms-flexbox;
102
+ display: flex;
103
+ .message-pop{
104
+ position: absolute;
105
+ // width: initial;
106
+ overflow: auto;
107
+ word-wrap: break-word;
108
+ white-space: pre-wrap;
109
+ border-top-left-radius: 4px;
110
+ border-top-right-radius: 4px;
111
+ max-height: 100%;
112
+ width: 100%;
113
+ min-height: 26px;
114
+ line-height: 15px;
115
+ font-size: 10px;
116
+ .body-image{
117
+ img{
118
+ max-width: 100%;
119
+ max-height: 90px;
120
+ margin: auto;
121
+ display: block;
122
+ }
123
+ }
124
+ }
125
+ }
126
+ .android-push-message-Container{
127
+ .title, .body-text, .body-image, .app-name{
128
+ background-color: #FFFFFF;
129
+ color: #333333;
130
+ }
131
+ .app-name{
132
+ color: #5D5D5D;
133
+ font-weight: 600;
134
+ padding: 8px 8px 4px 8px;
135
+ }
136
+ .title, .body-image{
137
+ padding: 0 8px 0 8px;
138
+
139
+ }
140
+ .body-text{
141
+ padding: 0 8px 4px 8px;
142
+ color: #5a5959;
143
+ }
144
+ .title{
145
+ overflow: hidden;
146
+ white-space: nowrap;
147
+ text-overflow: ellipsis;
148
+ }
149
+ .actions{
150
+ background-color: #EEEEEE;
151
+ height: 32px;
152
+ padding: 4px;
153
+ .action{
154
+ line-height: 24px;
155
+ font-size: 10px;
156
+ font-weight: 600;
157
+ color: #1970DA;
158
+ height: 12px;
159
+ margin-left: 8px;
160
+ }
161
+ }
162
+ }
163
+ .iphone-push-message-Container{
164
+ top: 8%;
165
+ .message-pop{
166
+ border-radius: 4px;
167
+ word-wrap: break-word;
168
+ }
169
+ .title, .body-text, .body-image, .app-name{
170
+ background-color: #FFFFFF;
171
+ color: #333333;
172
+ }
173
+ .body-image{
174
+ padding-top: 8px;
175
+ }
176
+ .title{
177
+ overflow: hidden;
178
+ white-space: nowrap;
179
+ text-overflow: ellipsis;
180
+ }
181
+ .app-name{
182
+ padding: 8px;
183
+ color: #5D5D5D;
184
+ border-bottom: solid 1px #D6D6D6;
185
+ .material-icons{
186
+ font-size: 12px;
187
+ float: right;
188
+ }
189
+ }
190
+ .title, .body-text{
191
+ padding: 4px;
192
+ }
193
+ .title{
194
+ overflow: hidden;
195
+ white-space: nowrap;
196
+ text-overflow: ellipsis;
197
+ }
198
+ .body-text{
199
+ border-bottom-left-radius: 4px;
200
+ border-bottom-right-radius: 4px;
201
+ }
202
+ .actions{
203
+ background-color: #FFFFFF;
204
+ opacity: 0.8;
205
+ height: 32px;
206
+ line-height: 26px;
207
+ margin-top: 4px;
208
+ border-radius: 6px;
209
+ text-align: center;
210
+ padding: 4px;
211
+ .action{
212
+ font-size: 12px;
213
+ font-weight: 600;
214
+ color: #000000;
215
+ text-align: center;
216
+ margin-left: 8px;
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ .align-center {
223
+ text-align: center;
224
+ }
225
+
226
+ .align-left {
227
+ text-align: left;
228
+ }
229
+
230
+ .preview-container{
231
+ .preview-info {
232
+ // font-family: 'proxima-nova';
233
+ font-weight: 600;
234
+ font-size: 16px;
235
+ text-align: center;
236
+ }
237
+ }
238
+
239
+ .preview-container.embedded-preview{
240
+ .preview-image {
241
+ width: 38% !important;
242
+ }
243
+ .message-pop{
244
+ left: 21% !important;
245
+ width: 67% !important;
246
+ }
247
+ .sms-icon{
248
+ left: 12% !important;
249
+ }
250
+ }
251
+
252
+
253
+
254
+ #slidebox-container {
255
+ left: 60vw;
256
+ width: 40vw;
257
+
258
+ .shell {
259
+ position: relative;
260
+ -webkit-transform: translate(-50%);
261
+ transform: translate(-50%);
262
+ left: 50%;
263
+ padding: 0 10px;
264
+ width: initial;
265
+
266
+ .preview-image {
267
+ &.sms{
268
+ width: 45%;
269
+ }
270
+ }
271
+
272
+
273
+ .msgContainer {
274
+ position: absolute;
275
+ top: 14%;
276
+ left: 29%;
277
+ width: 42%;
278
+ height: 275px;
279
+ display: -webkit-box;
280
+ display: -ms-flexbox;
281
+ display: flex;
282
+
283
+ .sms-icon{
284
+ top: 6%;
285
+ left: 2%;
286
+ width: 12%;
287
+ position: absolute;
288
+ }
289
+
290
+ &.sms{
291
+ height: 290px;
292
+ width: 40%;
293
+ top: 16%;
294
+ .sms-icon{
295
+ left: 7%;
296
+ }
297
+ }
298
+ .message-pop{
299
+ &.sms {
300
+ max-height: 100%;
301
+ position: absolute;
302
+ // width: initial;
303
+ overflow: auto;
304
+ top: 6%;
305
+ left: 17%;
306
+ width: 80%;
307
+ white-space: pre-wrap;
308
+ word-break: break-word;
309
+ line-height: 14px;
310
+ padding: 0 8px 8px 8px;
311
+ font-size: 10px;
312
+ font-family: 'open-sans';
313
+ .message-pop-item{
314
+ padding: 8px;
315
+ background: #3F51B5;
316
+ color: #FFFFFF;
317
+ margin-top: 8px;
318
+ border-radius: 4px;
319
+ min-height: 26px;
320
+ &:first-child{
321
+ margin-top: 0;
322
+ }
323
+ }
324
+ }
325
+ &:not(.sms){
326
+ padding: 8px 8px;
327
+ background: #3F51B5;
328
+ position: absolute;
329
+ width: 65%;
330
+ top: 15%;
331
+ left: 19%;
332
+ word-break: break-all;
333
+ border-radius: 6px;
334
+ max-height: 100%;
335
+ overflow: auto;
336
+ color: #FFFFFF;
337
+ line-height: 14px;
338
+ font-family: "open-sans";
339
+ font-size: 10px;
340
+ }
341
+ }
342
+ }
343
+ }
344
+ }
345
+ .app-icon{
346
+ width: 10px;
347
+ height: 10px;
348
+ opacity: 1;
349
+ display: inline-block;
350
+ background-color: #333333;
351
+ margin-right: 4px;
352
+ }
353
+