cb-biz-ui 1.1.4

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 (76) hide show
  1. package/README.md +44 -0
  2. package/components/cb-address-list/cb-address-list.vue +133 -0
  3. package/components/cb-cart-bar/cb-cart-bar.vue +52 -0
  4. package/components/cb-cart-bar-button/cb-cart-bar-button.vue +36 -0
  5. package/components/cb-cart-bar-icon/cb-cart-bar-icon.vue +48 -0
  6. package/components/cb-category/cb-category.vue +163 -0
  7. package/components/cb-delivery-address/cb-delivery-address.vue +48 -0
  8. package/components/cb-discount-coupon/cb-discount-coupon.vue +124 -0
  9. package/components/cb-discount-coupon/interface.d.ts +32 -0
  10. package/components/cb-discount-coupon/utils.ts +23 -0
  11. package/components/cb-drag-list/cb-drag-list.vue +868 -0
  12. package/components/cb-drag-list/drag.wxs +366 -0
  13. package/components/cb-form-classify/cb-form-classify.vue +208 -0
  14. package/components/cb-form-select/cb-form-select.vue +250 -0
  15. package/components/cb-goods-card/cb-goods-card.vue +251 -0
  16. package/components/cb-goods-sku/cb-goods-sku.vue +270 -0
  17. package/components/cb-header/cb-header.vue +113 -0
  18. package/components/cb-inventory/cb-inventory.vue +161 -0
  19. package/components/cb-manage-goods-item/cb-manage-goods-item.vue +95 -0
  20. package/components/cb-money-input/cb-money-input.vue +90 -0
  21. package/components/cb-offline-stores-coupon/cb-offline-stores-coupon.vue +96 -0
  22. package/components/cb-offline-stores-coupon/interface.d.ts +29 -0
  23. package/components/cb-offline-stores-coupon/utils.ts +10 -0
  24. package/components/cb-order-card/cb-order-card.vue +187 -0
  25. package/components/cb-order-goods/cb-order-goods.vue +64 -0
  26. package/components/cb-order-info/cb-order-info.vue +112 -0
  27. package/components/cb-order-remark/cb-order-remark.vue +121 -0
  28. package/components/cb-shipping-coupon/cb-shipping-coupon.vue +112 -0
  29. package/components/cb-shipping-coupon/interface.d.ts +32 -0
  30. package/components/cb-shipping-coupon/utils.ts +23 -0
  31. package/components/cb-shopping-cart/cb-shopping-cart.vue +230 -0
  32. package/components/cb-shopping-cart-tabbar/cb-shopping-cart-tabbar.vue +147 -0
  33. package/components/cb-sort-icon/cb-sort-icon.vue +70 -0
  34. package/components/cb-store-location/cb-store-location.vue +85 -0
  35. package/components/cb-unit-select/cb-unit-select.vue +161 -0
  36. package/components/cb-vertical-nav/cb-vertical-nav.vue +102 -0
  37. package/components/interface/types.d.ts +246 -0
  38. package/index.js +39 -0
  39. package/index.scss +23 -0
  40. package/libs/config/index.js +20 -0
  41. package/libs/css/address-list.scss +143 -0
  42. package/libs/css/cart-bar-icon.scss +34 -0
  43. package/libs/css/category.scss +83 -0
  44. package/libs/css/common.scss +0 -0
  45. package/libs/css/delivery-address.scss +46 -0
  46. package/libs/css/discount-coupon.scss +237 -0
  47. package/libs/css/form-classify.scss +98 -0
  48. package/libs/css/form-select.scss +98 -0
  49. package/libs/css/global/color.scss +156 -0
  50. package/libs/css/global/common.scss +0 -0
  51. package/libs/css/global/style.h5.scss +8 -0
  52. package/libs/css/global/style.mp.scss +0 -0
  53. package/libs/css/global/style.nvue.scss +3 -0
  54. package/libs/css/global/style.vue.scss +0 -0
  55. package/libs/css/goods-card.scss +154 -0
  56. package/libs/css/inventory.scss +74 -0
  57. package/libs/css/manage-goods-item.scss +76 -0
  58. package/libs/css/offline-stores-coupon.scss +133 -0
  59. package/libs/css/order-goods.scss +63 -0
  60. package/libs/css/order-info.scss +89 -0
  61. package/libs/css/order-remark.scss +68 -0
  62. package/libs/css/shipping-coupon.scss +151 -0
  63. package/libs/css/shopping-cart.scss +50 -0
  64. package/libs/css/sort-icon.scss +34 -0
  65. package/libs/css/store-location.scss +66 -0
  66. package/libs/css/theme.json +10 -0
  67. package/libs/css/unit-select.scss +62 -0
  68. package/libs/css/vertical-nav.scss +27 -0
  69. package/libs/utils/deep-clone.js +36 -0
  70. package/libs/utils/deep-merge.js +37 -0
  71. package/libs/utils/guid.js +42 -0
  72. package/libs/utils/index.js +6 -0
  73. package/libs/utils/time-format.js +54 -0
  74. package/libs/utils/validate.js +238 -0
  75. package/package.json +24 -0
  76. package/theme.scss +39 -0
@@ -0,0 +1,63 @@
1
+ .order-goods {
2
+ display: flex;
3
+ align-items: center;
4
+ padding: 20rpx 0;
5
+ line-height: 1;
6
+ .image {
7
+ .goods_image {
8
+ // width: 116rpx;
9
+ // height: 116rpx;
10
+ }
11
+ }
12
+ .goods-info {
13
+ width: 100%;
14
+ display: flex;
15
+ flex-wrap: wrap;
16
+ align-content: space-between;
17
+ font-size: 28rpx;
18
+ color: #333;
19
+ padding: 5rpx 0;
20
+ box-sizing: border-box;
21
+ flex: 1;
22
+ margin-left: 20rpx;
23
+ .name {
24
+ font-weight: 600;
25
+ line-height: 1.2;
26
+ }
27
+ .specifications {
28
+ width: 100%;
29
+ display: flex;
30
+ justify-content: space-between;
31
+ margin-top: 5rpx;
32
+ .num {
33
+ font-size: 24rpx;
34
+ color: #666666;
35
+ }
36
+ .price {
37
+ .platformPrice {
38
+ font-weight: 600;
39
+ width: 100%;
40
+ color: #ff524f;
41
+ font-size: 26rpx;
42
+ font-weight: 600;
43
+ letter-spacing: 1px;
44
+ text-align: right;
45
+ }
46
+ .only-marketPrice{
47
+ color: #333;
48
+ font-weight: 600;
49
+ font-size: 24rpx;
50
+ }
51
+ .marketPrice {
52
+ margin-top: 12rpx;
53
+ color: rgb(153, 153, 153);
54
+ font-size: 24rpx;
55
+ font-weight: 400;
56
+ letter-spacing: 1px;
57
+ text-align: right;
58
+ text-decoration-line: line-through;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,89 @@
1
+ .order-info {
2
+ line-height: 1;
3
+ background: #fff;
4
+ margin: 35rpx 0;
5
+ border-radius: 4rpx;
6
+ .header {
7
+ padding: 30rpx 36rpx;
8
+ font-size: 32rpx;
9
+ color: #333;
10
+ font-weight: 600;
11
+ border-bottom: 1px solid #eaeaea;
12
+ }
13
+ .order-info_content {
14
+ padding: 0 20rpx;
15
+ }
16
+
17
+ .price-list {
18
+ border-top: 1rpx solid #eaeaea;
19
+ font-size: 22rpx;
20
+ color: #666666;
21
+ padding-top: 15rpx;
22
+ .item {
23
+ width: 100%;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ .label {
28
+ display: flex;
29
+ align-items: center;
30
+ .icon {
31
+ width: 26rpx;
32
+ height: 26rpx;
33
+ margin-right: 7rpx;
34
+ }
35
+ }
36
+ .value {
37
+ font-weight: 600;
38
+ }
39
+ }
40
+ .active-class {
41
+ &:active {
42
+ opacity: 0.8;
43
+ }
44
+ }
45
+ .delivery {
46
+ margin-bottom: 20rpx;
47
+ .value {
48
+ color: #323232;
49
+ }
50
+ }
51
+ .goods-price {
52
+ margin-bottom: 25rpx;
53
+ .value {
54
+ color: #ff524f;
55
+ }
56
+ }
57
+ .discount-coupon {
58
+ .value {
59
+ display: flex;
60
+ align-items: center;
61
+ margin-right: -5rpx;
62
+ }
63
+ }
64
+ }
65
+ .count-price {
66
+ border-top: 1rpx solid #eaeaea;
67
+ font-size: 22rpx;
68
+ color: #666666;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: flex-end;
72
+ padding: 20rpx 0;
73
+ .item {
74
+ margin-left: 25rpx;
75
+ .name {
76
+ margin-right: 15rpx;
77
+ }
78
+ .value {
79
+ font-weight: 600;
80
+ color: #323232;
81
+ }
82
+ }
83
+ .discount-coupon {
84
+ .value {
85
+ color: #ff524f;
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,68 @@
1
+ .order-remark {
2
+ padding-top: 30rpx;
3
+ .order-remark_header {
4
+ padding: 0 30rpx;
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ font-size: 30rpx;
9
+ color: #333333;
10
+ font-weight: bold;
11
+ margin-bottom: 30rpx;
12
+ text-align: center;
13
+ position: relative;
14
+ .close {
15
+ position: absolute;
16
+ right: 40rpx;
17
+ &:active{
18
+ opacity: .8;
19
+ }
20
+ }
21
+ }
22
+ .content {
23
+ padding: 0 30rpx;
24
+ }
25
+ .tag-content {
26
+ margin-top: 20rpx;
27
+ padding: 0 30rpx;
28
+ .tip {
29
+ font-size: 26rpx;
30
+ color: #6d7278;
31
+ font-weight: 600;
32
+ margin-bottom: 20rpx;
33
+ }
34
+ .tag-box {
35
+ display: flex;
36
+ align-items: center;
37
+ flex-wrap: wrap;
38
+ .tag-item {
39
+ margin-left: 10rpx;
40
+ margin-bottom: 10rpx;
41
+ background: rgb(233, 233, 233);
42
+ border-radius: 14px;
43
+ font-size: 12px;
44
+ padding: 5px 10px;
45
+ margin-right: 10px;
46
+ margin-bottom: 10px;
47
+ cursor: pointer;
48
+ display: inline-block;
49
+ max-width: 100%;
50
+ &:active {
51
+ background: rgb(242, 20, 12);
52
+ color: #fff;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ .submit {
58
+ width: 100%;
59
+ margin-top: 30rpx;
60
+ box-sizing: border-box;
61
+ padding: 30rpx 0;
62
+ background: rgb(255, 255, 255);
63
+ box-shadow: 0 -4rpx 12rpx #0000000d;
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ }
68
+ }
@@ -0,0 +1,151 @@
1
+ .shipping-coupon {
2
+ line-height: 1;
3
+ display: flex;
4
+ width: 328rpx;
5
+ position: relative;
6
+
7
+ .background {
8
+ width: 100%;
9
+ height: 205rpx;
10
+ border-radius: 30rpx;
11
+
12
+ .coupon-title {
13
+ border-radius: 10rpx;
14
+ height: 91rpx;
15
+ margin: 0 39rpx;
16
+ text-align: center;
17
+ box-sizing: border-box;
18
+ padding-top: 22rpx;
19
+ margin-top: -25rpx;
20
+
21
+ .text {
22
+ font-size: 25rx;
23
+ font-weight: 600;
24
+ text-align: center;
25
+ }
26
+ }
27
+ }
28
+
29
+ .content {
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ align-items: center;
33
+ width: 100%;
34
+ height: 155rpx;
35
+ box-sizing: border-box;
36
+ padding: 13rpx 8rpx 9rpx 17rpx;
37
+ position: absolute;
38
+ top: 50rpx;
39
+ border-radius: 0rpx 0rpx 30rpx 30rpx;
40
+
41
+ .content-box {
42
+ width: 100%;
43
+ height: 80rpx;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: space-between;
47
+
48
+ .left {
49
+ height: 100%;
50
+ padding-top: 8rpx;
51
+ box-sizing: border-box;
52
+ flex: 1;
53
+ color: #fff;
54
+ font-size: 40rpx;
55
+ font-weight: 600;
56
+ }
57
+
58
+ .right {
59
+ display: flex;
60
+ align-items: center;
61
+ width: 120rpx;
62
+ height: 100%;
63
+ font-size: 20rpx;
64
+ font-weight: 600;
65
+
66
+ .button {
67
+ width: 120rpx;
68
+ height: 47rpx;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ font-size: 22rpx;
73
+ border-radius: 23.5rpx;
74
+ }
75
+ }
76
+ }
77
+
78
+ .validity {
79
+ display: flex;
80
+ align-items: center;
81
+ width: 100%;
82
+ font-size: 14rpx;
83
+
84
+ .date {
85
+ margin: 0 8rpx;
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ .red-card {
92
+ .background {
93
+ background: linear-gradient(135deg, rgb(81, 178, 252) 0%, rgb(28, 127, 249) 100%);
94
+
95
+ .coupon-title {
96
+ background: linear-gradient(135deg, rgb(231, 253, 255) 0%, rgb(227, 242, 255) 100%);
97
+
98
+ .text {
99
+ color: #333333;
100
+ }
101
+ }
102
+ }
103
+
104
+ .content {
105
+ background: linear-gradient(135deg, rgb(116, 213, 254), rgb(20, 119, 249) 100%);
106
+ box-shadow: 0px -2px 15px rgba(71, 169, 251, 0.5);
107
+
108
+ .content-box {
109
+ .left {
110
+ .money {
111
+ .type {
112
+ color: #fff;
113
+ }
114
+
115
+ .value {
116
+ color: #fff;
117
+ }
118
+ }
119
+
120
+ .rule {
121
+ color: #fff5db;
122
+ }
123
+ }
124
+
125
+ .right {
126
+ .button {
127
+ color: #197cf9;
128
+ background: linear-gradient(128.74deg,
129
+ rgb(255, 255, 255) 5.848%,
130
+ rgb(195, 233, 255) 94.497%);
131
+ box-shadow: 0px 2px 8px rgb(0, 107, 239);
132
+
133
+ &:active {
134
+ opacity: 0.8;
135
+ // box-shadow: 0px 0px 0px rgb(255, 46, 53);
136
+ }
137
+ }
138
+
139
+ .disabled {
140
+ background: rgb(178, 185, 192);
141
+ box-shadow: 0px 2px 8px rgb(0, 107, 239);
142
+ color: #ffffff;
143
+ }
144
+ }
145
+ }
146
+
147
+ .validity {
148
+ color: #fff5db;
149
+ }
150
+ }
151
+ }
@@ -0,0 +1,50 @@
1
+ .shopping-cart {
2
+ position: relative;
3
+ box-sizing: border-box;
4
+ height: 100%;
5
+ background-color: #fff;
6
+ .goods-card_box {
7
+ flex: 1;
8
+ }
9
+ .bottom-1px-border {
10
+ position: relative;
11
+ padding-bottom: 30rpx;
12
+ padding-top: 29rpx;
13
+ &:after {
14
+ content: ' ';
15
+ position: absolute;
16
+ transform-origin: center;
17
+ box-sizing: border-box;
18
+ pointer-events: none;
19
+ top: -50%;
20
+ left: -50%;
21
+ right: -50%;
22
+ bottom: -50%;
23
+ border: 0 solid #eaeaea;
24
+ transform: scale(0.5);
25
+ border-bottom-width: 1px;
26
+ }
27
+ }
28
+ .ui-mtop {
29
+ // margin-top: 24rpx;
30
+ }
31
+ .ui-cart-cell {
32
+ width: 100%;
33
+ border-radius: 12rpx;
34
+ // padding: 28rpx 0;
35
+ overflow: hidden;
36
+ }
37
+
38
+ .ui-goods-item {
39
+ display: flex;
40
+ padding: 0 29rpx;
41
+ box-sizing: border-box;
42
+ }
43
+
44
+ .ui-checkbox {
45
+ min-width: 50rpx;
46
+ display: flex;
47
+ align-items: center;
48
+ }
49
+
50
+ }
@@ -0,0 +1,34 @@
1
+ .sort-icon {
2
+ display: flex;
3
+ justify-content: center;
4
+ flex-wrap: wrap;
5
+ margin-left: 8rpx;
6
+ .icon {
7
+ width: 100%;
8
+ .up {
9
+ width: 0px;
10
+ height: 0px;
11
+ border-left: 5px solid transparent;
12
+ border-right: 5px solid transparent;
13
+ border-bottom: 5px solid #dcdcdc;
14
+ font-size: 0px;
15
+ line-height: 0px;
16
+ margin-bottom: 5rpx;
17
+ }
18
+ .down {
19
+ width: 0px;
20
+ height: 0px;
21
+ border-left: 5px solid transparent;
22
+ border-right: 5px solid transparent;
23
+ border-top: 5px solid #dcdcdc;
24
+ font-size: 0px;
25
+ line-height: 0px;
26
+ }
27
+ .up-actived {
28
+ border-bottom-color: rgb(58, 138, 251);
29
+ }
30
+ .down-actived {
31
+ border-top-color: rgb(58, 138, 251);
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,66 @@
1
+ .store-location {
2
+ background: #fff;
3
+ // margin: 0 38rpx;
4
+ border-radius: 4rpx;
5
+ overflow: hidden;
6
+ line-height: 1;
7
+ .header {
8
+ font-size: 32rpx;
9
+ font-weight: 600;
10
+ color: #333;
11
+ // border-bottom: 1rpx solid #eaeaea;
12
+ padding: 25rpx 36rpx;
13
+ }
14
+ .content {
15
+ display: flex;
16
+ align-items: center;
17
+ padding: 25rpx 36rpx;
18
+ padding-top: 0rpx;
19
+ padding-right: 79rpx;
20
+ color: #333;
21
+ font-size: 28rpx;
22
+ .logo {
23
+ .img {
24
+ width: 120rpx;
25
+ height: 120rpx;
26
+ border-radius: 50%;
27
+ margin-right: 20rpx;
28
+ }
29
+ }
30
+ .store-info {
31
+ // margin-left: 45rpx;
32
+ .store-header {
33
+ display: flex;
34
+ align-items: center;
35
+ margin-bottom: 15rpx;
36
+ .title {
37
+ font-size: 36rpx;
38
+ font-weight: 600;
39
+ color: #333;
40
+ margin-right: 19rpx;
41
+ }
42
+ .tag{
43
+ width: 98rpx;
44
+ flex-shrink: 0;
45
+ }
46
+ .tel {
47
+ width: 24rpx;
48
+ height: 24rpx;
49
+ margin-left: 23rpx;
50
+ }
51
+ }
52
+ .address-box {
53
+ width: 100%;
54
+ margin-bottom: 10rpx;
55
+ }
56
+ .address {
57
+ line-height: 1.3;
58
+ }
59
+ .address,
60
+ .time {
61
+ font-size: 24rpx;
62
+ color: #666666;
63
+ }
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "light": {
3
+ "navBgColor": "#f8f8f8",
4
+ "navTxtStyle": "black"
5
+ },
6
+ "dark": {
7
+ "navBgColor": "#292929",
8
+ "navTxtStyle": "white"
9
+ }
10
+ }
@@ -0,0 +1,62 @@
1
+ .unit-select {
2
+ line-height: 1;
3
+ height: 100%;
4
+ width: 100%;
5
+ .header {
6
+ width: 100%;
7
+ height: 90rpx;
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ position: relative;
12
+ border-bottom: 1px solid #e5e5e5;
13
+ font-size: 32rpx;
14
+ font-weight: 500;
15
+ color: #333;
16
+ .icon {
17
+ position: absolute;
18
+ left: 25rpx;
19
+ }
20
+ }
21
+ .content {
22
+ display: flex;
23
+ height: 100%;
24
+ font-size: 28rpx;
25
+ color: rgb(51, 51, 51);
26
+ .parent {
27
+ width: 220rpx;
28
+ height: 100%;
29
+ overflow-y: scroll;
30
+ border-right: 1rpx solid #e5e5e5;
31
+ .item {
32
+ width: 100%;
33
+ height: 100rpx;
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ background: rgb(241, 241, 241);
38
+ }
39
+ .actived {
40
+ background: #fff;
41
+ color: rgb(66, 107, 199);
42
+ }
43
+ }
44
+ .child {
45
+ height: 100%;
46
+ overflow-y: scroll;
47
+ flex: 1;
48
+ .item {
49
+ width: 100%;
50
+ height: 100rpx;
51
+ padding: 0 25rpx;
52
+ box-sizing: border-box;
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: space-between;
56
+ }
57
+ .actived {
58
+ color: rgb(66, 107, 199);
59
+ }
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,27 @@
1
+ .cate-gory {
2
+ width: 100%;
3
+ }
4
+
5
+ .cate-gory-item {
6
+ width: 100%;
7
+ height: 110rpx;
8
+ box-sizing: border-box;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ font-size: 26rpx;
13
+ font-weight: 400;
14
+ }
15
+
16
+ .active {
17
+ position: relative;
18
+ }
19
+
20
+ .active::before {
21
+ content: '';
22
+ position: absolute;
23
+ border-left: 3rpx solid #ff524f;
24
+ height: 110rpx;
25
+ left: 0;
26
+ }
27
+
@@ -0,0 +1,36 @@
1
+ // 判断arr是否为一个数组,返回一个bool值
2
+ function isArray(arr) {
3
+ return Object.prototype.toString.call(arr) === '[object Array]';
4
+ }
5
+
6
+ // 深度克隆
7
+ function deepClone(obj, cache = new WeakMap()) {
8
+ if (obj === null || typeof obj !== 'object') return obj;
9
+ if (cache.has(obj)) return cache.get(obj);
10
+ let clone;
11
+ if (obj instanceof Date) {
12
+ clone = new Date(obj.getTime());
13
+ } else if (obj instanceof RegExp) {
14
+ clone = new RegExp(obj);
15
+ } else if (obj instanceof Map) {
16
+ clone = new Map(
17
+ Array.from(obj, ([key, value]) => [key, deepClone(value, cache)])
18
+ );
19
+ } else if (obj instanceof Set) {
20
+ clone = new Set(Array.from(obj, (value) => deepClone(value, cache)));
21
+ } else if (Array.isArray(obj)) {
22
+ clone = obj.map((value) => deepClone(value, cache));
23
+ } else if (Object.prototype.toString.call(obj) === '[object Object]') {
24
+ clone = Object.create(Object.getPrototypeOf(obj));
25
+ cache.set(obj, clone);
26
+ for (const [key, value] of Object.entries(obj)) {
27
+ clone[key] = deepClone(value, cache);
28
+ }
29
+ } else {
30
+ clone = Object.assign({}, obj);
31
+ }
32
+ cache.set(obj, clone);
33
+ return clone;
34
+ }
35
+
36
+ export default deepClone;
@@ -0,0 +1,37 @@
1
+ import deepClone from './deep-clone';
2
+
3
+ // JS对象深度合并
4
+ function deepMerge(target = {}, source = {}) {
5
+ target = deepClone(target);
6
+ if (
7
+ typeof target !== 'object' ||
8
+ target === null ||
9
+ typeof source !== 'object' ||
10
+ source === null
11
+ )
12
+ return target;
13
+ const merged = Array.isArray(target)
14
+ ? target.slice()
15
+ : Object.assign({}, target);
16
+ for (const prop in source) {
17
+ if (!source.hasOwnProperty(prop)) continue;
18
+ const sourceValue = source[prop];
19
+ const targetValue = merged[prop];
20
+ if (sourceValue instanceof Date) {
21
+ merged[prop] = new Date(sourceValue);
22
+ } else if (sourceValue instanceof RegExp) {
23
+ merged[prop] = new RegExp(sourceValue);
24
+ } else if (sourceValue instanceof Map) {
25
+ merged[prop] = new Map(sourceValue);
26
+ } else if (sourceValue instanceof Set) {
27
+ merged[prop] = new Set(sourceValue);
28
+ } else if (typeof sourceValue === 'object' && sourceValue !== null) {
29
+ merged[prop] = deepMerge(targetValue, sourceValue);
30
+ } else {
31
+ merged[prop] = sourceValue;
32
+ }
33
+ }
34
+ return merged;
35
+ }
36
+
37
+ export default deepMerge;