2025/2/8第一次更新

This commit is contained in:
爱吃咸鱼小猫咪
2025-02-08 18:50:38 +08:00
commit d7af560866
26519 changed files with 5046029 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
$namespace: 'tn' !default;
$common-separator: '-' !default;
$element-separator: '__' !default;
$modifier-separator: '--' !default;
$state-prefix: 'is-' !default;
+105
View File
@@ -0,0 +1,105 @@
@use 'config';
// BEM support Func
// 块(Block):代表一个独立的组件或页面中的一个大型部分。块可以看作是一个命名空间,用于包含相关元素和修饰符。例如,一个导航栏可以被视为一个块。
// 元素(Element):代表块的一部分,但不能独立存在。元素总是属于一个块,并且与该块紧密相关。元素由块名称和元素名称组成,中间由双下划线(__)连接。例如,一个导航栏可以包含多个链接,链接可以被视为导航栏块的元素。
// 修饰符(Modifier):代表块或元素的变体或状态。修饰符用于修改块或元素的外观或行为。修饰符由块名称或元素名称,连字符(-)和修饰符名称组成。例如,一个导航栏可以具有活动状态或浅色主题,这些状态可以通过添加修饰符类进行实现。
@function selectorToString($selector) {
$selector: inspect($selector);
$selector: str-slice($selector, 2, -2);
@return $selector;
}
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if str_index($selector, config.$modifier-separator) {
@return true;
} @else {
@return false;
}
}
@function containWhenFlag($selector) {
$selector: selectorToString($selector);
@if str-index($selector, '.' + config.$state-prefix) {
@return true;
} @else {
@return false;
}
}
@function containPseudoClass($selector) {
$selector: selectorToString($selector);
@if str-index($selector, ':') {
@return true;
} @else {
@return false;
}
}
@function hitAllSpecialNestRule($selector) {
@return containsModifier($selector) or containWhenFlag($selector) or
containPseudoClass($selector);
}
// join var name
// joinVarName(('button', 'text-color')) => '--tn-button-text-color'
@function joinVarName($list) {
$name: '--' + config.$namespace;
@each $item in $list {
@if $item != '' {
$name: $name + '-' + $item;
}
}
@return $name;
}
// getCssVarName('button', 'text-color') => '--tn-button-text-color'
@function getCssVarName($args...) {
@return joinVarName($args);
}
// getCssVar('button', 'text-color') => var(--tn-button-text-color)
@function getCssVar($args...) {
@return var(#{joinVarName($args)});
}
// getCssVarWithDefault('button', 'text-color', 'red') => var(--tn-button-text-color, red)
@function getCssVarWithDefault($args, $default) {
@return var(#{joinVarName($args)}, #{$default});
}
// bem('block', 'element', ''modifier) => 'tn-block__element--modifier'
@function bem($block, $element: '', $modifier: '') {
$name: config.$namespace + config.$common-separator + $block;
@if $element != '' {
$name: $name + config.$element-separator + $element;
}
@if $modifier != '' {
$name: $name + config.$modifier-separator + $modifier;
}
@return $name;
}
// 字符串替换
@function str-replace($string, $search, $replace) {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace +
str-replace(
str-slice($string, $index + str-length($search)),
$search,
$replace
);
}
@return $string;
}
+134
View File
@@ -0,0 +1,134 @@
@use 'function' as *;
// forward mixins
@forward 'config';
@forward 'function';
@use 'config' as *;
// BEM
@mixin b($block) {
$B: $namespace + '-' + $block !global;
.#{$B} {
@content;
}
}
@mixin e($element) {
$E: $element !global;
$selector: &;
$currentSelector: '';
@each $unit in $element {
$currentSelector: #{$currentSelector +
'.' +
$B +
$element-separator +
$unit +
','};
}
@if hitAllSpecialNestRule($selector) {
@at-root {
#{$selector} {
#{$currentSelector} {
@content;
}
}
}
} @else {
@at-root {
#{$currentSelector} {
@content;
}
}
}
}
@mixin m($modifier) {
$selector: &;
$currentSelector: '';
@each $unit in $modifier {
$currentSelector: #{$currentSelector +
$selector +
$modifier-separator +
$unit +
','};
}
@at-root {
#{$currentSelector} {
@content;
}
}
}
@mixin configurable-m($modifier, $E-flag: false) {
$selector: &;
$interpolation: '';
@if $E-flag {
$interpolation: $element-separator + $E-flag;
}
@at-root {
#{$selector} {
.#{$B + $interpolation + $modifier-separator + $modifier} {
@content;
}
}
}
}
@mixin spec-selector(
$specSelector: '',
$element: $E,
$modifier: false,
$block: $B
) {
$modifierCombo: '';
$elementCombo: '';
@if $modifier {
$modifierCombo: $modifier-separator + $modifier;
}
@if $element {
$elementCombo: $element-separator + $element;
}
@at-root {
#{&}#{$specSelector}.#{$block + $elementCombo + $modifierCombo} {
@content;
}
}
}
@mixin meb($modifier: false, $element: $E, $block: $B) {
$selector: &;
$modifierCombo: '';
@if $modifier {
$modifierCombo: $modifier-separator + $modifier;
}
@at-root {
#{$selector} {
.#{$block + $element-separator + $element + $modifierCombo} {
@content;
}
}
}
}
@mixin when($state) {
@at-root {
&.#{$state-prefix + $state} {
@content;
}
}
}
@mixin pseudo($pseudo) {
@at-root #{&}#{':#{$pseudo}'} {
@content;
}
}
@@ -0,0 +1,62 @@
@use '../mixins/mixins.scss' as *;
@include b(action-sheet) {
position: relative;
width: 100%;
background-color: #ffffff;
border-radius: 15rpx 15rpx 0rpx 0rpx;
margin-top: 30rpx;
// 顶部阴影
@include when('shadow') {
box-shadow: 0rpx 10rpx 40rpx 0rpx rgba(0, 0, 0, 0.1);
}
/* 标题 start */
@include e(title) {
padding: 22rpx;
display: flex;
align-items: center;
justify-content: center;
color: var(--tn-color-gray);
border-bottom: 8rpx solid var(--tn-color-gray-light);
font-size: 26rpx;
}
/* 标题 end */
/* 选项容器 start */
@include e(actions) {
width: 100%;
}
@include e(action) {
padding: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-bottom: 1rpx solid var(--tn-color-gray-light);
&:last-of-type {
border-bottom: none;
}
.desc {
font-size: 24rpx;
color: var(--tn-color-grey-disabled);
margin-top: 8rpx;
}
}
/* 选项容器 end */
/* 取消按钮 start */
@include e(cancel) {
padding: 26rpx;
display: flex;
align-items: center;
justify-content: center;
border-top: 10rpx solid var(--tn-color-gray-light);
color: var(--tn-color-danger);
}
/* 取消按钮 end */
}
@@ -0,0 +1,9 @@
@use '../mixins/mixins.scss' as *;
@include b(avatar-group) {
display: flex;
align-items: center;
position: relative;
width: fit-content;
}
+98
View File
@@ -0,0 +1,98 @@
@use 'sass:map';
@use '../mixins/mixins' as *;
@use '../var/size.scss' as *;
$avatar-sizes: () !default;
$avatar-sizes: map.merge(
(
'sm': 50rpx,
'': 70rpx,
'lg': 90rpx,
'xl': 120rpx,
),
$avatar-sizes
);
$avatar-icon-sizes: () !default;
$avatar-icon-sizes: map.merge(
(
'sm': 28rpx,
'': 40rpx,
'lg': 50rpx,
'xl': 70rpx,
),
$avatar-icon-sizes
);
@include b(avatar) {
display: inline-block;
align-items: center;
justify-content: center;
position: relative;
transition: margin-left 0.25s linear;
width: map-get($avatar-sizes, '');
height: map-get($avatar-sizes, '');
/* 头像类型 start */
@include e(image) {
width: 100%;
height: 100%;
border-radius: inherit;
.image {
width: 100%;
height: 100%;
border-radius: inherit;
will-change: transform;
}
}
@include e(icon) {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
font-size: map-get($avatar-icon-sizes, '');
}
@include e(custom) {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
font-size: map-get($avatar-icon-sizes, '');
}
/* 头像类型 end */
/* 头像形状 start */
@include m('circle') {
border-radius: 50%;
// overflow: hidden;
}
@include m('square') {
border-radius: 12rpx;
}
/* 头像形状 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
width: map-get($avatar-sizes, $size);
height: map-get($avatar-sizes, $size);
/* 当为图标头像时对应的尺寸 start */
@include e(icon) {
font-size: map-get($avatar-icon-sizes, $size);
}
@include e(custom) {
font-size: map-get($avatar-icon-sizes, $size);
}
/* 当为图标头像时对应的尺寸 end */
}
}
/* 尺寸 end */
}
+126
View File
@@ -0,0 +1,126 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$tn-inner-sizes: 'lg', 'xl';
$badge-sizes: () !default;
$badge-sizes: map.merge(
(
'': (
font-size: 20rpx,
icon-size: 22rpx,
padding: 4rpx 8rpx,
size: 26rpx,
),
'lg': (
font-size: 26rpx,
icon-size: 28rpx,
padding: 4rpx 10rpx,
size: 32rpx,
),
'xl': (
font-size: 30rpx,
icon-size: 32rpx,
padding: 4rpx 12rpx,
size: 40rpx,
),
),
$badge-sizes
);
/* 绝对定位 */
@mixin absolute-style {
@at-root {
&__absolute {
position: absolute;
top: 0;
right: 0;
&--center {
transform: translate(50%, -50%);
}
}
}
}
@include b(badge) {
display: inline-block;
position: relative;
z-index: 1;
/* 绝对定位 start */
@include absolute-style;
/* 绝对定位 end */
}
/* 徽标内容 start */
@include b(badge-content) {
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: fit-content;
height: auto;
border-radius: 1000rpx;
transform-origin: center center;
font-size: map-get(map-get($badge-sizes, ''), font-size);
padding: map-get(map-get($badge-sizes, ''), padding);
/* 绝对定位 start */
@include absolute-style;
/* 绝对定位 end */
/* 数据内容 start */
@include e(data) {
line-height: 1;
text-align: center;
vertical-align: middle;
}
/* 数据内容 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get(map-get($badge-sizes, $size), font-size);
padding: map-get(map-get($badge-sizes, $size), padding);
}
}
/* 尺寸 end */
/* 点徽标 start */
@include m(dot) {
width: map-get(map-get($badge-sizes, ''), size);
height: map-get(map-get($badge-sizes, ''), size);
border-radius: 50%;
padding: 0;
@each $size in $tn-inner-sizes {
@include spec-selector('', false, $size) {
width: map-get(map-get($badge-sizes, $size), size);
height: map-get(map-get($badge-sizes, $size), size);
}
}
}
/* 点徽标 end */
/* 图标徽标 start */
@include m(icon) {
font-size: map-get(map-get($badge-sizes, ''), icon-size);
width: calc(map-get(map-get($badge-sizes, ''), icon-size) + 8rpx);
height: calc(map-get(map-get($badge-sizes, ''), icon-size) + 8rpx);
padding: 0;
@each $size in $tn-inner-sizes {
@include spec-selector('', false, $size) {
font-size: map-get(map-get($badge-sizes, $size), icon-size);
width: calc(map-get(map-get($badge-sizes, $size), icon-size) + 8rpx);
height: calc(map-get(map-get($badge-sizes, $size), icon-size) + 8rpx);
}
}
}
/* 图标徽标 end */
}
/* 徽标内容 end */
+142
View File
@@ -0,0 +1,142 @@
@use '../mixins//mixins.scss' as *;
// 辅助元素的占位尺寸
$auxiliary-element-size: 12px;
@include b(bubble-box) {
position: relative;
/* 内容区域 start */
@include e(content) {
position: relative;
}
/* 内容区域 end */
/* 选项区域 start */
@include e(options) {
position: absolute;
width: fit-content;
border-radius: 15rpx;
transition-duration: 0.3s;
transition-timing-function: linear;
transition-property: opacity, transform;
opacity: 0;
visibility: hidden;
.scroll-view {
height: 100%;
}
.options-content {
height: fit-content;
}
/* 辅助元素 start */
.auxiliary-element {
width: 0rpx;
height: 0rpx;
position: absolute;
z-index: inherit;
border-width: 18rpx;
border-style: solid;
}
/* 辅助元素 end */
/* 气泡弹框的位置 start */
@include m(top) {
box-shadow: 0rpx 10rpx 20rpx -2rpx rgba(0, 0, 0, 0.06),
0rpx 0rpx 10rpx -4rpx rgba(0, 0, 0, 0.1);
top: 0px;
left: 50%;
transform: translate(-50%, calc(-100% - $auxiliary-element-size));
.auxiliary-element {
left: 50%;
bottom: 2rpx;
transform: translate(-50%, 100%);
}
}
@include m(right) {
box-shadow: -10rpx 0rpx 20rpx -2rpx rgba(0, 0, 0, 0.06),
0rpx 0rpx 10rpx -4rpx rgba(0, 0, 0, 0.1);
left: calc(100% + $auxiliary-element-size);
top: 50%;
transform: translateY(-50%);
.auxiliary-element {
left: 2rpx;
top: 50%;
transform: translate(-100%, -50%);
}
}
@include m(bottom) {
box-shadow: 0rpx -10rpx 20rpx -2rpx rgba(0, 0, 0, 0.06),
0rpx 0rpx 10rpx -4rpx rgba(0, 0, 0, 0.1);
top: calc(100% + $auxiliary-element-size);
left: 50%;
transform: translateX(-50%);
.auxiliary-element {
left: 50%;
top: 2rpx;
transform: translate(-50%, -100%);
}
}
@include m(left) {
box-shadow: 10rpx 0rpx 20rpx -2rpx rgba(0, 0, 0, 0.06),
0rpx 0rpx 10rpx -4rpx rgba(0, 0, 0, 0.1);
top: 50%;
left: calc(-100% + $auxiliary-element-size);
transform: translate(-50%, -50%);
.auxiliary-element {
right: 2rpx;
top: 50%;
transform: translate(100%, -50%);
}
}
/* 气泡弹框的位置 end */
/* 显示弹框 */
@include when(show) {
opacity: 1;
visibility: visible;
}
}
@include e(option-item) {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx 38rpx;
.icon {
margin-right: 10rpx;
}
.text {
width: fit-content;
white-space: nowrap;
}
&::after {
content: '';
position: absolute;
left: 50%;
bottom: 0;
width: 90%;
height: 1rpx;
background-color: var(--tn-color-gray-light);
transform: translate(-50%, -50%);
}
&:last-of-type {
&::after {
display: none;
}
}
/* 禁止点击 start */
@include when(disabled) {
opacity: 0.4;
}
/* 禁止点击 end */
}
/* 选项区域 end */
}
+115
View File
@@ -0,0 +1,115 @@
@use '../mixins/mixins' as *;
@include b(button) {
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
line-height: 1;
white-space: nowrap;
width: fit-content;
font-size: var(--tn-font-size);
padding: 10rpx 14rpx;
border-radius: 15rpx;
/* #ifdef MP-ALIPAY */
height: auto;
/* #endif */
/* icon图标按钮 start */
@include e(icon) {
font-size: inherit;
color: inherit;
}
/* icon图标按钮 end */
/* size尺寸 satrt */
@include m(sm) {
font-size: 20rpx;
padding: 6rpx 8rpx;
border-radius: 6rpx;
}
@include m(lg) {
font-size: 34rpx;
padding: 12rpx 18rpx;
}
@include m(xl) {
font-size: 40rpx;
padding: 16rpx 24rpx;
}
/* size尺寸 end */
/* shape形状 start */
@include m(circle) {
padding: 0;
width: 60rpx;
height: 60rpx;
border-radius: 50%;
@include spec-selector('', false, 'sm') {
width: 50rpx;
height: 50rpx;
}
@include spec-selector('', false, 'lg') {
width: 80rpx;
height: 80rpx;
}
@include spec-selector('', false, 'xl') {
width: 100rpx;
height: 100rpx;
}
}
@include m(round) {
border-radius: 1000rpx;
padding: 10rpx 16rpx;
@include spec-selector('', false, 'sm') {
padding: 6rpx 12rpx;
border-radius: 20rpx;
}
@include spec-selector('', false, 'lg') {
padding: 12rpx 18rpx;
}
@include spec-selector('', false, 'xl') {
padding: 16rpx 24rpx;
}
}
/* shape形状 end */
/* plain start */
@include m(plain) {
border-width: 2rpx;
border-style: solid;
}
@include m(plain-bold) {
border-width: 4rpx;
}
/* plain end */
/* text start */
@include m(text) {
border: none;
background-color: transparent;
}
/* text end */
/* 加载动画 start */
@include m(loading) {
margin-right: 8rpx;
}
/* 加载动画 end */
/* 只是按钮时没有任何样式 start */
@include m(only-button) {
display: block;
padding: 0rpx;
line-height: normal;
white-space: normal;
height: auto;
width: auto;
border-radius: 0rpx;
align-items: normal;
justify-content: normal;
text-align: unset;
}
/* 只是按钮时没有任何样式 end */
}
+182
View File
@@ -0,0 +1,182 @@
@use '../mixins/mixins.scss' as *;
@include b(calendar) {
position: relative;
width: 100%;
background-color: var(--tn-color-white);
color: var(--tn-text-color-primary);
/* 顶部操作区域 start */
@include e(operation) {
position: relative;
width: 100%;
padding: 20rpx;
display: flex;
align-items: center;
justify-content: center;
// 年切换按钮
&__year-btn {
font-size: 34rpx;
line-height: 1;
color: var(--tn-color-gray);
}
// 内容
&__value {
margin: 0 20rpx;
}
}
/* 顶部操作区域 end */
/* 星期提示文字 start */
@include e(week-text) {
position: relative;
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
padding: 10rpx 30rpx;
&__item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
}
}
/* 星期提示文字 end */
/* 日期数据 start */
@include e(data) {
position: relative;
width: 100%;
background-color: var(--tn-color-gray-light);
overflow: hidden;
padding: 0rpx 30rpx;
transition: height 0.3s linear;
/* 月份背景 start */
&__month-bg {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 200rpx;
line-height: 1;
color: var(--tn-color-gray-disabled);
}
/* 月份背景 end */
/* 月份切换按钮 start */
&__month-btn {
position: absolute;
top: 0;
height: 100%;
width: 30rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 38rpx;
font-weight: bold;
overflow: hidden;
color: var(--tn-color-gray);
&.left {
left: 0rpx;
}
&.right {
right: 0rpx;
}
}
/* 月份切换按钮 end */
/* 轮播 样式 start */
&__swiper {
position: relative;
width: 100%;
height: 100%;
}
&__swiper-item {
/* #ifndef MP-ALIPAY */
position: relative;
/* #endif */
width: 100%;
height: 100%;
}
/* 轮播 样式 end */
&__dates {
display: flex;
flex-wrap: wrap;
}
/* 每个日期的样式 start */
&__date {
position: relative;
width: calc(100% / 7 - 12rpx);
height: 0;
padding-bottom: calc(100% / 7 - 12rpx);
border-radius: 50%;
margin: 6rpx;
&__content {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
line-height: 1;
.desc {
font-size: 22rpx;
color: var(--tn-color-gray);
margin-top: 6rpx;
}
}
// 已选中日期
&.is-active {
.desc {
color: inherit;
}
}
// 禁止的日期
&.is-disabled {
.date {
color: var(--tn-color-gray);
}
}
// 选区中的日期
&.is-range {
opacity: 0.7;
}
}
/* 每个日期的样式 end */
}
/* 日期数据 end */
/* 日期选择模式 start */
@include m(range) {
@include e(data) {
&__date {
width: calc(100% / 7);
padding-bottom: calc(100% / 7);
border-radius: 0rpx;
margin: 0;
}
}
}
/* 日期选择模式 end */
}
@@ -0,0 +1,13 @@
@use '../mixins/mixins.scss' as *;
@include b(checkbox-group) {
position: relative;
width: 100%;
display: flex;
flex-wrap: wrap;
@include when(wrap) {
display: block;
}
}
+142
View File
@@ -0,0 +1,142 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$checkbox-sizes: () !default;
$checkbox-sizes: map.merge(
(
'sm': (
'padding': 8rpx 14rpx,
'font-size': 24rpx,
'box': 24rpx,
),
'': (
'padding': 10rpx 20rpx,
'font-size': 28rpx,
'box': 30rpx,
),
'lg': (
'padding': 12rpx 24rpx,
'font-size': 32rpx,
'box': 36rpx,
),
),
$checkbox-sizes
);
@include b(checkbox) {
flex-grow: 0;
flex-shrink: 0;
display: flex;
align-items: center;
padding: map-get(map-get($checkbox-sizes, ''), 'padding');
font-size: map-get(map-get($checkbox-sizes, ''), 'font-size');
border-radius: 10rpx;
transition: all 0.3s ease-in-out;
/* 单选框组中的单选框之间有10rpx的边距 */
@include m(group) {
margin: 10rpx;
}
/* 复选框选择框 start */
@include e(checked-box) {
flex-shrink: 0;
position: relative;
width: map-get(map-get($checkbox-sizes, ''), 'box');
height: map-get(map-get($checkbox-sizes, ''), 'box');
transition: all 0.3s ease-in-out;
display: flex;
align-items: center;
justify-content: center;
color: transparent;
/* 不确定状态 start */
@include m(indeterminate) {
&::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
width: 50%;
height: 2rpx;
background-color: #fff;
transform: translate(-50%, -50%);
}
}
/* 不确定状态 end */
/* 选框的形状 start */
@include m(square) {
border-radius: 4rpx;
font-size: map-get(map-get($checkbox-sizes, ''), 'font-size');
}
@include m(circle) {
border-radius: 50%;
font-size: calc(
map-get(map-get($checkbox-sizes, ''), 'font-size') * 0.85
);
}
/* 选框的形状 end */
}
/* 复选框选择框 end */
/* 内容 start */
@include e(content) {
@include m(left) {
margin-right: 14rpx;
}
@include m(right) {
margin-left: 14rpx;
}
}
/* 内容 end */
/* 尺寸 start */
@each $size in $tn-form-sizes {
@include m(#{$size}) {
padding: map-get(map-get($checkbox-sizes, $size), 'padding');
font-size: map-get(map-get($checkbox-sizes, $size), 'font-size');
@include e(checked-box) {
width: map-get(map-get($checkbox-sizes, $size), 'box');
height: map-get(map-get($checkbox-sizes, $size), 'box');
@include m(square) {
font-size: map-get(map-get($checkbox-sizes, $size), 'font-size');
}
@include m(circle) {
font-size: calc(
map-get(map-get($checkbox-sizes, $size), 'font-size') * 0.85
);
}
}
}
}
/* 尺寸 end */
/* 选中效果 start */
@include m(selected) {
@include e(checked-box) {
color: #fff;
}
}
/* 选中效果 end */
/* 禁止效果 start */
@include m(disabled) {
opacity: 0.4;
}
/* 禁止效果 end */
/* 没有边框 start */
@include m(no-border) {
// 如果没有border则不设置内边距
padding: 0;
}
/* 没有边框 end */
}
@@ -0,0 +1,25 @@
@use '../mixins/mixins.scss' as *;
@include b(circle-progress) {
position: relative;
/* canvas 进度条 start */
@include e(canvas) {
position: absolute;
width: 100%;
height: 100%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
/* canvas 进度条 end */
/* 进度值 start */
@include e(precent-value) {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
/* 进度值 end */
}
@@ -0,0 +1,57 @@
@use '../mixins/mixins.scss' as *;
@include b(collapse-item) {
position: relative;
width: 100%;
overflow: hidden;
transition: height 0.3s ease;
/* 标题 start */
@include e(title) {
position: relative;
width: 100%;
height: 100rpx;
padding: 0rpx 30rpx;
display: flex;
align-items: center;
justify-content: space-between;
.arrow {
transition: transform 0.3s;
transform: rotate(0deg);
}
}
/* 标题 end */
/* 内容 start */
@include e(content) {
position: relative;
width: 100%;
padding: 30rpx;
height: auto;
opacity: 0;
transition: opacity 0.3s ease;
}
/* 内容 end */
/* 激活状态 start */
@include when(active) {
@include e(title) {
.arrow {
transform: rotate(90deg);
}
}
@include e(content) {
opacity: 1;
}
}
/* 激活状态 end */
/* 禁用状态 start */
@include when(disabled) {
opacity: 0.6;
background-color: var(--tn-color-gray-light);
}
/* 禁用状态 end */
}
+6
View File
@@ -0,0 +1,6 @@
@use '../mixins/mixins.scss' as *;
@include b(collapse) {
position: relative;
width: 100%;
}
@@ -0,0 +1,20 @@
@use '../mixins/mixins.scss' as *;
@include b(column-notice-bar) {
position: relative;
width: 100%;
height: auto;
@include e(swiper) {
position: relative;
width: 100%;
height: 1em;
}
@include e(swiper-item) {
position: relative;
width: 100%;
line-height: 1.1em;
}
}
+52
View File
@@ -0,0 +1,52 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$count-down-sizes: () !default;
$count-down-sizes: map-merge(
(
'sm': 24rpx,
'': 28rpx,
'lg': 32rpx,
'xl': 36rpx,
),
$count-down-sizes
);
@include b(count-down) {
position: relative;
display: inline-flex;
align-items: center;
line-height: 1;
/* 分割符 start */
@include e(separator) {
margin: 0 4rpx;
@include m(en) {
margin-top: -3%;
}
}
/* 分割符 end */
/* 内容 start */
@include e(text) {
@include when(border) {
border-radius: 8rpx;
border-width: 1rpx;
border-style: solid;
padding: 4rpx;
}
}
/* 内容 end */
/* 尺寸设置 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get($count-down-sizes, $size);
}
}
/* 尺寸设置 end */
}
@@ -0,0 +1,29 @@
@use '../mixins/mixins.scss' as *;
@include b(count-scroll) {
display: inline-block;
height: 1em;
overflow: hidden;
@include e(wrapper) {
height: 1em;
display: flex;
align-items: flex-start;
}
@include e(column) {
height: auto;
display: flex;
flex-direction: column;
align-items: center;
transform: translateY(0%);
transition-property: transform;
transition-timing-function: ease;
@include m(item) {
line-height: 1;
}
}
}
+5
View File
@@ -0,0 +1,5 @@
@use '../mixins/mixins.scss' as *;
@include b(count-to) {
display: inline-block;
}
+75
View File
@@ -0,0 +1,75 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$empty-sizes: () !default;
$empty-sizes: map-merge(
(
'sm': (
'icon': 60rpx,
'tips': 24rpx,
),
'': (
'icon': 80rpx,
'tips': 28rpx,
),
'lg': (
'icon': 100rpx,
'tips': 32rpx,
),
'xl': (
'icon': 120rpx,
'tips': 38rpx,
),
),
$empty-sizes
);
@include b(empty) {
position: relative;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
line-height: 1;
@include e(icon) {
font-size: map-get(map-get($empty-sizes, ''), 'icon');
width: map-get(map-get($empty-sizes, ''), 'icon');
height: map-get(map-get($empty-sizes, ''), 'icon');
@include when(custom) {
font-size: inherit;
width: auto;
height: auto;
}
}
@include e(tips) {
margin-top: 8rpx;
font-size: map-get(map-get($empty-sizes, ''), 'tips');
@include when(custom) {
font-size: inherit;
}
}
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
@include e(icon) {
font-size: map-get(map-get($empty-sizes, $size), 'icon');
width: map-get(map-get($empty-sizes, $size), 'icon');
height: map-get(map-get($empty-sizes, $size), 'icon');
}
@include e(tips) {
font-size: map-get(map-get($empty-sizes, $size), 'tips');
}
}
}
/* 尺寸 end */
}
+73
View File
@@ -0,0 +1,73 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$footer-sizes: () !default;
$footer-sizes: map-merge(
(
'sm': 24rpx,
'': 28rpx,
'lg': 32rpx,
'xl': 36rpx,
),
$footer-sizes
);
@include b(footer) {
position: relative;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: map-get($footer-sizes, '');
/* 导航 start */
@include e(navigators) {
display: flex;
align-items: center;
padding-bottom: 10rpx;
}
@include e(navigator) {
position: relative;
& + & {
padding-left: 30rpx;
&::before {
content: '';
position: absolute;
left: 15rpx;
top: 50%;
width: 1rpx;
height: 60%;
background-color: var(--tn-color-gray-disabled);
transform: translate(0, -50%);
}
}
}
/* 导航 end */
/* 固定方式 start */
@include e(fixed) {
left: 0;
bottom: 0;
@include m(container) {
position: absolute;
}
@include m(page) {
position: fixed;
}
}
/* 固定方式 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get($footer-sizes, $size);
}
}
/* 尺寸 end */
}
+107
View File
@@ -0,0 +1,107 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$label-position: left, right, top;
$tn-form-font-sizes: () !default;
$tn-form-font-sizes: map-merge(
(
'sm': 22rpx,
'lg': 34rpx,
),
$tn-form-font-sizes
);
@include b(form-item) {
display: block;
position: relative;
width: 100%;
margin-bottom: 26rpx;
/* 错误信息 start */
@include e(error-message) {
width: 100%;
margin-top: 4rpx;
}
/* 错误信息 end */
/* formItem-wrapper start */
@include e(wrapper) {
display: flex;
align-items: center;
width: 100%;
}
/* formItem-wrapper end */
/* formItem-label start */
@include e(label) {
flex-shrink: 0;
padding: 0rpx 16rpx 0rpx 0rpx;
/* 必选项星号 start */
@include m(asterisk-left) {
&::before {
content: '*';
color: var(--tn-color-red);
margin-right: 4rpx;
}
}
@include m(asterisk-right) {
&::after {
content: '*';
color: var(--tn-color-red);
margin-left: 4rpx;
}
}
/* 必选项星号 end */
}
/* formItem-label end */
/* formItem-content start */
@include e(content) {
flex-grow: 1;
}
/* formItem-content end */
/* 标签的位置 start */
@include m(label-top) {
@include e(wrapper) {
display: block;
}
@include e(label) {
width: 100%;
padding-bottom: 10rpx;
}
@include e(content) {
width: 100%;
}
}
@include m(label-right) {
@include e(label) {
text-align: right;
}
}
@include m(label-left) {
@include e(label) {
text-align: left;
}
}
/* 标签的位置 end */
/* form-item 尺寸 start */
@each $size in $tn-form-sizes {
@include m($size) {
@include e(label) {
font-size: map-get($tn-form-font-sizes, $size);
}
@include e(error-message) {
font-size: map-get($tn-form-font-sizes, $size);
}
}
}
/* form-item 尺寸 end */
}
+7
View File
@@ -0,0 +1,7 @@
@use '../mixins/mixins' as *;
@include b(form) {
display: block;
position: relative;
width: 100%;
}
+64
View File
@@ -0,0 +1,64 @@
@use 'sass:map';
@use '../mixins//mixins' as *;
$sizes: sm, lg, xl;
$icon-font-size: () !default;
$icon-font-size: map.merge(
(
'sm': 24rpx,
'lg': 34rpx,
'xl': 40rpx,
),
$icon-font-size
);
$icon-image-size: () !default;
$icon-image-size: map.merge(
(
'sm': 30rpx,
'': 36rpx,
'lg': 42rpx,
'xl': 48rpx,
),
$icon-image-size
);
@include b(icon) {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: inherit;
border-radius: inherit;
/* 尺寸 start */
@each $size in $sizes {
@include m($size) {
font-size: map-get($icon-font-size, $size);
}
}
/* 尺寸 end */
/* 图片类型 start */
@include m(image) {
display: inline-block;
width: map-get($icon-image-size, '');
height: map-get($icon-image-size, '');
.image {
width: 100%;
height: 100%;
border-radius: inherit;
will-change: transform;
}
@each $size in sm, lg, xl {
@include spec-selector('', false, $size) {
width: map-get($icon-image-size, $size);
height: map-get($icon-image-size, $size);
}
}
}
/* 图片类型 end */
}
+166
View File
@@ -0,0 +1,166 @@
@use '../mixins/mixins.scss' as *;
@include b('image-upload') {
position: relative;
width: 100%;
display: flex;
flex-wrap: wrap;
}
/* item 对象 */
@include b('image-upload-item') {
flex-grow: 0;
position: relative;
width: calc(100% / 3 - 20rpx);
height: 0;
padding-bottom: calc(100% / 3 - 20rpx);
border-radius: 15rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
overflow: hidden;
/* 自定义显示图片数据 start */
@include when(custom) {
flex: auto;
width: 100%;
height: auto;
padding: 0rpx;
border-radius: 0rpx;
margin: 0;
}
/* 自定义显示图片数据 end */
/* 图片 start */
@include e(image) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: inherit;
will-change: transform;
z-index: 1;
.image {
width: 100%;
height: 100%;
border-radius: inherit;
}
@include when(donw) {
z-index: 4;
}
}
/* 图片 end */
/* 删除按钮 start */
@include e(remove) {
position: absolute;
right: 0;
top: 0;
background-color: transparent;
color: #fff;
width: 0;
height: 0;
z-index: 6;
border-top: 70rpx solid var(--tn-color-danger);
border-left: 70rpx solid transparent;
@include m(icon) {
position: absolute;
top: -76rpx;
right: 8rpx;
transform: translateY(50%);
line-height: 1;
}
}
/* 删除按钮 end */
/* 重试蒙层 start */
@include e(retry) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.2);
color: #fff;
z-index: 5;
display: flex;
align-items: center;
justify-content: center;
font-size: 110rpx;
line-height: 1;
}
/* 重试蒙层 end */
/* 进度条 start */
@include e(progress) {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
z-index: 2;
opacity: 1;
background-color: rgba(247, 248, 247, 0);
transition-property: opacity;
transition-duration: 0.8s;
transition-timing-function: linear;
transition-delay: 0.3s;
@include m(wave) {
position: absolute;
width: calc(100% * 4);
height: calc(100% * 4);
top: -300%;
left: 50%;
z-index: 2;
background-color: rgba(170, 170, 170, 0.5);
border-radius: 45%;
transform: translateX(-50%) rotate(0);
animation: rotate 4s linear infinite;
& + & {
z-index: 3;
background-color: rgba(170, 170, 170, 0.8);
border-radius: 47%;
animation: rotate 9s linear -4s infinite;
}
}
@include when(finish) {
opacity: 0;
}
}
/* 进度条 end */
/* 新增图片 按钮 start */
@include e(add-btn) {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: inherit;
@include m('icon') {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
font-size: 100rpx;
}
}
/* 新增图片 按钮 end */
}
@keyframes rotate {
50% {
transform: translateX(-50%) rotate(180deg);
}
100% {
transform: translateX(-50%) rotate(360deg);
}
}
+100
View File
@@ -0,0 +1,100 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$index-list-sizes: () !default;
$index-list-sizes: map-merge(
(
'sm': (
'font-size': 24rpx,
),
'': (
'font-size': 28rpx,
),
'lg': (
'font-size': 32rpx,
),
'xl': (
'font-size': 36rpx,
),
),
$index-list-sizes
);
@include b(index-list) {
position: relative;
width: 100%;
@include e(scroll-view) {
position: relative;
height: 100%;
}
/* 内容标题 start */
@include e(title) {
padding: 4rpx 24rpx;
font-size: map-get(map-get($index-list-sizes, ''), 'font-size');
}
/* 内容标题 end */
/* key索引列表 start */
@include e(key-list) {
position: absolute;
right: 4%;
top: 50%;
transform: translate(50%, -50%);
z-index: 99999;
font-size: 24rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
@include e(key-list-value) {
text-align: center;
padding: 4rpx 0rpx;
}
@include e(key-list-tips-value) {
position: absolute;
top: 0;
left: -80rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background-color: var(--tn-color-gray-light);
color: var(--tn-color-gray);
display: flex;
align-items: center;
justify-content: center;
transform: translate(-50%, -50%);
font-size: 46rpx;
font-weight: bold;
line-height: 1;
.auxiliary-element {
position: absolute;
height: 0;
width: 0;
right: 0;
top: 50%;
border-color: transparent transparent transparent
var(--tn-color-gray-light);
border-width: 30rpx;
border-style: solid;
transform: translate(47rpx, -50%);
}
}
/* key索引列表 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include e(title) {
@include m($size) {
font-size: map-get(map-get($index-list-sizes, $size), 'font-size');
}
}
}
/* 尺寸 end */
}
+154
View File
@@ -0,0 +1,154 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$input-sizes: () !default;
$input-sizes: map-merge(
(
'sm': (
'padding': 10rpx,
'font-size': 24rpx,
),
'': (
'padding': 16rpx,
'font-size': 28rpx,
),
'lg': (
'padding': 20rpx,
'font-size': 32rpx,
),
),
$input-sizes
);
@include b(input) {
display: inline-flex;
position: relative;
width: 100%;
padding: map-get(map-get($input-sizes, ''), 'padding');
font-size: map-get(map-get($input-sizes, ''), 'font-size');
border-radius: 15rpx;
overflow: auto;
/* 下划线边框去掉圆角 */
@include m(underline) {
border-radius: 0;
}
/* 输入框类型 start */
@include m(input) {
align-items: center;
}
/* 输入框类型 end */
/* 文字对齐方式 start */
@include m(text-left) {
@include e('base') {
text-align: left;
}
}
@include m(text-right) {
@include e('base') {
text-align: right;
}
}
@include m(text-center) {
@include e('base') {
text-align: center;
}
}
/* 文字对齐方式 end */
@include e(base) {
flex-grow: 1;
position: relative;
width: 100%;
background-color: transparent;
color: inherit;
font-size: inherit;
}
@include e(textarea) {
@include when(custom-height) {
height: 100%;
}
}
@include e(input) {
@include m(select) {
z-index: 1;
:deep(.uni-input-input) {
z-index: -1;
}
}
}
/* 右边图标 start */
@include e(icon) {
display: flex;
align-items: center;
justify-content: center;
position: relative;
height: 100%;
padding-left: 10rpx;
line-height: 1;
color: var(--tn-color-gray);
[class*='validate'] {
margin-left: 6rpx;
}
@include m(validate-error) {
color: var(--tn-color-red);
}
@include m(validate-success) {
color: var(--tn-color-green);
}
}
/* 右边图标 end */
/* 尺寸 start */
@each $size in $tn-form-sizes {
@include m($size) {
padding: map-get(map-get($input-sizes, $size), 'padding');
font-size: map-get(map-get($input-sizes, $size), 'font-size');
}
}
/* 尺寸 end */
/* 禁止输入 start */
@include m(disabled) {
background-color: var(--tn-color-gray-light);
}
/* 禁止输入 end */
/* 插槽 start */
@include e(slot) {
@include m(left) {
margin-right: 8rpx;
}
@include m(right) {
margin-left: 8rpx;
}
}
/* 插槽 end */
/* 字数统计 start */
@include when(show-word-limit) {
padding-bottom: 40rpx;
}
@include e(word-limit) {
position: absolute;
right: 20rpx;
bottom: 10rpx;
font-size: 24rpx;
line-height: 1;
display: flex;
align-items: center;
}
/* 字数统计 end */
}
+157
View File
@@ -0,0 +1,157 @@
@use '../mixins/mixins.scss' as *;
@include b(keyboard) {
position: relative;
width: 100%;
box-shadow: 0rpx -6rpx 30rpx 0rpx rgba(0, 0, 0, 0.05);
background-color: var(--tn-color-white);
display: flex;
/* 普通键盘 start */
@include e(normal-container) {
padding: 10rpx 10rpx 20rpx 10rpx;
&.left {
width: 76%;
display: flex;
flex-wrap: wrap;
}
&.right {
width: 24%;
height: auto;
display: flex;
flex-direction: column;
}
.normal-item {
width: calc(100% / 3 - 20rpx);
margin: 10rpx;
box-shadow: 0rpx 0rpx 20rpx 2rpx rgba(0, 0, 0, 0.06);
background-color: var(--tn-color-white);
display: flex;
align-items: center;
justify-content: center;
padding: 28rpx 0rpx;
border-radius: 8rpx;
font-size: 32rpx;
line-height: 1;
/* 全部占满 start */
&.full {
width: calc(100% - 20rpx);
}
/* 全部占满 end */
/* 铺满 start */
&.fill {
width: calc(100% * 2 / 3 - 20rpx);
}
/* 铺满 end */
/* 禁止操作 start */
&.disabled {
opacity: 0.3;
}
/* 禁止操作 end */
/* 删除按钮 start */
&.delete {
width: calc(100% - 10rpx);
height: fit-content;
font-size: 40rpx;
margin-left: 0rpx;
padding: 24rpx 0rpx;
}
/* 删除按钮 end */
/* 确认按钮 start */
&.confirm {
flex-grow: 1;
width: calc(100% - 10rpx);
margin-left: 0rpx;
background-color: var(--tn-color-primary);
color: var(--tn-color-white);
}
/* 确认按钮 end */
}
}
/* 普通键盘 end */
/* 车牌键盘 start */
@include e(car) {
display: block;
}
@include e(car-top-operation-bar) {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1rpx solid var(--tn-color-gray-light);
.operation-btn {
font-size: 30rpx;
padding: 14rpx 30rpx;
&.cancel {
color: var(--tn-color-danger);
}
&.confirm {
color: var(--tn-color-primary);
}
}
}
@include e(car-container) {
width: 100%;
padding: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
/* 行数据 start */
.column-data {
width: 100%;
display: flex;
margin: 10rpx 0rpx;
}
/* 行数据 end */
/* 列数据 */
.car-item {
flex: 1;
padding: 24rpx 0rpx;
margin: 0rpx 10rpx;
border-radius: 8rpx;
box-shadow: 0rpx 0rpx 20rpx 2rpx rgba(0, 0, 0, 0.06);
background-color: var(--tn-color-white);
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
/* 禁止操作 start */
&.disabled {
opacity: 0.3;
}
/* 禁止操作 end */
/* 切换按钮 start */
&.switch-mode {
padding-left: 12rpx;
padding-right: 12rpx;
}
/* 切换按钮 end */
/* 删除按钮 start */
&.delete {
font-size: 32rpx;
padding-left: 14rpx;
padding-right: 14rpx;
}
/* 删除按钮 end */
}
}
/* 车牌键盘 end */
}
+94
View File
@@ -0,0 +1,94 @@
@use '../mixins/mixins.scss' as *;
@mixin full-style {
width: 100%;
height: 100%;
border-radius: inherit;
}
@include b(lazy-load) {
position: relative;
@include full-style;
// 保证组件被加载时有高度
min-height: 1rpx;
background-color: var(--tn-color-gray-light);
color: var(--tn-color-gray);
/* 正常显示图片 start */
@include when(show-image) {
background-color: transparent;
color: transparent;
}
/* 正常显示图片 end */
/* 内容容器 start */
@include e(container) {
@include full-style;
}
/* 内容容器 end */
/* 正在加载 start */
@include e(loading) {
@include full-style;
display: flex;
align-items: center;
justify-content: center;
&__icon {
font-size: 90rpx;
animation: loading-icon-animation 3s linear infinite;
}
}
/* 正在加载 end */
/* 图片加载失败 start */
@include e(error) {
@include full-style;
display: flex;
align-items: center;
justify-content: center;
font-size: 100rpx;
}
/* 图片加载失败 end */
/* 图片 start */
@include e(image) {
// 消除图片底部空白
display: block;
@include full-style;
opacity: 0;
/* 没有动画效果 */
@include when(no-animation) {
opacity: 1;
}
/* 有加载动画 */
@include when(animation) {
animation: show-image-animation 0.25s ease both;
}
}
/* 图片 end */
}
@keyframes loading-icon-animation {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes show-image-animation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@@ -0,0 +1,65 @@
@use '../mixins/mixins.scss' as *;
@include b(line-progress) {
position: relative;
width: 100%;
border-radius: 2000rpx;
overflow: hidden;
/* 进度 start */
@include e(active) {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 0;
border-radius: inherit;
transition-property: width;
transition-timing-function: ease-out;
/* 条纹 start */
@include m(stripe) {
background-image: linear-gradient(
45deg,
rgba(255, 255, 255, 0.15) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.15) 50%,
rgba(255, 255, 255, 0.15) 75%,
transparent 75%,
transparent
);
background-size: 1rem 1rem;
&--animation {
animation: stripeAnimation 2s linear infinite;
}
}
/* 条纹 end */
}
/* 进度 end */
/* 百分比的值 start */
@include e(percent-value) {
position: absolute;
width: fit-content;
max-width: 100%;
top: 50%;
right: 0rpx;
transform: translate(0, -50%) scale(0.6);
color: #fff;
line-height: 1;
}
/* 百分比的值 end */
}
@keyframes stripeAnimation {
0% {
background-position: 1rem 0;
}
100% {
background-position: 0 0;
}
}
+48
View File
@@ -0,0 +1,48 @@
@use '../mixins/mixins.scss' as *;
@include b(list-item) {
position: relative;
width: 100%;
height: auto;
padding: 30rpx;
display: flex;
align-items: center;
justify-content: space-between;
// 内容
@include e(content) {
flex: 1;
}
// 右图标
@include e(right-icon) {
width: 30rpx;
display: flex;
align-items: center;
justify-content: center;
}
// 圆角
@include m(radius) {
border-radius: 15rpx;
overflow: hidden;
}
/* 底部边框 start */
@include e('bottom-border') {
position: absolute;
left: 50%;
bottom: 0;
width: 100%;
height: 1rpx;
transform: translateX(-50%);
background-color: var(--tn-color-gray-light);
@include when(indent) {
width: 95%;
}
}
/* 底部边框 end */
}
+116
View File
@@ -0,0 +1,116 @@
@use 'sass:map';
@use '../mixins/mixins' as *;
@use '../var/size.scss' as *;
$loading-sizes: () !default;
$loading-sizes: map.merge(
(
'sm': 24rpx,
'': 28rpx,
'lg': 36rpx,
'xl': 44rpx,
),
$loading-sizes
);
@include b(loading) {
display: inline-block;
position: relative;
width: map-get($loading-sizes, '');
height: map-get($loading-sizes, '');
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
width: map-get($loading-sizes, $size);
height: map-get($loading-sizes, $size);
}
}
/* 尺寸 end */
/* 加载模式 start */
@include e(circle) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 50%;
border-width: 4rpx;
border-style: solid;
border-color: var(--loading-color) transparent transparent transparent;
}
@include e(semicircle) {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: 50%;
border-width: 4rpx;
border-style: solid;
border-color: var(--tn-color-gray-light);
}
@include e(flower) {
position: relative;
width: 100%;
height: 100%;
color: var(--loading-color);
@include m(item) {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
&::before {
content: '';
display: block;
width: 4rpx;
height: 25%;
margin: 0 auto;
border-radius: 40%;
background-color: currentColor;
}
@for $i from 1 through 12 {
&:nth-of-type(#{$i}) {
opacity: calc(1 / 12 * #{$i});
transform: rotate(calc(360deg / 12 * #{$i}));
}
}
}
}
/* 加载模式 end */
/* 加载动画 start */
@include m(animation) {
animation-name: rotate;
animation-duration: 1s;
animation-iteration-count: infinite;
transform-origin: center center;
@include spec-selector('', circle) {
animation-timing-function: linear;
}
@include spec-selector('', flower) {
animation-timing-function: steps(12);
}
}
/* 加载动画 end */
}
// 旋转动画
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
+100
View File
@@ -0,0 +1,100 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
// 尺寸信息
$loadmore-sizes: () !default;
$loadmore-sizes: map-merge(
(
'sm': (
'font-size': 24rpx,
'dot': 24rpx,
),
'': (
'font-size': 28rpx,
'dot': 28rpx,
),
'lg': (
'font-size': 32rpx,
'dot': 32rpx,
),
'xl': (
'font-size': 36rpx,
'dot': 36rpx,
),
),
$loadmore-sizes
);
@include b(loadmore) {
position: relative;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: map-get(map-get($loadmore-sizes, ''), 'font-size');
/* 内容 start */
@include e(content) {
position: relative;
display: flex;
align-items: center;
justify-content: center;
/* 左右两边的横线 start */
&::before,
&::after {
content: '';
position: absolute;
top: 50%;
width: 100rpx;
height: 1rpx;
border-radius: 1000rpx;
background-color: var(--tn-color-gray);
}
&::before {
left: 0%;
transform: translate(calc(-100% - 20rpx), -50%);
}
&::after {
left: 100%;
transform: translate(20rpx, -50%);
}
/* 左右两边的横线 end */
}
/* 内容 end */
/* 点内容 start */
@include e(dot) {
width: map-get(map-get($loadmore-sizes, ''), 'dot');
height: map-get(map-get($loadmore-sizes, ''), 'dot');
border-radius: 50%;
}
/* 点内容 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get(map-get($loadmore-sizes, $size), 'font-size');
@include e(dot) {
width: map-get(map-get($loadmore-sizes, $size), 'dot');
height: map-get(map-get($loadmore-sizes, $size), 'dot');
border-radius: 50%;
}
}
}
/* 尺寸 end */
@include when(loading) {
@include when(loading-icon) {
@include e(text) {
margin-left: 10rpx;
}
}
}
}
+63
View File
@@ -0,0 +1,63 @@
@use '../mixins/mixins.scss' as *;
@include b(modal) {
position: relative;
width: 100%;
background-color: #fff;
border-radius: 15rpx;
overflow: hidden;
/* 标题 start */
@include e(title) {
width: 100%;
text-align: center;
font-size: 38rpx;
padding: 40rpx 30rpx 0 30rpx;
}
/* 标题 end */
/* 内容 start */
@include e(content) {
width: 100%;
line-height: 40rpx;
font-size: 30rpx;
padding: 50rpx 30rpx 0 30rpx;
@include m(text) {
width: 100%;
word-wrap: break-word;
text-align: center;
}
}
@include e(title) {
& + .#{$B}__content {
padding-top: 30rpx;
}
}
/* 内容 end */
/*操作按钮 start */
@include e(operation) {
width: 100%;
position: relative;
margin-top: 40rpx;
display: flex;
border-top: 1rpx solid var(--tn-color-gray-disabled);
}
@include e(operation-btn) {
flex-grow: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 28rpx;
font-size: 32rpx;
& + & {
border-left: 1rpx solid var(--tn-color-gray-disabled);
}
}
/*操作按钮 end */
}
+155
View File
@@ -0,0 +1,155 @@
@use '../mixins/mixins.scss' as *;
@include b(navbar) {
position: relative;
width: 100%;
/* wrapper start */
@include e(wrapper) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
/* wrapper end */
/* 导航栏内容 start */
@include e(content) {
position: absolute;
top: 0;
left: 0;
width: 100%;
/* 居中显示 */
@include m(center) {
display: flex;
align-items: center;
justify-content: center;
}
}
/* 导航栏内容 end */
/* 右边操作区域 start */
@include e(right-operation) {
position: absolute;
right: 0;
bottom: 0;
}
/* 右边操作区域 end */
/* 固定在顶部 start */
@include m(fixed) {
position: fixed;
left: 0;
top: 0;
}
/* 固定在顶部 end */
/* 背景颜色 start */
@include e(bg) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
/* #ifndef MP-ALIPAY */
/* 设置毛玻璃效果 */
@include m(frosted) {
backdrop-filter: blur(20rpx);
-webkit-backdrop-filter: blur(20rpx);
}
/* #endif */
}
/* 背景颜色 end */
/* 填充空白内容 start */
@include e(placeholder) {
position: relative;
left: 0;
top: 0;
background-color: transparent;
}
/* 填充空白内容 end */
}
/* 返回按钮区域 */
@include b(navbar-back) {
position: absolute;
left: 15rpx;
top: 50%;
transform: translateY(-50%);
/* 多图标返回按钮 start */
@include e(multi) {
position: relative;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
border: 1rpx solid rgba(255, 255, 255, 0.4);
border-radius: 1000rpx;
background-color: rgba(0, 0, 0, 0.15);
color: #fff;
font-size: 36rpx;
&__item {
flex-grow: 1;
flex-shrink: 0;
width: 50%;
height: 100%;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
}
&::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
width: 1rpx;
height: 60%;
transform: translate(-50%, -50%);
background-color: #fff;
opacity: 0.2;
}
}
/* 多图标返回按钮 end */
/* 单图标 start */
@include e(single) {
position: relative;
width: 70%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
border: 1rpx solid rgba(255, 255, 255, 0.4);
border-radius: 1000rpx;
background-color: rgba(0, 0, 0, 0.15);
color: #fff;
font-size: 36rpx;
}
/* 单图标 end */
/* 返回文字 start */
@include e(text) {
position: relative;
width: 100%;
height: 100%;
display: flex;
align-items: center;
font-size: 30rpx;
&__value {
margin-left: 8rpx;
}
}
/* 返回文字 end */
}
+29
View File
@@ -0,0 +1,29 @@
@use '../mixins/mixins.scss' as *;
@include b(notice-bar) {
position: relative;
width: 100%;
padding: 10rpx 20rpx;
display: flex;
align-items: center;
/* 左图标 start */
@include e(left-icon) {
padding-right: 20rpx;
}
/* 左图标 end */
/* 右图标 start */
@include e(right-icon) {
padding-left: 20rpx;
}
/* 右图标 end */
/* 内容区域 */
@include e(content) {
flex-grow: 1;
flex-shrink: 1;
overflow: hidden;
}
}
+62
View File
@@ -0,0 +1,62 @@
@use '../mixins/mixins.scss' as *;
@include b(notify) {
position: fixed;
opacity: 0;
transition: opacity 0.3s ease, transform 0.3s ease;
/* 顶部弹出 start */
@include m(top) {
left: 0;
right: 0;
top: 0;
width: 100%;
padding: 10rpx 0rpx;
display: flex;
align-items: center;
justify-content: center;
transform: translateY(-100%);
@include when(active) {
transform: translateY(0);
}
}
/* 顶部弹出 end */
/* 居中弹出 start */
@include m(center) {
left: 50%;
top: 50%;
padding: 15rpx;
border-radius: 8rpx;
transform-origin: center center;
transform: translate(-50%, -50%) scale(0);
@include when(active) {
transform: translate(-50%, -50%) scale(1);
}
}
/* 居中弹出 end */
/* 底部弹出 start */
@include m(bottom) {
left: 50%;
bottom: 13%;
padding: 15rpx;
border-radius: 8rpx;
transform-origin: center center;
transform: translate(-50%, -50%) scale(0);
@include when(active) {
transform: translate(-50%, -50%) scale(1);
}
}
/* 底部弹出 end */
/* 弹出激活 状态 start */
@include when(active) {
opacity: 1;
}
/* 弹出激活 状态 end */
}
+102
View File
@@ -0,0 +1,102 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$number-box-sizes: () !default;
$number-box-sizes: map-merge(
(
'sm': (
width: 150rpx,
height: 40rpx,
font-size: 22rpx,
),
'': (
width: 180rpx,
height: 50rpx,
font-size: 28rpx,
),
'lg': (
width: 220rpx,
height: 60rpx,
font-size: 36rpx,
),
),
$number-box-sizes
);
@include b(number-box) {
display: inline-flex;
position: relative;
width: map-get(map-get($number-box-sizes, ''), width);
height: map-get(map-get($number-box-sizes, ''), height);
font-size: map-get(map-get($number-box-sizes, ''), font-size);
/* 操作按钮 start */
@include e(operation-btn) {
flex-grow: 0;
flex-shrink: 0;
position: relative;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
width: map-get(map-get($number-box-sizes, ''), height);
height: map-get(map-get($number-box-sizes, ''), height);
font-size: calc(map-get(map-get($number-box-sizes, ''), font-size) * 1.2);
@include when(disabled) {
opacity: 0.3;
}
}
/* 操作按钮 end */
/* 输入框 start */
@include e(input) {
flex-grow: 1;
flex-shrink: 1;
margin: 0rpx 4rpx;
width: 100%;
height: 100%;
padding: 0rpx;
input {
width: 100%;
height: 100%;
background-color: transparent;
color: inherit;
font-size: inherit;
padding: 0rpx 4rpx;
text-align: center;
}
}
/* 输入框 end */
/* 尺寸 start */
@each $size in $tn-form-sizes {
@include m($size) {
width: map-get(map-get($number-box-sizes, $size), width);
height: map-get(map-get($number-box-sizes, $size), height);
font-size: map-get(map-get($number-box-sizes, $size), font-size);
@include e(operation-btn) {
width: map-get(map-get($number-box-sizes, $size), height);
height: map-get(map-get($number-box-sizes, $size), height);
font-size: calc(
map-get(map-get($number-box-sizes, $size), font-size) * 1.2
);
}
}
}
/* 尺寸 end */
/* 禁止操作 start */
@include m(disabled) {
opacity: 0.4;
}
/* 禁止操作 end */
}
+18
View File
@@ -0,0 +1,18 @@
@use '../mixins/mixins.scss' as *;
@include b(overlay) {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
transition-property: all;
transition-timing-function: ease;
visibility: hidden;
opacity: 0;
@include m(show) {
opacity: 1;
visibility: visible;
}
}
+36
View File
@@ -0,0 +1,36 @@
@use '../mixins/mixins.scss' as *;
@include b(photo-album) {
position: relative;
width: 100%;
display: flex;
flex-wrap: wrap;
/* 容器 start */
@include e(container) {
flex-grow: 0;
flex-shrink: 0;
position: relative;
height: 0;
margin: 10rpx 20rpx 10rpx 0rpx;
}
/* 容器 end */
/* item start */
@include e(item) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 15rpx;
background-color: var(--tn-color-gray-light);
&__image {
width: 100%;
height: 100%;
border-radius: inherit;
}
}
/* item end */
}
+56
View File
@@ -0,0 +1,56 @@
@use '../mixins/mixins.scss' as *;
@include b(picker) {
position: relative;
width: 100%;
border-radius: 30rpx 30rpx 0rpx 0rpx;
box-shadow: 0rpx 0rpx 40rpx 04rpx rgba(0, 0, 0, 0.1);
/* 顶部操作区域 start */
@include e(operation) {
position: relative;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 0rpx;
font-size: 30rpx;
@include when(only-confirm) {
justify-content: flex-end;
}
}
@include e(operation-btn) {
padding: 0rpx 30rpx;
}
/* 顶部操作区域 end */
/* 内容区域 start */
@include e(content) {
position: relative;
width: 100%;
height: 440rpx;
padding: 20rpx 30rpx;
padding-top: 0rpx;
}
@include e(content-item) {
display: flex;
align-items: center;
justify-content: center;
@include m(data) {
width: 100%;
height: fit-content;
text-align: center;
}
}
/* 内容区域 end */
/* picker-view 样式 start */
@include e(picker-view) {
flex-grow: 1;
height: 100%;
}
/* picker-view 样式 end */
}
+115
View File
@@ -0,0 +1,115 @@
@use '../mixins/mixins.scss' as *;
@include b(popup) {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
overflow: hidden;
visibility: hidden;
/* 弹出层内容 start */
@include e(content) {
position: absolute;
// overflow: hidden;
opacity: 0;
// transition-property: transform, opacity;
// transition-duration: 0.3s;
// transition-timing-function: ease;
/* 弹出层位置 start */
@include m(center) {
left: 50%;
top: 50%;
transform: translate(-50%, -50%) scale(0);
transform-origin: center center;
}
@include m(top) {
left: 0;
top: 0;
width: 100%;
transform: scaleY(0);
transform-origin: top center;
}
@include m(left) {
left: 0;
top: 0;
height: 100%;
transform: scaleX(0);
transform-origin: left center;
}
@include m(right) {
right: 0;
top: 0;
height: 100%;
transform: scaleX(0);
transform-origin: right center;
}
@include m(bottom) {
left: 0;
bottom: 0;
width: 100%;
transform: scaleY(0);
transform-origin: bottom center;
}
/* 弹出层位置 end */
}
/* 弹出层内容 end */
/* 关闭按钮 start */
@include e(close-btn) {
position: absolute;
padding: 18rpx;
font-size: 32rpx;
line-height: 1;
color: var(--tn-color-gray);
@include m(right-top) {
right: 0rpx;
top: 0rpx;
}
@include m(left-top) {
left: 0rpx;
top: 0rpx;
}
@include m(right-bottom) {
right: 0rpx;
bottom: 0rpx;
}
@include m(left-bottom) {
left: 0rpx;
bottom: 0rpx;
}
}
/* 关闭按钮 end */
// 弹出弹框
@include when(show) {
@include e(content) {
opacity: 1;
@include m(center) {
transform: translate(-50%, -50%) scale(1);
}
@include m(top) {
transform: scaleY(1);
}
@include m(left) {
transform: scaleX(1);
}
@include m(right) {
transform: scaleX(1);
}
@include m(bottom) {
transform: scaleY(1);
}
}
}
@include when(visible) {
visibility: visible;
@include e(content) {
transition-property: transform, opacity;
transition-duration: 0.3s;
transition-timing-function: ease;
}
}
}
+13
View File
@@ -0,0 +1,13 @@
@use '../mixins/mixins.scss' as *;
@include b('radio-group') {
position: relative;
width: 100%;
display: flex;
flex-wrap: wrap;
@include when(wrap) {
display: block;
}
}
+124
View File
@@ -0,0 +1,124 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$radio-sizes: () !default;
$radio-sizes: map.merge(
(
'sm': (
'padding': 8rpx 14rpx,
'font-size': 24rpx,
'dot': 24rpx,
),
'': (
'padding': 10rpx 20rpx,
'font-size': 28rpx,
'dot': 30rpx,
),
'lg': (
'padding': 12rpx 24rpx,
'font-size': 32rpx,
'dot': 36rpx,
),
),
$radio-sizes
);
@include b(radio) {
flex-grow: 0;
flex-shrink: 0;
display: flex;
align-items: center;
padding: map-get(map-get($radio-sizes, ''), 'padding');
font-size: map-get(map-get($radio-sizes, ''), 'font-size');
border-radius: 10rpx;
transition: all 0.3s ease-in-out;
/* 单选框组中的单选框之间有10rpx的边距 */
@include m(group) {
margin: 10rpx;
}
/* 选中框点 start */
@include e(dot) {
flex-shrink: 0;
position: relative;
width: map-get(map-get($radio-sizes, ''), 'dot');
height: map-get(map-get($radio-sizes, ''), 'dot');
border-radius: 50%;
transition: all 0.3s ease-in-out;
&::after {
content: '';
display: block;
position: absolute;
left: 50%;
top: 50%;
width: calc(map-get(map-get($radio-sizes, ''), 'dot') / 2);
height: calc(map-get(map-get($radio-sizes, ''), 'dot') / 2);
border-radius: 50%;
background-color: #fff;
transition: all 0.3s ease-in-out;
transform: translate(-50%, -50%) scale(0);
transform-origin: center center;
}
}
/* 选中框点 end */
/* 内容 start */
@include e(content) {
@include m(left) {
margin-right: 14rpx;
}
@include m(right) {
margin-left: 14rpx;
}
}
/* 内容 end */
/* 尺寸 start */
@each $size in $tn-form-sizes {
@include m(#{$size}) {
padding: map-get(map-get($radio-sizes, $size), 'padding');
font-size: map-get(map-get($radio-sizes, $size), 'font-size');
@include e(dot) {
width: map-get(map-get($radio-sizes, $size), 'dot');
height: map-get(map-get($radio-sizes, $size), 'dot');
&::after {
width: calc(map-get(map-get($radio-sizes, $size), 'dot') / 2);
height: calc(map-get(map-get($radio-sizes, $size), 'dot') / 2);
}
}
}
}
/* 尺寸 end */
/* 选中效果 start */
@include m(selected) {
@include e(dot) {
&::after {
transform: translate(-50%, -50%) scale(1);
}
}
}
/* 选中效果 end */
/* 禁止效果 start */
@include m(disabled) {
opacity: 0.4;
}
/* 禁止效果 end */
/* 没有边框 start */
@include m(no-border) {
// 如果没有border则不设置内边距
padding: 0;
}
/* 没有边框 end */
}
+75
View File
@@ -0,0 +1,75 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$rate-sizes: () !default;
$rate-sizes: map-merge(
(
'sm': (
'font-size': 32rpx,
'gutter': 8rpx,
),
'': (
'font-size': 38rpx,
'gutter': 8rpx,
),
'lg': (
'font-size': 46rpx,
'gutter': 8rpx,
),
'xl': (
'font-size': 52rpx,
'gutter': 8rpx,
),
),
$rate-sizes
);
@include b(rate) {
position: relative;
width: fit-content;
/* 内容容器 start */
@include e(container) {
display: flex;
align-items: center;
font-size: map-get(map-get($rate-sizes, ''), 'font-size');
line-height: 1;
}
@include e(active-container) {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
width: 0;
overflow: hidden;
}
/* 内容容器 end */
/* item样式 start */
@include e(item) {
padding: 0rpx calc(map-get(map-get($rate-sizes, ''), 'gutter') / 2);
}
/* item样式 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
@include e(container) {
font-size: map-get(map-get($rate-sizes, $size), 'font-size');
}
@include e(item) {
padding: 0rpx calc(map-get(map-get($rate-sizes, $size), 'gutter') / 2);
}
}
}
/* 尺寸 end */
/* 禁止点击 start */
@include when(readonly) {
// opacity: 0.4;
}
/* 禁止点击 end */
}
+45
View File
@@ -0,0 +1,45 @@
@use '../mixins/mixins.scss' as *;
@include b(read-more) {
position: relative;
width: 100%;
overflow: hidden;
transition: height 0.3s ease;
/* 操作区域 start */
@include e(operation-area) {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: auto;
@include when(expand) {
height: 40%;
}
}
@include e(operation-content) {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
&.expand {
align-items: flex-end;
padding-bottom: 10rpx;
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.1) 0%,
#fff 70%,
#fff 100%
);
}
&.fold {
background-color: transparent;
}
}
/* 操作区域 end */
}
@@ -0,0 +1,19 @@
@use '../mixins/mixins.scss' as *;
@include b(row-notice-bar) {
position: relative;
width: auto;
min-width: 0;
padding-left: 100%;
color: inherit;
background-color: transparent;
@include e(value) {
display: inline;
word-break: keep-all;
white-space: nowrap;
width: auto;
min-width: 0;
}
}
+41
View File
@@ -0,0 +1,41 @@
@use '../mixins/mixins.scss' as *;
@include b(scroll-list) {
position: relative;
width: 100%;
/* 内容区域 start */
@include e(content) {
width: 100%;
.data {
position: relative;
width: fit-content;
}
}
@include e(scroll-view) {
width: 100%;
}
/* 内容区域 end */
/* 指示器 start */
@include when(indicator) {
padding-bottom: 50rpx;
}
@include e(indicator) {
position: absolute;
left: 50%;
bottom: 20rpx;
height: 8rpx;
border-radius: 1000rpx;
transform: translate(-50%, 0);
}
@include e(indicator-block) {
position: absolute;
left: 0;
top: 0;
height: 100%;
border-radius: inherit;
}
/* 指示器 end */
}
+172
View File
@@ -0,0 +1,172 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$search-box-sizes: () !default;
$search-box-sizes: map-merge(
(
'sm': (
'font-size': 24rpx,
'height': 64rpx,
'search-button-padding': 0rpx 20rpx,
),
'': (
'font-size': 28rpx,
'height': 74rpx,
'search-button-padding': 0rpx 26rpx,
),
'lg': (
'font-size': 32rpx,
'height': 86rpx,
'search-button-padding': 0rpx 26rpx,
),
'xl': (
'font-size': 36rpx,
'height': 94rpx,
'search-button-padding': 0rpx 26rpx,
),
),
$search-box-sizes
);
@include b(search-box) {
position: relative;
height: map-get(map-get($search-box-sizes, ''), 'height');
padding: 10rpx 10rpx 10rpx 20rpx;
display: flex;
align-items: center;
background-color: transparent;
line-height: 1;
font-size: map-get(map-get($search-box-sizes, ''), 'font-size');
/* 内容容器 start */
@include e(content) {
flex-grow: 1;
display: flex;
align-items: center;
}
@include e(input) {
flex-grow: 1;
background-color: transparent;
color: inherit;
font-size: inherit;
padding: 0rpx;
height: 100%;
min-height: 100%;
line-height: 1;
@include m(left) {
text-align: left;
}
@include m(center) {
text-align: center;
}
@include m(right) {
text-align: right;
}
}
/* 内容容器 end */
/* 占位符内容 start */
@include e(placeholder) {
width: 100%;
display: flex;
align-items: center;
@include m(left) {
justify-content: flex-start;
}
@include m(center) {
justify-content: center;
}
@include m(right) {
justify-content: flex-end;
}
}
@include e(placeholder-icon) {
margin-right: 8rpx;
font-size: calc(map-get(map-get($search-box-sizes, ''), 'font-size') * 1.2);
}
/* 占位符内容 end */
/* 清除内容 start */
@include e(clear-button) {
color: var(--tn-color-gray);
font-size: 34rpx;
margin-left: 12rpx;
}
/* 清除内容 end */
/* 搜索按钮 start */
@include e(search-button) {
flex-shrink: 0;
padding: map-get(map-get($search-box-sizes, ''), 'search-button-padding');
height: 100%;
margin-left: 10rpx;
display: flex;
align-items: center;
justify-content: center;
}
/* 搜索按钮 end */
/* 边框 start */
@include m(border) {
border-width: 1rpx;
border-style: solid;
}
/* 边框 end */
/* 搜索框形状 start */
@include m(square) {
border-radius: 15rpx;
@include e(search-button) {
border-radius: 15rpx;
}
}
@include m(round) {
border-radius: 1000rpx;
@include e(search-button) {
border-radius: 1000rpx;
}
@include e(input) {
padding-left: 16rpx;
@include m(left) {
padding-left: 0rpx;
}
}
}
/* 搜索框形状 end */
/* 设置尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
height: map-get(map-get($search-box-sizes, $size), 'height');
font-size: map-get(map-get($search-box-sizes, $size), 'font-size');
@include e(placeholder-icon) {
font-size: calc(
map-get(map-get($search-box-sizes, $size), 'font-size') * 1.2
);
}
@include e(search-button) {
padding: map-get(
map-get($search-box-sizes, $size),
'search-button-padding'
);
}
}
}
@include m(sm) {
&#{'.#{$B}--square'} {
border-radius: 8rpx;
@include e(search-button) {
border-radius: 8rpx;
}
}
}
/* 设置尺寸 end */
}
+82
View File
@@ -0,0 +1,82 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$slider-sizes: () !default;
$slider-sizes: map-merge(
(
'sm': (
'height': 12rpx,
'bar-size': 26rpx,
),
'': (
'height': 16rpx,
'bar-size': 34rpx,
),
'lg': (
'height': 20rpx,
'bar-size': 40rpx,
),
),
$slider-sizes
);
@include b(slider) {
position: relative;
width: 100%;
height: map-get(map-get($slider-sizes, ''), 'height');
border-radius: 1000rpx;
/* 滑块 start */
@include e(bar) {
position: absolute;
left: 0;
top: 50%;
width: map-get(map-get($slider-sizes, ''), 'bar-size');
height: map-get(map-get($slider-sizes, ''), 'bar-size');
border-radius: 50%;
background-color: #fff;
box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(0, 0, 0, 0.1);
transform: translate(-50%, -50%);
}
/* 滑块 end */
/* 激活时滑动条 start */
@include e(active) {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 0%;
border-radius: inherit;
}
/* 激活时滑动条 end */
/* 尺寸start */
@each $size in $tn-form-sizes {
@include m($size) {
height: map-get(map-get($slider-sizes, $size), 'height');
@include e(bar) {
width: map-get(map-get($slider-sizes, $size), 'bar-size');
height: map-get(map-get($slider-sizes, $size), 'bar-size');
}
}
}
/* 尺寸end */
/* 禁用 start */
@include m(disabled) {
opacity: 0.4;
}
/* 禁用 end */
// 是否搭配formItem一起使用
@include when(form-item) {
margin-left: 10rpx;
}
}
+225
View File
@@ -0,0 +1,225 @@
@use '../mixins/mixins.scss' as *;
$mode-item-size: 50rpx;
@include b(step) {
flex: 1;
position: relative;
width: 100%;
display: flex;
justify-content: flex-end;
/* 内容容器 start */
@include e(container) {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
/* 内容容器 end */
/* 模式内容 start */
@include e(mode-item) {
position: relative;
width: $mode-item-size;
height: $mode-item-size;
// background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
}
/* 模式内容 end */
/* 内容文字 start */
@include e(mode-title) {
transition: color 0.3s ease;
margin-top: 6rpx;
}
/* 内容文字 end */
/* 点模式 start */
@include e(mode-dot) {
width: 20rpx;
height: 20rpx;
border-radius: 50%;
transition: background-color 0.3s ease;
}
/* 点模式 end */
/* 数字模式 start */
@include e(mode-number) {
position: relative;
width: 80%;
height: 80%;
border-radius: 50%;
border: 1rpx solid var(--tn-color-gray);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
// background-color: transparent;
transition: background-color 0.3s ease, border-color 0.3s ease;
&::before {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
line-height: 1;
opacity: 1;
transition: opacity 0.3s ease;
}
.icon {
line-height: 1;
opacity: 0;
transition: opacity 0.3s ease;
}
}
/* 数字模式 end */
/* 点图标模式 start */
@include e(mode-dotIcon) {
position: relative;
width: 100%;
height: 100%;
.dot {
position: absolute;
left: 50%;
top: 50%;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
opacity: 1;
transform: translate(-50%, -50%) scale(1);
transform-origin: center center;
transition: background-color 0.3s ease, opacity 0.3s ease,
transform 0.3s ease;
}
.icon {
font-size: 42rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) scale(0);
transform-origin: center center;
// color: transparent;
opacity: 0;
transition: color 0.3s ease, opacity 0.3s ease, transform 0.3s ease;
}
}
/* 点图标模式 end */
/* 图标模式 start */
@include e(mode-icon) {
font-size: 42rpx;
.icon {
transition: color 0.3s ease;
transform-origin: center center;
}
}
/* 图标模式 end */
/* 横线 start */
@include e(line) {
position: absolute;
right: calc(#{$mode-item-size} * 1.35);
top: calc(#{$mode-item-size} / 2 - 2rpx);
width: calc(100% - #{$mode-item-size});
height: 4rpx;
z-index: 1;
transition: background-color 0.3s ease;
@include when(no-title) {
right: calc(#{$mode-item-size});
}
}
/* 横线 end */
/* 激活状态 start */
@include when(active) {
// 数字模式
@include e(mode-number) {
border-color: transparent;
&::before {
opacity: 0;
}
.icon {
opacity: 1;
}
}
// 点图标模式
@include e(mode-dotIcon) {
.dot {
opacity: 0;
transform: translate(-50%, -50%) scale(2);
}
.icon {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
// 图标模式
@include e(mode-icon) {
.icon {
animation: icon-mode-switch-animation 0.3s ease;
}
}
}
/* 激活状态 end */
@for $i from 1 through 10 {
&:nth-child(#{$i}) {
@include e(mode-number) {
&::before {
content: '#{$i}';
}
}
}
}
/* 最后一个元素 start */
&:first-of-type {
flex: auto;
flex-grow: 0;
flex-shrink: 0;
width: fit-content;
max-width: fit-content;
@include e(line) {
display: none;
}
}
/* 最后一个元素 end */
}
/* 图标模式下切换动画 */
@keyframes icon-mode-switch-animation {
from {
opacity: 0;
transform: scale(1.5);
}
to {
opacity: 1;
transform: scale(1);
}
}
+10
View File
@@ -0,0 +1,10 @@
@use '../mixins/mixins.scss' as *;
@include b(steps) {
position: relative;
width: 100%;
display: flex;
flex-wrap: nowrap;
}
+12
View File
@@ -0,0 +1,12 @@
@use '../mixins/mixins.scss' as *;
@include b(sticky) {
/* #ifdef APP-VUE || MP-WEIXIN */
position: sticky;
/* #endif */
@include e(content) {
width: 100%;
z-index: inherit;
}
}
@@ -0,0 +1,29 @@
@use '../mixins/mixins.scss' as *;
@include b(subsection-item) {
position: relative;
flex: 1;
padding: 10rpx;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.3s ease;
/* 分段器模式 start */
@include m(default) {
border-right-width: 1rpx;
border-right-style: solid;
&:last-of-type {
border: none;
}
}
/* 分段器模式 end */
/* 禁止选中 */
@include when(disabled) {
opacity: 0.4;
}
}
+68
View File
@@ -0,0 +1,68 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$subsection-sizes: () !default;
$subsection-sizes: map.merge(
(
'sm': 24rpx,
'': 28rpx,
'lg': 32rpx,
'xl': 36rpx,
),
$subsection-sizes
);
@include b(subsection) {
position: relative;
width: 100%;
font-size: map-get($subsection-sizes, '');
overflow: hidden;
/* 内容 start */
@include e(content) {
position: relative;
width: 100%;
display: flex;
color: var(--tn-text-color-primary);
}
/* 内容 end */
/* 滑块 start */
@include e(slider) {
position: absolute;
top: 0;
left: 0;
height: 100%;
transition-property: left, width, background-color;
transition-duration: 0.3s;
transition-timing-function: ease;
}
/* 滑块 end */
/* 模式设置 start */
@include m(default) {
border-width: 1rpx;
border-style: solid;
}
@include m(button) {
@include e(slider) {
transform-origin: center center;
transform: scale(0.85);
border-radius: 10rpx;
}
}
/* 模式设置 end */
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get($subsection-sizes, $size);
}
}
/* 尺寸 end */
}
@@ -0,0 +1,72 @@
@use '../mixins/mixins.scss' as *;
@include b(swipe-action-item) {
position: relative;
width: 100%;
overflow: hidden;
/* 内容 start */
@include e(content) {
position: relative;
width: 100%;
background-color: var(--tn-color-white);
z-index: 1;
transition-property: right;
transition-timing-function: ease;
}
/* 内容 end */
/* 操作选项 start */
@include e(options) {
position: absolute;
top: 0;
bottom: 0;
height: 100%;
right: 0;
z-index: 1;
display: flex;
align-items: center;
transition-property: right;
transition-timing-function: ease;
}
@include e(option-item) {
position: relative;
height: 100%;
/* 禁止选中 start */
@include when(disabled) {
opacity: 0.4;
}
/* 禁止选中 end */
/* 圆形按钮 start */
@include when(round) {
width: 90rpx;
height: 90rpx;
display: flex;
align-items: center;
justify-content: center;
@include e(option-item-content) {
width: 70rpx;
height: 70rpx;
padding: 0rpx;
justify-content: center;
border-radius: 50%;
}
}
/* 圆形按钮 end */
}
@include e(option-item-content) {
height: 100%;
position: relative;
display: flex;
align-items: center;
padding: 0rpx 24rpx;
.text {
margin-left: 8rpx;
}
}
/* 操作选项 end */
}
@@ -0,0 +1,6 @@
@use '../mixins/mixins.scss' as *;
@include b(swipe-action) {
position: relative;
width: 100%;
}
+147
View File
@@ -0,0 +1,147 @@
@use '../mixins/mixins.scss' as *;
@include b(swiper) {
position: relative;
width: 100%;
height: 100%;
@include e(wrapper) {
width: 100%;
height: 100%;
}
@include e(swiper) {
width: 100%;
height: 100%;
}
@include e(swiper-item) {
width: 100%;
height: 100%;
overflow: visible !important;
> view {
width: 100%;
height: 100%;
}
}
/* 指示器 start */
@include e(indicator) {
position: absolute;
/* 设置指示器的位置 start */
@include m(left-top) {
left: 30rpx;
top: 30rpx;
transform: translateY(-50%);
@include e(indicator-number) {
margin-top: 20rpx;
}
}
@include m(center-top) {
top: 30rpx;
left: 50%;
transform: translate(-50%, -50%);
@include e(indicator-number) {
margin-top: 20rpx;
}
}
@include m(right-top) {
right: 30rpx;
top: 30rpx;
transform: translateY(-50%);
@include e(indicator-number) {
margin-top: 20rpx;
}
}
@include m(left-bottom) {
left: 30rpx;
bottom: 30rpx;
transform: translateY(50%);
@include e(indicator-number) {
margin-bottom: 20rpx;
}
}
@include m(center-bottom) {
bottom: 30rpx;
left: 50%;
transform: translate(-50%, 50%);
@include e(indicator-number) {
margin-bottom: 20rpx;
}
}
@include m(right-bottom) {
right: 30rpx;
bottom: 30rpx;
transform: translateY(50%);
@include e(indicator-number) {
margin-bottom: 20rpx;
}
}
/* 设置指示器的位置 end */
}
/* 指示器类型 start */
@include e(indicator-line) {
position: relative;
width: 100rpx;
height: 8rpx;
.indicator-wrapper {
width: 100%;
height: 100%;
.active-block {
position: absolute;
height: 100%;
left: 0;
top: 0;
transition: transform 0.3s ease-out;
}
}
}
@include e(indicator-dot) {
position: relative;
width: fit-content;
height: auto;
.indicator-wrapper {
display: flex;
align-items: center;
.dot-item {
position: relative;
width: 16rpx;
height: 16rpx;
border-radius: 50%;
margin-right: 10rpx;
transition-property: width, border-radius;
transition-duration: 0.3s;
transition-timing-function: ease;
&.active {
width: 32rpx;
border-radius: 30rpx;
}
}
}
}
@include e(indicator-number) {
position: relative;
width: fit-content;
height: auto;
.indicator-wrapper {
display: flex;
align-items: center;
line-height: 1;
padding: 10rpx 24rpx;
border-radius: 100rpx;
.sep {
margin: 0rpx 6rpx;
}
}
}
/* 指示器类型 end */
/* 指示器 end */
}
+67
View File
@@ -0,0 +1,67 @@
@use '../mixins/mixins.scss' as *;
$switch-tab-border-radius: 15rpx;
@include b(switch-tab) {
position: relative;
width: 100%;
border-radius: $switch-tab-border-radius;
/* 标签 start */
@include e(tabs) {
position: relative;
width: 100%;
display: flex;
}
@include e(tab) {
position: relative;
flex: 1;
height: 70rpx;
/* tab内部内容 start */
.tab-item {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: inherit;
border-radius: inherit;
transition-property: height, border-top-left-radius,
border-top-right-radius, border-bottom-left-radius,
border-bottom-right-radius, background-color, color;
transition-duration: 0.15s;
transition-timing-function: linear;
&.bg {
transform-origin: center bottom;
background-color: inherit;
}
&.text {
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
}
}
/* tab内部内容 end */
&:nth-of-type(1) {
border-top-left-radius: $switch-tab-border-radius;
}
&:nth-last-of-type(1) {
border-top-right-radius: $switch-tab-border-radius;
}
/* 激活状态 start */
@include when(active) {
.tab-item {
border-top-left-radius: $switch-tab-border-radius;
border-top-right-radius: $switch-tab-border-radius;
height: 90rpx;
}
}
/* 激活状态 end */
}
/* 标签 end */
}
+196
View File
@@ -0,0 +1,196 @@
@use 'sass:map';
@use '../mixins/mixins' as *;
@use '../var/size.scss' as *;
$switch-sizes: () !default;
$switch-sizes: map-merge(
(
'sm': (
width: 70rpx,
height: 40rpx,
font-size: 24rpx,
padding: 4rpx,
),
'': (
width: 100rpx,
height: 50rpx,
font-size: 28rpx,
padding: 6rpx,
),
'lg': (
width: 120rpx,
height: 60rpx,
font-size: 36rpx,
padding: 8rpx,
),
),
$switch-sizes
);
@include b(switch) {
display: inline-flex;
position: relative;
min-width: map-get(map-get($switch-sizes, ''), width);
height: map-get(map-get($switch-sizes, ''), height);
font-size: map-get(map-get($switch-sizes, ''), font-size);
padding: 0 map-get(map-get($switch-sizes, ''), padding);
transition: all 0.3s ease;
color: #fff;
/* 内部切换点 start */
@include e(dot) {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 50%;
left: map-get(map-get($switch-sizes, ''), padding);
width: calc(map-get(map-get($switch-sizes, ''), height) * 0.8);
height: calc(map-get(map-get($switch-sizes, ''), height) * 0.8);
background-color: #fff;
transform: translate(0, -50%);
transition: all 0.3s ease-in-out;
@include m(checked) {
left: calc(100% - map-get(map-get($switch-sizes, ''), padding));
transform: translate(-100%, -50%);
}
}
/* 内部切换点 end */
/* 按钮内部文字 start */
&__active-content,
&__inactive-content {
height: 100%;
display: flex;
align-items: center;
opacity: 0;
animation-duration: 0.3s;
animation-timing-function: ease;
animation-fill-mode: forwards;
&--icon {
transform-origin: center;
transform: scale(1.1);
}
}
/* 未激活 start */
@include e(inactive-content) {
padding-left: calc(
map-get(map-get($switch-sizes, ''), height) * 0.9 +
map-get(map-get($switch-sizes, ''), padding)
);
padding-right: map-get(map-get($switch-sizes, ''), padding);
transform: scale(0) translateX(-100%);
animation-name: switch-content-animation-inactive;
}
/* 未激活 end */
/* 激活 start */
@include e(active-content) {
padding-right: calc(
map-get(map-get($switch-sizes, ''), height) * 0.9 +
map-get(map-get($switch-sizes, ''), padding)
);
padding-left: map-get(map-get($switch-sizes, ''), padding);
transform: scale(0) translateX(100%);
animation-name: switch-content-animation-active;
}
/* 激活 end */
/* 按钮内部文字 end */
/* 按钮形状 start */
@include m(square) {
border-radius: 6rpx;
@include e(dot) {
border-radius: 6rpx;
}
}
@include m(round) {
border-radius: 1000rpx;
@include e(dot) {
border-radius: 50%;
}
}
/* 按钮形状 end */
/* 按钮尺寸 start */
@each $size in $tn-form-sizes {
@include m($size) {
min-width: map-get(map-get($switch-sizes, $size), width);
height: map-get(map-get($switch-sizes, $size), height);
font-size: map-get(map-get($switch-sizes, $size), font-size);
padding: 0 map-get(map-get($switch-sizes, $size), padding);
@include e(dot) {
left: map-get(map-get($switch-sizes, $size), padding);
width: calc(map-get(map-get($switch-sizes, $size), height) * 0.8);
height: calc(map-get(map-get($switch-sizes, $size), height) * 0.8);
@include m(checked) {
left: calc(100% - map-get(map-get($switch-sizes, $size), padding));
}
}
/* 未激活 start */
@include e(inactive-content) {
padding-left: calc(
map-get(map-get($switch-sizes, $size), height) * 0.9 +
map-get(map-get($switch-sizes, $size), padding)
);
padding-right: map-get(map-get($switch-sizes, $size), padding);
}
/* 未激活 end */
/* 激活 start */
@include e(active-content) {
padding-right: calc(
map-get(map-get($switch-sizes, $size), height) * 0.9 +
map-get(map-get($switch-sizes, $size), padding)
);
padding-left: map-get(map-get($switch-sizes, $size), padding);
}
/* 激活 end */
}
}
/* 按钮尺寸 end */
/* 禁用 start */
@include m(disabled) {
opacity: 0.6;
}
/* 禁用 end */
// 如果Switch开关存在内容则根据内容去设置开关的宽度
@include when(content) {
min-width: auto;
}
}
@keyframes switch-content-animation-active {
from {
opacity: 0;
transform: scale(0) translateX(100%);
}
to {
opacity: 1;
transform: scale(1) translateX(0%);
}
}
@keyframes switch-content-animation-inactive {
from {
opacity: 0;
transform: scale(0) translateX(-100%);
}
to {
opacity: 1;
transform: scale(1) translateX(0%);
}
}
+86
View File
@@ -0,0 +1,86 @@
@use '../mixins/mixins.scss' as *;
@include b(tabbar-item) {
flex: 1;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
line-height: 1;
/* 图标 start */
@include e(icon) {
position: relative;
font-size: 40rpx;
line-height: 1;
margin: 4rpx 0rpx;
transition: all 0.3s ease;
transform-origin: center center;
}
/* 图标 end */
/* 文字 start */
@include e(text) {
font-size: 22rpx;
margin: 8rpx 0rpx 12rpx 0rpx;
transition: all 0.3s ease;
transform-origin: center center;
}
/* 文字 end */
/* 凸起按钮 start */
@include e(bulge) {
position: absolute;
left: 50%;
border-radius: 50%;
color: #fff;
font-size: 40rpx;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
transform: translateX(-50%);
}
/* 凸起按钮 end */
/* 单元素 start */
@include when(only-element) {
justify-content: center;
@include e(icon) {
margin: 0;
}
@include e(text) {
margin: 0;
}
}
/* 单元素 end */
/* 是否激活状态 start */
@include when(active) {
// 是否带动画
@include when(animation) {
@include e(icon) {
animation: normalSwitchAnimation 0.3s ease;
}
}
}
/* 是否激活状态 end */
}
// 切换动画
@keyframes normalSwitchAnimation {
0% {
transform: scale(1);
}
50% {
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}
+81
View File
@@ -0,0 +1,81 @@
@use '../mixins/mixins.scss' as *;
@include b(tabbar) {
position: relative;
width: 100%;
box-sizing: content-box;
/* 顶部阴影 start */
@include m(top-shadow) {
box-shadow: 0rpx 0rpx 30rpx 0rpx rgba(0, 0, 0, 0.07);
}
/* 顶部阴影 end */
/* 背景颜色 start */
@include e(bg) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
/* #ifndef MP-ALIPAY */
/* 毛玻璃 */
@include m(frosted) {
backdrop-filter: blur(20rpx);
-webkit-backdrop-filter: blur(20rpx);
}
/* #endif */
}
/* 背景颜色 end */
/* 内容区域 start */
@include e(content) {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: inherit;
display: flex;
flex-wrap: nowrap;
}
/* 内容区域 end */
/* 凸起按钮 start */
@include e(bulge) {
position: absolute;
transform: translateX(-50%);
border-radius: 50%;
@include m(top-shadow) {
box-shadow: 0rpx 0rpx 30rpx 0rpx rgba(0, 0, 0, 0.07);
}
/* #ifndef MP-ALIPAY */
/* 毛玻璃 */
@include m(frosted) {
backdrop-filter: blur(20rpx);
-webkit-backdrop-filter: blur(20rpx);
}
/* #endif */
}
/* 凸起按钮 end */
/* 占位内容 start */
@include e(placeholder) {
position: relative;
background-color: transparent;
box-sizing: content-box;
}
/* 占位内容 end */
/* 固定在底部 start */
@include m(fixed) {
position: fixed;
left: 0;
bottom: 0;
}
/* 固定在底部 end */
}
+50
View File
@@ -0,0 +1,50 @@
@use '../mixins/mixins.scss' as *;
@include b(tabs-item) {
flex: 1;
position: relative;
font-weight: normal;
height: 100%;
transition-property: color, font-size;
transition-duration: 0.3s;
transition-timing-function: linear;
/* 允许滚动下的元素 start */
@include m(scroll) {
flex: auto;
flex-grow: 1;
flex-shrink: 0;
padding: 0rpx 30rpx;
}
/* 允许滚动下的元素 end */
/* 是否加粗 start */
@include m(bold) {
font-weight: 800;
}
/* 是否加粗 end */
/* 内容 start */
@include e(content) {
position: relative;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
&__value {
position: relative;
}
}
/* 内容 end */
@include when(no-bar) {
@include e(content) {
align-items: flex-end;
}
}
}
+58
View File
@@ -0,0 +1,58 @@
@use '../mixins/mixins.scss' as *;
@include b(tabs) {
position: relative;
width: 100%;
/* scroll-view start */
@include e(scroll-view) {
position: relative;
width: 100%;
height: 100%;
}
/* scroll-view end */
/* 内容容器 start */
@include e(container) {
position: relative;
display: flex;
align-items: flex-end;
width: 100%;
max-width: 100%;
height: 100%;
overflow: hidden;
@include when(scroll) {
width: max-content;
max-width: none;
overflow: unset;
}
}
/* 内容容器 end */
/* bar 滑块 start */
@include e(bar-container) {
position: absolute;
left: 0;
bottom: 0;
transition-property: left, opacity;
transition-duration: 0.3s;
transition-timing-function: ease;
}
@include e(bar) {
position: relative;
height: 10rpx;
border-radius: 3000rpx;
}
/* bar 滑块 end */
/* 底部阴影 start */
@include m(bottom-shadow) {
box-shadow: 0rpx 5rpx 16rpx 0rpx rgba(0, 0, 0, 0.05);
}
/* 底部阴影 end */
}
+45
View File
@@ -0,0 +1,45 @@
@use '../mixins/mixins.scss' as *;
@include b(tag) {
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
line-height: 1;
white-space: nowrap;
width: fit-content;
font-size: var(--tn-font-size);
padding: 6rpx 16rpx;
font-size: var(--tn-font-size);
/* size尺寸 satrt */
@include m(sm) {
font-size: calc(var(--tn-font-size) * 1.5);
}
@include m(lg) {
font-size: calc(var(--tn-font-size) * 2);
}
@include m(xl) {
font-size: calc(var(--tn-font-size) * 2.5);
}
/* size尺寸 end */
/* shape形状 start */
@include m(circle) {
border-radius: 100rpx;
}
@include m(round) {
border-radius: 10rpx;
}
@include m(circleLeft) {
border-top-left-radius: 50rpx;
border-bottom-left-radius: 50rpx;
}
@include m(circleRight) {
border-top-right-radius: 50rpx;
border-bottom-right-radius: 50rpx;
}
/* shape形状 end */
}
+105
View File
@@ -0,0 +1,105 @@
@use 'sass:map';
@use '../mixins/mixins.scss' as *;
@use '../var/size.scss' as *;
$title-sizes: () !default;
$title-sizes: map-merge(
(
'sm': (
'font-size': 24rpx,
),
'': (
'font-size': 28rpx,
),
'lg': (
'font-size': 32rpx,
),
'xl': (
'font-size': 38rpx,
),
),
$title-sizes
);
@include b(title) {
position: relative;
// width: 100%;
height: fit-content;
/* 标题内容 start */
@include e(title) {
position: relative;
width: fit-content;
font-size: map-get(map-get($title-sizes, ''), 'font-size');
/* 尺寸 start */
@each $size in $tn-inner-sizes {
@include m($size) {
font-size: map-get(map-get($title-sizes, $size), 'font-size');
}
}
/* 尺寸 end */
// 左边垂直竖线
@include m(vLine) {
padding-left: 18rpx;
}
// 左边点
@include m(dot) {
padding-left: 20rpx;
}
// 底部横线
@include m(hLine) {
padding-bottom: 10rpx;
}
// 子标题
@include m(subTitle) {
width: 100%;
z-index: 1;
padding-bottom: 10rpx;
}
}
/* 标题内容 end */
/* 辅助元素 start */
// 左边垂直竖线
@include e(vLine) {
position: absolute;
left: 0;
top: 50%;
width: 8rpx;
height: 92%;
border-radius: 30rpx;
transform: translateY(-50%);
}
// 左边点
@include e(dot) {
position: absolute;
left: 0;
top: 50%;
width: 14rpx;
height: 14rpx;
border-radius: 50%;
transform: translateY(-50%);
}
// 底部横线
@include e(hLine) {
position: absolute;
left: 8rpx;
bottom: 0;
width: 40%;
max-width: 40rpx;
height: 8rpx;
border-radius: 40rpx;
}
// 子标题
@include e(subTitle) {
position: absolute;
left: 8rpx;
top: 20%;
z-index: -1;
display: inline-block;
white-space: nowrap;
}
/* 辅助元素 end */
}
+15
View File
@@ -0,0 +1,15 @@
@use '../mixins/mixins.scss' as *;
@include b(water-fall) {
position: relative;
width: 100%;
display: flex;
flex-wrap: wrap;
/* 左右两边容器 start */
@include e(container) {
width: calc(100% / 2);
height: fit-content;
}
/* 左右两边容器 end */
}
@@ -0,0 +1,127 @@
@use '../mixins/mixins.scss' as *;
@include b(week-calendar) {
position: relative;
width: 100%;
background-color: var(--tn-color-white);
color: var(--tn-text-color-primary);
/* 星期展示 start */
@include e(weeks) {
position: relative;
width: 100%;
padding: 20rpx 30rpx;
display: flex;
flex-wrap: nowrap;
}
@include e(week) {
flex-grow: 1;
flex-shrink: 1;
display: flex;
align-items: center;
justify-content: center;
}
/* 星期展示 end */
/* 周日历数据 start */
@include e(data) {
position: relative;
width: 100%;
padding: 0rpx 30rpx;
background-color: var(--tn-color-gray-light);
/* 星期切换按钮 start */
&__week-btn {
position: absolute;
top: 0;
height: 100%;
width: 30rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 38rpx;
font-weight: bold;
overflow: hidden;
color: var(--tn-color-gray);
&.left {
left: 0rpx;
}
&.right {
right: 0rpx;
}
}
/* 星期切换按钮 end */
/* 轮播 start */
&__swiper {
position: relative;
width: 100%;
height: 100%;
}
&__swiper-item {
/* #ifndef MP-ALIPAY */
position: relative;
/* #endif */
width: 100%;
height: 100%;
}
/* 轮播 end */
/* 日期容器数据 start */
&__dates {
position: relative;
width: 100%;
height: 100%;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
&__date {
position: relative;
width: calc(100% / 7);
height: 0;
padding-bottom: calc(100% / 7);
margin: 0rpx;
.date {
position: relative;
width: 100%;
height: 0;
padding-bottom: 100%;
border-radius: 50%;
.date-value {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
line-height: 1;
.value {
font-size: 32rpx;
}
.desc {
font-size: 20rpx;
margin-top: 4rpx;
}
}
// 禁止的日期
&.is-disabled {
.date-value {
color: var(--tn-color-gray);
}
}
}
}
/* 日期容器数据 end */
}
/* 周日历数据 end */
}
+5
View File
@@ -0,0 +1,5 @@
// 图鸟内置尺寸
$tn-inner-sizes: sm, lg, xl;
// form表单尺寸
$tn-form-sizes: sm, lg;