@ray-js/lamp-style-slider 0.0.2-beta-1

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/README.md ADDED
@@ -0,0 +1,96 @@
1
+ English | [简体中文](./README-zh_CN.md)
2
+
3
+ # @ray-js/lamp-style-slider
4
+
5
+ [![latest](https://img.shields.io/npm/v/@ray-js/lamp-style-slider/latest.svg)](https://www.npmjs.com/package/@ray-js/lamp-style-slider) [![download](https://img.shields.io/npm/dt/@ray-js/lamp-style-slider.svg)](https://www.npmjs.com/package/@ray-js/lamp-style-slider)
6
+
7
+ > 照明样式的基础滑动条
8
+
9
+ ## Installation
10
+
11
+ ```sh
12
+ $ npm install @ray-js/lamp-style-slider
13
+ # or
14
+ $ yarn add @ray-js/lamp-style-slider
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```ts
20
+ // 属性
21
+ export interface IProps {
22
+ /**
23
+ * @description.zh 禁止滑动
24
+ * @description.en Ban sliding
25
+ * @default false
26
+ */
27
+ disable?: boolean;
28
+ /**
29
+ * @description.zh 滑动槽样式
30
+ * @description.en
31
+ * @default {}
32
+ */
33
+ trackStyle?: React.CSSProperties;
34
+ /**
35
+ * @description.zh slider值
36
+ * @description.en slider value
37
+ * @default 0
38
+ */
39
+ value: number;
40
+ /**
41
+ * @description.zh slider 展示的颜色值 对应hsv的hue
42
+ * @description.en slider value
43
+ * @default 0
44
+ */
45
+ hue: number; // 0 - 359
46
+ /**
47
+ * @description.zh slider 手指点击时触发
48
+ * @description.en slider Value changes
49
+ * @default () => {}
50
+ */
51
+ onTouchStart?: (value: number) => void;
52
+ /**
53
+ * @description.zh slider 手指拖动时触发
54
+ * @description.en slider Value changes
55
+ * @default () => {}
56
+ */
57
+ onTouchMove?: (value: number) => void;
58
+ /**
59
+ * @description.zh slider 手指离开时触发
60
+ * @description.en Values change after the trigger
61
+ * @default () => {}
62
+ */
63
+ onTouchEnd?: (value: number) => void;
64
+ }
65
+
66
+ export const defaultProps: IProps = {
67
+ value: 0,
68
+ onTouchStart: () => null,
69
+ onTouchMove: () => null,
70
+ onTouchEnd: () => null,
71
+ };
72
+ ```
73
+
74
+ ```tsx
75
+ import LampSlider from '@ray-js/lamp-style-slider';
76
+
77
+ export default () => {
78
+ const [value, setValue] = useState(100);
79
+
80
+ useEffect(() => {
81
+ // 模拟dp上报
82
+ setTimeout(() => {
83
+ setValue(321);
84
+ }, 3000);
85
+ }, []);
86
+
87
+ return (
88
+ <LampSlider
89
+ value={saturation}
90
+ onTouchMove={val => {
91
+ setValue(val);
92
+ }}
93
+ />
94
+ );
95
+ };
96
+ ```
@@ -0,0 +1,231 @@
1
+ /* eslint-disable react/require-default-props */
2
+ import React from 'react';
3
+
4
+ export interface EventType<T> {
5
+ type: T;
6
+ timeStamp: number;
7
+ target: any;
8
+ currentTarget: any;
9
+ detail: SjsSliderEventData;
10
+ }
11
+
12
+ export interface SjsSliderEventData {
13
+ start: number;
14
+ end: number;
15
+ range: number;
16
+ position: 'start' | 'end';
17
+ }
18
+
19
+ export interface SjsSliderProps {
20
+ /**
21
+ * @description.en instanceId
22
+ * @description.zh 唯一ID
23
+ */
24
+ instanceId: string;
25
+ /**
26
+ * @description.en className
27
+ * @description.zh 样式
28
+ */
29
+ className?: string;
30
+ /**
31
+ * @description.en disable
32
+ * @description.zh disable
33
+ * @default false
34
+ */
35
+ disable?: boolean;
36
+ /**
37
+ * @description.en closed
38
+ * @description.zh closed
39
+ * @default false
40
+ */
41
+ closed?: boolean;
42
+ /**
43
+ * @description.en left value
44
+ * @description.zh 左滑块初始值
45
+ * @default 0
46
+ */
47
+ start?: number;
48
+ /**
49
+ * @description.en watch value and change
50
+ * @description.zh 监听值,并随之变化
51
+ */
52
+ watchStart?: number;
53
+ /**
54
+ * @description.en left value min
55
+ * @description.zh 左滑块最小值限制
56
+ */
57
+ startMin?: number;
58
+ /**
59
+ * @description.en left value max
60
+ * @description.zh 左滑块最大值限制
61
+ */
62
+ startMax?: number;
63
+ /**
64
+ * @description.en Right slider initial value/one-way slider initial value
65
+ * @description.zh 右滑块初始值/单向滑条初始值
66
+ * @default 30
67
+ */
68
+ end?: number;
69
+ /**
70
+ * @description.en watch value and change
71
+ * @description.zh 监听值,并随之变化
72
+ */
73
+ watchEnd?: number;
74
+ /**
75
+ * @description.en Right slider min/one-way slider min
76
+ * @description.zh 右滑块最小值/单向滑条最小值
77
+ */
78
+ endMin?: number;
79
+ /**
80
+ * @description.en Right slider Max/one-way slider Max
81
+ * @description.zh 右滑块最大值/单向滑条最大值
82
+ */
83
+ endMax?: number;
84
+ /**
85
+ * @description.en min
86
+ * @description.zh 最小值, 建议用 endMin 代替
87
+ * @default 0
88
+ * @deprecated
89
+ */
90
+ min?: number;
91
+ /**
92
+ * @description.en max
93
+ * @description.zh 最大值
94
+ * @default 100
95
+ */
96
+ max?: number;
97
+ /**
98
+ * @description.en step
99
+ * @description.zh 阶段值
100
+ * @default 1
101
+ */
102
+ step?: number;
103
+ /**
104
+ * @description.en step
105
+ * @description.zh 阶段值
106
+ */
107
+ forceStep?: number;
108
+ /**
109
+ * @description.en thumbStyle
110
+ * @description.zh 滑块样式
111
+ */
112
+ thumbStartStyle?: React.CSSProperties;
113
+ /**
114
+ * @description.en thumbStyle
115
+ * @description.zh 滑块样式
116
+ */
117
+ thumbEndStyle?: React.CSSProperties;
118
+ /**
119
+ * @description.en trackStyle
120
+ * @description.zh 轨道样式
121
+ */
122
+ trackStyle?: React.CSSProperties;
123
+ /**
124
+ * @description.en barStyle
125
+ * @description.zh 滑条样式
126
+ */
127
+ barStyle?: React.CSSProperties;
128
+ /**
129
+ * @description.en stepStyle
130
+ * @description.zh step样式
131
+ */
132
+ stepStyle?: React.CSSProperties;
133
+ /**
134
+ * @description.en bar stepStyle
135
+ * @description.zh bar step样式
136
+ */
137
+ activeStepStyle?: React.CSSProperties;
138
+ /**
139
+ * @description.en mode
140
+ * @description.zh 单向还是双向
141
+ * @default normal
142
+ */
143
+ mode?: 'range' | 'normal';
144
+ /**
145
+ * @description.en barPad
146
+ * @description.zh 控制滑动bar的偏移量,用于样式微调
147
+ */
148
+ barPad?: number;
149
+ /**
150
+ * @description.en maxRangeOffset
151
+ * @description.zh 按钮对齐偏移
152
+ * @default null
153
+ */
154
+ maxRangeOffset?: number;
155
+ /**
156
+ * @description.en hideThumb
157
+ * @description.zh 隐藏滑块
158
+ * @default false
159
+ */
160
+ hideThumb?: boolean;
161
+ /**
162
+ * @description.en showSteps
163
+ * @description.zh 显示阶段提示
164
+ * @default false
165
+ */
166
+ showSteps?: boolean;
167
+ /**
168
+ * @description.en direction
169
+ * @description.zh 方向
170
+ * @default horizontal
171
+ */
172
+ direction?: 'horizontal' | 'vertical';
173
+ /**
174
+ * @description.en callback
175
+ * @description.zh 回调
176
+ */
177
+ bindmove?: (event: EventType<'move'>) => void;
178
+ /**
179
+ * @description.en callback
180
+ * @description.zh 回调
181
+ */
182
+ bindend?: (event: EventType<'end'>) => void;
183
+ /**
184
+ * @description.en callback
185
+ * @description.zh 回调
186
+ */
187
+ bindstart?: (event: EventType<'start'>) => void;
188
+ /**
189
+ * @description.en reverse
190
+ * @description.zh 是否反转
191
+ * @default false
192
+ */
193
+ reverse?: boolean;
194
+ /**
195
+ * @description.en enableTouch
196
+ * @description.zh 使用触摸跳跃
197
+ * @default false
198
+ */
199
+ enableTouch?: boolean;
200
+ /**
201
+ * @description.en enableTouchBar
202
+ * @description.zh 使用触摸bar增加偏移
203
+ * @default false
204
+ */
205
+ enableTouchBar?: boolean;
206
+ /**
207
+ * @description.en showText
208
+ * @description.zh 在bar上显示文本
209
+ * @default false
210
+ */
211
+ showText?: boolean;
212
+ /**
213
+ * @description.en textStyle
214
+ * @description.zh bar文本样式
215
+ */
216
+ textStyle?: React.CSSProperties;
217
+ /**
218
+ * @description.en textTemplate
219
+ * @description.zh 文本格式化,例如 textTemplate="比率 {{text}} %"
220
+ */
221
+ textTemplate?: string;
222
+ /**
223
+ * @description.en calc style, such as { background: "rgba(0,0,0, {{text / 100 }}" }
224
+ * @description.zh 动态计算thumb样式,如 { background: "rgba(0,0,0, {{text /100 }})" }
225
+ */
226
+ thumbStyleCalc?: Partial<Record<keyof React.CSSProperties, string>>;
227
+ }
228
+
229
+ const SjsSlider: React.FC<SjsSliderProps>;
230
+
231
+ export default SjsSlider;
@@ -0,0 +1,211 @@
1
+ import "core-js/modules/es.number.constructor.js";
2
+ import "core-js/modules/es.regexp.exec.js";
3
+ import "core-js/modules/es.regexp.test.js";
4
+ import "core-js/modules/es.array.concat.js";
5
+ import "core-js/modules/es.array.map.js";
6
+ import "core-js/modules/es.array.fill.js";
7
+ import "core-js/modules/es.parse-int.js";
8
+ /* eslint-disable func-names */
9
+ /* eslint-disable vars-on-top */
10
+ import 'core-js/modules/es.number.constructor.js';
11
+ import 'core-js/modules/es.regexp.exec.js';
12
+ import 'core-js/modules/es.regexp.test.js';
13
+ import 'core-js/modules/es.array.concat.js';
14
+ import 'core-js/modules/es.array.map.js';
15
+ import 'core-js/modules/es.array.fill.js';
16
+ import 'core-js/modules/es.parse-int.js';
17
+ // eslint-disable-next-line no-undef
18
+ Component({
19
+ options: {
20
+ addGlobalClass: true
21
+ },
22
+ properties: {
23
+ className: {
24
+ type: String,
25
+ value: ''
26
+ },
27
+ disable: {
28
+ type: Boolean,
29
+ value: false
30
+ },
31
+ closed: {
32
+ type: Boolean,
33
+ value: false
34
+ },
35
+ // 左滑块初始值
36
+ start: {
37
+ type: Number,
38
+ value: 0
39
+ },
40
+ // 左滑块最小值限制
41
+ startMin: {
42
+ type: Number
43
+ },
44
+ // 左滑块最大值限制
45
+ startMax: {
46
+ type: Number
47
+ },
48
+ // 右滑块初始值/单向滑条初始值
49
+ end: {
50
+ type: Number,
51
+ value: 30
52
+ },
53
+ watchStart: {
54
+ type: Number
55
+ },
56
+ watchEnd: {
57
+ type: Number
58
+ },
59
+ // 右滑块最小值/单向滑条最小值
60
+ endMin: {
61
+ type: Number
62
+ },
63
+ // 右滑块最大值/单向滑条最大值
64
+ endMax: {
65
+ type: Number
66
+ },
67
+ // 最小值
68
+ min: {
69
+ type: Number,
70
+ value: 0
71
+ },
72
+ // 最大值
73
+ max: {
74
+ type: Number,
75
+ value: 1000
76
+ },
77
+ // 阶段值
78
+ step: {
79
+ type: Number,
80
+ value: 1
81
+ },
82
+ // 阶段值
83
+ forceStep: {
84
+ type: Number
85
+ },
86
+ // 滑块样式
87
+ thumbStartStyle: {
88
+ type: String
89
+ },
90
+ // 滑块样式
91
+ thumbEndStyle: {
92
+ type: String
93
+ },
94
+ // 轨道样式
95
+ trackStyle: {
96
+ type: String
97
+ },
98
+ // 滑条样式
99
+ barStyle: {
100
+ type: String
101
+ },
102
+ // step样式
103
+ stepStyle: {
104
+ type: String
105
+ },
106
+ // step样式
107
+ activeStepStyle: {
108
+ type: String
109
+ },
110
+ // 单向还是双向 range: 双向,normal: 单向
111
+ mode: {
112
+ type: String
113
+ },
114
+ // 方向 "horizontal" | "vertical"
115
+ direction: {
116
+ type: String
117
+ },
118
+ // 控制滑动bar的偏移量,用于样式微调
119
+ barPad: {
120
+ type: Number
121
+ },
122
+ // 隐藏滑块
123
+ hideThumb: {
124
+ type: Boolean,
125
+ value: false
126
+ },
127
+ // 显示阶段提示
128
+ showSteps: {
129
+ type: Boolean,
130
+ value: false
131
+ },
132
+ // 反转
133
+ reverse: {
134
+ type: Boolean,
135
+ value: false
136
+ },
137
+ // 使用触摸跳跃
138
+ enableTouch: {
139
+ type: Boolean,
140
+ value: false
141
+ },
142
+ // 使用触摸bar增加偏移
143
+ enableTouchBar: {
144
+ type: Boolean,
145
+ value: false
146
+ },
147
+ // 使用触摸跳跃
148
+ maxRangeOffset: {
149
+ type: Number,
150
+ value: 0
151
+ },
152
+ // 唯一ID
153
+ instanceId: {
154
+ type: String
155
+ },
156
+ // 在bar上显示文本
157
+ showText: {
158
+ type: Boolean
159
+ },
160
+ // bar文本样式
161
+ textStyle: {
162
+ type: String
163
+ },
164
+ // 文本格式化,例如 textTemplate="比率 {{text}} %"
165
+ textTemplate: {
166
+ type: String
167
+ },
168
+ // 动态计算thumb样式,如 { background: "rgba(0,0,0, {{text}}/100)" }
169
+ thumbStyleCalc: {
170
+ type: Object
171
+ }
172
+ },
173
+ data: {
174
+ steps: [],
175
+ text: ''
176
+ },
177
+ lifetimes: {
178
+ /**
179
+ * 组件的方法列表
180
+ */
181
+ ready: function () {
182
+ var isNumber = function (n) {
183
+ return /\d+/.test(n);
184
+ };
185
+ var getNumber = function (n, def) {
186
+ return isNumber(n) ? n : def;
187
+ };
188
+ if (!this.data.showSteps) return;
189
+ var stepCount = this.data.step || this.data.forceStep;
190
+ var max = getNumber(this.data.max, 100);
191
+ var min = getNumber(this.data.min, 0);
192
+ var steps = new Array(parseInt(String((max - min) / stepCount), 10)).fill(0).map(function (_, i) {
193
+ return i;
194
+ }).concat(-1);
195
+ this.setData({
196
+ steps: steps
197
+ });
198
+ }
199
+ },
200
+ methods: {
201
+ setText: function (_ref) {
202
+ var instanceId = _ref.instanceId;
203
+ var content = _ref.content;
204
+ if (!this.data.showText) return;
205
+ if (instanceId !== this.data.instanceId) return;
206
+ this.setData({
207
+ text: content
208
+ });
209
+ }
210
+ }
211
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "component": true
3
+ }