@cloudbase/weda-ui 3.20.6 → 3.21.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.
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useState, useMemo, useImperativeHandle, forwardRef, } from 'react';
2
+ import { useEffect, useState, useMemo, useImperativeHandle, forwardRef } from 'react';
3
3
  import { ConfigProvider } from 'tea-component';
4
4
  import { Table } from './../../components';
5
5
  import classNames from '../../../../utils/classnames';
@@ -126,9 +126,7 @@ enablePagination = true, columnSelectType = 'select', defaultPageIndex = _defaul
126
126
  if ((isTableLoading && !isH5) || isNoDataSourceBind) {
127
127
  return [];
128
128
  }
129
- if (isTableLoading &&
130
- isH5 &&
131
- (queryParams === null || queryParams === void 0 ? void 0 : queryParams.pageIndex) === _defaultPageIndex) {
129
+ if (isTableLoading && isH5 && (queryParams === null || queryParams === void 0 ? void 0 : queryParams.pageIndex) === _defaultPageIndex) {
132
130
  return [];
133
131
  }
134
132
  return tableData;
@@ -153,15 +151,7 @@ enablePagination = true, columnSelectType = 'select', defaultPageIndex = _defaul
153
151
  showRelationWithTag: false,
154
152
  });
155
153
  return baseColumns === null || baseColumns === void 0 ? void 0 : baseColumns.map((i) => ({ ...i, isSort: true }));
156
- }, [
157
- isNoDataSourceBind,
158
- fieldsLoading,
159
- fields,
160
- columnSets,
161
- fixedFront,
162
- fixedEnd,
163
- isH5,
164
- ]);
154
+ }, [isNoDataSourceBind, fieldsLoading, fields, columnSets, fixedFront, fixedEnd, isH5]);
165
155
  // 可排序字段
166
156
  const sortColumns = getSortColumns({ fields, columnSets: columns });
167
157
  // 事件属性
@@ -221,7 +211,7 @@ enablePagination = true, columnSelectType = 'select', defaultPageIndex = _defaul
221
211
  const renderTable = () => {
222
212
  return (_jsx(Table, { events: events, emptyText: emptyText, isH5: isH5, isNoDataSourceBind: isNoDataSourceBind, className: `${tableClassList} modal-table`, recordKey: recordKey, currentSize: tableHightSize, defaultPageIndex: defaultPageIndex, defaultPageSize: defaultPageSize, sortColumns: sortColumns, enablePagination: !isH5 && enablePagination, columnSelectType: columnSelectType, columns: columns, records: tableRecords, sort: queryParams.sort, selectedKeys: [], onSelectChange: () => { }, isError: false, isLoading: isTableLoading, rowColor: rowColor, queryParams: queryParams, total: total, setColumns: undefined, onQueryChange: (query) => {
223
213
  setQueryParams({ ...queryParams, ...query });
224
- }, rowClick: () => { }, cellClick: () => { }, errorObj: errorObj }));
214
+ }, rowClick: () => { }, cellClick: () => { }, errorObj: errorObj, bottomTip: undefined }));
225
215
  };
226
216
  return (_jsx(ConfigProvider, { classPrefix: classPrefix, children: _jsx(EnumHoc, { fields: authFields, children: _jsx("div", { className: classNames(wrapClassList, className), style: style, id: id, children: renderTable() }) }) }));
227
217
  });
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- export declare const BaseTableCom: ({ events, recordKey, className, columns, setColumns, records, sortColumns, sort, onSelectChange, selectedKeys, rowColor, isError, errorObj, isLoading, queryParams, total, onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot, }: {
2
+ export declare const BaseTableCom: ({ events, recordKey, className, columns, setColumns, records, sortColumns, sort, onSelectChange, selectedKeys, rowColor, isError, errorObj, isLoading, queryParams, total, onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot, bottomTip, enableBottomTipSlot, }: {
3
3
  events: any;
4
4
  recordKey: any;
5
5
  className: any;
@@ -28,8 +28,10 @@ export declare const BaseTableCom: ({ events, recordKey, className, columns, set
28
28
  isH5: any;
29
29
  emptyText: any;
30
30
  __innerSlot?: React.ReactNode;
31
+ bottomTip: any;
32
+ enableBottomTipSlot?: boolean;
31
33
  }) => JSX.Element;
32
- export declare const BaseTable: React.MemoExoticComponent<({ events, recordKey, className, columns, setColumns, records, sortColumns, sort, onSelectChange, selectedKeys, rowColor, isError, errorObj, isLoading, queryParams, total, onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot, }: {
34
+ export declare const BaseTable: React.MemoExoticComponent<({ events, recordKey, className, columns, setColumns, records, sortColumns, sort, onSelectChange, selectedKeys, rowColor, isError, errorObj, isLoading, queryParams, total, onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot, bottomTip, enableBottomTipSlot, }: {
33
35
  events: any;
34
36
  recordKey: any;
35
37
  className: any;
@@ -58,4 +60,6 @@ export declare const BaseTable: React.MemoExoticComponent<({ events, recordKey,
58
60
  isH5: any;
59
61
  emptyText: any;
60
62
  __innerSlot?: React.ReactNode;
63
+ bottomTip: any;
64
+ enableBottomTipSlot?: boolean;
61
65
  }) => JSX.Element>;
@@ -34,7 +34,7 @@ const renderStatus = ({ isH5, status, isNoDataSourceBind, _emptyText, errorObj,
34
34
  // eslint-disable-next-line complexity
35
35
  export const BaseTableCom = ({ events, recordKey, className, columns, setColumns, records, sortColumns, sort, onSelectChange, selectedKeys, rowColor, isError, errorObj, isLoading, queryParams, total = defaultTotal,
36
36
  // refreshTable,
37
- onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot = (_jsx(_Fragment, {})), }) => {
37
+ onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageIndex, rowClick, cellClick, currentSize, isNoDataSourceBind, isH5, emptyText: _emptyText, __innerSlot = (_jsx(_Fragment, {})), bottomTip, enableBottomTipSlot = false, }) => {
38
38
  var _a;
39
39
  const inEditor = isInIde();
40
40
  const tableRef = useRef(null);
@@ -162,16 +162,19 @@ onQueryChange, enablePagination, columnSelectType, defaultPageSize, defaultPageI
162
162
  const showLoadingBottomTip = isLoading && (queryParams === null || queryParams === void 0 ? void 0 : queryParams.pageIndex) !== pageIndexSpan;
163
163
  const showAllDataBottomTip = (records === null || records === void 0 ? void 0 : records.length) === total && !isLoading && (records === null || records === void 0 ? void 0 : records.length) > miniPageSize;
164
164
  const bottomTipCompRender = () => {
165
- if (!isH5) {
166
- return false;
165
+ const shouldShowBottomTip = enableBottomTipSlot && !showStatus;
166
+ if (isH5) {
167
+ if (showLoadingBottomTip) {
168
+ return (_jsx(ConfigProvider, { classPrefix: "wedatea2td", children: _jsx("div", { className: `${classPrefix}-h5-table-loading-wrap ${classPrefix}-h5-table-loading-${currentSize}`, children: _jsx(LoadingTip, { className: "adaptation-table__loading", loadingText: '数据加载中,请稍候...' }) }) }));
169
+ }
170
+ if (!enableBottomTipSlot && showAllDataBottomTip) {
171
+ return (_jsx("div", { className: `${classPrefix}-h5-table-loading-wrap ${classPrefix}-h5-table-loading-${currentSize}`, children: _jsx("span", { children: "\u5DF2\u52A0\u8F7D\u5168\u90E8\u6570\u636E" }) }));
172
+ }
167
173
  }
168
- if (showLoadingBottomTip) {
169
- return (_jsx(ConfigProvider, { classPrefix: "wedatea2td", children: _jsx("div", { className: `${classPrefix}-h5-table-loading-wrap ${classPrefix}-h5-table-loading-${currentSize}`, children: _jsx(LoadingTip, { className: "adaptation-table__loading", loadingText: '数据加载中,请稍候...' }) }) }));
174
+ if (shouldShowBottomTip) {
175
+ return _jsx(_Fragment, { children: bottomTip });
170
176
  }
171
- if (showAllDataBottomTip) {
172
- return (_jsx("div", { className: `${classPrefix}-h5-table-loading-wrap ${classPrefix}-h5-table-loading-${currentSize}`, children: _jsx("span", { children: "\u5DF2\u52A0\u8F7D\u5168\u90E8\u6570\u636E" }) }));
173
- }
174
- return false;
177
+ return null;
175
178
  };
176
179
  const resetPadding = () => {
177
180
  var _a, _b;
@@ -15,6 +15,7 @@ export interface WdTableProps extends CommonPropsType, DataType {
15
15
  isMock?: boolean;
16
16
  multipleSelect: boolean;
17
17
  mockEmpty?: boolean;
18
+ row__bottom__slot?: React.ReactNode;
18
19
  __innerSlot?: React.ReactNode;
19
20
  }
20
21
  type TCompRef = {
@@ -74,7 +74,7 @@ export const WdTable = forwardRef(function TableComp(tableProps, ref) {
74
74
  isSupportMultipleSort = false, // 是否支持多字段排序
75
75
  sorter, // 排序规则
76
76
  __innerSlot, enableRelationTag = true, // 关联关系字段是否开启关联标签
77
- ...props } = tableProps;
77
+ enableBottomTipSlot = false, row__bottom__slot, ...props } = tableProps;
78
78
  const wList = convertWhere(props, supportManyRelated); // 查询参数
79
79
  const { classPrefix } = useConfig();
80
80
  const platform = usePlatform();
@@ -735,7 +735,7 @@ export const WdTable = forwardRef(function TableComp(tableProps, ref) {
735
735
  setOpenMobileFilter(true);
736
736
  }, enableRefreshBtn: enableRefreshBtn, enableTableHeightSizeBtn: enableTableHeightSizeBtn, enablePagination: enablePagination }) }))] })), isH5 && (enablePagination || enableRefreshBtn || enableTableHeightSizeBtn || hasFilterButton) && (_jsx(ToolBar, { hasFilterButton: hasFilterButton, total: total, refreshTable: onRefreshBtnClick, setTableHightSize: setTableHightSize, currentSize: tableHightSize, setOpenMobileFilter: () => {
737
737
  setOpenMobileFilter(true);
738
- }, enableRefreshBtn: enableRefreshBtn, enableTableHeightSizeBtn: enableTableHeightSizeBtn, enablePagination: enablePagination })), _jsx(Table, { events: events, emptyText: emptyText, isH5: isH5, isNoDataSourceBind: isNoDataSourceBind, className: tableClassList, recordKey: recordKey, currentSize: tableHightSize, defaultPageIndex: defaultPageIndex, defaultPageSize: defaultPageSize, sortColumns: sortColumns, enablePagination: !isH5 && enablePagination, columnSelectType: columnSelectType, columns: columns, setColumns: setColumns, records: tableRecords, sort: queryParams.sort, selectedKeys: selectedKeys, onSelectChange: onSelectChange, isLoading: isTableLoading, rowColor: rowColor, queryParams: queryParams, total: total, onQueryChange: onQueryChange, rowClick: rowClick, cellClick: cellClick, isError: errorStatus, errorObj: errorMsg, __innerSlot: __innerSlot }), isH5 && enableGlobalButton && !isNoDataSourceBind && (_jsx("div", { className: `${classPrefix}-h5-table-wrap-footer`, children: _jsx(GlobalButton, { classPrefix: classPrefix, slots: slots === null || slots === void 0 ? void 0 : slots.globalButton }) }))] }), _jsx(ImportFileModal, { columnSets: columnSets, dbName: dbName, datasourceTitle: datasourceTitle, fields: fields, setIsImportFileModalByApiVisible: setIsImportFileModalByApiVisible, isImportFileModalByApiVisible: isImportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible, refresh: refreshTable, supportManyRelated: supportManyRelated }), _jsx(ExportFileModal, { whereList: wList, fields: fields, columns: mapColumKey(columns), isExportFileModalByApiVisible: isExportFileModalByApiVisible, selectedKeys: selectedKeys, dbName: dbName, query: query, setIsExportFileModalByApiVisible: setIsExportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible, supportManyRelated: supportManyRelated }), _jsx(InOrOutRecordModal, { dbName: dbName, isInOrOutRecordModalVisible: isInOrOutRecordModalVisible, setIsImportFileModalByApiVisible: setIsImportFileModalByApiVisible, setIsExportFileModalByApiVisible: setIsExportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible }), isH5 && (_jsx(Modal, { overlayClassName: `${classPrefix}-h5-table-overlay`, className: `${classPrefix}-h5-table-option-modal-wrap`, disableCloseIcon: true, title: "\u64CD\u4F5C", visible: isMobileOptionVisible, outerRef: modalRef, events: {
738
+ }, enableRefreshBtn: enableRefreshBtn, enableTableHeightSizeBtn: enableTableHeightSizeBtn, enablePagination: enablePagination })), _jsx(Table, { events: events, emptyText: emptyText, isH5: isH5, isNoDataSourceBind: isNoDataSourceBind, className: tableClassList, recordKey: recordKey, currentSize: tableHightSize, defaultPageIndex: defaultPageIndex, defaultPageSize: defaultPageSize, sortColumns: sortColumns, enablePagination: !isH5 && enablePagination, columnSelectType: columnSelectType, columns: columns, setColumns: setColumns, records: tableRecords, sort: queryParams.sort, selectedKeys: selectedKeys, onSelectChange: onSelectChange, isLoading: isTableLoading, rowColor: rowColor, queryParams: queryParams, total: total, onQueryChange: onQueryChange, rowClick: rowClick, cellClick: cellClick, isError: errorStatus, errorObj: errorMsg, __innerSlot: __innerSlot, bottomTip: row__bottom__slot, enableBottomTipSlot: enableBottomTipSlot }), isH5 && enableGlobalButton && !isNoDataSourceBind && (_jsx("div", { className: `${classPrefix}-h5-table-wrap-footer`, children: _jsx(GlobalButton, { classPrefix: classPrefix, slots: slots === null || slots === void 0 ? void 0 : slots.globalButton }) }))] }), _jsx(ImportFileModal, { columnSets: columnSets, dbName: dbName, datasourceTitle: datasourceTitle, fields: fields, setIsImportFileModalByApiVisible: setIsImportFileModalByApiVisible, isImportFileModalByApiVisible: isImportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible, refresh: refreshTable, supportManyRelated: supportManyRelated }), _jsx(ExportFileModal, { whereList: wList, fields: fields, columns: mapColumKey(columns), isExportFileModalByApiVisible: isExportFileModalByApiVisible, selectedKeys: selectedKeys, dbName: dbName, query: query, setIsExportFileModalByApiVisible: setIsExportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible, supportManyRelated: supportManyRelated }), _jsx(InOrOutRecordModal, { dbName: dbName, isInOrOutRecordModalVisible: isInOrOutRecordModalVisible, setIsImportFileModalByApiVisible: setIsImportFileModalByApiVisible, setIsExportFileModalByApiVisible: setIsExportFileModalByApiVisible, setIsInOrOutRecordModalVisible: setIsInOrOutRecordModalVisible }), isH5 && (_jsx(Modal, { overlayClassName: `${classPrefix}-h5-table-overlay`, className: `${classPrefix}-h5-table-option-modal-wrap`, disableCloseIcon: true, title: "\u64CD\u4F5C", visible: isMobileOptionVisible, outerRef: modalRef, events: {
739
739
  close: () => {
740
740
  setIsMobileOptionVisible(false);
741
741
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/weda-ui",
3
- "version": "3.20.6",
3
+ "version": "3.21.0",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index",
6
6
  "miniprogram": "mpdist",
@@ -1,234 +0,0 @@
1
- {
2
- "$schema": "https://comp-public-replace-1303824488-cos.weda.tencent.com/schema/lcds_component.json",
3
- "data": {
4
- "properties": {
5
- "interval": {
6
- "title": "自动切换时间间隔(毫秒)",
7
- "default": 5000,
8
- "type": "number",
9
- "x-index": 1,
10
- "x-category": "基础属性",
11
- "description": "配置轮播图滚动的时间间隔,时间单位为ms"
12
- },
13
- "vertical": {
14
- "title": "纵向轮播",
15
- "default": false,
16
- "x-index": 2,
17
- "type": "boolean",
18
- "x-category": "基础属性",
19
- "description": "开启后,轮播的滚动方式将会由横向滚动变更为纵向滚动"
20
- },
21
- "autoplay": {
22
- "title": "自动切换",
23
- "default": true,
24
- "x-index": 3,
25
- "type": "boolean",
26
- "x-category": "基础属性",
27
- "description": "开启后,轮播图将会自动根据配置的时间间隔进行自动滚动,关闭后则轮播图仅支持通过点击锚点的方式进行切换"
28
- },
29
- "indicatorActiveColor": {
30
- "title": "锚点激活色",
31
- "x-index": 4,
32
- "type": "string",
33
- "x-component": "color",
34
- "default": "rgba(0, 0, 0, 0.9)",
35
- "x-category": "高级属性",
36
- "description": "更改锚点选中时的颜色"
37
- },
38
- "indicatorColor": {
39
- "title": "锚点颜色",
40
- "type": "string",
41
- "x-index": 5,
42
- "x-component": "color",
43
- "default": "rgba(200, 200, 200, 0.9)",
44
- "x-category": "高级属性",
45
- "description": "更改锚点普通状态下的颜色"
46
- },
47
- "duration": {
48
- "title": "滑动动画时长",
49
- "default": 500,
50
- "x-index": 6,
51
- "type": "number",
52
- "x-category": "高级属性",
53
- "description": "更改轮播图切换时的滑动动画时长"
54
- },
55
- "current": {
56
- "title": "当前所在滑块的 index",
57
- "default": 0,
58
- "x-index": 7,
59
- "type": "number",
60
- "x-category": "高级属性",
61
- "description": "更改轮播图的默认展示位置,0为默认展示第一张轮播图,以此类推"
62
- },
63
- "circular": {
64
- "title": "衔接滑动",
65
- "default": true,
66
- "type": "boolean",
67
- "x-index": 8,
68
- "x-category": "高级属性",
69
- "description": "更改轮播图切换时动画的滑动方式"
70
- },
71
- "indicatorDots": {
72
- "title": "导航锚点",
73
- "default": true,
74
- "type": "boolean",
75
- "x-index": 9,
76
- "x-category": "高级属性",
77
- "description": "开启/关闭轮播图锚点"
78
- },
79
- "layoutType": {
80
- "title": "渲染模式",
81
- "default": "normal",
82
- "type": "string",
83
- "x-index": 10,
84
- "x-category": "高级属性",
85
- "description": "渲染模式,小程序 Skyline 特有属性",
86
- "enum": [
87
- {
88
- "value": "normal",
89
- "label": "默认方式"
90
- },
91
- {
92
- "value": "stackLeft",
93
- "label": "左向堆叠"
94
- },
95
- {
96
- "value": "stackRight",
97
- "label": "右向堆叠"
98
- },
99
- {
100
- "value": "tinder",
101
- "label": "滑动卡片"
102
- },
103
- {
104
- "value": "transformer",
105
- "label": "过渡动画"
106
- }
107
- ],
108
- "x-linkages": [
109
- {
110
- "type": "value:visible",
111
- "target": "transformType",
112
- "condition": "{{$self.value=='transformer'}}"
113
- }
114
- ],
115
- "x-platforms": [
116
- "MP"
117
- ]
118
- },
119
- "transformType": {
120
- "title": "指定动画类型",
121
- "default": "scaleAndFade",
122
- "type": "string",
123
- "x-index": 11,
124
- "x-category": "高级属性",
125
- "description": "layout-type 为 transformer 时指定动画类型,小程序 Skyline 特有属性",
126
- "enum": [
127
- {
128
- "value": "scaleAndFade",
129
- "label": "scaleAndFade"
130
- },
131
- {
132
- "value": "accordion",
133
- "label": "accordion"
134
- },
135
- {
136
- "value": "threeD",
137
- "label": "threeD"
138
- },
139
- {
140
- "value": "zoomIn",
141
- "label": "zoomIn"
142
- },
143
- {
144
- "value": "zoomOut",
145
- "label": "zoomOut"
146
- },
147
- {
148
- "value": "deepthPage",
149
- "label": "deepthPage"
150
- }
151
- ],
152
- "x-platforms": [
153
- "MP"
154
- ]
155
- },
156
- "previousMargin": {
157
- "title": "前边距",
158
- "type": "string",
159
- "default": "0px",
160
- "x-index": 12,
161
- "x-category": "高级属性",
162
- "description": "前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值",
163
- "x-platforms": [
164
- "MP"
165
- ]
166
- },
167
- "nextMargin": {
168
- "title": "后边距",
169
- "type": "string",
170
- "default": "0px",
171
- "x-index": 13,
172
- "x-category": "高级属性",
173
- "description": "后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值。skyline 于 3.5.1 版本支持",
174
- "x-platforms": [
175
- "MP"
176
- ]
177
- },
178
- "easingFunction": {
179
- "title": "缓动动画类型",
180
- "type": "string",
181
- "default": "default",
182
- "x-index": 14,
183
- "x-category": "高级属性",
184
- "description": "指定 swiper 切换缓动动画类型",
185
- "x-platforms": [
186
- "MP"
187
- ],
188
- "enum": [
189
- {
190
- "value": "default",
191
- "label": "默认缓动函数"
192
- },
193
- {
194
- "value": "linear",
195
- "label": "线性动画"
196
- },
197
- {
198
- "value": "easeInCubic",
199
- "label": "缓入动画"
200
- },
201
- {
202
- "value": "easeOutCubic",
203
- "label": "缓出动画"
204
- },
205
- {
206
- "value": "easeInOutCubic",
207
- "label": "缓入缓出动画"
208
- }
209
- ]
210
- }
211
- }
212
- },
213
- "events": [
214
- {
215
- "name": "change",
216
- "title": "切换"
217
- }
218
- ],
219
- "meta": {
220
- "title": "轮播容器",
221
- "description": "用于快速在页面搭建轮播图展示效果,并支持轮播图的跳转、播放配置。",
222
- "category": "布局",
223
- "categoryOrder": 200,
224
- "componentOrder": 90,
225
- "figureIcon": "../figureIcons/Swiper.svg",
226
- "icon": "../icons/Swiper.svg",
227
- "propertyPanelTips": "轮播容器组件在小程序侧使用时,建议给组件设置一个高度,否则按照小程序swiper组件默认高度渲染"
228
- },
229
- "configMeta": {
230
- "docsUrl": "https://docs.cloudbase.net/lowcode/components/wedaUI/src/docs/compsdocs/grid/Swiper"
231
- },
232
- "isContainer": true,
233
- "mpOrigin": "swiper"
234
- }