wedux-ui 0.1.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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/miniprogram_dist/behaviors/formField.js +35 -0
  4. package/miniprogram_dist/components/avatar/avatar.js +70 -0
  5. package/miniprogram_dist/components/avatar/avatar.json +4 -0
  6. package/miniprogram_dist/components/avatar/avatar.scss +68 -0
  7. package/miniprogram_dist/components/avatar/avatar.wxml +15 -0
  8. package/miniprogram_dist/components/avatar-group/avatar-group.js +45 -0
  9. package/miniprogram_dist/components/avatar-group/avatar-group.json +7 -0
  10. package/miniprogram_dist/components/avatar-group/avatar-group.scss +4 -0
  11. package/miniprogram_dist/components/avatar-group/avatar-group.wxml +3 -0
  12. package/miniprogram_dist/components/back-top/back-top.js +68 -0
  13. package/miniprogram_dist/components/back-top/back-top.json +4 -0
  14. package/miniprogram_dist/components/back-top/back-top.scss +43 -0
  15. package/miniprogram_dist/components/back-top/back-top.wxml +10 -0
  16. package/miniprogram_dist/components/badge/badge.js +100 -0
  17. package/miniprogram_dist/components/badge/badge.json +4 -0
  18. package/miniprogram_dist/components/badge/badge.scss +98 -0
  19. package/miniprogram_dist/components/badge/badge.wxml +11 -0
  20. package/miniprogram_dist/components/button/button.js +152 -0
  21. package/miniprogram_dist/components/button/button.json +4 -0
  22. package/miniprogram_dist/components/button/button.scss +499 -0
  23. package/miniprogram_dist/components/button/button.wxml +21 -0
  24. package/miniprogram_dist/components/button-group/button-group.js +51 -0
  25. package/miniprogram_dist/components/button-group/button-group.json +4 -0
  26. package/miniprogram_dist/components/button-group/button-group.scss +8 -0
  27. package/miniprogram_dist/components/button-group/button-group.wxml +3 -0
  28. package/miniprogram_dist/components/calendar/calendar.js +308 -0
  29. package/miniprogram_dist/components/calendar/calendar.json +4 -0
  30. package/miniprogram_dist/components/calendar/calendar.scss +141 -0
  31. package/miniprogram_dist/components/calendar/calendar.wxml +47 -0
  32. package/miniprogram_dist/components/card/card.js +44 -0
  33. package/miniprogram_dist/components/card/card.json +4 -0
  34. package/miniprogram_dist/components/card/card.scss +143 -0
  35. package/miniprogram_dist/components/card/card.wxml +31 -0
  36. package/miniprogram_dist/components/checkbox/checkbox.js +43 -0
  37. package/miniprogram_dist/components/checkbox/checkbox.json +4 -0
  38. package/miniprogram_dist/components/checkbox/checkbox.scss +77 -0
  39. package/miniprogram_dist/components/checkbox/checkbox.wxml +13 -0
  40. package/miniprogram_dist/components/checkbox-button/checkbox-button.js +43 -0
  41. package/miniprogram_dist/components/checkbox-button/checkbox-button.json +4 -0
  42. package/miniprogram_dist/components/checkbox-button/checkbox-button.scss +39 -0
  43. package/miniprogram_dist/components/checkbox-button/checkbox-button.wxml +8 -0
  44. package/miniprogram_dist/components/checkbox-group/checkbox-group.js +84 -0
  45. package/miniprogram_dist/components/checkbox-group/checkbox-group.json +4 -0
  46. package/miniprogram_dist/components/checkbox-group/checkbox-group.scss +9 -0
  47. package/miniprogram_dist/components/checkbox-group/checkbox-group.wxml +3 -0
  48. package/miniprogram_dist/components/color-picker/color-picker.js +348 -0
  49. package/miniprogram_dist/components/color-picker/color-picker.json +7 -0
  50. package/miniprogram_dist/components/color-picker/color-picker.scss +383 -0
  51. package/miniprogram_dist/components/color-picker/color-picker.wxml +232 -0
  52. package/miniprogram_dist/components/date-picker/date-picker.js +1289 -0
  53. package/miniprogram_dist/components/date-picker/date-picker.json +7 -0
  54. package/miniprogram_dist/components/date-picker/date-picker.scss +468 -0
  55. package/miniprogram_dist/components/date-picker/date-picker.wxml +214 -0
  56. package/miniprogram_dist/components/divider/divider.js +34 -0
  57. package/miniprogram_dist/components/divider/divider.json +4 -0
  58. package/miniprogram_dist/components/divider/divider.scss +75 -0
  59. package/miniprogram_dist/components/divider/divider.wxml +8 -0
  60. package/miniprogram_dist/components/drawer/drawer.js +104 -0
  61. package/miniprogram_dist/components/drawer/drawer.json +4 -0
  62. package/miniprogram_dist/components/drawer/drawer.scss +171 -0
  63. package/miniprogram_dist/components/drawer/drawer.wxml +22 -0
  64. package/miniprogram_dist/components/ellipsis/ellipsis.js +38 -0
  65. package/miniprogram_dist/components/ellipsis/ellipsis.json +4 -0
  66. package/miniprogram_dist/components/ellipsis/ellipsis.scss +22 -0
  67. package/miniprogram_dist/components/ellipsis/ellipsis.wxml +7 -0
  68. package/miniprogram_dist/components/flex/flex.js +81 -0
  69. package/miniprogram_dist/components/flex/flex.json +4 -0
  70. package/miniprogram_dist/components/flex/flex.scss +4 -0
  71. package/miniprogram_dist/components/flex/flex.wxml +3 -0
  72. package/miniprogram_dist/components/float-button/float-button.js +78 -0
  73. package/miniprogram_dist/components/float-button/float-button.json +4 -0
  74. package/miniprogram_dist/components/float-button/float-button.scss +54 -0
  75. package/miniprogram_dist/components/float-button/float-button.wxml +9 -0
  76. package/miniprogram_dist/components/form/form.js +142 -0
  77. package/miniprogram_dist/components/form/form.json +4 -0
  78. package/miniprogram_dist/components/form/form.scss +11 -0
  79. package/miniprogram_dist/components/form/form.wxml +3 -0
  80. package/miniprogram_dist/components/form/validator.js +220 -0
  81. package/miniprogram_dist/components/form-item/form-item.js +240 -0
  82. package/miniprogram_dist/components/form-item/form-item.json +4 -0
  83. package/miniprogram_dist/components/form-item/form-item.scss +59 -0
  84. package/miniprogram_dist/components/form-item/form-item.wxml +33 -0
  85. package/miniprogram_dist/components/gradient-text/gradient-text.js +54 -0
  86. package/miniprogram_dist/components/gradient-text/gradient-text.json +4 -0
  87. package/miniprogram_dist/components/gradient-text/gradient-text.scss +7 -0
  88. package/miniprogram_dist/components/gradient-text/gradient-text.wxml +1 -0
  89. package/miniprogram_dist/components/h/h.js +60 -0
  90. package/miniprogram_dist/components/h/h.json +4 -0
  91. package/miniprogram_dist/components/h/h.scss +53 -0
  92. package/miniprogram_dist/components/h/h.wxml +1 -0
  93. package/miniprogram_dist/components/highlight/highlight.js +77 -0
  94. package/miniprogram_dist/components/highlight/highlight.json +4 -0
  95. package/miniprogram_dist/components/highlight/highlight.scss +8 -0
  96. package/miniprogram_dist/components/highlight/highlight.wxml +12 -0
  97. package/miniprogram_dist/components/infinite-scroll/infinite-scroll.js +31 -0
  98. package/miniprogram_dist/components/infinite-scroll/infinite-scroll.json +4 -0
  99. package/miniprogram_dist/components/infinite-scroll/infinite-scroll.scss +31 -0
  100. package/miniprogram_dist/components/infinite-scroll/infinite-scroll.wxml +12 -0
  101. package/miniprogram_dist/components/input/input.js +59 -0
  102. package/miniprogram_dist/components/input/input.json +4 -0
  103. package/miniprogram_dist/components/input/input.scss +96 -0
  104. package/miniprogram_dist/components/input/input.wxml +34 -0
  105. package/miniprogram_dist/components/input-otp/input-otp.js +106 -0
  106. package/miniprogram_dist/components/input-otp/input-otp.json +4 -0
  107. package/miniprogram_dist/components/input-otp/input-otp.scss +122 -0
  108. package/miniprogram_dist/components/input-otp/input-otp.wxml +38 -0
  109. package/miniprogram_dist/components/layout/layout.js +50 -0
  110. package/miniprogram_dist/components/layout/layout.json +4 -0
  111. package/miniprogram_dist/components/layout/layout.scss +10 -0
  112. package/miniprogram_dist/components/layout/layout.wxml +3 -0
  113. package/miniprogram_dist/components/layout-content/layout-content.js +47 -0
  114. package/miniprogram_dist/components/layout-content/layout-content.json +4 -0
  115. package/miniprogram_dist/components/layout-content/layout-content.scss +5 -0
  116. package/miniprogram_dist/components/layout-content/layout-content.wxml +13 -0
  117. package/miniprogram_dist/components/layout-footer/layout-footer.js +59 -0
  118. package/miniprogram_dist/components/layout-footer/layout-footer.json +4 -0
  119. package/miniprogram_dist/components/layout-footer/layout-footer.scss +23 -0
  120. package/miniprogram_dist/components/layout-footer/layout-footer.wxml +16 -0
  121. package/miniprogram_dist/components/layout-header/layout-header.js +59 -0
  122. package/miniprogram_dist/components/layout-header/layout-header.json +4 -0
  123. package/miniprogram_dist/components/layout-header/layout-header.scss +23 -0
  124. package/miniprogram_dist/components/layout-header/layout-header.wxml +16 -0
  125. package/miniprogram_dist/components/layout-sider/layout-sider.js +48 -0
  126. package/miniprogram_dist/components/layout-sider/layout-sider.json +4 -0
  127. package/miniprogram_dist/components/layout-sider/layout-sider.scss +13 -0
  128. package/miniprogram_dist/components/layout-sider/layout-sider.wxml +5 -0
  129. package/miniprogram_dist/components/list/list.js +55 -0
  130. package/miniprogram_dist/components/list/list.json +4 -0
  131. package/miniprogram_dist/components/list/list.scss +51 -0
  132. package/miniprogram_dist/components/list/list.wxml +9 -0
  133. package/miniprogram_dist/components/list-item/list-item.js +24 -0
  134. package/miniprogram_dist/components/list-item/list-item.json +4 -0
  135. package/miniprogram_dist/components/list-item/list-item.scss +51 -0
  136. package/miniprogram_dist/components/list-item/list-item.wxml +14 -0
  137. package/miniprogram_dist/components/navigation-bar/navigation-bar.js +77 -0
  138. package/miniprogram_dist/components/navigation-bar/navigation-bar.json +4 -0
  139. package/miniprogram_dist/components/navigation-bar/navigation-bar.scss +63 -0
  140. package/miniprogram_dist/components/navigation-bar/navigation-bar.wxml +35 -0
  141. package/miniprogram_dist/components/number-animation/number-animation.js +124 -0
  142. package/miniprogram_dist/components/number-animation/number-animation.json +4 -0
  143. package/miniprogram_dist/components/number-animation/number-animation.scss +3 -0
  144. package/miniprogram_dist/components/number-animation/number-animation.wxml +1 -0
  145. package/miniprogram_dist/components/popover/popover.js +183 -0
  146. package/miniprogram_dist/components/popover/popover.json +4 -0
  147. package/miniprogram_dist/components/popover/popover.scss +69 -0
  148. package/miniprogram_dist/components/popover/popover.wxml +19 -0
  149. package/miniprogram_dist/components/qr-code/qr-code.js +216 -0
  150. package/miniprogram_dist/components/qr-code/qr-code.json +4 -0
  151. package/miniprogram_dist/components/qr-code/qr-code.scss +8 -0
  152. package/miniprogram_dist/components/qr-code/qr-code.wxml +16 -0
  153. package/miniprogram_dist/components/radio/radio.js +38 -0
  154. package/miniprogram_dist/components/radio/radio.json +4 -0
  155. package/miniprogram_dist/components/radio/radio.scss +50 -0
  156. package/miniprogram_dist/components/radio/radio.wxml +12 -0
  157. package/miniprogram_dist/components/radio-button/radio-button.js +39 -0
  158. package/miniprogram_dist/components/radio-button/radio-button.json +4 -0
  159. package/miniprogram_dist/components/radio-button/radio-button.scss +39 -0
  160. package/miniprogram_dist/components/radio-button/radio-button.wxml +8 -0
  161. package/miniprogram_dist/components/radio-group/radio-group.js +72 -0
  162. package/miniprogram_dist/components/radio-group/radio-group.json +4 -0
  163. package/miniprogram_dist/components/radio-group/radio-group.scss +9 -0
  164. package/miniprogram_dist/components/radio-group/radio-group.wxml +3 -0
  165. package/miniprogram_dist/components/rate/rate.js +90 -0
  166. package/miniprogram_dist/components/rate/rate.json +4 -0
  167. package/miniprogram_dist/components/rate/rate.scss +59 -0
  168. package/miniprogram_dist/components/rate/rate.wxml +16 -0
  169. package/miniprogram_dist/components/select/select.js +201 -0
  170. package/miniprogram_dist/components/select/select.json +7 -0
  171. package/miniprogram_dist/components/select/select.scss +235 -0
  172. package/miniprogram_dist/components/select/select.wxml +79 -0
  173. package/miniprogram_dist/components/stepper/stepper.js +113 -0
  174. package/miniprogram_dist/components/stepper/stepper.json +4 -0
  175. package/miniprogram_dist/components/stepper/stepper.scss +73 -0
  176. package/miniprogram_dist/components/stepper/stepper.wxml +23 -0
  177. package/miniprogram_dist/components/switch/switch.js +42 -0
  178. package/miniprogram_dist/components/switch/switch.json +4 -0
  179. package/miniprogram_dist/components/switch/switch.scss +77 -0
  180. package/miniprogram_dist/components/switch/switch.wxml +10 -0
  181. package/miniprogram_dist/components/tab-bar/tab-bar.js +53 -0
  182. package/miniprogram_dist/components/tab-bar/tab-bar.json +4 -0
  183. package/miniprogram_dist/components/tab-bar/tab-bar.scss +53 -0
  184. package/miniprogram_dist/components/tab-bar/tab-bar.wxml +12 -0
  185. package/miniprogram_dist/components/tag/tag.js +87 -0
  186. package/miniprogram_dist/components/tag/tag.json +4 -0
  187. package/miniprogram_dist/components/tag/tag.scss +138 -0
  188. package/miniprogram_dist/components/tag/tag.wxml +12 -0
  189. package/miniprogram_dist/components/textarea/textarea.js +46 -0
  190. package/miniprogram_dist/components/textarea/textarea.json +4 -0
  191. package/miniprogram_dist/components/textarea/textarea.scss +51 -0
  192. package/miniprogram_dist/components/textarea/textarea.wxml +20 -0
  193. package/miniprogram_dist/components/theme-provider/presets.js +101 -0
  194. package/miniprogram_dist/components/theme-provider/theme-provider.js +34 -0
  195. package/miniprogram_dist/components/theme-provider/theme-provider.json +4 -0
  196. package/miniprogram_dist/components/theme-provider/theme-provider.scss +3 -0
  197. package/miniprogram_dist/components/theme-provider/theme-provider.wxml +3 -0
  198. package/miniprogram_dist/components/time-picker/time-picker.js +136 -0
  199. package/miniprogram_dist/components/time-picker/time-picker.json +7 -0
  200. package/miniprogram_dist/components/time-picker/time-picker.scss +135 -0
  201. package/miniprogram_dist/components/time-picker/time-picker.wxml +47 -0
  202. package/miniprogram_dist/components/tooltip/tooltip.js +179 -0
  203. package/miniprogram_dist/components/tooltip/tooltip.json +4 -0
  204. package/miniprogram_dist/components/tooltip/tooltip.scss +66 -0
  205. package/miniprogram_dist/components/tooltip/tooltip.wxml +17 -0
  206. package/miniprogram_dist/components/tree/tree.js +647 -0
  207. package/miniprogram_dist/components/tree/tree.json +4 -0
  208. package/miniprogram_dist/components/tree/tree.scss +178 -0
  209. package/miniprogram_dist/components/tree/tree.wxml +59 -0
  210. package/miniprogram_dist/components/tree-select/tree-select.js +260 -0
  211. package/miniprogram_dist/components/tree-select/tree-select.json +8 -0
  212. package/miniprogram_dist/components/tree-select/tree-select.scss +250 -0
  213. package/miniprogram_dist/components/tree-select/tree-select.wxml +118 -0
  214. package/miniprogram_dist/components/upload/upload.js +387 -0
  215. package/miniprogram_dist/components/upload/upload.json +4 -0
  216. package/miniprogram_dist/components/upload/upload.scss +258 -0
  217. package/miniprogram_dist/components/upload/upload.wxml +142 -0
  218. package/miniprogram_dist/components/watermark/watermark.js +260 -0
  219. package/miniprogram_dist/components/watermark/watermark.json +4 -0
  220. package/miniprogram_dist/components/watermark/watermark.scss +35 -0
  221. package/miniprogram_dist/components/watermark/watermark.wxml +13 -0
  222. package/miniprogram_dist/libs/qrcodegen.js +714 -0
  223. package/miniprogram_dist/libs/seemly.min.js +547 -0
  224. package/miniprogram_dist/libs/tempo_1_0_0.js +1264 -0
  225. package/miniprogram_dist/libs/validator_13_56_26.min.js +5282 -0
  226. package/miniprogram_dist/styles/demo.scss +96 -0
  227. package/miniprogram_dist/styles/iconfont.scss +91 -0
  228. package/miniprogram_dist/styles/theme.scss +126 -0
  229. package/miniprogram_dist/styles/tokens.scss +292 -0
  230. package/miniprogram_dist/utils/relations.js +21 -0
  231. package/package.json +25 -0
@@ -0,0 +1,383 @@
1
+ /* ---- Trigger ---- */
2
+
3
+ .w-color-picker__trigger {
4
+ display: flex;
5
+ align-items: center;
6
+ height: var(--size-input-height);
7
+ padding: 0 var(--spacing-md);
8
+ background: var(--color-input-bg);
9
+ border: 2rpx solid var(--color-input-border);
10
+ border-radius: var(--radius-md);
11
+ box-sizing: border-box;
12
+ transition: border-color 0.2s;
13
+ gap: var(--spacing-xs);
14
+ }
15
+
16
+ .w-color-picker--size-medium .w-color-picker__trigger {
17
+ height: var(--size-input-height-md);
18
+ }
19
+
20
+ .w-color-picker--size-small .w-color-picker__trigger {
21
+ height: var(--size-input-height-sm);
22
+ padding: 0 var(--spacing-sm);
23
+ font-size: var(--font-size-sm);
24
+ }
25
+
26
+ .w-color-picker--disabled .w-color-picker__trigger {
27
+ background: var(--color-input-bg-disabled);
28
+ opacity: 0.6;
29
+ }
30
+
31
+ .w-color-picker--error .w-color-picker__trigger {
32
+ border-color: var(--color-input-border-error);
33
+ }
34
+
35
+ .w-color-picker--warning .w-color-picker__trigger {
36
+ border-color: var(--color-input-border-warning);
37
+ }
38
+
39
+ .w-color-picker__trigger-swatch {
40
+ width: 40rpx;
41
+ height: 40rpx;
42
+ border-radius: var(--radius-sm);
43
+ border: 2rpx solid var(--color-separator);
44
+ flex-shrink: 0;
45
+ box-sizing: border-box;
46
+ }
47
+
48
+ .w-color-picker__text {
49
+ flex: 1;
50
+ min-width: 0;
51
+ color: var(--color-text-primary);
52
+ font-size: inherit;
53
+ }
54
+
55
+ .w-color-picker__placeholder {
56
+ flex: 1;
57
+ min-width: 0;
58
+ color: var(--color-text-placeholder);
59
+ font-size: inherit;
60
+ }
61
+
62
+ .w-color-picker__clear {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ width: 36rpx;
67
+ height: 36rpx;
68
+ flex-shrink: 0;
69
+ }
70
+
71
+ .w-color-picker__clear-icon {
72
+ width: 28rpx;
73
+ height: 28rpx;
74
+ border-radius: 50%;
75
+ background: var(--color-text-placeholder);
76
+ position: relative;
77
+
78
+ &::before,
79
+ &::after {
80
+ content: '';
81
+ position: absolute;
82
+ top: 50%;
83
+ left: 50%;
84
+ width: 14rpx;
85
+ height: 2rpx;
86
+ background: var(--color-bg-elevated);
87
+ transform-origin: center;
88
+ }
89
+
90
+ &::before {
91
+ transform: translate(-50%, -50%) rotate(45deg);
92
+ }
93
+
94
+ &::after {
95
+ transform: translate(-50%, -50%) rotate(-45deg);
96
+ }
97
+ }
98
+
99
+ .w-color-picker__icon {
100
+ flex-shrink: 0;
101
+ display: flex;
102
+ align-items: center;
103
+ }
104
+
105
+ .w-color-picker__color-icon {
106
+ width: 28rpx;
107
+ height: 28rpx;
108
+ border-radius: 50%;
109
+ background: linear-gradient(135deg, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ff00ff);
110
+ border: 2rpx solid var(--color-separator);
111
+ box-sizing: border-box;
112
+ }
113
+
114
+ /* ---- Panel ---- */
115
+
116
+ .w-color-picker__panel {
117
+ background: var(--color-bg-elevated);
118
+ padding-bottom: env(safe-area-inset-bottom);
119
+ }
120
+
121
+ .w-color-picker__header {
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: space-between;
125
+ padding: var(--spacing-md) var(--spacing-lg);
126
+ border-bottom: 1rpx solid var(--color-separator);
127
+ }
128
+
129
+ .w-color-picker__btn {
130
+ font-size: var(--font-size-md);
131
+ color: var(--color-text-secondary);
132
+ }
133
+
134
+ .w-color-picker__btn--primary {
135
+ color: var(--color-brand);
136
+ font-weight: 500;
137
+ }
138
+
139
+ .w-color-picker__title {
140
+ font-size: var(--font-size-lg);
141
+ font-weight: 500;
142
+ color: var(--color-text-primary);
143
+ }
144
+
145
+ /* ---- Palette ---- */
146
+
147
+ .w-color-picker__palette-wrap {
148
+ padding: var(--spacing-lg) var(--spacing-lg) 0;
149
+ }
150
+
151
+ .w-color-picker__palette {
152
+ position: relative;
153
+ width: 100%;
154
+ height: 360rpx;
155
+ border-radius: var(--radius-md);
156
+ overflow: hidden;
157
+ }
158
+
159
+ .w-color-picker__palette-white {
160
+ position: absolute;
161
+ inset: 0;
162
+ background: linear-gradient(to right, #ffffff, rgba(255, 255, 255, 0));
163
+ }
164
+
165
+ .w-color-picker__palette-black {
166
+ position: absolute;
167
+ inset: 0;
168
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), #000000);
169
+ }
170
+
171
+ .w-color-picker__palette-handle {
172
+ position: absolute;
173
+ width: 32rpx;
174
+ height: 32rpx;
175
+ border-radius: 50%;
176
+ border: 4rpx solid #ffffff;
177
+ box-shadow:
178
+ 0 0 4rpx rgba(0, 0, 0, 0.4),
179
+ inset 0 0 2rpx rgba(0, 0, 0, 0.1);
180
+ transform: translate(-50%, -50%);
181
+ box-sizing: border-box;
182
+ }
183
+
184
+ /* ---- Controls row ---- */
185
+
186
+ .w-color-picker__controls {
187
+ display: flex;
188
+ align-items: center;
189
+ padding: var(--spacing-md) var(--spacing-lg);
190
+ gap: var(--spacing-md);
191
+ }
192
+
193
+ .w-color-picker__preview {
194
+ position: relative;
195
+ width: 64rpx;
196
+ height: 64rpx;
197
+ border-radius: var(--radius-md);
198
+ overflow: hidden;
199
+ flex-shrink: 0;
200
+ border: 2rpx solid var(--color-separator);
201
+ box-sizing: border-box;
202
+ }
203
+
204
+ .w-color-picker__preview-checker {
205
+ position: absolute;
206
+ inset: 0;
207
+ background-image:
208
+ linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%),
209
+ linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%);
210
+ background-size: 16rpx 16rpx;
211
+ background-position:
212
+ 0 0,
213
+ 8rpx 8rpx;
214
+ }
215
+
216
+ .w-color-picker__preview-color {
217
+ position: absolute;
218
+ inset: 0;
219
+ }
220
+
221
+ .w-color-picker__sliders {
222
+ flex: 1;
223
+ display: flex;
224
+ flex-direction: column;
225
+ gap: var(--spacing-md);
226
+ }
227
+
228
+ /* ---- Hue Slider ---- */
229
+
230
+ .w-color-picker__hue {
231
+ position: relative;
232
+ width: 100%;
233
+ height: 24rpx;
234
+ border-radius: 12rpx;
235
+ background: linear-gradient(
236
+ to right,
237
+ #ff0000,
238
+ #ffff00,
239
+ #00ff00,
240
+ #00ffff,
241
+ #0000ff,
242
+ #ff00ff,
243
+ #ff0000
244
+ );
245
+ }
246
+
247
+ /* ---- Alpha Slider ---- */
248
+
249
+ .w-color-picker__alpha {
250
+ position: relative;
251
+ width: 100%;
252
+ height: 24rpx;
253
+ border-radius: 12rpx;
254
+ overflow: hidden;
255
+ }
256
+
257
+ .w-color-picker__alpha-checker {
258
+ position: absolute;
259
+ inset: 0;
260
+ border-radius: 12rpx;
261
+ background-image:
262
+ linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%),
263
+ linear-gradient(45deg, #e0e0e0 25%, transparent 25%, transparent 75%, #e0e0e0 75%);
264
+ background-size: 12rpx 12rpx;
265
+ background-position:
266
+ 0 0,
267
+ 6rpx 6rpx;
268
+ }
269
+
270
+ .w-color-picker__alpha-gradient {
271
+ position: absolute;
272
+ inset: 0;
273
+ border-radius: 12rpx;
274
+ }
275
+
276
+ /* ---- Slider Handle ---- */
277
+
278
+ .w-color-picker__slider-handle {
279
+ position: absolute;
280
+ top: 50%;
281
+ width: 28rpx;
282
+ height: 28rpx;
283
+ border-radius: 50%;
284
+ border: 4rpx solid #ffffff;
285
+ box-shadow: 0 0 4rpx rgba(0, 0, 0, 0.4);
286
+ transform: translate(-50%, -50%);
287
+ box-sizing: border-box;
288
+ }
289
+
290
+ /* ---- Inputs ---- */
291
+
292
+ .w-color-picker__inputs {
293
+ display: flex;
294
+ align-items: flex-start;
295
+ gap: var(--spacing-sm);
296
+ padding: 0 var(--spacing-lg) var(--spacing-md);
297
+ }
298
+
299
+ .w-color-picker__input-field {
300
+ flex: 1;
301
+ display: flex;
302
+ flex-direction: column;
303
+ align-items: center;
304
+ min-width: 0;
305
+ }
306
+
307
+ .w-color-picker__input-field--hex {
308
+ flex: 2;
309
+ }
310
+
311
+ .w-color-picker__input {
312
+ width: 100%;
313
+ height: 56rpx;
314
+ border: 2rpx solid var(--color-separator);
315
+ border-radius: var(--radius-sm);
316
+ text-align: center;
317
+ font-size: var(--font-size-sm);
318
+ color: var(--color-text-primary);
319
+ background: var(--color-input-bg);
320
+ box-sizing: border-box;
321
+ padding: 0 var(--spacing-xs);
322
+ }
323
+
324
+ .w-color-picker__input-label {
325
+ font-size: 20rpx;
326
+ color: var(--color-text-secondary);
327
+ margin-top: 4rpx;
328
+ line-height: 1.4;
329
+ }
330
+
331
+ .w-color-picker__mode-btn {
332
+ display: flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ width: 48rpx;
336
+ height: 56rpx;
337
+ flex-shrink: 0;
338
+ }
339
+
340
+ .w-color-picker__mode-arrows {
341
+ width: 24rpx;
342
+ height: 32rpx;
343
+ position: relative;
344
+
345
+ &::before,
346
+ &::after {
347
+ content: '';
348
+ position: absolute;
349
+ left: 50%;
350
+ width: 0;
351
+ height: 0;
352
+ border-left: 8rpx solid transparent;
353
+ border-right: 8rpx solid transparent;
354
+ transform: translateX(-50%);
355
+ }
356
+
357
+ &::before {
358
+ top: 0;
359
+ border-bottom: 10rpx solid var(--color-text-secondary);
360
+ }
361
+
362
+ &::after {
363
+ bottom: 0;
364
+ border-top: 10rpx solid var(--color-text-secondary);
365
+ }
366
+ }
367
+
368
+ /* ---- Swatches ---- */
369
+
370
+ .w-color-picker__swatches {
371
+ display: flex;
372
+ flex-wrap: wrap;
373
+ gap: var(--spacing-sm);
374
+ padding: 0 var(--spacing-lg) var(--spacing-lg);
375
+ }
376
+
377
+ .w-color-picker__swatch-item {
378
+ width: 48rpx;
379
+ height: 48rpx;
380
+ border-radius: var(--radius-sm);
381
+ border: 2rpx solid var(--color-separator);
382
+ box-sizing: border-box;
383
+ }
@@ -0,0 +1,232 @@
1
+ <view
2
+ class="w-color-picker w-color-picker--size-{{size || _formItemSize || 'medium'}} {{(disabled || _formItemDisabled) ? 'w-color-picker--disabled' : ''}} {{readonly ? 'w-color-picker--readonly' : ''}} {{status === 'error' ? 'w-color-picker--error' : ''}} {{status === 'warning' ? 'w-color-picker--warning' : ''}}"
3
+ >
4
+ <view class="w-color-picker__trigger" bindtap="handleTap">
5
+ <view
6
+ wx:if="{{_displayColor}}"
7
+ class="w-color-picker__trigger-swatch"
8
+ style="background: {{_displayColor}}"
9
+ ></view>
10
+ <text wx:if="{{_displayText}}" class="w-color-picker__text">{{_displayText}}</text>
11
+ <text wx:else class="w-color-picker__placeholder">{{placeholder}}</text>
12
+ <view
13
+ wx:if="{{clearable && _displayText && !disabled && !_formItemDisabled && !readonly}}"
14
+ class="w-color-picker__clear"
15
+ catchtap="handleClear"
16
+ >
17
+ <view class="w-color-picker__clear-icon"></view>
18
+ </view>
19
+ <view wx:else class="w-color-picker__icon">
20
+ <view class="w-color-picker__color-icon"></view>
21
+ </view>
22
+ </view>
23
+
24
+ <w-drawer show="{{_visible}}" placement="bottom" round bind:update:show="handleCancel">
25
+ <view class="w-color-picker__panel">
26
+ <!-- Header -->
27
+ <view class="w-color-picker__header">
28
+ <view class="w-color-picker__btn" bindtap="handleCancel">取消</view>
29
+ <view class="w-color-picker__title">选择颜色</view>
30
+ <view class="w-color-picker__btn w-color-picker__btn--primary" bindtap="handleConfirm">
31
+ 确认
32
+ </view>
33
+ </view>
34
+
35
+ <!-- SV Palette -->
36
+ <view class="w-color-picker__palette-wrap">
37
+ <view
38
+ class="w-color-picker__palette"
39
+ style="{{_paletteHue}}"
40
+ bindtouchstart="handlePaletteTouchStart"
41
+ bindtouchmove="handlePaletteTouchMove"
42
+ catchtouchmove="handlePaletteTouchMove"
43
+ >
44
+ <view class="w-color-picker__palette-white"></view>
45
+ <view class="w-color-picker__palette-black"></view>
46
+ <view
47
+ class="w-color-picker__palette-handle"
48
+ style="left: {{_handleX}}%; top: {{_handleY}}%"
49
+ ></view>
50
+ </view>
51
+ </view>
52
+
53
+ <!-- Controls: preview + sliders -->
54
+ <view class="w-color-picker__controls">
55
+ <view class="w-color-picker__preview">
56
+ <view class="w-color-picker__preview-checker"></view>
57
+ <view class="w-color-picker__preview-color" style="background: {{_previewColor}}"></view>
58
+ </view>
59
+
60
+ <view class="w-color-picker__sliders">
61
+ <!-- Hue slider -->
62
+ <view
63
+ class="w-color-picker__hue"
64
+ bindtouchstart="handleHueTouchStart"
65
+ bindtouchmove="handleHueTouchMove"
66
+ catchtouchmove="handleHueTouchMove"
67
+ >
68
+ <view class="w-color-picker__slider-handle" style="left: {{_hueX}}%"></view>
69
+ </view>
70
+
71
+ <!-- Alpha slider -->
72
+ <view
73
+ wx:if="{{showAlpha}}"
74
+ class="w-color-picker__alpha"
75
+ bindtouchstart="handleAlphaTouchStart"
76
+ bindtouchmove="handleAlphaTouchMove"
77
+ catchtouchmove="handleAlphaTouchMove"
78
+ >
79
+ <view class="w-color-picker__alpha-checker"></view>
80
+ <view class="w-color-picker__alpha-gradient" style="{{_alphaGradient}}"></view>
81
+ <view class="w-color-picker__slider-handle" style="left: {{_alphaX}}%"></view>
82
+ </view>
83
+ </view>
84
+ </view>
85
+
86
+ <!-- Input section -->
87
+ <view wx:if="{{_hasModes}}" class="w-color-picker__inputs">
88
+ <!-- HEX mode -->
89
+ <block wx:if="{{_inputMode === 'hex'}}">
90
+ <view class="w-color-picker__input-field w-color-picker__input-field--hex">
91
+ <input class="w-color-picker__input" value="{{_hexVal}}" bindblur="handleHexInput" />
92
+ <text class="w-color-picker__input-label">HEX</text>
93
+ </view>
94
+ </block>
95
+
96
+ <!-- RGB mode -->
97
+ <block wx:elif="{{_inputMode === 'rgb'}}">
98
+ <view class="w-color-picker__input-field">
99
+ <input
100
+ type="number"
101
+ class="w-color-picker__input"
102
+ value="{{_rVal}}"
103
+ data-channel="r"
104
+ bindblur="handleRgbInput"
105
+ />
106
+ <text class="w-color-picker__input-label">R</text>
107
+ </view>
108
+ <view class="w-color-picker__input-field">
109
+ <input
110
+ type="number"
111
+ class="w-color-picker__input"
112
+ value="{{_gVal}}"
113
+ data-channel="g"
114
+ bindblur="handleRgbInput"
115
+ />
116
+ <text class="w-color-picker__input-label">G</text>
117
+ </view>
118
+ <view class="w-color-picker__input-field">
119
+ <input
120
+ type="number"
121
+ class="w-color-picker__input"
122
+ value="{{_bVal}}"
123
+ data-channel="b"
124
+ bindblur="handleRgbInput"
125
+ />
126
+ <text class="w-color-picker__input-label">B</text>
127
+ </view>
128
+ </block>
129
+
130
+ <!-- HSL mode -->
131
+ <block wx:elif="{{_inputMode === 'hsl'}}">
132
+ <view class="w-color-picker__input-field">
133
+ <input
134
+ type="number"
135
+ class="w-color-picker__input"
136
+ value="{{_hslH}}"
137
+ data-channel="h"
138
+ bindblur="handleHslInput"
139
+ />
140
+ <text class="w-color-picker__input-label">H</text>
141
+ </view>
142
+ <view class="w-color-picker__input-field">
143
+ <input
144
+ type="number"
145
+ class="w-color-picker__input"
146
+ value="{{_hslS}}"
147
+ data-channel="s"
148
+ bindblur="handleHslInput"
149
+ />
150
+ <text class="w-color-picker__input-label">S</text>
151
+ </view>
152
+ <view class="w-color-picker__input-field">
153
+ <input
154
+ type="number"
155
+ class="w-color-picker__input"
156
+ value="{{_hslL}}"
157
+ data-channel="l"
158
+ bindblur="handleHslInput"
159
+ />
160
+ <text class="w-color-picker__input-label">L</text>
161
+ </view>
162
+ </block>
163
+
164
+ <!-- HSV mode -->
165
+ <block wx:elif="{{_inputMode === 'hsv'}}">
166
+ <view class="w-color-picker__input-field">
167
+ <input
168
+ type="number"
169
+ class="w-color-picker__input"
170
+ value="{{_h}}"
171
+ data-channel="h"
172
+ bindblur="handleHsvInput"
173
+ />
174
+ <text class="w-color-picker__input-label">H</text>
175
+ </view>
176
+ <view class="w-color-picker__input-field">
177
+ <input
178
+ type="number"
179
+ class="w-color-picker__input"
180
+ value="{{_s}}"
181
+ data-channel="s"
182
+ bindblur="handleHsvInput"
183
+ />
184
+ <text class="w-color-picker__input-label">S</text>
185
+ </view>
186
+ <view class="w-color-picker__input-field">
187
+ <input
188
+ type="number"
189
+ class="w-color-picker__input"
190
+ value="{{_v}}"
191
+ data-channel="v"
192
+ bindblur="handleHsvInput"
193
+ />
194
+ <text class="w-color-picker__input-label">V</text>
195
+ </view>
196
+ </block>
197
+
198
+ <!-- Alpha input -->
199
+ <view wx:if="{{showAlpha}}" class="w-color-picker__input-field">
200
+ <input
201
+ type="number"
202
+ class="w-color-picker__input"
203
+ value="{{_aVal}}"
204
+ bindblur="handleAlphaInput"
205
+ />
206
+ <text class="w-color-picker__input-label">A</text>
207
+ </view>
208
+
209
+ <!-- Mode toggle -->
210
+ <view
211
+ wx:if="{{_showModeToggle}}"
212
+ class="w-color-picker__mode-btn"
213
+ bindtap="handleModeToggle"
214
+ >
215
+ <view class="w-color-picker__mode-arrows"></view>
216
+ </view>
217
+ </view>
218
+
219
+ <!-- Swatches -->
220
+ <view wx:if="{{swatches.length}}" class="w-color-picker__swatches">
221
+ <view
222
+ wx:for="{{swatches}}"
223
+ wx:key="*this"
224
+ class="w-color-picker__swatch-item"
225
+ style="background: {{item}}"
226
+ bindtap="handleSwatchTap"
227
+ data-color="{{item}}"
228
+ ></view>
229
+ </view>
230
+ </view>
231
+ </w-drawer>
232
+ </view>