sard 1.0.4 → 1.0.6
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/components/action-sheet/action-sheet-item.js +6 -4
- package/components/avatar/index.css +1 -1
- package/components/badge/index.css +1 -1
- package/components/button/index.css +1 -1
- package/components/cascader/cascader.js +2 -2
- package/components/cascader/common.d.ts +1 -1
- package/components/cascader/common.js +4 -4
- package/components/cascader/useCascaderTree.d.ts +1 -1
- package/components/cascader/useCascaderTree.js +1 -1
- package/components/cascader-input/cascader-input.js +3 -3
- package/components/compact/compact.js +1 -1
- package/components/cool-icon/cool-icon.js +1 -1
- package/components/descriptions/descriptions-item.js +1 -1
- package/components/divider/divider.js +1 -1
- package/components/divider/index.css +1 -1
- package/components/dnd/dnd-handle.js +1 -1
- package/components/dnd/dnd-item.js +1 -1
- package/components/fab/fab-item.js +1 -1
- package/components/form/form-item.js +1 -1
- package/components/form/form.js +1 -1
- package/components/image/image.js +1 -1
- package/components/infinite-list/index.css +1 -1
- package/components/infinite-list/infinite-list.js +3 -3
- package/components/input/input.js +13 -13
- package/components/keyboard/keyboard.js +3 -3
- package/components/load-more/useLoadMore.d.ts +1 -1
- package/components/load-more/useLoadMore.js +2 -2
- package/components/loading/index.css +1 -1
- package/components/loading/loading.js +2 -2
- package/components/notify/notify.js +6 -6
- package/components/picker/common.d.ts +4 -4
- package/components/picker/common.js +12 -12
- package/components/picker/picker.js +22 -47
- package/components/picker-input/picker-input.js +3 -3
- package/components/picker-popout/picker-popout.js +2 -2
- package/components/picker-view/common.d.ts +0 -1
- package/components/picker-view/picker-view-column.js +38 -36
- package/components/picker-view/picker-view.js +3 -13
- package/components/preview-image/preview-image.js +1 -1
- package/components/pull-down-refresh/pull-down-refresh.js +1 -1
- package/components/puzzle-verify/puzzle-verify.js +1 -1
- package/components/rate/index.css +1 -1
- package/components/read-more/read-more.js +1 -1
- package/components/rotate-verify/rotate-verify.js +1 -1
- package/components/segmented/segmented-item.js +1 -1
- package/components/segmented/segmented.js +1 -1
- package/components/select/common.d.ts +2 -0
- package/components/select/select-option.js +1 -1
- package/components/select/select.d.ts +3 -0
- package/components/select/select.js +11 -2
- package/components/select-input/select-input.d.ts +1 -0
- package/components/select-input/select-input.js +4 -0
- package/components/select-popout/select-popout.d.ts +1 -0
- package/components/select-popout/select-popout.js +4 -0
- package/components/share-sheet/index.css +1 -1
- package/components/slide-verify/slide-verify.js +1 -1
- package/components/status-bar/common.d.ts +0 -1
- package/components/status-bar/status-bar.d.ts +1 -3
- package/components/status-bar/status-bar.js +3 -9
- package/components/steps/step.js +1 -1
- package/components/style/index.css +1 -1
- package/components/swipe-action/swipe-action.js +1 -3
- package/components/tabbar-pit/tabbar-pit.js +1 -1
- package/components/toast/toast.js +6 -6
- package/components/tree/tree.js +3 -3
- package/components/upload/upload.js +1 -1
- package/components/waterfall/waterfall-item.js +1 -1
- package/components/waterfall/waterfall-load.js +1 -1
- package/components/waterfall/waterfall.js +4 -4
- package/components/watermark/watermark.js +1 -1
- package/index.css +1 -1
- package/package.json +1 -1
- package/use/useResizeObserver.js +3 -3
- package/utils/scroller/Scroll.js +2 -2
- package/utils/scroller/useScroller.d.ts +4 -20
- package/utils/scroller/useScroller.js +24 -84
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { createBem } from "../../utils/bem.js";
|
|
2
|
-
import { isEmptyArray } from "../../utils/is.js";
|
|
3
|
-
import { isEmptyBinding } from "../../utils/utils.js";
|
|
4
2
|
import { nestedToMulti } from "../../utils/object.js";
|
|
5
3
|
import { arrayEqual, toArray } from "../../utils/array.js";
|
|
6
4
|
import { useOptionKeys } from "../../use/useOptionKeys.js";
|
|
7
5
|
import { defaultPickerProps, getCascaderValidIndexes, getColumnsType, getIndexesByValue, getMaySingleValueByOptions, getOptionsByIndexes } from "./common.js";
|
|
8
6
|
import picker_view_default from "../picker-view/picker-view.js";
|
|
9
7
|
import picker_view_column_default from "../picker-view/picker-view-column.js";
|
|
10
|
-
import { Fragment, computed, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, mergeDefaults,
|
|
8
|
+
import { Fragment, computed, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, mergeDefaults, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useSlots, watch, withCtx } from "vue";
|
|
11
9
|
//#region packages/sard/components/picker/picker.vue
|
|
12
10
|
var picker_default = /*@__PURE__*/ defineComponent({
|
|
13
11
|
__name: "picker",
|
|
@@ -31,37 +29,34 @@ var picker_default = /*@__PURE__*/ defineComponent({
|
|
|
31
29
|
useSlots();
|
|
32
30
|
const emit = __emit;
|
|
33
31
|
const bem = createBem("picker");
|
|
34
|
-
const
|
|
35
|
-
const { aliasProps, getLabel } = useOptionKeysReturn;
|
|
36
|
-
const columnsType = computed(() => {
|
|
37
|
-
return getColumnsType(props.columns, useOptionKeysReturn);
|
|
38
|
-
});
|
|
32
|
+
const optionKeys = useOptionKeys(props);
|
|
39
33
|
const innerValue = ref(props.modelValue);
|
|
40
34
|
watch(() => props.modelValue, () => {
|
|
41
35
|
innerValue.value = props.modelValue;
|
|
42
36
|
});
|
|
37
|
+
const columnsType = computed(() => {
|
|
38
|
+
return getColumnsType(props.columns, optionKeys);
|
|
39
|
+
});
|
|
43
40
|
const columnIndexes = ref([]);
|
|
44
|
-
const updateColumnIndexes = () => {
|
|
45
|
-
const indexes = getIndexesByValue(toArray(innerValue.value), props.columns, useOptionKeysReturn);
|
|
46
|
-
if (!arrayEqual(indexes, columnIndexes.value)) columnIndexes.value = indexes;
|
|
47
|
-
};
|
|
48
|
-
updateColumnIndexes();
|
|
49
41
|
watch([
|
|
50
42
|
innerValue,
|
|
51
43
|
() => props.columns,
|
|
52
|
-
aliasProps
|
|
44
|
+
optionKeys.aliasProps
|
|
53
45
|
], () => {
|
|
54
|
-
|
|
46
|
+
const indexes = getIndexesByValue(toArray(innerValue.value), props.columns, optionKeys);
|
|
47
|
+
if (!arrayEqual(indexes, columnIndexes.value)) columnIndexes.value = indexes;
|
|
48
|
+
}, { immediate: true });
|
|
49
|
+
const renderedColumns = computed(() => {
|
|
50
|
+
switch (columnsType.value) {
|
|
51
|
+
case "single": return [props.columns];
|
|
52
|
+
case "multi": return props.columns;
|
|
53
|
+
case "cascader": return nestedToMulti(props.columns, toArray(innerValue.value), optionKeys);
|
|
54
|
+
default: return [];
|
|
55
|
+
}
|
|
55
56
|
});
|
|
56
57
|
const onChange = (value) => {
|
|
57
58
|
if (!props.columns || props.columns.length === 0) return;
|
|
58
59
|
let indexes = value;
|
|
59
|
-
if (indexes.some((index) => index === Infinity)) {
|
|
60
|
-
nextTick(() => {
|
|
61
|
-
columnIndexes.value = isEmptyBinding(innerValue.value) || isEmptyArray(innerValue.value) ? columnIndexes.value.map(() => 0) : [...columnIndexes.value];
|
|
62
|
-
});
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
60
|
indexes = renderedColumns.value.map((_, index) => indexes[index] || 0);
|
|
66
61
|
if (columnsType.value === "cascader") {
|
|
67
62
|
let startIndex = -1;
|
|
@@ -72,42 +67,22 @@ var picker_default = /*@__PURE__*/ defineComponent({
|
|
|
72
67
|
}
|
|
73
68
|
indexes = nextIndexes;
|
|
74
69
|
{
|
|
75
|
-
const validIndexes = getCascaderValidIndexes(indexes, props.columns,
|
|
70
|
+
const validIndexes = getCascaderValidIndexes(indexes, props.columns, optionKeys);
|
|
76
71
|
if (!arrayEqual(indexes, validIndexes)) indexes = validIndexes;
|
|
77
72
|
}
|
|
78
73
|
}
|
|
79
|
-
const selectedOptions = getOptionsByIndexes(indexes, props.columns,
|
|
74
|
+
const selectedOptions = getOptionsByIndexes(indexes, props.columns, optionKeys);
|
|
80
75
|
if (!arrayEqual(indexes, columnIndexes.value)) columnIndexes.value = indexes;
|
|
81
|
-
const nextValue = getMaySingleValueByOptions(selectedOptions,
|
|
76
|
+
const nextValue = getMaySingleValueByOptions(selectedOptions, optionKeys, props.columns);
|
|
82
77
|
innerValue.value = nextValue;
|
|
83
78
|
emit("update:modelValue", nextValue, selectedOptions, indexes);
|
|
84
79
|
emit("change", nextValue, selectedOptions, indexes);
|
|
85
80
|
};
|
|
86
|
-
const
|
|
87
|
-
switch (columnsType.value) {
|
|
88
|
-
case "single": return [props.columns];
|
|
89
|
-
case "multi": return props.columns;
|
|
90
|
-
case "cascader": return nestedToMulti(props.columns, toArray(innerValue.value), useOptionKeysReturn);
|
|
91
|
-
default: return [];
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
const renderedColumns = ref(getRenderedColumns());
|
|
95
|
-
const updateRenderedColumns = () => {
|
|
96
|
-
renderedColumns.value = getRenderedColumns();
|
|
97
|
-
};
|
|
98
|
-
watch([() => props.columns, innerValue], ([newColumns, newValue], [oldColumns, oldValue]) => {
|
|
99
|
-
if (newColumns !== oldColumns || newValue !== oldValue && columnsType.value === "cascader" && !isEmptyBinding(newValue) && !isEmptyArray(newValue)) updateRenderedColumns();
|
|
100
|
-
});
|
|
101
|
-
watch(() => props.modelValue, () => {
|
|
102
|
-
if (isEmptyBinding(props.modelValue) || isEmptyArray(props.modelValue)) {
|
|
103
|
-
updateColumnIndexes();
|
|
104
|
-
updateRenderedColumns();
|
|
105
|
-
}
|
|
106
|
-
});
|
|
81
|
+
const pickerClass = bem.b();
|
|
107
82
|
const pickerViewClass = bem.e("picker-view");
|
|
108
83
|
const indicatorClass = bem.e("indicator");
|
|
109
84
|
return (_ctx, _cache) => {
|
|
110
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(
|
|
85
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(pickerClass)) }, [createVNode(unref(picker_view_default), {
|
|
111
86
|
class: normalizeClass(unref(pickerViewClass)),
|
|
112
87
|
"indicator-class": unref(indicatorClass),
|
|
113
88
|
value: columnIndexes.value,
|
|
@@ -123,7 +98,7 @@ var picker_default = /*@__PURE__*/ defineComponent({
|
|
|
123
98
|
option,
|
|
124
99
|
rowIndex: j,
|
|
125
100
|
columnIndex: i
|
|
126
|
-
}, () => [createTextVNode(toDisplayString(unref(getLabel
|
|
101
|
+
}, () => [createTextVNode(toDisplayString(unref(optionKeys).getLabel(option)), 1)])], 2);
|
|
127
102
|
}), 128))]),
|
|
128
103
|
_: 2
|
|
129
104
|
}, 1024);
|
|
@@ -96,15 +96,15 @@ var picker_input_default = /*@__PURE__*/ defineComponent({
|
|
|
96
96
|
const props = __props;
|
|
97
97
|
const slots = useSlots();
|
|
98
98
|
const emit = __emit;
|
|
99
|
-
const
|
|
99
|
+
const optionKeys = useOptionKeys(props);
|
|
100
100
|
const partitionedProps = partitionPopoutInputProps(props);
|
|
101
101
|
const { innerVisible, innerValue, inputValue, show, onChange, onClear, onVisibleHook } = usePopoutInput(props, emit);
|
|
102
|
-
const { getLabel } =
|
|
102
|
+
const { getLabel } = optionKeys;
|
|
103
103
|
const onClick = () => {
|
|
104
104
|
if (props.columns && props.columns.length > 0) show();
|
|
105
105
|
};
|
|
106
106
|
function getOutletText(columns, value) {
|
|
107
|
-
return getOptionsByIndexes(getIndexesByValue(toArray(value), columns || [],
|
|
107
|
+
return getOptionsByIndexes(getIndexesByValue(toArray(value), columns || [], optionKeys), columns || [], optionKeys).map((option) => getLabel(option)).join("/");
|
|
108
108
|
}
|
|
109
109
|
function getInputValue() {
|
|
110
110
|
if (isEmptyBinding(innerValue.value) || isEmptyArray(innerValue.value)) return "";
|
|
@@ -63,11 +63,11 @@ var picker_popout_default = /*@__PURE__*/ defineComponent({
|
|
|
63
63
|
const props = __props;
|
|
64
64
|
const slots = useSlots();
|
|
65
65
|
const emit = __emit;
|
|
66
|
-
const
|
|
66
|
+
const optionKeys = useOptionKeys(props);
|
|
67
67
|
const omittedProps = omitFormPopoutProps(props);
|
|
68
68
|
const { innerVisible, innerValue, draftValue, onChange, onConfirm, onVisibleHook } = useFormPopout(props, emit, { onConfirmBefore() {
|
|
69
69
|
if (isEmptyBinding(draftValue.value) || isEmptyArray(draftValue.value)) {
|
|
70
|
-
const [initialValue, selectedOptions] = getInitialValue(props.columns,
|
|
70
|
+
const [initialValue, selectedOptions] = getInitialValue(props.columns, optionKeys);
|
|
71
71
|
draftValue.value = initialValue;
|
|
72
72
|
return [selectedOptions];
|
|
73
73
|
}
|
|
@@ -46,7 +46,6 @@ export interface PickerViewContext {
|
|
|
46
46
|
maskClass: any;
|
|
47
47
|
indicatorClass: any;
|
|
48
48
|
indicatorStyle: any;
|
|
49
|
-
height: number;
|
|
50
49
|
getColumnValue: (ins: ComponentInternalInstance) => WritableComputedRef<number>;
|
|
51
50
|
}
|
|
52
51
|
export declare const pickerViewContextKey: InjectionKey<PickerViewContext>;
|
|
@@ -7,26 +7,26 @@ import { usePointerDown } from "../../use/usePointerDown.js";
|
|
|
7
7
|
import { useResizeObserver } from "../../use/useResizeObserver.js";
|
|
8
8
|
import { useScroller } from "../../utils/scroller/useScroller.js";
|
|
9
9
|
import { pickerViewContextKey } from "./common.js";
|
|
10
|
-
import { computed, createVNode, getCurrentInstance, inject,
|
|
10
|
+
import { computed, createVNode, getCurrentInstance, inject, ref, watch, watchPostEffect } from "vue";
|
|
11
11
|
//#region packages/sard/components/picker-view/picker-view-column.tsx
|
|
12
12
|
var picker_view_column_default = defineSetupFnComponent((_props, { slots }) => {
|
|
13
13
|
const bem = createBem("picker-view-column");
|
|
14
|
+
const instance = getCurrentInstance();
|
|
14
15
|
const rootRef = ref(null);
|
|
15
16
|
const contentRef = ref(null);
|
|
16
|
-
const
|
|
17
|
+
const indicatorRef = ref(null);
|
|
17
18
|
const context = inject(pickerViewContextKey);
|
|
18
19
|
const columnValue = context.getColumnValue(instance);
|
|
19
20
|
const itemCount = ref(0);
|
|
20
|
-
const
|
|
21
|
-
useResizeObserver(
|
|
22
|
-
|
|
21
|
+
const rootSize = useResizeObserver(rootRef);
|
|
22
|
+
const contentSize = useResizeObserver(contentRef);
|
|
23
|
+
const indicatorSize = useResizeObserver(indicatorRef);
|
|
24
|
+
const maskSize = computed(() => (rootSize.height - indicatorSize.height) / 2);
|
|
25
|
+
const contentHeight = computed(() => {
|
|
26
|
+
return contentSize.height + maskSize.value * 2;
|
|
23
27
|
});
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
enableY: true,
|
|
27
|
-
enableX: false,
|
|
28
|
-
enableSnap: true,
|
|
29
|
-
itemSize: indicatorHeight.value,
|
|
28
|
+
const { position, update, scrollTo, isIdle, handleTouchStart, handleTouchMove, handleTouchEnd } = useScroller({
|
|
29
|
+
itemSize: indicatorSize.height,
|
|
30
30
|
friction: new Friction(1e-4),
|
|
31
31
|
spring: new Spring(2, 90, 20),
|
|
32
32
|
onSnap: (index) => {
|
|
@@ -36,27 +36,29 @@ var picker_view_column_default = defineSetupFnComponent((_props, { slots }) => {
|
|
|
36
36
|
handleTap(event);
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
-
let
|
|
40
|
-
function updatesScroller() {
|
|
41
|
-
if (!updatesScrollerRequest && indicatorHeight.value) {
|
|
42
|
-
updatesScrollerRequest = true;
|
|
43
|
-
nextTick(() => {
|
|
44
|
-
updatesScrollerRequest = false;
|
|
45
|
-
const current = Math.max(Math.min(columnValue.value, itemCount.value - 1), 0);
|
|
46
|
-
update(current * indicatorHeight.value, void 0, indicatorHeight.value);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
39
|
+
let updatePending = false;
|
|
50
40
|
watch([
|
|
51
|
-
|
|
41
|
+
() => indicatorSize.height,
|
|
42
|
+
columnValue,
|
|
52
43
|
itemCount,
|
|
53
|
-
() =>
|
|
54
|
-
|
|
44
|
+
() => rootSize.height,
|
|
45
|
+
contentHeight
|
|
55
46
|
], () => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
if (updatePending) return;
|
|
48
|
+
updatePending = true;
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
updatePending = false;
|
|
51
|
+
if (indicatorSize.height) {
|
|
52
|
+
const current = Math.max(Math.min(columnValue.value, itemCount.value - 1), 0);
|
|
53
|
+
update(current * indicatorSize.height, indicatorSize.height, rootSize.height, contentHeight.value);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}, { flush: "post" });
|
|
57
|
+
watchPostEffect(() => {
|
|
58
|
+
const el = contentRef.value;
|
|
59
|
+
if (!el) return;
|
|
60
|
+
const transform = "translateY(" + position.value + "px) translateZ(0)";
|
|
61
|
+
el.style.transform = transform;
|
|
60
62
|
});
|
|
61
63
|
let oldDeltaY = 0;
|
|
62
64
|
function handleWheel(event) {
|
|
@@ -65,21 +67,21 @@ var picker_view_column_default = defineSetupFnComponent((_props, { slots }) => {
|
|
|
65
67
|
oldDeltaY = 0;
|
|
66
68
|
let current = Math.min(columnValue.value + (deltaY < 0 ? -1 : 1), itemCount.value - 1);
|
|
67
69
|
columnValue.value = current = Math.max(current, 0);
|
|
68
|
-
scrollTo(current *
|
|
70
|
+
scrollTo(current * indicatorSize.height);
|
|
69
71
|
} else oldDeltaY = deltaY;
|
|
70
72
|
event.preventDefault();
|
|
71
73
|
}
|
|
72
74
|
function handleTap({ changedTouches: [{ clientY }] }) {
|
|
73
75
|
const el = rootRef.value;
|
|
74
76
|
if (isIdle()) {
|
|
75
|
-
const r = clientY - el.getBoundingClientRect().top -
|
|
76
|
-
const o =
|
|
77
|
+
const r = clientY - el.getBoundingClientRect().top - rootSize.height / 2;
|
|
78
|
+
const o = indicatorSize.height / 2;
|
|
77
79
|
if (!(Math.abs(r) <= o)) {
|
|
78
|
-
const a = Math.ceil((Math.abs(r) - o) /
|
|
80
|
+
const a = Math.ceil((Math.abs(r) - o) / indicatorSize.height);
|
|
79
81
|
const s = r < 0 ? -a : a;
|
|
80
82
|
let current = Math.min(columnValue.value + s, itemCount.value - 1);
|
|
81
83
|
columnValue.value = current = Math.max(current, 0);
|
|
82
|
-
scrollTo(current *
|
|
84
|
+
scrollTo(current * indicatorSize.height);
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
}
|
|
@@ -115,7 +117,7 @@ var picker_view_column_default = defineSetupFnComponent((_props, { slots }) => {
|
|
|
115
117
|
"style": [`background-size: 100% ${maskSize.value}px;`, context.maskStyle]
|
|
116
118
|
}, null),
|
|
117
119
|
createVNode("div", {
|
|
118
|
-
"ref":
|
|
120
|
+
"ref": indicatorRef,
|
|
119
121
|
"class": [bem.e("indicator"), context.indicatorClass],
|
|
120
122
|
"style": context.indicatorStyle
|
|
121
123
|
}, null),
|
|
@@ -124,7 +126,7 @@ var picker_view_column_default = defineSetupFnComponent((_props, { slots }) => {
|
|
|
124
126
|
"class": [bem.e("content")],
|
|
125
127
|
"style": {
|
|
126
128
|
padding,
|
|
127
|
-
"--picker-view-indicator-height": `${
|
|
129
|
+
"--picker-view-indicator-height": `${indicatorSize.height}px`
|
|
128
130
|
}
|
|
129
131
|
}, [defaultSlots])
|
|
130
132
|
])]);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { createBem } from "../../utils/bem.js";
|
|
2
2
|
import { flatVNode } from "../../utils/vnode.js";
|
|
3
3
|
import { defineSetupFnComponent } from "../../utils/component.js";
|
|
4
|
-
import { useResizeObserver } from "../../use/useResizeObserver.js";
|
|
5
4
|
import { pickerViewContextKey, pickerViewProps } from "./common.js";
|
|
6
|
-
import { computed, createVNode, provide, reactive, ref, toRef,
|
|
5
|
+
import { computed, createVNode, provide, reactive, ref, toRef, watch } from "vue";
|
|
7
6
|
//#region packages/sard/components/picker-view/picker-view.tsx
|
|
8
7
|
var picker_view_default = defineSetupFnComponent((props, { slots, emit }) => {
|
|
9
8
|
const bem = createBem("picker-view");
|
|
10
|
-
const rootRef = useTemplateRef("root");
|
|
11
9
|
const innerValue = reactive([...props.value]);
|
|
12
10
|
watch(() => props.value, (value) => {
|
|
13
11
|
innerValue.length = value.length;
|
|
@@ -30,32 +28,24 @@ var picker_view_default = defineSetupFnComponent((props, { slots, emit }) => {
|
|
|
30
28
|
if (index < 0) return;
|
|
31
29
|
if (innerValue[index] !== current) {
|
|
32
30
|
innerValue[index] = current;
|
|
33
|
-
const value = innerValue
|
|
31
|
+
const value = [...innerValue];
|
|
34
32
|
emit("update:value", value);
|
|
35
33
|
emit("change", value);
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
});
|
|
39
37
|
};
|
|
40
|
-
const height = ref(48);
|
|
41
|
-
useResizeObserver(rootRef, (size) => {
|
|
42
|
-
height.value = size.height;
|
|
43
|
-
});
|
|
44
38
|
provide(pickerViewContextKey, reactive({
|
|
45
39
|
maskStyle: toRef(() => props.maskStyle),
|
|
46
40
|
maskClass: toRef(() => props.maskClass),
|
|
47
41
|
indicatorClass: toRef(() => props.indicatorClass),
|
|
48
42
|
indicatorStyle: toRef(() => props.indicatorStyle),
|
|
49
|
-
height,
|
|
50
43
|
getColumnValue
|
|
51
44
|
}));
|
|
52
45
|
return () => {
|
|
53
46
|
const defaultSlots = slots.default && slots.default();
|
|
54
47
|
columnsRef.value = flatVNode(defaultSlots);
|
|
55
|
-
return createVNode("div", {
|
|
56
|
-
"ref": "root",
|
|
57
|
-
"class": bem.b()
|
|
58
|
-
}, [createVNode("div", { "class": bem.e("wrapper") }, [defaultSlots])]);
|
|
48
|
+
return createVNode("div", { "class": bem.b() }, [createVNode("div", { "class": bem.e("wrapper") }, [defaultSlots])]);
|
|
59
49
|
};
|
|
60
50
|
}, {
|
|
61
51
|
name: "PickerView",
|
|
@@ -52,7 +52,6 @@ var preview_image_default = /*@__PURE__*/ defineComponent({
|
|
|
52
52
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
53
53
|
const props = __props;
|
|
54
54
|
const emit = __emit;
|
|
55
|
-
__expose({});
|
|
56
55
|
const bem = createBem("preview-image");
|
|
57
56
|
const innerVisible = useModel(props, "visible");
|
|
58
57
|
const visibleTimer = useTimeout();
|
|
@@ -132,6 +131,7 @@ var preview_image_default = /*@__PURE__*/ defineComponent({
|
|
|
132
131
|
};
|
|
133
132
|
});
|
|
134
133
|
const current = useModel(props, "current");
|
|
134
|
+
__expose({});
|
|
135
135
|
return (_ctx, _cache) => {
|
|
136
136
|
return openBlock(), createBlock(popup_default, {
|
|
137
137
|
effect: "full-fade",
|
|
@@ -115,7 +115,6 @@ var pull_down_refresh_default = /*@__PURE__*/ defineComponent({
|
|
|
115
115
|
const enableToRefresh = (can) => {
|
|
116
116
|
canRefresh.value = can;
|
|
117
117
|
};
|
|
118
|
-
__expose({ enableToRefresh });
|
|
119
118
|
const pullDownRefreshStyle = computed(() => {
|
|
120
119
|
return {
|
|
121
120
|
transform: `translate3d(0,${translateY.value}px,0)`,
|
|
@@ -125,6 +124,7 @@ var pull_down_refresh_default = /*@__PURE__*/ defineComponent({
|
|
|
125
124
|
const headerStyle = computed(() => {
|
|
126
125
|
return { height: props.headerHeight + "px" };
|
|
127
126
|
});
|
|
127
|
+
__expose({ enableToRefresh });
|
|
128
128
|
return (_ctx, _cache) => {
|
|
129
129
|
return openBlock(), createElementBlock("div", {
|
|
130
130
|
class: normalizeClass(unref(bem).b()),
|
|
@@ -89,7 +89,6 @@ var puzzle_verify_default = /*@__PURE__*/ defineComponent({
|
|
|
89
89
|
emit("end", event);
|
|
90
90
|
isDown.value = false;
|
|
91
91
|
};
|
|
92
|
-
__expose({ reset });
|
|
93
92
|
const puzzleVerifyClass = computed(() => {
|
|
94
93
|
return [bem.b(), bem.m("down", isDown.value)];
|
|
95
94
|
});
|
|
@@ -101,6 +100,7 @@ var puzzle_verify_default = /*@__PURE__*/ defineComponent({
|
|
|
101
100
|
"--padding-top": 1 / aspectRatio.value * 100 + "%"
|
|
102
101
|
};
|
|
103
102
|
});
|
|
103
|
+
__expose({ reset });
|
|
104
104
|
return (_ctx, _cache) => {
|
|
105
105
|
return openBlock(), createElementBlock("div", {
|
|
106
106
|
class: normalizeClass(puzzleVerifyClass.value),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--s-rate-gap:var(--s-size-xs);--s-rate-star-font-size:var(--s-size-lg);--s-rate-void-star-color:var(--s-text-color-fourth);--s-rate-star-color:var(--s-color-warning)}.s-rate{display:inline-flex;-webkit-user-select:none;user-select:none}.s-rate__content{display:flex;gap:var(--s-rate-gap);touch-action:pan-y}.s-rate__item{position:relative;font-size:var(--s-rate-star-font-size);line-height:var(--s-line-height-none);cursor:pointer}.s-rate__item svg{flex:none}.s-rate__void-star{color:var(--s-rate-void-star-color)}.s-rate__star{position:absolute;top:0;inset-inline-start:0;display:flex;align-items:flex-start;width:0;overflow:hidden;color:var(--s-rate-star-color)}.s-rate--readonly,.s-rate--disabled{touch-action:auto}.s-rate--readonly .s-rate__item{cursor:unset}.s-rate--disabled .s-rate__void-star{color:var(--s-border-color-
|
|
1
|
+
:root{--s-rate-gap:var(--s-size-xs);--s-rate-star-font-size:var(--s-size-lg);--s-rate-void-star-color:var(--s-text-color-fourth);--s-rate-star-color:var(--s-color-warning)}.s-rate{display:inline-flex;-webkit-user-select:none;user-select:none}.s-rate__content{display:flex;gap:var(--s-rate-gap);touch-action:pan-y}.s-rate__item{position:relative;font-size:var(--s-rate-star-font-size);line-height:var(--s-line-height-none);cursor:pointer}.s-rate__item svg{flex:none}.s-rate__void-star{color:var(--s-rate-void-star-color)}.s-rate__star{position:absolute;top:0;inset-inline-start:0;display:flex;align-items:flex-start;width:0;overflow:hidden;color:var(--s-rate-star-color)}.s-rate--readonly,.s-rate--disabled{touch-action:auto}.s-rate--readonly .s-rate__item{cursor:unset}.s-rate--disabled .s-rate__void-star{color:var(--s-border-color-dark)}.s-rate--disabled .s-rate__star{color:var(--s-text-color-disabled)}.s-rate--disabled .s-rate__item{cursor:not-allowed}
|
|
@@ -86,13 +86,13 @@ var read_more_default = /*@__PURE__*/ defineComponent({
|
|
|
86
86
|
behavior: "instant"
|
|
87
87
|
});
|
|
88
88
|
};
|
|
89
|
-
__expose({});
|
|
90
89
|
const readMoreClass = computed(() => {
|
|
91
90
|
return [bem.b(), bem.m("close", !innerVisible.value)];
|
|
92
91
|
});
|
|
93
92
|
const contentStyle = computed(() => {
|
|
94
93
|
return { maxHeight: innerVisible.value ? "none" : props.maxHeight + "px" };
|
|
95
94
|
});
|
|
95
|
+
__expose({});
|
|
96
96
|
return (_ctx, _cache) => {
|
|
97
97
|
return openBlock(), createElementBlock("div", { class: normalizeClass(readMoreClass.value) }, [createElementVNode("div", {
|
|
98
98
|
ref: "content",
|
|
@@ -65,10 +65,10 @@ var rotate_verify_default = /*@__PURE__*/ defineComponent({
|
|
|
65
65
|
const reset = () => {
|
|
66
66
|
slideVerifyRef.value?.reset();
|
|
67
67
|
};
|
|
68
|
-
__expose({ reset });
|
|
69
68
|
const imageStyle = computed(() => {
|
|
70
69
|
return { transform: `rotate(${targetDegree.value}deg) rotate(${-slideDegree.value}deg)` };
|
|
71
70
|
});
|
|
71
|
+
__expose({ reset });
|
|
72
72
|
return (_ctx, _cache) => {
|
|
73
73
|
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(bem).b()) }, [createElementVNode("img", {
|
|
74
74
|
class: normalizeClass(unref(bem).e("image")),
|
|
@@ -48,7 +48,6 @@ var segmented_item_default = /*@__PURE__*/ defineComponent({
|
|
|
48
48
|
if (!isDisabled.value && !isReadonly.value) context.toggle(props.value);
|
|
49
49
|
emit("click", event);
|
|
50
50
|
};
|
|
51
|
-
__expose({});
|
|
52
51
|
const segmentedItemClass = computed(() => {
|
|
53
52
|
return [
|
|
54
53
|
bem.b(),
|
|
@@ -60,6 +59,7 @@ var segmented_item_default = /*@__PURE__*/ defineComponent({
|
|
|
60
59
|
bem.m(context.shape)
|
|
61
60
|
];
|
|
62
61
|
});
|
|
62
|
+
__expose({});
|
|
63
63
|
return (_ctx, _cache) => {
|
|
64
64
|
return openBlock(), createElementBlock("div", {
|
|
65
65
|
class: normalizeClass(segmentedItemClass.value),
|
|
@@ -94,7 +94,6 @@ var segmented_default = /*@__PURE__*/ defineComponent({
|
|
|
94
94
|
value: innerValue,
|
|
95
95
|
toggle
|
|
96
96
|
}));
|
|
97
|
-
__expose({});
|
|
98
97
|
const segmentedClass = computed(() => {
|
|
99
98
|
return [
|
|
100
99
|
bem.b(),
|
|
@@ -109,6 +108,7 @@ var segmented_default = /*@__PURE__*/ defineComponent({
|
|
|
109
108
|
"--offset": `${currentIndex.value * 100}%`
|
|
110
109
|
};
|
|
111
110
|
});
|
|
111
|
+
__expose({});
|
|
112
112
|
return (_ctx, _cache) => {
|
|
113
113
|
return openBlock(), createElementBlock("div", { class: normalizeClass(segmentedClass.value) }, [createElementVNode("div", { class: normalizeClass(unref(bem).e("wrapper")) }, [createElementVNode("div", {
|
|
114
114
|
class: normalizeClass(unref(bem).e("pointer")),
|
|
@@ -8,6 +8,7 @@ export interface SelectProps {
|
|
|
8
8
|
filterable?: boolean;
|
|
9
9
|
filterPlaceholder?: string;
|
|
10
10
|
filterMethod?: (query: string) => void;
|
|
11
|
+
filterValue?: string;
|
|
11
12
|
remote?: boolean;
|
|
12
13
|
remoteMethod?: (query: string, page: number, isRefresh: boolean) => Promise<boolean>;
|
|
13
14
|
threshold?: number;
|
|
@@ -36,6 +37,7 @@ export interface SelectEmits {
|
|
|
36
37
|
(e: 'update:modelValue', value: any): void;
|
|
37
38
|
(e: 'change', value: any): void;
|
|
38
39
|
(e: 'select', value: any): void;
|
|
40
|
+
(e: 'update:filter-value', value: string): void;
|
|
39
41
|
}
|
|
40
42
|
export interface SelectExpose {
|
|
41
43
|
}
|
|
@@ -59,7 +59,6 @@ var select_option_default = /*@__PURE__*/ defineComponent({
|
|
|
59
59
|
onUnmounted(() => {
|
|
60
60
|
removeMember(member);
|
|
61
61
|
});
|
|
62
|
-
__expose({});
|
|
63
62
|
const selectOptionClass = computed(() => {
|
|
64
63
|
return [
|
|
65
64
|
bem.b(),
|
|
@@ -68,6 +67,7 @@ var select_option_default = /*@__PURE__*/ defineComponent({
|
|
|
68
67
|
bem.is("plain", props.plain)
|
|
69
68
|
];
|
|
70
69
|
});
|
|
70
|
+
__expose({});
|
|
71
71
|
return (_ctx, _cache) => {
|
|
72
72
|
return openBlock(), createElementBlock("div", {
|
|
73
73
|
ref: "option",
|
|
@@ -4,10 +4,12 @@ declare const __VLS_base: import("vue").DefineComponent<SelectProps, SelectExpos
|
|
|
4
4
|
select: (value: any) => any;
|
|
5
5
|
change: (value: any) => any;
|
|
6
6
|
"update:modelValue": (value: any) => any;
|
|
7
|
+
"update:filter-value": (value: string) => any;
|
|
7
8
|
}, string, import("vue").PublicProps, Readonly<SelectProps> & Readonly<{
|
|
8
9
|
onSelect?: ((value: any) => any) | undefined;
|
|
9
10
|
onChange?: ((value: any) => any) | undefined;
|
|
10
11
|
"onUpdate:modelValue"?: ((value: any) => any) | undefined;
|
|
12
|
+
"onUpdate:filter-value"?: ((value: string) => any) | undefined;
|
|
11
13
|
}>, {
|
|
12
14
|
multiple: boolean;
|
|
13
15
|
options: any[];
|
|
@@ -18,6 +20,7 @@ declare const __VLS_base: import("vue").DefineComponent<SelectProps, SelectExpos
|
|
|
18
20
|
multipleLimit: number;
|
|
19
21
|
filterable: boolean;
|
|
20
22
|
filterMethod: (query: string) => void;
|
|
23
|
+
filterValue: string;
|
|
21
24
|
remote: boolean;
|
|
22
25
|
remoteMethod: (query: string, page: number, isRefresh: boolean) => Promise<boolean>;
|
|
23
26
|
showToolbar: boolean;
|
|
@@ -49,6 +49,10 @@ var select_default = /*@__PURE__*/ defineComponent({
|
|
|
49
49
|
type: Function,
|
|
50
50
|
required: false
|
|
51
51
|
},
|
|
52
|
+
filterValue: {
|
|
53
|
+
type: String,
|
|
54
|
+
required: false
|
|
55
|
+
},
|
|
52
56
|
remote: {
|
|
53
57
|
type: Boolean,
|
|
54
58
|
required: false
|
|
@@ -81,7 +85,8 @@ var select_default = /*@__PURE__*/ defineComponent({
|
|
|
81
85
|
emits: [
|
|
82
86
|
"update:modelValue",
|
|
83
87
|
"change",
|
|
84
|
-
"select"
|
|
88
|
+
"select",
|
|
89
|
+
"update:filter-value"
|
|
85
90
|
],
|
|
86
91
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
87
92
|
const props = __props;
|
|
@@ -113,9 +118,13 @@ var select_default = /*@__PURE__*/ defineComponent({
|
|
|
113
118
|
const scrollRef = useTemplateRef("scroll");
|
|
114
119
|
const scrollSide = useScrollSide(scrollRef, { direction: "vertical" });
|
|
115
120
|
const searchValue = ref("");
|
|
121
|
+
watch(() => props.filterValue, () => {
|
|
122
|
+
searchValue.value = String(props.filterValue ?? "");
|
|
123
|
+
});
|
|
116
124
|
watch(searchValue, () => {
|
|
117
125
|
props.filterMethod?.(searchValue.value);
|
|
118
126
|
debouncedRefresh();
|
|
127
|
+
if (searchValue.value !== props.filterValue) emit("update:filter-value", searchValue.value);
|
|
119
128
|
});
|
|
120
129
|
const { status, isLoading, onLoadMore, onReload, refresh } = useLoadMore({
|
|
121
130
|
root: scrollRef,
|
|
@@ -157,13 +166,13 @@ var select_default = /*@__PURE__*/ defineComponent({
|
|
|
157
166
|
usePopupEnter(() => {
|
|
158
167
|
scrollIntoView();
|
|
159
168
|
});
|
|
160
|
-
__expose({});
|
|
161
169
|
const containerClass = computed(() => {
|
|
162
170
|
return [bem.e("container"), bem.em("container", scrollSide.vertical)];
|
|
163
171
|
});
|
|
164
172
|
const scrollClass = computed(() => {
|
|
165
173
|
return [bem.e("scroll"), bem.em("scroll", "filterable", props.filterable)];
|
|
166
174
|
});
|
|
175
|
+
__expose({});
|
|
167
176
|
return (_ctx, _cache) => {
|
|
168
177
|
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(bem).b()) }, [
|
|
169
178
|
__props.filterable ? (openBlock(), createElementBlock("div", {
|
|
@@ -51,6 +51,7 @@ declare const __VLS_base: import("vue").DefineComponent<SelectInputProps, Select
|
|
|
51
51
|
multipleLimit: number;
|
|
52
52
|
filterable: boolean;
|
|
53
53
|
filterMethod: (query: string) => void;
|
|
54
|
+
filterValue: string;
|
|
54
55
|
remote: boolean;
|
|
55
56
|
remoteMethod: (query: string, page: number, isRefresh: boolean) => Promise<boolean>;
|
|
56
57
|
showToolbar: boolean;
|
|
@@ -43,6 +43,7 @@ declare const __VLS_base: import("vue").DefineComponent<SelectPopoutProps, Selec
|
|
|
43
43
|
multipleLimit: number;
|
|
44
44
|
filterable: boolean;
|
|
45
45
|
filterMethod: (query: string) => void;
|
|
46
|
+
filterValue: string;
|
|
46
47
|
remote: boolean;
|
|
47
48
|
remoteMethod: (query: string, page: number, isRefresh: boolean) => Promise<boolean>;
|
|
48
49
|
showToolbar: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--s-share-sheet-border-radius:var(--s-border-radius-xl);--s-share-sheet-border-color:var(--s-border-color);--s-share-sheet-bg:var(--s-bg-color-elevated);--s-share-sheet-header-padding:var(--s-size);--s-share-sheet-title-font-size:var(--s-font-size-lg);--s-share-sheet-description-font-size:var(--s-font-size);--s-share-sheet-description-color:var(--s-text-color-tertiary);--s-share-sheet-row-padding-y:var(--s-size);--s-share-sheet-row-padding-x:var(--s-size-xs);--s-share-sheet-item-width:80px;--s-share-sheet-item-opacity-active:var(--s-opacity-active);--s-share-sheet-icon-size:var(--s-size-4xl);--s-share-sheet-icon-radius:var(--s-border-radius-full);--s-share-sheet-icon-font-size:var(--s-size-xl);--s-share-sheet-icon-color:var(--s-text-color-tertiary);--s-share-sheet-icon-bg:var(--s-fill-color);--s-share-sheet-label-margin-top:var(--s-size-xs);--s-share-sheet-label-padding-x:var(--s-size-2xs);--s-share-sheet-label-font-size:var(--s-font-size);--s-share-sheet-label-color:var(--s-text-color-tertiary);--s-share-sheet-item-description-margin-top:0;--s-share-sheet-item-description-padding-x:var(--s-size-2xs);--s-share-sheet-item-description-font-size:var(--s-font-size-sm);--s-share-sheet-item-description-color:var(--s-text-color-fourth);--s-share-sheet-gap-bg:var(--s-fill-color-
|
|
1
|
+
:root{--s-share-sheet-border-radius:var(--s-border-radius-xl);--s-share-sheet-border-color:var(--s-border-color);--s-share-sheet-bg:var(--s-bg-color-elevated);--s-share-sheet-header-padding:var(--s-size);--s-share-sheet-title-font-size:var(--s-font-size-lg);--s-share-sheet-description-font-size:var(--s-font-size);--s-share-sheet-description-color:var(--s-text-color-tertiary);--s-share-sheet-row-padding-y:var(--s-size);--s-share-sheet-row-padding-x:var(--s-size-xs);--s-share-sheet-item-width:80px;--s-share-sheet-item-opacity-active:var(--s-opacity-active);--s-share-sheet-icon-size:var(--s-size-4xl);--s-share-sheet-icon-radius:var(--s-border-radius-full);--s-share-sheet-icon-font-size:var(--s-size-xl);--s-share-sheet-icon-color:var(--s-text-color-tertiary);--s-share-sheet-icon-bg:var(--s-fill-color);--s-share-sheet-label-margin-top:var(--s-size-xs);--s-share-sheet-label-padding-x:var(--s-size-2xs);--s-share-sheet-label-font-size:var(--s-font-size);--s-share-sheet-label-color:var(--s-text-color-tertiary);--s-share-sheet-item-description-margin-top:0;--s-share-sheet-item-description-padding-x:var(--s-size-2xs);--s-share-sheet-item-description-font-size:var(--s-font-size-sm);--s-share-sheet-item-description-color:var(--s-text-color-fourth);--s-share-sheet-gap-bg:var(--s-fill-color-fourth);--s-share-sheet-gap-height:var(--s-size-xs);--s-share-sheet-cancel-min-height:var(--s-content-height-lg);--s-share-sheet-cancel-padding:var(--s-size-xs) var(--s-size);--s-share-sheet-cancel-font-size:var(--s-font-size-lg);--s-share-sheet-cancel-bg-active:var(--s-bg-color-active)}.s-share-sheet{padding-bottom:var(--s-safe-bottom);border-top-left-radius:var(--s-share-sheet-border-radius);border-top-right-radius:var(--s-share-sheet-border-radius);background:var(--s-share-sheet-bg);touch-action:pan-x}.s-share-sheet__header{position:relative;display:flex;flex-direction:column;gap:var(--s-size-2xs);padding:var(--s-share-sheet-header-padding)}.s-share-sheet__header::after{position:absolute;z-index:1;pointer-events:none;touch-action:none;opacity:1;content:"";left:0;right:0;transform:scaleY(0.5);bottom:0;border-bottom:var(--s-border-width) var(--s-border-style) var(--s-share-sheet-border-color);transform-origin:bottom center}.s-share-sheet__title{font-size:var(--s-share-sheet-title-font-size);font-weight:var(--s-font-weight-bold);text-align:center}.s-share-sheet__description{font-size:var(--s-share-sheet-description-font-size);text-align:center;color:var(--s-share-sheet-description-color)}.s-share-sheet__gap{height:var(--s-share-sheet-gap-height);background:var(--s-share-sheet-gap-bg)}.s-share-sheet__cancel{display:flex;justify-content:center;align-items:center;min-height:var(--s-share-sheet-cancel-min-height);padding:var(--s-share-sheet-cancel-padding);font-size:var(--s-share-sheet-cancel-font-size);cursor:pointer}.s-share-sheet__cancel:active{background:var(--s-share-sheet-cancel-bg-active)}.s-share-sheet-item{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:var(--s-share-sheet-item-width);flex:none;cursor:pointer}.s-share-sheet-item:not(.is-disabled):active{opacity:var(--s-share-sheet-item-opacity-active)}.s-share-sheet-item:is(.is-disabled){opacity:var(--s-opacity-disabled);cursor:var(--s-cursor-disabled);filter:var(--s-filter-disabled)}.s-share-sheet-item__label{margin-top:var(--s-share-sheet-label-margin-top);padding:0 var(--s-share-sheet-label-padding-x);font-size:var(--s-share-sheet-label-font-size);color:var(--s-share-sheet-label-color)}.s-share-sheet-item__description{margin-top:var(--s-share-sheet-item-description-margin-top);padding:0 var(--s-share-sheet-item-description-padding-x);font-size:var(--s-share-sheet-item-description-font-size);color:var(--s-share-sheet-item-description-color)}.s-share-sheet-row{position:relative}.s-share-sheet-row:not(:first-child)::before{position:absolute;z-index:1;pointer-events:none;touch-action:none;opacity:1;content:"";left:0;right:0;transform:scaleY(0.5);top:0;border-top:var(--s-border-width) var(--s-border-style) var(--s-share-sheet-border-color);transform-origin:top center}.s-share-sheet-row__scroll{display:flex;padding:var(--s-share-sheet-row-padding-y) var(--s-share-sheet-row-padding-x);overflow-x:auto;overflow-y:hidden}.s-share-sheet-icon{display:flex;justify-content:center;align-items:center;width:var(--s-share-sheet-icon-size);height:var(--s-share-sheet-icon-size);border-radius:var(--s-share-sheet-icon-radius);font-size:var(--s-share-sheet-icon-font-size);color:var(--s-share-sheet-icon-color);background:var(--s-share-sheet-icon-bg)}.s-share-sheet-icon__image{width:100%;height:100%;object-fit:cover;border-radius:var(--s-share-sheet-icon-radius)}
|