@hi-ui/check-select 4.0.0-beta.30 → 4.0.0-beta.33
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/README.md
CHANGED
@@ -16,30 +16,30 @@
|
|
16
16
|
|
17
17
|
## Props
|
18
18
|
|
19
|
-
| 参数 | 说明 | 类型
|
20
|
-
| ----------------- | -------------------------------------------------------------------------------------------------------- |
|
21
|
-
| data | 下拉框选项数据源 | DataItem[] \| groupDataItem[]
|
22
|
-
| fieldNames | 设置 data 中 id, title, disabled, children 对应的 key | object
|
23
|
-
| dataSource | 关键词搜索时,触发异步下拉框选项数据源 | DataSource (keyword: string) => (DataSource \| DataItem \| Promise)
|
24
|
-
| value | 被选中项的值 | ReactText[]
|
25
|
-
| defaultValue | 默认被选中项的值 | ReactText[]
|
26
|
-
| showCheckAll | 是否显示**全选**,只对多选生效 | boolean
|
27
|
-
| showJustSelected | 是否显示**仅看已选**,只对多选生效 (3.0 新增) | boolean
|
28
|
-
| searchable | 是否可以筛选 | boolean
|
29
|
-
| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean
|
30
|
-
| clearable | 是否可以清空 | boolean
|
31
|
-
| disabled | 是否禁用 | boolean
|
32
|
-
| placeholder | 输入框占位 | string
|
33
|
-
| searchPlaceholder | 搜索输入框占位 | string
|
34
|
-
| emptyContent | 设置选项为空时展示的内容 | ReactNode
|
35
|
-
| loadingContent | 设置加载中时展示的内容 | ReactNode
|
36
|
-
| optionWidth | 自定义下拉选项宽度 | number
|
37
|
-
| renderExtraFooter | 自定义下拉菜单底部渲染 | () => ReactNode
|
38
|
-
| overlayClassName | 下拉根元素的类名称 | string
|
39
|
-
| onOverlayScroll | 下拉列表滚动时的回调 | function
|
40
|
-
| overlay | 自定义控制弹出层 popper 行为 | PopperOverlayProps
|
41
|
-
| render | 自定义渲染节点的 title 内容径 | (item:
|
42
|
-
| displayRender | 自定义选择后展示的内容 | (selectedItems: DataItem[]) => string
|
19
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
20
|
+
| ----------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------- |
|
21
|
+
| data | 下拉框选项数据源 | DataItem[] \| groupDataItem[] | - | - |
|
22
|
+
| fieldNames | 设置 data 中 id, title, disabled, children 对应的 key | object | - | { title: 'title', id: 'id',disabled:'disabled', children: 'children'} |
|
23
|
+
| dataSource | 关键词搜索时,触发异步下拉框选项数据源 | DataSource (keyword: string) => (DataSource \| DataItem \| Promise) | - | - |
|
24
|
+
| value | 被选中项的值 | ReactText[] | - | - |
|
25
|
+
| defaultValue | 默认被选中项的值 | ReactText[] | - | - |
|
26
|
+
| showCheckAll | 是否显示**全选**,只对多选生效 | boolean | true \| false | false |
|
27
|
+
| showJustSelected | 是否显示**仅看已选**,只对多选生效 (3.0 新增) | boolean | true \| false | false |
|
28
|
+
| searchable | 是否可以筛选 | boolean | true \| false | false |
|
29
|
+
| filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | (keyword: string, item: DataItem) => boolean | - |
|
30
|
+
| clearable | 是否可以清空 | boolean | true \| false | true |
|
31
|
+
| disabled | 是否禁用 | boolean | true \| false | false |
|
32
|
+
| placeholder | 输入框占位 | string | - | '请选择' |
|
33
|
+
| searchPlaceholder | 搜索输入框占位 | string | - | '搜索' |
|
34
|
+
| emptyContent | 设置选项为空时展示的内容 | ReactNode | - | '无匹配数据' |
|
35
|
+
| loadingContent | 设置加载中时展示的内容 | ReactNode | - | '数据加载中...' |
|
36
|
+
| optionWidth | 自定义下拉选项宽度 | number | - | |
|
37
|
+
| renderExtraFooter | 自定义下拉菜单底部渲染 | () => ReactNode | - | 无内容 |
|
38
|
+
| overlayClassName | 下拉根元素的类名称 | string | - | - |
|
39
|
+
| onOverlayScroll | 下拉列表滚动时的回调 | function | - | - |
|
40
|
+
| overlay | 自定义控制弹出层 popper 行为 | PopperOverlayProps | - | - |
|
41
|
+
| render | 自定义渲染节点的 title 内容径 | (item: CheckSelectItemEventData, keyword: string) => React.ReactNode | - |
|
42
|
+
| displayRender | 自定义选择后展示的内容 | (selectedItems: DataItem[]) => string | - | - |
|
43
43
|
|
44
44
|
> 注意,如果发现下拉菜单跟随页面滚动,或者需要在其他弹层中触发 CheckSelect,请尝试使用 `overlay={ container: triggerNode.parentElement }` 将下拉弹层渲染节点固定在触发器的父元素中。
|
45
45
|
|
@@ -67,7 +67,7 @@
|
|
67
67
|
| title | 下拉选择项标题 | string | - | - |
|
68
68
|
| disabled | 是否禁用 | boolean | true \| false | false |
|
69
69
|
|
70
|
-
###
|
70
|
+
### CheckSelectItemEventData
|
71
71
|
|
72
72
|
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
73
73
|
| -------- | -------------------------------- | ------- | ------------- | ------ |
|
@@ -14,7 +14,7 @@ Object.defineProperty(exports, '__esModule', {
|
|
14
14
|
});
|
15
15
|
var css_248z = ".hi-v4-check-select-option {margin-top: var(--hi-v4-spacing-2, 4px);margin-bottom: var(--hi-v4-spacing-2, 4px);-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;position: relative;border-radius: var(--hi-v4-border-radius-md, 4px);cursor: pointer;font-size: var(--hi-v4-text-size-md, 0.875rem);font-weight: var(--hi-v4-text-weight-normal, 400);color: var(--hi-v4-color-gray-700, #1f2733);line-height: var(--hi-v4-text-lineheight-sm, 1.25rem); }.hi-v4-check-select-option__indent {display: inline-block;width: 16px;height: 100%; }.hi-v4-check-select-option__title {display: inline-block;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;padding: var(--hi-v4-spacing-3, 6px);font-size: inherit;font-weight: inherit;color: inherit;line-height: inherit; }.hi-v4-check-select-option:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7); }.hi-v4-check-select-option--focused {background-color: var(--hi-v4-color-gray-100, #f2f4f7); }.hi-v4-check-select-option--disabled {cursor: not-allowed;color: var(--hi-v4-color-gray-500, #929aa6); }.hi-v4-check-select-option-group {display: inline-block;margin-top: var(--hi-v4-spacing-6, 12px);margin-bottom: var(--hi-v4-spacing-2, 4px);padding: var(--hi-v4-spacing-3, 6px) 0 var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-3, 6px);font-size: var(--hi-v4-text-size-md, 0.875rem);font-weight: var(--hi-v4-text-weight-normal, 400);color: var(--hi-v4-color-gray-500, #929aa6);line-height: var(--hi-v4-text-lineheight-sm, 1.25rem); }.hi-v4-check-select-option-group:first-child {margin-top: var(--hi-v4-spacing-2, 4px); }";
|
16
16
|
|
17
|
-
var __styleInject__ = require('
|
17
|
+
var __styleInject__ = require('inject-head-style')["default"];
|
18
18
|
|
19
19
|
__styleInject__(css_248z);
|
20
20
|
|
@@ -7,7 +7,7 @@
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
9
|
*/
|
10
|
-
import __styleInject__ from '
|
10
|
+
import __styleInject__ from 'inject-head-style';
|
11
11
|
var css_248z = ".hi-v4-check-select-option {margin-top: var(--hi-v4-spacing-2, 4px);margin-bottom: var(--hi-v4-spacing-2, 4px);-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;position: relative;border-radius: var(--hi-v4-border-radius-md, 4px);cursor: pointer;font-size: var(--hi-v4-text-size-md, 0.875rem);font-weight: var(--hi-v4-text-weight-normal, 400);color: var(--hi-v4-color-gray-700, #1f2733);line-height: var(--hi-v4-text-lineheight-sm, 1.25rem); }.hi-v4-check-select-option__indent {display: inline-block;width: 16px;height: 100%; }.hi-v4-check-select-option__title {display: inline-block;-webkit-box-sizing: border-box;box-sizing: border-box;width: 100%;padding: var(--hi-v4-spacing-3, 6px);font-size: inherit;font-weight: inherit;color: inherit;line-height: inherit; }.hi-v4-check-select-option:hover {background-color: var(--hi-v4-color-gray-100, #f2f4f7); }.hi-v4-check-select-option--focused {background-color: var(--hi-v4-color-gray-100, #f2f4f7); }.hi-v4-check-select-option--disabled {cursor: not-allowed;color: var(--hi-v4-color-gray-500, #929aa6); }.hi-v4-check-select-option-group {display: inline-block;margin-top: var(--hi-v4-spacing-6, 12px);margin-bottom: var(--hi-v4-spacing-2, 4px);padding: var(--hi-v4-spacing-3, 6px) 0 var(--hi-v4-spacing-3, 6px) var(--hi-v4-spacing-3, 6px);font-size: var(--hi-v4-text-size-md, 0.875rem);font-weight: var(--hi-v4-text-weight-normal, 400);color: var(--hi-v4-color-gray-500, #929aa6);line-height: var(--hi-v4-text-lineheight-sm, 1.25rem); }.hi-v4-check-select-option-group:first-child {margin-top: var(--hi-v4-spacing-2, 4px); }";
|
12
12
|
|
13
13
|
__styleInject__(css_248z);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { UseCheckSelectProps } from './use-check-select';
|
3
|
-
import type {
|
4
|
-
import { CheckSelectDataItem,
|
3
|
+
import type { HiBaseHTMLProps } from '@hi-ui/core';
|
4
|
+
import { CheckSelectAppearanceEnum, CheckSelectDataItem, CheckSelectItemEventData, CheckSelectMergedItem } from './types';
|
5
5
|
import { PickerProps } from '@hi-ui/picker';
|
6
6
|
import { UseDataSource } from '@hi-ui/use-data-source';
|
7
7
|
/**
|
@@ -42,11 +42,11 @@ export interface CheckSelectProps extends Omit<PickerProps, 'trigger'>, UseCheck
|
|
42
42
|
/**
|
43
43
|
* 自定义渲染节点的 title 内容
|
44
44
|
*/
|
45
|
-
render?: (item:
|
45
|
+
render?: (item: CheckSelectItemEventData) => React.ReactNode;
|
46
46
|
/**
|
47
47
|
* 自定义选择后触发器所展示的内容,只在 title 为字符串时有效
|
48
48
|
*/
|
49
|
-
displayRender?: (option:
|
49
|
+
displayRender?: (option: CheckSelectItemEventData) => React.ReactNode;
|
50
50
|
/**
|
51
51
|
* 触发器输入框占位符
|
52
52
|
*/
|
@@ -54,7 +54,7 @@ export interface CheckSelectProps extends Omit<PickerProps, 'trigger'>, UseCheck
|
|
54
54
|
/**
|
55
55
|
* 设置展现形式
|
56
56
|
*/
|
57
|
-
appearance?:
|
57
|
+
appearance?: CheckSelectAppearanceEnum;
|
58
58
|
/**
|
59
59
|
* 节点搜索模式,仅在mode=normal模式下生效
|
60
60
|
*/
|
package/lib/types/context.d.ts
CHANGED
@@ -4,18 +4,18 @@ export declare const CheckSelectProvider: import("react").Provider<Omit<{
|
|
4
4
|
data: any[];
|
5
5
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
6
6
|
value: import("react").ReactText[];
|
7
|
-
tryChangeValue: (value: import("react").ReactText[], item: import("./types").
|
7
|
+
tryChangeValue: (value: import("react").ReactText[], item: import("./types").CheckSelectItemEventData | import("./types").CheckSelectItemEventData[], shouldChecked: boolean) => void;
|
8
8
|
onSelect: (targetItem: import("packages/hooks/use-check/lib/types").UseCheckItem, shouldChecked: boolean) => void;
|
9
9
|
isCheckedId: (id: import("react").ReactText) => boolean;
|
10
|
-
checkedItems: import("./types").
|
10
|
+
checkedItems: import("./types").CheckSelectItemEventData[];
|
11
11
|
}, "rootProps"> | null>;
|
12
12
|
export declare const useCheckSelectContext: () => Omit<{
|
13
13
|
rootProps: {};
|
14
14
|
data: any[];
|
15
15
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
16
16
|
value: import("react").ReactText[];
|
17
|
-
tryChangeValue: (value: import("react").ReactText[], item: import("./types").
|
17
|
+
tryChangeValue: (value: import("react").ReactText[], item: import("./types").CheckSelectItemEventData | import("./types").CheckSelectItemEventData[], shouldChecked: boolean) => void;
|
18
18
|
onSelect: (targetItem: import("packages/hooks/use-check/lib/types").UseCheckItem, shouldChecked: boolean) => void;
|
19
19
|
isCheckedId: (id: import("react").ReactText) => boolean;
|
20
|
-
checkedItems: import("./types").
|
20
|
+
checkedItems: import("./types").CheckSelectItemEventData[];
|
21
21
|
}, "rootProps">;
|
package/lib/types/types.d.ts
CHANGED
@@ -1,29 +1,30 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import type { HiBaseAppearanceEnum } from '@hi-ui/core';
|
2
3
|
export interface CheckSelectDataItem {
|
3
4
|
/**
|
4
|
-
*
|
5
|
+
* 选择项值,唯一 id
|
5
6
|
*/
|
6
7
|
id?: React.ReactText;
|
7
8
|
/**
|
8
|
-
*
|
9
|
+
* 选项标题
|
9
10
|
*/
|
10
11
|
title?: React.ReactNode;
|
11
12
|
/**
|
12
|
-
*
|
13
|
+
* 是否禁用该选项
|
13
14
|
*/
|
14
15
|
disabled?: boolean;
|
15
16
|
}
|
16
17
|
export interface CheckSelectGroupDataItem {
|
17
18
|
/**
|
18
|
-
*
|
19
|
+
* 选项组标题
|
19
20
|
*/
|
20
21
|
groupTitle?: React.ReactNode;
|
21
22
|
/**
|
22
|
-
*
|
23
|
+
* 组选项列表
|
23
24
|
*/
|
24
25
|
children?: CheckSelectDataItem[];
|
25
26
|
}
|
26
|
-
export declare type CheckSelectMergedItem = CheckSelectDataItem
|
27
|
+
export declare type CheckSelectMergedItem = CheckSelectDataItem | CheckSelectGroupDataItem;
|
27
28
|
export interface CheckSelectRequiredProps {
|
28
29
|
checked: boolean;
|
29
30
|
focused: boolean;
|
@@ -46,5 +47,6 @@ export interface FlattedCheckSelectDataItem extends CheckSelectDataItem {
|
|
46
47
|
*/
|
47
48
|
parent?: FlattedCheckSelectDataItem;
|
48
49
|
}
|
49
|
-
export interface
|
50
|
+
export interface CheckSelectItemEventData extends FlattedCheckSelectDataItem, CheckSelectRequiredProps {
|
50
51
|
}
|
52
|
+
export declare type CheckSelectAppearanceEnum = HiBaseAppearanceEnum | undefined;
|
@@ -1,15 +1,14 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { CheckSelectDataItem,
|
3
|
-
import { HiBaseFieldNames } from '@hi-ui/core';
|
2
|
+
import { CheckSelectDataItem, CheckSelectItemEventData, CheckSelectMergedItem } from './types';
|
4
3
|
export declare const useCheckSelect: ({ data: dataProp, children, disabled, value: valueProp, defaultValue, onChange: onChangeProp, onSelect, fieldNames, ...rest }: UseCheckSelectProps) => {
|
5
4
|
rootProps: {};
|
6
5
|
data: any[];
|
7
6
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
8
7
|
value: React.ReactText[];
|
9
|
-
tryChangeValue: (value: React.ReactText[], item:
|
8
|
+
tryChangeValue: (value: React.ReactText[], item: CheckSelectItemEventData | CheckSelectItemEventData[], shouldChecked: boolean) => void;
|
10
9
|
onSelect: (targetItem: import("@hi-ui/use-check").UseCheckItem, shouldChecked: boolean) => void;
|
11
10
|
isCheckedId: (id: React.ReactText) => boolean;
|
12
|
-
checkedItems:
|
11
|
+
checkedItems: CheckSelectItemEventData[];
|
13
12
|
};
|
14
13
|
export interface UseCheckSelectProps {
|
15
14
|
/**
|
@@ -31,7 +30,7 @@ export interface UseCheckSelectProps {
|
|
31
30
|
* 选中值时回调。暂不对外暴露
|
32
31
|
* @private
|
33
32
|
*/
|
34
|
-
onSelect?: (value: React.ReactText[], targetOption:
|
33
|
+
onSelect?: (value: React.ReactText[], targetOption: CheckSelectItemEventData, shouldChecked: boolean) => void;
|
35
34
|
/**
|
36
35
|
* 是否禁止使用
|
37
36
|
*/
|
@@ -47,6 +46,6 @@ export interface UseCheckSelectProps {
|
|
47
46
|
/**
|
48
47
|
* 设置 data 中 id, title, disabled, children 对应的 key
|
49
48
|
*/
|
50
|
-
fieldNames?:
|
49
|
+
fieldNames?: Record<string, string>;
|
51
50
|
}
|
52
51
|
export declare type UseSelectReturn = ReturnType<typeof useCheckSelect>;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hi-ui/check-select",
|
3
|
-
"version": "4.0.0-beta.
|
3
|
+
"version": "4.0.0-beta.33",
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
5
5
|
"keywords": [],
|
6
6
|
"author": "HIUI <mi-hiui@xiaomi.com>",
|
@@ -43,30 +43,30 @@
|
|
43
43
|
"url": "https://github.com/XiaoMi/hiui/issues"
|
44
44
|
},
|
45
45
|
"dependencies": {
|
46
|
-
"@hi-ui/array-utils": "^4.0.0-beta.
|
47
|
-
"@hi-ui/checkbox": "^4.0.0-beta.
|
46
|
+
"@hi-ui/array-utils": "^4.0.0-beta.8",
|
47
|
+
"@hi-ui/checkbox": "^4.0.0-beta.13",
|
48
48
|
"@hi-ui/classname": "^4.0.0-beta.0",
|
49
|
-
"@hi-ui/core": "^4.0.0-beta.
|
49
|
+
"@hi-ui/core": "^4.0.0-beta.9",
|
50
50
|
"@hi-ui/core-css": "^4.0.0-beta.5",
|
51
|
-
"@hi-ui/env": "^4.0.0-beta.
|
52
|
-
"@hi-ui/func-utils": "^4.0.0-beta.
|
53
|
-
"@hi-ui/highlighter": "^4.0.0-beta.
|
54
|
-
"@hi-ui/icons": "^4.0.0-beta.
|
55
|
-
"@hi-ui/input": "^4.0.0-beta.
|
56
|
-
"@hi-ui/locale-context": "^4.0.0-beta.
|
57
|
-
"@hi-ui/picker": "^4.0.0-beta.
|
58
|
-
"@hi-ui/popper": "^4.0.0-beta.
|
59
|
-
"@hi-ui/tag-input": "^4.0.0-beta.
|
60
|
-
"@hi-ui/times": "^4.0.0-beta.
|
61
|
-
"@hi-ui/tree-utils": "^4.0.0-beta.
|
62
|
-
"@hi-ui/type-assertion": "^4.0.0-beta.
|
63
|
-
"@hi-ui/use-check": "^4.0.0-beta.
|
64
|
-
"@hi-ui/use-children": "^4.0.0-beta.
|
65
|
-
"@hi-ui/use-data-source": "^4.0.0-beta.
|
66
|
-
"@hi-ui/use-latest": "^4.0.0-beta.
|
67
|
-
"@hi-ui/use-search-mode": "^4.0.0-beta.
|
68
|
-
"@hi-ui/use-toggle": "^4.0.0-beta.
|
69
|
-
"@hi-ui/use-uncontrolled-state": "^4.0.0-beta.
|
51
|
+
"@hi-ui/env": "^4.0.0-beta.1",
|
52
|
+
"@hi-ui/func-utils": "^4.0.0-beta.13",
|
53
|
+
"@hi-ui/highlighter": "^4.0.0-beta.10",
|
54
|
+
"@hi-ui/icons": "^4.0.0-beta.11",
|
55
|
+
"@hi-ui/input": "^4.0.0-beta.16",
|
56
|
+
"@hi-ui/locale-context": "^4.0.0-beta.19",
|
57
|
+
"@hi-ui/picker": "^4.0.0-beta.26",
|
58
|
+
"@hi-ui/popper": "^4.0.0-beta.15",
|
59
|
+
"@hi-ui/tag-input": "^4.0.0-beta.19",
|
60
|
+
"@hi-ui/times": "^4.0.0-beta.6",
|
61
|
+
"@hi-ui/tree-utils": "^4.0.0-beta.5",
|
62
|
+
"@hi-ui/type-assertion": "^4.0.0-beta.5",
|
63
|
+
"@hi-ui/use-check": "^4.0.0-beta.5",
|
64
|
+
"@hi-ui/use-children": "^4.0.0-beta.5",
|
65
|
+
"@hi-ui/use-data-source": "^4.0.0-beta.6",
|
66
|
+
"@hi-ui/use-latest": "^4.0.0-beta.5",
|
67
|
+
"@hi-ui/use-search-mode": "^4.0.0-beta.20",
|
68
|
+
"@hi-ui/use-toggle": "^4.0.0-beta.5",
|
69
|
+
"@hi-ui/use-uncontrolled-state": "^4.0.0-beta.5",
|
70
70
|
"rc-virtual-list": "^3.4.7"
|
71
71
|
},
|
72
72
|
"peerDependencies": {
|
@@ -74,9 +74,9 @@
|
|
74
74
|
"react-dom": ">=16.8.6"
|
75
75
|
},
|
76
76
|
"devDependencies": {
|
77
|
-
"@hi-ui/hi-build": "^4.0.0-beta.
|
77
|
+
"@hi-ui/hi-build": "^4.0.0-beta.5",
|
78
78
|
"react": "^17.0.1",
|
79
79
|
"react-dom": "^17.0.1"
|
80
80
|
},
|
81
|
-
"gitHead": "
|
81
|
+
"gitHead": "8bb668d29361fae483ac3fde460bfc7e010417a6"
|
82
82
|
}
|