@blueking/ai-ui-sdk 0.1.19-beta.13 → 0.1.19-beta.15

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 (73) hide show
  1. package/dist/common/util.d.ts +6 -0
  2. package/dist/common/util.ts.js +16 -0
  3. package/dist/components/render-auto-height-textarea/index.vue.css +11 -11
  4. package/dist/components/render-auto-height-textarea/index.vue.js +1 -1
  5. package/dist/components/render-auto-refresh/index.vue.css +8 -8
  6. package/dist/components/render-auto-refresh/index.vue.js +1 -1
  7. package/dist/components/render-checkbox/index.vue.css +9 -9
  8. package/dist/components/render-checkbox/index.vue.js +1 -1
  9. package/dist/components/render-choose-tag/index.vue.css +7 -7
  10. package/dist/components/render-choose-tag/index.vue.js +1 -1
  11. package/dist/components/render-collapse/index.vue.css +2 -2
  12. package/dist/components/render-collapse/index.vue.js +1 -1
  13. package/dist/components/render-dataset/components/dataset-data-tool-icons/index.script.vue.js +1 -1
  14. package/dist/components/render-dataset/components/edit-dataset-data/index.vue.css +3 -3
  15. package/dist/components/render-dataset/components/edit-dataset-data/index.vue.js +1 -1
  16. package/dist/components/render-dataset/components/operation-record/index.vue.css +4 -4
  17. package/dist/components/render-dataset/components/operation-record/index.vue.js +1 -1
  18. package/dist/components/render-dataset/components/operation-record/table/index.vue.css +1 -1
  19. package/dist/components/render-dataset/components/operation-record/table/index.vue.js +1 -1
  20. package/dist/components/render-dataset/components/operation-record/view-op-result/index.vue.css +2 -2
  21. package/dist/components/render-dataset/components/operation-record/view-op-result/index.vue.js +1 -1
  22. package/dist/components/render-dataset/components/plus-dataset/index.script.vue.js.js +24 -6
  23. package/dist/components/render-dataset/components/plus-dataset/index.vue.css +2 -2
  24. package/dist/components/render-dataset/components/plus-dataset/index.vue.js +1 -1
  25. package/dist/components/render-dataset/components/plus-dataset-data/form/api.vue.css +2 -2
  26. package/dist/components/render-dataset/components/plus-dataset-data/form/api.vue.js +1 -1
  27. package/dist/components/render-dataset/components/plus-dataset-data/form/footer.vue.css +1 -1
  28. package/dist/components/render-dataset/components/plus-dataset-data/form/footer.vue.js +1 -1
  29. package/dist/components/render-dataset/components/plus-dataset-data/form/index.vue.css +2 -2
  30. package/dist/components/render-dataset/components/plus-dataset-data/form/index.vue.js +1 -1
  31. package/dist/components/render-dataset/components/review-dataset-data/index.vue.css +10 -10
  32. package/dist/components/render-dataset/components/review-dataset-data/index.vue.js +1 -1
  33. package/dist/components/render-dataset/components/search-dataset/index.script.vue.js.js +3 -26
  34. package/dist/components/render-dataset-detail-origin-data/index.vue.css +3 -3
  35. package/dist/components/render-dataset-detail-origin-data/index.vue.js +1 -1
  36. package/dist/components/render-dataset-list/components/header.script.vue.js.js +0 -1
  37. package/dist/components/render-dataset-list/components/main.vue.css +3 -3
  38. package/dist/components/render-dataset-list/components/main.vue.js +1 -1
  39. package/dist/components/render-dataset-list/components/table.script.vue.js.js +1 -3
  40. package/dist/components/render-dataset-list/index.vue.css +1 -1
  41. package/dist/components/render-dataset-list/index.vue.js +1 -1
  42. package/dist/components/render-file-card/index.vue.css +11 -11
  43. package/dist/components/render-file-card/index.vue.js +1 -1
  44. package/dist/components/render-file-type-icon/index.vue.css +5 -5
  45. package/dist/components/render-file-type-icon/index.vue.js +1 -1
  46. package/dist/components/render-header/index.vue.css +3 -3
  47. package/dist/components/render-header/index.vue.js +1 -1
  48. package/dist/components/render-like/index.vue.css +5 -5
  49. package/dist/components/render-like/index.vue.js +1 -1
  50. package/dist/components/render-router-tab/index.vue.css +3 -3
  51. package/dist/components/render-router-tab/index.vue.js +1 -1
  52. package/dist/components/render-search-empty/index.script.vue.js.js +61 -0
  53. package/dist/components/render-search-empty/index.vue.d.ts +20 -0
  54. package/dist/components/render-search-empty/index.vue.js +3 -0
  55. package/dist/components/render-t-table/index.script.vue.js +311 -0
  56. package/dist/components/render-t-table/index.vue.css +160 -0
  57. package/dist/components/render-t-table/index.vue.d.ts +57 -0
  58. package/dist/components/render-t-table/index.vue.js +5 -0
  59. package/dist/components/render-tag-tree/index.script.vue.js.js +5 -2
  60. package/dist/components/render-tag-tree/index.vue.css +7 -7
  61. package/dist/components/render-tag-tree/index.vue.js +1 -1
  62. package/dist/components/render-tree/index.script.vue.js +17 -8
  63. package/dist/components/render-tree/index.vue.d.ts +4 -1
  64. package/dist/components.d.ts +3 -1
  65. package/dist/components.ts.js +3 -1
  66. package/dist/hooks/use-t-table.d.ts +39 -0
  67. package/dist/hooks/use-t-table.ts.js +86 -0
  68. package/dist/hooks.d.ts +1 -0
  69. package/dist/hooks.ts.js +1 -0
  70. package/dist/http/helper/dataset.ts.js +3 -1
  71. package/dist/types/common.d.ts +17 -0
  72. package/dist/types/dataset.d.ts +2 -0
  73. package/package.json +2 -1
@@ -25,17 +25,19 @@ var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, gener
25
25
  step((generator = generator.apply(thisArg, _arguments || [])).next());
26
26
  });
27
27
  };
28
- import { useSlots as _useSlots, defineComponent as _defineComponent, Fragment as _Fragment2, resolveComponent as _resolveComponent2, createVNode as _createVNode } from 'vue';
29
- import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode } from "vue";
28
+ import { useSlots as _useSlots, defineComponent as _defineComponent, Fragment as _Fragment2, resolveComponent as _resolveComponent, createVNode as _createVNode } from 'vue';
29
+ import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from "vue";
30
30
  const _hoisted_1 = {
31
31
  class: "g-scrollbar"
32
32
  };
33
33
  import { RightShape } from 'bkui-vue/lib/icon';
34
34
  import { toRef } from 'vue';
35
+ import RenderEmpty from '../render-search-empty/index.vue.js';
35
36
  import { usePermission } from '../../hooks/use-permission.ts.js';
36
37
  export default /*@__PURE__*/ _defineComponent({
37
38
  props: {
38
39
  data: {},
40
+ search: {},
39
41
  apiPrefix: {},
40
42
  spaceId: {},
41
43
  selectedId: {},
@@ -58,13 +60,17 @@ export default /*@__PURE__*/ _defineComponent({
58
60
  "update:loadingIds",
59
61
  "update:openedIds",
60
62
  "select",
61
- "async-load"
63
+ "async-load",
64
+ "update:search"
62
65
  ],
63
66
  setup (__props, { emit: __emit }) {
64
67
  const props = __props;
65
68
  const emits = __emit;
66
69
  const slots = _useSlots();
67
70
  const { handleMouseEnter, handleMouseMove, handleMouseLeave, handleMouseClick } = usePermission(props.apiPrefix, toRef(props, 'spaceId'), '#4d4f56');
71
+ const handleUpdateSearch = (value)=>{
72
+ emits('update:search', value);
73
+ };
68
74
  // 点击树组件
69
75
  const handleClickTreeItem = (data)=>__awaiter(this, void 0, void 0, function*() {
70
76
  const allowed = yield props.chooseCheck(data);
@@ -110,7 +116,7 @@ export default /*@__PURE__*/ _defineComponent({
110
116
  "onMouseleave": ()=>handleMouseLeave(),
111
117
  "onClick": ()=>handleMouseClick(()=>handleClickTreeItem(data), props.isNodeHasPermission(data), props.permissionActionIds, data.id)
112
118
  }, [
113
- props.isNodeHasChildren(data) ? ((_a = props.loadingIds) === null || _a === void 0 ? void 0 : _a.includes(data[props.keyName])) ? _createVNode(_resolveComponent2("bk-loading"), {
119
+ props.isNodeHasChildren(data) ? ((_a = props.loadingIds) === null || _a === void 0 ? void 0 : _a.includes(data[props.keyName])) ? _createVNode(_resolveComponent("bk-loading"), {
114
120
  "class": "shape-icon",
115
121
  "mode": "spin",
116
122
  "size": "mini"
@@ -138,7 +144,6 @@ export default /*@__PURE__*/ _defineComponent({
138
144
  ]);
139
145
  };
140
146
  return (_ctx, _cache)=>{
141
- const _component_bk_exception = _resolveComponent("bk-exception");
142
147
  return _openBlock(), _createElementBlock("ul", _hoisted_1, [
143
148
  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(props.data, (item)=>{
144
149
  return _openBlock(), _createBlock(renderTreeItem, {
@@ -149,13 +154,17 @@ export default /*@__PURE__*/ _defineComponent({
149
154
  "data"
150
155
  ]);
151
156
  }), 128 /* KEYED_FRAGMENT */ )),
152
- props.data.length <= 0 ? (_openBlock(), _createBlock(_component_bk_exception, {
157
+ props.data.length <= 0 ? (_openBlock(), _createBlock(RenderEmpty, {
153
158
  key: 0,
154
159
  description: "暂无数据",
155
160
  type: "empty",
156
161
  scene: "part",
157
- class: "g-exception"
158
- })) : _createCommentVNode("v-if", true)
162
+ class: "g-exception",
163
+ search: props.search,
164
+ "onUpdate:search": handleUpdateSearch
165
+ }, null, 8 /* PROPS */ , [
166
+ "search"
167
+ ])) : _createCommentVNode("v-if", true)
159
168
  ]);
160
169
  };
161
170
  }
@@ -1,11 +1,12 @@
1
1
  import { type VNode } from 'vue';
2
- declare const __VLS_export: <T extends {
2
+ declare const __VLS_export: <S, T extends {
3
3
  id?: number;
4
4
  name?: string;
5
5
  children?: T[];
6
6
  }>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
7
7
  props: __VLS_PrettifyLocal<{
8
8
  data: Array<T>;
9
+ search?: S;
9
10
  apiPrefix: string;
10
11
  spaceId?: string;
11
12
  selectedId?: string | number;
@@ -18,6 +19,7 @@ declare const __VLS_export: <T extends {
18
19
  isNodeHasPermission?: (data: T) => boolean;
19
20
  } & {
20
21
  onSelect?: (node: T) => any;
22
+ "onUpdate:search"?: (value: S) => any;
21
23
  "onUpdate:selectedId"?: (value: string | number) => any;
22
24
  "onUpdate:loadingIds"?: (value: (string | number)[]) => any;
23
25
  "onUpdate:openedIds"?: (value: (string | number)[]) => any;
@@ -32,6 +34,7 @@ declare const __VLS_export: <T extends {
32
34
  (event: "update:selectedId", value: string | number): void;
33
35
  (event: "update:loadingIds" | "update:openedIds", value: (string | number)[]): void;
34
36
  (event: "select" | "async-load", node: T): void;
37
+ (event: "update:search", value: S): void;
35
38
  };
36
39
  }>) => import("vue").VNode & {
37
40
  __ctx?: Awaited<typeof __VLS_setup>;
@@ -10,7 +10,9 @@ import RenderDatasetList from './components/render-dataset-list/index.vue';
10
10
  import RenderHeader from './components/render-header/index.vue';
11
11
  import RenderLike from './components/render-like/index.vue';
12
12
  import RenderMarkdown from './components/render-markdown/mark-down';
13
+ import RenderSearchEmpty from './components/render-search-empty/index.vue';
13
14
  import RenderSearchSelect from './components/render-search-select/index.vue';
15
+ import RenderTTable from './components/render-t-table/index.vue';
14
16
  import RenderTagTree from './components/render-tag-tree/index.vue';
15
17
  import RenderTree from './components/render-tree/index.vue';
16
- export { renderAuthDialog, RenderAutoRefresh, RenderDataset, RenderDatasetDetail, RenderDatasetList, RenderHeader, RenderAutoHeightTextarea, RenderDatasetDetailOriginData, RenderCheckbox, RenderChooseTag, RenderMarkdown, RenderSearchSelect, RenderLike, RenderTree, RenderTagTree, };
18
+ export { renderAuthDialog, RenderAutoRefresh, RenderDataset, RenderDatasetDetail, RenderDatasetList, RenderHeader, RenderAutoHeightTextarea, RenderDatasetDetailOriginData, RenderCheckbox, RenderChooseTag, RenderMarkdown, RenderSearchEmpty, RenderSearchSelect, RenderLike, RenderTree, RenderTagTree, RenderTTable, };
@@ -11,7 +11,9 @@ import RenderDatasetList from './components/render-dataset-list/index.vue.js';
11
11
  import RenderHeader from './components/render-header/index.vue.js';
12
12
  import RenderLike from './components/render-like/index.vue.js';
13
13
  import RenderMarkdown from './components/render-markdown/mark-down.ts.js';
14
+ import RenderSearchEmpty from './components/render-search-empty/index.vue.js';
14
15
  import RenderSearchSelect from './components/render-search-select/index.vue.js';
16
+ import RenderTTable from './components/render-t-table/index.vue.js';
15
17
  import RenderTagTree from './components/render-tag-tree/index.vue.js';
16
18
  import RenderTree from './components/render-tree/index.vue.js';
17
- export { renderAuthDialog, RenderAutoRefresh, RenderDataset, RenderDatasetDetail, RenderDatasetList, RenderHeader, RenderAutoHeightTextarea, RenderDatasetDetailOriginData, RenderCheckbox, RenderChooseTag, RenderMarkdown, RenderSearchSelect, RenderLike, RenderTree, RenderTagTree };
19
+ export { renderAuthDialog, RenderAutoRefresh, RenderDataset, RenderDatasetDetail, RenderDatasetList, RenderHeader, RenderAutoHeightTextarea, RenderDatasetDetailOriginData, RenderCheckbox, RenderChooseTag, RenderMarkdown, RenderSearchEmpty, RenderSearchSelect, RenderLike, RenderTree, RenderTagTree, RenderTTable };
@@ -0,0 +1,39 @@
1
+ import type { IPagination, IPaginationParam, IPaginationParamApi, ISortParam, ITTableSort } from '@/types/common';
2
+ import { OrderMethod } from '@/types/enum';
3
+ interface IPaginatedApiResult<T> extends IPaginationParamApi {
4
+ results?: T;
5
+ count?: number;
6
+ }
7
+ export declare const useTTable: <T>() => {
8
+ isLoading: import("vue").Ref<boolean, boolean>;
9
+ initHook: (callBackFn: (search: IPaginationParam & ISortParam) => Promise<IPaginatedApiResult<T> | T>, isShowPagination: boolean) => void;
10
+ sort: import("vue").Ref<{
11
+ descending?: OrderMethod;
12
+ sortKey?: string;
13
+ }, ITTableSort | {
14
+ descending?: OrderMethod;
15
+ sortKey?: string;
16
+ }>;
17
+ handleSortChange: (config: {
18
+ descending: boolean;
19
+ }, { col }: {
20
+ col: {
21
+ sortKey: string;
22
+ };
23
+ }) => void;
24
+ triggerApi: () => void;
25
+ pagination: import("vue").Ref<{
26
+ current: number;
27
+ limit: number;
28
+ count: number;
29
+ }, IPagination | {
30
+ current: number;
31
+ limit: number;
32
+ count: number;
33
+ }>;
34
+ resetPagination: () => void;
35
+ tableData: [[] | T] extends [import("vue").Ref<any, any>] ? import("@vue/shared").IfAny<import("vue").Ref<any, any> & ([] | T), import("vue").Ref<import("vue").Ref<any, any> & ([] | T), import("vue").Ref<any, any> & ([] | T)>, import("vue").Ref<any, any> & ([] | T)> : import("vue").Ref<[] | import("vue").UnwrapRef<T>, [] | T | import("vue").UnwrapRef<T>>;
36
+ handlePageChange: (current: number) => void;
37
+ handlePageSizeChange: (pageSize: number) => void;
38
+ };
39
+ export {};
@@ -0,0 +1,86 @@
1
+ import { ref } from 'vue';
2
+ import { OrderMethod } from '../types/enum.ts.js';
3
+ export const useTTable = ()=>{
4
+ const isLoading = ref(false);
5
+ const isPagination = ref(false);
6
+ let callBack;
7
+ const sort = ref({});
8
+ const tableData = ref([]);
9
+ const pagination = ref({
10
+ current: 1,
11
+ limit: 20,
12
+ count: 0
13
+ });
14
+ // 更新数据
15
+ const triggerApi = ()=>{
16
+ if (!callBack) {
17
+ console.error('先调用initHook初始化回调函数');
18
+ return;
19
+ }
20
+ isLoading.value = true;
21
+ callBack({
22
+ page: pagination.value.current,
23
+ pageSize: pagination.value.limit,
24
+ orderBy: sort.value.sortKey,
25
+ orderMethod: sort.value.descending
26
+ }).then((apiResult)=>{
27
+ if (isPagination.value) {
28
+ tableData.value = apiResult.results;
29
+ pagination.value.count = apiResult.count;
30
+ } else {
31
+ tableData.value = apiResult;
32
+ }
33
+ }).finally(()=>{
34
+ isLoading.value = false;
35
+ });
36
+ };
37
+ const initHook = (callBackFn, isShowPagination)=>{
38
+ callBack = callBackFn;
39
+ isPagination.value = isShowPagination;
40
+ };
41
+ // sortKey 为必传
42
+ const handleSortChange = (config, { col })=>{
43
+ if (!config) {
44
+ sort.value = {};
45
+ return triggerApi();
46
+ }
47
+ const { descending } = config;
48
+ sort.value = {
49
+ sortKey: col.sortKey,
50
+ descending: descending ? OrderMethod.Desc : OrderMethod.Asc
51
+ };
52
+ triggerApi();
53
+ };
54
+ // 分页器 当前页变化处理
55
+ const handlePageChange = (current)=>{
56
+ if (pagination.value.current === current) return;
57
+ pagination.value.current = current;
58
+ triggerApi();
59
+ };
60
+ // 分页器 页码大小变化处理
61
+ const handlePageSizeChange = (pageSize)=>{
62
+ if (pagination.value.limit === pageSize) return;
63
+ pagination.value.limit = pageSize;
64
+ pagination.value.current = 1;
65
+ triggerApi();
66
+ };
67
+ const resetPagination = ()=>{
68
+ pagination.value = {
69
+ current: 1,
70
+ limit: 20,
71
+ count: 0
72
+ };
73
+ };
74
+ return {
75
+ isLoading,
76
+ initHook,
77
+ sort,
78
+ handleSortChange,
79
+ triggerApi,
80
+ pagination,
81
+ resetPagination,
82
+ tableData,
83
+ handlePageChange,
84
+ handlePageSizeChange
85
+ };
86
+ };
package/dist/hooks.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from './hooks/use-permission';
8
8
  export * from './hooks/use-think';
9
9
  export * from './hooks/use-reference-doc';
10
10
  export * from './hooks/use-member-http';
11
+ export * from './hooks/use-t-table';
package/dist/hooks.ts.js CHANGED
@@ -8,3 +8,4 @@ export * from './hooks/use-permission.ts.js';
8
8
  export * from './hooks/use-think.ts.js';
9
9
  export * from './hooks/use-reference-doc.ts.js';
10
10
  export * from './hooks/use-member-http.ts.js';
11
+ export * from './hooks/use-t-table.ts.js';
@@ -172,6 +172,7 @@ import { transferResourcePermission } from './permission.ts.js';
172
172
  return _object_spread_props(_object_spread({}, transferIPaginationParamToIPaginationParamApi(data), transferISortParamToISortParamApi(data)), {
173
173
  company_name: data === null || data === void 0 ? void 0 : data.companyName,
174
174
  dataset_name: data === null || data === void 0 ? void 0 : data.datasetName,
175
+ dataset_code: data === null || data === void 0 ? void 0 : data.datasetCode,
175
176
  type: data === null || data === void 0 ? void 0 : data.type,
176
177
  component_ids: data === null || data === void 0 ? void 0 : data.componentIds,
177
178
  created_by: data === null || data === void 0 ? void 0 : data.createdBy,
@@ -180,7 +181,8 @@ import { transferResourcePermission } from './permission.ts.js';
180
181
  tag_name: data === null || data === void 0 ? void 0 : data.tagName,
181
182
  group_type: data === null || data === void 0 ? void 0 : data.groupType,
182
183
  tag_id: data === null || data === void 0 ? void 0 : data.tagId,
183
- source_type: data === null || data === void 0 ? void 0 : data.sourceType
184
+ source_type: data === null || data === void 0 ? void 0 : data.sourceType,
185
+ updated_by: data === null || data === void 0 ? void 0 : data.updatedBy
184
186
  });
185
187
  };
186
188
  /**
@@ -1,3 +1,4 @@
1
+ import type { PrimaryTableCol } from 'tdesign-vue-next';
1
2
  import { OrderMethod } from './enum';
2
3
  export interface ITab {
3
4
  id?: string | number;
@@ -5,6 +6,22 @@ export interface ITab {
5
6
  number?: number;
6
7
  children?: ITab[];
7
8
  }
9
+ export interface IPagination {
10
+ current: number;
11
+ limit: number;
12
+ count: number;
13
+ }
14
+ export interface ITTableSort {
15
+ descending?: OrderMethod;
16
+ sortKey?: string;
17
+ }
18
+ export interface ITTableCol<T> extends Omit<PrimaryTableCol<T>, 'type' | 'align' | 'fixed' | 'sortKey'> {
19
+ defaultShow?: boolean;
20
+ sortKey?: string;
21
+ type?: string;
22
+ fixed?: string;
23
+ align?: string;
24
+ }
8
25
  export interface IPaginationParam {
9
26
  page?: number;
10
27
  pageSize?: number;
@@ -64,6 +64,7 @@ export interface IDatasetListParam extends IPaginationParam, ISortParam {
64
64
  groupType?: GroupType;
65
65
  tagId?: number;
66
66
  sourceType?: DatasetDataSourceType;
67
+ updatedBy?: string;
67
68
  }
68
69
  export interface IDatasetListParamApi extends IPaginationParamApi, ISortParamApi {
69
70
  component_ids?: string;
@@ -79,6 +80,7 @@ export interface IDatasetListParamApi extends IPaginationParamApi, ISortParamApi
79
80
  group_type?: GroupType;
80
81
  tag_id?: number;
81
82
  source_type?: DatasetDataSourceType;
83
+ updated_by?: string;
82
84
  }
83
85
  export interface IDatasetApiGuideApi {
84
86
  api_endpoint: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueking/ai-ui-sdk",
3
- "version": "0.1.19-beta.13",
3
+ "version": "0.1.19-beta.15",
4
4
  "description": "蓝鲸AI UI SDK",
5
5
  "main": "dist/main.js",
6
6
  "types": "dist/main.d.ts",
@@ -71,6 +71,7 @@
71
71
  "license": "ISC",
72
72
  "peerDependencies": {
73
73
  "bkui-vue": "*",
74
+ "tdesign-vue-next": "^1.16.0",
74
75
  "dayjs": "^1.11.13",
75
76
  "vue": "^3.5.13",
76
77
  "vue-router": "^4.5.1",