@vixoniccom/news-internal 0.4.21-dev.3 → 0.4.21-dev.31

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.
@@ -37,30 +37,6 @@
37
37
  "qrCodeUrl": "https://vixonic.com/",
38
38
  "qrCodeTitle": "Entra a Vixonic",
39
39
  "expirationDate": ""
40
- },
41
- {
42
- "$$hashKey": "object:583",
43
- "description": "Miau",
44
- "image": {
45
- "__type": "kna-resource",
46
- "filename": "cat.jpg"
47
- },
48
- "title": "Gato",
49
- "qrCodeUrl": "https://vixonic.com/",
50
- "qrCodeTitle": "Entra a Vixonic",
51
- "expirationDate": ""
52
- },
53
- {
54
- "$$hashKey": "object:653",
55
- "description": "Guau",
56
- "image": {
57
- "__type": "kna-resource",
58
- "filename": "dog.jpg"
59
- },
60
- "title": "Perro",
61
- "qrCodeUrl": "https://mandomedio.com/",
62
- "qrCodeTitle": "Entra a Mandomedio",
63
- "expirationDate": "2026-05-30"
64
40
  }
65
41
  ],
66
42
  "padding": "25px 80px 120px 20px",
@@ -91,6 +67,19 @@
91
67
  },
92
68
  "fontColor": "#336699",
93
69
  "fontSize": "36"
94
- }
70
+ },
71
+ "defaultMessageFormat": {
72
+ "font": {
73
+ "id": "7953953c-7029-4730-ae4d-cff4abd5288f",
74
+ "filename": "7953953c-7029-4730-ae4d-cff4abd5288f.ttf",
75
+ "__isAsset": true
76
+ },
77
+ "fontSize": 3.8,
78
+ "alignment": {
79
+ "horizontal": "left"
80
+ },
81
+ "fontColor": "#585858"
82
+ },
83
+ "defaultMessage": "No hay noticias disponibles en este momento."
95
84
  }
96
85
  }
package/build.zip CHANGED
Binary file
@@ -1,5 +1,5 @@
1
1
  import { Label, SelectInput, NumberInput } from '@vixoniccom/modules'
2
- import { NumberRangeValue, Slider } from '@vixoniccom/modules/dist/lib'
2
+ import { NumberRangeValue, Slider, TextFormat, TextInput } from '@vixoniccom/modules/dist/lib'
3
3
 
4
4
  export const generalInputs = [
5
5
  new Label({ label: 'General' }),
@@ -51,5 +51,7 @@ export const generalInputs = [
51
51
  { label: 'Distribuidos', value: 'space-around' },
52
52
  { label: 'Separados', value: 'space-between' }
53
53
  ]
54
- })
54
+ }),
55
+ new TextInput({ id: 'defaultMessage', label: 'Mensaje sin noticias', description: 'Mensaje a mostrar cuando no existen noticias o han caducado' }),
56
+ new TextFormat({ id: 'defaultMessageFormat', label: 'Formato del mensaje sin noticias' }),
55
57
  ]
@@ -1,4 +1,4 @@
1
- import { List } from '@vixoniccom/modules'
1
+ import { List, NumberRangeValue } from '@vixoniccom/modules'
2
2
  import { newsInputs } from './newsInputs'
3
3
 
4
4
  export const newsGroup = new List({
@@ -7,6 +7,7 @@ export const newsGroup = new List({
7
7
  description: 'Lista de noticias',
8
8
  sortable: true,
9
9
  itemSchema: [...newsInputs],
10
+ range: new NumberRangeValue(1, 200),
10
11
  itemDisplayClass: '2-lines',
11
12
  itemDisplayAttributes: {
12
13
  title: 'title',
@@ -3,7 +3,7 @@ import { ShowValidations } from '../utils'
3
3
 
4
4
  export const newsInputs = [
5
5
  new TextInput({
6
- id: 'title',
6
+ id: 'titleShort',
7
7
  label: 'Título corto',
8
8
  required: true,
9
9
  show: ShowValidations.shortTitleEnabled,
@@ -11,7 +11,7 @@ export const newsInputs = [
11
11
  pattern: '^(?!\\s*$).+',
12
12
  }),
13
13
  new TextInput({
14
- id: 'title',
14
+ id: 'titleMedium',
15
15
  label: 'Título mediano',
16
16
  required: true,
17
17
  show: ShowValidations.mediumTitleEnabled,
@@ -19,7 +19,7 @@ export const newsInputs = [
19
19
  pattern: '^(?!\\s*$).+',
20
20
  }),
21
21
  new TextInput({
22
- id: 'title',
22
+ id: 'titleLarge',
23
23
  label: 'Título largo',
24
24
  required: true,
25
25
  show: ShowValidations.largeTitleEnabled,
@@ -28,7 +28,7 @@ export const newsInputs = [
28
28
  }),
29
29
 
30
30
  new TextInput({
31
- id: 'title',
31
+ id: 'titleExtraLarge',
32
32
  label: 'Título extra largo',
33
33
  required: true,
34
34
  show: ShowValidations.extraLargeTitleEnabled,
@@ -37,7 +37,7 @@ export const newsInputs = [
37
37
  }),
38
38
 
39
39
  new TextArea({
40
- id: 'description',
40
+ id: 'descriptionShort',
41
41
  label: 'Descripción corta',
42
42
  required: true,
43
43
  show: ShowValidations.shortDescriptionEnabled,
@@ -47,7 +47,7 @@ export const newsInputs = [
47
47
  }),
48
48
 
49
49
  new TextArea({
50
- id: 'description',
50
+ id: 'descriptionMedium',
51
51
  label: 'Descripción mediana',
52
52
  required: true,
53
53
  show: ShowValidations.mediumDescriptionEnabled,
@@ -57,7 +57,7 @@ export const newsInputs = [
57
57
  }),
58
58
 
59
59
  new TextArea({
60
- id: 'description',
60
+ id: 'descriptionLarge',
61
61
  label: 'Descripción larga',
62
62
  required: true,
63
63
  show: ShowValidations.largeDescriptionEnabled,
@@ -67,7 +67,7 @@ export const newsInputs = [
67
67
  }),
68
68
 
69
69
  new TextArea({
70
- id: 'description',
70
+ id: 'descriptionExtraLarge',
71
71
  label: 'Descripción extra larga',
72
72
  required: true,
73
73
  show: ShowValidations.extraLargeDescriptionEnabled,
@@ -7,7 +7,7 @@
7
7
  "type": "list",
8
8
  "itemSchema": [
9
9
  {
10
- "id": "title",
10
+ "id": "titleShort",
11
11
  "label": "Título corto",
12
12
  "show": "{{titleEnabled}} === true && ({{newsSizeSelect}} === 'short')",
13
13
  "type": "text-input",
@@ -16,7 +16,7 @@
16
16
  "range": "[1:25]"
17
17
  },
18
18
  {
19
- "id": "title",
19
+ "id": "titleMedium",
20
20
  "label": "Título mediano",
21
21
  "show": "{{titleEnabled}} === true && ({{newsSizeSelect}} === 'medium')",
22
22
  "type": "text-input",
@@ -25,7 +25,7 @@
25
25
  "range": "[1:40]"
26
26
  },
27
27
  {
28
- "id": "title",
28
+ "id": "titleLarge",
29
29
  "label": "Título largo",
30
30
  "show": "{{titleEnabled}} === true && ({{newsSizeSelect}} === 'large')",
31
31
  "type": "text-input",
@@ -34,7 +34,7 @@
34
34
  "range": "[1:50]"
35
35
  },
36
36
  {
37
- "id": "title",
37
+ "id": "titleExtraLarge",
38
38
  "label": "Título extra largo",
39
39
  "show": "{{titleEnabled}} === true && ({{newsSizeSelect}} === 'extra-large')",
40
40
  "type": "text-input",
@@ -43,7 +43,7 @@
43
43
  "range": "[1:70]"
44
44
  },
45
45
  {
46
- "id": "description",
46
+ "id": "descriptionShort",
47
47
  "label": "Descripción corta",
48
48
  "show": "{{descriptionEnabled}} === true && ({{newsSizeSelect}} === 'short')",
49
49
  "type": "text-area",
@@ -53,7 +53,7 @@
53
53
  "html": true
54
54
  },
55
55
  {
56
- "id": "description",
56
+ "id": "descriptionMedium",
57
57
  "label": "Descripción mediana",
58
58
  "show": "{{descriptionEnabled}} === true && ({{newsSizeSelect}} === 'medium')",
59
59
  "type": "text-area",
@@ -63,7 +63,7 @@
63
63
  "html": true
64
64
  },
65
65
  {
66
- "id": "description",
66
+ "id": "descriptionLarge",
67
67
  "label": "Descripción larga",
68
68
  "show": "{{descriptionEnabled}} === true && ({{newsSizeSelect}} === 'large')",
69
69
  "type": "text-area",
@@ -73,7 +73,7 @@
73
73
  "html": true
74
74
  },
75
75
  {
76
- "id": "description",
76
+ "id": "descriptionExtraLarge",
77
77
  "label": "Descripción extra larga",
78
78
  "show": "{{descriptionEnabled}} === true && ({{newsSizeSelect}} === 'extra-large')",
79
79
  "type": "text-area",
@@ -119,6 +119,7 @@
119
119
  }
120
120
  ],
121
121
  "description": "Lista de noticias",
122
+ "range": "[1:200]",
122
123
  "itemDisplayClass": "2-lines",
123
124
  "itemDisplayAttributes": {
124
125
  "title": "title",
@@ -250,6 +251,16 @@
250
251
  "required": true,
251
252
  "defaultValue": "center"
252
253
  },
254
+ {
255
+ "id": "defaultMessage",
256
+ "label": "Sin noticias",
257
+ "type": "text-input"
258
+ },
259
+ {
260
+ "id": "defaultMessageFormat",
261
+ "label": "Formato mensaje sin noticias",
262
+ "type": "text-format"
263
+ },
253
264
  {
254
265
  "type": "label",
255
266
  "label": "Elementos"
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "author": {
9
9
  "name": ""
10
10
  },
11
- "version": "0.4.21-dev.3",
11
+ "version": "0.4.21-dev.31",
12
12
  "scripts": {
13
13
  "prepublish": "vixonic-module-packager --mode=build",
14
14
  "watch": "vixonic-module-packager --mode=watch",
@@ -36,7 +36,7 @@
36
36
  "@types/react-transition-group": "^4.4.12",
37
37
  "@types/uuid": "^9.0.1",
38
38
  "@vixoniccom/module-packager": "^2.13.0-dev.1",
39
- "@vixoniccom/modules": "^2.22.0-dev.3",
39
+ "@vixoniccom/modules": "^2.25.0-dev.13",
40
40
  "standard-version": "^9.5.0"
41
41
  }
42
42
  }
@@ -10,16 +10,37 @@ export type Props = {
10
10
 
11
11
  export const App: React.FunctionComponent<Props> = ({ data }) => {
12
12
  const [news, setNews] = useState<NewsItem[]>([])
13
+
14
+ const getPrefixBySize = (n: any, size: string, prefix: string): string => {
15
+ const prefixMap: { [key: string]: string } = {
16
+ 'short': n[`${prefix}Short`],
17
+ 'medium': n[`${prefix}Medium`],
18
+ 'large': n[`${prefix}Large`],
19
+ 'extra-large': n[`${prefix}ExtraLarge`]
20
+ }
21
+ return prefixMap[size] || n[`${prefix}Medium`] || ''
22
+ }
13
23
 
14
24
  const parseNews = (data?: VixonicData): NewsItem[] => {
15
25
  if (!data) return []
16
- const { news } = data.parameters
26
+ const { news, newsSizeSelect } = data.parameters
17
27
  const parsedNews = news?.map((n) => {
18
28
  const { image, ...rest } = n
19
29
  let parsedImage
20
30
  const qrUrl = n.qrCodeUrl
21
31
  if (image?.filename) parsedImage = `${data.downloadsPath}/${image.filename}`
22
- return { ...rest, image: parsedImage, id: uuid(), qrCodeUrl: qrUrl }
32
+
33
+ let title = getPrefixBySize(n, newsSizeSelect ?? 'medium', 'title')
34
+ let description = getPrefixBySize(n, newsSizeSelect ?? 'medium', 'description')
35
+
36
+ return {
37
+ ...rest,
38
+ title,
39
+ description,
40
+ image: parsedImage,
41
+ id: uuid(),
42
+ qrCodeUrl: qrUrl
43
+ }
23
44
  }).filter((n) => {
24
45
  const { expirationDate } = n
25
46
  const today = dayjs()
@@ -17,6 +17,7 @@ export const FontLoader: React.FunctionComponent<Props<any>> = (props) => {
17
17
  src: url("${parseFontUrl(props.downloadPath, font)}");
18
18
  }`
19
19
  } catch (err) {
20
+ console.error('Error loading font:', font, err)
20
21
  return ''
21
22
  }
22
23
  })
@@ -47,8 +47,8 @@ export const FormattedText: React.FunctionComponent<Props> = (props) => {
47
47
 
48
48
  const getHorizontalAlignment = (alignment: Aligment) => {
49
49
  if (alignment) {
50
- const hA = alignment.horizontal
51
- return alignments.hasOwnProperty(hA) ? alignments[alignment.horizontal] : 'flex-start'
50
+ const hA = alignment?.horizontal
51
+ return alignments.hasOwnProperty(hA) ? alignments[alignment?.horizontal] : 'flex-start'
52
52
  }
53
53
  return 'flex-start'
54
54
  }
@@ -79,9 +79,4 @@ export const FormattedText: React.FunctionComponent<Props> = (props) => {
79
79
  )
80
80
  }
81
81
 
82
- FormattedText.defaultProps = {
83
- format: {},
84
- lineHeight: 1,
85
- unit: 'vh',
86
- maxChar: undefined,
87
- }
82
+
@@ -4,6 +4,7 @@ import { StandardItem } from '../StandardItem'
4
4
  import { GalleryItem } from '../GalleryItem'
5
5
  import { GradientItem } from '../GradientItem'
6
6
  import './styles.css'
7
+ import { FormattedText } from '../FormattedText'
7
8
 
8
9
  type Props = {
9
10
  data: VixonicData
@@ -12,7 +13,7 @@ type Props = {
12
13
 
13
14
  export const NewsContainer: React.FunctionComponent<Props> = (props) => {
14
15
  const { parameters, downloadsPath } = props.data
15
- const { animationSpeed } = parameters
16
+ const { animationSpeed, defaultMessage } = parameters
16
17
  const timerRef = useRef<number | undefined>(undefined)
17
18
  const [currentIndex, setCurrentIndex] = useState(0)
18
19
  const item = props.items.length > currentIndex ? props.items[currentIndex] : undefined
@@ -25,7 +26,7 @@ export const NewsContainer: React.FunctionComponent<Props> = (props) => {
25
26
  }, [currentIndex, props.items])
26
27
 
27
28
  const startTimeout = () => {
28
- const showTime = props.data?.parameters?.showTime || 10
29
+ const showTime = props.data?.parameters?.showTime ?? 10
29
30
  const time = showTime * 1000
30
31
  timerRef.current = window.setTimeout(nextItem, time)
31
32
  }
@@ -36,36 +37,53 @@ export const NewsContainer: React.FunctionComponent<Props> = (props) => {
36
37
  setCurrentIndex(newIndex)
37
38
  }
38
39
 
39
- if (parameters.template === 'gradient') {
40
- return <TransitionGroup className='main-container' style={{
41
- backgroundColor: parameters.gradientBackgroundColor || 'red'
42
- }}>
43
- {item &&
44
- <CSSTransition key={item.id} classNames={parameters.animationType || 'fade'} timeout={(1750 / (animationSpeed || 1)) * 2}>
45
- <div className={'news-item-container'}>
46
- {
47
- <GradientItem parameters={parameters} item={item} />
48
- }
49
- </div>
50
- </CSSTransition>
51
- }
52
- </TransitionGroup>
53
-
54
- } else {
55
- return <TransitionGroup className='main-container' style={{
40
+ const getContainerStyles = () => {
41
+ if (parameters.template === 'gradient') {
42
+ return { backgroundColor: parameters.gradientBackgroundColor || 'red' }
43
+ }
44
+ return {
56
45
  padding: parameters.padding,
57
46
  backgroundImage: parameters.background && `url("${downloadsPath}/${parameters.background.filename}")`
58
- }}>
59
- {item &&
60
- <CSSTransition key={item.id} classNames={parameters.animationType || 'fade'} timeout={(1750 / (animationSpeed || 1)) * 2}>
61
- <div className={'news-item-container'}>
62
- {parameters.template !== 'gallery'
63
- ? <StandardItem parameters={parameters} item={item} />
64
- : <GalleryItem parameters={parameters} item={item} />
65
- }
66
- </div>
67
- </CSSTransition>
68
- }
69
- </TransitionGroup>
47
+ }
70
48
  }
49
+
50
+ const renderNewsItem = (item: NewsItem) => {
51
+ if (parameters.template === 'gradient') {
52
+ return <GradientItem parameters={parameters} item={item} />
53
+ }
54
+ if (parameters.template === 'gallery') {
55
+ return <GalleryItem parameters={parameters} item={item} />
56
+ }
57
+ return <StandardItem parameters={parameters} item={item} />
58
+ }
59
+
60
+ if (props.items.length === 0 || !item) {
61
+ return (
62
+ <div className='main-container' style={getContainerStyles()}>
63
+ <div style={{
64
+ width: '100%',
65
+ height: '100%',
66
+ display: 'flex',
67
+ justifyContent: 'center',
68
+ alignItems: 'center'
69
+ }}>
70
+ <FormattedText text={defaultMessage || 'No existen noticias para mostrar'} format={parameters.defaultMessageFormat} />
71
+ </div>
72
+ </div>
73
+ )
74
+ }
75
+
76
+ return (
77
+ <TransitionGroup className='main-container' style={getContainerStyles()}>
78
+ <CSSTransition
79
+ key={item.id}
80
+ classNames={parameters.animationType || 'fade'}
81
+ timeout={(1750 / (animationSpeed || 1)) * 2}
82
+ >
83
+ <div className={'news-item-container'}>
84
+ {renderNewsItem(item)}
85
+ </div>
86
+ </CSSTransition>
87
+ </TransitionGroup>
88
+ )
71
89
  }
@@ -1,80 +1,127 @@
1
1
  declare type VixonicData = {
2
2
  downloadsPath: string
3
- services: { [key: string]: { data?: any; updatedAt?: number } }
3
+ services: { [key: string]: { data?: any, updatedAt?: number } }
4
4
  parameters: VixonicParameters
5
5
  }
6
6
 
7
- declare type VixonicParameters = Partial<{
7
+ declare type VixonicParameters =
8
+ Partial<{
8
9
  news: {
9
- title: string | string | string | string
10
- description: string | string | string | string
11
- image: { id?: string; filename?: string; extension?: string }
12
- qrCodeUrl: string
13
- qrCodeTitle: string
14
- expirationDate: string
15
- __id: string | undefined
16
- }[]
17
- newsSizeSelect: 'short' | 'medium' | 'large' | 'extra-large'
18
- template: 'standard' | 'gallery' | 'gradient'
19
- showTime: number
20
- animationSpeed: number
21
- animationType: 'fade' | 'crossFade'
22
- textAlignment: 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'space-between'
23
- titleEnabled: boolean
24
- titleFormat: {
25
- fontSize?: number
26
- fontColor?: string
27
- alignment?: { horizontal?: 'left' | 'right' | 'center' }
28
- font?: { filename: string; id: string; __isAsset: true }
29
- }
30
- titleLineHeight: number
31
- descriptionEnabled: boolean
32
- descriptionFormat: {
33
- fontSize?: number
34
- fontColor?: string
35
- alignment?: { horizontal?: 'left' | 'right' | 'center' }
36
- font?: { filename: string; id: string; __isAsset: true }
37
- }
38
- descriptionLineHeight: number
39
- textSeparation: number
40
- imageEnabled: boolean
41
- imageSize: 'small' | 'medium' | 'large' | 'custom'
42
- imageCustomSize: number
43
- imagePosition: 'top' | 'right' | 'bottom' | 'left'
44
- imageMode: 'contain' | 'cover' | 'fill' | 'none'
45
- imageStyle: 'normal' | 'rounded' | 'circle' | 'hex'
46
- imageSeparation: number
47
- gradientBackgroundColor: string
48
- gradientRate: number
49
- gradientOrientation: 'left' | 'right'
50
- gradientTitleEnabled: boolean
51
- gradientTitle: string
52
- gradientTitlePositionX: number
53
- gradientTitlePositionY: number
54
- gradientTitleFormat: {
55
- fontSize?: number
56
- fontColor?: string
57
- alignment?: { horizontal?: 'left' | 'right' | 'center' }
58
- font?: { filename: string; id: string; __isAsset: true }
59
- }
60
- barSize: 'small' | 'medium' | 'big'
61
- barColor: string
62
- barOpacity: number
63
- iconVisible: boolean
64
- iconColor: string
65
- qrCodeEnabled: boolean
66
- qrCodeWidth: number
67
- qrCodeHeight: number
68
- qrCodePositionX: number
69
- qrCodePositionY: number
70
- qrCodeBackgroundColor: string
71
- qrCodeColor: string
72
- QrCodeTitleFormat: {
73
- fontSize?: number
74
- fontColor?: string
75
- alignment?: { horizontal?: 'left' | 'right' | 'center' }
76
- font?: { filename: string; id: string; __isAsset: true }
77
- }
78
- background: { id?: string; filename?: string; extension?: string }
79
- padding: string
80
- }>
10
+ titleShort: string,
11
+ titleMedium: string,
12
+ titleLarge: string,
13
+ titleExtraLarge: string,
14
+ descriptionShort: string,
15
+ descriptionMedium: string,
16
+ descriptionLarge: string,
17
+ descriptionExtraLarge: string,
18
+ image: {
19
+ id?: string,
20
+ filename?: string,
21
+ extension?: string
22
+ },
23
+ qrCodeUrl: string,
24
+ qrCodeTitle: string,
25
+ expirationDate: string,
26
+ __id: string | undefined}[],
27
+ newsSizeSelect: 'short' | 'medium' | 'large' | 'extra-large',
28
+ template: 'standard' | 'gallery' | 'gradient',
29
+ showTime: number, animationSpeed: number,
30
+ animationType: 'fade' | 'crossFade',
31
+ textAlignment: 'flex-start' | 'flex-end' | 'center' | 'space-around' | 'space-between',
32
+ defaultMessage: string
33
+ defaultMessageFormat: {
34
+ fontSize?: number,
35
+ fontColor?: string,
36
+ alignment?: {
37
+ horizontal?: 'left' | 'right' | 'center'},
38
+ font?: {
39
+ filename: string;
40
+ id: string;
41
+ __isAsset: true}
42
+ }
43
+ titleEnabled: boolean,
44
+ titleFormat: {
45
+ fontSize?: number,
46
+ fontColor?: string,
47
+ alignment?: {
48
+ horizontal?: 'left' | 'right' | 'center'
49
+ },
50
+ font?: {
51
+ filename: string,
52
+ id: string,
53
+ __isAsset: true
54
+ }
55
+ },
56
+ titleLineHeight: number,
57
+ descriptionEnabled: boolean,
58
+ descriptionFormat: {
59
+ fontSize?: number,
60
+ fontColor?: string,
61
+ alignment?: {
62
+ horizontal?: 'left' | 'right' | 'center'
63
+ },
64
+ font?: {
65
+ filename: string,
66
+ id: string,
67
+ __isAsset: true
68
+ }
69
+ },
70
+ descriptionLineHeight: number,
71
+ textSeparation: number,
72
+ imageEnabled: boolean,
73
+ imageSize: 'small' | 'medium' | 'large' | 'custom',
74
+ imageCustomSize: number,
75
+ imagePosition: 'top' | 'right' | 'bottom' | 'left',
76
+ imageMode: 'contain' | 'cover' | 'fill' | 'none',
77
+ imageStyle: 'normal' | 'rounded' | 'circle' | 'hex',
78
+ imageSeparation: number,
79
+ gradientBackgroundColor: string,
80
+ gradientRate: number,
81
+ gradientOrientation: 'left' | 'right',
82
+ gradientTitleEnabled: boolean,
83
+ gradientTitle: string,
84
+ gradientTitlePositionX: number,
85
+ gradientTitlePositionY: number,
86
+ gradientTitleFormat: {
87
+ fontSize?: number,
88
+ fontColor?: string,
89
+ alignment?: {
90
+ horizontal?: 'left' | 'right' | 'center'
91
+ },
92
+ font?: {
93
+ filename: string,
94
+ id: string,
95
+ __isAsset: true
96
+ }
97
+ },
98
+ barSize: 'small' | 'medium' | 'big',
99
+ barColor: string,
100
+ barOpacity: number,
101
+ iconVisible: boolean,
102
+ iconColor: string,
103
+ qrCodeEnabled: boolean,
104
+ qrCodeWidth: number,
105
+ qrCodeHeight: number,
106
+ qrCodePositionX: number,
107
+ qrCodePositionY: number,
108
+ qrCodeBackgroundColor: string,
109
+ qrCodeColor: string,
110
+ QrCodeTitleFormat: {
111
+ fontSize?: number,
112
+ fontColor?: string,
113
+ alignment?: {
114
+ horizontal?: 'left' | 'right' | 'center' },
115
+ font?: {
116
+ filename: string,
117
+ id: string,
118
+ __isAsset: true
119
+ }
120
+ },
121
+ background: {
122
+ id?: string,
123
+ filename?: string,
124
+ extension?: string
125
+ },
126
+ padding: string
127
+ }>