初始化项目, 添加TDesign等包

This commit is contained in:
zhengw
2025-11-28 16:49:36 +08:00
commit 3e53beb7bb
980 changed files with 39201 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
import { TdSliderProps } from './type';
declare const props: TdSliderProps;
export default props;

View File

@@ -0,0 +1 @@
const props={disabled:{type:null,value:void 0},label:{type:null,value:!1},marks:{type:null,value:{}},max:{type:Number,value:100},min:{type:Number,value:0},range:{type:Boolean,value:!1},showExtremeValue:{type:Boolean,value:!1},step:{type:Number,value:1},theme:{type:String,value:"default"},value:{type:null,value:null},defaultValue:{type:null,value:0},vertical:{type:Boolean,value:!1}};export default props;

View File

@@ -0,0 +1,73 @@
/// <reference types="miniprogram-api-typings" />
import { SuperComponent } from '../common/src/index';
import type { SliderValue } from './type';
declare type dataType = {
sliderStyles: string;
classPrefix: string;
initialLeft: number | null;
initialRight: number | null;
activeLeft: number;
activeRight: number;
maxRange: number;
lineLeft: number;
lineRight: number;
dotTopValue: number[];
blockSize: number;
isScale: boolean;
scaleArray: any[];
scaleTextArray: any[];
_value: SliderValue;
prefix: string;
realLabel: string | string[];
extremeLabel: string[];
isVisibleToScreenReader: boolean;
identifier: number[];
__inited: boolean;
};
export default class Slider extends SuperComponent {
externalClasses: string[];
options: {
pureDataPattern: RegExp;
};
properties: import("./type").TdSliderProps;
controlledProps: {
key: string;
event: string;
}[];
data: dataType;
observers: {
value(newValue: SliderValue): void;
_value(newValue: SliderValue): void;
marks(val: any): void;
label(val: any): void;
'showExtremeValue, min, max'(): void;
};
getwExtremeLabel(): void;
lifetimes: {
created(): void;
attached(): void;
};
injectPageScroll(): void;
observerScrollTop(rest: any): void;
toggleA11yTips(): void;
renderLine(val: any): void;
triggerValue(value?: SliderValue): void;
getLabelByValue(value: SliderValue, position?: 'start' | 'end' | 'min' | 'max'): any;
handlePropsChange(newValue: SliderValue): void;
valueToPosition(value: number): number;
handleMark(marks: any): void;
setSingleBarWidth(value: number): void;
init(): Promise<void>;
stepValue(value: number): number;
onSingleLineTap(e: WechatMiniprogram.TouchEvent): void;
getSingleChangeValue(e: WechatMiniprogram.TouchEvent): number;
convertPosToValue(posValue: number, dir: 0 | 1): number;
onLineTap(e: WechatMiniprogram.TouchEvent): void;
onTouchStart(e: WechatMiniprogram.TouchEvent): void;
onTouchMoveLeft(e: WechatMiniprogram.TouchEvent): void;
onTouchMoveRight(e: WechatMiniprogram.TouchEvent): void;
setLineStyle(left: number, right: number): void;
onTouchEnd(e: WechatMiniprogram.TouchEvent): void;
getPagePosition(touch: any): any;
}
export {};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"component":true,"styleIsolation":"apply-shared","usingComponents":{}}

View File

@@ -0,0 +1 @@
<wxs src="../common/utils.wxs" module="_"/><view style="{{_._style([style, customStyle])}}" class="{{_.cls(classPrefix, [['top', isShowLabel || scaleTextArray.length], ['disabled', disabled], ['range', range]])}} class {{prefix}}-class {{vertical ? classPrefix + '--vertical' : ''}}"><block wx:if="{{!range}}"><text wx:if="{{showExtremeValue}}" class="{{classPrefix}}__value {{classPrefix}}__value--min">{{extremeLabel[0]}}</text><view id="sliderLine" class="{{_.cls(classPrefix + '__bar', [['disabled', disabled], theme, ['marks', isScale && theme == 'capsule']])}} {{prefix}}-class-bar" bind:tap="onSingleLineTap"><block wx:if="{{isScale}}"><view class="{{_.cls(classPrefix + '__scale-item', [['active', _value >= item.val], ['disabled', disabled], theme, ['hidden', (index == 0 || index == scaleArray.length - 1) && theme == 'capsule' || value == item.val]])}}" wx:for="{{scaleArray}}" wx:key="index" style="{{vertical ? 'top' : 'left'}}:{{item.left}}px; {{vertical ? 'transform: translate(-50%, -50%);' : 'transform: translateX(-50%);'}}" aria-hidden="{{true}}"><view wx:if="{{scaleTextArray.length}}" class="{{_.cls(classPrefix + '__scale-desc', [theme])}}">{{scaleTextArray[index]}}</view></view></block><view class="{{_.cls(classPrefix + '__line', [['disabled', disabled], theme, 'single'])}} {{prefix}}-class-bar-active" style="{{vertical ? 'height' : 'width'}}: {{lineBarWidth}}"><view id="singleDot" class="{{classPrefix}}__dot {{prefix}}-class-cursor" catch:touchstart="onTouchStart" catch:touchmove="onSingleLineTap" catch:touchend="onTouchEnd" catch:touchcancel="onTouchEnd"><view wx:if="{{isShowLabel || isVisibleToScreenReader}}" class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !isShowLabel]])}}" aria-role="alert" aria-live="assertive" aria-hidden="{{!isVisibleToScreenReader}}">{{realLabel}}</view><view class="{{classPrefix}}__dot-slider" aria-role="slider" aria-disabled="{{disabled}}" aria-valuemax="{{max}}" aria-valuemin="{{min}}" aria-valuenow="{{_value}}" aria-valuetext="{{realLabel}}"></view></view></view></view><text wx:if="{{showExtremeValue}}" class="{{classPrefix}}__value {{classPrefix}}__value--max">{{extremeLabel[1]}}</text></block><block wx:if="{{range}}"><view wx:if="{{showExtremeValue}}" class="{{classPrefix}}__range-extreme {{classPrefix}}__range-extreme--min">{{extremeLabel[0]}}</view><view id="sliderLine" bind:tap="onLineTap" class="{{_.cls(classPrefix + '__bar', [['disabled', disabled], theme, ['marks', isScale && theme == 'capsule']])}} {{prefix}}-class-bar"><block wx:if="{{isScale}}"><view class="{{_.cls(classPrefix + '__scale-item', [['active', dotTopValue[1] >= item.val && item.val >= dotTopValue[0]], ['disabled', disabled], theme, ['hidden', (index == 0 || index == scaleArray.length - 1) && theme == 'capsule' || value == item.val]])}}" wx:for="{{scaleArray}}" wx:for-index="index" wx:key="index" style="{{vertical ? 'top' : 'left'}}:{{item.left}}px; {{vertical ? 'transform: translate(-50%, -50%);' : 'transform: translateX(-50%);'}}" aria-hidden="{{true}}"><view wx:if="{{scaleTextArray.length}}" class="{{_.cls(classPrefix + '__scale-desc', [theme])}}">{{scaleTextArray[index]}}</view></view></block><view class="{{_.cls(classPrefix + '__line', [['disabled', disabled], theme])}} {{prefix}}-class-bar-active" style="{{vertical ? 'top' : 'left'}}: {{lineLeft}}px; {{vertical ? 'bottom' : 'right'}}: {{lineRight}}px"><view id="leftDot" catch:touchstart="onTouchStart" catch:touchmove="onTouchMoveLeft" catch:touchend="onTouchEnd" catch:touchcancel="onTouchEnd" class="{{classPrefix}}__dot {{classPrefix}}__dot--left {{prefix}}-class-cursor"><view wx:if="{{isShowLabel || isVisibleToScreenReader}}" class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !isShowLabel]])}}" aria-role="alert" aria-live="assertive" aria-hidden="{{!isVisibleToScreenReader}}">{{realLabel[0] || dotTopValue[0]}}</view><view class="{{classPrefix}}__dot-slider" aria-role="slider" aria-disabled="{{disabled}}" aria-valuemax="{{max}}" aria-valuemin="{{min}}" aria-valuenow="{{dotTopValue[0]}}" aria-valuetext="{{realLabel[0] || dotTopValue[0]}}"></view></view><view id="rightDot" catch:touchstart="onTouchStart" catch:touchmove="onTouchMoveRight" catch:touchend="onTouchEnd" catch:touchcancel="onTouchEnd" class="{{classPrefix}}__dot {{classPrefix}}__dot--right {{prefix}}-class-cursor"><view wx:if="{{isShowLabel || isVisibleToScreenReader}}" class="{{_.cls(classPrefix+'__dot-value', [['sr-only', !isShowLabel]])}}" aria-role="alert" aria-live="assertive" aria-hidden="{{!isVisibleToScreenReader}}">{{realLabel[1] || dotTopValue[1]}}</view><view class="{{classPrefix}}__dot-slider" aria-role="slider" aria-disabled="{{disabled}}" aria-valuemax="{{max}}" aria-valuemin="{{min}}" aria-valuenow="{{dotTopValue[1]}}" aria-valuetext="{{realLabel[1] || dotTopValue[1]}}"></view></view></view></view><view wx:if="{{showExtremeValue}}" class="{{classPrefix}}__range-extreme {{classPrefix}}__range-extreme--max">{{extremeLabel[1]}}</view></block></view>

View File

@@ -0,0 +1,10 @@
var REGEXP = getRegExp('[$][{value}]{7}');
function getValue(label, value) {
if (label && label === 'true') return value;
if (REGEXP.test(label)) return label.replace(REGEXP, value);
}
module.exports = {
getValue: getValue,
};

View File

@@ -0,0 +1,46 @@
@import '../common/style/index.wxss';.t-slider{width:100%;font-size:14px;display:flex;align-items:center;}
.t-slider--disabled .t-slider__dot-value,.t-slider--disabled .t-slider__range-extreme,.t-slider--disabled .t-slider__scale-desc,.t-slider--disabled .t-slider__value{color:var(--td-slider-disabled-text-color,var(--td-text-color-disabled,var(--td-font-gray-4,rgba(0,0,0,.26))));}
.t-slider--disabled .t-slider__dot{background-color:var(--td-slider-dot-disabled-bg-color,#fff);border-color:var(--td-slider-dot-disabled-border-color,#f3f3f3);}
.t-slider--top{padding-top:40rpx;}
.t-slider__line{position:absolute;top:0;height:var(--td-slider-bar-height,8rpx);border-radius:calc(var(--td-slider-bar-height,8rpx)/ 2);background-color:var(--td-slider-active-color,var(--td-brand-color,var(--td-primary-color-7,#0052d9)));}
.t-slider__line--disabled{background-color:var(--td-slider-disabled-color,var(--td-brand-color-disabled,var(--td-primary-color-3,#b5c7ff)));}
.t-slider__line--capsule{height:var(--td-slider-capsule-line-heihgt,36rpx);}
.t-slider__line--capsule.t-slider__line--single{border-top-left-radius:calc(var(--td-slider-capsule-line-heihgt,36rpx)/ 2);border-bottom-left-radius:calc(var(--td-slider-capsule-line-heihgt,36rpx)/ 2);}
.t-slider__dot{border-radius:50%;border:2rpx solid var(--td-slider-dot-color,var(--td-component-border,var(--td-gray-color-4,#dcdcdc)));position:absolute;top:50%;right:0;transform:translate3d(50%,-50%,0);z-index:2;background-color:var(--td-slider-dot-bg-color,#fff);width:var(--td-slider-dot-size,40rpx);height:var(--td-slider-dot-size,40rpx);box-shadow:var(--td-shadow-1,0 1px 10px rgba(0,0,0,.05),0 4px 5px rgba(0,0,0,.08),0 2px 4px -1px rgba(0,0,0,.12));box-sizing:border-box;}
.t-slider__dot--left{left:0;transform:translate3d(-50%,-50%,0);}
.t-slider__dot-value{position:relative;left:50%;transform:translateX(-50%);top:-52rpx;text-align:center;width:96rpx;height:44rpx;line-height:44rpx;}
.t-slider__dot-value,.t-slider__range-extreme,.t-slider__value{color:var(--td-slider-text-color,var(--td-text-color-primary,var(--td-font-gray-1,rgba(0,0,0,.9))));}
.t-slider__dot-value--sr-only,.t-slider__range-extreme--sr-only,.t-slider__value--sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;clip-path:inset(50%);border:0;}
.t-slider__dot-slider{width:100%;height:100%;position:absolute;left:0;top:0;}
.t-slider__value--min{margin-left:32rpx;}
.t-slider__value--max{margin-right:32rpx;}
.t-slider__bar{margin:16rpx 32rpx;flex:10;background-clip:content-box;height:var(--td-slider-bar-height,8rpx);border-radius:calc(var(--td-slider-bar-height,8rpx)/ 2);position:relative;background-color:var(--td-slider-default-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));}
.t-slider__bar--capsule{height:var(--td-slider-capsule-bar-heihgt,48rpx);border-radius:calc(var(--td-slider-capsule-bar-heihgt,48rpx)/ 2);background-color:var(--td-slider-capsule-bar-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));border:6rpx solid var(--td-slider-capsule-bar-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));box-sizing:border-box;}
.t-slider__bar--marks{background-color:var(--td-slider-default-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));}
.t-slider__bar--disabled{background-color:var(--td-slider-default-color,var(--td-bg-color-component-disabled,var(--td-gray-color-2,#eee)));}
.t-slider__range-extreme--min{margin-left:32rpx;text-align:left;}
.t-slider__range-extreme--max{margin-right:32rpx;text-align:right;}
.t-slider__scale-item{background-color:var(--td-slider-default-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));width:var(--td-slider-bar-height,8rpx);height:16rpx;width:16rpx;border-radius:50%;position:absolute;top:50%;margin-top:-8rpx;z-index:1;}
.t-slider__scale-item--active{background-color:var(--td-slider-active-color,var(--td-brand-color,var(--td-primary-color-7,#0052d9)));}
.t-slider__scale-item--disabled{background-color:var(--td-slider-default-color,var(--td-bg-color-component-disabled,var(--td-gray-color-2,#eee)));}
.t-slider__scale-item--active.t-slider__scale-item--disabled{background-color:var(--td-slider-disabled-color,var(--td-brand-color-disabled,var(--td-primary-color-3,#b5c7ff)));}
.t-slider__scale-item--capsule{height:var(--td-slider-capsule-line-heihgt,36rpx);width:4rpx;border-radius:0;background-color:var(--td-slider-capsule-bar-color,var(--td-bg-color-component,var(--td-gray-color-3,#e7e7e7)));margin-top:calc(-.5 * var(--td-slider-capsule-line-heihgt,36rpx));}
.t-slider__scale-item--hidden{background-color:transparent;}
.t-slider__scale-desc{position:absolute;left:50%;color:var(--td-slider-text-color,var(--td-text-color-primary,var(--td-font-gray-1,rgba(0,0,0,.9))));transform:translateX(-50%);bottom:32rpx;}
.t-slider__scale-desc--capsule{bottom:46rpx;}
.t-slider--vertical{--td-slider-bar-height:400rpx;height:var(--td-slider-bar-height,8rpx);justify-content:center;position:relative;}
.t-slider--vertical .t-slider__bar{flex:none;height:100%;width:var(--td-slider-bar-width,8rpx);}
.t-slider--vertical .t-slider__bar--capsule{width:var(--td-slider-capsule-bar-width,48rpx);border-radius:calc(var(--td-slider-capsule-bar-width,48rpx)/ 2);}
.t-slider--vertical .t-slider__line{width:100%;height:unset;left:0;border-radius:calc(var(--td-slider-bar-width,8rpx)/ 2);}
.t-slider--vertical .t-slider__line--capsule.t-slider__line--single{border-top-left-radius:calc(var(--td-slider-capsule-line-heihgt,36rpx)/ 2);border-top-right-radius:calc(var(--td-slider-capsule-line-heihgt,36rpx)/ 2);}
.t-slider--vertical .t-slider__dot{left:50%;top:100%;transform:translate(-50%,-50%);}
.t-slider--vertical .t-slider__dot--left{top:0;transform:translate(-50%,-50%);left:50%;}
.t-slider--vertical .t-slider__dot--right{left:50%;transform:translate(-50%,-50%);top:100%;}
.t-slider--vertical .t-slider__dot-value{left:54rpx;top:50%;transform:translate(0,-50%);width:auto;}
.t-slider--vertical .t-slider__range-extreme{position:absolute;left:50%;transform:translateX(-50%);margin:0;}
.t-slider--vertical .t-slider__range-extreme--min{top:0;}
.t-slider--vertical .t-slider__range-extreme--max{bottom:0;}
.t-slider--vertical .t-slider__scale-item{left:50%;margin-top:0;}
.t-slider--vertical .t-slider__scale-item--capsule{height:4rpx;width:var(--td-slider-capsule-line-heihgt,36rpx);}
.t-slider--vertical .t-slider__scale-desc{top:50%;transform:translateY(-50%);bottom:unset;left:38rpx;}
.t-slider--vertical .t-slider__scale-desc--capsule{left:52rpx;}

View File

@@ -0,0 +1,2 @@
export declare const trimSingleValue: (value: any, min: number, max: number) => number;
export declare const trimValue: (value: number | number[], props: any) => number | number[];

View File

@@ -0,0 +1 @@
export const trimSingleValue=(r,e,i)=>r<e?e:r>i?i:r;export const trimValue=(r,e)=>{const{min:i,max:t,range:n}=e;return n&&Array.isArray(r)?(r[0]=trimSingleValue(r[0],i,t),r[1]=trimSingleValue(r[1],i,t),r[0]<=r[1]?r:[r[1],r[0]]):n?[i,t]:n?void 0:trimSingleValue(r,i,t)};

View File

@@ -0,0 +1,51 @@
export interface TdSliderProps {
disabled?: {
type: BooleanConstructor;
value?: boolean;
};
label?: {
type: null;
value?: string | boolean;
};
marks?: {
type: null;
value?: Record<number, string> | Array<number>;
};
max?: {
type: NumberConstructor;
value?: number;
};
min?: {
type: NumberConstructor;
value?: number;
};
range?: {
type: BooleanConstructor;
value?: boolean;
};
showExtremeValue?: {
type: BooleanConstructor;
value?: boolean;
};
step?: {
type: NumberConstructor;
value?: number;
};
theme?: {
type: StringConstructor;
value?: 'default' | 'capsule';
};
value?: {
type: null;
value?: SliderValue;
};
defaultValue?: {
type: null;
value?: SliderValue;
};
vertical?: {
type: BooleanConstructor;
value?: boolean;
};
}
export declare type SliderValue = number | Array<number>;

View File

@@ -0,0 +1 @@
export{};