@tdesign/uniapp 0.7.2 → 0.8.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.
Files changed (199) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +32 -2
  3. package/dist/action-sheet/README.md +1 -1
  4. package/dist/action-sheet/action-sheet.vue +158 -150
  5. package/dist/action-sheet/props.ts +2 -2
  6. package/dist/action-sheet/type.ts +1 -1
  7. package/dist/avatar/avatar.vue +89 -87
  8. package/dist/avatar-group/avatar-group.vue +69 -67
  9. package/dist/back-top/back-top.vue +60 -58
  10. package/dist/badge/badge.vue +69 -59
  11. package/dist/button/button.vue +121 -116
  12. package/dist/button/props.ts +2 -2
  13. package/dist/button/type.ts +1 -1
  14. package/dist/calendar/calendar-header.vue +4 -4
  15. package/dist/calendar/calendar.vue +308 -297
  16. package/dist/calendar/template.vue +1 -1
  17. package/dist/cascader/README.en-US.md +2 -1
  18. package/dist/cascader/README.md +2 -1
  19. package/dist/cascader/cascader.vue +340 -328
  20. package/dist/cascader/props.ts +6 -1
  21. package/dist/cascader/type.ts +6 -0
  22. package/dist/cell/cell.vue +127 -121
  23. package/dist/cell-group/cell-group.vue +32 -30
  24. package/dist/check-tag/check-tag.vue +73 -71
  25. package/dist/checkbox/README.en-US.md +6 -6
  26. package/dist/checkbox/README.md +5 -5
  27. package/dist/checkbox/checkbox.vue +127 -127
  28. package/dist/checkbox/props.ts +6 -6
  29. package/dist/checkbox/type.ts +6 -4
  30. package/dist/checkbox-group/checkbox-group.vue +175 -173
  31. package/dist/checkbox-group/props.ts +6 -6
  32. package/dist/checkbox-group/type.ts +6 -4
  33. package/dist/col/col.vue +26 -24
  34. package/dist/collapse/collapse.vue +83 -81
  35. package/dist/collapse-panel/collapse-panel.vue +121 -119
  36. package/dist/collapse-panel/props.ts +4 -4
  37. package/dist/collapse-panel/type.ts +2 -2
  38. package/dist/color-picker/README.md +1 -1
  39. package/dist/color-picker/color-picker.vue +324 -322
  40. package/dist/color-picker/props.ts +2 -2
  41. package/dist/color-picker/template.vue +14 -10
  42. package/dist/common/common.ts +1 -0
  43. package/dist/common/style/theme/index.css +57 -61
  44. package/dist/common/utils.js +7 -2
  45. package/dist/common/validator.js +172 -0
  46. package/dist/config-provider/README.en-US.md +184 -0
  47. package/dist/config-provider/README.md +234 -0
  48. package/dist/config-provider/config-provider.vue +105 -0
  49. package/dist/config-provider/config-store.js +70 -0
  50. package/dist/config-provider/props.ts +16 -0
  51. package/dist/config-provider/reactive-state.js +39 -0
  52. package/dist/config-provider/type.ts +401 -0
  53. package/dist/config-provider/use-config.js +29 -0
  54. package/dist/config-provider/utils.js +29 -0
  55. package/dist/count-down/count-down.vue +98 -97
  56. package/dist/date-time-picker/date-time-picker.vue +410 -395
  57. package/dist/demo/demo.vue +1 -0
  58. package/dist/dialog/dialog.vue +176 -173
  59. package/dist/divider/divider.vue +38 -36
  60. package/dist/draggable/draggable.vue +60 -58
  61. package/dist/drawer/README.md +1 -1
  62. package/dist/drawer/drawer.vue +48 -46
  63. package/dist/dropdown-item/dropdown-item.vue +209 -207
  64. package/dist/dropdown-item/props.ts +4 -4
  65. package/dist/dropdown-item/type.ts +3 -3
  66. package/dist/dropdown-menu/dropdown-menu.vue +93 -99
  67. package/dist/empty/empty.vue +43 -42
  68. package/dist/fab/fab.vue +88 -86
  69. package/dist/footer/footer.vue +36 -34
  70. package/dist/form/README.en-US.md +17 -24
  71. package/dist/form/README.md +18 -25
  72. package/dist/form/form.css +1 -166
  73. package/dist/form/form.vue +251 -236
  74. package/dist/form/props.ts +2 -21
  75. package/dist/form/type.ts +7 -70
  76. package/dist/form-item/README.en-US.md +4 -5
  77. package/dist/form-item/README.md +4 -5
  78. package/dist/form-item/form-item.css +69 -96
  79. package/dist/form-item/form-item.vue +315 -336
  80. package/dist/form-item/form-model.ts +125 -173
  81. package/dist/form-item/props.ts +4 -17
  82. package/dist/form-item/type.ts +43 -1
  83. package/dist/grid/grid.vue +53 -51
  84. package/dist/grid-item/grid-item.vue +121 -119
  85. package/dist/guide/README.md +1 -1
  86. package/dist/guide/guide.vue +281 -277
  87. package/dist/icon/README.md +2 -4
  88. package/dist/icon/icon.vue +78 -76
  89. package/dist/image/README.md +1 -1
  90. package/dist/image/image.vue +103 -101
  91. package/dist/image-viewer/image-viewer.vue +160 -158
  92. package/dist/image-viewer/props.ts +2 -2
  93. package/dist/image-viewer/type.ts +1 -1
  94. package/dist/index.js +3 -0
  95. package/dist/indexes/indexes.vue +264 -267
  96. package/dist/indexes-anchor/indexes-anchor.vue +41 -41
  97. package/dist/input/input.vue +192 -192
  98. package/dist/input/props.ts +6 -6
  99. package/dist/input/type.ts +3 -3
  100. package/dist/link/link.vue +73 -71
  101. package/dist/loading/loading.vue +59 -59
  102. package/dist/locale/ar_KW.ts +157 -0
  103. package/dist/locale/en_US.ts +146 -0
  104. package/dist/locale/it_IT.ts +145 -0
  105. package/dist/locale/ja_JP.ts +132 -0
  106. package/dist/locale/ko_KR.ts +132 -0
  107. package/dist/locale/ru_RU.ts +157 -0
  108. package/dist/locale/zh_CN.ts +133 -0
  109. package/dist/locale/zh_TW.ts +132 -0
  110. package/dist/message/message.vue +181 -173
  111. package/dist/message/props.ts +2 -2
  112. package/dist/message/type.ts +1 -1
  113. package/dist/message-item/message-item.vue +192 -184
  114. package/dist/mixins/using-config.js +39 -0
  115. package/dist/navbar/navbar.vue +201 -199
  116. package/dist/notice-bar/notice-bar.vue +175 -171
  117. package/dist/notice-bar/props.ts +2 -2
  118. package/dist/notice-bar/type.ts +1 -1
  119. package/dist/npm/dayjs/esm/locale/ar.js +81 -0
  120. package/dist/npm/dayjs/esm/locale/it.js +39 -0
  121. package/dist/overlay/overlay.vue +50 -48
  122. package/dist/picker/picker.vue +168 -161
  123. package/dist/picker-item/picker-item.vue +269 -269
  124. package/dist/popover/README.md +1 -1
  125. package/dist/popover/popover.vue +262 -261
  126. package/dist/popover/props.ts +4 -4
  127. package/dist/popover/type.ts +2 -2
  128. package/dist/popup/popup.vue +46 -45
  129. package/dist/progress/README.md +1 -1
  130. package/dist/progress/progress.vue +76 -76
  131. package/dist/pull-down-refresh/props.ts +2 -2
  132. package/dist/pull-down-refresh/pull-down-refresh.vue +240 -234
  133. package/dist/pull-down-refresh/type.ts +1 -1
  134. package/dist/qrcode/README.md +1 -1
  135. package/dist/qrcode/components/qrcode-canvas/qrcode-canvas.vue +340 -338
  136. package/dist/qrcode/components/qrcode-status/qrcode-status.vue +6 -6
  137. package/dist/qrcode/qrcode.vue +93 -87
  138. package/dist/radio/props.ts +6 -6
  139. package/dist/radio/radio.vue +118 -120
  140. package/dist/radio/type.ts +3 -3
  141. package/dist/radio-group/props.ts +4 -4
  142. package/dist/radio-group/radio-group.vue +136 -134
  143. package/dist/radio-group/type.ts +4 -4
  144. package/dist/rate/computed.js +2 -2
  145. package/dist/rate/props.ts +4 -4
  146. package/dist/rate/rate.vue +155 -154
  147. package/dist/rate/type.ts +2 -2
  148. package/dist/result/result.vue +41 -39
  149. package/dist/row/row.vue +38 -36
  150. package/dist/scroll-view/scroll-view.vue +24 -22
  151. package/dist/search/props.ts +2 -2
  152. package/dist/search/search.vue +127 -125
  153. package/dist/search/type.ts +1 -1
  154. package/dist/side-bar/side-bar.vue +57 -55
  155. package/dist/side-bar-item/side-bar-item.vue +86 -86
  156. package/dist/skeleton/skeleton.vue +126 -124
  157. package/dist/slider/README.md +1 -1
  158. package/dist/slider/props.ts +2 -2
  159. package/dist/slider/slider.vue +457 -457
  160. package/dist/slider/type.ts +1 -1
  161. package/dist/step-item/step-item.vue +77 -75
  162. package/dist/stepper/props.ts +2 -2
  163. package/dist/stepper/stepper.vue +168 -149
  164. package/dist/stepper/type.ts +1 -1
  165. package/dist/steps/props.ts +2 -2
  166. package/dist/steps/steps.vue +83 -81
  167. package/dist/steps/type.ts +1 -1
  168. package/dist/sticky/sticky.vue +104 -102
  169. package/dist/swipe-cell/swipe-cell.vue +91 -89
  170. package/dist/swiper/README.md +1 -1
  171. package/dist/swiper/swiper.vue +91 -89
  172. package/dist/swiper-nav/swiper-nav.vue +38 -36
  173. package/dist/switch/props.ts +2 -2
  174. package/dist/switch/switch.vue +62 -62
  175. package/dist/switch/type.ts +1 -1
  176. package/dist/tab-bar/tab-bar.vue +88 -86
  177. package/dist/tab-bar-item/tab-bar-item.vue +85 -82
  178. package/dist/tab-panel/tab-panel.vue +66 -64
  179. package/dist/tabs/tabs.vue +294 -287
  180. package/dist/tag/tag.vue +79 -77
  181. package/dist/textarea/props.ts +6 -6
  182. package/dist/textarea/textarea.vue +127 -126
  183. package/dist/textarea/type.ts +3 -3
  184. package/dist/toast/toast.vue +107 -106
  185. package/dist/transition/transition.vue +30 -28
  186. package/dist/tree-select/tree-select.vue +151 -151
  187. package/dist/types/config-provider.d.ts +7 -0
  188. package/dist/types/index.d.ts +2 -0
  189. package/dist/types/popover.d.ts +7 -0
  190. package/dist/upload/README.en-US.md +13 -14
  191. package/dist/upload/README.md +11 -12
  192. package/dist/upload/props.ts +2 -4
  193. package/dist/upload/type.ts +12 -11
  194. package/dist/upload/upload.css +1 -1
  195. package/dist/upload/upload.vue +672 -512
  196. package/dist/watermark/watermark.vue +151 -149
  197. package/global.d.ts +2 -0
  198. package/package.json +16 -2
  199. package/dist/form/form-item-props.ts +0 -56
@@ -31,8 +31,8 @@ export default {
31
31
  },
32
32
  /** 系统预设的颜色样例,值为 `null` 或 `[]` 则不显示系统色,值为 `undefined` 会显示组件内置的系统默认色 */
33
33
  swatchColors: {
34
- type: Array,
35
- default: undefined as TdColorPickerProps['swatchColors'],
34
+ type: [Array, null],
35
+ default: null as TdColorPickerProps['swatchColors'],
36
36
  },
37
37
  /** 颜色选择器类型。(base 表示仅展示系统预设内容; multiple 表示展示色板和系统预设内容 */
38
38
  type: {
@@ -16,7 +16,7 @@
16
16
  v-if="isMultiple"
17
17
  :class="classPrefix + '__saturation'"
18
18
  data-type="saturation"
19
- :style="'background: hsl(' + sliderInfo.value + ', 100%, 50%)'"
19
+ :style="'' + `background: hsl(${sliderInfo.value}, 100%, 50%)`"
20
20
  @touchstart.stop.prevent="onTouchStart"
21
21
  @touchmove.stop.prevent="onTouchMove"
22
22
  @touchend.stop.prevent="onTouchEnd"
@@ -24,7 +24,7 @@
24
24
  <view
25
25
  :class="classPrefix + '__thumb'"
26
26
  :tab-index="0"
27
- :style="utils._style(saturationThumbStyle)"
27
+ :style="'' + utils._style(saturationThumbStyle)"
28
28
  />
29
29
  </view>
30
30
  <!-- #ifdef MP-ALIPAY -->
@@ -53,7 +53,7 @@
53
53
  <view :class="classPrefix + '__rail'" />
54
54
  <view
55
55
  :class="classPrefix + '__thumb'"
56
- :style="utils._style(hueSliderStyle)"
56
+ :style="'' + utils._style(hueSliderStyle)"
57
57
  />
58
58
  </view>
59
59
  </view>
@@ -64,9 +64,7 @@
64
64
  >
65
65
  <view
66
66
  :class="classPrefix + '__slider-padding'"
67
- :style="
68
- 'background: linear-gradient(90deg, rgba(0,0,0,.0) 0%, rgba(0,0,0,.0) 93%, ' + alphaSliderStyle.color + ' 93%, ' + alphaSliderStyle.color + ' 100%)'
69
- "
67
+ :style="'' + `background: linear-gradient(90deg, rgba(0,0,0,.0) 0%, rgba(0,0,0,.0) 93%, ${alphaSliderStyle.color} 93%, ${alphaSliderStyle.color} 100%)`"
70
68
  :disable-scroll="false"
71
69
  />
72
70
  <view
@@ -78,11 +76,11 @@
78
76
  >
79
77
  <view
80
78
  :class="classPrefix + '__rail'"
81
- :style="'background: linear-gradient(to right, rgba(0, 0, 0, 0), ' + alphaSliderStyle.color + ')'"
79
+ :style="'' + `background: linear-gradient(to right, rgba(0, 0, 0, 0), ${alphaSliderStyle.color})`"
82
80
  />
83
81
  <view
84
82
  :class="classPrefix + '__thumb'"
85
- :style="utils._style(alphaSliderStyle)"
83
+ :style="'' + utils._style(alphaSliderStyle)"
86
84
  />
87
85
  </view>
88
86
  </view>
@@ -129,7 +127,13 @@
129
127
  >
130
128
  系统预设色彩
131
129
  </view>
132
- <view :class="classPrefix + '__swatches-items'">
130
+ <scroll-view
131
+ :class="classPrefix + '__swatches-items'"
132
+ scroll-x
133
+ enable-flex
134
+ scroll-anchoring
135
+ type="list"
136
+ >
133
137
  <view
134
138
  v-for="(swatch, index) in innerSwatchList"
135
139
  :key="index"
@@ -142,7 +146,7 @@
142
146
  :style="'background-color: ' + swatch + ';'"
143
147
  />
144
148
  </view>
145
- </view>
149
+ </scroll-view>
146
150
  </view>
147
151
  </view>
148
152
  </view>
@@ -96,6 +96,7 @@ export interface IsURLOptions {
96
96
  disallow_auth?: boolean;
97
97
  validate_length?: boolean;
98
98
  }
99
+
99
100
  /**
100
101
  * 通用全局类型
101
102
  * */
@@ -144,9 +144,10 @@
144
144
  --td-component-border: var(--td-gray-color-4);
145
145
 
146
146
  --td-shadow-1: 0 1px 10px rgba(0, 0, 0, 5%), 0 4px 5px rgba(0, 0, 0, 8%), 0 2px 4px -1px rgba(0, 0, 0, 12%);
147
- --td-shadow-2: 0 3px 14px 2px rgba(0, 0, 0, 5%), 0 8px 10px 1px rgba(0, 0, 0, 6%), 0 5px 5px -3px rgba(0, 0, 0, 10%);
148
- --td-shadow-3: 0 6px 30px 5px rgba(0, 0, 0, 5%), 0 16px 24px 2px rgba(0, 0, 0, 4%),
149
- 0 8px 10px -5px rgba(0, 0, 0, 8%);
147
+ --td-shadow-2:
148
+ 0 3px 14px 2px rgba(0, 0, 0, 5%), 0 8px 10px 1px rgba(0, 0, 0, 6%), 0 5px 5px -3px rgba(0, 0, 0, 10%);
149
+ --td-shadow-3:
150
+ 0 6px 30px 5px rgba(0, 0, 0, 5%), 0 16px 24px 2px rgba(0, 0, 0, 4%), 0 8px 10px -5px rgba(0, 0, 0, 8%);
150
151
  --td-shadow-4: 0 2px 8px 0 rgba(0, 0, 0, 0.06);
151
152
 
152
153
  --td-shadow-inset-top: inset 0 0.5px 0 #dcdcdc;
@@ -162,7 +163,6 @@
162
163
  }
163
164
  }
164
165
 
165
-
166
166
  /* ./raw/_dark.less */
167
167
  @media (prefers-color-scheme: dark) {
168
168
  /* #ifdef H5 */
@@ -324,66 +324,64 @@
324
324
  }
325
325
  }
326
326
 
327
-
328
327
  /* ./raw/_radius.less */
329
328
  page,
330
329
  .page {
331
- --td-radius-small: 12px;
332
- --td-radius-default: 24px;
333
- --td-radius-large: 36px;
334
- --td-radius-extraLarge: 48px;
330
+ --td-radius-small: 3px;
331
+ --td-radius-default: 6px;
332
+ --td-radius-large: 9px;
333
+ --td-radius-extraLarge: 12px;
335
334
  --td-radius-round: 999px;
336
335
  --td-radius-circle: 50%;
337
336
  }
338
337
 
339
-
340
338
  /* ./raw/_font.less */
341
339
  page,
342
340
  .page {
343
341
  --td-font-family: PingFang SC, Microsoft YaHei, Arial Regular;
344
342
  --td-font-family-medium: PingFang SC, Microsoft YaHei, Arial Medium;
345
343
 
346
- --td-font-size-link-small: 48px;
347
- --td-font-size-link-medium: 56px;
348
- --td-font-size-link-large: 64px;
349
- --td-font-size-mark-extraSmall: 40px;
350
- --td-font-size-mark-small: 48px;
351
- --td-font-size-mark-medium: 56px;
352
- --td-font-size-mark-large: 64px;
353
- --td-font-size-body-extraSmall: 40px;
354
- --td-font-size-body-small: 48px;
355
- --td-font-size-body-medium: 56px;
356
- --td-font-size-body-large: 64px;
357
- --td-font-size-title-small: 56px;
358
- --td-font-size-title-medium: 64px;
359
- --td-font-size-title-large: 72px;
360
- --td-font-size-title-extraLarge: 80px;
361
- --td-font-size-headline-small: 96px;
362
- --td-font-size-headline-medium: 112px;
363
- --td-font-size-headline-large: 144px;
364
- --td-font-size-display-medium: 192px;
365
- --td-font-size-display-large: 256px;
366
-
367
- --td-line-height-link-small: 80px;
368
- --td-line-height-link-medium: 88px;
369
- --td-line-height-link-large: 96px;
370
- --td-line-height-mark-extraSmall: 64px;
371
- --td-line-height-mark-small: 80px;
372
- --td-line-height-mark-medium: 88px;
373
- --td-line-height-mark-large: 96px;
374
- --td-line-height-body-extraSmall: 64px;
375
- --td-line-height-body-small: 80px;
376
- --td-line-height-body-medium: 88px;
377
- --td-line-height-body-large: 96px;
378
- --td-line-height-title-small: 88px;
379
- --td-line-height-title-medium: 96px;
380
- --td-line-height-title-large: 104px;
381
- --td-line-height-title-extraLarge: 112px;
382
- --td-line-height-headline-small: 128px;
383
- --td-line-height-headline-medium: 144px;
384
- --td-line-height-headline-large: 176px;
385
- --td-line-height-display-medium: 224px;
386
- --td-line-height-display-large: 288px;
344
+ --td-font-size-link-small: 12px;
345
+ --td-font-size-link-medium: 14px;
346
+ --td-font-size-link-large: 16px;
347
+ --td-font-size-mark-extraSmall: 10px;
348
+ --td-font-size-mark-small: 12px;
349
+ --td-font-size-mark-medium: 14px;
350
+ --td-font-size-mark-large: 16px;
351
+ --td-font-size-body-extraSmall: 10px;
352
+ --td-font-size-body-small: 12px;
353
+ --td-font-size-body-medium: 14px;
354
+ --td-font-size-body-large: 16px;
355
+ --td-font-size-title-small: 14px;
356
+ --td-font-size-title-medium: 16px;
357
+ --td-font-size-title-large: 18px;
358
+ --td-font-size-title-extraLarge: 20px;
359
+ --td-font-size-headline-small: 24px;
360
+ --td-font-size-headline-medium: 28px;
361
+ --td-font-size-headline-large: 36px;
362
+ --td-font-size-display-medium: 48px;
363
+ --td-font-size-display-large: 64px;
364
+
365
+ --td-line-height-link-small: 20px;
366
+ --td-line-height-link-medium: 22px;
367
+ --td-line-height-link-large: 24px;
368
+ --td-line-height-mark-extraSmall: 16px;
369
+ --td-line-height-mark-small: 20px;
370
+ --td-line-height-mark-medium: 22px;
371
+ --td-line-height-mark-large: 24px;
372
+ --td-line-height-body-extraSmall: 16px;
373
+ --td-line-height-body-small: 20px;
374
+ --td-line-height-body-medium: 22px;
375
+ --td-line-height-body-large: 24px;
376
+ --td-line-height-title-small: 22px;
377
+ --td-line-height-title-medium: 24px;
378
+ --td-line-height-title-large: 26px;
379
+ --td-line-height-title-extraLarge: 28px;
380
+ --td-line-height-headline-small: 32px;
381
+ --td-line-height-headline-medium: 36px;
382
+ --td-line-height-headline-large: 44px;
383
+ --td-line-height-display-medium: 56px;
384
+ --td-line-height-display-large: 72px;
387
385
 
388
386
  --td-font-link-small: var(--td-font-size-link-small) / var(--td-line-height-link-small) var(--td-font-family);
389
387
  --td-font-link-medium: var(--td-font-size-link-medium) / var(--td-line-height-link-medium) var(--td-font-family);
@@ -415,7 +413,7 @@ page,
415
413
  --td-font-display-large: 600 var(--td-font-size-display-large) / var(--td-line-height-display-large)
416
414
  var(--td-font-family);
417
415
 
418
- --td-font-size: 40px;
416
+ --td-font-size: 10px;
419
417
  --td-font-size-xs: var(--td-font-size-body-extraSmall);
420
418
  --td-font-size-s: var(--td-font-size-body-small);
421
419
  --td-font-size-base: var(--td-font-size-title-small);
@@ -425,20 +423,18 @@ page,
425
423
  --td-font-size-xxl: var(--td-font-size-headline-large);
426
424
  }
427
425
 
428
-
429
426
  /* ./raw/_spacer.less */
430
427
  page,
431
428
  .page {
432
- --td-spacer: 32px;
433
- --td-spacer-1: 48px;
434
- --td-spacer-2: 64px;
435
- --td-spacer-3: 96px;
436
- --td-spacer-4: 128px;
437
- --td-spacer-5: 192px;
438
- --td-spacer-6: 320px;
429
+ --td-spacer: 8px;
430
+ --td-spacer-1: 12px;
431
+ --td-spacer-2: 16px;
432
+ --td-spacer-3: 24px;
433
+ --td-spacer-4: 32px;
434
+ --td-spacer-5: 48px;
435
+ --td-spacer-6: 80px;
439
436
  }
440
437
 
441
-
442
438
  /* ./raw/_components.less */
443
439
  @media (prefers-color-scheme: light) {
444
440
  page,
@@ -236,7 +236,7 @@ export const chunk = (arr, size) => Array.from({ length: Math.ceil(arr.length /
236
236
  const getPageContext = () => {
237
237
  const pages = getCurrentPages();
238
238
  const page = pages[pages.length - 1];
239
- return (page).$$basePage || page;
239
+ return page?.$vm || page;
240
240
  };
241
241
 
242
242
 
@@ -244,9 +244,14 @@ const findInstance = (context, pageContext, pureSelector) => {
244
244
  if (context && context.$refs[pureSelector]) {
245
245
  return context.$refs[pureSelector];
246
246
  }
247
- if (pageContext && pageContext.$refs[pureSelector]) {
247
+
248
+ if (pageContext
249
+ && pageContext.$refs
250
+ && pageContext.$refs[pureSelector]
251
+ ) {
248
252
  return pageContext.$refs[pureSelector];
249
253
  }
254
+
250
255
  return null;
251
256
  };
252
257
 
@@ -36,3 +36,175 @@ export function isObject(x) {
36
36
  export function isPlainObject(val) {
37
37
  return val !== null && typeof val === 'object' && Object.prototype.toString.call(val) === '[object Object]';
38
38
  }
39
+
40
+ export function isEmpty(val) {
41
+ if (val === null || val === undefined) return true;
42
+ if (typeof val === 'string' || Array.isArray(val)) return val.length === 0;
43
+ if (val instanceof Map || val instanceof Set) return val.size === 0;
44
+ if (typeof val === 'object') return Object.keys(val).length === 0;
45
+ return true;
46
+ }
47
+
48
+ /**
49
+ * 验证是否为有效日期
50
+ * 支持字符串格式(YYYY/MM/DD、YYYY-MM-DD 等)和 Date 对象
51
+ */
52
+ export function isDate(input, options) {
53
+ const defaultOptions = {
54
+ format: 'YYYY/MM/DD',
55
+ delimiters: ['/', '-'],
56
+ strictMode: false,
57
+ };
58
+ const opts = { ...defaultOptions, ...options };
59
+
60
+ if (typeof input === 'string') {
61
+ const delimiter = opts.delimiters.find((d) => opts.format.includes(d));
62
+ if (!delimiter) return false;
63
+
64
+ const formatParts = opts.format.split(delimiter);
65
+ const dateParts = input.split(delimiter);
66
+ if (formatParts.length !== dateParts.length) return false;
67
+
68
+ let year = '';
69
+ let month = '';
70
+ let day = '';
71
+ for (let i = 0; i < formatParts.length; i += 1) {
72
+ const fmt = formatParts[i].toUpperCase();
73
+ const val = dateParts[i];
74
+ if (fmt.includes('Y')) year = val;
75
+ else if (fmt.includes('M')) month = val;
76
+ else if (fmt.includes('D')) day = val;
77
+ }
78
+
79
+ if (month.length === 1) month = `0${month}`;
80
+ if (day.length === 1) day = `0${day}`;
81
+
82
+ if (year.length === 2) {
83
+ const currentYearSuffix = new Date().getFullYear() % 100;
84
+ year = Number(year) <= currentYearSuffix ? `20${year}` : `19${year}`;
85
+ }
86
+
87
+ const date = new Date(`${year}-${month}-${day}T00:00:00.000Z`);
88
+ return (
89
+ date.getUTCFullYear() === Number(year)
90
+ && date.getUTCMonth() + 1 === Number(month)
91
+ && date.getUTCDate() === Number(day)
92
+ );
93
+ }
94
+
95
+ if (!opts.strictMode) {
96
+ if (Object.prototype.toString.call(input) === '[object Date]' && Number.isFinite(input.getTime())) {
97
+ return true;
98
+ }
99
+ }
100
+
101
+ return false;
102
+ }
103
+
104
+ /**
105
+ * 验证是否为有效邮箱地址
106
+ */
107
+ export function isEmail(str) {
108
+ if (typeof str !== 'string') return false;
109
+ if (str.length > 254) return false;
110
+
111
+ const parts = str.split('@');
112
+ if (parts.length !== 2) return false;
113
+
114
+ const [user, domain] = parts;
115
+ if (!user || user.length > 64) return false;
116
+ if (!domain) return false;
117
+
118
+ if (/^[-.]/.test(domain) || /[-.]$/.test(domain)) return false;
119
+ if (!/^[a-zA-Z0-9.-]+$/.test(domain)) return false;
120
+ if (!domain.includes('.')) return false;
121
+
122
+ const tld = domain.split('.').pop();
123
+ if (!tld || tld.length < 2) return false;
124
+
125
+ const emailUserReg = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+$/;
126
+ return emailUserReg.test(user);
127
+ }
128
+
129
+ /**
130
+ * 验证是否为有效 URL
131
+ */
132
+ export function isURL(str, options) {
133
+ if (typeof str !== 'string') return false;
134
+ if (str.length === 0 || /\s/.test(str)) return false;
135
+ if (str.length > 2084) return false;
136
+
137
+ const defaultOpts = {
138
+ protocols: ['http', 'https', 'ftp'],
139
+ require_tld: true,
140
+ require_protocol: false,
141
+ require_host: true,
142
+ allow_protocol_relative_urls: false,
143
+ };
144
+ const opts = { ...defaultOpts, ...options };
145
+
146
+ let url = str;
147
+
148
+ const protocolRegex = /^([a-z][a-z0-9+\-.]*):\/\//i;
149
+ const protocolMatch = url.match(protocolRegex);
150
+ if (protocolMatch) {
151
+ const protocol = protocolMatch[1].toLowerCase();
152
+ if (!opts.protocols.includes(protocol)) return false;
153
+ url = url.slice(protocolMatch[0].length);
154
+ } else if (opts.require_protocol) {
155
+ if (opts.allow_protocol_relative_urls && str.startsWith('//')) {
156
+ url = url.slice(2);
157
+ } else {
158
+ return false;
159
+ }
160
+ } else if (str.startsWith('//')) {
161
+ if (!opts.allow_protocol_relative_urls) return false;
162
+ url = url.slice(2);
163
+ }
164
+
165
+ if (!url && opts.require_host) return false;
166
+
167
+ const [hostPart] = url.split(/[/?#]/);
168
+ if (!hostPart && opts.require_host) return false;
169
+
170
+ let host = hostPart;
171
+ if (host.includes('@')) {
172
+ host = host.split('@').pop() || '';
173
+ }
174
+
175
+ let hostname = host;
176
+ const portMatch = host.match(/:(\d+)$/);
177
+ if (portMatch) {
178
+ const port = Number(portMatch[1]);
179
+ if (port < 0 || port > 65535) return false;
180
+ hostname = host.slice(0, host.lastIndexOf(':'));
181
+ }
182
+
183
+ if (!hostname) return false;
184
+
185
+ const ipv4Regex = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
186
+ const ipv4Match = hostname.match(ipv4Regex);
187
+ if (ipv4Match) {
188
+ return ipv4Match.slice(1).every((part) => Number(part) >= 0 && Number(part) <= 255);
189
+ }
190
+
191
+ if (hostname.startsWith('[') && hostname.endsWith(']')) {
192
+ return true;
193
+ }
194
+
195
+ const domainParts = hostname.split('.');
196
+ if (opts.require_tld && domainParts.length < 2) return false;
197
+ const hasInvalidPart = domainParts.some((part) => {
198
+ if (!part || part.length > 63) return true;
199
+ if (!/^[a-zA-Z0-9-]+$/.test(part)) return true;
200
+ if (part.startsWith('-') || part.endsWith('-')) return true;
201
+ return false;
202
+ });
203
+ if (hasInvalidPart) return false;
204
+ if (opts.require_tld) {
205
+ const tld = domainParts[domainParts.length - 1];
206
+ if (/^\d+$/.test(tld)) return false;
207
+ }
208
+
209
+ return true;
210
+ }
@@ -0,0 +1,184 @@
1
+ :: BASE_DOC ::
2
+
3
+ ## API
4
+
5
+ ### ConfigProvider Props
6
+
7
+ name | type | default | description | required
8
+ -- | -- | -- | -- | --
9
+ custom-style | Object | - | CSS(Cascading Style Sheets) | N
10
+ global-config | Object | - | global config。Typescript: `GlobalConfigProvider` | N
11
+ theme-vars | Object | - | theme Variables | N
12
+
13
+ ### GlobalConfigProvider
14
+
15
+ name | type | default | description | required
16
+ -- | -- | -- | -- | --
17
+ action-sheet | Object | - | ActionSheet global configs。Typescript: `ActionSheetConfig` | N
18
+ calendar | Object | - | Calendar global configs。Typescript: `CalendarConfig` | N
19
+ cascader | Object | - | Cascader global configs。Typescript: `CascaderConfig` | N
20
+ class-prefix | String | t | \- | N
21
+ date-time-picker | Object | - | DateTimePicker global configs。Typescript: `DateTimePickerConfig` | N
22
+ dropdown-menu | Object | - | DropdownMenu global configs。Typescript: `DropdownMenuConfig` | N
23
+ guide | Object | - | Guide global configs。Typescript: `GuideConfig` | N
24
+ picker | Object | - | Picker global configs。Typescript: `PickerConfig` | N
25
+ pull-down-refresh | Object | - | PullDownRefresh global configs。Typescript: `PullDownRefreshConfig` | N
26
+ qrcode | Object | - | QRCode global configs。Typescript: `QRCodeConfig` | N
27
+ rate | Object | - | Rate global configs。Typescript: `RateConfig` | N
28
+ tab-bar | Object | - | TabBar global configs。Typescript: `TabBarConfig` | N
29
+ upload | Object | - | Upload global configs。Typescript: `UploadConfig` | N
30
+
31
+ ### ActionSheetConfig
32
+
33
+ name | type | default | description | required
34
+ -- | -- | -- | -- | --
35
+ cancel | String | - | cancel text | N
36
+
37
+ ### AttachmentsConfig
38
+
39
+ name | type | default | description | required
40
+ -- | -- | -- | -- | --
41
+ status | Object | - | Typescript: `{ pending: string; fail: string; }` | N
42
+
43
+ ### CalendarConfig
44
+
45
+ name | type | default | description | required
46
+ -- | -- | -- | -- | --
47
+ confirm | String | - | confirm text | N
48
+ month-title | String | - | \- | N
49
+ months | Array | - | Typescript: `string[]` | N
50
+ title | String | - | \- | N
51
+ weekdays | Array | - | Typescript: `string[]` | N
52
+
53
+ ### CascaderConfig
54
+
55
+ name | type | default | description | required
56
+ -- | -- | -- | -- | --
57
+ placeholder | String | - | \- | N
58
+ title | String | - | \- | N
59
+
60
+ ### ChatActionbarConfig
61
+
62
+ name | type | default | description | required
63
+ -- | -- | -- | -- | --
64
+ action-bar | Object | - | Typescript: `{ replay: string; copy: string; good: string; bad: string; share: string; quote: string; }` | N
65
+
66
+ ### ChatSenderConfig
67
+
68
+ name | type | default | description | required
69
+ -- | -- | -- | -- | --
70
+ placeholder | String | - | \- | N
71
+ send-text | String | - | \- | N
72
+ stop-text | String | - | \- | N
73
+
74
+ ### ChatThinkingConfig
75
+
76
+ name | type | default | description | required
77
+ -- | -- | -- | -- | --
78
+ status | Object | - | Typescript: `{ pending: string; complete: string; stop: string; }` | N
79
+
80
+ ### DateTimePickerConfig
81
+
82
+ name | type | default | description | required
83
+ -- | -- | -- | -- | --
84
+ cancel | String | - | \- | N
85
+ confirm | String | - | \- | N
86
+ date-label | String | - | \- | N
87
+ format | String | 'YYYY-MM-DD HH:mm:ss' | \- | N
88
+ hour-label | String | - | \- | N
89
+ minute-label | String | - | \- | N
90
+ month-label | String | - | \- | N
91
+ second-label | String | - | \- | N
92
+ title | String | - | \- | N
93
+ year-label | String | - | \- | N
94
+
95
+ ### DropdownMenuConfig
96
+
97
+ name | type | default | description | required
98
+ -- | -- | -- | -- | --
99
+ confirm | String | - | confirm text | N
100
+ reset | String | - | reset text | N
101
+
102
+ ### FormConfig
103
+
104
+ name | type | default | description | required
105
+ -- | -- | -- | -- | --
106
+ colon-text | String | - | colon on the right of label ":" | N
107
+ error-message | Object | - | Typescript: `FormErrorMessage`,[Form API Documents](./form?tab=api)。[see more ts definition](https://github.com/tencent/tdesign-miniprogram/blob/develop/packages/uniapp-components/config-provider/type.ts) | N
108
+ required-mark | Boolean | true | \- | N
109
+ required-mark-position | String | left | Display position of required symbols。options: left/right | N
110
+
111
+ ### GuideConfig
112
+
113
+ name | type | default | description | required
114
+ -- | -- | -- | -- | --
115
+ back | String | - | \- | N
116
+ finish | String | - | \- | N
117
+ next | String | - | \- | N
118
+ skip | String | - | \- | N
119
+
120
+ ### ImageConfig
121
+
122
+ name | type | default | description | required
123
+ -- | -- | -- | -- | --
124
+ error-text | String | - | loading text, default value is "Error" | N
125
+ loading-text | String | - | loading text, default value is "loading" | N
126
+ replace-image-src | Function | - | replace all `src` attribute of images。Typescript: `(params: ImageProps) => string`,[Image API Documents](./image?tab=api)。[see more ts definition](https://github.com/tencent/tdesign-miniprogram/blob/develop/packages/uniapp-components/config-provider/type.ts) | N
127
+
128
+ ### InputConfig
129
+
130
+ name | type | default | description | required
131
+ -- | -- | -- | -- | --
132
+ placeholder | String | - | \- | N
133
+
134
+ ### PickerConfig
135
+
136
+ name | type | default | description | required
137
+ -- | -- | -- | -- | --
138
+ cancel | String | - | cancel text | N
139
+ confirm | String | - | confirm text | N
140
+
141
+ ### PullDownRefreshConfig
142
+
143
+ name | type | default | description | required
144
+ -- | -- | -- | -- | --
145
+ loading-texts | Array | - | Typescript: `string[]` | N
146
+
147
+ ### QRCodeConfig
148
+
149
+ name | type | default | description | required
150
+ -- | -- | -- | -- | --
151
+ expired-text | String | - | Language configuration, "QR code expired" description text | N
152
+ refresh-text | String | - | Language configuration, "QR code refresh" description text | N
153
+ scanned-text | String | - | Language configuration, "QR code scanned" description text | N
154
+
155
+ ### RateConfig
156
+
157
+ name | type | default | description | required
158
+ -- | -- | -- | -- | --
159
+ no-value-text | String | - | \- | N
160
+ value-text | String | - | \- | N
161
+
162
+ ### TabBarConfig
163
+
164
+ name | type | default | description | required
165
+ -- | -- | -- | -- | --
166
+ have-more-news-aria-label | String | - | \- | N
167
+ have-news-aria-label | String | - | \- | N
168
+ more-news-aria-label | String | - | \- | N
169
+ news-aria-label | String | - | \- | N
170
+
171
+ ### UploadConfig
172
+
173
+ name | type | default | description | required
174
+ -- | -- | -- | -- | --
175
+ progress | Object | - | Typescript: `UploadConfigProgress` | N
176
+
177
+ ### UploadConfigProgress
178
+
179
+ name | type | default | description | required
180
+ -- | -- | -- | -- | --
181
+ fail-text | String | - | \- | N
182
+ success-text | String | - | \- | N
183
+ uploading-text | String | - | \- | N
184
+ waiting-text | String | - | \- | N