wx-sky-ui 1.0.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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +138 -0
  3. package/miniprogram_dist/action-sheet/index.d.ts +0 -0
  4. package/miniprogram_dist/action-sheet/index.js +67 -0
  5. package/miniprogram_dist/action-sheet/index.js.map +1 -0
  6. package/miniprogram_dist/action-sheet/index.json +6 -0
  7. package/miniprogram_dist/action-sheet/index.wxml +62 -0
  8. package/miniprogram_dist/action-sheet/index.wxss +227 -0
  9. package/miniprogram_dist/action-sheet/index.wxss.map +1 -0
  10. package/miniprogram_dist/badge/index.d.ts +0 -0
  11. package/miniprogram_dist/badge/index.js +114 -0
  12. package/miniprogram_dist/badge/index.js.map +1 -0
  13. package/miniprogram_dist/badge/index.json +6 -0
  14. package/miniprogram_dist/badge/index.wxml +16 -0
  15. package/miniprogram_dist/badge/index.wxss +105 -0
  16. package/miniprogram_dist/badge/index.wxss.map +1 -0
  17. package/miniprogram_dist/button/index.d.ts +0 -0
  18. package/miniprogram_dist/button/index.js +140 -0
  19. package/miniprogram_dist/button/index.js.map +1 -0
  20. package/miniprogram_dist/button/index.json +6 -0
  21. package/miniprogram_dist/button/index.wxml +28 -0
  22. package/miniprogram_dist/button/index.wxss +211 -0
  23. package/miniprogram_dist/button/index.wxss.map +1 -0
  24. package/miniprogram_dist/cell/index.d.ts +0 -0
  25. package/miniprogram_dist/cell/index.js +55 -0
  26. package/miniprogram_dist/cell/index.js.map +1 -0
  27. package/miniprogram_dist/cell/index.json +6 -0
  28. package/miniprogram_dist/cell/index.wxml +37 -0
  29. package/miniprogram_dist/cell/index.wxss +82 -0
  30. package/miniprogram_dist/cell/index.wxss.map +1 -0
  31. package/miniprogram_dist/checkbox/index.d.ts +0 -0
  32. package/miniprogram_dist/checkbox/index.js +50 -0
  33. package/miniprogram_dist/checkbox/index.js.map +1 -0
  34. package/miniprogram_dist/checkbox/index.json +6 -0
  35. package/miniprogram_dist/checkbox/index.wxml +16 -0
  36. package/miniprogram_dist/checkbox/index.wxss +87 -0
  37. package/miniprogram_dist/checkbox/index.wxss.map +1 -0
  38. package/miniprogram_dist/common/utils/index.d.ts +22 -0
  39. package/miniprogram_dist/common/utils/index.js +46 -0
  40. package/miniprogram_dist/common/utils/index.js.map +1 -0
  41. package/miniprogram_dist/datetime-picker/calendar.d.ts +1 -0
  42. package/miniprogram_dist/datetime-picker/calendar.js +424 -0
  43. package/miniprogram_dist/datetime-picker/calendar.js.map +1 -0
  44. package/miniprogram_dist/datetime-picker/calendar.json +8 -0
  45. package/miniprogram_dist/datetime-picker/calendar.wxml +86 -0
  46. package/miniprogram_dist/datetime-picker/calendar.wxss +352 -0
  47. package/miniprogram_dist/datetime-picker/calendar.wxss.map +1 -0
  48. package/miniprogram_dist/datetime-picker/index.d.ts +1 -0
  49. package/miniprogram_dist/datetime-picker/index.js +672 -0
  50. package/miniprogram_dist/datetime-picker/index.js.map +1 -0
  51. package/miniprogram_dist/datetime-picker/index.json +9 -0
  52. package/miniprogram_dist/datetime-picker/index.wxml +125 -0
  53. package/miniprogram_dist/datetime-picker/index.wxss +243 -0
  54. package/miniprogram_dist/datetime-picker/index.wxss.map +1 -0
  55. package/miniprogram_dist/datetime-picker/time-picker.d.ts +0 -0
  56. package/miniprogram_dist/datetime-picker/time-picker.js +83 -0
  57. package/miniprogram_dist/datetime-picker/time-picker.js.map +1 -0
  58. package/miniprogram_dist/datetime-picker/time-picker.json +6 -0
  59. package/miniprogram_dist/datetime-picker/time-picker.wxml +36 -0
  60. package/miniprogram_dist/datetime-picker/time-picker.wxss +75 -0
  61. package/miniprogram_dist/datetime-picker/time-picker.wxss.map +1 -0
  62. package/miniprogram_dist/datetime-picker/util.d.ts +172 -0
  63. package/miniprogram_dist/datetime-picker/util.js +404 -0
  64. package/miniprogram_dist/datetime-picker/util.js.map +1 -0
  65. package/miniprogram_dist/dialog/index.d.ts +0 -0
  66. package/miniprogram_dist/dialog/index.js +81 -0
  67. package/miniprogram_dist/dialog/index.js.map +1 -0
  68. package/miniprogram_dist/dialog/index.json +6 -0
  69. package/miniprogram_dist/dialog/index.wxml +55 -0
  70. package/miniprogram_dist/dialog/index.wxss +143 -0
  71. package/miniprogram_dist/dialog/index.wxss.map +1 -0
  72. package/miniprogram_dist/dropdown-select/index.d.ts +4 -0
  73. package/miniprogram_dist/dropdown-select/index.js +84 -0
  74. package/miniprogram_dist/dropdown-select/index.js.map +1 -0
  75. package/miniprogram_dist/dropdown-select/index.json +6 -0
  76. package/miniprogram_dist/dropdown-select/index.wxml +42 -0
  77. package/miniprogram_dist/dropdown-select/index.wxss +189 -0
  78. package/miniprogram_dist/dropdown-select/index.wxss.map +1 -0
  79. package/miniprogram_dist/editor/index.d.ts +0 -0
  80. package/miniprogram_dist/editor/index.js +254 -0
  81. package/miniprogram_dist/editor/index.js.map +1 -0
  82. package/miniprogram_dist/editor/index.json +6 -0
  83. package/miniprogram_dist/editor/index.wxml +142 -0
  84. package/miniprogram_dist/editor/index.wxss +613 -0
  85. package/miniprogram_dist/editor/index.wxss.map +1 -0
  86. package/miniprogram_dist/float-button/index.d.ts +0 -0
  87. package/miniprogram_dist/float-button/index.js +281 -0
  88. package/miniprogram_dist/float-button/index.js.map +1 -0
  89. package/miniprogram_dist/float-button/index.json +8 -0
  90. package/miniprogram_dist/float-button/index.wxml +68 -0
  91. package/miniprogram_dist/float-button/index.wxss +119 -0
  92. package/miniprogram_dist/float-button/index.wxss.map +1 -0
  93. package/miniprogram_dist/html-renderer/index.d.ts +1 -0
  94. package/miniprogram_dist/html-renderer/index.js +74 -0
  95. package/miniprogram_dist/html-renderer/index.js.map +1 -0
  96. package/miniprogram_dist/html-renderer/index.json +6 -0
  97. package/miniprogram_dist/html-renderer/index.wxml +79 -0
  98. package/miniprogram_dist/html-renderer/index.wxss +200 -0
  99. package/miniprogram_dist/html-renderer/index.wxss.map +1 -0
  100. package/miniprogram_dist/html-renderer/parser.d.ts +12 -0
  101. package/miniprogram_dist/html-renderer/parser.js +103 -0
  102. package/miniprogram_dist/html-renderer/parser.js.map +1 -0
  103. package/miniprogram_dist/icon/index.d.ts +1 -0
  104. package/miniprogram_dist/icon/index.js +231 -0
  105. package/miniprogram_dist/icon/index.js.map +1 -0
  106. package/miniprogram_dist/icon/index.json +6 -0
  107. package/miniprogram_dist/icon/index.wxml +13 -0
  108. package/miniprogram_dist/icon/index.wxss +14 -0
  109. package/miniprogram_dist/icon/index.wxss.map +1 -0
  110. package/miniprogram_dist/icon/presets.d.ts +7 -0
  111. package/miniprogram_dist/icon/presets.js +68 -0
  112. package/miniprogram_dist/icon/presets.js.map +1 -0
  113. package/miniprogram_dist/index.d.ts +6 -0
  114. package/miniprogram_dist/index.js +9 -0
  115. package/miniprogram_dist/index.js.map +1 -0
  116. package/miniprogram_dist/input/index.d.ts +0 -0
  117. package/miniprogram_dist/input/index.js +137 -0
  118. package/miniprogram_dist/input/index.js.map +1 -0
  119. package/miniprogram_dist/input/index.json +6 -0
  120. package/miniprogram_dist/input/index.wxml +57 -0
  121. package/miniprogram_dist/input/index.wxss +331 -0
  122. package/miniprogram_dist/input/index.wxss.map +1 -0
  123. package/miniprogram_dist/nav-bar/index.d.ts +0 -0
  124. package/miniprogram_dist/nav-bar/index.js +162 -0
  125. package/miniprogram_dist/nav-bar/index.js.map +1 -0
  126. package/miniprogram_dist/nav-bar/index.json +9 -0
  127. package/miniprogram_dist/nav-bar/index.wxml +46 -0
  128. package/miniprogram_dist/nav-bar/index.wxss +160 -0
  129. package/miniprogram_dist/nav-bar/index.wxss.map +1 -0
  130. package/miniprogram_dist/popup-select/index.d.ts +4 -0
  131. package/miniprogram_dist/popup-select/index.js +70 -0
  132. package/miniprogram_dist/popup-select/index.js.map +1 -0
  133. package/miniprogram_dist/popup-select/index.json +6 -0
  134. package/miniprogram_dist/popup-select/index.wxml +48 -0
  135. package/miniprogram_dist/popup-select/index.wxss +184 -0
  136. package/miniprogram_dist/popup-select/index.wxss.map +1 -0
  137. package/miniprogram_dist/progress/index.d.ts +0 -0
  138. package/miniprogram_dist/progress/index.js +120 -0
  139. package/miniprogram_dist/progress/index.js.map +1 -0
  140. package/miniprogram_dist/progress/index.json +6 -0
  141. package/miniprogram_dist/progress/index.wxml +31 -0
  142. package/miniprogram_dist/progress/index.wxss +163 -0
  143. package/miniprogram_dist/progress/index.wxss.map +1 -0
  144. package/miniprogram_dist/radio/index.d.ts +0 -0
  145. package/miniprogram_dist/radio/index.js +52 -0
  146. package/miniprogram_dist/radio/index.js.map +1 -0
  147. package/miniprogram_dist/radio/index.json +6 -0
  148. package/miniprogram_dist/radio/index.wxml +16 -0
  149. package/miniprogram_dist/radio/index.wxss +62 -0
  150. package/miniprogram_dist/radio/index.wxss.map +1 -0
  151. package/miniprogram_dist/rate/index.d.ts +0 -0
  152. package/miniprogram_dist/rate/index.js +128 -0
  153. package/miniprogram_dist/rate/index.js.map +1 -0
  154. package/miniprogram_dist/rate/index.json +6 -0
  155. package/miniprogram_dist/rate/index.wxml +31 -0
  156. package/miniprogram_dist/rate/index.wxss +89 -0
  157. package/miniprogram_dist/rate/index.wxss.map +1 -0
  158. package/miniprogram_dist/select-input/index.d.ts +0 -0
  159. package/miniprogram_dist/select-input/index.js +116 -0
  160. package/miniprogram_dist/select-input/index.js.map +1 -0
  161. package/miniprogram_dist/select-input/index.json +6 -0
  162. package/miniprogram_dist/select-input/index.wxml +43 -0
  163. package/miniprogram_dist/select-input/index.wxss +143 -0
  164. package/miniprogram_dist/select-input/index.wxss.map +1 -0
  165. package/miniprogram_dist/skeleton/index.d.ts +0 -0
  166. package/miniprogram_dist/skeleton/index.js +102 -0
  167. package/miniprogram_dist/skeleton/index.js.map +1 -0
  168. package/miniprogram_dist/skeleton/index.json +6 -0
  169. package/miniprogram_dist/skeleton/index.wxml +40 -0
  170. package/miniprogram_dist/skeleton/index.wxss +103 -0
  171. package/miniprogram_dist/skeleton/index.wxss.map +1 -0
  172. package/miniprogram_dist/slider/index.d.ts +0 -0
  173. package/miniprogram_dist/slider/index.js +180 -0
  174. package/miniprogram_dist/slider/index.js.map +1 -0
  175. package/miniprogram_dist/slider/index.json +6 -0
  176. package/miniprogram_dist/slider/index.wxml +38 -0
  177. package/miniprogram_dist/slider/index.wxss +132 -0
  178. package/miniprogram_dist/slider/index.wxss.map +1 -0
  179. package/miniprogram_dist/subsection/index.d.ts +0 -0
  180. package/miniprogram_dist/subsection/index.js +85 -0
  181. package/miniprogram_dist/subsection/index.js.map +1 -0
  182. package/miniprogram_dist/subsection/index.json +6 -0
  183. package/miniprogram_dist/subsection/index.wxml +55 -0
  184. package/miniprogram_dist/subsection/index.wxss +150 -0
  185. package/miniprogram_dist/subsection/index.wxss.map +1 -0
  186. package/miniprogram_dist/swipe-cell/index.d.ts +0 -0
  187. package/miniprogram_dist/swipe-cell/index.js +91 -0
  188. package/miniprogram_dist/swipe-cell/index.js.map +1 -0
  189. package/miniprogram_dist/swipe-cell/index.json +6 -0
  190. package/miniprogram_dist/swipe-cell/index.wxml +30 -0
  191. package/miniprogram_dist/swipe-cell/index.wxss +42 -0
  192. package/miniprogram_dist/swipe-cell/index.wxss.map +1 -0
  193. package/miniprogram_dist/swiper/index.d.ts +0 -0
  194. package/miniprogram_dist/swiper/index.js +82 -0
  195. package/miniprogram_dist/swiper/index.js.map +1 -0
  196. package/miniprogram_dist/swiper/index.json +6 -0
  197. package/miniprogram_dist/swiper/index.wxml +53 -0
  198. package/miniprogram_dist/swiper/index.wxss +123 -0
  199. package/miniprogram_dist/swiper/index.wxss.map +1 -0
  200. package/miniprogram_dist/switch/index.d.ts +0 -0
  201. package/miniprogram_dist/switch/index.js +53 -0
  202. package/miniprogram_dist/switch/index.js.map +1 -0
  203. package/miniprogram_dist/switch/index.json +6 -0
  204. package/miniprogram_dist/switch/index.wxml +21 -0
  205. package/miniprogram_dist/switch/index.wxss +198 -0
  206. package/miniprogram_dist/switch/index.wxss.map +1 -0
  207. package/miniprogram_dist/tag/index.d.ts +0 -0
  208. package/miniprogram_dist/tag/index.js +114 -0
  209. package/miniprogram_dist/tag/index.js.map +1 -0
  210. package/miniprogram_dist/tag/index.json +6 -0
  211. package/miniprogram_dist/tag/index.wxml +19 -0
  212. package/miniprogram_dist/tag/index.wxss +182 -0
  213. package/miniprogram_dist/tag/index.wxss.map +1 -0
  214. package/miniprogram_dist/textarea/index.d.ts +0 -0
  215. package/miniprogram_dist/textarea/index.js +143 -0
  216. package/miniprogram_dist/textarea/index.js.map +1 -0
  217. package/miniprogram_dist/textarea/index.json +6 -0
  218. package/miniprogram_dist/textarea/index.wxml +59 -0
  219. package/miniprogram_dist/textarea/index.wxss +242 -0
  220. package/miniprogram_dist/textarea/index.wxss.map +1 -0
  221. package/miniprogram_dist/toast/index.d.ts +0 -0
  222. package/miniprogram_dist/toast/index.js +92 -0
  223. package/miniprogram_dist/toast/index.js.map +1 -0
  224. package/miniprogram_dist/toast/index.json +8 -0
  225. package/miniprogram_dist/toast/index.wxml +30 -0
  226. package/miniprogram_dist/toast/index.wxss +116 -0
  227. package/miniprogram_dist/toast/index.wxss.map +1 -0
  228. package/miniprogram_dist/uploader/index.d.ts +8 -0
  229. package/miniprogram_dist/uploader/index.js +192 -0
  230. package/miniprogram_dist/uploader/index.js.map +1 -0
  231. package/miniprogram_dist/uploader/index.json +8 -0
  232. package/miniprogram_dist/uploader/index.wxml +88 -0
  233. package/miniprogram_dist/uploader/index.wxss +179 -0
  234. package/miniprogram_dist/uploader/index.wxss.map +1 -0
  235. package/package.json +70 -0
@@ -0,0 +1,57 @@
1
+ <view class="sky-input-container">
2
+ <!-- 输入主体卡片(支持 Border, Round, Filled 三种视觉风格,及 Focus 发光高亮) -->
3
+ <view class="sky-input sky-input--{{ variant }} sky-input--{{ size }} {{ focused ? 'sky-input--focus' : '' }} {{ disabled ? 'sky-input--disabled' : '' }}">
4
+
5
+ <!-- 搜索模式前置放大镜图标(纯 CSS 极致手绘) -->
6
+ <view wx:if="{{ search }}" class="sky-input__search-icon"></view>
7
+
8
+ <!-- 前缀自定义插槽 -->
9
+ <view class="sky-input__prefix">
10
+ <slot name="prefix"></slot>
11
+ </view>
12
+
13
+ <!-- 原生小程序高性能文本输入控件 -->
14
+ <input
15
+ class="sky-input__control"
16
+ value="{{ value }}"
17
+ type="{{ type }}"
18
+ placeholder="{{ placeholder }}"
19
+ placeholder-style="{{ placeholderStyle }}"
20
+ disabled="{{ disabled }}"
21
+ maxlength="{{ maxlength }}"
22
+ password="{{ currentPassword }}"
23
+ focus="{{ focus }}"
24
+ confirm-type="{{ search ? 'search' : confirmType }}"
25
+ bindinput="onInput"
26
+ bindfocus="onFocus"
27
+ bindblur="onBlur"
28
+ bindconfirm="onConfirm"
29
+ />
30
+
31
+ <!-- 后缀自定义插槽 -->
32
+ <view class="sky-input__suffix">
33
+ <slot name="suffix"></slot>
34
+ </view>
35
+
36
+ <!-- 一键清除“X”图标(硬件加速 60fps 淡入淡出旋转过渡) -->
37
+ <view class="sky-input__clear-wrapper {{ showClear ? 'sky-input__clear-wrapper--show' : '' }}" hover-class="sky-input__clear-active" hover-stay-time="70" catchtap="onClear">
38
+ <view class="sky-input__clear-icon"></view>
39
+ </view>
40
+
41
+ <!-- 密码眼睛可见性切换(睁眼/闭眼,纯 CSS 极高品味矢量几何魔法,移至最右侧) -->
42
+ <view wx:if="{{ password }}" class="sky-input__eye-wrapper" hover-class="sky-input__eye-active" hover-stay-time="70" catchtap="onPasswordToggle">
43
+ <view class="sky-input__eye-icon {{ currentPassword ? 'sky-input__eye-icon--closed' : 'sky-input__eye-icon--open' }}"></view>
44
+ </view>
45
+
46
+ </view>
47
+
48
+ <!-- 弹性挤压滑入操作区域(仅在 actionText 有值且聚焦/有内容时从右侧优雅切入) -->
49
+ <view wx:if="{{ actionText }}" class="sky-input__action-wrapper {{ (focused || value) ? 'sky-input__action-wrapper--active' : '' }}" bindtap="onAction">
50
+ <text class="sky-input__action-text">{{ actionText }}</text>
51
+ </view>
52
+
53
+ <!-- 静态右侧行动插槽 -->
54
+ <view class="sky-input__action-slot">
55
+ <slot name="action"></slot>
56
+ </view>
57
+ </view>
@@ -0,0 +1,331 @@
1
+ @charset "UTF-8";
2
+ .sky-input-container {
3
+ display: flex;
4
+ flex-direction: row;
5
+ align-items: center;
6
+ width: 100%;
7
+ box-sizing: border-box;
8
+ overflow: hidden;
9
+ position: relative;
10
+ }
11
+
12
+ .sky-input {
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-items: center;
16
+ flex: 1;
17
+ min-width: 0;
18
+ box-sizing: border-box;
19
+ transition: border-color 0.25s ease, box-shadow 0.25s ease, background-color 0.25s ease;
20
+ position: relative;
21
+ }
22
+
23
+ .sky-input--border {
24
+ border: 2rpx solid #e9ecef;
25
+ background-color: #ffffff;
26
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.01);
27
+ }
28
+ .sky-input--border.sky-input--focus {
29
+ border-color: hsl(250, 85%, 55%);
30
+ box-shadow: 0 0 12rpx rgba(75.225, 42.7125, 237.7875, 0.18);
31
+ }
32
+
33
+ .sky-input--round {
34
+ border: 2rpx solid #f1f3f5;
35
+ background-color: #ffffff;
36
+ border-radius: 100rpx;
37
+ box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.02);
38
+ }
39
+ .sky-input--round.sky-input--focus {
40
+ border-color: hsl(250, 85%, 55%);
41
+ background-color: #ffffff;
42
+ box-shadow: 0 0 12rpx rgba(75.225, 42.7125, 237.7875, 0.15);
43
+ }
44
+
45
+ .sky-input--filled {
46
+ border: 2rpx solid transparent;
47
+ background-color: #f8f9fa;
48
+ border-radius: 16rpx;
49
+ }
50
+ .sky-input--filled.sky-input--focus {
51
+ background-color: #ffffff;
52
+ border-color: rgba(75.225, 42.7125, 237.7875, 0.3);
53
+ box-shadow: 0 0 12rpx rgba(75.225, 42.7125, 237.7875, 0.1);
54
+ }
55
+
56
+ .sky-input--normal {
57
+ height: 80rpx;
58
+ border-radius: 12rpx;
59
+ padding: 0 20rpx;
60
+ }
61
+ .sky-input--normal.sky-input--round {
62
+ border-radius: 80rpx;
63
+ }
64
+
65
+ .sky-input--large {
66
+ height: 96rpx;
67
+ border-radius: 16rpx;
68
+ padding: 0 24rpx;
69
+ }
70
+ .sky-input--large.sky-input--round {
71
+ border-radius: 96rpx;
72
+ }
73
+
74
+ .sky-input__control {
75
+ flex: 1;
76
+ height: 100%;
77
+ font-size: 28rpx;
78
+ color: #212529;
79
+ padding: 0 8rpx;
80
+ box-sizing: border-box;
81
+ background-color: transparent;
82
+ }
83
+
84
+ .sky-input--disabled {
85
+ background-color: rgba(0, 0, 0, 0.02) !important;
86
+ border-color: #e9ecef !important;
87
+ box-shadow: none !important;
88
+ }
89
+ .sky-input--disabled .sky-input__control {
90
+ color: #adb5bd !important;
91
+ }
92
+ .sky-input--disabled .sky-input__search-icon,
93
+ .sky-input--disabled .sky-input__prefix,
94
+ .sky-input--disabled .sky-input__suffix {
95
+ opacity: 0.3 !important;
96
+ }
97
+
98
+ .sky-input__search-icon {
99
+ position: relative;
100
+ width: 24rpx;
101
+ height: 24rpx;
102
+ border: 3.5rpx solid #adb5bd;
103
+ border-radius: 50%;
104
+ margin-left: 8rpx;
105
+ margin-right: 8rpx;
106
+ box-sizing: border-box;
107
+ opacity: 0.5;
108
+ transition: opacity 0.25s ease, color 0.25s ease, border-color 0.25s ease;
109
+ pointer-events: none;
110
+ }
111
+ .sky-input__search-icon::after {
112
+ content: "";
113
+ position: absolute;
114
+ bottom: -6rpx;
115
+ right: -6rpx;
116
+ width: 10rpx;
117
+ height: 3.5rpx;
118
+ background-color: #adb5bd;
119
+ transform: rotate(45deg);
120
+ border-radius: 2rpx;
121
+ transition: background-color 0.25s ease;
122
+ }
123
+
124
+ .sky-input--focus .sky-input__search-icon {
125
+ border-color: hsl(250, 85%, 55%);
126
+ opacity: 0.9;
127
+ }
128
+ .sky-input--focus .sky-input__search-icon::after {
129
+ background-color: hsl(250, 85%, 55%);
130
+ }
131
+
132
+ .sky-input__clear-wrapper {
133
+ display: flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ width: 36rpx;
137
+ height: 36rpx;
138
+ border-radius: 50%;
139
+ background-color: rgba(0, 0, 0, 0.05);
140
+ margin-right: 4rpx;
141
+ margin-left: 8rpx;
142
+ opacity: 0;
143
+ transform: scale(0.6) rotate(-45deg);
144
+ pointer-events: none;
145
+ transition: opacity 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.15s ease;
146
+ }
147
+
148
+ .sky-input__clear-wrapper--show {
149
+ opacity: 1;
150
+ transform: scale(1) rotate(0deg);
151
+ pointer-events: auto;
152
+ }
153
+
154
+ .sky-input__clear-active {
155
+ transform: scale(0.82) !important;
156
+ background-color: rgba(0, 0, 0, 0.15) !important;
157
+ }
158
+
159
+ .sky-input__clear-icon {
160
+ position: relative;
161
+ width: 16rpx;
162
+ height: 16rpx;
163
+ }
164
+ .sky-input__clear-icon::before, .sky-input__clear-icon::after {
165
+ content: "";
166
+ position: absolute;
167
+ top: 7rpx;
168
+ left: 0;
169
+ width: 16rpx;
170
+ height: 2.5rpx;
171
+ background-color: #adb5bd;
172
+ border-radius: 2rpx;
173
+ }
174
+ .sky-input__clear-icon::before {
175
+ transform: rotate(45deg);
176
+ }
177
+ .sky-input__clear-icon::after {
178
+ transform: rotate(-45deg);
179
+ }
180
+
181
+ .sky-input__prefix,
182
+ .sky-input__suffix {
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: center;
186
+ height: 100%;
187
+ box-sizing: border-box;
188
+ }
189
+
190
+ .sky-input__action-wrapper {
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ height: 100%;
195
+ box-sizing: border-box;
196
+ max-width: 0;
197
+ margin-left: 0;
198
+ opacity: 0;
199
+ transform: translateX(100%) scale(0.88);
200
+ pointer-events: none;
201
+ overflow: hidden;
202
+ transition: max-width 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), margin-left 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), transform 0.28s cubic-bezier(0.25, 0.8, 0.25, 1);
203
+ }
204
+
205
+ .sky-input__action-wrapper--active {
206
+ max-width: 120rpx;
207
+ margin-left: 20rpx;
208
+ opacity: 1;
209
+ transform: translateX(0) scale(1);
210
+ pointer-events: auto;
211
+ }
212
+
213
+ .sky-input__action-text {
214
+ font-size: 28rpx;
215
+ font-weight: 500;
216
+ color: hsl(250, 85%, 55%);
217
+ letter-spacing: 0.5rpx;
218
+ white-space: nowrap;
219
+ }
220
+ .sky-input__action-text:active {
221
+ opacity: 0.7;
222
+ }
223
+
224
+ .sky-input__action-slot {
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: center;
228
+ height: 100%;
229
+ }
230
+
231
+ .sky-input__eye-wrapper {
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ width: 44rpx;
236
+ height: 44rpx;
237
+ border-radius: 50%;
238
+ margin-right: -16rpx; /* 高精度向右微调贴边,完美响应莫哥的要求,极速消除多余右侧空隙 */
239
+ margin-left: 4rpx;
240
+ transition: background-color 0.15s ease, transform 0.15s ease;
241
+ flex-shrink: 0;
242
+ }
243
+
244
+ .sky-input__eye-wrapper:active {
245
+ background-color: rgba(0, 0, 0, 0.05);
246
+ transform: scale(0.92);
247
+ }
248
+
249
+ /* 睁眼状态:橄榄形精致描边眼眶 */
250
+ .sky-input__eye-icon {
251
+ position: relative;
252
+ width: 32rpx;
253
+ height: 20rpx;
254
+ border: 3rpx solid #adb5bd; /* 描边眼眶,极具空气感与通透呼吸感 */
255
+ border-radius: 50% 50%;
256
+ box-sizing: border-box;
257
+ background-color: transparent;
258
+ transition: all 0.25s cubic-bezier(0.25, 1, 0.5, 1);
259
+ display: flex;
260
+ align-items: center;
261
+ justify-content: center;
262
+ }
263
+
264
+ /* 睁眼状态下的瞳孔(居中实心圆点) */
265
+ .sky-input__eye-icon::before {
266
+ content: "";
267
+ position: absolute;
268
+ width: 10rpx;
269
+ height: 10rpx;
270
+ background-color: #adb5bd;
271
+ border-radius: 50%;
272
+ left: 50%;
273
+ top: 50%;
274
+ transform: translate(-50%, -50%) scale(1);
275
+ box-shadow: 0 0 0 rgba(144, 147, 153, 0); /* 初始无投影,用于平滑过渡 */
276
+ transition: all 0.28s cubic-bezier(0.34, 1.56, 0.64, 1); /* 果冻级阻尼回弹贝塞尔 */
277
+ opacity: 1;
278
+ }
279
+
280
+ /* 闭眼状态下的优雅弯弯睫毛弧线(睁眼时处于隐匿状态) */
281
+ .sky-input__eye-icon::after {
282
+ content: "";
283
+ position: absolute;
284
+ width: 30rpx;
285
+ height: 14rpx;
286
+ border-bottom: 3.5rpx solid #adb5bd; /* 只有下边框,形成向下弯曲的眼皮弧线 */
287
+ border-radius: 0 0 50% 50%; /* 下部椭圆圆角 */
288
+ left: 50%;
289
+ top: 35%; /* 垂直视觉重心微调,确保居中 */
290
+ transform: translate(-50%, -50%) scale(0);
291
+ opacity: 0;
292
+ transition: all 0.25s cubic-bezier(0.25, 1, 0.5, 1);
293
+ }
294
+
295
+ /* 闭眼状态:仅将眼眶描边变透明,使其隐去,但容器本身保持不透明以供子元素睫毛与微粒完美展示 */
296
+ .sky-input__eye-icon--closed {
297
+ border-color: transparent;
298
+ transform: scale(1);
299
+ }
300
+
301
+ /* 闭眼时:中心瞳孔圆点分裂飘散为两颗梦幻微尘,静静悬浮于弯弯睫毛的左右上方,带有些许胧朦感 */
302
+ .sky-input__eye-icon--closed::before {
303
+ transform: translate(-14rpx, -18rpx) scale(0.4); /* 左上方魔法微尘 */
304
+ box-shadow: 24rpx 8rpx 0 rgba(144, 147, 153, 0.8); /* 右上方魔法微尘(利用阴影复制,零开销) */
305
+ background-color: rgba(144, 147, 153, 0.8);
306
+ opacity: 0.8;
307
+ }
308
+
309
+ /* 闭眼时:优雅的弯弯睫毛弧线平滑放大淡入显现,表现高档、温暖的闭目灵动效果 */
310
+ .sky-input__eye-icon--closed::after {
311
+ transform: translate(-50%, -50%) scale(1);
312
+ opacity: 1;
313
+ }
314
+
315
+ /* 联动输入框 Focus 状态进行高亮意图表达 */
316
+ .sky-input--focus .sky-input__eye-icon {
317
+ border-color: #495057;
318
+ }
319
+
320
+ .sky-input--focus .sky-input__eye-icon::before {
321
+ background-color: hsl(250, 85%, 55%); /* 睁眼时:中心瞳孔高亮为主色蓝紫 */
322
+ }
323
+
324
+ .sky-input--focus .sky-input__eye-icon--closed::before {
325
+ background-color: rgba(71, 85, 105, 0.8); /* 闭眼时:左上方微尘同步高亮为墨灰 */
326
+ box-shadow: 24rpx 8rpx 0 rgba(71, 85, 105, 0.8); /* 闭眼时:右上方微尘同步高亮为墨灰 */
327
+ }
328
+
329
+ .sky-input--focus .sky-input__eye-icon--closed::after {
330
+ border-bottom-color: #495057; /* 闭眼时:弯弯睫毛同步高亮为墨灰 */
331
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["input/index.scss","common/style/theme.scss"],"names":[],"mappings":";AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA,kBCagB;EDZhB;;AAEA;EACE,cC1BgB;ED2BhB;;;AAKJ;EACE;EACA,kBCCgB;EDAhB;EACA;;AAEA;EACE,cCvCgB;EDwChB,kBCLc;EDMd;;;AAKJ;EACE;EACA,kBCZiB;EDajB;;AAEA;EACE,kBCjBc;EDkBd;EACA;;;AAMJ;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;;AAOJ;EACE;EACA;EACA;EACA,OC3CiB;ED4CjB;EACA;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;AAAA;AAAA;EAGE;;;AAOJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBC7Fe;ED8Ff;EACA;EACA;;;AAMF;EACE,cC/IgB;EDgJhB;;AAEA;EACE,kBCnJc;;;ADyJpB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA,kBC9Je;ED+Jf;;AAGF;EACE;;AAGF;EACE;;;AAMJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAEA;;;AAOF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA,OCnQkB;EDoQlB;EACA;;AAEA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA,kBCpRiB;EDqRjB;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;;;AAGF;AACA;EACE,cCjUiB;;;ADoUnB;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE,qBC9UiB,SD8UuB","file":"index.wxss","sourcesContent":["@use \"../common/style/theme.scss\" as *;\n@use \"../common/style/mixins.scss\" as *;\n\n// 外层横向流式容器,为挤压滑入动画提供根基\n.sky-input-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n position: relative;\n}\n\n// 输入主体卡片基类(支持 flex: 1 宽度平滑过渡)\n.sky-input {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n transition: border-color 0.25s ease, box-shadow 0.25s ease, background-color 0.25s ease;\n position: relative;\n}\n\n// ------------------- 风格变体 -------------------\n\n// 1. Border:精致细边框卡表单风格\n.sky-input--border {\n border: 2rpx solid $sky-color-gray-3;\n background-color: $sky-color-white;\n box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.01);\n \n &.sky-input--focus {\n border-color: $sky-color-primary;\n box-shadow: 0 0 12rpx rgba($sky-color-primary, 0.18);\n }\n}\n\n// 2. Round:全局搜索胶囊大圆角风格\n.sky-input--round {\n border: 2rpx solid $sky-color-gray-2;\n background-color: $sky-color-white;\n border-radius: 100rpx;\n box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.02);\n \n &.sky-input--focus {\n border-color: $sky-color-primary;\n background-color: $sky-color-white;\n box-shadow: 0 0 12rpx rgba($sky-color-primary, 0.15);\n }\n}\n\n// 3. Filled:极简轻量级无边框填充背景风格\n.sky-input--filled {\n border: 2rpx solid transparent;\n background-color: $sky-color-gray-1;\n border-radius: 16rpx;\n \n &.sky-input--focus {\n background-color: $sky-color-white;\n border-color: rgba($sky-color-primary, 0.3);\n box-shadow: 0 0 12rpx rgba($sky-color-primary, 0.1);\n }\n}\n\n// ------------------- 尺寸规格 -------------------\n\n.sky-input--normal {\n height: 80rpx;\n border-radius: 12rpx;\n padding: 0 20rpx;\n \n &.sky-input--round {\n border-radius: 80rpx;\n }\n}\n\n.sky-input--large {\n height: 96rpx;\n border-radius: 16rpx;\n padding: 0 24rpx;\n \n &.sky-input--round {\n border-radius: 96rpx;\n }\n}\n\n// ------------------- 内部元素 -------------------\n\n// 输入框原生控件\n.sky-input__control {\n flex: 1;\n height: 100%;\n font-size: 28rpx;\n color: $sky-color-gray-9;\n padding: 0 8rpx;\n box-sizing: border-box;\n background-color: transparent;\n}\n\n// 禁用状态\n.sky-input--disabled {\n background-color: rgba(0, 0, 0, 0.02) !important;\n border-color: $sky-color-gray-3 !important;\n box-shadow: none !important;\n \n .sky-input__control {\n color: $sky-color-gray-5 !important;\n }\n \n .sky-input__search-icon,\n .sky-input__prefix,\n .sky-input__suffix {\n opacity: 0.3 !important;\n }\n}\n\n// ------------------- 高保真纯 CSS 图标 -------------------\n\n// 1. 放大镜搜索图标\n.sky-input__search-icon {\n position: relative;\n width: 24rpx;\n height: 24rpx;\n border: 3.5rpx solid $sky-color-gray-5;\n border-radius: 50%;\n margin-left: 8rpx;\n margin-right: 8rpx;\n box-sizing: border-box;\n opacity: 0.5;\n transition: opacity 0.25s ease, color 0.25s ease, border-color 0.25s ease;\n pointer-events: none;\n \n &::after {\n content: \"\";\n position: absolute;\n bottom: -6rpx;\n right: -6rpx;\n width: 10rpx;\n height: 3.5rpx;\n background-color: $sky-color-gray-5;\n transform: rotate(45deg);\n border-radius: 2rpx;\n transition: background-color 0.25s ease;\n }\n}\n\n// 联动高亮搜索图标\n.sky-input--focus {\n .sky-input__search-icon {\n border-color: $sky-color-primary;\n opacity: 0.9;\n \n &::after {\n background-color: $sky-color-primary;\n }\n }\n}\n\n// 2. 一键清除 \"X\" 图标包装器 (由 Compositor 驱动的高性能缩放旋转与透明度过渡)\n.sky-input__clear-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36rpx;\n height: 36rpx;\n border-radius: 50%;\n background-color: rgba(0, 0, 0, 0.05);\n margin-right: 4rpx;\n margin-left: 8rpx;\n \n // 核心动画定义:初始状态隐藏且轻微逆时针旋转收缩\n opacity: 0;\n transform: scale(0.6) rotate(-45deg);\n pointer-events: none;\n transition: opacity 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.15s ease;\n}\n\n// 清除按钮激活态(淡入)\n.sky-input__clear-wrapper--show {\n opacity: 1;\n transform: scale(1) rotate(0deg);\n pointer-events: auto;\n}\n\n// 清除按钮点击下按反馈\n.sky-input__clear-active {\n transform: scale(0.82) !important;\n background-color: rgba(0, 0, 0, 0.15) !important;\n}\n\n// 清除叉号线条手绘\n.sky-input__clear-icon {\n position: relative;\n width: 16rpx;\n height: 16rpx;\n \n &::before,\n &::after {\n content: \"\";\n position: absolute;\n top: 7rpx;\n left: 0;\n width: 16rpx;\n height: 2.5rpx;\n background-color: $sky-color-gray-5;\n border-radius: 2rpx;\n }\n \n &::before {\n transform: rotate(45deg);\n }\n \n &::after {\n transform: rotate(-45deg);\n }\n}\n\n// ------------------- 插槽占位 -------------------\n\n.sky-input__prefix,\n.sky-input__suffix {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n box-sizing: border-box;\n}\n\n// ------------------- 弹性滑动挤压行动区 -------------------\n\n// 仅在拥有 actionText 时渲染的极奢滑动挤压容器\n.sky-input__action-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n box-sizing: border-box;\n \n // 核心过渡定义:初始情况下完全收缩并隐藏在右侧\n max-width: 0;\n margin-left: 0;\n opacity: 0;\n transform: translateX(100%) scale(0.88);\n pointer-events: none;\n overflow: hidden;\n \n transition: max-width 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), \n margin-left 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), \n opacity 0.28s cubic-bezier(0.25, 0.8, 0.25, 1), \n transform 0.28s cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n// 输入框聚焦或有字时,行动按钮弹性滑入\n.sky-input__action-wrapper--active {\n max-width: 120rpx;\n margin-left: 20rpx;\n opacity: 1;\n transform: translateX(0) scale(1);\n pointer-events: auto;\n}\n\n// 行动区精致字体\n.sky-input__action-text {\n font-size: 28rpx;\n font-weight: 500;\n color: $sky-color-primary;\n letter-spacing: 0.5rpx;\n white-space: nowrap;\n \n &:active {\n opacity: 0.7;\n }\n}\n\n// 行动插槽\n.sky-input__action-slot {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n// 3. 密码可见性切换“眼睛”图标 (100% 纯 CSS 矢量几何手绘,完美融入雅致极光白体系)\n.sky-input__eye-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44rpx;\n height: 44rpx;\n border-radius: 50%;\n margin-right: -16rpx; /* 高精度向右微调贴边,完美响应莫哥的要求,极速消除多余右侧空隙 */\n margin-left: 4rpx;\n transition: background-color 0.15s ease, transform 0.15s ease;\n flex-shrink: 0;\n}\n\n.sky-input__eye-wrapper:active {\n background-color: rgba(0, 0, 0, 0.05);\n transform: scale(0.92);\n}\n\n/* 睁眼状态:橄榄形精致描边眼眶 */\n.sky-input__eye-icon {\n position: relative;\n width: 32rpx;\n height: 20rpx;\n border: 3rpx solid $sky-color-gray-5; /* 描边眼眶,极具空气感与通透呼吸感 */\n border-radius: 50% 50%;\n box-sizing: border-box;\n background-color: transparent;\n transition: all 0.25s cubic-bezier(0.25, 1, 0.5, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* 睁眼状态下的瞳孔(居中实心圆点) */\n.sky-input__eye-icon::before {\n content: \"\";\n position: absolute;\n width: 10rpx;\n height: 10rpx;\n background-color: $sky-color-gray-5;\n border-radius: 50%;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%) scale(1);\n box-shadow: 0 0 0 rgba(144, 147, 153, 0); /* 初始无投影,用于平滑过渡 */\n transition: all 0.28s cubic-bezier(0.34, 1.56, 0.64, 1); /* 果冻级阻尼回弹贝塞尔 */\n opacity: 1;\n}\n\n/* 闭眼状态下的优雅弯弯睫毛弧线(睁眼时处于隐匿状态) */\n.sky-input__eye-icon::after {\n content: \"\";\n position: absolute;\n width: 30rpx;\n height: 14rpx;\n border-bottom: 3.5rpx solid $sky-color-gray-5; /* 只有下边框,形成向下弯曲的眼皮弧线 */\n border-radius: 0 0 50% 50%; /* 下部椭圆圆角 */\n left: 50%;\n top: 35%; /* 垂直视觉重心微调,确保居中 */\n transform: translate(-50%, -50%) scale(0);\n opacity: 0;\n transition: all 0.25s cubic-bezier(0.25, 1, 0.5, 1);\n}\n\n/* 闭眼状态:仅将眼眶描边变透明,使其隐去,但容器本身保持不透明以供子元素睫毛与微粒完美展示 */\n.sky-input__eye-icon--closed {\n border-color: transparent;\n transform: scale(1);\n}\n\n/* 闭眼时:中心瞳孔圆点分裂飘散为两颗梦幻微尘,静静悬浮于弯弯睫毛的左右上方,带有些许胧朦感 */\n.sky-input__eye-icon--closed::before {\n transform: translate(-14rpx, -18rpx) scale(0.4); /* 左上方魔法微尘 */\n box-shadow: 24rpx 8rpx 0 rgba(144, 147, 153, 0.8); /* 右上方魔法微尘(利用阴影复制,零开销) */\n background-color: rgba(144, 147, 153, 0.8);\n opacity: 0.8;\n}\n\n/* 闭眼时:优雅的弯弯睫毛弧线平滑放大淡入显现,表现高档、温暖的闭目灵动效果 */\n.sky-input__eye-icon--closed::after {\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n}\n\n/* 联动输入框 Focus 状态进行高亮意图表达 */\n.sky-input--focus .sky-input__eye-icon {\n border-color: $sky-color-gray-7;\n}\n\n.sky-input--focus .sky-input__eye-icon::before {\n background-color: #{$sky-color-primary}; /* 睁眼时:中心瞳孔高亮为主色蓝紫 */\n}\n\n.sky-input--focus .sky-input__eye-icon--closed::before {\n background-color: rgba(71, 85, 105, 0.8); /* 闭眼时:左上方微尘同步高亮为墨灰 */\n box-shadow: 24rpx 8rpx 0 rgba(71, 85, 105, 0.8); /* 闭眼时:右上方微尘同步高亮为墨灰 */\n}\n\n.sky-input--focus .sky-input__eye-icon--closed::after {\n border-bottom-color: $sky-color-gray-7; /* 闭眼时:弯弯睫毛同步高亮为墨灰 */\n}\n\n\n","// ==========================================\r\n// Skyline-UI 极具质感的现代设计系统 (SCSS)\r\n// ==========================================\r\n\r\n// --- 品牌色体系 (HSL Tailored Colors) ---\r\n$sky-brand-h: 250; // 主品牌色相 (优雅深紫/蓝色调)\r\n$sky-brand-s: 85%;\r\n$sky-brand-l: 55%;\r\n\r\n$sky-color-primary: hsl($sky-brand-h, $sky-brand-s, $sky-brand-l);\r\n$sky-color-primary-hover: hsl($sky-brand-h, $sky-brand-s, $sky-brand-l - 8%);\r\n$sky-color-primary-active: hsl($sky-brand-h, $sky-brand-s, $sky-brand-l - 15%);\r\n$sky-color-primary-light: hsl($sky-brand-h, $sky-brand-s, 95%);\r\n\r\n// 辅助色体系 (意图表达)\r\n$sky-color-success: hsl(150, 80%, 40%);\r\n$sky-color-success-active: hsl(150, 80%, 32%);\r\n$sky-color-success-light: hsl(150, 80%, 96%);\r\n\r\n$sky-color-warning: hsl(35, 90%, 50%);\r\n$sky-color-warning-active: hsl(35, 90%, 42%);\r\n$sky-color-warning-light: hsl(35, 90%, 96%);\r\n\r\n$sky-color-danger: hsl(355, 85%, 55%);\r\n$sky-color-danger-active: hsl(355, 85%, 45%);\r\n$sky-color-danger-light: hsl(355, 85%, 96%);\r\n\r\n$sky-color-info: hsl(200, 85%, 50%);\r\n$sky-color-info-active: hsl(200, 85%, 42%);\r\n$sky-color-info-light: hsl(200, 85%, 96%);\r\n\r\n// --- Tag 标签组件专用色系 (莫兰迪低饱和) ---\r\n$sky-tag-blue: #edf2ff;\r\n$sky-tag-blue-text: #3b5bdb;\r\n$sky-tag-green: #ebfbee;\r\n$sky-tag-green-text: #2b8a3e;\r\n$sky-tag-yellow: #fff9db;\r\n$sky-tag-yellow-text: #f08c00;\r\n$sky-tag-red: #ffeef0;\r\n$sky-tag-red-text: #fa5252;\r\n$sky-tag-info: #e7f5ff;\r\n$sky-tag-info-text: #1c7ed6;\r\n\r\n// --- 纯净的中性色调 (Sleek Grays) ---\r\n$sky-color-white: #ffffff;\r\n$sky-color-gray-1: #f8f9fa; // 极浅背景\r\n$sky-color-gray-2: #f1f3f5; // 浅灰背景\r\n$sky-color-gray-3: #e9ecef; // 边框线/失效态\r\n$sky-color-gray-4: #dee2e6;\r\n$sky-color-gray-5: #adb5bd; // 提示文本\r\n$sky-color-gray-6: #868e96;\r\n$sky-color-gray-7: #495057; // 次级文本\r\n$sky-color-gray-8: #343a40;\r\n$sky-color-gray-9: #212529; // 主级文本\r\n\r\n// --- 阴影系统 (Premium Shadows) ---\r\n$sky-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.04);\r\n$sky-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);\r\n$sky-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12);\r\n$sky-shadow-primary: 0 4px 14px rgba(100, 80, 240, 0.2);\r\n\r\n// --- 圆角规范 (Borders) ---\r\n$sky-border-radius-xs: 4rpx;\r\n$sky-border-radius-sm: 8rpx;\r\n$sky-border-radius-md: 12rpx;\r\n$sky-border-radius-lg: 20rpx;\r\n$sky-border-radius-round: 9999rpx;\r\n\r\n// --- 字体与字号规范 (Typography) ---\r\n$sky-font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, \"Segoe UI\", Arial, Roboto, sans-serif;\r\n$sky-font-size-xs: 20rpx;\r\n$sky-font-size-sm: 24rpx;\r\n$sky-font-size-md: 28rpx;\r\n$sky-font-size-lg: 32rpx;\r\n$sky-font-size-xl: 36rpx;\r\n\r\n// --- 动效与过渡 (Transitions) ---\r\n$sky-transition-duration: 200ms;\r\n$sky-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);\r\n\r\n// --- 间距规范 (Spacing) ---\r\n$sky-spacing-xs: 8rpx;\r\n$sky-spacing-sm: 16rpx;\r\n$sky-spacing-md: 24rpx;\r\n$sky-spacing-lg: 32rpx;\r\n$sky-spacing-xl: 48rpx;\r\n\r\n// --- 组件高度规范 (Component Heights) ---\r\n$sky-height-sm: 56rpx;\r\n$sky-height-md: 72rpx;\r\n$sky-height-lg: 88rpx;\r\n$sky-height-xl: 96rpx;\r\n\r\n// --- 层级规范 (Z-Index) ---\r\n$sky-z-dropdown: 100;\r\n$sky-z-fixed: 500;\r\n$sky-z-popup: 1000;\r\n$sky-z-toast: 2000;\r\n"]}
File without changes
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Component({
3
+ options: {
4
+ virtualHost: true,
5
+ multipleSlots: true
6
+ },
7
+ properties: {
8
+ // 标题文本
9
+ title: {
10
+ type: String,
11
+ value: ''
12
+ },
13
+ // 导航栏背景色,支持色值和渐变
14
+ background: {
15
+ type: String,
16
+ value: ''
17
+ },
18
+ // 全局文字颜色(标题和图标的默认色)
19
+ color: {
20
+ type: String,
21
+ value: ''
22
+ },
23
+ // 是否显示返回图标
24
+ back: {
25
+ type: Boolean,
26
+ value: true
27
+ },
28
+ // 是否显示加载指示器
29
+ loading: {
30
+ type: Boolean,
31
+ value: false
32
+ },
33
+ // 是否显示首页图标
34
+ homeButton: {
35
+ type: Boolean,
36
+ value: false
37
+ },
38
+ // 是否固定在顶部
39
+ fixed: {
40
+ type: Boolean,
41
+ value: true
42
+ },
43
+ // 返回时的页面层数
44
+ delta: {
45
+ type: Number,
46
+ value: 1
47
+ },
48
+ // 标题对齐方式:left(靠左)| center(居中)
49
+ align: {
50
+ type: String,
51
+ value: 'left'
52
+ },
53
+ // 标题颜色,覆盖全局 color
54
+ titleColor: {
55
+ type: String,
56
+ value: ''
57
+ },
58
+ // 标题字号,如 32rpx、16px
59
+ titleSize: {
60
+ type: String,
61
+ value: ''
62
+ },
63
+ // 标题是否加粗,默认 true
64
+ titleBold: {
65
+ type: Boolean,
66
+ value: true
67
+ },
68
+ // 返回图标颜色,覆盖全局 color
69
+ iconColor: {
70
+ type: String,
71
+ value: ''
72
+ },
73
+ // 返回图标尺寸,如 36rpx、18px
74
+ iconSize: {
75
+ type: String,
76
+ value: ''
77
+ },
78
+ // 返回图标描边粗细,如 2.5、3rpx
79
+ iconWeight: {
80
+ type: String,
81
+ value: ''
82
+ },
83
+ // 返回图标与标题之间的间距,如 12rpx、8px
84
+ titleSpacing: {
85
+ type: String,
86
+ value: ''
87
+ },
88
+ // 预览模式:去除状态栏高度和右侧内边距,适合卡片展示
89
+ preview: {
90
+ type: Boolean,
91
+ value: false
92
+ }
93
+ },
94
+ data: {
95
+ statusBarHeight: 44,
96
+ navBarHeight: 44,
97
+ innerPaddingRight: 97,
98
+ leftWidth: 'width: 97px'
99
+ },
100
+ lifetimes: {
101
+ attached() {
102
+ try {
103
+ if (this.data.preview) {
104
+ this.setData({
105
+ statusBarHeight: 0,
106
+ navBarHeight: 44,
107
+ innerPaddingRight: 0,
108
+ leftWidth: 'width: 0px'
109
+ });
110
+ return;
111
+ }
112
+ const sysInfo = wx.getSystemInfoSync();
113
+ let rect = null;
114
+ try {
115
+ rect = wx.getMenuButtonBoundingClientRect();
116
+ }
117
+ catch (e) {
118
+ console.warn('Failed to get menu button bounding rect:', e);
119
+ }
120
+ const statusBarHeight = sysInfo.statusBarHeight || 20;
121
+ let navBarHeight = 44; // 默认高度
122
+ let innerPaddingRight = 97; // 默认右侧占位(胶囊宽度+边距)
123
+ // 只有当获取到的胶囊矩形数据合理(非零且在状态栏下方)时,才采用高精度计算
124
+ if (rect && rect.top && rect.height && rect.left && rect.top >= statusBarHeight) {
125
+ navBarHeight = (rect.top - statusBarHeight) * 2 + rect.height;
126
+ innerPaddingRight = sysInfo.windowWidth - rect.left;
127
+ }
128
+ else {
129
+ // 不合理时进行平台默认回退
130
+ const system = sysInfo.system ? sysInfo.system.toLowerCase() : '';
131
+ const isIOS = system.indexOf('ios') > -1 || system.indexOf('macos') > -1;
132
+ navBarHeight = isIOS ? 44 : 48;
133
+ innerPaddingRight = isIOS ? 97 : 97; // 保持合理的胶囊默认间距
134
+ }
135
+ const leftWidth = `width: ${innerPaddingRight}px`;
136
+ this.setData({
137
+ statusBarHeight,
138
+ navBarHeight,
139
+ innerPaddingRight,
140
+ leftWidth
141
+ });
142
+ }
143
+ catch (err) {
144
+ console.error('Failed to calculate navigation bar dimensions:', err);
145
+ }
146
+ }
147
+ },
148
+ methods: {
149
+ onBack() {
150
+ if (this.data.delta) {
151
+ wx.navigateBack({ delta: this.data.delta });
152
+ }
153
+ this.triggerEvent('back', { delta: this.data.delta });
154
+ },
155
+ onHome() {
156
+ wx.reLaunch({ url: '/pages/index/index' });
157
+ this.triggerEvent('home');
158
+ }
159
+ }
160
+ });
161
+
162
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nav-bar/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["Component({\r\n options: {\r\n virtualHost: true,\r\n multipleSlots: true\r\n },\r\n properties: {\r\n // 标题文本\r\n title: {\r\n type: String,\r\n value: ''\r\n },\r\n // 导航栏背景色,支持色值和渐变\r\n background: {\r\n type: String,\r\n value: ''\r\n },\r\n // 全局文字颜色(标题和图标的默认色)\r\n color: {\r\n type: String,\r\n value: ''\r\n },\r\n // 是否显示返回图标\r\n back: {\r\n type: Boolean,\r\n value: true\r\n },\r\n // 是否显示加载指示器\r\n loading: {\r\n type: Boolean,\r\n value: false\r\n },\r\n // 是否显示首页图标\r\n homeButton: {\r\n type: Boolean,\r\n value: false\r\n },\r\n // 是否固定在顶部\r\n fixed: {\r\n type: Boolean,\r\n value: true\r\n },\r\n // 返回时的页面层数\r\n delta: {\r\n type: Number,\r\n value: 1\r\n },\r\n // 标题对齐方式:left(靠左)| center(居中)\r\n align: {\r\n type: String,\r\n value: 'left'\r\n },\r\n // 标题颜色,覆盖全局 color\r\n titleColor: {\r\n type: String,\r\n value: ''\r\n },\r\n // 标题字号,如 32rpx、16px\r\n titleSize: {\r\n type: String,\r\n value: ''\r\n },\r\n // 标题是否加粗,默认 true\r\n titleBold: {\r\n type: Boolean,\r\n value: true\r\n },\r\n // 返回图标颜色,覆盖全局 color\r\n iconColor: {\r\n type: String,\r\n value: ''\r\n },\r\n // 返回图标尺寸,如 36rpx、18px\r\n iconSize: {\r\n type: String,\r\n value: ''\r\n },\r\n // 返回图标描边粗细,如 2.5、3rpx\r\n iconWeight: {\r\n type: String,\r\n value: ''\r\n },\r\n // 返回图标与标题之间的间距,如 12rpx、8px\r\n titleSpacing: {\r\n type: String,\r\n value: ''\r\n },\r\n // 预览模式:去除状态栏高度和右侧内边距,适合卡片展示\r\n preview: {\r\n type: Boolean,\r\n value: false\r\n }\r\n },\r\n data: {\r\n statusBarHeight: 44,\r\n navBarHeight: 44,\r\n innerPaddingRight: 97,\r\n leftWidth: 'width: 97px'\r\n },\r\n lifetimes: {\r\n attached() {\r\n try {\r\n if (this.data.preview) {\r\n this.setData({\r\n statusBarHeight: 0,\r\n navBarHeight: 44,\r\n innerPaddingRight: 0,\r\n leftWidth: 'width: 0px'\r\n });\r\n return;\r\n }\r\n\r\n const sysInfo = wx.getSystemInfoSync();\r\n let rect = null;\r\n try {\r\n rect = wx.getMenuButtonBoundingClientRect();\r\n } catch (e) {\r\n console.warn('Failed to get menu button bounding rect:', e);\r\n }\r\n\r\n const statusBarHeight = sysInfo.statusBarHeight || 20;\r\n let navBarHeight = 44; // 默认高度\r\n let innerPaddingRight = 97; // 默认右侧占位(胶囊宽度+边距)\r\n \r\n // 只有当获取到的胶囊矩形数据合理(非零且在状态栏下方)时,才采用高精度计算\r\n if (rect && rect.top && rect.height && rect.left && rect.top >= statusBarHeight) {\r\n navBarHeight = (rect.top - statusBarHeight) * 2 + rect.height;\r\n innerPaddingRight = sysInfo.windowWidth - rect.left;\r\n } else {\r\n // 不合理时进行平台默认回退\r\n const system = sysInfo.system ? sysInfo.system.toLowerCase() : '';\r\n const isIOS = system.indexOf('ios') > -1 || system.indexOf('macos') > -1;\r\n navBarHeight = isIOS ? 44 : 48;\r\n innerPaddingRight = isIOS ? 97 : 97; // 保持合理的胶囊默认间距\r\n }\r\n\r\n const leftWidth = `width: ${innerPaddingRight}px`;\r\n\r\n this.setData({\r\n statusBarHeight,\r\n navBarHeight,\r\n innerPaddingRight,\r\n leftWidth\r\n });\r\n } catch (err) {\r\n console.error('Failed to calculate navigation bar dimensions:', err);\r\n }\r\n }\r\n },\r\n methods: {\r\n onBack() {\r\n if (this.data.delta) {\r\n wx.navigateBack({ delta: this.data.delta });\r\n }\r\n this.triggerEvent('back', { delta: this.data.delta });\r\n },\r\n onHome() {\r\n wx.reLaunch({ url: '/pages/index/index' });\r\n this.triggerEvent('home');\r\n }\r\n }\r\n});\r\n"]}
@@ -0,0 +1,9 @@
1
+ {
2
+ "component": true,
3
+ "renderer": "skyline",
4
+ "componentFramework": "glass-easel",
5
+ "multipleSlots": true,
6
+ "usingComponents": {
7
+ "sky-icon": "../icon/index"
8
+ }
9
+ }
@@ -0,0 +1,46 @@
1
+ <view
2
+ class="sky-nav-bar {{ fixed ? 'sky-nav-bar--fixed' : '' }}"
3
+ style="background: {{ background || '#ffffff' }}; color: {{ color || '#1a1e29' }}; --nav-bar-title-color: {{ titleColor || color || '#1a1e29' }}; --nav-bar-title-size: {{ titleSize || '32rpx' }}; --nav-bar-title-spacing: {{ titleSpacing || '12rpx' }}; --nav-bar-right-width: {{ innerPaddingRight }}px;"
4
+ >
5
+ <!-- 状态栏占位区,独立撑高 -->
6
+ <view class="sky-nav-bar__status-bar" style="height:{{ statusBarHeight }}px;"></view>
7
+
8
+ <!-- 内容区,高度 = 导航栏内容高度 -->
9
+ <view class="sky-nav-bar__content-row sky-nav-bar__content--{{ align }}" style="height:{{ navBarHeight }}px;">
10
+
11
+ <!-- 左侧操作区 -->
12
+ <view class="sky-nav-bar__left-box">
13
+ <block wx:if="{{ back || homeButton }}">
14
+ <view wx:if="{{ back }}" class="sky-nav-bar__btn-wrapper" hover-class="sky-nav-bar__btn-active" hover-stay-time="70" bindtap="onBack">
15
+ <sky-icon name="arrow_left" size="{{ iconSize || '36rpx' }}" color="{{ iconColor || 'currentColor' }}" />
16
+ </view>
17
+ <view wx:if="{{ homeButton }}" class="sky-nav-bar__btn-wrapper" hover-class="sky-nav-bar__btn-active" hover-stay-time="70" bindtap="onHome">
18
+ <sky-icon name="31shouyexuanzhong" size="{{ iconSize || '36rpx' }}" color="{{ iconColor || 'currentColor' }}" />
19
+ </view>
20
+ </block>
21
+ <block wx:else>
22
+ <slot name="left"></slot>
23
+ </block>
24
+ </view>
25
+
26
+ <!-- 标题区 -->
27
+ <view class="sky-nav-bar__title-box">
28
+ <view class="sky-nav-bar__title-content">
29
+ <view wx:if="{{ loading }}" class="sky-nav-bar__loading-spinner"></view>
30
+ <text wx:if="{{ title }}" class="sky-nav-bar__title-text {{ titleBold ? 'sky-nav-bar__title-text--bold' : '' }}">{{ title }}</text>
31
+ <block wx:else>
32
+ <slot name="center"></slot>
33
+ </block>
34
+ </view>
35
+ </view>
36
+
37
+ <!-- 右侧扩展区 -->
38
+ <view class="sky-nav-bar__right-box">
39
+ <slot name="right"></slot>
40
+ </view>
41
+
42
+ </view>
43
+ </view>
44
+
45
+ <!-- fixed 模式占位器 -->
46
+ <view wx:if="{{ fixed }}" class="sky-nav-bar__placeholder" style="height:{{ statusBarHeight + navBarHeight }}px;"></view>