linkmore-design 1.0.70 → 1.0.73

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 (36) hide show
  1. package/dist/Approval/index.d.ts +1 -0
  2. package/dist/Approval/type.d.ts +1 -1
  3. package/dist/CardTable/utils.d.ts +1 -1
  4. package/dist/ImageViewer/wrapeer/Container.d.ts +4 -0
  5. package/dist/ImageViewer/wrapeer/Wrapper.d.ts +4 -0
  6. package/dist/Row/index.d.ts +1 -1
  7. package/dist/index.d.ts +22 -2
  8. package/dist/index.umd.js +2371 -305
  9. package/dist/index.umd.min.js +6 -6
  10. package/es/Approval/index.d.ts +1 -0
  11. package/es/CardTable/table/TableContainer.js +6 -8
  12. package/es/ImageViewer/LmImageViewer.js +11 -1
  13. package/es/ImageViewer/style/index.css +3 -209
  14. package/es/ImageViewer/wrapeer/Container.d.ts +4 -0
  15. package/es/ImageViewer/wrapeer/Container.js +13 -0
  16. package/es/ImageViewer/wrapeer/Root.js +7 -2
  17. package/es/ImageViewer/wrapeer/Wrapper.d.ts +4 -0
  18. package/es/ImageViewer/wrapeer/Wrapper.js +14 -0
  19. package/es/LmFilter/wrapper/FilterRoot.js +1 -1
  20. package/es/Row/index.d.ts +1 -1
  21. package/es/index.d.ts +22 -2
  22. package/es/index.js +12 -2
  23. package/lib/Approval/index.d.ts +1 -0
  24. package/lib/CardTable/table/TableContainer.js +6 -8
  25. package/lib/ImageViewer/LmImageViewer.js +11 -1
  26. package/lib/ImageViewer/style/index.css +3 -209
  27. package/lib/ImageViewer/wrapeer/Container.d.ts +4 -0
  28. package/lib/ImageViewer/wrapeer/Container.js +23 -0
  29. package/lib/ImageViewer/wrapeer/Root.js +10 -2
  30. package/lib/ImageViewer/wrapeer/Wrapper.d.ts +4 -0
  31. package/lib/ImageViewer/wrapeer/Wrapper.js +25 -0
  32. package/lib/LmFilter/wrapper/FilterRoot.js +1 -1
  33. package/lib/Row/index.d.ts +1 -1
  34. package/lib/index.d.ts +22 -2
  35. package/lib/index.js +83 -3
  36. package/package.json +1 -1
@@ -1,211 +1,5 @@
1
- .lm_upload_wrapper {
2
- display: flex;
3
- flex-wrap: wrap;
4
- gap: 8px;
5
- }
6
- .lm_upload_wrapper .lm_upload_core {
7
- display: inline-flex;
8
- vertical-align: middle;
9
- }
10
- .lm_upload_wrapper .lm_upload_core .lm_upload_core_picture {
11
- font-size: 12px;
12
- display: inline-flex;
13
- align-items: center;
14
- justify-content: center;
15
- text-align: center;
16
- border: 1px solid var(--color-15);
17
- background-color: var(--color-2);
18
- transition: all 0.3s;
19
- cursor: pointer;
20
- }
21
- .lm_upload_wrapper .lm_upload_core .lm_upload_core_picture:hover {
22
- border-color: var(--primary-color);
23
- }
24
- .lm_upload_wrapper .lm_upload_core .lm_upload_core_picture .lm_upload_core_picture_action {
25
- width: 100%;
26
- text-align: center;
27
- padding: var(--gap);
28
- }
29
- .lm_upload_wrapper .lm_upload_core .lm_upload_core_picture .lm_upload_core_picture_action .action_plus {
30
- color: var(--color-85);
31
- }
32
- .lm_upload_wrapper .lm_upload_core .lm_upload_core_picture .lm_upload_core_picture_action .tip {
33
- color: var(--color-45);
34
- margin-top: var(--gap);
35
- }
36
- .lm_upload_wrapper .lm_upload_progress {
37
- width: 100%;
38
- height: 2px;
39
- background-color: var(--color-4);
40
- border-radius: 20px;
41
- margin: 10px 0;
42
- }
43
- .lm_upload_wrapper .lm_upload_progress .line {
44
- width: 0%;
45
- height: 2px;
46
- transition: 0.3;
47
- background-color: var(--primary-color);
48
- border-radius: 20px;
49
- }
50
- .lm_upload_wrapper .lm_upload_item {
51
- vertical-align: middle;
52
- }
53
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text {
54
- display: flex;
55
- align-items: center;
56
- justify-content: space-between;
57
- gap: var(--gap);
58
- width: 100%;
59
- height: 22px;
60
- padding: 0 6px;
61
- transition: 0.3s;
62
- cursor: pointer;
63
- }
64
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text:hover {
65
- background-color: var(--color-2);
66
- }
67
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_left {
68
- flex: 1;
69
- display: flex;
70
- align-items: center;
71
- gap: var(--gap);
72
- }
73
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_left .prefix {
74
- font-size: 14px;
75
- color: var(--color-45);
76
- transition: 0.3s;
77
- }
78
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_left .lm_upload_item_name {
79
- flex: 1;
80
- font-size: 14px;
81
- color: var(--primary-color);
82
- transition: 0.3s;
83
- }
84
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_right {
85
- display: inline-flex;
86
- }
87
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_right .action_delete {
88
- width: 24px;
89
- text-align: center;
90
- color: var(--color-45);
91
- transition: 0.3s;
92
- }
93
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_right .action_delete .anticon {
94
- font-size: 14px;
95
- }
96
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text .text_right .action_delete:hover {
97
- color: var(--primary-color);
98
- }
99
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_text.error {
100
- color: var(--error-color);
101
- }
102
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card {
103
- position: relative;
104
- display: inline-flex;
105
- align-items: center;
106
- justify-content: center;
107
- text-align: center;
108
- border: 1px solid var(--color-15);
109
- border-radius: 2px;
110
- padding: var(--gap);
111
- transition: all 0.3s;
112
- cursor: pointer;
113
- }
114
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_thumb {
115
- width: 100%;
116
- }
117
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_thumb .anticon {
118
- font-size: 34px;
119
- color: var(--color-45);
120
- }
121
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_thumb img {
122
- object-fit: contain;
123
- }
124
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_error .lm_upload_item_name {
125
- font-size: 12px;
126
- text-overflow: ellipsis;
127
- overflow: hidden;
128
- margin-top: 8px;
129
- }
130
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_mask {
131
- position: absolute;
132
- inset: 8px;
133
- display: flex;
134
- align-items: center;
135
- justify-content: center;
136
- background-color: rgba(0, 0, 0, 0.5);
137
- opacity: 0;
138
- transition: 0.3s;
1
+ .lm_image_viwer_wrapper {
2
+ position: fixed;
3
+ inset: 0;
139
4
  z-index: 1;
140
5
  }
141
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card .lm_upload_item_mask .lm_upload_item_action {
142
- display: flex;
143
- align-items: center;
144
- gap: var(--gap);
145
- color: #fff;
146
- }
147
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card:hover .lm_upload_item_mask {
148
- opacity: 1;
149
- }
150
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card.error {
151
- border-color: var(--error-color);
152
- }
153
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card.error .lm_upload_item_mask {
154
- display: none;
155
- }
156
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_card.error .lm_upload_item_error {
157
- color: var(--error-color);
158
- }
159
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture {
160
- display: flex;
161
- align-items: center;
162
- justify-content: space-between;
163
- gap: var(--gap);
164
- width: 100%;
165
- border: 1px solid var(--color-15);
166
- border-radius: 2px;
167
- padding: var(--gap);
168
- transition: 0.3s;
169
- cursor: pointer;
170
- }
171
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture:hover {
172
- border-color: var(--primary-color);
173
- }
174
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_left {
175
- flex: 1;
176
- display: inline-flex;
177
- align-items: center;
178
- gap: var(--gap);
179
- }
180
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_left .lm_upload_item_thumb {
181
- width: 48px;
182
- }
183
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_left .lm_upload_item_thumb img {
184
- width: 100%;
185
- max-height: 80px;
186
- }
187
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_left .lm_upload_item_name {
188
- flex: 1;
189
- font-size: 14px;
190
- color: var(--primary-color);
191
- transition: 0.3s;
192
- }
193
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_right {
194
- display: flex;
195
- align-items: center;
196
- }
197
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_right .action_delete {
198
- width: 24px;
199
- text-align: center;
200
- color: var(--color-45);
201
- transition: 0.3s;
202
- }
203
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_right .action_delete .anticon {
204
- font-size: 14px;
205
- }
206
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture .picture_right .action_delete:hover {
207
- color: var(--primary-color);
208
- }
209
- .lm_upload_wrapper .lm_upload_item.lm_upload_item_picture.error {
210
- color: var(--error-color);
211
- }
@@ -0,0 +1,4 @@
1
+ declare const LmImageViewerContainer: ({ instance }: {
2
+ instance: any;
3
+ }) => JSX.Element;
4
+ export default LmImageViewerContainer;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ // 根文件 => 参数聚合
13
+ var LmImageViewerContainer = function LmImageViewerContainer(_ref) {
14
+ var instance = _ref.instance;
15
+ var viisble = instance.viisble;
16
+ if (!viisble) return null;
17
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
18
+ className: "lm_image_viewer_container"
19
+ }, "container"));
20
+ };
21
+
22
+ var _default = LmImageViewerContainer;
23
+ exports.default = _default;
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
3
5
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
@@ -9,13 +11,19 @@ exports.default = void 0;
9
11
 
10
12
  var _react = _interopRequireWildcard(require("react"));
11
13
 
14
+ var _Wrapper = _interopRequireDefault(require("./Wrapper"));
15
+
12
16
  // 根文件 => 参数聚合
13
17
  var LmImageViewerRoot = function LmImageViewerRoot(props, ref) {
14
- // 向外暴露出的方法
18
+ // 组件实例
19
+ var instance = Object.assign({}, props); // 向外暴露出的方法
20
+
15
21
  (0, _react.useImperativeHandle)(ref, function () {
16
22
  return {};
17
23
  });
18
- return /*#__PURE__*/_react.default.createElement("div", null, "ImageViewer");
24
+ return /*#__PURE__*/_react.default.createElement(_Wrapper.default, {
25
+ instance: instance
26
+ });
19
27
  };
20
28
 
21
29
  var _default = /*#__PURE__*/(0, _react.forwardRef)(LmImageViewerRoot);
@@ -0,0 +1,4 @@
1
+ declare const LmImageViewerWrapper: ({ instance }: {
2
+ instance: any;
3
+ }) => JSX.Element;
4
+ export default LmImageViewerWrapper;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _Container = _interopRequireDefault(require("./Container"));
13
+
14
+ // 根文件 => 参数聚合
15
+ var LmImageViewerWrapper = function LmImageViewerWrapper(_ref) {
16
+ var instance = _ref.instance;
17
+ return /*#__PURE__*/_react.default.createElement("div", {
18
+ className: "lm_image_viwer_wrapper"
19
+ }, /*#__PURE__*/_react.default.createElement(_Container.default, {
20
+ instance: instance
21
+ }));
22
+ };
23
+
24
+ var _default = LmImageViewerWrapper;
25
+ exports.default = _default;
@@ -165,7 +165,7 @@ var LmFilterRoot = function LmFilterRoot(props, ref) {
165
165
  props: props
166
166
  }),
167
167
  CoreMethods = _useCoreOptions.CoreMethods,
168
- RefMethods = _useCoreOptions.RefMethods; // 组件示例
168
+ RefMethods = _useCoreOptions.RefMethods; // 组件实例
169
169
 
170
170
 
171
171
  var instance = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), CoreMethods), RefMethods), {}, {
@@ -1,3 +1,3 @@
1
1
  import { Row, RowProps } from '../Grid';
2
- export { RowProps };
2
+ export type { RowProps };
3
3
  export default Row;
package/lib/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export { default as Empty } from './Empty';
12
12
  export { default as EnlargeImg } from './EnlargeImg';
13
13
  export { default as Filter } from './Filter';
14
14
  export { default as LmFilter } from './LmFilter';
15
+ export { default as CardTable } from './CardTable';
15
16
  export { default as Icon } from './Icon';
16
17
  export { default as IconFont } from './IconFont';
17
18
  export { default as IconSelect } from './IconSelect';
@@ -33,7 +34,6 @@ export { default as Radio } from './Radio';
33
34
  export { default as Select } from './Select';
34
35
  export { default as Space } from './Space';
35
36
  export { default as TableRender } from './TableRender';
36
- export { default as Tree } from './Tree';
37
37
  export { default as UploadOss } from './UploadOss';
38
38
  export { default as VirtualList } from './VirtualList';
39
39
  export { default as Tag } from './Tag';
@@ -65,7 +65,7 @@ export { default as Grid } from './Grid';
65
65
  export { default as Row } from './Row';
66
66
  export type { RowProps } from './Row';
67
67
  export { default as Col } from './Col';
68
- export type { ColProps } from './Col';
68
+ export type { ColProps, ColSize } from './Col';
69
69
  export { default as Layout } from './Layout';
70
70
  export type { LayoutProps, SiderProps } from './Layout';
71
71
  export { default as Steps } from './Steps';
@@ -85,3 +85,23 @@ export { default as Carousel } from './Carousel';
85
85
  export type { CarouselProps } from './Carousel';
86
86
  export { default as Alert } from './Alert';
87
87
  export type { AlertProps } from './Alert';
88
+ export { default as Segmented } from './Segmented';
89
+ export type { SegmentedProps } from './Segmented';
90
+ export { default as Approval } from './Approval';
91
+ export type { ApprovalType, StatusType, IApprovalItemProps, IApprovalProps } from './Approval';
92
+ export { default as TimePicker } from './TimePicker';
93
+ export type { TimeRangePickerProps, TimePickerProps } from './TimePicker';
94
+ export { default as Collapse } from './Collapse';
95
+ export type { CollapseProps } from './Collapse';
96
+ export { default as Comment } from './Comment';
97
+ export type { CommentProps } from './Comment';
98
+ export { default as Statistic } from './Statistic';
99
+ export type { StatisticProps } from './Statistic';
100
+ export { default as Timeline } from './Timeline';
101
+ export type { TimelineProps } from './Timeline';
102
+ export { default as Tree } from './Tree';
103
+ export type { ITreeProps } from './Tree';
104
+ export { default as Popconfirm } from './Popconfirm';
105
+ export type { PopconfirmProps } from './Popconfirm';
106
+ export { default as Progress } from './Progress';
107
+ export type { ProgressProps } from './Progress';
package/lib/index.js CHANGED
@@ -11,6 +11,12 @@ Object.defineProperty(exports, "Alert", {
11
11
  return _Alert.default;
12
12
  }
13
13
  });
14
+ Object.defineProperty(exports, "Approval", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _Approval.default;
18
+ }
19
+ });
14
20
  Object.defineProperty(exports, "AutoComplete", {
15
21
  enumerable: true,
16
22
  get: function get() {
@@ -41,6 +47,12 @@ Object.defineProperty(exports, "Card", {
41
47
  return _Card.default;
42
48
  }
43
49
  });
50
+ Object.defineProperty(exports, "CardTable", {
51
+ enumerable: true,
52
+ get: function get() {
53
+ return _CardTable.default;
54
+ }
55
+ });
44
56
  Object.defineProperty(exports, "Carousel", {
45
57
  enumerable: true,
46
58
  get: function get() {
@@ -71,6 +83,18 @@ Object.defineProperty(exports, "Col", {
71
83
  return _Col.default;
72
84
  }
73
85
  });
86
+ Object.defineProperty(exports, "Collapse", {
87
+ enumerable: true,
88
+ get: function get() {
89
+ return _Collapse.default;
90
+ }
91
+ });
92
+ Object.defineProperty(exports, "Comment", {
93
+ enumerable: true,
94
+ get: function get() {
95
+ return _Comment.default;
96
+ }
97
+ });
74
98
  Object.defineProperty(exports, "CustomTableOption", {
75
99
  enumerable: true,
76
100
  get: function get() {
@@ -263,6 +287,12 @@ Object.defineProperty(exports, "PopTable", {
263
287
  return _PopTable.default;
264
288
  }
265
289
  });
290
+ Object.defineProperty(exports, "Popconfirm", {
291
+ enumerable: true,
292
+ get: function get() {
293
+ return _Popconfirm.default;
294
+ }
295
+ });
266
296
  Object.defineProperty(exports, "Popover", {
267
297
  enumerable: true,
268
298
  get: function get() {
@@ -275,6 +305,12 @@ Object.defineProperty(exports, "ProTable", {
275
305
  return _ProTable.default;
276
306
  }
277
307
  });
308
+ Object.defineProperty(exports, "Progress", {
309
+ enumerable: true,
310
+ get: function get() {
311
+ return _Progress.default;
312
+ }
313
+ });
278
314
  Object.defineProperty(exports, "Radio", {
279
315
  enumerable: true,
280
316
  get: function get() {
@@ -293,6 +329,12 @@ Object.defineProperty(exports, "Row", {
293
329
  return _Row.default;
294
330
  }
295
331
  });
332
+ Object.defineProperty(exports, "Segmented", {
333
+ enumerable: true,
334
+ get: function get() {
335
+ return _Segmented.default;
336
+ }
337
+ });
296
338
  Object.defineProperty(exports, "Select", {
297
339
  enumerable: true,
298
340
  get: function get() {
@@ -317,6 +359,12 @@ Object.defineProperty(exports, "Spin", {
317
359
  return _Spin.default;
318
360
  }
319
361
  });
362
+ Object.defineProperty(exports, "Statistic", {
363
+ enumerable: true,
364
+ get: function get() {
365
+ return _Statistic.default;
366
+ }
367
+ });
320
368
  Object.defineProperty(exports, "Steps", {
321
369
  enumerable: true,
322
370
  get: function get() {
@@ -353,6 +401,18 @@ Object.defineProperty(exports, "Tag", {
353
401
  return _Tag.default;
354
402
  }
355
403
  });
404
+ Object.defineProperty(exports, "TimePicker", {
405
+ enumerable: true,
406
+ get: function get() {
407
+ return _TimePicker.default;
408
+ }
409
+ });
410
+ Object.defineProperty(exports, "Timeline", {
411
+ enumerable: true,
412
+ get: function get() {
413
+ return _Timeline.default;
414
+ }
415
+ });
356
416
  Object.defineProperty(exports, "Tooltip", {
357
417
  enumerable: true,
358
418
  get: function get() {
@@ -442,6 +502,8 @@ var _Filter = _interopRequireDefault(require("./Filter"));
442
502
 
443
503
  var _LmFilter = _interopRequireDefault(require("./LmFilter"));
444
504
 
505
+ var _CardTable = _interopRequireDefault(require("./CardTable"));
506
+
445
507
  var _Icon = _interopRequireDefault(require("./Icon"));
446
508
 
447
509
  var _IconFont = _interopRequireDefault(require("./IconFont"));
@@ -482,8 +544,6 @@ var _Space = _interopRequireDefault(require("./Space"));
482
544
 
483
545
  var _TableRender = _interopRequireDefault(require("./TableRender"));
484
546
 
485
- var _Tree = _interopRequireDefault(require("./Tree"));
486
-
487
547
  var _UploadOss = _interopRequireDefault(require("./UploadOss"));
488
548
 
489
549
  var _VirtualList = _interopRequireDefault(require("./VirtualList"));
@@ -548,4 +608,24 @@ var _Calendar = _interopRequireDefault(require("./Calendar"));
548
608
 
549
609
  var _Carousel = _interopRequireDefault(require("./Carousel"));
550
610
 
551
- var _Alert = _interopRequireDefault(require("./Alert"));
611
+ var _Alert = _interopRequireDefault(require("./Alert"));
612
+
613
+ var _Segmented = _interopRequireDefault(require("./Segmented"));
614
+
615
+ var _Approval = _interopRequireDefault(require("./Approval"));
616
+
617
+ var _TimePicker = _interopRequireDefault(require("./TimePicker"));
618
+
619
+ var _Collapse = _interopRequireDefault(require("./Collapse"));
620
+
621
+ var _Comment = _interopRequireDefault(require("./Comment"));
622
+
623
+ var _Statistic = _interopRequireDefault(require("./Statistic"));
624
+
625
+ var _Timeline = _interopRequireDefault(require("./Timeline"));
626
+
627
+ var _Tree = _interopRequireDefault(require("./Tree"));
628
+
629
+ var _Popconfirm = _interopRequireDefault(require("./Popconfirm"));
630
+
631
+ var _Progress = _interopRequireDefault(require("./Progress"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "linkmore-design",
3
- "version": "1.0.70",
3
+ "version": "1.0.73",
4
4
  "author": {
5
5
  "name": "nowthen",
6
6
  "email": "rnlvwyx@gmail.com"