@synerise/ds-file-uploader 1.2.8 → 1.3.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.
- package/CHANGELOG.md +6 -0
- package/dist/AvatarUploader/AvatarUploader.d.ts +23 -2
- package/dist/AvatarUploader/AvatarUploader.d.ts.map +1 -1
- package/dist/AvatarUploader/FileViewAvatar/FileViewAvatar.d.ts.map +1 -1
- package/dist/AvatarUploader/FileViewAvatar/FileViewAvatar.js +0 -6
- package/dist/FileUploader.d.ts +23 -2
- package/dist/FileUploader.d.ts.map +1 -1
- package/dist/FileUploader.js +6 -3
- package/dist/FileUploader.types.d.ts +3 -2
- package/dist/FileUploader.types.d.ts.map +1 -1
- package/dist/ItemUploader/UploaderButton/FileViewItem.js +0 -3
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.3.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-file-uploader@1.2.8...@synerise/ds-file-uploader@1.3.0) (2026-02-05)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **tooltip:** migrate to popover ([53ecd29](https://github.com/Synerise/synerise-design/commit/53ecd293fa31bdcfd921c6c5fd91db9c2c643eda))
|
|
11
|
+
|
|
6
12
|
## [1.2.8](https://github.com/Synerise/synerise-design/compare/@synerise/ds-file-uploader@1.2.7...@synerise/ds-file-uploader@1.2.8) (2026-02-02)
|
|
7
13
|
|
|
8
14
|
**Note:** Version bump only for package @synerise/ds-file-uploader
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type
|
|
3
|
-
declare const AvatarUploader: React.ForwardRefExoticComponent<
|
|
2
|
+
import { type FileUploaderRef } from '../FileUploader.types';
|
|
3
|
+
declare const AvatarUploader: React.ForwardRefExoticComponent<{
|
|
4
|
+
className?: string;
|
|
5
|
+
mode: "single" | "multi-medium" | "multi-large";
|
|
6
|
+
filesAmount?: number;
|
|
7
|
+
description?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
removable?: boolean;
|
|
10
|
+
tooltip?: string;
|
|
11
|
+
removeTooltip?: React.ReactNode;
|
|
12
|
+
label?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
texts?: import("../FileUploader.types").FileViewTexts & {
|
|
15
|
+
buttonLabel?: React.ReactNode;
|
|
16
|
+
buttonLabelLarge?: React.ReactNode;
|
|
17
|
+
buttonDescription?: React.ReactNode;
|
|
18
|
+
};
|
|
19
|
+
files: import("../FileUploader.types").ExtendedFile[];
|
|
20
|
+
accept?: string[];
|
|
21
|
+
onRemove?: (file: import("../FileUploader.types").FileWithContent, index: number) => void;
|
|
22
|
+
onUpload?: (files: import("../FileUploader.types").FileWithContent[]) => void;
|
|
23
|
+
retry?: boolean;
|
|
24
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "label" | "className" | "mode" | "disabled" | "accept" | "description" | "tooltip" | "error" | "removable" | "onRemove" | "texts" | "filesAmount" | "removeTooltip" | "files" | "onUpload" | "retry"> & import("@synerise/ds-utils").DataAttributes & React.RefAttributes<FileUploaderRef>>;
|
|
4
25
|
export default AvatarUploader;
|
|
5
26
|
//# sourceMappingURL=AvatarUploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarUploader.d.ts","sourceRoot":"","sources":["../../src/AvatarUploader/AvatarUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAQf,OAAO,
|
|
1
|
+
{"version":3,"file":"AvatarUploader.d.ts","sourceRoot":"","sources":["../../src/AvatarUploader/AvatarUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAQf,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAgB/B,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;0UAqKnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileViewAvatar.d.ts","sourceRoot":"","sources":["../../../src/AvatarUploader/FileViewAvatar/FileViewAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,QAAA,MAAM,cAAc,GAAI,oDAMrB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"FileViewAvatar.d.ts","sourceRoot":"","sources":["../../../src/AvatarUploader/FileViewAvatar/FileViewAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,QAAA,MAAM,cAAc,GAAI,oDAMrB,mBAAmB,sBAwGrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -55,17 +55,11 @@ var FileViewAvatar = function FileViewAvatar(_ref) {
|
|
|
55
55
|
pressed: pressed,
|
|
56
56
|
"data-testid": "file-view-avatar-remove"
|
|
57
57
|
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
58
|
-
align: {
|
|
59
|
-
offset: [0, 8]
|
|
60
|
-
},
|
|
61
58
|
title: finalTexts.removeTooltip
|
|
62
59
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
63
60
|
component: /*#__PURE__*/React.createElement(Close3M, null),
|
|
64
61
|
size: 24
|
|
65
62
|
})))), /*#__PURE__*/React.createElement(S.FileViewContainer, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
66
|
-
overlayStyle: {
|
|
67
|
-
maxWidth: '350px'
|
|
68
|
-
},
|
|
69
63
|
title: file.name
|
|
70
64
|
}, /*#__PURE__*/React.createElement(S.FileView, {
|
|
71
65
|
progress: hasProgress,
|
package/dist/FileUploader.d.ts
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type
|
|
3
|
-
declare const FileUploader: React.ForwardRefExoticComponent<
|
|
2
|
+
import { type FileUploaderRef, type FileViewTexts } from './FileUploader.types';
|
|
3
|
+
declare const FileUploader: React.ForwardRefExoticComponent<{
|
|
4
|
+
className?: string;
|
|
5
|
+
mode: "single" | "multi-medium" | "multi-large";
|
|
6
|
+
filesAmount?: number;
|
|
7
|
+
description?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
removable?: boolean;
|
|
10
|
+
tooltip?: string;
|
|
11
|
+
removeTooltip?: React.ReactNode;
|
|
12
|
+
label?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
texts?: FileViewTexts & {
|
|
15
|
+
buttonLabel?: React.ReactNode;
|
|
16
|
+
buttonLabelLarge?: React.ReactNode;
|
|
17
|
+
buttonDescription?: React.ReactNode;
|
|
18
|
+
};
|
|
19
|
+
files: import("./FileUploader.types").ExtendedFile[];
|
|
20
|
+
accept?: string[];
|
|
21
|
+
onRemove?: (file: import("./FileUploader.types").FileWithContent, index: number) => void;
|
|
22
|
+
onUpload?: (files: import("./FileUploader.types").FileWithContent[]) => void;
|
|
23
|
+
retry?: boolean;
|
|
24
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "label" | "className" | "mode" | "disabled" | "accept" | "description" | "tooltip" | "error" | "removable" | "onRemove" | "texts" | "filesAmount" | "removeTooltip" | "files" | "onUpload" | "retry"> & import("@synerise/ds-utils").DataAttributes & React.RefAttributes<FileUploaderRef>>;
|
|
4
25
|
export default FileUploader;
|
|
5
26
|
//# sourceMappingURL=FileUploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploader.d.ts","sourceRoot":"","sources":["../src/FileUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AASf,OAAO,
|
|
1
|
+
{"version":3,"file":"FileUploader.d.ts","sourceRoot":"","sources":["../src/FileUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AASf,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAc9B,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;0UAwMjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/FileUploader.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
var _excluded = ["className", "onUpload", "disabled", "accept", "error", "label", "onRemove", "description", "tooltip", "filesAmount", "mode", "removable", "files", "retry", "texts"];
|
|
1
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
2
4
|
import React, { forwardRef, useCallback, useImperativeHandle, useState } from 'react';
|
|
3
5
|
import { useDropzone } from 'react-dropzone';
|
|
4
6
|
import { FormattedMessage } from 'react-intl';
|
|
@@ -38,7 +40,8 @@ var FileUploader = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
38
40
|
_ref$files = _ref.files,
|
|
39
41
|
files = _ref$files === void 0 ? [] : _ref$files,
|
|
40
42
|
retry = _ref.retry,
|
|
41
|
-
texts = _ref.texts
|
|
43
|
+
texts = _ref.texts,
|
|
44
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
42
45
|
var _useState = useState(true),
|
|
43
46
|
uploadSuccess = _useState[0],
|
|
44
47
|
setUploadSuccess = _useState[1];
|
|
@@ -110,9 +113,9 @@ var FileUploader = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
110
113
|
pressed = _useState2[0],
|
|
111
114
|
setPressed = _useState2[1];
|
|
112
115
|
var errors = hasError && !uploadSuccess ? [error].concat('To many files uploaded') : [error];
|
|
113
|
-
return /*#__PURE__*/React.createElement(S.Container, {
|
|
116
|
+
return /*#__PURE__*/React.createElement(S.Container, _extends({
|
|
114
117
|
className: "ds-file-uploader " + (className || '')
|
|
115
|
-
}, label && /*#__PURE__*/React.createElement(S.Label, null, /*#__PURE__*/React.createElement("span", null, label), tooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
118
|
+
}, rest), label && /*#__PURE__*/React.createElement(S.Label, null, /*#__PURE__*/React.createElement("span", null, label), tooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
116
119
|
trigger: "hover",
|
|
117
120
|
placement: "top",
|
|
118
121
|
title: tooltip
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ReactNode, type RefObject } from 'react';
|
|
2
|
+
import { type WithHTMLAttributes } from '@synerise/ds-utils';
|
|
2
3
|
export type FileViewTexts = {
|
|
3
4
|
size?: ReactNode;
|
|
4
5
|
cancelText?: ReactNode;
|
|
@@ -27,7 +28,7 @@ type FileUploaderTexts = FileViewTexts & {
|
|
|
27
28
|
buttonLabelLarge?: ReactNode;
|
|
28
29
|
buttonDescription?: ReactNode;
|
|
29
30
|
};
|
|
30
|
-
export type FileUploaderProps = {
|
|
31
|
+
export type FileUploaderProps = WithHTMLAttributes<HTMLDivElement, {
|
|
31
32
|
className?: string;
|
|
32
33
|
mode: 'single' | 'multi-medium' | 'multi-large';
|
|
33
34
|
filesAmount?: number;
|
|
@@ -44,7 +45,7 @@ export type FileUploaderProps = {
|
|
|
44
45
|
onRemove?: (file: FileWithContent, index: number) => void;
|
|
45
46
|
onUpload?: (files: FileWithContent[]) => void;
|
|
46
47
|
retry?: boolean;
|
|
47
|
-
}
|
|
48
|
+
}>;
|
|
48
49
|
export type ItemUploaderProps = Omit<FileUploaderProps, 'mode'> & {
|
|
49
50
|
mode: 'single' | 'multi';
|
|
50
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUploader.types.d.ts","sourceRoot":"","sources":["../src/FileUploader.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG;IACnC,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;AAEtD,KAAK,iBAAiB,GAAG,aAAa,GAAG;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,SAAS,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;
|
|
1
|
+
{"version":3,"file":"FileUploader.types.d.ts","sourceRoot":"","sources":["../src/FileUploader.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG;IACnC,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;AAEtD,KAAK,iBAAiB,GAAG,aAAa,GAAG;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,SAAS,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAChD,cAAc,EACd;IACE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;IAChE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC"}
|
|
@@ -34,9 +34,6 @@ var FileViewItem = function FileViewItem(_ref) {
|
|
|
34
34
|
removeButtonSetPressed(false);
|
|
35
35
|
};
|
|
36
36
|
return /*#__PURE__*/React.createElement(S.FileViewContainer, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
37
|
-
overlayStyle: {
|
|
38
|
-
maxWidth: '350px'
|
|
39
|
-
},
|
|
40
37
|
title: file.name
|
|
41
38
|
}, /*#__PURE__*/React.createElement(S.FileView, {
|
|
42
39
|
progress: hasProgress,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synerise/ds-file-uploader",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "FileUploader UI Component for the Synerise Design System",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"repository": "Synerise/synerise-design",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
],
|
|
36
36
|
"types": "dist/index.d.ts",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@synerise/ds-button": "^1.5.
|
|
39
|
-
"@synerise/ds-icon": "^1.11.
|
|
38
|
+
"@synerise/ds-button": "^1.5.8",
|
|
39
|
+
"@synerise/ds-icon": "^1.11.1",
|
|
40
40
|
"@synerise/ds-loader": "^1.0.12",
|
|
41
|
-
"@synerise/ds-popconfirm": "^1.
|
|
42
|
-
"@synerise/ds-progress-bar": "^1.1.
|
|
43
|
-
"@synerise/ds-tooltip": "^1.
|
|
44
|
-
"@synerise/ds-typography": "^1.1.
|
|
45
|
-
"@synerise/ds-utils": "^1.
|
|
41
|
+
"@synerise/ds-popconfirm": "^1.3.0",
|
|
42
|
+
"@synerise/ds-progress-bar": "^1.1.32",
|
|
43
|
+
"@synerise/ds-tooltip": "^1.4.0",
|
|
44
|
+
"@synerise/ds-typography": "^1.1.3",
|
|
45
|
+
"@synerise/ds-utils": "^1.6.0",
|
|
46
46
|
"filesize.js": "^2.0.0",
|
|
47
47
|
"react-dropzone": "^10.2.1"
|
|
48
48
|
},
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"react-intl": ">=3.12.0 <= 6.8",
|
|
53
53
|
"styled-components": "^5.3.3"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "ac8decd9736940735bf05198b24b3eeeb5900b18"
|
|
56
56
|
}
|