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.
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/miniprogram_dist/action-sheet/index.d.ts +0 -0
- package/miniprogram_dist/action-sheet/index.js +67 -0
- package/miniprogram_dist/action-sheet/index.js.map +1 -0
- package/miniprogram_dist/action-sheet/index.json +6 -0
- package/miniprogram_dist/action-sheet/index.wxml +62 -0
- package/miniprogram_dist/action-sheet/index.wxss +227 -0
- package/miniprogram_dist/action-sheet/index.wxss.map +1 -0
- package/miniprogram_dist/badge/index.d.ts +0 -0
- package/miniprogram_dist/badge/index.js +114 -0
- package/miniprogram_dist/badge/index.js.map +1 -0
- package/miniprogram_dist/badge/index.json +6 -0
- package/miniprogram_dist/badge/index.wxml +16 -0
- package/miniprogram_dist/badge/index.wxss +105 -0
- package/miniprogram_dist/badge/index.wxss.map +1 -0
- package/miniprogram_dist/button/index.d.ts +0 -0
- package/miniprogram_dist/button/index.js +140 -0
- package/miniprogram_dist/button/index.js.map +1 -0
- package/miniprogram_dist/button/index.json +6 -0
- package/miniprogram_dist/button/index.wxml +28 -0
- package/miniprogram_dist/button/index.wxss +211 -0
- package/miniprogram_dist/button/index.wxss.map +1 -0
- package/miniprogram_dist/cell/index.d.ts +0 -0
- package/miniprogram_dist/cell/index.js +55 -0
- package/miniprogram_dist/cell/index.js.map +1 -0
- package/miniprogram_dist/cell/index.json +6 -0
- package/miniprogram_dist/cell/index.wxml +37 -0
- package/miniprogram_dist/cell/index.wxss +82 -0
- package/miniprogram_dist/cell/index.wxss.map +1 -0
- package/miniprogram_dist/checkbox/index.d.ts +0 -0
- package/miniprogram_dist/checkbox/index.js +50 -0
- package/miniprogram_dist/checkbox/index.js.map +1 -0
- package/miniprogram_dist/checkbox/index.json +6 -0
- package/miniprogram_dist/checkbox/index.wxml +16 -0
- package/miniprogram_dist/checkbox/index.wxss +87 -0
- package/miniprogram_dist/checkbox/index.wxss.map +1 -0
- package/miniprogram_dist/common/utils/index.d.ts +22 -0
- package/miniprogram_dist/common/utils/index.js +46 -0
- package/miniprogram_dist/common/utils/index.js.map +1 -0
- package/miniprogram_dist/datetime-picker/calendar.d.ts +1 -0
- package/miniprogram_dist/datetime-picker/calendar.js +424 -0
- package/miniprogram_dist/datetime-picker/calendar.js.map +1 -0
- package/miniprogram_dist/datetime-picker/calendar.json +8 -0
- package/miniprogram_dist/datetime-picker/calendar.wxml +86 -0
- package/miniprogram_dist/datetime-picker/calendar.wxss +352 -0
- package/miniprogram_dist/datetime-picker/calendar.wxss.map +1 -0
- package/miniprogram_dist/datetime-picker/index.d.ts +1 -0
- package/miniprogram_dist/datetime-picker/index.js +672 -0
- package/miniprogram_dist/datetime-picker/index.js.map +1 -0
- package/miniprogram_dist/datetime-picker/index.json +9 -0
- package/miniprogram_dist/datetime-picker/index.wxml +125 -0
- package/miniprogram_dist/datetime-picker/index.wxss +243 -0
- package/miniprogram_dist/datetime-picker/index.wxss.map +1 -0
- package/miniprogram_dist/datetime-picker/time-picker.d.ts +0 -0
- package/miniprogram_dist/datetime-picker/time-picker.js +83 -0
- package/miniprogram_dist/datetime-picker/time-picker.js.map +1 -0
- package/miniprogram_dist/datetime-picker/time-picker.json +6 -0
- package/miniprogram_dist/datetime-picker/time-picker.wxml +36 -0
- package/miniprogram_dist/datetime-picker/time-picker.wxss +75 -0
- package/miniprogram_dist/datetime-picker/time-picker.wxss.map +1 -0
- package/miniprogram_dist/datetime-picker/util.d.ts +172 -0
- package/miniprogram_dist/datetime-picker/util.js +404 -0
- package/miniprogram_dist/datetime-picker/util.js.map +1 -0
- package/miniprogram_dist/dialog/index.d.ts +0 -0
- package/miniprogram_dist/dialog/index.js +81 -0
- package/miniprogram_dist/dialog/index.js.map +1 -0
- package/miniprogram_dist/dialog/index.json +6 -0
- package/miniprogram_dist/dialog/index.wxml +55 -0
- package/miniprogram_dist/dialog/index.wxss +143 -0
- package/miniprogram_dist/dialog/index.wxss.map +1 -0
- package/miniprogram_dist/dropdown-select/index.d.ts +4 -0
- package/miniprogram_dist/dropdown-select/index.js +84 -0
- package/miniprogram_dist/dropdown-select/index.js.map +1 -0
- package/miniprogram_dist/dropdown-select/index.json +6 -0
- package/miniprogram_dist/dropdown-select/index.wxml +42 -0
- package/miniprogram_dist/dropdown-select/index.wxss +189 -0
- package/miniprogram_dist/dropdown-select/index.wxss.map +1 -0
- package/miniprogram_dist/editor/index.d.ts +0 -0
- package/miniprogram_dist/editor/index.js +254 -0
- package/miniprogram_dist/editor/index.js.map +1 -0
- package/miniprogram_dist/editor/index.json +6 -0
- package/miniprogram_dist/editor/index.wxml +142 -0
- package/miniprogram_dist/editor/index.wxss +613 -0
- package/miniprogram_dist/editor/index.wxss.map +1 -0
- package/miniprogram_dist/float-button/index.d.ts +0 -0
- package/miniprogram_dist/float-button/index.js +281 -0
- package/miniprogram_dist/float-button/index.js.map +1 -0
- package/miniprogram_dist/float-button/index.json +8 -0
- package/miniprogram_dist/float-button/index.wxml +68 -0
- package/miniprogram_dist/float-button/index.wxss +119 -0
- package/miniprogram_dist/float-button/index.wxss.map +1 -0
- package/miniprogram_dist/html-renderer/index.d.ts +1 -0
- package/miniprogram_dist/html-renderer/index.js +74 -0
- package/miniprogram_dist/html-renderer/index.js.map +1 -0
- package/miniprogram_dist/html-renderer/index.json +6 -0
- package/miniprogram_dist/html-renderer/index.wxml +79 -0
- package/miniprogram_dist/html-renderer/index.wxss +200 -0
- package/miniprogram_dist/html-renderer/index.wxss.map +1 -0
- package/miniprogram_dist/html-renderer/parser.d.ts +12 -0
- package/miniprogram_dist/html-renderer/parser.js +103 -0
- package/miniprogram_dist/html-renderer/parser.js.map +1 -0
- package/miniprogram_dist/icon/index.d.ts +1 -0
- package/miniprogram_dist/icon/index.js +231 -0
- package/miniprogram_dist/icon/index.js.map +1 -0
- package/miniprogram_dist/icon/index.json +6 -0
- package/miniprogram_dist/icon/index.wxml +13 -0
- package/miniprogram_dist/icon/index.wxss +14 -0
- package/miniprogram_dist/icon/index.wxss.map +1 -0
- package/miniprogram_dist/icon/presets.d.ts +7 -0
- package/miniprogram_dist/icon/presets.js +68 -0
- package/miniprogram_dist/icon/presets.js.map +1 -0
- package/miniprogram_dist/index.d.ts +6 -0
- package/miniprogram_dist/index.js +9 -0
- package/miniprogram_dist/index.js.map +1 -0
- package/miniprogram_dist/input/index.d.ts +0 -0
- package/miniprogram_dist/input/index.js +137 -0
- package/miniprogram_dist/input/index.js.map +1 -0
- package/miniprogram_dist/input/index.json +6 -0
- package/miniprogram_dist/input/index.wxml +57 -0
- package/miniprogram_dist/input/index.wxss +331 -0
- package/miniprogram_dist/input/index.wxss.map +1 -0
- package/miniprogram_dist/nav-bar/index.d.ts +0 -0
- package/miniprogram_dist/nav-bar/index.js +162 -0
- package/miniprogram_dist/nav-bar/index.js.map +1 -0
- package/miniprogram_dist/nav-bar/index.json +9 -0
- package/miniprogram_dist/nav-bar/index.wxml +46 -0
- package/miniprogram_dist/nav-bar/index.wxss +160 -0
- package/miniprogram_dist/nav-bar/index.wxss.map +1 -0
- package/miniprogram_dist/popup-select/index.d.ts +4 -0
- package/miniprogram_dist/popup-select/index.js +70 -0
- package/miniprogram_dist/popup-select/index.js.map +1 -0
- package/miniprogram_dist/popup-select/index.json +6 -0
- package/miniprogram_dist/popup-select/index.wxml +48 -0
- package/miniprogram_dist/popup-select/index.wxss +184 -0
- package/miniprogram_dist/popup-select/index.wxss.map +1 -0
- package/miniprogram_dist/progress/index.d.ts +0 -0
- package/miniprogram_dist/progress/index.js +120 -0
- package/miniprogram_dist/progress/index.js.map +1 -0
- package/miniprogram_dist/progress/index.json +6 -0
- package/miniprogram_dist/progress/index.wxml +31 -0
- package/miniprogram_dist/progress/index.wxss +163 -0
- package/miniprogram_dist/progress/index.wxss.map +1 -0
- package/miniprogram_dist/radio/index.d.ts +0 -0
- package/miniprogram_dist/radio/index.js +52 -0
- package/miniprogram_dist/radio/index.js.map +1 -0
- package/miniprogram_dist/radio/index.json +6 -0
- package/miniprogram_dist/radio/index.wxml +16 -0
- package/miniprogram_dist/radio/index.wxss +62 -0
- package/miniprogram_dist/radio/index.wxss.map +1 -0
- package/miniprogram_dist/rate/index.d.ts +0 -0
- package/miniprogram_dist/rate/index.js +128 -0
- package/miniprogram_dist/rate/index.js.map +1 -0
- package/miniprogram_dist/rate/index.json +6 -0
- package/miniprogram_dist/rate/index.wxml +31 -0
- package/miniprogram_dist/rate/index.wxss +89 -0
- package/miniprogram_dist/rate/index.wxss.map +1 -0
- package/miniprogram_dist/select-input/index.d.ts +0 -0
- package/miniprogram_dist/select-input/index.js +116 -0
- package/miniprogram_dist/select-input/index.js.map +1 -0
- package/miniprogram_dist/select-input/index.json +6 -0
- package/miniprogram_dist/select-input/index.wxml +43 -0
- package/miniprogram_dist/select-input/index.wxss +143 -0
- package/miniprogram_dist/select-input/index.wxss.map +1 -0
- package/miniprogram_dist/skeleton/index.d.ts +0 -0
- package/miniprogram_dist/skeleton/index.js +102 -0
- package/miniprogram_dist/skeleton/index.js.map +1 -0
- package/miniprogram_dist/skeleton/index.json +6 -0
- package/miniprogram_dist/skeleton/index.wxml +40 -0
- package/miniprogram_dist/skeleton/index.wxss +103 -0
- package/miniprogram_dist/skeleton/index.wxss.map +1 -0
- package/miniprogram_dist/slider/index.d.ts +0 -0
- package/miniprogram_dist/slider/index.js +180 -0
- package/miniprogram_dist/slider/index.js.map +1 -0
- package/miniprogram_dist/slider/index.json +6 -0
- package/miniprogram_dist/slider/index.wxml +38 -0
- package/miniprogram_dist/slider/index.wxss +132 -0
- package/miniprogram_dist/slider/index.wxss.map +1 -0
- package/miniprogram_dist/subsection/index.d.ts +0 -0
- package/miniprogram_dist/subsection/index.js +85 -0
- package/miniprogram_dist/subsection/index.js.map +1 -0
- package/miniprogram_dist/subsection/index.json +6 -0
- package/miniprogram_dist/subsection/index.wxml +55 -0
- package/miniprogram_dist/subsection/index.wxss +150 -0
- package/miniprogram_dist/subsection/index.wxss.map +1 -0
- package/miniprogram_dist/swipe-cell/index.d.ts +0 -0
- package/miniprogram_dist/swipe-cell/index.js +91 -0
- package/miniprogram_dist/swipe-cell/index.js.map +1 -0
- package/miniprogram_dist/swipe-cell/index.json +6 -0
- package/miniprogram_dist/swipe-cell/index.wxml +30 -0
- package/miniprogram_dist/swipe-cell/index.wxss +42 -0
- package/miniprogram_dist/swipe-cell/index.wxss.map +1 -0
- package/miniprogram_dist/swiper/index.d.ts +0 -0
- package/miniprogram_dist/swiper/index.js +82 -0
- package/miniprogram_dist/swiper/index.js.map +1 -0
- package/miniprogram_dist/swiper/index.json +6 -0
- package/miniprogram_dist/swiper/index.wxml +53 -0
- package/miniprogram_dist/swiper/index.wxss +123 -0
- package/miniprogram_dist/swiper/index.wxss.map +1 -0
- package/miniprogram_dist/switch/index.d.ts +0 -0
- package/miniprogram_dist/switch/index.js +53 -0
- package/miniprogram_dist/switch/index.js.map +1 -0
- package/miniprogram_dist/switch/index.json +6 -0
- package/miniprogram_dist/switch/index.wxml +21 -0
- package/miniprogram_dist/switch/index.wxss +198 -0
- package/miniprogram_dist/switch/index.wxss.map +1 -0
- package/miniprogram_dist/tag/index.d.ts +0 -0
- package/miniprogram_dist/tag/index.js +114 -0
- package/miniprogram_dist/tag/index.js.map +1 -0
- package/miniprogram_dist/tag/index.json +6 -0
- package/miniprogram_dist/tag/index.wxml +19 -0
- package/miniprogram_dist/tag/index.wxss +182 -0
- package/miniprogram_dist/tag/index.wxss.map +1 -0
- package/miniprogram_dist/textarea/index.d.ts +0 -0
- package/miniprogram_dist/textarea/index.js +143 -0
- package/miniprogram_dist/textarea/index.js.map +1 -0
- package/miniprogram_dist/textarea/index.json +6 -0
- package/miniprogram_dist/textarea/index.wxml +59 -0
- package/miniprogram_dist/textarea/index.wxss +242 -0
- package/miniprogram_dist/textarea/index.wxss.map +1 -0
- package/miniprogram_dist/toast/index.d.ts +0 -0
- package/miniprogram_dist/toast/index.js +92 -0
- package/miniprogram_dist/toast/index.js.map +1 -0
- package/miniprogram_dist/toast/index.json +8 -0
- package/miniprogram_dist/toast/index.wxml +30 -0
- package/miniprogram_dist/toast/index.wxss +116 -0
- package/miniprogram_dist/toast/index.wxss.map +1 -0
- package/miniprogram_dist/uploader/index.d.ts +8 -0
- package/miniprogram_dist/uploader/index.js +192 -0
- package/miniprogram_dist/uploader/index.js.map +1 -0
- package/miniprogram_dist/uploader/index.json +8 -0
- package/miniprogram_dist/uploader/index.wxml +88 -0
- package/miniprogram_dist/uploader/index.wxss +179 -0
- package/miniprogram_dist/uploader/index.wxss.map +1 -0
- 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,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>
|