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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sky-ui
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# skyline-ui
|
|
2
|
+
|
|
3
|
+
#### 介绍
|
|
4
|
+
`skyline-ui` 是专为微信小程序 **Skyline 渲染引擎** 打造的高性能、高颜值、轻量化自定义组件库。
|
|
5
|
+
|
|
6
|
+
在微信小程序全新推出的 Skyline 渲染引擎下,许多传统的 WebView 组件库面临排版错乱、动画生硬或样式不兼容的严峻挑战。本项目致力于填补这一生态空白,采用全 Flex 盒模型排版、Compositor 硬件加速动画与高颜值的 HSL 色彩体系,为您提供开箱即用、媲美原生 App 的极致流畅组件交互体验。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 已就绪组件地图 (Component Map)
|
|
11
|
+
|
|
12
|
+
### 基础组件
|
|
13
|
+
| 组件 | 说明 | 文档 |
|
|
14
|
+
|------|------|------|
|
|
15
|
+
| Button 按钮 | 拥有流畅微阴影与按压 HSL 降明度反馈的示范级按钮 | - |
|
|
16
|
+
| Icon 图标 | 支持 SVG 路径、渐变色、多色复杂 SVG 的高性能图标组件 | - |
|
|
17
|
+
| NavBar 导航栏 | 胶囊高度动态避让、向左返回图标后自适应流式标题栏 | - |
|
|
18
|
+
| Cell 单元格 | 纯 CSS 手绘极细右箭头,高档按压态过渡 | [文档](src/cell/README.md) |
|
|
19
|
+
| Tag 标签 | 莫兰迪低饱和度色彩,搭配同色系极淡背景 | - |
|
|
20
|
+
|
|
21
|
+
### 表单组件
|
|
22
|
+
| 组件 | 说明 | 文档 |
|
|
23
|
+
|------|------|------|
|
|
24
|
+
| Input 输入框 | 支持搜索、一键清除、三大变体以及硬件加速弹性挤压动画 | [文档](src/input/README.md) |
|
|
25
|
+
| Textarea 多行输入 | 支持自动增高、字数统计的多行文本输入框 | [文档](src/textarea/README.md) |
|
|
26
|
+
| Switch 开关 | 滑块四周保留黄金边距,按压时横向微缩扁变形 | [文档](src/switch/README.md) |
|
|
27
|
+
| Radio 单选 | 勾选对勾采用纯 CSS 路径延迟过渡绘制 | [文档](src/radio/README.md) |
|
|
28
|
+
| Checkbox 复选 | 选中时采用高对比、低饱和度 HSL 品牌色 | [文档](src/checkbox/README.md) |
|
|
29
|
+
| Slider 滑块 | 滑块按压伴随呼吸光晕,数字气泡弹性淡入 | [文档](src/slider/README.md) |
|
|
30
|
+
| Rate 评分 | 纯 CSS 物理手绘高精度五角星,点亮时微缩放反弹 | [文档](src/rate/README.md) |
|
|
31
|
+
| SelectInput 多选输入 | Tag 标签堆叠,支持删除和清除 | [文档](src/select-input/README.md) |
|
|
32
|
+
| Uploader 上传 | 支持图片预览、删除的上传组件 | - |
|
|
33
|
+
|
|
34
|
+
### 反馈组件
|
|
35
|
+
| 组件 | 说明 | 文档 |
|
|
36
|
+
|------|------|------|
|
|
37
|
+
| Dialog 模态弹出框 | 极克制的 scale + opacity 双向平滑缓动渐现 | [文档](src/dialog/README.md) |
|
|
38
|
+
| Toast 轻提示 | 淡入淡出贝塞尔曲线调优,极低包体积 | - |
|
|
39
|
+
| ActionSheet 动作面板 | 上边缘 24rpx 大圆角,按压反馈柔和 | [文档](src/action-sheet/README.md) |
|
|
40
|
+
| PopupSelect 弹出选择 | 高颜值底部半屏大圆角滑出抽屉式滚动选项选择器 | - |
|
|
41
|
+
| DropdownSelect 下拉选择 | 从触发元素下方弹出的轻量级下拉选择器 | - |
|
|
42
|
+
| SwipeCell 滑动单元格 | 基于 gesture-handler,摩擦阻尼经物理公式调优 | [文档](src/swipe-cell/README.md) |
|
|
43
|
+
|
|
44
|
+
### 展示组件
|
|
45
|
+
| 组件 | 说明 | 文档 |
|
|
46
|
+
|------|------|------|
|
|
47
|
+
| Badge 徽标角标 | 自带极细白边描边,数字字体选用等宽排版 | [文档](src/badge/README.md) |
|
|
48
|
+
| Progress 进度条 | 端点完美圆角,进度变化使用缓动插值 | [文档](src/progress/README.md) |
|
|
49
|
+
| Skeleton 骨架屏 | 亮暗扫光采用极轻柔渐变,约 1.5s 周期 | [文档](src/skeleton/README.md) |
|
|
50
|
+
| Swiper 轮播 | 支持卡片模式、指示器、自动播放的轮播组件 | [文档](src/swiper/README.md) |
|
|
51
|
+
| Subsection 分段器 | 高颜值分段切换控制器 | - |
|
|
52
|
+
|
|
53
|
+
### 高阶组件
|
|
54
|
+
| 组件 | 说明 | 文档 |
|
|
55
|
+
|------|------|------|
|
|
56
|
+
| Editor 富文本编辑器 | 尊贵悬浮毛玻璃工具栏,视口防遮挡避让 | [文档](src/editor/README.md) |
|
|
57
|
+
| HtmlRenderer 富文本渲染 | 人眼工效阅读排版,多媒体懒加载渐现 | [文档](src/html-renderer/README.md) |
|
|
58
|
+
| DatetimePicker 时间选择 | 内置日历与时间滑块,支持日期时间范围多选 | - |
|
|
59
|
+
| FloatButton 悬浮按钮 | 支持胶囊/圆形形态、Speed Dial 子菜单展开 | - |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 快速开始(使用者)
|
|
64
|
+
|
|
65
|
+
### 1. 安装
|
|
66
|
+
```bash
|
|
67
|
+
npm install skyline-ui
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2. 构建 npm
|
|
71
|
+
在微信开发者工具中,点击 **工具 → 构建 npm**,生成 `miniprogram_npm` 目录。
|
|
72
|
+
|
|
73
|
+
### 3. 按需引入组件
|
|
74
|
+
在页面的 `index.json` 中声明需要的组件(用哪个引哪个):
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"usingComponents": {
|
|
78
|
+
"sky-button": "skyline-ui/button/index",
|
|
79
|
+
"sky-icon": "skyline-ui/icon/index",
|
|
80
|
+
"sky-input": "skyline-ui/input/index"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. 在 WXML 中使用
|
|
86
|
+
```xml
|
|
87
|
+
<sky-button type="primary" round>确认提交</sky-button>
|
|
88
|
+
<sky-icon name="arrow_right" size="32rpx" />
|
|
89
|
+
<sky-input placeholder="请输入" clearable />
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
> **按需加载说明**: 微信小程序的 `usingComponents` 天然支持按需加载,只有声明的组件会被打包进最终代码包,未声明的组件不会包含。请勿在 `app.json` 中全局注册组件,否则会导致所有页面加载全部组件。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 自动化构建与开发指南
|
|
97
|
+
|
|
98
|
+
本项目采用 **TypeScript + Sass/SCSS + Gulp** 的现代化构建体系:
|
|
99
|
+
|
|
100
|
+
### 1. 安装开发依赖
|
|
101
|
+
```bash
|
|
102
|
+
npm install
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 2. 自动化构建与同步
|
|
106
|
+
```bash
|
|
107
|
+
# 启动一次性编译打包(将 src 编译至 miniprogram_dist 并同步至 example/components)
|
|
108
|
+
npm run build
|
|
109
|
+
|
|
110
|
+
# 挂起后台实时监听(推荐在本地开发和调整组件源码时开启)
|
|
111
|
+
npm run dev
|
|
112
|
+
|
|
113
|
+
# 清理构建产物
|
|
114
|
+
npm run clean
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 3. 代码规范检查
|
|
118
|
+
```bash
|
|
119
|
+
# ESLint 检查
|
|
120
|
+
npx eslint src/
|
|
121
|
+
|
|
122
|
+
# Prettier 格式检查
|
|
123
|
+
npx prettier --check src/
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 4. 微信开发者工具预览联调
|
|
127
|
+
1. 打开微信开发者工具,选择 **"导入项目"**。
|
|
128
|
+
2. 导入本项目下的 [skyline-ui/example](example) 目录。
|
|
129
|
+
3. 在模拟器或真机中预览组件效果。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 设计与视觉规范
|
|
134
|
+
|
|
135
|
+
* **全 Flex 排版**:Skyline 引擎不支持 Grid 布局,全量采用高性能 Flex 布局。
|
|
136
|
+
* **零图标体积压力**:所有图标采用纯 SVG 路径渲染,无需外部字体图标库。
|
|
137
|
+
* **Compositor 硬件加速动画**:所有动画仅改变 `transform` 与 `opacity`,避开重排机制。
|
|
138
|
+
* **HSL 色彩体系**:统一使用 HSL 色彩空间,便于全局换肤与主题定制。
|
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Component({
|
|
3
|
+
options: {
|
|
4
|
+
virtualHost: true // 开启虚拟节点以降低 Skyline DOM 树嵌套层级
|
|
5
|
+
},
|
|
6
|
+
properties: {
|
|
7
|
+
// 是否显示动作面板
|
|
8
|
+
show: {
|
|
9
|
+
type: Boolean,
|
|
10
|
+
value: false
|
|
11
|
+
},
|
|
12
|
+
// 顶部说明区主标题
|
|
13
|
+
title: {
|
|
14
|
+
type: String,
|
|
15
|
+
value: ''
|
|
16
|
+
},
|
|
17
|
+
// 顶部说明区副描述文本
|
|
18
|
+
description: {
|
|
19
|
+
type: String,
|
|
20
|
+
value: ''
|
|
21
|
+
},
|
|
22
|
+
// 动作选项列表
|
|
23
|
+
actions: {
|
|
24
|
+
type: Array,
|
|
25
|
+
value: []
|
|
26
|
+
},
|
|
27
|
+
// 取消按钮文本,为空时不渲染取消按钮
|
|
28
|
+
cancelText: {
|
|
29
|
+
type: String,
|
|
30
|
+
value: '取消'
|
|
31
|
+
},
|
|
32
|
+
// 点击遮罩是否触发关闭/取消
|
|
33
|
+
closeOnClickOverlay: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
value: true
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
methods: {
|
|
39
|
+
// 监听动作项点击
|
|
40
|
+
onSelect(e) {
|
|
41
|
+
const { index } = e.currentTarget.dataset;
|
|
42
|
+
const item = this.data.actions[index];
|
|
43
|
+
// 若处于禁用态或加载态,拦截所有点击响应
|
|
44
|
+
if (!item || item.disabled || item.loading) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// 向上抛出选中项及索引,由父级执行业务并受控关闭
|
|
48
|
+
this.triggerEvent('select', { item, index });
|
|
49
|
+
},
|
|
50
|
+
// 监听取消按钮点击
|
|
51
|
+
onCancel() {
|
|
52
|
+
this.triggerEvent('cancel');
|
|
53
|
+
this.triggerEvent('close');
|
|
54
|
+
},
|
|
55
|
+
// 监听半透遮罩层点击
|
|
56
|
+
onClickOverlay() {
|
|
57
|
+
if (this.data.closeOnClickOverlay) {
|
|
58
|
+
this.triggerEvent('cancel');
|
|
59
|
+
this.triggerEvent('close');
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
// 空辅助方法,用以拦截背景层滚动穿透
|
|
63
|
+
noop() { }
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/action-sheet/index.ts"],"names":[],"mappings":";AAAA,SAAS,CAAC;IACR,OAAO,EAAE;QACP,WAAW,EAAE,IAAI,CAAC,8BAA8B;KACjD;IAED,UAAU,EAAE;QACV,WAAW;QACX,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;SACb;QACD,WAAW;QACX,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE;SACV;QACD,aAAa;QACb,WAAW,EAAE;YACX,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE;SACV;QACD,SAAS;QACT,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,EAAE;SACV;QACD,oBAAoB;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;SACZ;QACD,gBAAgB;QAChB,mBAAmB,EAAE;YACnB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI;SACZ;KACF;IAED,OAAO,EAAE;QACP,UAAU;QACV,QAAQ,CAAC,CAA8B;YACrC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEtC,sBAAsB;YACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,WAAW;QACX,QAAQ;YACN,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,YAAY;QACZ,cAAc;YACZ,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAI,CAAC;KACV;CACF,CAAC,CAAC","file":"index.js","sourcesContent":["Component({\r\n options: {\r\n virtualHost: true // 开启虚拟节点以降低 Skyline DOM 树嵌套层级\r\n },\r\n\r\n properties: {\r\n // 是否显示动作面板\r\n show: {\r\n type: Boolean,\r\n value: false\r\n },\r\n // 顶部说明区主标题\r\n title: {\r\n type: String,\r\n value: ''\r\n },\r\n // 顶部说明区副描述文本\r\n description: {\r\n type: String,\r\n value: ''\r\n },\r\n // 动作选项列表\r\n actions: {\r\n type: Array,\r\n value: []\r\n },\r\n // 取消按钮文本,为空时不渲染取消按钮\r\n cancelText: {\r\n type: String,\r\n value: '取消'\r\n },\r\n // 点击遮罩是否触发关闭/取消\r\n closeOnClickOverlay: {\r\n type: Boolean,\r\n value: true\r\n }\r\n },\r\n\r\n methods: {\r\n // 监听动作项点击\r\n onSelect(e: WechatMiniprogram.BaseEvent) {\r\n const { index } = e.currentTarget.dataset;\r\n const item = this.data.actions[index];\r\n\r\n // 若处于禁用态或加载态,拦截所有点击响应\r\n if (!item || item.disabled || item.loading) {\r\n return;\r\n }\r\n\r\n // 向上抛出选中项及索引,由父级执行业务并受控关闭\r\n this.triggerEvent('select', { item, index });\r\n },\r\n\r\n // 监听取消按钮点击\r\n onCancel() {\r\n this.triggerEvent('cancel');\r\n this.triggerEvent('close');\r\n },\r\n\r\n // 监听半透遮罩层点击\r\n onClickOverlay() {\r\n if (this.data.closeOnClickOverlay) {\r\n this.triggerEvent('cancel');\r\n this.triggerEvent('close');\r\n }\r\n },\r\n\r\n // 空辅助方法,用以拦截背景层滚动穿透\r\n noop() {}\r\n }\r\n});\r\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<view
|
|
2
|
+
class="sky-action-sheet {{ show ? 'sky-action-sheet--show' : '' }}"
|
|
3
|
+
catchtouchmove="noop"
|
|
4
|
+
>
|
|
5
|
+
<!-- 黑色柔和半透遮罩层 -->
|
|
6
|
+
<view class="sky-action-sheet__mask" bindtap="onClickOverlay"></view>
|
|
7
|
+
|
|
8
|
+
<!-- 动作面板卡片主体 (从底部向上滑出) -->
|
|
9
|
+
<view class="sky-action-sheet__content">
|
|
10
|
+
<!-- 头部说明区 -->
|
|
11
|
+
<view
|
|
12
|
+
wx:if="{{ title || description }}"
|
|
13
|
+
class="sky-action-sheet__header"
|
|
14
|
+
>
|
|
15
|
+
<view wx:if="{{ title }}" class="sky-action-sheet__title">{{ title }}</view>
|
|
16
|
+
<view wx:if="{{ description }}" class="sky-action-sheet__description">{{ description }}</view>
|
|
17
|
+
</view>
|
|
18
|
+
|
|
19
|
+
<!-- 选项列表 -->
|
|
20
|
+
<view class="sky-action-sheet__list">
|
|
21
|
+
<view
|
|
22
|
+
wx:for="{{ actions }}"
|
|
23
|
+
wx:key="index"
|
|
24
|
+
class="sky-action-sheet__item {{ item.disabled ? 'sky-action-sheet__item--disabled' : '' }} {{ item.danger ? 'sky-action-sheet__item--danger' : '' }}"
|
|
25
|
+
hover-class="{{ item.disabled ? 'none' : 'sky-action-sheet__item--hover' }}"
|
|
26
|
+
hover-stay-time="70"
|
|
27
|
+
data-index="{{ index }}"
|
|
28
|
+
bindtap="onSelect"
|
|
29
|
+
>
|
|
30
|
+
<!-- 加载状态反馈 (可选,增加高质感体验) -->
|
|
31
|
+
<view wx:if="{{ item.loading }}" class="sky-action-sheet__loading"></view>
|
|
32
|
+
|
|
33
|
+
<block wx:else>
|
|
34
|
+
<!-- 动作项主标题 -->
|
|
35
|
+
<view
|
|
36
|
+
class="sky-action-sheet__name"
|
|
37
|
+
style="{{ item.color ? 'color: ' + item.color : '' }}"
|
|
38
|
+
>
|
|
39
|
+
{{ item.name }}
|
|
40
|
+
</view>
|
|
41
|
+
|
|
42
|
+
<!-- 动作项辅助描述文字 -->
|
|
43
|
+
<view wx:if="{{ item.subname }}" class="sky-action-sheet__subname">{{ item.subname }}</view>
|
|
44
|
+
</block>
|
|
45
|
+
</view>
|
|
46
|
+
</view>
|
|
47
|
+
|
|
48
|
+
<!-- 16rpx 厚实分层隔离条 -->
|
|
49
|
+
<view wx:if="{{ cancelText }}" class="sky-action-sheet__gap"></view>
|
|
50
|
+
|
|
51
|
+
<!-- 独立取消按钮 (自适应全面屏安全区 padding) -->
|
|
52
|
+
<view
|
|
53
|
+
wx:if="{{ cancelText }}"
|
|
54
|
+
class="sky-action-sheet__cancel"
|
|
55
|
+
hover-class="sky-action-sheet__cancel--hover"
|
|
56
|
+
hover-stay-time="70"
|
|
57
|
+
bindtap="onCancel"
|
|
58
|
+
>
|
|
59
|
+
{{ cancelText }}
|
|
60
|
+
</view>
|
|
61
|
+
</view>
|
|
62
|
+
</view>
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
2
|
+
/* ========================================== */
|
|
3
|
+
/* Skyline-UI ActionSheet 动作面板样式 (Sass) */
|
|
4
|
+
/* ========================================== */
|
|
5
|
+
.sky-action-sheet {
|
|
6
|
+
position: fixed;
|
|
7
|
+
top: 0;
|
|
8
|
+
left: 0;
|
|
9
|
+
right: 0;
|
|
10
|
+
bottom: 0;
|
|
11
|
+
z-index: 2000;
|
|
12
|
+
/* 默认完全隐藏 */
|
|
13
|
+
visibility: hidden;
|
|
14
|
+
pointer-events: none;
|
|
15
|
+
transition: visibility 240ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
16
|
+
/* ==================== 1. 背景遮罩层 ==================== */
|
|
17
|
+
}
|
|
18
|
+
.sky-action-sheet .sky-action-sheet__mask {
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0;
|
|
21
|
+
left: 0;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
background-color: rgba(0, 0, 0, 0.45); /* 柔和深色半透 */
|
|
25
|
+
z-index: 1;
|
|
26
|
+
/* 默认完全透明,随 show 激活渐显 */
|
|
27
|
+
opacity: 0;
|
|
28
|
+
transition: opacity 240ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
29
|
+
}
|
|
30
|
+
.sky-action-sheet {
|
|
31
|
+
/* ==================== 2. 动作面板卡片主体 (从底部向上滑出) ==================== */
|
|
32
|
+
}
|
|
33
|
+
.sky-action-sheet .sky-action-sheet__content {
|
|
34
|
+
position: fixed;
|
|
35
|
+
bottom: 0;
|
|
36
|
+
left: 0;
|
|
37
|
+
right: 0;
|
|
38
|
+
background-color: #ffffff;
|
|
39
|
+
border-radius: 24rpx 24rpx 0 0; /* 高雅头部大圆角 */
|
|
40
|
+
z-index: 2;
|
|
41
|
+
overflow: hidden; /* 裁剪内部节点,确保圆角包圆 */
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
/* 高级悬浮环境投影 */
|
|
45
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
|
|
46
|
+
/* 极致的高级防直角打磨细节 */
|
|
47
|
+
outline: none;
|
|
48
|
+
-webkit-tap-highlight-color: transparent;
|
|
49
|
+
/* 全面屏自适应安全边距 */
|
|
50
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
51
|
+
/* 核心退场过渡:平滑向下滑出 */
|
|
52
|
+
transform: translate3d(0, 100%, 0);
|
|
53
|
+
transition: transform 240ms cubic-bezier(0.25, 1, 0.5, 1);
|
|
54
|
+
}
|
|
55
|
+
.sky-action-sheet {
|
|
56
|
+
/* ==================== 3. 激活显示状态 (由父级 show 驱动) ==================== */
|
|
57
|
+
}
|
|
58
|
+
.sky-action-sheet--show {
|
|
59
|
+
visibility: visible;
|
|
60
|
+
pointer-events: auto;
|
|
61
|
+
}
|
|
62
|
+
.sky-action-sheet--show .sky-action-sheet__mask {
|
|
63
|
+
opacity: 1; /* 遮罩渐显 */
|
|
64
|
+
}
|
|
65
|
+
.sky-action-sheet--show .sky-action-sheet__content {
|
|
66
|
+
transform: translate3d(0, 0, 0); /* 主体滑入锁位 */
|
|
67
|
+
}
|
|
68
|
+
.sky-action-sheet {
|
|
69
|
+
/* ==================== 4. 头部标题及副描述排版区 ==================== */
|
|
70
|
+
}
|
|
71
|
+
.sky-action-sheet .sky-action-sheet__header {
|
|
72
|
+
position: relative;
|
|
73
|
+
padding: 34rpx 40rpx; /* 呼吸感宽裕留白,避免窒息拥挤 */
|
|
74
|
+
text-align: center;
|
|
75
|
+
display: flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
background-color: #ffffff;
|
|
80
|
+
/* 底部 1px 极细底分割线 */
|
|
81
|
+
}
|
|
82
|
+
.sky-action-sheet .sky-action-sheet__header::after {
|
|
83
|
+
content: " ";
|
|
84
|
+
position: absolute;
|
|
85
|
+
bottom: 0;
|
|
86
|
+
left: 0;
|
|
87
|
+
right: 0;
|
|
88
|
+
height: 1px;
|
|
89
|
+
background-color: #f1f3f5;
|
|
90
|
+
transform: scaleY(0.5);
|
|
91
|
+
transform-origin: center bottom;
|
|
92
|
+
}
|
|
93
|
+
.sky-action-sheet .sky-action-sheet__title {
|
|
94
|
+
font-size: 30rpx;
|
|
95
|
+
font-weight: 600;
|
|
96
|
+
color: #212529;
|
|
97
|
+
line-height: 1.4;
|
|
98
|
+
}
|
|
99
|
+
.sky-action-sheet .sky-action-sheet__description {
|
|
100
|
+
font-size: 26rpx;
|
|
101
|
+
color: #868e96;
|
|
102
|
+
line-height: 1.5;
|
|
103
|
+
margin-top: 10rpx;
|
|
104
|
+
}
|
|
105
|
+
.sky-action-sheet {
|
|
106
|
+
/* ==================== 5. 选项列表项目 (黄金工效 112rpx 高度) ==================== */
|
|
107
|
+
}
|
|
108
|
+
.sky-action-sheet .sky-action-sheet__list {
|
|
109
|
+
display: flex;
|
|
110
|
+
flex-direction: column;
|
|
111
|
+
}
|
|
112
|
+
.sky-action-sheet .sky-action-sheet__item {
|
|
113
|
+
position: relative;
|
|
114
|
+
height: 112rpx;
|
|
115
|
+
box-sizing: border-box;
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-direction: column;
|
|
118
|
+
align-items: center;
|
|
119
|
+
justify-content: center;
|
|
120
|
+
background-color: #ffffff;
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
/* 彻底清除移动端默认直角高亮 */
|
|
123
|
+
outline: none;
|
|
124
|
+
-webkit-tap-highlight-color: transparent;
|
|
125
|
+
transition: background-color 150ms ease;
|
|
126
|
+
/* 选项与选项之间 1px 极细底边线隔离 */
|
|
127
|
+
}
|
|
128
|
+
.sky-action-sheet .sky-action-sheet__item::after {
|
|
129
|
+
content: " ";
|
|
130
|
+
position: absolute;
|
|
131
|
+
bottom: 0;
|
|
132
|
+
left: 0;
|
|
133
|
+
right: 0;
|
|
134
|
+
height: 1px;
|
|
135
|
+
background-color: #f1f3f5;
|
|
136
|
+
transform: scaleY(0.5);
|
|
137
|
+
transform-origin: center bottom;
|
|
138
|
+
}
|
|
139
|
+
.sky-action-sheet .sky-action-sheet__item {
|
|
140
|
+
/* 最后一个动作项消除 1px 底分割线,防止重叠 */
|
|
141
|
+
}
|
|
142
|
+
.sky-action-sheet .sky-action-sheet__item:last-child::after {
|
|
143
|
+
display: none;
|
|
144
|
+
}
|
|
145
|
+
.sky-action-sheet .sky-action-sheet__name {
|
|
146
|
+
font-size: 30rpx;
|
|
147
|
+
color: #212529;
|
|
148
|
+
font-weight: 500;
|
|
149
|
+
}
|
|
150
|
+
.sky-action-sheet .sky-action-sheet__subname {
|
|
151
|
+
font-size: 22rpx;
|
|
152
|
+
color: #adb5bd;
|
|
153
|
+
margin-top: 4rpx;
|
|
154
|
+
}
|
|
155
|
+
.sky-action-sheet {
|
|
156
|
+
/* 选项按压变深 5% 反馈 (温润如玉) */
|
|
157
|
+
}
|
|
158
|
+
.sky-action-sheet .sky-action-sheet__item--hover {
|
|
159
|
+
background-color: #f8f9fa !important;
|
|
160
|
+
}
|
|
161
|
+
.sky-action-sheet {
|
|
162
|
+
/* 警示选项 (珊瑚红) */
|
|
163
|
+
}
|
|
164
|
+
.sky-action-sheet .sky-action-sheet__item--danger .sky-action-sheet__name {
|
|
165
|
+
color: hsl(355, 85%, 55%) !important;
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
}
|
|
168
|
+
.sky-action-sheet {
|
|
169
|
+
/* 禁用项状态 (灰度置灰,不可点击) */
|
|
170
|
+
}
|
|
171
|
+
.sky-action-sheet .sky-action-sheet__item--disabled {
|
|
172
|
+
cursor: not-allowed;
|
|
173
|
+
}
|
|
174
|
+
.sky-action-sheet .sky-action-sheet__item--disabled .sky-action-sheet__name {
|
|
175
|
+
color: #dee2e6 !important;
|
|
176
|
+
}
|
|
177
|
+
.sky-action-sheet .sky-action-sheet__item--disabled .sky-action-sheet__subname {
|
|
178
|
+
color: #e9ecef !important;
|
|
179
|
+
}
|
|
180
|
+
.sky-action-sheet {
|
|
181
|
+
/* 加载中转圈的简单手写动效 (高品质细节) */
|
|
182
|
+
}
|
|
183
|
+
.sky-action-sheet .sky-action-sheet__loading {
|
|
184
|
+
width: 36rpx;
|
|
185
|
+
height: 36rpx;
|
|
186
|
+
border: 3rpx solid #e9ecef;
|
|
187
|
+
border-top-color: hsl(250, 85%, 55%);
|
|
188
|
+
border-radius: 50%;
|
|
189
|
+
animation: sky-spin 800ms linear infinite;
|
|
190
|
+
}
|
|
191
|
+
.sky-action-sheet {
|
|
192
|
+
/* ==================== 6. 厚实隔离条 (16rpx 高档浅灰) ==================== */
|
|
193
|
+
}
|
|
194
|
+
.sky-action-sheet .sky-action-sheet__gap {
|
|
195
|
+
height: 16rpx;
|
|
196
|
+
background-color: #f8f9fa;
|
|
197
|
+
}
|
|
198
|
+
.sky-action-sheet {
|
|
199
|
+
/* ==================== 7. 独立取消按钮 ==================== */
|
|
200
|
+
}
|
|
201
|
+
.sky-action-sheet .sky-action-sheet__cancel {
|
|
202
|
+
height: 112rpx;
|
|
203
|
+
display: flex;
|
|
204
|
+
align-items: center;
|
|
205
|
+
justify-content: center;
|
|
206
|
+
background-color: #ffffff;
|
|
207
|
+
font-size: 30rpx;
|
|
208
|
+
color: #495057;
|
|
209
|
+
font-weight: 500;
|
|
210
|
+
cursor: pointer;
|
|
211
|
+
/* 彻底清除移动端默认直角高亮 */
|
|
212
|
+
outline: none;
|
|
213
|
+
-webkit-tap-highlight-color: transparent;
|
|
214
|
+
transition: background-color 150ms ease;
|
|
215
|
+
}
|
|
216
|
+
.sky-action-sheet .sky-action-sheet__cancel--hover {
|
|
217
|
+
background-color: #f8f9fa !important;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@keyframes sky-spin {
|
|
221
|
+
0% {
|
|
222
|
+
transform: rotate(0deg);
|
|
223
|
+
}
|
|
224
|
+
100% {
|
|
225
|
+
transform: rotate(360deg);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["action-sheet/index.scss","common/style/mixins.scss","common/style/theme.scss"],"names":[],"mappings":";AAGA;AACA;AACA;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EAEA;AAEA;;AACA;ECMA;EACA;EACA;EACA;EACA;EDRE;EACA;AAEA;EACA;EACA;;AAtBJ;AAyBE;;AACA;EACE;EACA;EACA;EACA;EACA,kBEMc;EFLd;EACA;EACA;EACA;EACA;AAEA;EACA,YEYY;AFVZ;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;;AAlDJ;AAqDE;;AACA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AA/DN;AAmEE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBEvCc;AFyCd;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBE/Ca;EFgDb;EACA;;AAIJ;EACE;EACA;EACA,OEjDe;EFkDf;;AAGF;EACE;EACA,OE1De;EF2Df;EACA;;AAvGJ;AA0GE;;AACA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBEnFc;EFoFd;AAEA;EACA;EACA;EAEA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBElGa;EFmGb;EACA;;AA3BJ;AA8BE;;AACA;EACE;;AAIJ;EACE;EACA,OExGe;EFyGf;;AAGF;EACE;EACA,OElHe;EFmHf;;AA7JJ;AAgKE;;AACA;EACE;;AAlKJ;AAqKE;;AAEE;EACE;EACA;;AAzKN;AA6KE;;AACA;EACE;;AAEA;EACE;;AAGF;EACE;;AAtLN;AA0LE;;AACA;EACE;EACA;EACA;EACA,kBE7LgB;EF8LhB;EACA;;AAjMJ;AAoME;;AACA;EACE;EACA,kBEjKe;;AFtCnB;AA0ME;;AACA;EACE;EACA;EACA;EACA;EACA,kBE3Kc;EF4Kd;EACA,OEtKe;EFuKf;EACA;AAEA;EACA;EACA;EAEA;;AAGF;EACE;;;AAIJ;EACE;IACE;;EAEF;IACE","file":"index.wxss","sourcesContent":["@use \"../common/style/theme.scss\" as *;\n@use \"../common/style/mixins.scss\" as *;\n\n/* ========================================== */\n/* Skyline-UI ActionSheet 动作面板样式 (Sass) */\n/* ========================================== */\n\n.sky-action-sheet {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 2000;\n \n /* 默认完全隐藏 */\n visibility: hidden;\n pointer-events: none;\n \n transition: visibility 240ms $sky-transition-timing;\n\n /* ==================== 1. 背景遮罩层 ==================== */\n .sky-action-sheet__mask {\n @include absolute-full;\n background-color: rgba(0, 0, 0, 0.45); /* 柔和深色半透 */\n z-index: 1;\n \n /* 默认完全透明,随 show 激活渐显 */\n opacity: 0;\n transition: opacity 240ms $sky-transition-timing;\n }\n\n /* ==================== 2. 动作面板卡片主体 (从底部向上滑出) ==================== */\n .sky-action-sheet__content {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: $sky-color-white;\n border-radius: 24rpx 24rpx 0 0; /* 高雅头部大圆角 */\n z-index: 2;\n overflow: hidden; /* 裁剪内部节点,确保圆角包圆 */\n display: flex;\n flex-direction: column;\n \n /* 高级悬浮环境投影 */\n box-shadow: $sky-shadow-lg;\n \n /* 极致的高级防直角打磨细节 */\n outline: none;\n -webkit-tap-highlight-color: transparent;\n\n /* 全面屏自适应安全边距 */\n padding-bottom: env(safe-area-inset-bottom);\n \n /* 核心退场过渡:平滑向下滑出 */\n transform: translate3d(0, 100%, 0);\n transition: transform 240ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n\n /* ==================== 3. 激活显示状态 (由父级 show 驱动) ==================== */\n &--show {\n visibility: visible;\n pointer-events: auto;\n \n .sky-action-sheet__mask {\n opacity: 1; /* 遮罩渐显 */\n }\n \n .sky-action-sheet__content {\n transform: translate3d(0, 0, 0); /* 主体滑入锁位 */\n }\n }\n\n /* ==================== 4. 头部标题及副描述排版区 ==================== */\n .sky-action-sheet__header {\n position: relative;\n padding: 34rpx 40rpx; /* 呼吸感宽裕留白,避免窒息拥挤 */\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background-color: $sky-color-white;\n\n /* 底部 1px 极细底分割线 */\n &::after {\n content: \" \";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background-color: $sky-color-gray-2;\n transform: scaleY(0.5);\n transform-origin: center bottom;\n }\n }\n\n .sky-action-sheet__title {\n font-size: 30rpx;\n font-weight: 600;\n color: $sky-color-gray-9;\n line-height: 1.4;\n }\n\n .sky-action-sheet__description {\n font-size: 26rpx;\n color: $sky-color-gray-6;\n line-height: 1.5;\n margin-top: 10rpx;\n }\n\n /* ==================== 5. 选项列表项目 (黄金工效 112rpx 高度) ==================== */\n .sky-action-sheet__list {\n display: flex;\n flex-direction: column;\n }\n\n .sky-action-sheet__item {\n position: relative;\n height: 112rpx;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background-color: $sky-color-white;\n cursor: pointer;\n \n /* 彻底清除移动端默认直角高亮 */\n outline: none;\n -webkit-tap-highlight-color: transparent;\n \n transition: background-color 150ms ease;\n\n /* 选项与选项之间 1px 极细底边线隔离 */\n &::after {\n content: \" \";\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background-color: $sky-color-gray-2;\n transform: scaleY(0.5);\n transform-origin: center bottom;\n }\n\n /* 最后一个动作项消除 1px 底分割线,防止重叠 */\n &:last-child::after {\n display: none;\n }\n }\n\n .sky-action-sheet__name {\n font-size: 30rpx;\n color: $sky-color-gray-9;\n font-weight: 500;\n }\n\n .sky-action-sheet__subname {\n font-size: 22rpx;\n color: $sky-color-gray-5;\n margin-top: 4rpx;\n }\n\n /* 选项按压变深 5% 反馈 (温润如玉) */\n .sky-action-sheet__item--hover {\n background-color: $sky-color-gray-1 !important;\n }\n\n /* 警示选项 (珊瑚红) */\n .sky-action-sheet__item--danger {\n .sky-action-sheet__name {\n color: $sky-color-danger !important;\n font-weight: 600;\n }\n }\n\n /* 禁用项状态 (灰度置灰,不可点击) */\n .sky-action-sheet__item--disabled {\n cursor: not-allowed;\n \n .sky-action-sheet__name {\n color: $sky-color-gray-4 !important;\n }\n \n .sky-action-sheet__subname {\n color: $sky-color-gray-3 !important;\n }\n }\n\n /* 加载中转圈的简单手写动效 (高品质细节) */\n .sky-action-sheet__loading {\n width: 36rpx;\n height: 36rpx;\n border: 3rpx solid $sky-color-gray-3;\n border-top-color: $sky-color-primary;\n border-radius: 50%;\n animation: sky-spin 800ms linear infinite;\n }\n\n /* ==================== 6. 厚实隔离条 (16rpx 高档浅灰) ==================== */\n .sky-action-sheet__gap {\n height: 16rpx;\n background-color: $sky-color-gray-1;\n }\n\n /* ==================== 7. 独立取消按钮 ==================== */\n .sky-action-sheet__cancel {\n height: 112rpx;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $sky-color-white;\n font-size: 30rpx;\n color: $sky-color-gray-7;\n font-weight: 500;\n cursor: pointer;\n \n /* 彻底清除移动端默认直角高亮 */\n outline: none;\n -webkit-tap-highlight-color: transparent;\n \n transition: background-color 150ms ease;\n }\n\n .sky-action-sheet__cancel--hover {\n background-color: $sky-color-gray-1 !important;\n }\n}\n\n@keyframes sky-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","// ==========================================\r\n// Skyline-UI Flex 布局与样式混合宏 (SCSS)\r\n// ==========================================\r\n\r\n@mixin flex-row {\r\n display: flex;\r\n flex-direction: row;\r\n}\r\n\r\n@mixin flex-column {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n@mixin flex-center {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n@mixin flex-align-center {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n}\r\n\r\n@mixin absolute-full {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n// 文本溢出隐藏 (在微信小程序 Flex 布局下,通常需要在容器上设置 overflow 和 flex)\r\n@mixin text-ellipsis {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n// 多行文本溢出隐藏\r\n@mixin text-ellipsis-multiline($lines: 2) {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: $lines;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n// 安全区域底部适配\r\n@mixin safe-area-bottom {\r\n padding-bottom: constant(safe-area-inset-bottom);\r\n padding-bottom: env(safe-area-inset-bottom);\r\n}\r\n\r\n// 1px 高清屏边框 (使用 transform 缩放方案)\r\n@mixin hairline-border($color: $sky-color-gray-3, $radius: 0) {\r\n position: relative;\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 200%;\r\n height: 200%;\r\n border: 1px solid $color;\r\n border-radius: $radius * 2;\r\n transform: scale(0.5);\r\n transform-origin: 0 0;\r\n box-sizing: border-box;\r\n pointer-events: none;\r\n }\r\n}\r\n\r\n// 禁用态通用样式\r\n@mixin disabled-state {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n}\r\n\r\n// 按钮重置\r\n@mixin button-reset {\r\n border: none;\r\n outline: none;\r\n padding: 0;\r\n margin: 0;\r\n background: none;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\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,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Component({
|
|
3
|
+
options: {
|
|
4
|
+
virtualHost: true // 开启虚拟节点降低 Skyline DOM 层级嵌套
|
|
5
|
+
},
|
|
6
|
+
properties: {
|
|
7
|
+
// 徽标显示内容 (支持数字或字符串,如 9、'99+'、'NEW')
|
|
8
|
+
content: {
|
|
9
|
+
type: null, // 接收任意类型
|
|
10
|
+
value: ''
|
|
11
|
+
},
|
|
12
|
+
// 最大数值上限,超过此限制将自动折算成 max+ (例如 99+)
|
|
13
|
+
max: {
|
|
14
|
+
type: Number,
|
|
15
|
+
value: 99
|
|
16
|
+
},
|
|
17
|
+
// 是否渲染为红点小圆点 (只显示红色正圆,忽略数字)
|
|
18
|
+
dot: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
value: false
|
|
21
|
+
},
|
|
22
|
+
// 当数值内容刚好为数字 0 时,是否仍然强行显示
|
|
23
|
+
showZero: {
|
|
24
|
+
type: Boolean,
|
|
25
|
+
value: false
|
|
26
|
+
},
|
|
27
|
+
// 徽标背景颜色 (默认危险珊瑚红)
|
|
28
|
+
color: {
|
|
29
|
+
type: String,
|
|
30
|
+
value: ''
|
|
31
|
+
},
|
|
32
|
+
// 自定义微调偏移,格式为 [top, right] 单位 rpx (例如 [-10, 10])
|
|
33
|
+
offset: {
|
|
34
|
+
type: Array,
|
|
35
|
+
value: []
|
|
36
|
+
},
|
|
37
|
+
// 附加自定义样式
|
|
38
|
+
customStyle: {
|
|
39
|
+
type: String,
|
|
40
|
+
value: ''
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
data: {
|
|
44
|
+
isShow: false, // 操纵显隐
|
|
45
|
+
displayContent: '', // 页面实际渲染的规整文本
|
|
46
|
+
offsetStyle: '' // 偏移的行内 style 语句
|
|
47
|
+
},
|
|
48
|
+
observers: {
|
|
49
|
+
'content, max, dot, showZero': function () {
|
|
50
|
+
this.recalculateBadge();
|
|
51
|
+
},
|
|
52
|
+
'offset': function () {
|
|
53
|
+
this.recalculateOffset();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
lifetimes: {
|
|
57
|
+
attached() {
|
|
58
|
+
this.recalculateBadge();
|
|
59
|
+
this.recalculateOffset();
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
methods: {
|
|
63
|
+
// 核心规整折算逻辑
|
|
64
|
+
recalculateBadge() {
|
|
65
|
+
const { content, max, dot, showZero } = this.data;
|
|
66
|
+
// 1. 判断是否需要显现
|
|
67
|
+
let isShow = true;
|
|
68
|
+
if (dot) {
|
|
69
|
+
// 小红点类型直接显现
|
|
70
|
+
isShow = true;
|
|
71
|
+
}
|
|
72
|
+
else if (content === null || content === undefined || content === '') {
|
|
73
|
+
// 内容为空,静默隐藏
|
|
74
|
+
isShow = false;
|
|
75
|
+
}
|
|
76
|
+
else if (typeof content === 'number' && content === 0) {
|
|
77
|
+
// 数字为 0,根据 showZero 配置决定
|
|
78
|
+
isShow = showZero;
|
|
79
|
+
}
|
|
80
|
+
// 2. 精确换算文字内容
|
|
81
|
+
let displayContent = '';
|
|
82
|
+
if (!dot && isShow) {
|
|
83
|
+
const numVal = Number(content);
|
|
84
|
+
if (!isNaN(numVal) && typeof content !== 'string') {
|
|
85
|
+
// 是纯数值,进行超限折算
|
|
86
|
+
displayContent = numVal > max ? `${max}+` : String(numVal);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// 是字符串(如 'NEW'、'hot'),直接原样展示
|
|
90
|
+
displayContent = String(content);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
this.setData({
|
|
94
|
+
isShow,
|
|
95
|
+
displayContent
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
// 换算微调偏移位置 style
|
|
99
|
+
recalculateOffset() {
|
|
100
|
+
const { offset } = this.data;
|
|
101
|
+
let offsetStyle = '';
|
|
102
|
+
if (Array.isArray(offset) && offset.length === 2) {
|
|
103
|
+
const top = offset[0];
|
|
104
|
+
const right = offset[1];
|
|
105
|
+
offsetStyle = `top: ${top}rpx; right: ${right}rpx;`;
|
|
106
|
+
}
|
|
107
|
+
this.setData({
|
|
108
|
+
offsetStyle
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=index.js.map
|