clxx 3.0.1 → 3.0.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 (55) hide show
  1. package/AGENTS.md +49 -3
  2. package/README.md +6 -3
  3. package/build/Alert/style.js +15 -14
  4. package/build/CarouselNotice/style.js +2 -1
  5. package/build/CitySelect/data.d.ts +1 -1
  6. package/build/CitySelect/data.js +2277 -1674
  7. package/build/CitySelect/index.d.ts +2 -1
  8. package/build/CitySelect/index.js +35 -9
  9. package/build/CitySelect/style.js +52 -48
  10. package/build/Container/index.js +21 -1
  11. package/build/DatePicker/style.d.ts +1 -1
  12. package/build/DatePicker/style.js +39 -35
  13. package/build/Indicator/index.js +2 -1
  14. package/build/Loading/Wrapper.js +3 -2
  15. package/build/Loading/style.js +7 -6
  16. package/build/MapLocationSelection/buildSelectedLocation.d.ts +16 -0
  17. package/build/MapLocationSelection/buildSelectedLocation.js +123 -0
  18. package/build/MapLocationSelection/createProvider.d.ts +8 -0
  19. package/build/MapLocationSelection/createProvider.js +33 -0
  20. package/build/MapLocationSelection/getLocation.d.ts +8 -0
  21. package/build/MapLocationSelection/getLocation.js +112 -0
  22. package/build/MapLocationSelection/index.d.ts +16 -0
  23. package/build/MapLocationSelection/index.js +985 -0
  24. package/build/MapLocationSelection/loader.amap.d.ts +48 -0
  25. package/build/MapLocationSelection/loader.amap.js +125 -0
  26. package/build/MapLocationSelection/loader.bmap.d.ts +8 -0
  27. package/build/MapLocationSelection/loader.bmap.js +60 -0
  28. package/build/MapLocationSelection/provider.amap.d.ts +38 -0
  29. package/build/MapLocationSelection/provider.amap.js +659 -0
  30. package/build/MapLocationSelection/provider.bmap.d.ts +36 -0
  31. package/build/MapLocationSelection/provider.bmap.js +837 -0
  32. package/build/MapLocationSelection/provider.d.ts +45 -0
  33. package/build/MapLocationSelection/provider.js +10 -0
  34. package/build/MapLocationSelection/style.d.ts +4 -0
  35. package/build/MapLocationSelection/style.js +442 -0
  36. package/build/MapLocationSelection/types.d.ts +29 -0
  37. package/build/MapLocationSelection/types.js +22 -0
  38. package/build/MapLocationSelection/userMarker.d.ts +2 -0
  39. package/build/MapLocationSelection/userMarker.js +95 -0
  40. package/build/RegionPicker/data.js +974 -992
  41. package/build/RegionPicker/index.d.ts +3 -2
  42. package/build/RegionPicker/index.js +29 -10
  43. package/build/RegionPicker/style.js +54 -49
  44. package/build/ScrollView/style.js +5 -4
  45. package/build/Toast/style.js +6 -5
  46. package/build/index.d.ts +3 -0
  47. package/build/index.js +8 -2
  48. package/build/utils/rem.d.ts +1 -0
  49. package/build/utils/rem.js +48 -0
  50. package/package.json +2 -2
  51. package/test/src/city-select/index.jsx +28 -15
  52. package/test/src/index/index.jsx +5 -0
  53. package/test/src/index.jsx +1 -0
  54. package/test/src/map-location-selection/index.jsx +192 -0
  55. package/test/src/region-picker/index.jsx +29 -21
@@ -0,0 +1,192 @@
1
+ import { showMapLocationSelection, getLocation } from "@";
2
+
3
+ const AMAP_KEY = "9e93b7084bb3da8d2094c02dc4221d47";
4
+ // JSAPI v2.0 调用 PlaceSearch / Geocoder / AutoComplete 等服务类接口必须配置安全密钥
5
+ const AMAP_SECURITY_JS_CODE = "d57bb5e049555d04e0dabcd7557ce5e2";
6
+
7
+ const BMAP_AK = "YS5En8FGCXQnAt65nAXn5LOUP5ANRRQy";
8
+
9
+ const reportSelected = (loc) => {
10
+ console.log("选择了位置:", loc);
11
+ const region = [loc.province, loc.city, loc.district]
12
+ .filter(Boolean)
13
+ .join(" / ");
14
+ const codes = [loc.provinceCode, loc.cityCode, loc.districtCode]
15
+ .filter(Boolean)
16
+ .join(" / ");
17
+ alert(
18
+ `已选择:${loc.name || "(无名称)"}\n` +
19
+ `地址:${loc.address}\n` +
20
+ `经纬度:${loc.longitude.toFixed(6)}, ${loc.latitude.toFixed(6)}\n` +
21
+ `行政区划:${region || "(未返回)"}\n` +
22
+ `行政区划码:${codes || "(未返回)"}`,
23
+ );
24
+ };
25
+
26
+ // 调用函数式 getLocation,返回值与组件 onSelect 完全同结构(共享
27
+ // buildSelectedLocation 拼装),用 reportSelected 弹同样的展示框。
28
+ const reportError = (err) => {
29
+ console.error("getLocation 失败:", err);
30
+ alert(`定位失败:${err?.message || err}`);
31
+ };
32
+
33
+ export default function Index() {
34
+ return (
35
+ <div
36
+ style={{
37
+ display: "flex",
38
+ flexDirection: "column",
39
+ gap: "0.2rem",
40
+ padding: "0.3rem",
41
+ }}
42
+ >
43
+ <button
44
+ onClick={() => {
45
+ showMapLocationSelection({
46
+ amapKey: AMAP_KEY,
47
+ securityJsCode: AMAP_SECURITY_JS_CODE,
48
+ onSelect: reportSelected,
49
+ onClose: () => {
50
+ console.log("关闭了地图选址(高德)");
51
+ },
52
+ });
53
+ }}
54
+ >
55
+ 打开地图选址(高德)
56
+ </button>
57
+
58
+ <button
59
+ onClick={() => {
60
+ showMapLocationSelection({
61
+ amapKey: AMAP_KEY,
62
+ securityJsCode: AMAP_SECURITY_JS_CODE,
63
+ initialCity: "上海",
64
+ // GCJ02 上海人民广场
65
+ initialCenter: [121.473667, 31.230525],
66
+ primary: "#07c160",
67
+ onSelect: reportSelected,
68
+ });
69
+ }}
70
+ >
71
+ 打开地图选址(高德 - 上海,绿色主题)
72
+ </button>
73
+
74
+ <button
75
+ onClick={() => {
76
+ showMapLocationSelection({
77
+ provider: "bmap",
78
+ bmapAk: BMAP_AK,
79
+ onSelect: reportSelected,
80
+ onClose: () => {
81
+ console.log("关闭了地图选址(百度)");
82
+ },
83
+ });
84
+ }}
85
+ >
86
+ 打开地图选址(百度)
87
+ </button>
88
+
89
+ <button
90
+ onClick={() => {
91
+ showMapLocationSelection({
92
+ provider: "bmap",
93
+ bmapAk: BMAP_AK,
94
+ // BD09 上海人民广场
95
+ initialCenter: [121.479675, 31.236397],
96
+ primary: "#07c160",
97
+ onSelect: reportSelected,
98
+ });
99
+ }}
100
+ >
101
+ 打开地图选址(百度 - 上海,绿色主题)
102
+ </button>
103
+
104
+ {/* 函数式 getLocation:不弹窗、直接拿一份 SelectedLocation。
105
+ 数据格式与上方 reportSelected 完全一致,复用同一个展示弹框。 */}
106
+ <button
107
+ onClick={() => {
108
+ getLocation({
109
+ amapKey: AMAP_KEY,
110
+ securityJsCode: AMAP_SECURITY_JS_CODE,
111
+ })
112
+ .then(reportSelected)
113
+ .catch(reportError);
114
+ }}
115
+ >
116
+ getLocation(高德 - 默认,禁用 IP 兜底)
117
+ </button>
118
+
119
+ <button
120
+ onClick={() => {
121
+ getLocation({
122
+ amapKey: AMAP_KEY,
123
+ securityJsCode: AMAP_SECURITY_JS_CODE,
124
+ allowIpFallback: true,
125
+ })
126
+ .then(reportSelected)
127
+ .catch(reportError);
128
+ }}
129
+ >
130
+ getLocation(高德 - 允许 IP 兜底)
131
+ </button>
132
+
133
+ <button
134
+ onClick={() => {
135
+ getLocation({
136
+ provider: "bmap",
137
+ bmapAk: BMAP_AK,
138
+ })
139
+ .then(reportSelected)
140
+ .catch(reportError);
141
+ }}
142
+ >
143
+ getLocation(百度 - 默认,禁用 IP 兜底)
144
+ </button>
145
+
146
+ <button
147
+ onClick={() => {
148
+ getLocation({
149
+ provider: "bmap",
150
+ bmapAk: BMAP_AK,
151
+ allowIpFallback: true,
152
+ })
153
+ .then(reportSelected)
154
+ .catch(reportError);
155
+ }}
156
+ >
157
+ getLocation(百度 - 允许 IP 兜底)
158
+ </button>
159
+
160
+ {/* 组件入口的 IP 兜底测试:在 H5 GPS 失败 / 拒绝授权 / 室内信号差时,
161
+ 高德 / 百度 SDK 内部默认会自动 IP 定位(城市级精度,accuracy 通常
162
+ ≥ 5000m)。组件默认丢弃 IP 结果(allowIpFallback=false)→ 回到
163
+ fallback 中心;传 allowIpFallback=true 后接受 IP 结果 → 列表展示
164
+ city 级附近。 */}
165
+ <button
166
+ onClick={() => {
167
+ showMapLocationSelection({
168
+ amapKey: AMAP_KEY,
169
+ securityJsCode: AMAP_SECURITY_JS_CODE,
170
+ allowIpFallback: true,
171
+ onSelect: reportSelected,
172
+ });
173
+ }}
174
+ >
175
+ 打开地图选址(高德 - 允许 IP 兜底)
176
+ </button>
177
+
178
+ <button
179
+ onClick={() => {
180
+ showMapLocationSelection({
181
+ provider: "bmap",
182
+ bmapAk: BMAP_AK,
183
+ allowIpFallback: true,
184
+ onSelect: reportSelected,
185
+ });
186
+ }}
187
+ >
188
+ 打开地图选址(百度 - 允许 IP 兜底)
189
+ </button>
190
+ </div>
191
+ );
192
+ }
@@ -1,6 +1,12 @@
1
1
  import { showRegionPicker } from "@";
2
2
  import { useState } from "react";
3
3
 
4
+ // 部分城市无区级,district 可能为 null
5
+ const formatSelection = (sel) =>
6
+ sel.district
7
+ ? `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`
8
+ : `${sel.province.label} / ${sel.city.label}`;
9
+
4
10
  export default function RegionPickerDemo() {
5
11
  const [result, setResult] = useState("");
6
12
  const [initial, setInitial] = useState(null);
@@ -9,9 +15,12 @@ export default function RegionPickerDemo() {
9
15
  showRegionPicker({
10
16
  value: initial || undefined,
11
17
  onConfirm: (sel) => {
12
- const text = `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`;
13
- setResult(text);
14
- setInitial([sel.province.value, sel.city.value, sel.district.value]);
18
+ setResult(formatSelection(sel));
19
+ setInitial([
20
+ sel.province.value,
21
+ sel.city.value,
22
+ sel.district?.value,
23
+ ]);
15
24
  },
16
25
  onCancel: () => {
17
26
  console.log("取消选择");
@@ -25,9 +34,7 @@ export default function RegionPickerDemo() {
25
34
  value: ["440000", "440100", "440106"],
26
35
  title: "带初始值",
27
36
  onConfirm: (sel) => {
28
- setResult(
29
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
30
- );
37
+ setResult(formatSelection(sel));
31
38
  },
32
39
  });
33
40
  };
@@ -37,9 +44,7 @@ export default function RegionPickerDemo() {
37
44
  primary: "#e53935",
38
45
  title: "京东红主题",
39
46
  onConfirm: (sel) => {
40
- setResult(
41
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
42
- );
47
+ setResult(formatSelection(sel));
43
48
  },
44
49
  });
45
50
  };
@@ -49,9 +54,7 @@ export default function RegionPickerDemo() {
49
54
  rounded: false,
50
55
  title: "无圆角",
51
56
  onConfirm: (sel) => {
52
- setResult(
53
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
54
- );
57
+ setResult(formatSelection(sel));
55
58
  },
56
59
  });
57
60
  };
@@ -63,9 +66,7 @@ export default function RegionPickerDemo() {
63
66
  confirmText: "选好了",
64
67
  title: "自定义文案",
65
68
  onConfirm: (sel) => {
66
- setResult(
67
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
68
- );
69
+ setResult(formatSelection(sel));
69
70
  },
70
71
  });
71
72
  };
@@ -75,9 +76,7 @@ export default function RegionPickerDemo() {
75
76
  maskClosable: false,
76
77
  title: "点击遮罩不关闭",
77
78
  onConfirm: (sel) => {
78
- setResult(
79
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
80
- );
79
+ setResult(formatSelection(sel));
81
80
  },
82
81
  });
83
82
  };
@@ -93,9 +92,17 @@ export default function RegionPickerDemo() {
93
92
  cancelText: <span style={{ color: "#ef4444" }}>✕ 关</span>,
94
93
  confirmText: <strong>OK ✓</strong>,
95
94
  onConfirm: (sel) => {
96
- setResult(
97
- `${sel.province.label} / ${sel.city.label} / ${sel.district.label}`,
98
- );
95
+ setResult(formatSelection(sel));
96
+ },
97
+ });
98
+ };
99
+
100
+ const openWithHKMOTW = () => {
101
+ showRegionPicker({
102
+ taiwanHKMacau: true,
103
+ title: "含港澳台",
104
+ onConfirm: (sel) => {
105
+ setResult(formatSelection(sel));
99
106
  },
100
107
  });
101
108
  };
@@ -110,6 +117,7 @@ export default function RegionPickerDemo() {
110
117
  <button onClick={openCustomLabels}>自定义 tab 占位 / 按钮文案</button>
111
118
  <button onClick={openNoMaskClose}>点击遮罩不关闭</button>
112
119
  <button onClick={openReactNodeTitle}>ReactNode 标题/按钮</button>
120
+ <button onClick={openWithHKMOTW}>含港澳台</button>
113
121
  </div>
114
122
  <div style={{ marginTop: "0.4rem", fontSize: "0.3rem" }}>
115
123
  选择结果: