@learncard/react 2.0.0

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/dist/cjs/dist/styles.css +1 -0
  2. package/dist/cjs/index.css +3 -0
  3. package/dist/cjs/index.js +81 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/types/components/Button/Button.d.ts +8 -0
  6. package/dist/cjs/types/components/Button/index.d.ts +4 -0
  7. package/dist/cjs/types/components/FlippyCard/FlippyCard.d.ts +7 -0
  8. package/dist/cjs/types/components/FlippyCard/index.d.ts +4 -0
  9. package/dist/cjs/types/components/Loading/CircleSpinner.d.ts +15 -0
  10. package/dist/cjs/types/components/Loading/index.d.ts +4 -0
  11. package/dist/cjs/types/components/MiniVCThumbnail/MiniVCThumbnail.d.ts +5 -0
  12. package/dist/cjs/types/components/MiniVCThumbnail/index.d.ts +5 -0
  13. package/dist/cjs/types/components/MiniVCThumbnail/types.d.ts +32 -0
  14. package/dist/cjs/types/components/VCCard/VCCard.d.ts +10 -0
  15. package/dist/cjs/types/components/VCCard/index.d.ts +4 -0
  16. package/dist/cjs/types/components/VCDisplayBackFace/VCDisplayBackFace.d.ts +4 -0
  17. package/dist/cjs/types/components/VCDisplayBackFace/index.d.ts +4 -0
  18. package/dist/cjs/types/components/VCDisplayCard/VCDisplayCard.d.ts +11 -0
  19. package/dist/cjs/types/components/VCDisplayCard/index.d.ts +4 -0
  20. package/dist/cjs/types/components/VCDisplayFrontFace/VCDisplayFrontFace.d.ts +4 -0
  21. package/dist/cjs/types/components/VCDisplayFrontFace/index.d.ts +4 -0
  22. package/dist/cjs/types/components/VCThumbnail/VCThumbnail.d.ts +5 -0
  23. package/dist/cjs/types/components/VCThumbnail/index.d.ts +5 -0
  24. package/dist/cjs/types/components/VCThumbnail/types.d.ts +43 -0
  25. package/dist/cjs/types/components/VCVerificationCheck/VCVerificationCheck.d.ts +8 -0
  26. package/dist/cjs/types/components/VCVerificationCheck/index.d.ts +4 -0
  27. package/dist/cjs/types/components/VCVerificationPill/VCVerificationPill.d.ts +13 -0
  28. package/dist/cjs/types/components/VCVerificationPill/index.d.ts +4 -0
  29. package/dist/cjs/types/components/index.d.ts +14 -0
  30. package/dist/cjs/types/index.d.ts +3 -0
  31. package/dist/cjs/types/types/index.d.ts +20 -0
  32. package/dist/esm/dist/styles.css +1 -0
  33. package/dist/esm/index.css +3 -0
  34. package/dist/esm/index.js +81 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/types/components/Button/Button.d.ts +8 -0
  37. package/dist/esm/types/components/Button/index.d.ts +4 -0
  38. package/dist/esm/types/components/FlippyCard/FlippyCard.d.ts +7 -0
  39. package/dist/esm/types/components/FlippyCard/index.d.ts +4 -0
  40. package/dist/esm/types/components/Loading/CircleSpinner.d.ts +15 -0
  41. package/dist/esm/types/components/Loading/index.d.ts +4 -0
  42. package/dist/esm/types/components/MiniVCThumbnail/MiniVCThumbnail.d.ts +5 -0
  43. package/dist/esm/types/components/MiniVCThumbnail/index.d.ts +5 -0
  44. package/dist/esm/types/components/MiniVCThumbnail/types.d.ts +32 -0
  45. package/dist/esm/types/components/VCCard/VCCard.d.ts +10 -0
  46. package/dist/esm/types/components/VCCard/index.d.ts +4 -0
  47. package/dist/esm/types/components/VCDisplayBackFace/VCDisplayBackFace.d.ts +4 -0
  48. package/dist/esm/types/components/VCDisplayBackFace/index.d.ts +4 -0
  49. package/dist/esm/types/components/VCDisplayCard/VCDisplayCard.d.ts +11 -0
  50. package/dist/esm/types/components/VCDisplayCard/index.d.ts +4 -0
  51. package/dist/esm/types/components/VCDisplayFrontFace/VCDisplayFrontFace.d.ts +4 -0
  52. package/dist/esm/types/components/VCDisplayFrontFace/index.d.ts +4 -0
  53. package/dist/esm/types/components/VCThumbnail/VCThumbnail.d.ts +5 -0
  54. package/dist/esm/types/components/VCThumbnail/index.d.ts +5 -0
  55. package/dist/esm/types/components/VCThumbnail/types.d.ts +43 -0
  56. package/dist/esm/types/components/VCVerificationCheck/VCVerificationCheck.d.ts +8 -0
  57. package/dist/esm/types/components/VCVerificationCheck/index.d.ts +4 -0
  58. package/dist/esm/types/components/VCVerificationPill/VCVerificationPill.d.ts +13 -0
  59. package/dist/esm/types/components/VCVerificationPill/index.d.ts +4 -0
  60. package/dist/esm/types/components/index.d.ts +14 -0
  61. package/dist/esm/types/index.d.ts +3 -0
  62. package/dist/esm/types/types/index.d.ts +20 -0
  63. package/dist/index.d.ts +196 -0
  64. package/package.json +71 -0
@@ -0,0 +1,8 @@
1
+ import React, { MouseEventHandler } from 'react';
2
+ export declare type ButtonProps = {
3
+ text?: string;
4
+ onClick: MouseEventHandler<HTMLButtonElement>;
5
+ className?: string;
6
+ };
7
+ export declare const Button: React.FC<ButtonProps>;
8
+ export default Button;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./Button";
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './FlippyCard.css';
3
+ export declare type FlippyCardProps = {
4
+ children: React.ReactChild[];
5
+ };
6
+ export declare const FlippyCard: React.FC<FlippyCardProps>;
7
+ export default FlippyCard;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./FlippyCard";
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import './CircleSpinner.css';
3
+ export declare enum CircleLoadingState {
4
+ spin = 0,
5
+ stop = 1
6
+ }
7
+ export declare type CircleSpinnerProps = {
8
+ size?: number;
9
+ thickness?: number;
10
+ color?: string;
11
+ loadingState?: CircleLoadingState;
12
+ marginOffset?: number;
13
+ };
14
+ declare const CircleSpinner: React.FC<CircleSpinnerProps>;
15
+ export default CircleSpinner;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./CircleSpinner";
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { MiniVCThumbnailProps } from './types';
3
+ import './ MiniVCThumbnail.css';
4
+ export declare const MiniVCThumbnail: React.FC<MiniVCThumbnailProps>;
5
+ export default MiniVCThumbnail;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./MiniVCThumbnail";
5
+ export * from "./types";
@@ -0,0 +1,32 @@
1
+ export declare type MiniVCThumbnailProps = {
2
+ /**
3
+ * thumbnail title
4
+ * @type {string}
5
+ */
6
+ title?: string;
7
+ /**
8
+ * issue date
9
+ * @type {string}
10
+ */
11
+ createdAt?: string;
12
+ /**
13
+ * issuer image
14
+ * @type {string}
15
+ */
16
+ issuerImage?: string;
17
+ /**
18
+ * badge image
19
+ * @type {string}
20
+ */
21
+ badgeImage?: string;
22
+ /**
23
+ * custom className
24
+ * @type {string}
25
+ */
26
+ className?: string;
27
+ /**
28
+ *
29
+ * @type {function}
30
+ */
31
+ onClick?: () => void;
32
+ };
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { VC, Issuer } from '@learncard/types';
3
+ import { VCDisplayCard } from '../VCDisplayCard';
4
+ export declare type VCCardProps = {
5
+ credential: VC;
6
+ issueeOverride?: Issuer;
7
+ className?: string;
8
+ };
9
+ export declare const VCCard: React.FC<VCCardProps>;
10
+ export default VCDisplayCard;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCCard";
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { VCDisplayCardProps } from '../../types';
3
+ export declare const VCDisplayBackFace: React.FC<VCDisplayCardProps>;
4
+ export default VCDisplayBackFace;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCDisplayBackFace";
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { VC, Issuer, VerificationItem } from '@learncard/types';
3
+ export declare type VCDisplayCardPropsReal = {
4
+ credential: VC;
5
+ issueeOverride?: Issuer;
6
+ className?: string;
7
+ loading?: boolean;
8
+ verification?: VerificationItem[];
9
+ };
10
+ export declare const VCDisplayCard: React.FC<VCDisplayCardPropsReal>;
11
+ export default VCDisplayCard;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCDisplayCard";
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { VCDisplayCardProps } from '../../types';
3
+ declare const VCDisplayFrontFace: React.FC<VCDisplayCardProps>;
4
+ export default VCDisplayFrontFace;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCDisplayFrontFace";
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { VCThumbnailProps } from './types';
3
+ import './VCThumbnail.css';
4
+ export declare const VCThumbnail: React.FC<VCThumbnailProps>;
5
+ export default VCThumbnail;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCThumbnail";
5
+ export * from "./types";
@@ -0,0 +1,43 @@
1
+ export declare type VCThumbnailProps = {
2
+ /**
3
+ * thumbnail title
4
+ * @type {string}
5
+ */
6
+ title?: string;
7
+ /**
8
+ * issue date
9
+ * @type {string}
10
+ */
11
+ createdAt?: string;
12
+ /**
13
+ * issuer image
14
+ * @type {string}
15
+ */
16
+ issuerImage?: string;
17
+ /**
18
+ * user image
19
+ * @type {string}
20
+ */
21
+ userImage?: string;
22
+ /**
23
+ * badge image
24
+ * @type {string}
25
+ */
26
+ badgeImage?: string;
27
+ /**
28
+ * custom className
29
+ * @type {string}
30
+ */
31
+ className?: string;
32
+ /**
33
+ * condensed or full view
34
+ * of the thumbnail - defaulted to false
35
+ * @type {boolean}
36
+ */
37
+ listView?: boolean;
38
+ /**
39
+ *
40
+ * @type {function}
41
+ */
42
+ onClick?: () => void;
43
+ };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export declare type VCVerificationCheckProps = {
3
+ size?: string | number;
4
+ loading?: boolean;
5
+ };
6
+ export declare const VCVerificationCheck: React.FC<VCVerificationCheckProps>;
7
+ export default VCVerificationCheck;
8
+ export declare const VCVerificationCheckWithText: React.FC<VCVerificationCheckProps>;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCVerificationCheck";
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { VerificationStatus } from '@learncard/types';
3
+ declare type VerificationDisplayItemProps = {
4
+ status?: VerificationStatus;
5
+ message?: string;
6
+ details?: string;
7
+ };
8
+ declare type VerifiableStateIndicatorProps = {
9
+ status: VerificationStatus;
10
+ };
11
+ export declare const ValidationStateIndicator: React.FC<VerifiableStateIndicatorProps>;
12
+ declare const VCVerificationPill: React.FC<VerificationDisplayItemProps>;
13
+ export default VCVerificationPill;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./VCVerificationPill";
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+ export * from "./Button/index";
5
+ export * from "./FlippyCard/index";
6
+ export * from "./Loading/index";
7
+ export * from "./MiniVCThumbnail/index";
8
+ export * from "./VCCard/index";
9
+ export * from "./VCDisplayBackFace/index";
10
+ export * from "./VCDisplayCard/index";
11
+ export * from "./VCDisplayFrontFace/index";
12
+ export * from "./VCThumbnail/index";
13
+ export * from "./VCVerificationCheck/index";
14
+ export * from "./VCVerificationPill/index";
@@ -0,0 +1,3 @@
1
+ /// <reference path="../src/declaration.d.ts" />
2
+ import './tailwind.css';
3
+ export * from './components/index';
@@ -0,0 +1,20 @@
1
+ import { VerificationItem, Issuer, CredentialSubject } from '@learncard/types';
2
+ export declare type CredentialInfo = {
3
+ title?: string;
4
+ createdAt?: string;
5
+ issuer?: Issuer;
6
+ issuee?: Issuer;
7
+ credentialSubject?: CredentialSubject;
8
+ };
9
+ export declare type VCDisplayCardProps = {
10
+ title?: string;
11
+ createdAt?: string;
12
+ issuer?: Issuer;
13
+ issuee?: Issuer;
14
+ userImage?: string;
15
+ className?: string;
16
+ credentialSubject?: CredentialSubject;
17
+ onClick?: () => void;
18
+ loading?: boolean;
19
+ verification?: VerificationItem[];
20
+ };
@@ -0,0 +1,196 @@
1
+ // Generated by dts-bundle-generator v6.10.0
2
+
3
+ import React from 'react';
4
+ import { MouseEventHandler } from 'react';
5
+
6
+ export declare type ButtonProps = {
7
+ text?: string;
8
+ onClick: MouseEventHandler<HTMLButtonElement>;
9
+ className?: string;
10
+ };
11
+ export declare const Button: React.FC<ButtonProps>;
12
+ export declare type FlippyCardProps = {
13
+ children: React.ReactChild[];
14
+ };
15
+ export declare const FlippyCard: React.FC<FlippyCardProps>;
16
+ export declare enum CircleLoadingState {
17
+ spin = 0,
18
+ stop = 1
19
+ }
20
+ export declare type CircleSpinnerProps = {
21
+ size?: number;
22
+ thickness?: number;
23
+ color?: string;
24
+ loadingState?: CircleLoadingState;
25
+ marginOffset?: number;
26
+ };
27
+ export declare type MiniVCThumbnailProps = {
28
+ /**
29
+ * thumbnail title
30
+ * @type {string}
31
+ */
32
+ title?: string;
33
+ /**
34
+ * issue date
35
+ * @type {string}
36
+ */
37
+ createdAt?: string;
38
+ /**
39
+ * issuer image
40
+ * @type {string}
41
+ */
42
+ issuerImage?: string;
43
+ /**
44
+ * badge image
45
+ * @type {string}
46
+ */
47
+ badgeImage?: string;
48
+ /**
49
+ * custom className
50
+ * @type {string}
51
+ */
52
+ className?: string;
53
+ /**
54
+ *
55
+ * @type {function}
56
+ */
57
+ onClick?: () => void;
58
+ };
59
+ export declare const MiniVCThumbnail: React.FC<MiniVCThumbnailProps>;
60
+ declare enum VerificationStatus {
61
+ Success = "Success",
62
+ Failed = "Failed",
63
+ Error = "Error"
64
+ }
65
+ export declare type VerificationItem = {
66
+ check: string;
67
+ status: VerificationStatus;
68
+ message?: string;
69
+ details?: string;
70
+ };
71
+ export declare type AchievementCriteria = {
72
+ type?: string;
73
+ narrative?: string;
74
+ };
75
+ export declare type CredentialSubjectAchievement = {
76
+ type?: string;
77
+ name?: string;
78
+ description?: string;
79
+ criteria?: AchievementCriteria;
80
+ image?: string;
81
+ };
82
+ export declare type CredentialSubject = {
83
+ type?: string;
84
+ id?: string;
85
+ achievement?: CredentialSubjectAchievement;
86
+ };
87
+ export declare type Issuer = string | {
88
+ type?: string;
89
+ id?: string;
90
+ name?: string;
91
+ url?: string;
92
+ image?: string;
93
+ };
94
+ export declare type Proof = {
95
+ type: string;
96
+ proofPurpose: string;
97
+ verificationMethod: string;
98
+ jws: string;
99
+ created: string;
100
+ };
101
+ export declare type UnsignedVC = {
102
+ [key: string]: any;
103
+ "@context": string | string[];
104
+ credentialSubject: CredentialSubject;
105
+ id: string;
106
+ issuanceDate: string;
107
+ expirationDate?: string;
108
+ issuer: Issuer;
109
+ type: string[];
110
+ };
111
+ export declare type VC = UnsignedVC & {
112
+ proof: Proof;
113
+ };
114
+ export declare type VCDisplayCardPropsReal = {
115
+ credential: VC;
116
+ issueeOverride?: Issuer;
117
+ className?: string;
118
+ loading?: boolean;
119
+ verification?: VerificationItem[];
120
+ };
121
+ export declare const VCDisplayCard: React.FC<VCDisplayCardPropsReal>;
122
+ export declare type VCCardProps = {
123
+ credential: VC;
124
+ issueeOverride?: Issuer;
125
+ className?: string;
126
+ };
127
+ export declare const VCCard: React.FC<VCCardProps>;
128
+ export declare type VCDisplayCardProps = {
129
+ title?: string;
130
+ createdAt?: string;
131
+ issuer?: Issuer;
132
+ issuee?: Issuer;
133
+ userImage?: string;
134
+ className?: string;
135
+ credentialSubject?: CredentialSubject;
136
+ onClick?: () => void;
137
+ loading?: boolean;
138
+ verification?: VerificationItem[];
139
+ };
140
+ export declare const VCDisplayBackFace: React.FC<VCDisplayCardProps>;
141
+ export declare type VCThumbnailProps = {
142
+ /**
143
+ * thumbnail title
144
+ * @type {string}
145
+ */
146
+ title?: string;
147
+ /**
148
+ * issue date
149
+ * @type {string}
150
+ */
151
+ createdAt?: string;
152
+ /**
153
+ * issuer image
154
+ * @type {string}
155
+ */
156
+ issuerImage?: string;
157
+ /**
158
+ * user image
159
+ * @type {string}
160
+ */
161
+ userImage?: string;
162
+ /**
163
+ * badge image
164
+ * @type {string}
165
+ */
166
+ badgeImage?: string;
167
+ /**
168
+ * custom className
169
+ * @type {string}
170
+ */
171
+ className?: string;
172
+ /**
173
+ * condensed or full view
174
+ * of the thumbnail - defaulted to false
175
+ * @type {boolean}
176
+ */
177
+ listView?: boolean;
178
+ /**
179
+ *
180
+ * @type {function}
181
+ */
182
+ onClick?: () => void;
183
+ };
184
+ export declare const VCThumbnail: React.FC<VCThumbnailProps>;
185
+ export declare type VCVerificationCheckProps = {
186
+ size?: string | number;
187
+ loading?: boolean;
188
+ };
189
+ export declare const VCVerificationCheck: React.FC<VCVerificationCheckProps>;
190
+ export declare const VCVerificationCheckWithText: React.FC<VCVerificationCheckProps>;
191
+ export declare type VerifiableStateIndicatorProps = {
192
+ status: VerificationStatus;
193
+ };
194
+ export declare const ValidationStateIndicator: React.FC<VerifiableStateIndicatorProps>;
195
+
196
+ export {};
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@learncard/react",
3
+ "version": "2.0.0",
4
+ "description": "",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "keywords": [],
12
+ "author": "",
13
+ "license": "MIT",
14
+ "devDependencies": {
15
+ "@learncard/types": "2.0.0",
16
+ "@rollup/plugin-commonjs": "^22.0.0",
17
+ "@rollup/plugin-node-resolve": "^13.3.0",
18
+ "@rollup/plugin-typescript": "^8.3.2",
19
+ "@storybook/addon-actions": "^6.4.22",
20
+ "@storybook/addon-essentials": "^6.4.22",
21
+ "@storybook/addon-interactions": "^6.4.22",
22
+ "@storybook/addon-links": "^6.4.22",
23
+ "@storybook/addon-postcss": "^2.0.0",
24
+ "@storybook/builder-webpack5": "^6.4.22",
25
+ "@storybook/manager-webpack5": "^6.4.22",
26
+ "@storybook/react": "^6.4.22",
27
+ "@storybook/testing-library": "^0.0.11",
28
+ "@tailwindcss/line-clamp": "^0.4.0",
29
+ "@testing-library/jest-dom": "^5.16.4",
30
+ "@testing-library/react": "^12.1.5",
31
+ "@testing-library/user-event": "^14.1.1",
32
+ "@types/jest": "^27.5.0",
33
+ "@types/react": "^17.0.2",
34
+ "autoprefixer": "^10.4.7",
35
+ "barrelsby": "^2.3.4",
36
+ "chromatic": "^6.5.4",
37
+ "css-loader": "^6.7.1",
38
+ "dts-bundle-generator": "^6.10.0",
39
+ "esbuild": "^0.14.38",
40
+ "esbuild-jest": "^0.5.0",
41
+ "jest": "^28.0.3",
42
+ "jest-environment-jsdom": "^28.0.2",
43
+ "postcss": "^8.4.13",
44
+ "postcss-loader": "^6.2.1",
45
+ "rollup": "^2.71.1",
46
+ "rollup-plugin-dts": "^4.2.1",
47
+ "rollup-plugin-peer-deps-external": "^2.2.4",
48
+ "rollup-plugin-postcss": "^4.0.2",
49
+ "rollup-plugin-terser": "^7.0.2",
50
+ "style-loader": "^3.3.1",
51
+ "tailwindcss": "^3.0.24",
52
+ "typescript": "^4.5.4"
53
+ },
54
+ "dependencies": {
55
+ "date-fns": "^2.28.0",
56
+ "@learncard/core": "1.0.0",
57
+ "rollup-plugin-img": "^1.1.0"
58
+ },
59
+ "peerDependencies": {
60
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
61
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
62
+ },
63
+ "scripts": {
64
+ "generate-barrels": "barrelsby -D -e \".*\\.(stories)|(test)|(\\.d\\.).*\" -d ./src/components -l all",
65
+ "build": "pnpm generate-barrels && rollup -c && dts-bundle-generator src/index.ts -o dist/index.d.ts",
66
+ "test": "jest",
67
+ "storybook": "start-storybook -p 6006",
68
+ "build-storybook": "build-storybook",
69
+ "chromatic": "npx chromatic"
70
+ }
71
+ }