@touchvue/ui 1.0.0-beta.54 → 1.0.0-beta.56
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/es/components/input/src/input.vue.d.ts +2 -2
- package/es/components/pic/index.d.ts +9 -0
- package/es/components/pic/src/Pic.vue.d.ts +9 -0
- package/es/components/pic/src/pic.d.ts +7 -0
- package/es/components/rate/src/rate.vue.d.ts +46 -10
- package/es/components/scroll/index.d.ts +15 -0
- package/es/components/scroll/src/Scroll.vue.d.ts +9 -0
- package/es/components/scroll/src/scroll.d.ts +7 -0
- package/es/components/select/src/select.d.ts +18 -0
- package/es/components/select/src/select.vue.d.ts +18 -0
- package/es/components/table/src/table-head.vue.d.ts +2 -0
- package/es/components/tip/src/tip.vue.d.ts +2 -2
- package/es/components/upload/src/upload.vue.d.ts +6 -4
- package/es/index.d.mjs.map +1 -1
- package/es/index.mjs +2 -1
- package/es/index.mjs.map +1 -1
- package/es/packages/components/calendar/src/calendar.vue2.mjs +22 -0
- package/es/packages/components/calendar/src/calendar.vue2.mjs.map +1 -1
- package/es/packages/components/cascader/src/cascader-item.vue2.mjs +1 -0
- package/es/packages/components/cascader/src/cascader-item.vue2.mjs.map +1 -1
- package/es/packages/components/cascader/src/cascader.vue2.mjs +1 -0
- package/es/packages/components/cascader/src/cascader.vue2.mjs.map +1 -1
- package/es/packages/components/float/src/Float.vue2.mjs +4 -4
- package/es/packages/components/float/src/Float.vue2.mjs.map +1 -1
- package/es/packages/components/pic/src/Pic.vue2.mjs +18 -2
- package/es/packages/components/pic/src/Pic.vue2.mjs.map +1 -1
- package/es/packages/components/pic/src/pic.mjs +7 -0
- package/es/packages/components/pic/src/pic.mjs.map +1 -1
- package/es/packages/components/rate/src/rate.vue2.mjs +153 -85
- package/es/packages/components/rate/src/rate.vue2.mjs.map +1 -1
- package/es/packages/components/scroll/src/Scroll.vue2.mjs +3 -0
- package/es/packages/components/scroll/src/Scroll.vue2.mjs.map +1 -1
- package/es/packages/components/scroll/src/scroll.mjs +7 -0
- package/es/packages/components/scroll/src/scroll.mjs.map +1 -1
- package/es/packages/components/segment/src/segment.vue.mjs +10 -12
- package/es/packages/components/segment/src/segment.vue.mjs.map +1 -1
- package/es/packages/components/select/src/select.mjs +18 -0
- package/es/packages/components/select/src/select.mjs.map +1 -1
- package/es/packages/components/select/src/select.vue2.mjs +263 -87
- package/es/packages/components/select/src/select.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/table-head.vue2.mjs +101 -45
- package/es/packages/components/table/src/table-head.vue2.mjs.map +1 -1
- package/es/packages/components/table/src/table.vue2.mjs +244 -62
- package/es/packages/components/table/src/table.vue2.mjs.map +1 -1
- package/es/packages/components/tree/src/tree-item.vue2.mjs +2 -1
- package/es/packages/components/tree/src/tree-item.vue2.mjs.map +1 -1
- package/es/packages/components/upload/src/upload.vue2.mjs +203 -153
- package/es/packages/components/upload/src/upload.vue2.mjs.map +1 -1
- package/es/packages/directives/tip/src/tip.mjs +42 -27
- package/es/packages/directives/tip/src/tip.mjs.map +1 -1
- package/es/packages/locale/format.mjs +1 -1
- package/es/packages/locale/format.mjs.map +1 -1
- package/es/ui/index.d.ts +6 -0
- package/lib/components/input/src/input.vue.d.ts +2 -2
- package/lib/components/pic/index.d.ts +9 -0
- package/lib/components/pic/src/Pic.vue.d.ts +9 -0
- package/lib/components/pic/src/pic.d.ts +7 -0
- package/lib/components/rate/src/rate.vue.d.ts +46 -10
- package/lib/components/scroll/index.d.ts +15 -0
- package/lib/components/scroll/src/Scroll.vue.d.ts +9 -0
- package/lib/components/scroll/src/scroll.d.ts +7 -0
- package/lib/components/select/src/select.d.ts +18 -0
- package/lib/components/select/src/select.vue.d.ts +18 -0
- package/lib/components/table/src/table-head.vue.d.ts +2 -0
- package/lib/components/tip/src/tip.vue.d.ts +2 -2
- package/lib/components/upload/src/upload.vue.d.ts +6 -4
- package/lib/index.d.js.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/packages/components/calendar/src/calendar.vue2.js +22 -0
- package/lib/packages/components/calendar/src/calendar.vue2.js.map +1 -1
- package/lib/packages/components/cascader/src/cascader-item.vue2.js +1 -0
- package/lib/packages/components/cascader/src/cascader-item.vue2.js.map +1 -1
- package/lib/packages/components/cascader/src/cascader.vue2.js +1 -0
- package/lib/packages/components/cascader/src/cascader.vue2.js.map +1 -1
- package/lib/packages/components/float/src/Float.vue2.js +4 -4
- package/lib/packages/components/float/src/Float.vue2.js.map +1 -1
- package/lib/packages/components/pic/src/Pic.vue2.js +17 -1
- package/lib/packages/components/pic/src/Pic.vue2.js.map +1 -1
- package/lib/packages/components/pic/src/pic.js +7 -0
- package/lib/packages/components/pic/src/pic.js.map +1 -1
- package/lib/packages/components/rate/src/rate.vue2.js +152 -84
- package/lib/packages/components/rate/src/rate.vue2.js.map +1 -1
- package/lib/packages/components/scroll/src/Scroll.vue2.js +3 -0
- package/lib/packages/components/scroll/src/Scroll.vue2.js.map +1 -1
- package/lib/packages/components/scroll/src/scroll.js +7 -0
- package/lib/packages/components/scroll/src/scroll.js.map +1 -1
- package/lib/packages/components/segment/src/segment.vue.js +10 -12
- package/lib/packages/components/segment/src/segment.vue.js.map +1 -1
- package/lib/packages/components/select/src/select.js +18 -0
- package/lib/packages/components/select/src/select.js.map +1 -1
- package/lib/packages/components/select/src/select.vue2.js +262 -86
- package/lib/packages/components/select/src/select.vue2.js.map +1 -1
- package/lib/packages/components/table/src/table-head.vue2.js +100 -44
- package/lib/packages/components/table/src/table-head.vue2.js.map +1 -1
- package/lib/packages/components/table/src/table.vue2.js +243 -61
- package/lib/packages/components/table/src/table.vue2.js.map +1 -1
- package/lib/packages/components/tree/src/tree-item.vue2.js +2 -1
- package/lib/packages/components/tree/src/tree-item.vue2.js.map +1 -1
- package/lib/packages/components/upload/src/upload.vue2.js +202 -152
- package/lib/packages/components/upload/src/upload.vue2.js.map +1 -1
- package/lib/packages/directives/tip/src/tip.js +41 -26
- package/lib/packages/directives/tip/src/tip.js.map +1 -1
- package/lib/packages/locale/format.js +1 -1
- package/lib/packages/locale/format.js.map +1 -1
- package/lib/ui/index.d.ts +6 -0
- package/package.json +1 -1
- package/theme/base.css +0 -3
- package/theme/components/index.css +445 -255
- package/theme/index.css +445 -255
- package/theme/skin/default.css +445 -255
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { defineComponent, ref, computed, watch,
|
|
1
|
+
import { defineComponent, ref, computed, watch, openBlock, createElementBlock, normalizeClass, createElementVNode, Fragment, renderList, createVNode, unref, toDisplayString, createCommentVNode } from 'vue';
|
|
2
|
+
import { ToIcon } from '../../icon/index.mjs';
|
|
2
3
|
|
|
3
4
|
const __default__ = defineComponent({
|
|
4
5
|
name: "ToRate"
|
|
@@ -14,14 +15,22 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
14
15
|
type: Number,
|
|
15
16
|
default: 5
|
|
16
17
|
},
|
|
18
|
+
count: {
|
|
19
|
+
type: Number,
|
|
20
|
+
default: 5
|
|
21
|
+
},
|
|
17
22
|
size: {
|
|
18
23
|
type: Number,
|
|
19
24
|
default: 2
|
|
20
25
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
type:
|
|
24
|
-
default:
|
|
26
|
+
disabled: Boolean,
|
|
27
|
+
step: {
|
|
28
|
+
type: [Number, String],
|
|
29
|
+
default: 1
|
|
30
|
+
},
|
|
31
|
+
dot: {
|
|
32
|
+
type: [Number, String],
|
|
33
|
+
default: "auto"
|
|
25
34
|
},
|
|
26
35
|
color: {
|
|
27
36
|
type: String,
|
|
@@ -34,117 +43,176 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
34
43
|
clearable: {
|
|
35
44
|
type: Boolean,
|
|
36
45
|
default: false
|
|
46
|
+
},
|
|
47
|
+
icon: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: "star"
|
|
50
|
+
},
|
|
51
|
+
mode: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: ""
|
|
37
54
|
}
|
|
38
55
|
},
|
|
39
56
|
emits: ["update:modelValue", "change"],
|
|
40
57
|
setup(__props, { emit: __emit }) {
|
|
41
58
|
const props = __props;
|
|
42
59
|
const emit = __emit;
|
|
43
|
-
const ivalue = ref(
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
const ivalue = ref(0);
|
|
61
|
+
const hoverValue = ref(0);
|
|
62
|
+
const normalizedCount = computed(() => Math.max(1, Math.floor(Number(props.count) || 1)));
|
|
63
|
+
const normalizedMax = computed(() => Math.max(0, Number(props.max) || 0));
|
|
64
|
+
const scoreUnit = computed(() => normalizedMax.value / normalizedCount.value);
|
|
65
|
+
const normalizedStep = computed(() => Number(props.step) === 0.5 ? 0.5 : 1);
|
|
66
|
+
const isHalf = computed(() => normalizedStep.value === 0.5);
|
|
67
|
+
const normalizedDot = computed(() => {
|
|
68
|
+
if (props.dot === "auto")
|
|
69
|
+
return isHalf.value ? 1 : 0;
|
|
70
|
+
const dot = Number(props.dot);
|
|
71
|
+
if (!Number.isFinite(dot))
|
|
72
|
+
return 0;
|
|
73
|
+
return Math.max(0, Math.floor(dot));
|
|
74
|
+
});
|
|
75
|
+
const activeValue = computed(() => {
|
|
76
|
+
if (!props.disabled && hoverValue.value > 0) {
|
|
77
|
+
return hoverValue.value;
|
|
51
78
|
}
|
|
52
79
|
return ivalue.value;
|
|
53
80
|
});
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return obj;
|
|
81
|
+
const activeRateValue = computed(() => {
|
|
82
|
+
if (!scoreUnit.value)
|
|
83
|
+
return 0;
|
|
84
|
+
const rateValue = activeValue.value / scoreUnit.value;
|
|
85
|
+
return Math.round(rateValue / normalizedStep.value) * normalizedStep.value;
|
|
60
86
|
});
|
|
87
|
+
const displayValue = computed(() => activeValue.value.toFixed(normalizedDot.value));
|
|
61
88
|
watch(
|
|
62
|
-
() => props.modelValue,
|
|
63
|
-
(
|
|
64
|
-
ivalue.value =
|
|
89
|
+
() => [props.modelValue, props.max, props.count, props.step, props.dot],
|
|
90
|
+
() => {
|
|
91
|
+
ivalue.value = normalizeModelValue(props.modelValue);
|
|
65
92
|
},
|
|
66
93
|
{ immediate: true }
|
|
67
94
|
);
|
|
95
|
+
function normalizeModelValue(value) {
|
|
96
|
+
const num = Number(value);
|
|
97
|
+
if (!Number.isFinite(num))
|
|
98
|
+
return 0;
|
|
99
|
+
return formatValue(Math.min(Math.max(num, 0), normalizedMax.value));
|
|
100
|
+
}
|
|
101
|
+
function normalizeStepValue(value) {
|
|
102
|
+
const limited = normalizeModelValue(value);
|
|
103
|
+
if (!scoreUnit.value)
|
|
104
|
+
return 0;
|
|
105
|
+
const rateValue = limited / scoreUnit.value;
|
|
106
|
+
const steppedValue = Math.round(rateValue / normalizedStep.value) * normalizedStep.value;
|
|
107
|
+
return formatValue(steppedValue * scoreUnit.value);
|
|
108
|
+
}
|
|
109
|
+
function formatValue(value) {
|
|
110
|
+
return Number(value.toFixed(normalizedDot.value));
|
|
111
|
+
}
|
|
112
|
+
function getItemClass(i) {
|
|
113
|
+
const value = activeRateValue.value;
|
|
114
|
+
return {
|
|
115
|
+
"is-on": i <= value,
|
|
116
|
+
"is-half-on": isHalf.value && Math.abs(i - 0.5 - value) < 1e-7,
|
|
117
|
+
"is-hover": !props.disabled && hoverValue.value > 0 && i <= Math.ceil(value)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function getValueByEvent(i, event) {
|
|
121
|
+
if (!isHalf.value)
|
|
122
|
+
return i * scoreUnit.value;
|
|
123
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
124
|
+
const x = event.clientX - rect.left;
|
|
125
|
+
return (x < rect.width / 2 ? i - 0.5 : i) * scoreUnit.value;
|
|
126
|
+
}
|
|
127
|
+
function updateValue(value) {
|
|
128
|
+
const normalizedValue = normalizeStepValue(value);
|
|
129
|
+
ivalue.value = normalizedValue;
|
|
130
|
+
emit("update:modelValue", normalizedValue);
|
|
131
|
+
emit("change", normalizedValue);
|
|
132
|
+
}
|
|
68
133
|
function handleClick(i, event) {
|
|
69
|
-
if (
|
|
134
|
+
if (props.disabled)
|
|
70
135
|
return;
|
|
71
|
-
let value = i;
|
|
72
|
-
if (props.allowHalf) {
|
|
73
|
-
const rect = event.currentTarget.getBoundingClientRect();
|
|
74
|
-
const x = event.clientX - rect.left;
|
|
75
|
-
value = x < rect.width / 2 ? i - 0.5 : i;
|
|
76
|
-
}
|
|
136
|
+
let value = getValueByEvent(i, event);
|
|
77
137
|
if (props.clearable && ivalue.value === value) {
|
|
78
138
|
value = 0;
|
|
79
139
|
}
|
|
80
|
-
|
|
81
|
-
emit("update:modelValue", value);
|
|
82
|
-
emit("change", value);
|
|
140
|
+
updateValue(value);
|
|
83
141
|
}
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
142
|
+
function handleMouseMove(i, event) {
|
|
143
|
+
if (props.disabled)
|
|
144
|
+
return;
|
|
145
|
+
hoverValue.value = getValueByEvent(i, event);
|
|
146
|
+
}
|
|
147
|
+
function handleMouseEnter(i) {
|
|
148
|
+
if (props.disabled || isHalf.value)
|
|
149
|
+
return;
|
|
150
|
+
hoverValue.value = i * scoreUnit.value;
|
|
89
151
|
}
|
|
90
152
|
function handleMouseLeave() {
|
|
91
|
-
if (!
|
|
92
|
-
|
|
93
|
-
hoverHalf.value = false;
|
|
153
|
+
if (!props.disabled) {
|
|
154
|
+
hoverValue.value = 0;
|
|
94
155
|
}
|
|
95
156
|
}
|
|
96
157
|
return (_ctx, _cache) => {
|
|
97
|
-
|
|
98
|
-
return withDirectives((openBlock(), createElementBlock(
|
|
158
|
+
return openBlock(), createElementBlock(
|
|
99
159
|
"div",
|
|
100
160
|
{
|
|
101
|
-
class: normalizeClass(["to-rate", [
|
|
102
|
-
|
|
161
|
+
class: normalizeClass(["to-rate", [
|
|
162
|
+
`color-${__props.color}`,
|
|
163
|
+
`mode-${__props.mode}`,
|
|
164
|
+
{
|
|
165
|
+
"is-half": isHalf.value,
|
|
166
|
+
"is-disabled": __props.disabled
|
|
167
|
+
}
|
|
168
|
+
]]),
|
|
103
169
|
onMouseleave: handleMouseLeave
|
|
104
170
|
},
|
|
105
171
|
[
|
|
106
|
-
(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
172
|
+
createElementVNode("div", { class: "to-rate-group" }, [
|
|
173
|
+
(openBlock(true), createElementBlock(
|
|
174
|
+
Fragment,
|
|
175
|
+
null,
|
|
176
|
+
renderList(normalizedCount.value, (i) => {
|
|
177
|
+
return openBlock(), createElementBlock("div", {
|
|
178
|
+
key: i,
|
|
179
|
+
class: normalizeClass(["to-rate-item", getItemClass(i)]),
|
|
180
|
+
onClick: ($event) => handleClick(i, $event),
|
|
181
|
+
onMousemove: ($event) => handleMouseMove(i, $event),
|
|
182
|
+
onMouseenter: ($event) => handleMouseEnter(i)
|
|
183
|
+
}, [
|
|
184
|
+
createVNode(unref(ToIcon), {
|
|
185
|
+
class: "to-rate-icon is-off",
|
|
186
|
+
type: "fill",
|
|
187
|
+
value: __props.icon
|
|
188
|
+
}, null, 8, ["value"]),
|
|
189
|
+
createVNode(unref(ToIcon), {
|
|
190
|
+
class: "to-rate-icon is-on",
|
|
191
|
+
type: "fill",
|
|
192
|
+
value: __props.icon
|
|
193
|
+
}, null, 8, ["value"])
|
|
194
|
+
], 42, ["onClick", "onMousemove", "onMouseenter"]);
|
|
195
|
+
}),
|
|
196
|
+
128
|
|
197
|
+
/* KEYED_FRAGMENT */
|
|
198
|
+
))
|
|
199
|
+
]),
|
|
200
|
+
__props.showScore ? (openBlock(), createElementBlock("div", {
|
|
201
|
+
key: 0,
|
|
202
|
+
class: "to-rate-score"
|
|
203
|
+
}, [
|
|
204
|
+
createElementVNode(
|
|
205
|
+
"span",
|
|
206
|
+
{ class: "to-rate-score-text" },
|
|
207
|
+
toDisplayString(displayValue.value),
|
|
208
|
+
1
|
|
209
|
+
/* TEXT */
|
|
210
|
+
)
|
|
211
|
+
])) : createCommentVNode("v-if", true)
|
|
137
212
|
],
|
|
138
|
-
|
|
139
|
-
/* CLASS,
|
|
140
|
-
)
|
|
141
|
-
[
|
|
142
|
-
_directive_dis,
|
|
143
|
-
disabled.value,
|
|
144
|
-
void 0,
|
|
145
|
-
{ opacity: true }
|
|
146
|
-
]
|
|
147
|
-
]);
|
|
213
|
+
34
|
|
214
|
+
/* CLASS, NEED_HYDRATION */
|
|
215
|
+
);
|
|
148
216
|
};
|
|
149
217
|
}
|
|
150
218
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate.vue2.mjs","sources":["../../../../../../packages/components/rate/src/rate.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToRate'\n});\n</script>\n<template>\n\t<div v-dis.opacity=\"disabled\" class=\"to-rate\" :class=\"[`color-${color}`, { 'is-half': allowHalf, 'is-readonly': isReadonly }]\" :style=\"setStyle\" @mouseleave=\"handleMouseLeave\">\n\t\t<div\n\t\t\tv-for=\"i in max\"\n\t\t\t:key=\"i\"\n\t\t\tclass=\"to-rate-item\"\n\t\t\t:class=\"{\n\t\t\t\t'is-on': i <= ivalue,\n\t\t\t\t'is-half-on': allowHalf && i - 0.5 <= ivalue && i > ivalue,\n\t\t\t\t'is-hover': !isReadonly && i <= hoverIndex && !hoverHalf\n\t\t\t}\"\n\t\t\t@click=\"handleClick(i, $event)\"\n\t\t\t@mousemove=\"allowHalf && !isReadonly ? handleHalfMove(i, $event) : undefined\"\n\t\t\t@mouseenter=\"!isReadonly ? (hoverIndex = i) : undefined\"\n\t\t>\n\t\t\t<span class=\"to-rate-item-star\"></span>\n\t\t</div>\n\t\t<div v-if=\"showScore\" class=\"to-rate-score\">{{ displayValue }}</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { CSSProperties, computed, ref, watch } from 'vue'\n\n\n\nconst props = defineProps({\n\tmodelValue: {\n\t\ttype: Number,\n\t\tdefault: 0\n\t},\n\tmax: {\n\t\ttype: Number,\n\t\tdefault: 5\n\t},\n\tsize: {\n\t\ttype: Number,\n\t\tdefault: 2\n\t},\n\treadonly: Boolean,\n\tallowHalf: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\tcolor: {\n\t\ttype: String,\n\t\tdefault: 'primary'\n\t},\n\tshowScore: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\tclearable: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t}\n})\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\nconst ivalue = ref(props.modelValue)\nconst hoverIndex = ref(0)\nconst hoverHalf = ref(false)\n\nconst isReadonly = computed(() => props.readonly)\nconst disabled = computed(() => props.readonly)\n\nconst displayValue = computed(() => {\n\tif (!isReadonly.value && hoverIndex.value > 0) {\n\t\treturn hoverHalf.value ? hoverIndex.value - 0.5 : hoverIndex.value\n\t}\n\treturn ivalue.value\n})\n\nconst setStyle = computed(() => {\n\tconst obj: CSSProperties = {}\n\tif (props.size) {\n\t\tobj['--size'] = props.size + 'em'\n\t}\n\treturn obj\n})\n\nwatch(\n\t() => props.modelValue,\n\tval => {\n\t\tivalue.value = val\n\t},\n\t{ immediate: true }\n)\n\nfunction handleClick(i: number, event: MouseEvent) {\n\tif (isReadonly.value) return\n\tlet value: number = i\n\tif (props.allowHalf) {\n\t\tconst rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n\t\tconst x = event.clientX - rect.left\n\t\tvalue = x < rect.width / 2 ? i - 0.5 : i\n\t}\n\tif (props.clearable && ivalue.value === value) {\n\t\tvalue = 0\n\t}\n\tivalue.value = value\n\temit('update:modelValue', value)\n\temit('change', value)\n}\n\nfunction handleHalfMove(i: number, event: MouseEvent) {\n\tconst rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n\tconst x = event.clientX - rect.left\n\thoverIndex.value = i\n\thoverHalf.value = x < rect.width / 2\n}\n\nfunction handleMouseLeave() {\n\tif (!isReadonly.value) {\n\t\thoverIndex.value = 0\n\t\thoverHalf.value = false\n\t}\n}\n</script>\n"],"names":["DO_defineComponent","_createElementBlock","_Fragment","_renderList","_createElementVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rate.vue2.mjs","sources":["../../../../../../packages/components/rate/src/rate.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToRate'\n});\n</script>\n<template>\n\t<div\n\t\tclass=\"to-rate\"\n\t\t:class=\"[\n\t\t\t`color-${color}`,\n\t\t\t`mode-${mode}`,\n\t\t\t{\n\t\t\t\t'is-half': isHalf,\n\t\t\t\t'is-disabled': disabled\n\t\t\t}\n\t\t]\"\n\t\t@mouseleave=\"handleMouseLeave\"\n\t>\n\t\t<div class=\"to-rate-group\">\n\t\t\t<div v-for=\"i in normalizedCount\" :key=\"i\" class=\"to-rate-item\" :class=\"getItemClass(i)\" @click=\"handleClick(i, $event)\" @mousemove=\"handleMouseMove(i, $event)\" @mouseenter=\"handleMouseEnter(i)\">\n\t\t\t\t<to-icon class=\"to-rate-icon is-off\" type=\"fill\" :value=\"icon\" />\n\t\t\t\t<to-icon class=\"to-rate-icon is-on\" type=\"fill\" :value=\"icon\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showScore\" class=\"to-rate-score\">\n\t\t\t<span class=\"to-rate-score-text\">{{ displayValue }}</span>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { ToIcon } from '../../icon'\n\n\n\nconst props = defineProps({\n\tmodelValue: {\n\t\ttype: Number,\n\t\tdefault: 0\n\t},\n\tmax: {\n\t\ttype: Number,\n\t\tdefault: 5\n\t},\n\tcount: {\n\t\ttype: Number,\n\t\tdefault: 5\n\t},\n\tsize: {\n\t\ttype: Number,\n\t\tdefault: 2\n\t},\n\tdisabled: Boolean,\n\tstep: {\n\t\ttype: [Number, String],\n\t\tdefault: 1\n\t},\n\tdot: {\n\t\ttype: [Number, String],\n\t\tdefault: 'auto'\n\t},\n\tcolor: {\n\t\ttype: String,\n\t\tdefault: 'primary'\n\t},\n\tshowScore: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\tclearable: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\ticon: {\n\t\ttype: String,\n\t\tdefault: 'star'\n\t},\n\tmode: {\n\t\ttype: String,\n\t\tdefault: ''\n\t}\n})\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\nconst ivalue = ref(0)\nconst hoverValue = ref(0)\n\nconst normalizedCount = computed(() => Math.max(1, Math.floor(Number(props.count) || 1)))\nconst normalizedMax = computed(() => Math.max(0, Number(props.max) || 0))\nconst scoreUnit = computed(() => normalizedMax.value / normalizedCount.value)\nconst normalizedStep = computed(() => (Number(props.step) === 0.5 ? 0.5 : 1))\nconst isHalf = computed(() => normalizedStep.value === 0.5)\nconst normalizedDot = computed(() => {\n\tif (props.dot === 'auto') return isHalf.value ? 1 : 0\n\tconst dot = Number(props.dot)\n\tif (!Number.isFinite(dot)) return 0\n\treturn Math.max(0, Math.floor(dot))\n})\n\nconst activeValue = computed(() => {\n\tif (!props.disabled && hoverValue.value > 0) {\n\t\treturn hoverValue.value\n\t}\n\treturn ivalue.value\n})\n\nconst activeRateValue = computed(() => {\n\tif (!scoreUnit.value) return 0\n\tconst rateValue = activeValue.value / scoreUnit.value\n\treturn Math.round(rateValue / normalizedStep.value) * normalizedStep.value\n})\n\nconst displayValue = computed(() => activeValue.value.toFixed(normalizedDot.value))\n\nwatch(\n\t() => [props.modelValue, props.max, props.count, props.step, props.dot] as const,\n\t() => {\n\t\tivalue.value = normalizeModelValue(props.modelValue)\n\t},\n\t{ immediate: true }\n)\n\nfunction normalizeModelValue(value: number) {\n\tconst num = Number(value)\n\tif (!Number.isFinite(num)) return 0\n\treturn formatValue(Math.min(Math.max(num, 0), normalizedMax.value))\n}\n\nfunction normalizeStepValue(value: number) {\n\tconst limited = normalizeModelValue(value)\n\tif (!scoreUnit.value) return 0\n\tconst rateValue = limited / scoreUnit.value\n\tconst steppedValue = Math.round(rateValue / normalizedStep.value) * normalizedStep.value\n\treturn formatValue(steppedValue * scoreUnit.value)\n}\n\nfunction formatValue(value: number) {\n\treturn Number(value.toFixed(normalizedDot.value))\n}\n\nfunction getItemClass(i: number) {\n\tconst value = activeRateValue.value\n\treturn {\n\t\t'is-on': i <= value,\n\t\t'is-half-on': isHalf.value && Math.abs(i - 0.5 - value) < 0.0000001,\n\t\t'is-hover': !props.disabled && hoverValue.value > 0 && i <= Math.ceil(value)\n\t}\n}\n\nfunction getValueByEvent(i: number, event: MouseEvent) {\n\tif (!isHalf.value) return i * scoreUnit.value\n\tconst rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n\tconst x = event.clientX - rect.left\n\treturn (x < rect.width / 2 ? i - 0.5 : i) * scoreUnit.value\n}\n\nfunction updateValue(value: number) {\n\tconst normalizedValue = normalizeStepValue(value)\n\tivalue.value = normalizedValue\n\temit('update:modelValue', normalizedValue)\n\temit('change', normalizedValue)\n}\n\nfunction handleClick(i: number, event: MouseEvent) {\n\tif (props.disabled) return\n\tlet value = getValueByEvent(i, event)\n\tif (props.clearable && ivalue.value === value) {\n\t\tvalue = 0\n\t}\n\tupdateValue(value)\n}\n\nfunction handleMouseMove(i: number, event: MouseEvent) {\n\tif (props.disabled) return\n\thoverValue.value = getValueByEvent(i, event)\n}\n\nfunction handleMouseEnter(i: number) {\n\tif (props.disabled || isHalf.value) return\n\thoverValue.value = i * scoreUnit.value\n}\n\nfunction handleMouseLeave() {\n\tif (!props.disabled) {\n\t\thoverValue.value = 0\n\t}\n}\n</script>\n"],"names":["DO_defineComponent","_createElementBlock","_createElementVNode","_Fragment","_renderList","_normalizeClass","_createVNode","_unref"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scroll.vue2.mjs","sources":["../../../../../../packages/components/scroll/src/Scroll.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToScroll'\n});\n</script>\n<template>\n\t<div class=\"to-scroll\" :flex=\"flex ? flex : null\" :class=\"setClass\" :style=\"setStyle\">\n\t\t<!-- 自定义滚动条 -->\n\t\t<div v-if=\"props.virtual\" class=\"to-scroll-bar\" :class=\"[barVisibleClass, { active: isScrolling || isHovering }]\">\n\t\t\t<div ref=\"barThumb\" class=\"to-scroll-thumb\" :style=\"thumbStyle\" @mousedown=\"onThumbMousedown\"></div>\n\t\t</div>\n\n\t\t<!-- 横向滚动条 -->\n\t\t<div v-if=\"props.virtual && hasHorizontalScroll\" class=\"to-scroll-bar horizontal\" :class=\"[barVisibleClass, { active: isScrolling || isHovering }]\">\n\t\t\t<div ref=\"horizontalBarThumb\" class=\"to-scroll-thumb\" :style=\"horizontalThumbStyle\" @mousedown=\"onHorizontalThumbMousedown\"></div>\n\t\t</div>\n\n\t\t<!-- 滚动内容区域 -->\n\t\t<div ref=\"scrollRef\" class=\"to-scroll-content\" :style=\"setContentStyle\" :class=\"{ 'virtual-scroll': props.virtual }\" @scroll=\"handleScroll\">\n\t\t\t<!-- 默认内容插槽 -->\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted, provide } from 'vue'\nimport { scrollProps, ScrollContext } from './scroll'\n\n\n\nconst props = defineProps(scrollProps)\nconst emit = defineEmits<{\n\t(e: 'scroll', event: Event): void\n\t(e: 'scrollEnd'): void\n\t(e: 'change', position: number): void\n\t(e: 'update:value', position: number | string): void\n\t(e: 'update:modelValue', position: number | string): void\n\t(e: 'bottom'): void\n\t(e: 'top'): void\n}>()\n\nconst scrollRef = ref<HTMLElement | null>(null)\nconst barThumb = ref<HTMLElement | null>(null)\nconst horizontalBarThumb = ref<HTMLElement | null>(null)\nconst isScrolling = ref(false)\nconst isHovering = ref(false)\n// 添加一个标志来标识是否由tab点击导致的滚动\nlet isTabTriggeredScroll = false\n// 添加自动滚动的节流控制\nlet autoScrollThrottleTimer: ReturnType<typeof setTimeout> | null = null\n// 滚动防抖定时器\nlet scrollUpdateTimer: ReturnType<typeof setTimeout> | null = null\nlet isDragging = ref(false)\nlet isHorizontalDragging = ref(false)\nlet startY = 0\nlet startX = 0\nlet startScrollTop = 0\nlet startScrollLeft = 0\nconst hasHorizontalScroll = ref(false)\n// 存储滚动点信息\nconst scrollPoints = ref<Array<{ value: string | number; start: number; end: number }>>([])\n// 获取当前绑定值(优先使用modelValue,兼容value)\nconst bindValue = computed(() => props.modelValue || props.value)\n// 当前选中的滚动点值\nconst currentPointValue = ref<string | number | null>(bindValue.value || null)\n\nlet scrollEventDebounceTimer: ReturnType<typeof setTimeout> | null = null\n// 提供给子组件的上下文\nprovide<ScrollContext>('ToScroll', {\n\tregisterScrollPoint: (_el: HTMLElement, _value: string | number) => {\n\t\t// 在下一个渲染周期更新滚动点\n\t\tnextTick(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\t}\n})\n\n// 提供当前值给子组件\nprovide('scrollValue', currentPointValue)\n\n// 计算属性\nconst barVisibleClass = computed(() => {\n\treturn `bar-${String(props.barDisplay)}`\n})\n\n// 检查是否需要横向滚动条\nconst checkHorizontalScroll = () => {\n\tif (scrollRef.value) {\n\t\tconst { scrollWidth, clientWidth } = scrollRef.value\n\t\thasHorizontalScroll.value = scrollWidth > clientWidth\n\t}\n}\n\n// 设置滚动点\nconst setScrollPoints = () => {\n\tif (!scrollRef.value) return\n\n\t// 先清空现有的滚动点\n\tscrollPoints.value = []\n\n\t// 查找所有滚动点元素\n\tconst nodes = scrollRef.value.querySelectorAll('.to-scroll-point')\n\tif (!nodes || nodes.length === 0) {\n\t\treturn\n\t}\n\n\t// 收集滚动点信息\n\tnodes.forEach(item => {\n\t\tconst itemEl = item as HTMLElement\n\t\t// 获取滚动点的值\n\t\tconst pointValue = itemEl.getAttribute('data-point-value') || ''\n\n\t\t// 获取元素相对于滚动容器的精确位置\n\t\tconst offsetTop = itemEl.offsetTop\n\t\tconst height = itemEl.offsetHeight\n\n\t\t// 记录滚动点信息\n\t\tscrollPoints.value.push({\n\t\t\tvalue: pointValue,\n\t\t\tstart: offsetTop,\n\t\t\tend: offsetTop + height\n\t\t})\n\t})\n\n\t// 初始滚动到指定位置\n\tif (props.value && scrollRef.value) {\n\t\tscrollToValue(props.value, 'auto')\n\t}\n}\n\n// 滚动到指定值对应的位置\nconst scrollToValue = (value: string | number, behavior: ScrollBehavior = 'smooth') => {\n\tif (!scrollRef.value || !scrollPoints.value.length) return false\n\n\t// 查找匹配值的滚动点\n\tconst targetPoint = scrollPoints.value.find(p => String(p.value) === String(value))\n\tif (targetPoint) {\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: targetPoint.start,\n\t\t\tbehavior: behavior\n\t\t})\n\n\t\t// 主动触发滚动点高亮状态更新\n\t\tnotifyScrollPointsActive(value)\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// 主动通知滚动点更新高亮状态\nconst notifyScrollPointsActive = (activeValue: string | number) => {\n\t// 使用事件通知,避免直接操作DOM\n\tif (scrollRef.value) {\n\t\tconst event = new CustomEvent('scroll-point-active', {\n\t\t\tdetail: { value: activeValue },\n\t\t\tbubbles: true\n\t\t})\n\t\tscrollRef.value.dispatchEvent(event)\n\n\t\t// 确保更新内部状态\n\t\tcurrentPointValue.value = activeValue\n\t}\n}\n\n// 根据当前滚动位置查找对应的滚动点值\nconst findScrollPoint = (scrollTop: number): string | number | null => {\n\tif (!scrollPoints.value.length || !scrollRef.value) return null\n\n\tconst clientHeight = scrollRef.value.clientHeight\n\tconst scrollBottom = scrollTop + clientHeight\n\n\t// 1. 精确匹配:如果滚动位置恰好在某个滚动点的顶部附近\n\tfor (const point of scrollPoints.value) {\n\t\t// 如果滚动位置在点顶部的±10px范围内,优先选择该点\n\t\tif (Math.abs(scrollTop - point.start) < 10) {\n\t\t\treturn point.value\n\t\t}\n\t}\n\n\t// 2. 完全包含的滚动点:如果视口完全包含某个滚动点\n\tfor (const point of scrollPoints.value) {\n\t\tif (scrollTop <= point.start && scrollBottom >= point.end) {\n\t\t\treturn point.value\n\t\t}\n\t}\n\n\t// 3. 查找当前在视口中显示最多的点\n\tlet bestPoint = null\n\tlet maxVisibleHeight = 0\n\n\tfor (const point of scrollPoints.value) {\n\t\t// 计算可见部分\n\t\tconst visibleTop = Math.max(scrollTop, point.start)\n\t\tconst visibleBottom = Math.min(scrollBottom, point.end)\n\t\tconst visibleHeight = visibleBottom - visibleTop\n\n\t\t// 如果有可见部分,并且可见高度最大,选择该点\n\t\tif (visibleHeight > 0 && visibleHeight > maxVisibleHeight) {\n\t\t\tmaxVisibleHeight = visibleHeight\n\t\t\tbestPoint = point\n\t\t}\n\t}\n\n\t// 4. 特殊情况处理:滚动到顶部或底部\n\tif (scrollTop < 5 && scrollPoints.value.length > 0) {\n\t\treturn scrollPoints.value[0].value // 顶部\n\t}\n\n\tif (scrollBottom >= scrollRef.value.scrollHeight - 5 && scrollPoints.value.length > 0) {\n\t\treturn scrollPoints.value[scrollPoints.value.length - 1].value // 底部\n\t}\n\n\t// 5. 如果找到了最佳点,返回它的值\n\tif (bestPoint) {\n\t\treturn bestPoint.value\n\t}\n\n\t// 6. 后备方案:返回最接近当前滚动位置的点\n\tlet closestPoint = null\n\tlet minDistance = Infinity\n\n\tfor (const point of scrollPoints.value) {\n\t\tconst distance = Math.min(Math.abs(scrollTop - point.start), Math.abs(scrollBottom - point.end))\n\n\t\tif (distance < minDistance) {\n\t\t\tminDistance = distance\n\t\t\tclosestPoint = point\n\t\t}\n\t}\n\n\treturn closestPoint ? closestPoint.value : null\n}\n\n// 监听value/modelValue变化\nwatch(\n\t() => bindValue.value,\n\t(newVal, oldVal) => {\n\t\t// 避免重复处理相同的值\n\t\tif (newVal === oldVal || newVal === currentPointValue.value) return\n\n\t\t// 更新内部记录的值\n\t\tcurrentPointValue.value = newVal\n\n\t\t// 如果是由Tab变化引起的,滚动到对应位置\n\t\tif (!isScrolling.value) {\n\t\t\t// 标记为Tab触发的滚动,避免滚动过程中再次触发更新\n\t\t\tisTabTriggeredScroll = true\n\n\t\t\tnextTick(() => {\n\t\t\t\t// 尝试滚动到对应位置\n\t\t\t\tconst scrollSuccess = scrollToValue(newVal)\n\n\t\t\t\t// 如果滚动失败(没找到对应的滚动点),尝试重新计算滚动点后再滚动\n\t\t\t\tif (!scrollSuccess) {\n\t\t\t\t\tsetScrollPoints()\n\t\t\t\t\tscrollToValue(newVal)\n\t\t\t\t}\n\n\t\t\t\t// 滚动动作完成后重置标记\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisTabTriggeredScroll = false\n\t\t\t\t}, 500) // 等待滚动动画完成\n\t\t\t})\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\nonMounted(() => {\n\t// 组件挂载后,设置滚动点\n\tnextTick(() => {\n\t\t// 收集滚动点\n\t\tsetScrollPoints()\n\n\t\t// 设置观察器,监听DOM变化重新收集滚动点\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\n\t\tif (scrollRef.value) {\n\t\t\tobserver.observe(scrollRef.value, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['data-point-value']\n\t\t\t})\n\n\t\t\t// 如果有初始值,滚动到对应位置\n\t\t\tif (props.value) {\n\t\t\t\t// 延迟执行,确保DOM完全渲染\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (typeof props.value === 'string' || typeof props.value === 'number') {\n\t\t\t\t\t\tscrollToValue(props.value, 'auto')\n\t\t\t\t\t}\n\t\t\t\t}, 100)\n\t\t\t}\n\t\t}\n\t})\n\n\tif (props.virtual) {\n\t\twindow.addEventListener('mousemove', onMousemove)\n\t\twindow.addEventListener('mouseup', onMouseup)\n\t\twindow.addEventListener('mouseleave', onMouseup)\n\n\t\t// 添加鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.addEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.addEventListener('mouseleave', onMouseleave)\n\t\t}\n\n\t\t// 检查是否需要横向滚动条\n\t\tnextTick(() => {\n\t\t\tcheckHorizontalScroll()\n\t\t})\n\t}\n})\n\nonUnmounted(() => {\n\tif (props.virtual) {\n\t\twindow.removeEventListener('mousemove', onMousemove)\n\t\twindow.removeEventListener('mouseup', onMouseup)\n\t\twindow.removeEventListener('mouseleave', onMouseup)\n\n\t\t// 移除鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.removeEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.removeEventListener('mouseleave', onMouseleave)\n\t\t}\n\t}\n\n\t// 清除所有定时器\n\tif (scrollUpdateTimer) {\n\t\tclearTimeout(scrollUpdateTimer)\n\t\tscrollUpdateTimer = null\n\t}\n\n\tif (autoScrollThrottleTimer) {\n\t\tclearTimeout(autoScrollThrottleTimer)\n\t\tautoScrollThrottleTimer = null\n\t}\n})\n\n// 鼠标进入滚动区域\nconst onMouseenter = () => {\n\tisHovering.value = true\n}\n\n// 鼠标离开滚动区域\nconst onMouseleave = () => {\n\tif (!isDragging.value && !isHorizontalDragging.value) {\n\t\tisHovering.value = false\n\t}\n}\n\n// 虚拟滚动条垂直拖动\nconst onThumbMousedown = (e: MouseEvent) => {\n\tif (!scrollRef.value || !props.virtual) return\n\te.preventDefault()\n\te.stopPropagation()\n\n\t// 添加拖动状态的类,用于CSS样式调整\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.add('dragging-scrollbar')\n\t}\n\n\tstartY = e.clientY\n\tstartScrollTop = scrollRef.value.scrollTop\n\tisDragging.value = true\n}\n\n// 虚拟滚动条水平拖动\nconst onHorizontalThumbMousedown = (e: MouseEvent) => {\n\tif (!scrollRef.value || !props.virtual) return\n\te.preventDefault()\n\te.stopPropagation()\n\n\t// 添加拖动状态的类,用于CSS样式调整\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.add('dragging-scrollbar-horizontal')\n\t}\n\n\tstartX = e.clientX\n\tstartScrollLeft = scrollRef.value.scrollLeft\n\tisHorizontalDragging.value = true\n}\n\nconst onMousemove = (e: MouseEvent) => {\n\t// 处理垂直拖动\n\tif (isDragging.value && scrollRef.value && barThumb.value) {\n\t\tconst deltaY = e.clientY - startY\n\t\tconst contentHeight = scrollRef.value.scrollHeight\n\t\tconst containerHeight = scrollRef.value.clientHeight\n\t\tconst ratio = containerHeight / contentHeight\n\n\t\tscrollRef.value.scrollTop = startScrollTop + deltaY / ratio\n\t}\n\n\t// 处理水平拖动\n\tif (isHorizontalDragging.value && scrollRef.value && horizontalBarThumb.value) {\n\t\tconst deltaX = e.clientX - startX\n\t\tconst contentWidth = scrollRef.value.scrollWidth\n\t\tconst containerWidth = scrollRef.value.clientWidth\n\t\tconst ratio = containerWidth / contentWidth\n\n\t\tscrollRef.value.scrollLeft = startScrollLeft + deltaX / ratio\n\t}\n}\n\nconst onMouseup = () => {\n\tisDragging.value = false\n\tisHorizontalDragging.value = false\n\n\t// 拖动结束后,如果鼠标不在滚动区域内,则隐藏滚动条\n\tif (!isHovering.value) {\n\t\tsetTimeout(() => {\n\t\t\tisHovering.value = false\n\t\t}, 300)\n\t}\n\n\t// 移除拖动状态的类\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.remove('dragging-scrollbar')\n\t\tscrollRef.value.classList.remove('dragging-scrollbar-horizontal')\n\t}\n}\n\n// 处理滚动事件\nconst handleScroll = (event: Event) => {\n\t// 触发原始滚动事件\n\temit('scroll', event)\n\n\t// 如果是由Tab触发的滚动,不处理滚动检测\n\tif (isTabTriggeredScroll) {\n\t\treturn\n\t}\n\n\tif (!scrollRef.value) return\n\n\t// 获取当前滚动位置\n\tconst scrollTop = scrollRef.value.scrollTop\n\n\t// 触发滚动位置变化事件\n\temit('change', scrollTop)\n\n\tif (scrollEventDebounceTimer) {\n\t\tclearTimeout(scrollEventDebounceTimer)\n\t}\n\n\t// 检测是否滚动到底部\n\tscrollEventDebounceTimer = setTimeout(() => {\n\t\t// 检测是否滚动到底部\n\t\tconst { scrollHeight, clientHeight } = scrollRef.value\n\t\tif (scrollTop + clientHeight >= scrollHeight - 5) {\n\t\t\temit('bottom')\n\t\t}\n\n\t\tif (scrollTop <= 5) {\n\t\t\temit('top')\n\t\t}\n\t}, 100) // 防抖时间设置为 100ms\n\n\t// 如果有滚动点,立即检测当前位置对应哪个点\n\tif (scrollPoints.value.length > 0) {\n\t\t// 先清除之前的定时器\n\t\tif (autoScrollThrottleTimer) {\n\t\t\tclearTimeout(autoScrollThrottleTimer)\n\t\t\tautoScrollThrottleTimer = null\n\t\t}\n\t\tif (scrollUpdateTimer) {\n\t\t\tclearTimeout(scrollUpdateTimer)\n\t\t\tscrollUpdateTimer = null\n\t\t}\n\n\t\t// 使用requestAnimationFrame确保滚动过程中能平滑更新\n\t\trequestAnimationFrame(() => {\n\t\t\t// 重新查找当前滚动位置对应的点\n\t\t\tconst pointValue = findScrollPoint(scrollTop)\n\n\t\t\t// 如果找到点且与当前值不同,立即更新值\n\t\t\tif (pointValue !== null && pointValue !== currentPointValue.value) {\n\t\t\t\t// 更新内部记录的值\n\t\t\t\tcurrentPointValue.value = pointValue\n\n\t\t\t\t// 同时发送两种事件,确保兼容性\n\t\t\t\temit('update:modelValue', pointValue)\n\t\t\t\temit('update:value', pointValue)\n\n\t\t\t\t// 通知滚动点更新高亮状态\n\t\t\t\tnotifyScrollPointsActive(pointValue)\n\n\t\t\t\t// 如果使用了虚拟滚动条,确保它的位置也正确更新\n\t\t\t\tif (props.virtual && barThumb.value) {\n\t\t\t\t\tupdateVirtualScrollbar()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\t// 标记为正在滚动\n\tisScrolling.value = true\n\n\t// 滚动结束后重置状态\n\tclearTimeout(scrollUpdateTimer)\n\tscrollUpdateTimer = setTimeout(() => {\n\t\tisScrolling.value = false\n\t\temit('scrollEnd')\n\t}, 100)\n}\n\n// 更新虚拟滚动条位置(如果使用)\nconst updateVirtualScrollbar = () => {\n\tif (!scrollRef.value || !props.virtual) return\n\n\t// 强制更新滚动条位置\n\tnextTick(() => {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = scrollRef.value\n\t\tconst thumbHeight = Math.max(30, (clientHeight / scrollHeight) * clientHeight)\n\t\tconst thumbTop = (scrollTop / (scrollHeight - clientHeight)) * (clientHeight - thumbHeight)\n\n\t\tif (barThumb.value) {\n\t\t\tbarThumb.value.style.transform = `translateY(${thumbTop}px)`\n\t\t}\n\t})\n}\n\n// 统一的滚动方法,支持多种参数类型\nconst to = (target: HTMLElement | string | number | any) => {\n\tif (!scrollRef.value) return\n\n\t// 滚动到底部\n\tif (target === '$bottom') {\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: scrollRef.value.scrollHeight - scrollRef.value.clientHeight,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定元素\n\tif (target instanceof HTMLElement) {\n\t\tconst elementTop = target.getBoundingClientRect().top\n\t\tconst containerTop = scrollRef.value.getBoundingClientRect().top\n\t\tconst relativeTop = elementTop - containerTop + scrollRef.value.scrollTop\n\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: relativeTop,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定位置(数字或数字字符串)\n\tif (typeof target === 'number' || (typeof target === 'string' && !isNaN(Number(target)))) {\n\t\tconst position = typeof target === 'string' ? Number(target) : target\n\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: position,\n\t\t\tleft: 0,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定选项配置\n\tif (typeof target === 'object' && target !== null) {\n\t\tscrollRef.value.scrollTo(target)\n\t\treturn\n\t}\n}\n\n// 垂直滚动条样式计算\nconst thumbStyle = computed(() => {\n\tif (!scrollRef.value || !props.virtual) return {}\n\n\tconst { clientHeight, scrollHeight, scrollTop } = scrollRef.value\n\n\t// 计算滚动条高度比例\n\tconst thumbHeight = Math.max(30, (clientHeight / scrollHeight) * clientHeight)\n\n\t// 计算滚动条位置比例\n\tconst thumbTop = (scrollTop / (scrollHeight - clientHeight)) * (clientHeight - thumbHeight)\n\n\treturn {\n\t\theight: `${thumbHeight}px`,\n\t\ttransform: `translateY(${thumbTop}px)`,\n\t\twidth: '6px'\n\t}\n})\n\n// 水平滚动条样式计算\nconst horizontalThumbStyle = computed(() => {\n\tif (!scrollRef.value || !props.virtual) return {}\n\n\tconst { clientWidth, scrollWidth, scrollLeft } = scrollRef.value\n\n\t// 计算滚动条宽度比例\n\tconst thumbWidth = Math.max(30, (clientWidth / scrollWidth) * clientWidth)\n\n\t// 计算滚动条位置比例\n\tconst thumbLeft = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - thumbWidth)\n\n\treturn {\n\t\twidth: `${thumbWidth}px`,\n\t\ttransform: `translateX(${thumbLeft}px)`,\n\t\theight: '6px'\n\t}\n})\n\nconst setStyle = computed(() => {\n\tconst obj: {\n\t\theight?: string\n\t} = {}\n\n\tif (props.height) {\n\t\tif (!isNaN(Number(props.height))) {\n\t\t\tobj.height = props.height + 'em'\n\t\t} else {\n\t\t\tobj.height = String(props.height)\n\t\t}\n\t}\n\n\treturn obj\n})\n\nconst setClass = computed(() => {\n\tlet arr: string[] = []\n\n\tif (props.virtual) {\n\t\tarr.push('hide-scrollbar')\n\t}\n\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\n\tif (props.type) {\n\t\tarr.push(`type-${props.type}`)\n\t}\n\n\treturn arr\n})\n\nconst setContentStyle = computed(() => {\n\tconst obj: {\n\t\theight?: string\n\t\tpadding?: string | number\n\t\tpaddingTop?: string\n\t\tpaddingRight?: string\n\t\tpaddingBottom?: string\n\t\tpaddingLeft?: string\n\t\tmaxHeight?: string\n\t\toverflow?: string\n\t\tposition?: 'relative' | 'absolute' | 'fixed' | 'sticky'\n\t\twidth?: string\n\t\tdisplay?: string\n\t} = {}\n\n\tconst hasUnit = (val: string) => /[a-z%]+$/i.test(val)\n\tif (String(props.padding).trim()) {\n\t\t// 分割成各个值\n\t\tconst padded = String(props.padding)\n\t\t\t.trim()\n\t\t\t.split(/\\s+/)\n\t\t\t.map(val => {\n\t\t\t\t// 如果是数字(或纯数字字符串),或末尾无单位,就加 em\n\t\t\t\treturn hasUnit(val) ? val : `${val}em`\n\t\t\t})\n\t\t\t.join(' ')\n\n\t\tobj.padding = padded\n\t}\n\n\tif (props.paddingPosition) {\n\t\t// 根据paddingPosition设置padding位置\n\t\tconst padding = String(props.padding || '0')\n\t\tconst hasUnit = (val: string) => /[a-z%]+$/i.test(val)\n\t\tconst paddingValue = hasUnit(padding) ? padding : `${padding}em`\n\n\t\tswitch (props.paddingPosition) {\n\t\t\tcase 'top':\n\t\t\t\tobj.paddingTop = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'right':\n\t\t\t\tobj.paddingRight = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'bottom':\n\t\t\t\tobj.paddingBottom = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'left':\n\t\t\t\tobj.paddingLeft = paddingValue\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tif (props.virtual) {\n\t\tobj.overflow = 'auto'\n\t\tobj.position = 'relative'\n\t\tobj.width = '100%'\n\t}\n\n\treturn obj\n})\n\nfunction adjust() {\n\t// 组件挂载后,设置滚动点\n\tnextTick(() => {\n\t\t// 收集滚动点\n\t\tsetScrollPoints()\n\n\t\t// 设置观察器,监听DOM变化重新收集滚动点\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\n\t\tif (scrollRef.value) {\n\t\t\tobserver.observe(scrollRef.value, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['data-point-value']\n\t\t\t})\n\n\t\t\t// 如果有初始值,滚动到对应位置\n\t\t\tif (props.value) {\n\t\t\t\t// 延迟执行,确保DOM完全渲染\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (typeof props.value === 'string' || typeof props.value === 'number') {\n\t\t\t\t\t\tscrollToValue(props.value, 'auto')\n\t\t\t\t\t}\n\t\t\t\t}, 100)\n\t\t\t}\n\t\t}\n\t})\n\n\tif (props.virtual) {\n\t\twindow.addEventListener('mousemove', onMousemove)\n\t\twindow.addEventListener('mouseup', onMouseup)\n\t\twindow.addEventListener('mouseleave', onMouseup)\n\n\t\t// 添加鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.addEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.addEventListener('mouseleave', onMouseleave)\n\t\t}\n\n\t\t// 检查是否需要横向滚动条\n\t\tnextTick(() => {\n\t\t\tcheckHorizontalScroll()\n\t\t})\n\t}\n}\n\n// 导出方法供父组件调用\ndefineExpose({\n\tto,\n\tscrollRef,\n\tisScrolling,\n\tsetScrollPoints,\n\tfindScrollPoint,\n\tcheckHorizontalScroll,\n\tadjust\n})\n</script>\n"],"names":["DO_defineComponent","hasUnit","_createElementBlock","_normalizeClass","flex","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Scroll.vue2.mjs","sources":["../../../../../../packages/components/scroll/src/Scroll.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToScroll'\n});\n</script>\n<template>\n\t<div class=\"to-scroll\" :flex=\"flex ? flex : null\" :class=\"setClass\" :style=\"setStyle\">\n\t\t<!-- 自定义滚动条 -->\n\t\t<div v-if=\"props.virtual\" class=\"to-scroll-bar\" :class=\"[barVisibleClass, { active: isScrolling || isHovering }]\">\n\t\t\t<div ref=\"barThumb\" class=\"to-scroll-thumb\" :style=\"thumbStyle\" @mousedown=\"onThumbMousedown\"></div>\n\t\t</div>\n\n\t\t<!-- 横向滚动条 -->\n\t\t<div v-if=\"props.virtual && hasHorizontalScroll\" class=\"to-scroll-bar horizontal\" :class=\"[barVisibleClass, { active: isScrolling || isHovering }]\">\n\t\t\t<div ref=\"horizontalBarThumb\" class=\"to-scroll-thumb\" :style=\"horizontalThumbStyle\" @mousedown=\"onHorizontalThumbMousedown\"></div>\n\t\t</div>\n\n\t\t<!-- 滚动内容区域 -->\n\t\t<div ref=\"scrollRef\" class=\"to-scroll-content\" :style=\"setContentStyle\" :class=\"{ 'virtual-scroll': props.virtual }\" @scroll=\"handleScroll\">\n\t\t\t<!-- 默认内容插槽 -->\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, nextTick, onMounted, onUnmounted, provide } from 'vue'\nimport { scrollProps, ScrollContext } from './scroll'\n\n\n\nconst props = defineProps(scrollProps)\nconst emit = defineEmits<{\n\t(e: 'scroll', event: Event): void\n\t(e: 'scrollEnd'): void\n\t(e: 'change', position: number): void\n\t(e: 'update:value', position: number | string): void\n\t(e: 'update:modelValue', position: number | string): void\n\t(e: 'bottom'): void\n\t(e: 'top'): void\n}>()\n\nconst scrollRef = ref<HTMLElement | null>(null)\nconst barThumb = ref<HTMLElement | null>(null)\nconst horizontalBarThumb = ref<HTMLElement | null>(null)\nconst isScrolling = ref(false)\nconst isHovering = ref(false)\n// 添加一个标志来标识是否由tab点击导致的滚动\nlet isTabTriggeredScroll = false\n// 添加自动滚动的节流控制\nlet autoScrollThrottleTimer: ReturnType<typeof setTimeout> | null = null\n// 滚动防抖定时器\nlet scrollUpdateTimer: ReturnType<typeof setTimeout> | null = null\nlet isDragging = ref(false)\nlet isHorizontalDragging = ref(false)\nlet startY = 0\nlet startX = 0\nlet startScrollTop = 0\nlet startScrollLeft = 0\nconst hasHorizontalScroll = ref(false)\n// 存储滚动点信息\nconst scrollPoints = ref<Array<{ value: string | number; start: number; end: number }>>([])\n// 获取当前绑定值(优先使用modelValue,兼容value)\nconst bindValue = computed(() => props.modelValue || props.value)\n// 当前选中的滚动点值\nconst currentPointValue = ref<string | number | null>(bindValue.value || null)\n\nlet scrollEventDebounceTimer: ReturnType<typeof setTimeout> | null = null\n// 提供给子组件的上下文\nprovide<ScrollContext>('ToScroll', {\n\tregisterScrollPoint: (_el: HTMLElement, _value: string | number) => {\n\t\t// 在下一个渲染周期更新滚动点\n\t\tnextTick(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\t}\n})\n\n// 提供当前值给子组件\nprovide('scrollValue', currentPointValue)\n\n// 计算属性\nconst barVisibleClass = computed(() => {\n\treturn `bar-${String(props.barDisplay)}`\n})\n\n// 检查是否需要横向滚动条\nconst checkHorizontalScroll = () => {\n\tif (scrollRef.value) {\n\t\tconst { scrollWidth, clientWidth } = scrollRef.value\n\t\thasHorizontalScroll.value = scrollWidth > clientWidth\n\t}\n}\n\n// 设置滚动点\nconst setScrollPoints = () => {\n\tif (!scrollRef.value) return\n\n\t// 先清空现有的滚动点\n\tscrollPoints.value = []\n\n\t// 查找所有滚动点元素\n\tconst nodes = scrollRef.value.querySelectorAll('.to-scroll-point')\n\tif (!nodes || nodes.length === 0) {\n\t\treturn\n\t}\n\n\t// 收集滚动点信息\n\tnodes.forEach(item => {\n\t\tconst itemEl = item as HTMLElement\n\t\t// 获取滚动点的值\n\t\tconst pointValue = itemEl.getAttribute('data-point-value') || ''\n\n\t\t// 获取元素相对于滚动容器的精确位置\n\t\tconst offsetTop = itemEl.offsetTop\n\t\tconst height = itemEl.offsetHeight\n\n\t\t// 记录滚动点信息\n\t\tscrollPoints.value.push({\n\t\t\tvalue: pointValue,\n\t\t\tstart: offsetTop,\n\t\t\tend: offsetTop + height\n\t\t})\n\t})\n\n\t// 初始滚动到指定位置\n\tif (props.value && scrollRef.value) {\n\t\tscrollToValue(props.value, 'auto')\n\t}\n}\n\n// 滚动到指定值对应的位置\nconst scrollToValue = (value: string | number, behavior: ScrollBehavior = 'smooth') => {\n\tif (!scrollRef.value || !scrollPoints.value.length) return false\n\n\t// 查找匹配值的滚动点\n\tconst targetPoint = scrollPoints.value.find(p => String(p.value) === String(value))\n\tif (targetPoint) {\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: targetPoint.start,\n\t\t\tbehavior: behavior\n\t\t})\n\n\t\t// 主动触发滚动点高亮状态更新\n\t\tnotifyScrollPointsActive(value)\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// 主动通知滚动点更新高亮状态\nconst notifyScrollPointsActive = (activeValue: string | number) => {\n\t// 使用事件通知,避免直接操作DOM\n\tif (scrollRef.value) {\n\t\tconst event = new CustomEvent('scroll-point-active', {\n\t\t\tdetail: { value: activeValue },\n\t\t\tbubbles: true\n\t\t})\n\t\tscrollRef.value.dispatchEvent(event)\n\n\t\t// 确保更新内部状态\n\t\tcurrentPointValue.value = activeValue\n\t}\n}\n\n// 根据当前滚动位置查找对应的滚动点值\nconst findScrollPoint = (scrollTop: number): string | number | null => {\n\tif (!scrollPoints.value.length || !scrollRef.value) return null\n\n\tconst clientHeight = scrollRef.value.clientHeight\n\tconst scrollBottom = scrollTop + clientHeight\n\n\t// 1. 精确匹配:如果滚动位置恰好在某个滚动点的顶部附近\n\tfor (const point of scrollPoints.value) {\n\t\t// 如果滚动位置在点顶部的±10px范围内,优先选择该点\n\t\tif (Math.abs(scrollTop - point.start) < 10) {\n\t\t\treturn point.value\n\t\t}\n\t}\n\n\t// 2. 完全包含的滚动点:如果视口完全包含某个滚动点\n\tfor (const point of scrollPoints.value) {\n\t\tif (scrollTop <= point.start && scrollBottom >= point.end) {\n\t\t\treturn point.value\n\t\t}\n\t}\n\n\t// 3. 查找当前在视口中显示最多的点\n\tlet bestPoint = null\n\tlet maxVisibleHeight = 0\n\n\tfor (const point of scrollPoints.value) {\n\t\t// 计算可见部分\n\t\tconst visibleTop = Math.max(scrollTop, point.start)\n\t\tconst visibleBottom = Math.min(scrollBottom, point.end)\n\t\tconst visibleHeight = visibleBottom - visibleTop\n\n\t\t// 如果有可见部分,并且可见高度最大,选择该点\n\t\tif (visibleHeight > 0 && visibleHeight > maxVisibleHeight) {\n\t\t\tmaxVisibleHeight = visibleHeight\n\t\t\tbestPoint = point\n\t\t}\n\t}\n\n\t// 4. 特殊情况处理:滚动到顶部或底部\n\tif (scrollTop < 5 && scrollPoints.value.length > 0) {\n\t\treturn scrollPoints.value[0].value // 顶部\n\t}\n\n\tif (scrollBottom >= scrollRef.value.scrollHeight - 5 && scrollPoints.value.length > 0) {\n\t\treturn scrollPoints.value[scrollPoints.value.length - 1].value // 底部\n\t}\n\n\t// 5. 如果找到了最佳点,返回它的值\n\tif (bestPoint) {\n\t\treturn bestPoint.value\n\t}\n\n\t// 6. 后备方案:返回最接近当前滚动位置的点\n\tlet closestPoint = null\n\tlet minDistance = Infinity\n\n\tfor (const point of scrollPoints.value) {\n\t\tconst distance = Math.min(Math.abs(scrollTop - point.start), Math.abs(scrollBottom - point.end))\n\n\t\tif (distance < minDistance) {\n\t\t\tminDistance = distance\n\t\t\tclosestPoint = point\n\t\t}\n\t}\n\n\treturn closestPoint ? closestPoint.value : null\n}\n\n// 监听value/modelValue变化\nwatch(\n\t() => bindValue.value,\n\t(newVal, oldVal) => {\n\t\t// 避免重复处理相同的值\n\t\tif (newVal === oldVal || newVal === currentPointValue.value) return\n\n\t\t// 更新内部记录的值\n\t\tcurrentPointValue.value = newVal\n\n\t\t// 如果是由Tab变化引起的,滚动到对应位置\n\t\tif (!isScrolling.value) {\n\t\t\t// 标记为Tab触发的滚动,避免滚动过程中再次触发更新\n\t\t\tisTabTriggeredScroll = true\n\n\t\t\tnextTick(() => {\n\t\t\t\t// 尝试滚动到对应位置\n\t\t\t\tconst scrollSuccess = scrollToValue(newVal)\n\n\t\t\t\t// 如果滚动失败(没找到对应的滚动点),尝试重新计算滚动点后再滚动\n\t\t\t\tif (!scrollSuccess) {\n\t\t\t\t\tsetScrollPoints()\n\t\t\t\t\tscrollToValue(newVal)\n\t\t\t\t}\n\n\t\t\t\t// 滚动动作完成后重置标记\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisTabTriggeredScroll = false\n\t\t\t\t}, 500) // 等待滚动动画完成\n\t\t\t})\n\t\t}\n\t},\n\t{ immediate: true }\n)\n\nonMounted(() => {\n\t// 组件挂载后,设置滚动点\n\tnextTick(() => {\n\t\t// 收集滚动点\n\t\tsetScrollPoints()\n\n\t\t// 设置观察器,监听DOM变化重新收集滚动点\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\n\t\tif (scrollRef.value) {\n\t\t\tobserver.observe(scrollRef.value, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['data-point-value']\n\t\t\t})\n\n\t\t\t// 如果有初始值,滚动到对应位置\n\t\t\tif (props.value) {\n\t\t\t\t// 延迟执行,确保DOM完全渲染\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (typeof props.value === 'string' || typeof props.value === 'number') {\n\t\t\t\t\t\tscrollToValue(props.value, 'auto')\n\t\t\t\t\t}\n\t\t\t\t}, 100)\n\t\t\t}\n\t\t}\n\t})\n\n\tif (props.virtual) {\n\t\twindow.addEventListener('mousemove', onMousemove)\n\t\twindow.addEventListener('mouseup', onMouseup)\n\t\twindow.addEventListener('mouseleave', onMouseup)\n\n\t\t// 添加鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.addEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.addEventListener('mouseleave', onMouseleave)\n\t\t}\n\n\t\t// 检查是否需要横向滚动条\n\t\tnextTick(() => {\n\t\t\tcheckHorizontalScroll()\n\t\t})\n\t}\n})\n\nonUnmounted(() => {\n\tif (props.virtual) {\n\t\twindow.removeEventListener('mousemove', onMousemove)\n\t\twindow.removeEventListener('mouseup', onMouseup)\n\t\twindow.removeEventListener('mouseleave', onMouseup)\n\n\t\t// 移除鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.removeEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.removeEventListener('mouseleave', onMouseleave)\n\t\t}\n\t}\n\n\t// 清除所有定时器\n\tif (scrollUpdateTimer) {\n\t\tclearTimeout(scrollUpdateTimer)\n\t\tscrollUpdateTimer = null\n\t}\n\n\tif (autoScrollThrottleTimer) {\n\t\tclearTimeout(autoScrollThrottleTimer)\n\t\tautoScrollThrottleTimer = null\n\t}\n})\n\n// 鼠标进入滚动区域\nconst onMouseenter = () => {\n\tisHovering.value = true\n}\n\n// 鼠标离开滚动区域\nconst onMouseleave = () => {\n\tif (!isDragging.value && !isHorizontalDragging.value) {\n\t\tisHovering.value = false\n\t}\n}\n\n// 虚拟滚动条垂直拖动\nconst onThumbMousedown = (e: MouseEvent) => {\n\tif (!scrollRef.value || !props.virtual) return\n\te.preventDefault()\n\te.stopPropagation()\n\n\t// 添加拖动状态的类,用于CSS样式调整\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.add('dragging-scrollbar')\n\t}\n\n\tstartY = e.clientY\n\tstartScrollTop = scrollRef.value.scrollTop\n\tisDragging.value = true\n}\n\n// 虚拟滚动条水平拖动\nconst onHorizontalThumbMousedown = (e: MouseEvent) => {\n\tif (!scrollRef.value || !props.virtual) return\n\te.preventDefault()\n\te.stopPropagation()\n\n\t// 添加拖动状态的类,用于CSS样式调整\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.add('dragging-scrollbar-horizontal')\n\t}\n\n\tstartX = e.clientX\n\tstartScrollLeft = scrollRef.value.scrollLeft\n\tisHorizontalDragging.value = true\n}\n\nconst onMousemove = (e: MouseEvent) => {\n\t// 处理垂直拖动\n\tif (isDragging.value && scrollRef.value && barThumb.value) {\n\t\tconst deltaY = e.clientY - startY\n\t\tconst contentHeight = scrollRef.value.scrollHeight\n\t\tconst containerHeight = scrollRef.value.clientHeight\n\t\tconst ratio = containerHeight / contentHeight\n\n\t\tscrollRef.value.scrollTop = startScrollTop + deltaY / ratio\n\t}\n\n\t// 处理水平拖动\n\tif (isHorizontalDragging.value && scrollRef.value && horizontalBarThumb.value) {\n\t\tconst deltaX = e.clientX - startX\n\t\tconst contentWidth = scrollRef.value.scrollWidth\n\t\tconst containerWidth = scrollRef.value.clientWidth\n\t\tconst ratio = containerWidth / contentWidth\n\n\t\tscrollRef.value.scrollLeft = startScrollLeft + deltaX / ratio\n\t}\n}\n\nconst onMouseup = () => {\n\tisDragging.value = false\n\tisHorizontalDragging.value = false\n\n\t// 拖动结束后,如果鼠标不在滚动区域内,则隐藏滚动条\n\tif (!isHovering.value) {\n\t\tsetTimeout(() => {\n\t\t\tisHovering.value = false\n\t\t}, 300)\n\t}\n\n\t// 移除拖动状态的类\n\tif (scrollRef.value) {\n\t\tscrollRef.value.classList.remove('dragging-scrollbar')\n\t\tscrollRef.value.classList.remove('dragging-scrollbar-horizontal')\n\t}\n}\n\n// 处理滚动事件\nconst handleScroll = (event: Event) => {\n\t// 触发原始滚动事件\n\temit('scroll', event)\n\n\t// 如果是由Tab触发的滚动,不处理滚动检测\n\tif (isTabTriggeredScroll) {\n\t\treturn\n\t}\n\n\tif (!scrollRef.value) return\n\n\t// 获取当前滚动位置\n\tconst scrollTop = scrollRef.value.scrollTop\n\n\t// 触发滚动位置变化事件\n\temit('change', scrollTop)\n\n\tif (scrollEventDebounceTimer) {\n\t\tclearTimeout(scrollEventDebounceTimer)\n\t}\n\n\t// 检测是否滚动到底部\n\tscrollEventDebounceTimer = setTimeout(() => {\n\t\t// 检测是否滚动到底部\n\t\tconst { scrollHeight, clientHeight } = scrollRef.value\n\t\tif (scrollTop + clientHeight >= scrollHeight - 5) {\n\t\t\temit('bottom')\n\t\t}\n\n\t\tif (scrollTop <= 5) {\n\t\t\temit('top')\n\t\t}\n\t}, 100) // 防抖时间设置为 100ms\n\n\t// 如果有滚动点,立即检测当前位置对应哪个点\n\tif (scrollPoints.value.length > 0) {\n\t\t// 先清除之前的定时器\n\t\tif (autoScrollThrottleTimer) {\n\t\t\tclearTimeout(autoScrollThrottleTimer)\n\t\t\tautoScrollThrottleTimer = null\n\t\t}\n\t\tif (scrollUpdateTimer) {\n\t\t\tclearTimeout(scrollUpdateTimer)\n\t\t\tscrollUpdateTimer = null\n\t\t}\n\n\t\t// 使用requestAnimationFrame确保滚动过程中能平滑更新\n\t\trequestAnimationFrame(() => {\n\t\t\t// 重新查找当前滚动位置对应的点\n\t\t\tconst pointValue = findScrollPoint(scrollTop)\n\n\t\t\t// 如果找到点且与当前值不同,立即更新值\n\t\t\tif (pointValue !== null && pointValue !== currentPointValue.value) {\n\t\t\t\t// 更新内部记录的值\n\t\t\t\tcurrentPointValue.value = pointValue\n\n\t\t\t\t// 同时发送两种事件,确保兼容性\n\t\t\t\temit('update:modelValue', pointValue)\n\t\t\t\temit('update:value', pointValue)\n\n\t\t\t\t// 通知滚动点更新高亮状态\n\t\t\t\tnotifyScrollPointsActive(pointValue)\n\n\t\t\t\t// 如果使用了虚拟滚动条,确保它的位置也正确更新\n\t\t\t\tif (props.virtual && barThumb.value) {\n\t\t\t\t\tupdateVirtualScrollbar()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\t// 标记为正在滚动\n\tisScrolling.value = true\n\n\t// 滚动结束后重置状态\n\tclearTimeout(scrollUpdateTimer)\n\tscrollUpdateTimer = setTimeout(() => {\n\t\tisScrolling.value = false\n\t\temit('scrollEnd')\n\t}, 100)\n}\n\n// 更新虚拟滚动条位置(如果使用)\nconst updateVirtualScrollbar = () => {\n\tif (!scrollRef.value || !props.virtual) return\n\n\t// 强制更新滚动条位置\n\tnextTick(() => {\n\t\tconst { scrollTop, scrollHeight, clientHeight } = scrollRef.value\n\t\tconst thumbHeight = Math.max(30, (clientHeight / scrollHeight) * clientHeight)\n\t\tconst thumbTop = (scrollTop / (scrollHeight - clientHeight)) * (clientHeight - thumbHeight)\n\n\t\tif (barThumb.value) {\n\t\t\tbarThumb.value.style.transform = `translateY(${thumbTop}px)`\n\t\t}\n\t})\n}\n\n// 统一的滚动方法,支持多种参数类型\nconst to = (target: HTMLElement | string | number | any) => {\n\tif (!scrollRef.value) return\n\n\t// 滚动到底部\n\tif (target === '$bottom') {\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: scrollRef.value.scrollHeight - scrollRef.value.clientHeight,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定元素\n\tif (target instanceof HTMLElement) {\n\t\tconst elementTop = target.getBoundingClientRect().top\n\t\tconst containerTop = scrollRef.value.getBoundingClientRect().top\n\t\tconst relativeTop = elementTop - containerTop + scrollRef.value.scrollTop\n\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: relativeTop,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定位置(数字或数字字符串)\n\tif (typeof target === 'number' || (typeof target === 'string' && !isNaN(Number(target)))) {\n\t\tconst position = typeof target === 'string' ? Number(target) : target\n\n\t\tscrollRef.value.scrollTo({\n\t\t\ttop: position,\n\t\t\tleft: 0,\n\t\t\tbehavior: props.virtual ? 'smooth' : 'auto'\n\t\t})\n\t\treturn\n\t}\n\n\t// 滚动到指定选项配置\n\tif (typeof target === 'object' && target !== null) {\n\t\tscrollRef.value.scrollTo(target)\n\t\treturn\n\t}\n}\n\n// 垂直滚动条样式计算\nconst thumbStyle = computed(() => {\n\tif (!scrollRef.value || !props.virtual) return {}\n\n\tconst { clientHeight, scrollHeight, scrollTop } = scrollRef.value\n\n\t// 计算滚动条高度比例\n\tconst thumbHeight = Math.max(30, (clientHeight / scrollHeight) * clientHeight)\n\n\t// 计算滚动条位置比例\n\tconst thumbTop = (scrollTop / (scrollHeight - clientHeight)) * (clientHeight - thumbHeight)\n\n\treturn {\n\t\theight: `${thumbHeight}px`,\n\t\ttransform: `translateY(${thumbTop}px)`,\n\t\twidth: '6px'\n\t}\n})\n\n// 水平滚动条样式计算\nconst horizontalThumbStyle = computed(() => {\n\tif (!scrollRef.value || !props.virtual) return {}\n\n\tconst { clientWidth, scrollWidth, scrollLeft } = scrollRef.value\n\n\t// 计算滚动条宽度比例\n\tconst thumbWidth = Math.max(30, (clientWidth / scrollWidth) * clientWidth)\n\n\t// 计算滚动条位置比例\n\tconst thumbLeft = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - thumbWidth)\n\n\treturn {\n\t\twidth: `${thumbWidth}px`,\n\t\ttransform: `translateX(${thumbLeft}px)`,\n\t\theight: '6px'\n\t}\n})\n\nconst setStyle = computed(() => {\n\tconst obj: {\n\t\theight?: string\n\t} = {}\n\n\tif (props.height) {\n\t\tif (!isNaN(Number(props.height))) {\n\t\t\tobj.height = props.height + 'em'\n\t\t} else {\n\t\t\tobj.height = String(props.height)\n\t\t}\n\t}\n\n\treturn obj\n})\n\nconst setClass = computed(() => {\n\tlet arr: string[] = []\n\n\tif (props.virtual) {\n\t\tarr.push('hide-scrollbar')\n\t}\n\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\n\tif (props.type) {\n\t\tarr.push(`type-${props.type}`)\n\t}\n\n\tif (props.hide) {\n\t\tarr.push('is-hide')\n\t}\n\n\treturn arr\n})\n\nconst setContentStyle = computed(() => {\n\tconst obj: {\n\t\theight?: string\n\t\tpadding?: string | number\n\t\tpaddingTop?: string\n\t\tpaddingRight?: string\n\t\tpaddingBottom?: string\n\t\tpaddingLeft?: string\n\t\tmaxHeight?: string\n\t\toverflow?: string\n\t\tposition?: 'relative' | 'absolute' | 'fixed' | 'sticky'\n\t\twidth?: string\n\t\tdisplay?: string\n\t} = {}\n\n\tconst hasUnit = (val: string) => /[a-z%]+$/i.test(val)\n\tif (String(props.padding).trim()) {\n\t\t// 分割成各个值\n\t\tconst padded = String(props.padding)\n\t\t\t.trim()\n\t\t\t.split(/\\s+/)\n\t\t\t.map(val => {\n\t\t\t\t// 如果是数字(或纯数字字符串),或末尾无单位,就加 em\n\t\t\t\treturn hasUnit(val) ? val : `${val}em`\n\t\t\t})\n\t\t\t.join(' ')\n\n\t\tobj.padding = padded\n\t}\n\n\tif (props.paddingPosition) {\n\t\t// 根据paddingPosition设置padding位置\n\t\tconst padding = String(props.padding || '0')\n\t\tconst hasUnit = (val: string) => /[a-z%]+$/i.test(val)\n\t\tconst paddingValue = hasUnit(padding) ? padding : `${padding}em`\n\n\t\tswitch (props.paddingPosition) {\n\t\t\tcase 'top':\n\t\t\t\tobj.paddingTop = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'right':\n\t\t\t\tobj.paddingRight = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'bottom':\n\t\t\t\tobj.paddingBottom = paddingValue\n\t\t\t\tbreak\n\t\t\tcase 'left':\n\t\t\t\tobj.paddingLeft = paddingValue\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tif (props.virtual) {\n\t\tobj.overflow = 'auto'\n\t\tobj.position = 'relative'\n\t\tobj.width = '100%'\n\t}\n\n\treturn obj\n})\n\nfunction adjust() {\n\t// 组件挂载后,设置滚动点\n\tnextTick(() => {\n\t\t// 收集滚动点\n\t\tsetScrollPoints()\n\n\t\t// 设置观察器,监听DOM变化重新收集滚动点\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tsetScrollPoints()\n\t\t})\n\n\t\tif (scrollRef.value) {\n\t\t\tobserver.observe(scrollRef.value, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t\tattributes: true,\n\t\t\t\tattributeFilter: ['data-point-value']\n\t\t\t})\n\n\t\t\t// 如果有初始值,滚动到对应位置\n\t\t\tif (props.value) {\n\t\t\t\t// 延迟执行,确保DOM完全渲染\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (typeof props.value === 'string' || typeof props.value === 'number') {\n\t\t\t\t\t\tscrollToValue(props.value, 'auto')\n\t\t\t\t\t}\n\t\t\t\t}, 100)\n\t\t\t}\n\t\t}\n\t})\n\n\tif (props.virtual) {\n\t\twindow.addEventListener('mousemove', onMousemove)\n\t\twindow.addEventListener('mouseup', onMouseup)\n\t\twindow.addEventListener('mouseleave', onMouseup)\n\n\t\t// 添加鼠标进入和离开事件\n\t\tif (scrollRef.value) {\n\t\t\tscrollRef.value.addEventListener('mouseenter', onMouseenter)\n\t\t\tscrollRef.value.addEventListener('mouseleave', onMouseleave)\n\t\t}\n\n\t\t// 检查是否需要横向滚动条\n\t\tnextTick(() => {\n\t\t\tcheckHorizontalScroll()\n\t\t})\n\t}\n}\n\n// 导出方法供父组件调用\ndefineExpose({\n\tto,\n\tscrollRef,\n\tisScrolling,\n\tsetScrollPoints,\n\tfindScrollPoint,\n\tcheckHorizontalScroll,\n\tadjust\n})\n</script>\n"],"names":["DO_defineComponent","hasUnit","_createElementBlock","_normalizeClass","flex","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.mjs","sources":["../../../../../../packages/components/scroll/src/scroll.ts"],"sourcesContent":["import { ExtractPropTypes } from 'vue'\n\nexport const scrollProps = {\n\tflex: Boolean,\n\t/**\n\t * 是否使用模拟滚动条\n\t */\n\tvirtual: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\t/**\n\t * 滚动幅度(仅模拟滚动条支持)\n\t */\n\tspeed: {\n\t\ttype: Number,\n\t\tdefault: 10\n\t},\n\t/**\n\t * 顶部间距\n\t */\n\ttop: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 双向绑定的滚动位置,支持v-model\n\t */\n\tmodelValue: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 兼容旧版本,等同于modelValue\n\t * @deprecated 推荐使用modelValue\n\t */\n\tvalue: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 内边距\n\t */\n\tpadding: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t},\n\t/**\n\t * 内边距位置\n\t */\n\tpaddingPosition: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 底部间距\n\t */\n\tbottom: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 高度\n\t */\n\theight: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t},\n\t/**\n\t * 滚动条显示方式\n\t */\n\tbarDisplay: {\n\t\ttype: String,\n\t\tdefault: 'hover'\n\t},\n\t/**\n\t * 排除项\n\t */\n\texcept: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 背景颜色\n\t */\n\tmode: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 滚动模式\n\t */\n\ttype: {\n\t\ttype: String,\n\t\tdefault: ''\n\t}\n}\n\nexport type ScrollProps = ExtractPropTypes<typeof scrollProps>\n\nexport interface ScrollInstance {\n\t/**\n\t * 滚动到指定位置\n\t */\n\tscrollTo: (options: ScrollToOptions | number, yCoord?: number) => void\n\t/**\n\t * 滚动到指定元素\n\t */\n\tscrollToElement: (element: HTMLElement | null, offset?: number) => void\n\t/**\n\t * 按步长滚动\n\t */\n\tscrollStep: (direction: 'up' | 'down' | 'left' | 'right') => void\n\t/**\n\t * 滚动容器元素\n\t */\n\tscrollRef: HTMLElement | null\n\t/**\n\t * 是否正在滚动\n\t */\n\tisScrolling: boolean\n\t/**\n\t * 滚动到指定目标\n\t */\n\tto: (target: HTMLElement | string | number | any) => void\n}\n\n/**\n * Scroll组件提供给子组件的上下文接口\n */\nexport interface ScrollContext {\n\t/**\n\t * 注册滚动点\n\t */\n\tregisterScrollPoint: (el: HTMLElement, value: string | number) => void\n}\n"],"names":[],"mappings":"AAEO,MAAM,WAAc,GAAA;AAAA,EAC1B,IAAM,EAAA,OAAA;AAAA;AAAA;AAAA;AAAA,EAIN,OAAS,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,KAAO,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,GAAK,EAAA;AAAA,IACJ,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACX,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAO,EAAA;AAAA,IACN,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,OAAS,EAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,eAAiB,EAAA;AAAA,IAChB,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,OAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,IAAM,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,IAAM,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"scroll.mjs","sources":["../../../../../../packages/components/scroll/src/scroll.ts"],"sourcesContent":["import { ExtractPropTypes } from 'vue'\n\nexport const scrollProps = {\n\tflex: Boolean,\n\t/**\n\t * 是否使用模拟滚动条\n\t */\n\tvirtual: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t},\n\t/**\n\t * 滚动幅度(仅模拟滚动条支持)\n\t */\n\tspeed: {\n\t\ttype: Number,\n\t\tdefault: 10\n\t},\n\t/**\n\t * 顶部间距\n\t */\n\ttop: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 双向绑定的滚动位置,支持v-model\n\t */\n\tmodelValue: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 兼容旧版本,等同于modelValue\n\t * @deprecated 推荐使用modelValue\n\t */\n\tvalue: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 内边距\n\t */\n\tpadding: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t},\n\t/**\n\t * 内边距位置\n\t */\n\tpaddingPosition: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 底部间距\n\t */\n\tbottom: {\n\t\ttype: [Number, String],\n\t\tdefault: 0\n\t},\n\t/**\n\t * 高度\n\t */\n\theight: {\n\t\ttype: [String, Number],\n\t\tdefault: ''\n\t},\n\t/**\n\t * 滚动条显示方式\n\t */\n\tbarDisplay: {\n\t\ttype: String,\n\t\tdefault: 'hover'\n\t},\n\t/**\n\t * 排除项\n\t */\n\texcept: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 背景颜色\n\t */\n\tmode: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 滚动模式\n\t */\n\ttype: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\t/**\n\t * 是否隐藏\n\t */\n\thide: {\n\t\ttype: Boolean,\n\t\tdefault: false\n\t}\n}\n\nexport type ScrollProps = ExtractPropTypes<typeof scrollProps>\n\nexport interface ScrollInstance {\n\t/**\n\t * 滚动到指定位置\n\t */\n\tscrollTo: (options: ScrollToOptions | number, yCoord?: number) => void\n\t/**\n\t * 滚动到指定元素\n\t */\n\tscrollToElement: (element: HTMLElement | null, offset?: number) => void\n\t/**\n\t * 按步长滚动\n\t */\n\tscrollStep: (direction: 'up' | 'down' | 'left' | 'right') => void\n\t/**\n\t * 滚动容器元素\n\t */\n\tscrollRef: HTMLElement | null\n\t/**\n\t * 是否正在滚动\n\t */\n\tisScrolling: boolean\n\t/**\n\t * 滚动到指定目标\n\t */\n\tto: (target: HTMLElement | string | number | any) => void\n}\n\n/**\n * Scroll组件提供给子组件的上下文接口\n */\nexport interface ScrollContext {\n\t/**\n\t * 注册滚动点\n\t */\n\tregisterScrollPoint: (el: HTMLElement, value: string | number) => void\n}\n"],"names":[],"mappings":"AAEO,MAAM,WAAc,GAAA;AAAA,EAC1B,IAAM,EAAA,OAAA;AAAA;AAAA;AAAA;AAAA,EAIN,OAAS,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,KAAO,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,GAAK,EAAA;AAAA,IACJ,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACX,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAO,EAAA;AAAA,IACN,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,OAAS,EAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,eAAiB,EAAA;AAAA,IAChB,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,CAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,OAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AAAA,IACP,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,IAAM,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,IAAM,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACV;AAAA;AAAA;AAAA;AAAA,EAIA,IAAM,EAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACV;AACD;;;;"}
|