aio-range 2.0.0 → 2.0.2
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/index.css +23 -24
- package/index.d.ts +39 -15
- package/index.js +206 -218
- package/package.json +1 -1
package/index.css
CHANGED
|
@@ -4,42 +4,39 @@
|
|
|
4
4
|
user-select: none;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
.aio-input-range-value {
|
|
9
|
-
width: 100%;
|
|
10
|
-
overflow: visible;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.ai-range-horizontal {
|
|
7
|
+
.ai-slider-horizontal {
|
|
14
8
|
height: 48px;
|
|
15
9
|
align-items: center;
|
|
16
10
|
width: 100%;
|
|
17
11
|
}
|
|
18
12
|
|
|
19
|
-
.ai-
|
|
13
|
+
.ai-slider-horizontal .ai-slider-groove {
|
|
20
14
|
height: 1px;
|
|
21
15
|
width: 100%;
|
|
22
16
|
background: #ddd;
|
|
23
17
|
}
|
|
24
18
|
|
|
25
|
-
.ai-
|
|
19
|
+
.ai-slider-vertical {
|
|
26
20
|
width: 48px;
|
|
27
21
|
height: 240px;
|
|
28
22
|
justify-content: center;
|
|
29
23
|
margin: 12px 0;
|
|
30
24
|
}
|
|
31
25
|
|
|
32
|
-
.ai-
|
|
26
|
+
.ai-slider-vertical .ai-slider-groove {
|
|
33
27
|
width: 1px;
|
|
34
28
|
height: 100%;
|
|
35
29
|
background: #ddd;
|
|
36
30
|
}
|
|
37
31
|
|
|
38
|
-
.ai-
|
|
32
|
+
.ai-slider-reverse {
|
|
33
|
+
direction: rtl;
|
|
34
|
+
}
|
|
35
|
+
.ai-spinner-reverse {
|
|
39
36
|
direction: rtl;
|
|
40
37
|
}
|
|
41
38
|
|
|
42
|
-
.ai-
|
|
39
|
+
.ai-spinner {
|
|
43
40
|
border-radius: 100%;
|
|
44
41
|
justify-content: center;
|
|
45
42
|
align-items: center;
|
|
@@ -57,11 +54,11 @@
|
|
|
57
54
|
z-index: 10;
|
|
58
55
|
}
|
|
59
56
|
|
|
60
|
-
.ai-
|
|
57
|
+
.ai-spinner .ai-range-value-container {
|
|
61
58
|
justify-content: flex-end;
|
|
62
59
|
}
|
|
63
60
|
|
|
64
|
-
.
|
|
61
|
+
.ai-spinner-handle {
|
|
65
62
|
position: absolute;
|
|
66
63
|
width: 0;
|
|
67
64
|
height: 0;
|
|
@@ -76,7 +73,7 @@
|
|
|
76
73
|
height: 0;
|
|
77
74
|
}
|
|
78
75
|
|
|
79
|
-
.ai-
|
|
76
|
+
.ai-spinner .ai-range-label-container {
|
|
80
77
|
justify-content: flex-end;
|
|
81
78
|
}
|
|
82
79
|
|
|
@@ -84,12 +81,12 @@
|
|
|
84
81
|
position: absolute;
|
|
85
82
|
}
|
|
86
83
|
|
|
87
|
-
.ai-
|
|
84
|
+
.ai-slider-horizontal .ai-range-labels {
|
|
88
85
|
width: 100%;
|
|
89
86
|
height: 100%;
|
|
90
87
|
}
|
|
91
88
|
|
|
92
|
-
.ai-
|
|
89
|
+
.ai-slider-vertical .ai-range-labels {
|
|
93
90
|
width: 100%;
|
|
94
91
|
height: 100%;
|
|
95
92
|
}
|
|
@@ -100,6 +97,8 @@
|
|
|
100
97
|
align-items: center;
|
|
101
98
|
justify-content: center;
|
|
102
99
|
font-size: 12px;
|
|
100
|
+
width: 0;
|
|
101
|
+
height:0;
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
.ai-range-label>* {
|
|
@@ -135,7 +134,7 @@
|
|
|
135
134
|
justify-content: center;
|
|
136
135
|
}
|
|
137
136
|
|
|
138
|
-
.ai-
|
|
137
|
+
.ai-slider-range {
|
|
139
138
|
position: absolute;
|
|
140
139
|
}
|
|
141
140
|
|
|
@@ -148,7 +147,7 @@
|
|
|
148
147
|
height: 0;
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
.ai-
|
|
150
|
+
.ai-spinner .ai-range-scale-container {
|
|
152
151
|
justify-content: flex-end;
|
|
153
152
|
}
|
|
154
153
|
|
|
@@ -164,27 +163,27 @@
|
|
|
164
163
|
|
|
165
164
|
}
|
|
166
165
|
|
|
167
|
-
.ai-
|
|
166
|
+
.ai-spinner .ai-range-scale {
|
|
168
167
|
height: 2px;
|
|
169
168
|
width: 6px;
|
|
170
169
|
left: 6px;
|
|
171
170
|
}
|
|
172
171
|
|
|
173
|
-
.ai-
|
|
172
|
+
.ai-slider-vertical .ai-range-scale {
|
|
174
173
|
height: 2px;
|
|
175
174
|
width: 6px;
|
|
176
175
|
}
|
|
177
176
|
|
|
178
|
-
.ai-
|
|
177
|
+
.ai-slider-fill {
|
|
179
178
|
background: #0069ff;
|
|
180
179
|
position: absolute;
|
|
181
180
|
z-index: 10;
|
|
182
181
|
}
|
|
183
182
|
|
|
184
|
-
.ai-
|
|
183
|
+
.ai-slider-horizontal .ai-slider-fill {
|
|
185
184
|
height: 4px;
|
|
186
185
|
}
|
|
187
186
|
|
|
188
|
-
.ai-
|
|
187
|
+
.ai-slider-vertical .ai-slider-fill {
|
|
189
188
|
width: 4px;
|
|
190
189
|
}
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC, ReactNode } from "react";
|
|
1
|
+
import { type FC, type ReactNode } from "react";
|
|
2
2
|
import './index.css';
|
|
3
3
|
export type AI_RangeContext = {
|
|
4
4
|
rangeHook: ReturnType<typeof useRange>;
|
|
@@ -23,7 +23,6 @@ export type AI_label = {
|
|
|
23
23
|
zIndex?: number;
|
|
24
24
|
setting: (value: number, p: {
|
|
25
25
|
angle: number;
|
|
26
|
-
disabled: boolean;
|
|
27
26
|
index: number;
|
|
28
27
|
}) => AI_labelItem;
|
|
29
28
|
};
|
|
@@ -76,22 +75,18 @@ export type I_Range = {
|
|
|
76
75
|
pointHtml?: (p: {
|
|
77
76
|
index: number;
|
|
78
77
|
value: number;
|
|
79
|
-
disabled: boolean;
|
|
80
78
|
angle: number;
|
|
81
79
|
}) => ReactNode | false | undefined;
|
|
82
80
|
pointContent?: (p: {
|
|
83
81
|
index: number;
|
|
84
82
|
value: number;
|
|
85
|
-
disabled: boolean;
|
|
86
83
|
angle: number;
|
|
87
84
|
}) => ReactNode;
|
|
88
85
|
pointOffset?: (p: {
|
|
89
86
|
index: number;
|
|
90
87
|
value: number;
|
|
91
|
-
disabled: boolean;
|
|
92
88
|
angle: number;
|
|
93
89
|
}) => number | undefined;
|
|
94
|
-
disabled?: (value: number) => boolean;
|
|
95
90
|
fill?: (startPoint: {
|
|
96
91
|
index: number;
|
|
97
92
|
value: number;
|
|
@@ -107,7 +102,6 @@ export type I_Range = {
|
|
|
107
102
|
handle?: (p: {
|
|
108
103
|
index: number;
|
|
109
104
|
value: number;
|
|
110
|
-
disabled: boolean;
|
|
111
105
|
angle: number;
|
|
112
106
|
}) => {
|
|
113
107
|
widthPercent?: number;
|
|
@@ -129,22 +123,23 @@ type I_Range_default = I_Range & {
|
|
|
129
123
|
rotate: number;
|
|
130
124
|
ranges: I_range[];
|
|
131
125
|
};
|
|
132
|
-
declare const
|
|
133
|
-
export
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
126
|
+
export declare const AIOSlider: FC<I_Range>;
|
|
127
|
+
export declare const AIOSpinner: FC<I_Range>;
|
|
128
|
+
type I_RangeValue = {
|
|
129
|
+
value: number;
|
|
130
|
+
angle: number;
|
|
137
131
|
index: number;
|
|
138
132
|
};
|
|
139
|
-
declare const useRange: (PROPS: I_Range) => {
|
|
133
|
+
declare const useRange: (PROPS: I_Range, type: 'slider' | 'spinner') => {
|
|
140
134
|
values: number[];
|
|
141
135
|
getValues: (value: any) => number[];
|
|
142
136
|
getSide: () => "left" | "right" | "bottom" | "top";
|
|
143
137
|
fixAngle: (angle: number) => number;
|
|
144
138
|
getValueByAngle: (angle: number) => number;
|
|
145
139
|
mainDom: any;
|
|
146
|
-
isValueDisabled: (value: number) => boolean;
|
|
147
140
|
rootProps: I_Range_default;
|
|
141
|
+
getRootProps: (props: I_Range, type: 'slider' | 'spinner') => any;
|
|
142
|
+
getLabelList: (label: AI_label) => number[];
|
|
148
143
|
getArc: (rc: I_range) => {
|
|
149
144
|
thickness: number;
|
|
150
145
|
color: string;
|
|
@@ -161,5 +156,34 @@ declare const useRange: (PROPS: I_Range) => {
|
|
|
161
156
|
getXPByValue: (value: number) => number;
|
|
162
157
|
getValueByXP: (xp: number) => number;
|
|
163
158
|
getXPByX: (x: number) => number;
|
|
164
|
-
|
|
159
|
+
handleZIndex: (index: number) => void;
|
|
160
|
+
getSpinnerLabel: (labelItem: AI_labelItem, itemValue: number) => import("react/jsx-runtime").JSX.Element;
|
|
161
|
+
getSliderPointContainerStyle: (rangeValue: I_RangeValue) => {
|
|
162
|
+
[x: string]: number;
|
|
163
|
+
};
|
|
164
|
+
getSpinnerPointContainerStyle: (rangeValue: I_RangeValue) => {
|
|
165
|
+
left: number;
|
|
166
|
+
transform: string;
|
|
167
|
+
};
|
|
168
|
+
getSliderValueProps: (rangeValue: I_RangeValue) => {
|
|
169
|
+
className: string;
|
|
170
|
+
draggable: boolean;
|
|
171
|
+
style: {
|
|
172
|
+
[x: string]: string;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
getSpinnerValueProps: (rangeValue: I_RangeValue) => {
|
|
176
|
+
className: string;
|
|
177
|
+
draggable: boolean;
|
|
178
|
+
style: {
|
|
179
|
+
transform: string;
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
getRangeValue: (itemValue: number, index: number) => {
|
|
183
|
+
value: number;
|
|
184
|
+
index: number;
|
|
185
|
+
angle: number;
|
|
186
|
+
};
|
|
187
|
+
getSliderLabel: (labelItem: AI_labelItem, itemValue: number) => import("react/jsx-runtime").JSX.Element;
|
|
165
188
|
};
|
|
189
|
+
export {};
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createElement as _createElement } from "react";
|
|
2
|
-
import { jsx as _jsx,
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, createRef, useContext, useEffect, useRef, useState } from "react";
|
|
4
4
|
import * as UT from 'aio-utils';
|
|
5
5
|
import { $ } from 'aio-deps';
|
|
@@ -7,90 +7,59 @@ import './index.css';
|
|
|
7
7
|
const RangeContext = createContext({});
|
|
8
8
|
const RangeProvider = ({ value, children }) => _jsx(RangeContext.Provider, { value: value, children: children });
|
|
9
9
|
const useRangeProvider = () => useContext(RangeContext);
|
|
10
|
-
const
|
|
11
|
-
const rangeHook = useRange(props);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
c += ` ai-range-reverse`;
|
|
25
|
-
}
|
|
26
|
-
return c;
|
|
27
|
-
}
|
|
28
|
-
function getRootStyle() {
|
|
29
|
-
let { style } = props;
|
|
30
|
-
let res;
|
|
31
|
-
if (props.round) {
|
|
32
|
-
res = { width: props.size, height: props.size };
|
|
33
|
-
}
|
|
34
|
-
return Object.assign(Object.assign({}, res), style);
|
|
35
|
-
}
|
|
36
|
-
function getRootProps() {
|
|
37
|
-
let { attrs = {} } = props;
|
|
38
|
-
let rootStyle = getRootStyle();
|
|
39
|
-
return UT.AddToAttrs(attrs, { className: getRootClassName(), style: rootStyle, attrs: { ref: rangeHook.mainDom } });
|
|
40
|
-
}
|
|
41
|
-
function root_node() {
|
|
42
|
-
const { labels } = rangeHook.rootProps;
|
|
43
|
-
return (_jsxs("div", Object.assign({}, getRootProps(), { children: [rangeHook.getGroove(), props.text !== undefined && _jsx("div", { className: 'ai-range-text', children: props.text }, 'rangetext'), !props.round &&
|
|
44
|
-
_jsxs(_Fragment, { children: [_jsx(AIRangeRects, {}, 'rangeRects'), _jsx(RangeFills, {}, 'rangeFills')] }), _jsx(RangeSvg, {}), labels.map((label, i) => _jsx(RangeLabel, { label: label }, i)), _jsx(RangeValues, {})] })));
|
|
10
|
+
export const AIOSlider = (props) => {
|
|
11
|
+
const rangeHook = useRange(props, 'slider');
|
|
12
|
+
return (_jsx(RangeProvider, { value: { rangeHook }, children: _jsxs("div", Object.assign({}, rangeHook.getRootProps(props, 'slider'), { children: [_jsx(SliderGroove, { grooveAttrs: props.grooveAttrs }), _jsx(SliderRects, { ranges: props.ranges }), _jsx(SliderFills, {}), _jsx(RangeLabels, { type: 'slider' }), _jsx(RangeValues, { type: 'slider' })] })) }));
|
|
13
|
+
};
|
|
14
|
+
export const AIOSpinner = (props) => {
|
|
15
|
+
const rangeHook = useRange(props, 'spinner');
|
|
16
|
+
return (_jsx(RangeProvider, { value: { rangeHook }, children: _jsxs("div", Object.assign({}, rangeHook.getRootProps(props, 'spinner'), { children: [_jsx(SpinnerText, { text: props.text }), _jsx(SpinnerSvg, {}), _jsx(RangeLabels, { type: 'spinner' }), _jsx(RangeValues, { type: 'spinner' })] })) }));
|
|
17
|
+
};
|
|
18
|
+
const SliderGroove = ({ grooveAttrs }) => {
|
|
19
|
+
return _jsx("div", Object.assign({}, UT.AddToAttrs(grooveAttrs, { className: 'ai-slider-groove' })));
|
|
20
|
+
};
|
|
21
|
+
const SpinnerText = ({ text }) => {
|
|
22
|
+
if (text === undefined || text === null) {
|
|
23
|
+
return null;
|
|
45
24
|
}
|
|
46
|
-
return
|
|
25
|
+
return _jsx("div", { className: 'ai-range-text', children: text });
|
|
26
|
+
};
|
|
27
|
+
const RangeLabels = ({ type }) => {
|
|
28
|
+
const { rangeHook } = useRangeProvider();
|
|
29
|
+
const { labels } = rangeHook.rootProps;
|
|
30
|
+
return (_jsx(_Fragment, { children: labels.map((label, i) => _jsx(RangeLabel, { label: label, type: type }, i)) }));
|
|
47
31
|
};
|
|
48
|
-
|
|
49
|
-
const RangeValues = () => {
|
|
32
|
+
const RangeValues = ({ type }) => {
|
|
50
33
|
const { rangeHook } = useRangeProvider();
|
|
51
34
|
return (_jsx(_Fragment, { children: rangeHook.values.map((itemValue, i) => {
|
|
52
|
-
return _jsx(RangeValue, { index: i, itemValue: itemValue }, 'rangecontainervalue' + i);
|
|
35
|
+
return _jsx(RangeValue, { index: i, itemValue: itemValue, type: type }, 'rangecontainervalue' + i);
|
|
53
36
|
}) }));
|
|
54
37
|
};
|
|
55
|
-
const RangeValue = (
|
|
38
|
+
const RangeValue = ({ itemValue, index, type }) => {
|
|
56
39
|
let { rangeHook } = useRangeProvider();
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
function containerProps() {
|
|
61
|
-
let style;
|
|
62
|
-
if (!round) {
|
|
63
|
-
style = { [rangeHook.getSide()]: rangeHook.getXPByValue(itemValue) + '%' };
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
style = { transform: `rotate(${angle}deg)` };
|
|
67
|
-
}
|
|
68
|
-
return { className: 'ai-range-value-container', draggable: false, style };
|
|
69
|
-
}
|
|
70
|
-
const disabled = rangeHook.isValueDisabled(itemValue);
|
|
71
|
-
return (_jsxs("div", Object.assign({}, containerProps(), { children: [_jsx(RangeHandle, { disabled: disabled, value: itemValue, index: index, angle: angle }), _jsx(AIRangePoint, { disabled: disabled, value: itemValue, index: index, angle: angle })] })));
|
|
40
|
+
const rangeValue = rangeHook.getRangeValue(itemValue, index);
|
|
41
|
+
const props = type === 'spinner' ? rangeHook.getSpinnerValueProps(rangeValue) : rangeHook.getSliderValueProps(rangeValue);
|
|
42
|
+
return (_jsxs("div", Object.assign({}, props, { children: [_jsx(SpinnerHandle, { rangeValue: rangeValue }), _jsx(AIRangePoint, { rangeValue: rangeValue, type: type })] })));
|
|
72
43
|
};
|
|
73
|
-
const
|
|
44
|
+
const SpinnerSvg = () => {
|
|
74
45
|
const { rangeHook } = useRangeProvider();
|
|
75
|
-
const {
|
|
76
|
-
if (!
|
|
46
|
+
const { ranges, size } = rangeHook.rootProps;
|
|
47
|
+
if (!ranges.length) {
|
|
77
48
|
return null;
|
|
78
49
|
}
|
|
79
|
-
return (_jsx("svg", { style: { position: 'absolute', left: 0, top: 0 }, width: size, height: size, children: ranges.map((range, i) => _jsx(
|
|
50
|
+
return (_jsx("svg", { style: { position: 'absolute', left: 0, top: 0 }, width: size, height: size, children: ranges.map((range, i) => _jsx(SpinnerArc, { range: range }, 'rangecirclearc' + i)) }));
|
|
80
51
|
};
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
const { ranges = [] } = rangeHook.rootProps;
|
|
84
|
-
return (_jsx(_Fragment, { children: ranges.map((range, i) => _jsx(RangeRect, { range: range }, 'range' + i)) }));
|
|
85
|
-
};
|
|
86
|
-
const RangeFills = () => {
|
|
87
|
-
let { rangeHook } = useRangeProvider();
|
|
88
|
-
let { start, round, rangeOption = {} } = rangeHook.rootProps;
|
|
89
|
-
if (round) {
|
|
52
|
+
const SliderRects = ({ ranges = [] }) => {
|
|
53
|
+
if (!ranges.length) {
|
|
90
54
|
return null;
|
|
91
55
|
}
|
|
56
|
+
return (_jsx(_Fragment, { children: ranges.map((range, i) => _jsx(SliderRect, { range: range }, 'range' + i)) }));
|
|
57
|
+
};
|
|
58
|
+
const SliderFills = () => {
|
|
59
|
+
const { rangeHook } = useRangeProvider();
|
|
60
|
+
const { rootProps, values } = rangeHook;
|
|
61
|
+
const { rangeOption = {}, start } = rootProps;
|
|
92
62
|
const { fill } = rangeOption;
|
|
93
|
-
const values = rangeHook.values;
|
|
94
63
|
let limit = values.length === 1 ? [start, values[0]] : [...values];
|
|
95
64
|
const fillHtmls = [];
|
|
96
65
|
for (let i = 1; i < limit.length; i++) {
|
|
@@ -104,24 +73,24 @@ const RangeFills = () => {
|
|
|
104
73
|
const { thickness = 4, style, className: fillClassName, color } = res;
|
|
105
74
|
let from = limit[startPoint.index];
|
|
106
75
|
let to = limit[endPoint.index];
|
|
107
|
-
let className = 'ai-
|
|
76
|
+
let className = 'ai-slider-fill';
|
|
108
77
|
if (fillClassName) {
|
|
109
78
|
className += ' ' + fillClassName;
|
|
110
79
|
}
|
|
111
|
-
fillHtmls.push(_jsx(
|
|
80
|
+
fillHtmls.push(_jsx(SliderRect, { range: { thickness, color, from, to, className, style, offset: 0 } }, 'fill' + i));
|
|
112
81
|
}
|
|
113
82
|
return _jsx(_Fragment, { children: fillHtmls });
|
|
114
83
|
};
|
|
115
|
-
const
|
|
84
|
+
const SliderRect = ({ range }) => {
|
|
116
85
|
let { rangeHook } = useRangeProvider();
|
|
117
86
|
let { color, from, to, className, style, offset, thickness, roundCap } = range;
|
|
118
|
-
className = UT.classListToString(['ai-
|
|
87
|
+
className = UT.classListToString(['ai-slider-range', range.className]);
|
|
119
88
|
const { vertical, reverse } = rangeHook.rootProps;
|
|
120
89
|
let startSide = rangeHook.getXPByValue(from), endSide = rangeHook.getXPByValue(to);
|
|
121
90
|
let Style = Object.assign({ [vertical ? 'height' : 'width']: (endSide - startSide) + '%', [vertical ? 'width' : 'height']: range.thickness, [vertical ? (reverse ? 'bottom' : 'top') : (reverse ? 'right' : 'left')]: startSide + '%', [vertical ? 'left' : 'top']: `calc(50% - ${(thickness / 2) + offset}px)`, borderRadius: roundCap ? 48 : 0, background: color }, style);
|
|
122
91
|
return _jsx("div", { className: className, style: Style });
|
|
123
92
|
};
|
|
124
|
-
const
|
|
93
|
+
const SpinnerArc = ({ range }) => {
|
|
125
94
|
let { rangeHook } = useRangeProvider();
|
|
126
95
|
let { size, reverse } = rangeHook.rootProps;
|
|
127
96
|
const { thickness, color, radius, roundCap, full, from, to } = rangeHook.getArc(range);
|
|
@@ -146,15 +115,14 @@ const RangeArc = ({ range }) => {
|
|
|
146
115
|
}
|
|
147
116
|
return _jsx("path", { d: UT.svgArc(x, y, radius, a, b), stroke: color, strokeWidth: thickness, fill: 'transparent', strokeLinecap: roundCap ? 'round' : undefined, className: range.className }, `from${from}to${to}`);
|
|
148
117
|
};
|
|
149
|
-
const
|
|
118
|
+
const SpinnerHandle = ({ rangeValue }) => {
|
|
150
119
|
let { rangeHook } = useRangeProvider();
|
|
151
|
-
let {
|
|
152
|
-
|
|
153
|
-
if (!round || !rangeOption.handle) {
|
|
120
|
+
let { rangeOption = {} } = rangeHook.rootProps;
|
|
121
|
+
if (!rangeOption.handle) {
|
|
154
122
|
return null;
|
|
155
123
|
}
|
|
156
124
|
const { handle: handleFn } = rangeOption;
|
|
157
|
-
const handle = handleFn(
|
|
125
|
+
const handle = handleFn(rangeValue);
|
|
158
126
|
if (!handle) {
|
|
159
127
|
return null;
|
|
160
128
|
}
|
|
@@ -174,33 +142,18 @@ const RangeHandle = (props) => {
|
|
|
174
142
|
return { width, height, left: offset, background: color };
|
|
175
143
|
}
|
|
176
144
|
}
|
|
177
|
-
let PROPS = UT.AddToAttrs({}, { className: '
|
|
178
|
-
return (_createElement("div", Object.assign({}, PROPS, { key: 'rangehandle' + index })));
|
|
145
|
+
let PROPS = UT.AddToAttrs({}, { className: 'ai-spinner-handle', style: getStyle(), attrs: { draggable: false } });
|
|
146
|
+
return (_createElement("div", Object.assign({}, PROPS, { key: 'rangehandle' + rangeValue.index })));
|
|
179
147
|
};
|
|
180
148
|
const RangeLabel = (props) => {
|
|
181
149
|
let { rangeHook } = useRangeProvider();
|
|
182
150
|
let { label } = props;
|
|
183
|
-
let { zIndex, dynamic
|
|
184
|
-
let {
|
|
151
|
+
let { zIndex, dynamic } = label;
|
|
152
|
+
let { reverse, vertical } = rangeHook.rootProps;
|
|
185
153
|
let [def] = useState(getDef);
|
|
186
154
|
function getDef() { return RENDER(true); }
|
|
187
|
-
function getList() {
|
|
188
|
-
let res = [];
|
|
189
|
-
if (step) {
|
|
190
|
-
let { start: lstart = start, end: lend = end } = label;
|
|
191
|
-
for (let i = lstart; i <= lend; i += step) {
|
|
192
|
-
res.push(i);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
for (let i = 0; i < list.length; i++) {
|
|
196
|
-
if (res.indexOf(list[i]) === -1) {
|
|
197
|
-
res.push(list[i]);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return res;
|
|
201
|
-
}
|
|
202
155
|
function updateLabels() {
|
|
203
|
-
if (
|
|
156
|
+
if (props.type !== "spinner" || !label.autoHide || vertical) {
|
|
204
157
|
return;
|
|
205
158
|
}
|
|
206
159
|
let container = $(rangeHook.mainDom.current);
|
|
@@ -242,93 +195,31 @@ const RangeLabel = (props) => {
|
|
|
242
195
|
if (!init && !dynamic) {
|
|
243
196
|
return def;
|
|
244
197
|
}
|
|
245
|
-
|
|
198
|
+
const list = rangeHook.getLabelList(label);
|
|
199
|
+
return (_jsx("div", { className: 'ai-range-labels', style: { zIndex }, children: list.map((itemValue, index) => {
|
|
200
|
+
let labelItem = label.setting(itemValue, { angle: 0, index });
|
|
201
|
+
if (props.type === "slider") {
|
|
202
|
+
return (rangeHook.getSliderLabel(labelItem, itemValue));
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return rangeHook.getSpinnerLabel(labelItem, itemValue);
|
|
206
|
+
}
|
|
207
|
+
}) }));
|
|
246
208
|
}
|
|
247
209
|
return _jsx(_Fragment, { children: RENDER(false) });
|
|
248
210
|
};
|
|
249
|
-
const
|
|
211
|
+
const AIRangePoint = ({ rangeValue, type }) => {
|
|
250
212
|
let { rangeHook } = useRangeProvider();
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (round) {
|
|
255
|
-
angle = rangeHook.fixAngle(rangeHook.getAngleByValue(itemValue));
|
|
256
|
-
}
|
|
257
|
-
let disabled = rangeHook.isValueDisabled(itemValue);
|
|
258
|
-
function getContainerStyle(distance) {
|
|
259
|
-
if (round) {
|
|
260
|
-
return { transform: `rotate(${angle}deg)` };
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
return Object.assign({ [rangeHook.getSide()]: rangeHook.getXPByValue(itemValue) + '%' }, distance);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
function getTextStyle(item, distance) {
|
|
267
|
-
let res = {};
|
|
268
|
-
if (round) {
|
|
269
|
-
res = Object.assign(Object.assign({}, res), distance);
|
|
270
|
-
if (item.fixAngle) {
|
|
271
|
-
res = Object.assign(Object.assign({}, res), { transform: `rotate(${-angle}deg)` });
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return Object.assign({ width: 0, height: 0 }, res);
|
|
275
|
-
}
|
|
276
|
-
function getDetails() {
|
|
277
|
-
let item = label.setting(itemValue, { disabled, angle, index });
|
|
278
|
-
let { offset = 0, html = '', config } = item;
|
|
279
|
-
let distance = { [round || vertical ? 'left' : 'top']: size * offset / 100 / 2 };
|
|
280
|
-
if (round) {
|
|
281
|
-
distance.left = size * offset / 100 / 2;
|
|
282
|
-
}
|
|
283
|
-
else if (vertical) {
|
|
284
|
-
distance.left = `calc(50% + ${offset || 0}px)`;
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
distance.top = `calc(50% + ${offset || 0}px)`;
|
|
288
|
-
}
|
|
289
|
-
let containerStyle = getContainerStyle(distance);
|
|
290
|
-
let containerProps = { className: 'ai-range-label-container', style: containerStyle, draggable: false };
|
|
291
|
-
let textProps = UT.AddToAttrs({}, { className: ['ai-range-label'], style: getTextStyle(item, distance), attrs: { draggable: false } });
|
|
292
|
-
if (config) {
|
|
293
|
-
html = (_jsx("div", { className: "msf", style: {
|
|
294
|
-
[!!round && !vertical ? 'height' : 'width']: size * config.thickness / 100,
|
|
295
|
-
[!!round && !vertical ? 'width' : 'height']: size * config.height / 100,
|
|
296
|
-
//transform:`translate${!!round && !vertical?'Y':'X'}${-size * config.thickness / 200}`,
|
|
297
|
-
background: config.color
|
|
298
|
-
} }));
|
|
299
|
-
}
|
|
300
|
-
return { html, textProps, containerProps };
|
|
301
|
-
}
|
|
302
|
-
let { html, textProps, containerProps } = getDetails();
|
|
303
|
-
return (_jsx("div", Object.assign({}, containerProps, { children: _jsx("div", Object.assign({}, textProps, { children: html })) })));
|
|
304
|
-
};
|
|
305
|
-
const AIRangePoint = (props) => {
|
|
306
|
-
let { rangeHook } = useRangeProvider();
|
|
307
|
-
const { size, vertical, rangeOption = {}, round } = rangeHook.rootProps;
|
|
308
|
-
function getContainerStyle(offset) {
|
|
309
|
-
let containerStyle;
|
|
310
|
-
if (round) {
|
|
311
|
-
containerStyle = { left: size / 2 + offset, transform: `rotate(${-props.angle}deg)` };
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
containerStyle = { [vertical ? 'left' : 'top']: offset };
|
|
315
|
-
}
|
|
316
|
-
return containerStyle;
|
|
317
|
-
}
|
|
318
|
-
function handleZIndex(index) {
|
|
319
|
-
let containers = $(rangeHook.mainDom.current).find(`.ai-range-value-container`);
|
|
320
|
-
containers.css({ zIndex: 10 });
|
|
321
|
-
containers.eq(index).css({ zIndex: 100 });
|
|
322
|
-
}
|
|
323
|
-
const { pointContent = (() => props.value), pointHtml = (() => _jsx("div", { className: 'ai-range-point', children: pointContent(props) })), pointOffset = (() => 0) } = rangeOption;
|
|
324
|
-
const point = pointHtml(props);
|
|
213
|
+
const { rangeOption = {} } = rangeHook.rootProps;
|
|
214
|
+
const { pointContent = (() => rangeValue.value), pointHtml = (() => _jsx("div", { className: 'ai-range-point', children: pointContent(rangeValue) })), } = rangeOption;
|
|
215
|
+
const point = pointHtml(rangeValue);
|
|
325
216
|
if (point === false) {
|
|
326
217
|
return null;
|
|
327
218
|
}
|
|
328
|
-
const
|
|
329
|
-
return (_jsx("div", { style:
|
|
219
|
+
const containerStyle = type === "spinner" ? rangeHook.getSpinnerPointContainerStyle(rangeValue) : rangeHook.getSliderPointContainerStyle(rangeValue);
|
|
220
|
+
return (_jsx("div", { style: containerStyle, className: 'ai-range-point-container', draggable: false, "data-range-index": rangeValue.index, onMouseDown: () => rangeHook.handleZIndex(rangeValue.index), children: point }, 'rangepoint' + rangeValue.index));
|
|
330
221
|
};
|
|
331
|
-
const useRange = (PROPS) => {
|
|
222
|
+
const useRange = (PROPS, type) => {
|
|
332
223
|
const getProps = () => {
|
|
333
224
|
const { start = 0, end = 100, min = start, max = end, step = 1, size = 72, labels = [], rotate = 0, ranges = [] } = PROPS;
|
|
334
225
|
return Object.assign(Object.assign({}, PROPS), { start, end, min, max, step, size, labels, rotate, ranges });
|
|
@@ -339,9 +230,9 @@ const useRange = (PROPS) => {
|
|
|
339
230
|
let [temp] = useState({ start: 0, index: false });
|
|
340
231
|
const [mainDom] = useState(createRef());
|
|
341
232
|
const [values, setValues] = useState([]);
|
|
342
|
-
const { vertical, reverse, start = 0, end = 100, min = start, max = end, step = 1, rotate = 0, round
|
|
233
|
+
const { vertical, reverse, start = 0, end = 100, min = start, max = end, step = 1, rotate = 0, round = 1, size = 72 } = props;
|
|
343
234
|
useEffect(() => {
|
|
344
|
-
if (!props.onChange
|
|
235
|
+
if (!props.onChange) {
|
|
345
236
|
return;
|
|
346
237
|
}
|
|
347
238
|
clearTimeout(temp.timeOut);
|
|
@@ -358,7 +249,7 @@ const useRange = (PROPS) => {
|
|
|
358
249
|
}
|
|
359
250
|
let { event } = p;
|
|
360
251
|
if (event.target !== null) {
|
|
361
|
-
let index = UT.GetAttr($(event.target), 'data-index');
|
|
252
|
+
let index = UT.GetAttr($(event.target), 'data-range-index');
|
|
362
253
|
temp.index = index === null ? false : +index;
|
|
363
254
|
temp.start = [...values];
|
|
364
255
|
}
|
|
@@ -381,12 +272,12 @@ const useRange = (PROPS) => {
|
|
|
381
272
|
}, 100);
|
|
382
273
|
}, [changeHandle]);
|
|
383
274
|
function click(mousePosition) {
|
|
384
|
-
if (props.disabled === true
|
|
275
|
+
if (props.disabled === true) {
|
|
385
276
|
return;
|
|
386
277
|
}
|
|
387
278
|
let clickedValue;
|
|
388
279
|
//vertical condition
|
|
389
|
-
if (
|
|
280
|
+
if (type === "spinner") {
|
|
390
281
|
clickedValue = getValueByAngle(mousePosition.centerAngle);
|
|
391
282
|
}
|
|
392
283
|
else {
|
|
@@ -409,23 +300,18 @@ const useRange = (PROPS) => {
|
|
|
409
300
|
let newValue = getChangedValue(obj);
|
|
410
301
|
changeValue(newValue);
|
|
411
302
|
}
|
|
412
|
-
function isValueDisabled(value) {
|
|
413
|
-
const { rangeOption = {} } = props;
|
|
414
|
-
const { disabled: d = () => false } = rangeOption;
|
|
415
|
-
return d(value);
|
|
416
|
-
}
|
|
417
303
|
function getChangedValue(obj) {
|
|
418
304
|
let { dx, dy, deltaCenterAngle, centerAngle } = obj;
|
|
419
305
|
let startValue = [...temp.start];
|
|
420
306
|
let index = temp.index;
|
|
421
307
|
//agar faghat yek point darim har koja mousedown shod farz kon rooye oon point mousedown karde im
|
|
422
|
-
if (startValue.length === 1 && index
|
|
308
|
+
if (startValue.length === 1 && index !== false) {
|
|
423
309
|
index = 0;
|
|
424
310
|
}
|
|
425
311
|
let res;
|
|
426
312
|
if (index === false) {
|
|
427
313
|
let deltaValue;
|
|
428
|
-
if (
|
|
314
|
+
if (type === "spinner") {
|
|
429
315
|
let v = deltaCenterAngle * (props.end - props.start) / 360;
|
|
430
316
|
v = Math.round(v / props.step) * props.step;
|
|
431
317
|
deltaValue = v;
|
|
@@ -433,13 +319,12 @@ const useRange = (PROPS) => {
|
|
|
433
319
|
else {
|
|
434
320
|
deltaValue = Math.round(getValueByXP(getXPByX(props.vertical ? dy : dx)) / props.step) * props.step;
|
|
435
321
|
}
|
|
436
|
-
|
|
437
|
-
res = !isValueValid(newValue) ? values : newValue;
|
|
322
|
+
res = moveAll(startValue, deltaValue, true);
|
|
438
323
|
}
|
|
439
324
|
else {
|
|
440
325
|
let { before, after } = getIndexLimit(index);
|
|
441
326
|
let newUnitValue;
|
|
442
|
-
if (
|
|
327
|
+
if (type === 'spinner') {
|
|
443
328
|
newUnitValue = Math.round(getValueByAngle(centerAngle) / props.step) * props.step;
|
|
444
329
|
}
|
|
445
330
|
else {
|
|
@@ -452,9 +337,6 @@ const useRange = (PROPS) => {
|
|
|
452
337
|
if (newUnitValue < before) {
|
|
453
338
|
newUnitValue = before;
|
|
454
339
|
}
|
|
455
|
-
if (isValueDisabled(newUnitValue)) {
|
|
456
|
-
newUnitValue = values[index];
|
|
457
|
-
}
|
|
458
340
|
startValue[index] = newUnitValue;
|
|
459
341
|
res = startValue;
|
|
460
342
|
}
|
|
@@ -462,12 +344,7 @@ const useRange = (PROPS) => {
|
|
|
462
344
|
}
|
|
463
345
|
function change1Unit(dir) {
|
|
464
346
|
let newValue = [...values];
|
|
465
|
-
let lastValue = JSON.stringify(newValue);
|
|
466
347
|
newValue = moveAll(newValue, dir * props.step);
|
|
467
|
-
while (!isValueValid(newValue) && JSON.stringify(newValue) !== lastValue) {
|
|
468
|
-
lastValue = JSON.stringify(newValue);
|
|
469
|
-
newValue = moveAll(newValue, dir * props.step);
|
|
470
|
-
}
|
|
471
348
|
changeValue(newValue);
|
|
472
349
|
}
|
|
473
350
|
function changeValue(newValue) {
|
|
@@ -477,14 +354,6 @@ const useRange = (PROPS) => {
|
|
|
477
354
|
newValue = getValues(newValue);
|
|
478
355
|
props.onChange(!!props.multiple ? newValue : newValue[0]);
|
|
479
356
|
}
|
|
480
|
-
function isValueValid(value) {
|
|
481
|
-
for (let i = 0; i < value.length; i++) {
|
|
482
|
-
if (isValueDisabled(value[i])) {
|
|
483
|
-
return false;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
return true;
|
|
487
|
-
}
|
|
488
357
|
function getIndexLimit(index) {
|
|
489
358
|
let before, after;
|
|
490
359
|
if (index === 0) {
|
|
@@ -508,6 +377,13 @@ const useRange = (PROPS) => {
|
|
|
508
377
|
}
|
|
509
378
|
return res;
|
|
510
379
|
}
|
|
380
|
+
const getFloatLength = (step) => {
|
|
381
|
+
const str = step.toString();
|
|
382
|
+
if (str.indexOf('.') === -1) {
|
|
383
|
+
return 0;
|
|
384
|
+
}
|
|
385
|
+
return str.split('.')[1].length;
|
|
386
|
+
};
|
|
511
387
|
function getValues(value) {
|
|
512
388
|
if (!Array.isArray(value)) {
|
|
513
389
|
value = [value || 0];
|
|
@@ -515,8 +391,12 @@ const useRange = (PROPS) => {
|
|
|
515
391
|
for (let i = 0; i < value.length; i++) {
|
|
516
392
|
let point = value[i] || 0;
|
|
517
393
|
point = Math.round((point - start) / step) * step + start;
|
|
518
|
-
|
|
519
|
-
|
|
394
|
+
try {
|
|
395
|
+
point = +point.toFixed(getFloatLength(step));
|
|
396
|
+
}
|
|
397
|
+
catch (err) {
|
|
398
|
+
console.error(err.message);
|
|
399
|
+
}
|
|
520
400
|
if (point < min) {
|
|
521
401
|
point = min;
|
|
522
402
|
}
|
|
@@ -534,7 +414,7 @@ const useRange = (PROPS) => {
|
|
|
534
414
|
return vertical ? (reverse ? 'bottom' : 'top') : (reverse ? 'right' : 'left');
|
|
535
415
|
}
|
|
536
416
|
function fixValueInEmpty(value) {
|
|
537
|
-
let fill = round
|
|
417
|
+
let fill = round;
|
|
538
418
|
let empty = 1 - fill;
|
|
539
419
|
let emptyValue = empty * (end - start) / fill;
|
|
540
420
|
if (value > end + emptyValue / 2) {
|
|
@@ -544,7 +424,7 @@ const useRange = (PROPS) => {
|
|
|
544
424
|
}
|
|
545
425
|
function fixAngle(angle) { angle = angle % 360; return angle < 0 ? angle = 360 + angle : angle; }
|
|
546
426
|
function getValueByAngle(angle) {
|
|
547
|
-
let fillAngle = 360 *
|
|
427
|
+
let fillAngle = 360 * round;
|
|
548
428
|
let emptyAngle = 360 - fillAngle;
|
|
549
429
|
if (reverse) {
|
|
550
430
|
angle = 180 - angle;
|
|
@@ -609,11 +489,119 @@ const useRange = (PROPS) => {
|
|
|
609
489
|
offset = sbp(offset);
|
|
610
490
|
return { thickness, radius, color, roundCap, full, className, from, to };
|
|
611
491
|
};
|
|
612
|
-
function
|
|
613
|
-
|
|
492
|
+
function handleZIndex(index) {
|
|
493
|
+
let containers = $(mainDom.current).find(`.ai-range-value-container`);
|
|
494
|
+
containers.css({ zIndex: 10 });
|
|
495
|
+
containers.eq(index).css({ zIndex: 100 });
|
|
496
|
+
}
|
|
497
|
+
function getOffset(rangeValue) {
|
|
498
|
+
const { pointOffset = (() => 0) } = props.rangeOption || {};
|
|
499
|
+
return pointOffset(rangeValue) || 0;
|
|
500
|
+
}
|
|
501
|
+
function getSliderPointContainerStyle(rangeValue) { return { [vertical ? 'left' : 'top']: getOffset(rangeValue) }; }
|
|
502
|
+
function getSpinnerPointContainerStyle(rangeValue) { return { left: size / 2 + getOffset(rangeValue), transform: `rotate(${-rangeValue.angle}deg)` }; }
|
|
503
|
+
function getSliderValueProps(rangeValue) { return { className: 'ai-range-value-container', draggable: false, style: { [getSide()]: getXPByValue(rangeValue.value) + '%' } }; }
|
|
504
|
+
function getSpinnerValueProps(rangeValue) {
|
|
505
|
+
return { className: 'ai-range-value-container', draggable: false, style: { transform: `rotate(${rangeValue.angle}deg)` } };
|
|
506
|
+
}
|
|
507
|
+
const getRangeValue = (itemValue, index) => {
|
|
508
|
+
let angle = fixAngle(getAngleByValue(itemValue));
|
|
509
|
+
return { value: itemValue, index, angle };
|
|
510
|
+
};
|
|
511
|
+
function getRootClassName(props, type) {
|
|
512
|
+
let c = 'ai-range';
|
|
513
|
+
if (type === "spinner") {
|
|
514
|
+
c += ` ai-spinner`;
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
c += props.vertical ? ` ai-slider-vertical` : ` ai-slider-horizontal`;
|
|
518
|
+
}
|
|
519
|
+
if (props.className) {
|
|
520
|
+
c += ' ' + props.className;
|
|
521
|
+
}
|
|
522
|
+
if (props.reverse) {
|
|
523
|
+
c += ` ai-${type === "spinner" ? 'spinner' : 'slider'}-reverse`;
|
|
524
|
+
}
|
|
525
|
+
return c;
|
|
526
|
+
}
|
|
527
|
+
function getRootStyle(props, type) {
|
|
528
|
+
let { style } = props;
|
|
529
|
+
let res;
|
|
530
|
+
if (type === "spinner") {
|
|
531
|
+
res = { width: props.size, height: props.size };
|
|
532
|
+
}
|
|
533
|
+
return Object.assign(Object.assign({}, res), style);
|
|
534
|
+
}
|
|
535
|
+
function getRootProps(props, type) {
|
|
536
|
+
let { attrs = {} } = props;
|
|
537
|
+
let rootStyle = getRootStyle(props, type);
|
|
538
|
+
return UT.AddToAttrs(attrs, { className: getRootClassName(props, type), style: rootStyle, attrs: { ref: mainDom } });
|
|
539
|
+
}
|
|
540
|
+
function getDistance(labelItem, type) {
|
|
541
|
+
let { offset = 0 } = labelItem;
|
|
542
|
+
let distance = { [type === "spinner" || vertical ? 'left' : 'top']: size * offset / 100 / 2 };
|
|
543
|
+
if (type === "spinner") {
|
|
544
|
+
distance.left = size * offset / 100 / 2;
|
|
545
|
+
}
|
|
546
|
+
else if (vertical) {
|
|
547
|
+
distance.left = `calc(50% + ${offset || 0}px)`;
|
|
548
|
+
}
|
|
549
|
+
else {
|
|
550
|
+
distance.top = `calc(50% + ${offset || 0}px)`;
|
|
551
|
+
}
|
|
552
|
+
return distance;
|
|
553
|
+
}
|
|
554
|
+
function getSliderLabel(labelItem, itemValue) {
|
|
555
|
+
let { html = '', config } = labelItem;
|
|
556
|
+
if (config) {
|
|
557
|
+
html = (_jsx("div", { style: {
|
|
558
|
+
[!vertical ? 'width' : 'height']: size * config.thickness / 100,
|
|
559
|
+
[!vertical ? 'height' : 'width']: size * config.height / 100,
|
|
560
|
+
background: config.color
|
|
561
|
+
} }));
|
|
562
|
+
}
|
|
563
|
+
const htmlProps = UT.AddToAttrs({}, { className: ['ai-range-label'], attrs: { draggable: false } });
|
|
564
|
+
const containerStyle = Object.assign({ [getSide()]: getXPByValue(itemValue) + '%' }, getDistance(labelItem, 'slider'));
|
|
565
|
+
const containerProps = { className: 'ai-range-label-container', style: containerStyle, draggable: false };
|
|
566
|
+
return (_jsx("div", Object.assign({}, containerProps, { children: _jsx("div", Object.assign({}, htmlProps, { children: html })) })));
|
|
567
|
+
}
|
|
568
|
+
function getLabelList(label) {
|
|
569
|
+
let { step, list = [] } = label;
|
|
570
|
+
let res = [];
|
|
571
|
+
if (step) {
|
|
572
|
+
let { start: lstart = start, end: lend = end } = label;
|
|
573
|
+
for (let i = lstart; i <= lend; i += step) {
|
|
574
|
+
res.push(i);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
for (let i = 0; i < list.length; i++) {
|
|
578
|
+
if (res.indexOf(list[i]) === -1) {
|
|
579
|
+
res.push(list[i]);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return res;
|
|
583
|
+
}
|
|
584
|
+
function getSpinnerLabel(labelItem, itemValue) {
|
|
585
|
+
let { html = '', config } = labelItem;
|
|
586
|
+
if (config) {
|
|
587
|
+
html = (_jsx("div", { style: {
|
|
588
|
+
height: size * config.thickness / 100,
|
|
589
|
+
width: size * config.height / 100,
|
|
590
|
+
background: config.color
|
|
591
|
+
} }));
|
|
592
|
+
}
|
|
593
|
+
let angle = fixAngle(getAngleByValue(itemValue)) || 0;
|
|
594
|
+
let containerStyle = { transform: `rotate(${angle}deg)` };
|
|
595
|
+
let containerProps = { className: 'ai-range-label-container', style: containerStyle, draggable: false };
|
|
596
|
+
const distance = getDistance(labelItem, "spinner");
|
|
597
|
+
let textStyle = Object.assign(Object.assign({}, distance), { transform: labelItem.fixAngle ? `rotate(${-angle}deg)` : undefined });
|
|
598
|
+
const htmlProps = UT.AddToAttrs({}, { className: ['ai-range-label'], style: textStyle, attrs: { draggable: false } });
|
|
599
|
+
return (_jsx("div", Object.assign({}, containerProps, { children: _jsx("div", Object.assign({}, htmlProps, { children: html })) })));
|
|
614
600
|
}
|
|
615
601
|
return {
|
|
616
|
-
values, getValues, getSide, fixAngle, getValueByAngle, mainDom,
|
|
617
|
-
getArc, getAngleByValue, getRectByStr, sbp, getXPByValue, getValueByXP, getXPByX,
|
|
602
|
+
values, getValues, getSide, fixAngle, getValueByAngle, mainDom, rootProps: props, getRootProps, getLabelList,
|
|
603
|
+
getArc, getAngleByValue, getRectByStr, sbp, getXPByValue, getValueByXP, getXPByX, handleZIndex, getSpinnerLabel,
|
|
604
|
+
getSliderPointContainerStyle, getSpinnerPointContainerStyle, getSliderValueProps, getSpinnerValueProps, getRangeValue,
|
|
605
|
+
getSliderLabel
|
|
618
606
|
};
|
|
619
607
|
};
|