- {digits !== 0 ? (
- <>
- {checkPoint(price) || digits ? (
+ const renderRawContent = () => <>{originalPrice}>
+ const renderInner = () => {
+ return (
+ <>
+ {symbol && position === 'before' ? renderSymbol() : null}
+
+ {digits !== 0 ? (
+ <>
+ {checkPoint(price) || digits ? (
+
- >
- ) : null}
+ >
+ ) : null}
- {symbol && position === 'after' ? renderSymbol() : null}
+ {symbol && position === 'after' ? renderSymbol() : null}
+ >
+ )
+ }
+
+ return (
+
)
}
diff --git a/src/packages/progress/__tests__/progress.spec.tsx b/src/packages/progress/__tests__/progress.spec.tsx
index b455f02565..73d8faa486 100644
--- a/src/packages/progress/__tests__/progress.spec.tsx
+++ b/src/packages/progress/__tests__/progress.spec.tsx
@@ -66,11 +66,3 @@ test('should handle animation mode and duration', () => {
expect(onActiveEndMock).toHaveBeenCalled()
}, 600)
})
-
-test('should render with aria-label', () => {
- const { container } = render(
-
- )
- const progressDiv = container.querySelector('.nut-progress')
- expect(progressDiv?.getAttribute('aria-label')).toBe('当前进度50%')
-})
diff --git a/src/packages/progress/progress.tsx b/src/packages/progress/progress.tsx
index 9c7e7ae506..1190440ed9 100644
--- a/src/packages/progress/progress.tsx
+++ b/src/packages/progress/progress.tsx
@@ -1,7 +1,7 @@
import React, { FunctionComponent, useEffect, useRef, useState } from 'react'
import classNames from 'classnames'
import { ComponentDefaults } from '@/utils/typings'
-import { useRtl } from '../configprovider'
+import { useRtl } from '@/packages/configprovider'
import { WebProgressProps } from '@/types'
const defaultProps = {
@@ -33,7 +33,6 @@ export const Progress: FunctionComponent<
fontSize,
activeMode,
duration,
- ariaLabel,
onActiveEnd,
...rest
} = {
@@ -135,7 +134,6 @@ export const Progress: FunctionComponent<
ref={progressRef}
className={classNames(classPrefix, className)}
style={style}
- aria-label={ariaLabel}
{...rest}
>
diff --git a/src/packages/range/range.tsx b/src/packages/range/range.tsx
index a6a623a142..0b2fdfc2df 100644
--- a/src/packages/range/range.tsx
+++ b/src/packages/range/range.tsx
@@ -12,7 +12,7 @@ import { useTouch } from '@/hooks/use-touch'
import { getRect } from '@/utils/get-rect'
import { ComponentDefaults } from '@/utils/typings'
import { usePropsValue } from '@/hooks/use-props-value'
-import { useRtl } from '../configprovider'
+import { useRtl } from '@/packages/configprovider'
import { WebRangeProps, RangeValue } from '@/types'
const defaultProps = {
diff --git a/src/packages/searchbar/searchbar.tsx b/src/packages/searchbar/searchbar.tsx
index a88e5832e5..bcb7a86589 100644
--- a/src/packages/searchbar/searchbar.tsx
+++ b/src/packages/searchbar/searchbar.tsx
@@ -175,6 +175,7 @@ export const SearchBar: FunctionComponent<
const inputCls = classNames(`${classPrefix}-input`)
return (
)
- }, [value, onItemClick])
+ }, [value, onItemClick, forceFocus])
const renderLeftIn = useCallback(() => {
if (!leftIn) return null
@@ -261,7 +262,6 @@ export const SearchBar: FunctionComponent<
diff --git a/src/packages/skeleton/__test__/__snapshots__/skeleton.spec.tsx.snap b/src/packages/skeleton/__test__/__snapshots__/skeleton.spec.tsx.snap
new file mode 100644
index 0000000000..57ace4ca5d
--- /dev/null
+++ b/src/packages/skeleton/__test__/__snapshots__/skeleton.spec.tsx.snap
@@ -0,0 +1,28 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`should change avatar shape when using avatarShape prop 1`] = `
+
+`;
+
+exports[`should change avatar size when using avatarSize prop 1`] = `
+
+`;
diff --git a/src/packages/tag/tag.scss b/src/packages/tag/tag.scss
index 5d00287a09..27c324b79d 100644
--- a/src/packages/tag/tag.scss
+++ b/src/packages/tag/tag.scss
@@ -30,7 +30,7 @@
}
&-primary {
- background: $tag-primary-background-color;
+ background: #fa2c19;
}
&-info {
diff --git a/src/packages/uploader/__tests__/uploader.spec.tsx b/src/packages/uploader/__tests__/uploader.spec.tsx
index 3ae2319869..fc085a13b0 100644
--- a/src/packages/uploader/__tests__/uploader.spec.tsx
+++ b/src/packages/uploader/__tests__/uploader.spec.tsx
@@ -1,5 +1,5 @@
import * as React from 'react'
-import { render, fireEvent, waitFor, act } from '@testing-library/react'
+import { render, fireEvent } from '@testing-library/react'
import '@testing-library/jest-dom'
import { Uploader } from '../uploader'
@@ -275,12 +275,9 @@ test('simulates single file upload', async () => {
})
const input: any = container.querySelector('input')
- await act(async () => {
- fireEvent.change(input, { target: { files: [file] } })
- })
- await waitFor(() => {
- expect(handleUpload).toHaveBeenCalledTimes(1)
- })
+ await fireEvent.change(input, { target: { files: [file] } })
+
+ expect(handleUpload).toHaveBeenCalledTimes(1)
expect(handleUpload).toHaveBeenCalledWith(file)
})
test('simulates single file upload fail', async () => {
@@ -295,12 +292,9 @@ test('simulates single file upload fail', async () => {
})
const input: any = container.querySelector('input')
- await act(async () => {
- fireEvent.change(input, { target: { files: [file] } })
- })
- await waitFor(() => {
- expect(handleUpload).toHaveBeenCalledTimes(1)
- })
+ await fireEvent.change(input, { target: { files: [file] } })
+
+ expect(handleUpload).toHaveBeenCalledTimes(1)
expect(handleUpload).toHaveBeenCalledWith(file)
await expect(handleUpload()).rejects.toThrow('Upload failed')
})
@@ -327,12 +321,9 @@ test('simulates multiple file upload', async () => {
const files = [file1, file2, file3]
const input: any = container.querySelector('input')
- await act(async () => {
- fireEvent.change(input, { target: { files } })
- })
- await waitFor(() => {
- expect(handleUpload).toHaveBeenCalledTimes(2)
- })
+ await fireEvent.change(input, { target: { files } })
+
+ expect(handleUpload).toHaveBeenCalledTimes(2)
expect(handleOverCount).toHaveBeenCalledTimes(1)
expect(handleOverCount).toHaveBeenCalledWith(3)
})
@@ -359,13 +350,9 @@ test('simulates file upload when autoupload is false', async () => {
})
const files = [file1, file2, file3]
const input: any = container.querySelector('input')
- await act(async () => {
- fireEvent.change(input, { target: { files } })
- })
- await waitFor(() => {
- expect(handleOverCount).toHaveBeenCalledTimes(1)
- })
+ await fireEvent.change(input, { target: { files } })
expect(handleUpload).toHaveBeenCalledTimes(0)
+ expect(handleOverCount).toHaveBeenCalledTimes(1)
expect(handleOverCount).toHaveBeenCalledWith(3)
})
test('should render button', () => {
@@ -534,30 +521,18 @@ test('should handle beforeUpload function', async () => {
const input: any = container.querySelector('input')
// 测试单个 PNG 文件上传
- await act(async () => {
- fireEvent.change(input, { target: { files: [pngFile] } })
- })
- await waitFor(() => {
- expect(beforeUpload).toHaveBeenCalledTimes(1)
- })
+ await fireEvent.change(input, { target: { files: [pngFile] } })
+ expect(beforeUpload).toHaveBeenCalledTimes(1)
expect(handleUpload).toHaveBeenCalledWith(pngFile)
// 测试单个 JPG 文件被过滤
- await act(async () => {
- fireEvent.change(input, { target: { files: [jpgFile] } })
- })
- await waitFor(() => {
- expect(beforeUpload).toHaveBeenCalledTimes(2)
- })
+ await fireEvent.change(input, { target: { files: [jpgFile] } })
+ expect(beforeUpload).toHaveBeenCalledTimes(2)
expect(handleUpload).not.toHaveBeenCalledWith(jpgFile)
// 测试多文件上传时的过滤
- await act(async () => {
- fireEvent.change(input, { target: { files: [pngFile, jpgFile] } })
- })
- await waitFor(() => {
- expect(beforeUpload).toHaveBeenCalledTimes(3)
- })
+ await fireEvent.change(input, { target: { files: [pngFile, jpgFile] } })
+ expect(beforeUpload).toHaveBeenCalledTimes(3)
expect(handleUpload).toHaveBeenCalledTimes(2) // 只有 PNG 文件被上传
})
@@ -577,11 +552,8 @@ test('should handle beforeUpload returning empty array', async () => {
})
const input: any = container.querySelector('input')
- await act(async () => {
- fireEvent.change(input, { target: { files: [file] } })
- })
- await waitFor(() => {
- expect(beforeUpload).toHaveBeenCalled()
- })
+ await fireEvent.change(input, { target: { files: [file] } })
+
+ expect(beforeUpload).toHaveBeenCalled()
expect(handleUpload).not.toHaveBeenCalled()
})
diff --git a/src/styles/jd-font.scss b/src/styles/jd-font.scss
index 52a4deb921..099f3285aa 100644
--- a/src/styles/jd-font.scss
+++ b/src/styles/jd-font.scss
@@ -1,6 +1,6 @@
@font-face {
font-family: 'JDZH-Regular';
- src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTaxRdGYAABfsAAAAHEdERUYAKQAxAAAXzAAAAB5PUy8yeoF4hAAAAVgAAABgY21hcJYMZX8AAAJkAAABumdhc3D//wADAAAXxAAAAAhnbHlmeVPNUQAABHgAAA4caGVhZDCPk48AAADcAAAANmhoZWERxQasAAABFAAAACRobXR4paYQnwAAAbgAAACsbG9jYUPaR7QAAAQgAAAAWG1heHAAcgBHAAABOAAAACBuYW1lnPz/HgAAEpQAAARqcG9zdLLEUesAABcAAAAAwQABAAAAAgAAS+I++18PPPUACwgAAAAAAOSyI5QAAAAA5QAliwAj/scHmgasAAAACAACAAAAAAAAAAEAAAb2/mYDMwgaAAAAAAeaAAEAAAAAAAAAAAAAAAAAAAArAAEAAAArAEQABQAAAAAAAgAAAAEAAQAAAEAAAAAAAAAABAQAAZAABQAABTMEzQAAAJoFMwTNAAACzQBmAo8AAAAAAAAAAAAAAAAAAAADCAAAAAAAABAAAAAAVUtXTgDAACD/5Qb2/mYDMwiPAZoAAAABAAAAAATNBfYAAAAgAAEERwAAAAAAAAKqAAABmQAAAawAVAT1AFoGNQApAj0APwI9AC8E9QC2AawAbQNDAGIBsgBzA0MAOQTSAFQDSwA9BNIAhQTSAH8E0gBEBNIAfwTSAGYE0gCJBNIAVATSAGQBrABxAawAagT3ALYF2QBiBPUAOQV4AJ4BrABqAawAbQNDAIMDQwCDBPUAIwP3AQAD9wD6CBoAVgT1AFoF2QBiBXgAngGZAAAE9wC2AAAAAwAAAAMAAAAcAAEAAAAAALQAAwABAAAAHAAEAJgAAAAiACAABAACACEAJQApADsAPQCgAKMApSAZIB0grDARUUP/BP/g/+X//wAAACAAJAAoACsAPQCgAKIApSAYIBwgrDAQUUP/BP/g/+X////j/+H/3//e/93/Y/95/3jgBuAE33bQE67iASIARwBDAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAADBAAABQYAAAcIAAkKCwwNDg8QERITFBUWFxgZABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxwAAAAAAAAAAAAAAAAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAICEeHwAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAJgA4AEGASoBRAFkAXIBjAGcAeYB+AIsAlwCegKsAuAC8gM6A3IDogPWA+oEPgR2BKAEwATeBRgFUgWuBcIF1gYWBnwG0Ab6BvoHDgACAFT/ewFYBfYADwAfAAAFMjY9ATQmKwEiBh0BFBYzAxMeATsBMjY1EzQmKwEiBgEGFyAgF2AWHx8WUhsCHhdiFh8bHheYFyCFIBdgFiAgFmAXIAZG+0EWHx8WBL8WHx8AAAAAAwBa/scEnAasAAgAOgBCAAAlPgE1NC8BJicBNDY3NTMVHgEXBy4BLwEmJxEWFxYVFAYHFSM1LgEnNx4FHwEWFxEuBCcmNxQXFhcRDgEC4WiIVAgwZP15/L7NnOgmrBMSFAZEe99Glv2+zZ3oJaoGCgYKBhEFEkRuQnJGOBYFbcs5M4NphlQZhVJcRwkgIwIApfsdvLwZt4BlLyMdCFMc/edFRoO2o/0dwMAZuIFgEBUOEAgZCBdIGAIbFTIoKRQGeZdMPTExAdsZhAAABQAp/3sGDAX2AAkAEwAXACEAKwAAADIWFRQGIiY1NAcUFiA2NTQmIAYTATMBABAWMzI2ECYjIhI0NjMyFhQGIyIBOFhDQ1hCzbkBBLi4/vy52QNM5fy0AbG4gYO4uYKBEkMsLUFALiwFK15AP1xcP0BAlNLSlJXU1PpZBnv5hQH9/tbT0wEq1P5Yfl1dflwAAQA//xkCDgZYABMAAAEOBRoCFyMmCgESPgI3Ag4XLEU0MhULNHBU51hrJQ0rSUEmBlgoUp+e3tr+9P75/tSRqwFhATABNfLynkwAAAEAL/8ZAf8GWAARAAATHgMSCgEHMzYaAQIuAicvHzxZORsie2voWGslDStJQSYGWDV16ev+uf7B/n65qwFiAS8BNvHynkwAAAEAtgD0BEIEfwALAAABIREjESE1IREzESEEQv6fzf6iAV7NAWECXv6WAWq0AW3+kwAAAAABAG3/EgFCANUAEgAAJQ4BByc2NyMiJj0BNDY7ATIWFQFCBk46Rz8fIRYfHxZiFiAxSp43SD9jHxZvFh8fFgAAAQBiAl4C4QMSAAMAABMhFSFiAn/9gQMStAAAAAEAc/97AT0ARgAPAAAFMjY9ATQmKwEiBh0BFBYzAQgWHx8WYBceHheFHhdgFx8fF2AXHgABADn/ewMKBfYAAwAAFwEzATkB+tf+BIUGe/mFAAAAAAIAVP9kBH8GCgAVADMAAAEyHgMQDgMiLgM1ND4DABAeBTMyPgUQLgUjIg4EAmgzWl1CKipCXVpmWV1BKhAuSXz+PSc/Wl1uWi8wW25dWz8nJz9bXW5bMC9bbV1aPwVIH1mN8P7G8I5ZHx9ZjvCdYqy0f1H+B/7O/qyETC8QEC9MhKz+ATL+rYRNLxAQL02ErQAAAAABAD3/ewJ/BfYABgAABREFNSUzEQGy/osBY9+FBabq5Nv5hQABAIX/eQRaBgoAIAAAFzUBPgM1NCYjIgYHBgcnNiQzMh4BFRQOAwcBIRWFAjcYOUErqXhVjSQaA64lAQWng92BLT1LLQ3+VAK8h5ECoBpMano1eKleTD8uZaDSgd2DRZh0bDYN/gS0AAEAf/9kBGoF9gAbAAABFgAVFA4BIyImJzceATMyNhAmIyIHJwEhNSEVAnnSAR+O84+a/kOoKKZljMbGjHJdhwIE/b8DRQOHDv7Q0pD1jqKFY1tuxwEWxUaHAjq0tAAAAAIARP97BHsF9gACAA0AAAkBIQU1ATMRMxUjESMRAvL+QQG//VICkem9vcwEqPz8tJcEb/uutP6LAXUAAAEAf/9mBGoF9gAdAAABMh4BEA4BIyImJzceATMyNhAmIyIGBycTIRUhAzYCWJD0jo70kJn9Q6YqpWSMxsaMTYcuqF4DGf2TM2YDpJL6/tr6kqGGYVluzAEkzEE6YwMrtP41LQACAGb/ZgRvBfYACQAdAAAkIDY1NCYjIgYQJzQ3NgA3MwYBNjMyHgEQDgEgLgEB5AEMvr6Ghb7BaxcBW1nZef7+PDSM7ouL7v7o7oolvoWGvr7+9IaqxSsCVKDc/kYNi+7+6O2Jie0AAAEAif97BEoF9gAGAAAFIwEhNSEVAiPNAhn9GgPBhQXHtJAAAAMAVP9kBH8GCgAJACQALgAAJCA2NTQmIAYVFCc0NjcuATU0PgEzMgAVFAYHHgEVFA4BIyIuAQEUFjI2NTQmIgYB2wEaycn+5sfAfWxMV3zVfcABD1dNbICP95GQ9Y8BBp7gn5/gniW4gYK6uYOBgYLdRT+vYnjLdf7/t2KvP0XegYnpiIjpA31mkpJmZ5GRAAIAZP95BG0GCgAJAB8AAAAQFiA2NTQmIyIAED4BIB4BFRQHBgcGAAcjNgEGIyImASO9AQy+voaF/oOK7gEY7osNGEYU/qNc13MBCDc6jO4Eiv70vb6Fhr7+MgEY7oqK7owmRoCCJP2qpdQBwQyKAAACAHEA/gE7BHMADwAfAAABMjY9ATQmKwEiBh0BFBYzAxQWOwEyNj0BNCYrASIGFQEGFx4eF2AWHx8WNR8WYBceHhdgFh8DpiAXYBYgIBZgFyD9jRYfHxZjFh8fFgAAAAACAGoABgE/BHMAEgAiAAABFAYHJzY3IyImPQE0NjsBMhYVAxQWOwEyNj0BNCYrASIGFQE/QklKQx4hFh8fFmAXHsofFmAXHh4XYBYfAScsrUhKPmQfFmwXHx8XAkgWHx8WYBggIRcAAAIAtgF5BEID+AADAAcAABMhFSERNSEVtgOM/HQDjAP4tv43tLQAAAACAGL+8gV3Bn8ACgAxAAABEBcBJiMiDgMHNBIkMzIXExcDFhcWFwcmJy4CJwEWMzI+ATcXBgQjIicHJzcmAgEtmAHrTVFGhYBgOsuuATnJiXGOtpQuKDUusBwyAwoKBP4VT1JYoZMpsFT+v9CFeWq0bnuHApP+6pgDyRkkVn7EeN8BXcIrARlc/t0lMT1hZkQ/AwsJBPw1GzeFY2S20DDRXNtnAT4AAAABADn/cwS8BgcAIgAAJRUhNTI2NREjNTMRNAA3NhYXFhcHJicmBw4BFREhFSERFAcEvPt9RmaBgQEYymvIUEExshg0ZId7qAGu/lItKba2aEYBYLUBBNEBMwwHRko+ZGZBMV0JB72B/vy1/qBfTwAAAQCe/3sE1QWRABYAAAEVIRUhFSERIxEhNSE1ITUhATMJATMBBLT+ZwGZ/mfB/mcBmf5nAU/+jtMBSQFK0f6PAxKsyKz+iQF3rMisAn/9xwI5/YEAAQBqBMMBQgaHABIAAAEGBzMyFh0BFAYrASImPQE0NjcBQkQdIRYfHxZgFyFFSQY9P2IgFmwXICAXbCixSAAAAAEAbQTDAUIGhwARAAATNjcjIiY9ATQ2OwEyFh0BBgdtQB4hFh8fFmIWIA9/BQw+ZB8WbRcgIBdtpHwAAAIAgwTDAsMGhwASACUAAAEGBzMyFh0BFAYrASImPQE+ATcTNT4BNxcGBzMyFh0BFAYrASImAVpCHiEWHx8WYRcgBk453AZOOUpEHSEWHx8WYBcgBj09ZCAWbBcgIBdsSKE4/nNsSKE4Sj9iIBZsFyAgAAAAAgCDBMMCwQaHABIAJgAAATY3IyImPQE0NjsBMhYdARQGByU2NyMiJj0BNDY7ATIWHQEUDgEHAexCHiEWHx8WYBcfQ0n+TkIeIBYgIBZgFx4URDMFDD1lHxZtFyAgF20qrkhJPWUfFm0XICAXbRpSgTMAAAABACP/ZgTRBgoAQwAAJTI+AjcXDgQjIi4FJyM1MyY1NDcjNTM+BjMyHgMXBy4DIyADIRUhBhUUFyEVIR4EAvYvU1RFFqoeW19yXzIoTl5TVUM2D8/AAgLAzw82Q1VTXk4oMl9yX1seqhZFVFMv/vs9AX/+cQICAY/+gQ41P05KJRxBfFhiYZJVNREMITZbeK1pthk3NRu0aa53XDYiDBE1VJJhZFh8QRz+crQbNTcZtl2PVjcUAAAAAQEA/xkC8AZCAAYAAAERIQAREBMBAAHw/wD+BkL41wF4AhsCIAF2AAEA+v8ZAukGQgAGAAATEhEQASER/P7/AAHvBkL+iv3i/eb+hQcpAAACAFb/JQeaBh8AAwAlAAABFSE1AxckNzYTNSERFDMhMjc2EycCBwYrASI1ESE1IRUhFQIHBgbL+mrfUgFZmZwJAXPDAS1uNj8VigwjGEblWgI7+RkCFgZ/gAYfkpL5g31+4vsBjh/838A/RQFVK/7mNC9YAwKRkR/+rdLHAAAAAAMAWv7HBJwGrAAIADoAQgAAJT4BNTQvASYnATQ2NzUzFR4BFwcuAS8BJicRFhcWFRQGBxUjNS4BJzceBR8BFhcRLgQnJjcUFxYXEQ4BAuFoiFQIMGT9efy+zZzoJqwTEhQGRHvfRpb9vs2d6CWqBgoGCgYRBRJEbkJyRjgWBW3LOTODaYZUGYVSXEcJICMCAKX7Hby8GbeAZS8jHQhTHP3nRUaDtqP9HcDAGbiBYBAVDhAIGQgXSBgCGxUyKCkUBnmXTD0xMQHbGYQAAAIAYv7yBXcGfwAKADEAAAEQFwEmIyIOAwc0EiQzMhcTFwMWFxYXByYnLgInARYzMj4BNxcGBCMiJwcnNyYCAS2YAetNUUaFgGA6y64BOcmJcY62lC4oNS6wHDIDCgoE/hVPUlihkymwVP6/0IV5arRue4cCk/7qmAPJGSRWfsR43wFdwisBGVz+3SUxPWFmRD8DCwkE/DUbN4VjZLbQMNFc22cBPgAAAAEAnv97BNUFkQAWAAABFSEVIRUhESMRITUhNSE1IQEzCQEzAQS0/mcBmf5nwf5nAZn+ZwFP/o7TAUkBStH+jwMSrMis/okBd6zIrAJ//ccCOf2BAAIAtgF5BEID+AADAAcAABMhFSERNSEVtgOM/HQDjAP4tv43tLQAAAAAABsBSgABAAAAAAAAADIAZgABAAAAAAABAAUArQABAAAAAAACAAcAwwABAAAAAAADABsBAwABAAAAAAAEAAQBNQABAAAAAAAFACEBfgABAAAAAAAGABABwgABAAAAAAAJAAAB2QABAAAAAAAQAAUB7gABAAAAAAARAAcCBAADAAEECQAAAGQAAAADAAEECQABABIAmQADAAEECQACAA4AswADAAEECQADADYAywADAAEECQAEABQBHwADAAEECQAFAEIBOgADAAEECQAGACABoAADAAEECQAJAAQB0wADAAEECQAQABIB2gADAAEECQARAA4B9AADAAEIBAAAAGQCDAADAAEIBAABABICcgADAAEIBAACAA4ChgADAAEIBAAEABQClgADAAEIBAAHAE4CrAADAAEIBAAQABIC/AADAAEIBAARAA4DEABDAG8AcAB5AHIAaQBnAGgAdAAoAGMAKQAgACAAQgBFAEkASgBJAE4ARwAgAEoASQBOAEcARABPAE4ARwAgAFQARQBDAEgATgBPAEwATwBHAFkAIABDAE8ALgAsACAATABUAEQAAENvcHlyaWdodChjKSAgQkVJSklORyBKSU5HRE9ORyBURUNITk9MT0dZIENPLiwgTFREAE6sThxrY57RACAAVgAyAC4AMwAAIFYyLjMAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAADIALgAwADAAMAA7AFUASwBXAE4AOwBKAEQAWgBIAFYAMgAuADMAXwBSAGUAZwB1AGwAYQByAAAyLjAwMDtVS1dOO0pEWkhWMi4zX1JlZ3VsYXIATqxOHGtjntEAVgAyAC4AM144icQAAFYyLjMAAFYAZQByAHMAaQBvAG4AIAAyAC4AMAAwADAAOwBHAGwAeQBwAGgAcwAgADMALgAxAC4AMQAgACgAMwAxADMANQApAABWZXJzaW9uIDIuMDAwO0dseXBocyAzLjEuMSAoMzEzNSkAAEoARABaAEgAVgAyAC4AMwBfAFIAZQBnAHUAbABhAHIAAEpEWkhWMi4zX1JlZ3VsYXIAlnZ0PAAAAE6sThxrY57RACAAVgAyAC4AMwAAIFYyLjMAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAEMAbwBwAHkAcgBpAGcAaAB0ACgAYwApACAAIABCAEUASQBKAEkATgBHACAASgBJAE4ARwBEAE8ATgBHACAAVABFAEMASABOAE8ATABPAEcAWQAgAEMATwAuACwAIABMAFQARAAATqxOHGtjntEAIABWADIALgAzAAAAUgBlAGcAdQBsAGEAcgAATqxOHGtjntEAVgAyAC4AM144icQAAABCAHkAIABCAEUASQBKAEkATgBHACAASgBJAE4ARwBEAE8ATgBHACAAVABFAEMASABOAE8ATABPAEcAWQAgAEMATwAuACwAIABMAFQARAAATqxOHGtjntEAIABWADIALgAzAAAAUgBlAGcAdQBsAGEAcgAAAAAAAgAAAAAAAP8AAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAAQACAAMABAAHAAgACwAMAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAgAIQAhQCWALYAtwC0ALUBAgEDAQQBBQEGAQcBCAEJAQoERXVybwd1bmkzMDEwB3VuaTMwMTEHdW5pNTE0Mwd1bmlGRjA0B3VuaUZGRTAHdW5pRkZFNQlzcGFjZS4wMDEJZXF1YWwuMDAxAAAAAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMAKgABAAQAAAACAAAAAAAAAAEAAAAA4p8rRgAAAADksiOUAAAAAOUAJYs=')
+ src: url('data:font/ttf;charset=utf-8;base64,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')
format('truetype');
font-weight: 400;
font-style: normal;
@@ -8,7 +8,7 @@
}
@font-face {
font-family: 'JDZH-Bold';
- src: url('data:font/ttf;charset=utf-8;base64,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NDc2JDMyFxMfAQMWFxYXByYnJicBFjMyNgGNPToBtCRAn2VjYANY6Fj+s9R0cWntbHyGXF0BSNB1bI4W15EWNTsm5hcaBA7+Sjouk8kCk2e+QwNaCElI4/56hbTLI8131WkBO77isLDDHwEUDG3+5BM1R06FMxwNDvykCoQAAAAAAQCm/3sFiwXjABYAAAEhFSEVIREhESE1ITUhNSEBIQkBIQEhBVz+QgG+/kL+9f5CAb7+QgFG/osBMwFAAT0BNf6JAUgCYoX8/poBZvyF/AKF/dkCJ/17AAIA+AFOBIMEIwADAAcAABMhFSERNSEV+AOL/HUDiwQj+v4l/PwAAAAAABsBSgABAAAAAAAAADIAZgABAAAAAAABAAoAtwABAAAAAAACAAcA0gABAAAAAAADABgBDAABAAAAAAAEAAQBOwABAAAAAAAFACEBhAABAAAAAAAGAA0BwgABAAAAAAAJAAAB1gABAAAAAAAQAAUB6wABAAAAAAARAAQB+wADAAEECQAAAGQAAAADAAEECQABABwAmQADAAEECQACAA4AwgADAAEECQADADAA2gADAAEECQAEABQBJQADAAEECQAFAEIBQAADAAEECQAGABoBpgADAAEECQAJAAQB0AADAAEECQAQABIB1wADAAEECQARAAgB8QADAAEIBAAAAGQCAAADAAEIBAABABwCZgADAAEIBAACAA4ChAADAAEIBAAEABQClAADAAEIBAAHAE4CqgADAAEIBAAQABIC+gADAAEIBAARAAgDDgBDAG8AcAB5AHIAaQBnAGgAdAAoAGMAKQAgACAAQgBFAEkASgBJAE4ARwAgAEoASQBOAEcARABPAE4ARwAgAFQARQBDAEgATgBPAEwATwBHAFkAIABDAE8ALgAsACAATABUAEQAAENvcHlyaWdodChjKSAgQkVJSklORyBKSU5HRE9ORyBURUNITk9MT0dZIENPLiwgTFREAE6sThxrY57RACAAVgAyAC4AMwAgAEIAbwBsAGQAACBWMi4zIEJvbGQAAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAADIALgAwADAAMAA7AFUASwBXAE4AOwBKAEQAWgBIAFYAMgAuADMAXwBCAG8AbABkAAAyLjAwMDtVS1dOO0pEWkhWMi4zX0JvbGQATqxOHGtjntEAVgAyAC4AM3yXT1MAAFYyLjMAAFYAZQByAHMAaQBvAG4AIAAyAC4AMAAwADAAOwBHAGwAeQBwAGgAcwAgADMALgAxAC4AMQAgACgAMwAxADMANQApAABWZXJzaW9uIDIuMDAwO0dseXBocyAzLjEuMSAoMzEzNSkAAEoARABaAEgAVgAyAC4AMwBfAEIAbwBsAGQAAEpEWkhWMi4zX0JvbGQAlnZ0PAAAAE6sThxrY57RACAAVgAyAC4AMwAAIFYyLjMAAEIAbwBsAGQAAEJvbGQAAEMAbwBwAHkAcgBpAGcAaAB0ACgAYwApACAAIABCAEUASQBKAEkATgBHACAASgBJAE4ARwBEAE8ATgBHACAAVABFAEMASABOAE8ATABPAEcAWQAgAEMATwAuACwAIABMAFQARAAATqxOHGtjntEAIABWADIALgAzACAAQgBvAGwAZAAAAFIAZQBnAHUAbABhAHIAAE6sThxrY57RAFYAMgAuADN8l09TAAAAQgB5ACAAQgBFAEkASgBJAE4ARwAgAEoASQBOAEcARABPAE4ARwAgAFQARQBDAEgATgBPAEwATwBHAFkAIABDAE8ALgAsACAATABUAEQAAE6sThxrY57RACAAVgAyAC4AMwAAAEIAbwBsAGQAAAAAAAIAAAAAAAD/NABmAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAAEAAgADAAQABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIACEAIUAlgC2ALcAtAC1AQIBAwEEAQUBBgEHAQgBCQEKBEV1cm8HdW5pMzAxMAd1bmkzMDExB3VuaTUxNDMHdW5pRkYwNAd1bmlGRkUwB3VuaUZGRTUJc3BhY2UuMDAxCWVxdWFsLjAwMQAAAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADACoAAQAEAAAAAgAAAAAAAAABAAAAAOKfK0YAAAAA5LIkawAAAADlACWL')
+ src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTaz9XRwAABfoAAAAHEdERUYAKQAxAAAXyAAAAB5PUy8ye0Z5QwAAAVgAAABgY21hcJYMZX8AAAJkAAABumdhc3D//wADAAAXwAAAAAhnbHlmjqz34gAABHgAAA4gaGVhZDHYQQMAAADcAAAANmhoZWER0QcTAAABFAAAACRobXR4tkoSNAAAAbgAAACsbG9jYUQsR+4AAAQgAAAAWG1heHAAcgA/AAABOAAAACBuYW1lWs1uiwAAEpgAAARicG9zdLLEUesAABb8AAAAwQABAAAAAgAAfhfY4V8PPPUACwgAAAAAAOTTNNYAAAAA5g/BvwAv/scHpgaqAAAACAACAAAAAAAAAAEAAAb2/s0DMwgaAAAAAAemAAEAAAAAAAAAAAAAAAAAAAArAAEAAAArADwABQAAAAAAAgAAAAEAAQAAAEAAAAAAAAAABARYArwABQAABTMEzQAAAJoFMwTNAAACzQBmAo8AAAAAAAAAAAAAAAAAAAADCAAAAAAAABAAAAAAVUtXTgDAACD/5Qb2/s0DMwiPATMAAAABAAAAAATNBfYAAAAgAAEERwAAAAAAAAKqAAABmQAAAcgAQgV8AIEGbAAvApcAQwKXADsFfAD4AcgAXgOTAIsBzgBgA5MAQgU3AFgDhQBCBTcAiwU3AIMFNwBGBTcAgwU3AGoFNwCRBTcAWgU3AGoByABeAcgAXgV8APgGTwCDBXwAbwY1AKYByABeAcgAXgOTAHMDkwBxBXwAWARLANUESwD6CBoAXAV8AIEGTwCDBjUApgTMAAAFfAD4AAAAAwAAAAMAAAAcAAEAAAAAALQAAwABAAAAHAAEAJgAAAAiACAABAACACEAJQApADsAPQCgAKMApSAZIB0grDARUUP/BP/g/+X//wAAACAAJAAoACsAPQCgAKIApSAYIBwgrDAQUUP/BP/g/+X////j/+H/3//e/93/Y/95/3jgBuAE33bQE67iASIARwBDAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAADBAAABQYAAAcIAAkKCwwNDg8QERITFBUWFxgZABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxwAAAAAAAAAAAAAAAAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAICEeHwAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAJQA3gECASYBQAFgAW4BiAGYAdgB7AIaAk4CbgKoAuYC+gNEA4QDtAPoA/wEUASIBLQE1AT0BS4FaAWqBcIF2gYaBnwG0Ab8BvwHEAACAEL/ewGIBfYADwAfAAABMjY1EzYmKwEiBhUTFBYzAxQWOwEyNj0BNCYrASIGFQElHSgdASgeux0oHCkdRCkdfR0qKh19HSkBACcbBG4dKSkd+5IbJ/7BHSkpHX4dKSkdAAAAAwCB/scE/gaqAAgAMQA7AAAlPgE1NC8BJicBNBI3NSEVHgEXByYvASYnERYXFhUUAgcVITUuASc3FhcWFxEmJyYnJiUUFxYXFhcRDgEDRE5gRAg+JP0988UBC5LdLOENJhUvQ9BIovTG/vWU3SzbLCgrQ5ZDSh53AQorByYpLU9fnhlkOUE+BiANAhugAQEnwcEfrHaBJCwYLxf+Sj5Fib+h/v8nxMQdrnl/SCUrFgG2MiwwHn2iNy4HFxkSAWQZYgAAAAUAL/97Bj0F9gADAA8AFwAlAC0AAAEhASEDNDYzMhYVFAYjIiY2FBYyNjQmIgE0NiAWFRQHDgEiJicmNhQWMjY0JiIESAEr/LT+1c3CiofFwYuOvuU+Uj8/UgJUwgEUwUEti6SMLUHlPlI/P1IF9vmFBQyZ1tGemtTbyWxPT2xR+9uZ1tWaemFFTk5FYbBsT09sUgABAEP/GQJcBlgADwAABSYKARoBNyEGBw4BAhoBFwEva3AROmdLAS1cWCUpAi94XefRAawBeAF5ATiZlv9s9P7W/tL+rZ8AAAABADv/GQJSBlgADwAABTYaAQoBJyEWFx4BEgoBBwFqaW8QOWVK/tFeVyUpAjB4XefRAawBdgF7ATeamvts8/7V/tP+raAAAAABAPgA8gSDBH0ACwAAAREhESE1IREhESEVA0T+9f6/AUEBCwE/Ajv+twFJ+gFI/rj6AAAAAQBe/uEBaAEKABIAACUUBgcnNjcjIiY9ATQ2OwEyFhUBaFZRVEMpNR0pKR1/HSgvPsNNWEN0KB2QHSgoHQAAAAEAiwI7AwoDNQADAAABFSE1Awr9gQM1+voAAAABAGD/ewFqAIUADwAABTI2PQE0JisBIgYdARQWMwElHSgoHX8dKSkdhSkdfh0pKR1+HSkAAQBC/3sDVAX2AAMAAAEhASECPQEX/gT+6gX2+YUAAAACAFj/ZATfBgoADwApAAABMhcWERAHBiMiJyYREDc2ARQXHgMzMjc2ETQuBSIOBQKchFlaWlmEhlhaWlj+QisWU4G8c+uD1RAnPFx2n76gdV08JxAFAIGD/rz+u4OBgYMBRQFEg4H9uLe5Y6mKTpL0Ac5cqa2SgVk0NFmBkq2qAAEAQv97ArQF9gAGAAATESUhESERQgFiARD+9gPwASff+YUFVgAAAAABAIv/ewS6BgoAGQAAAT4BNzYmIyIGByc2JDMyFxYSFQYHASEVITUC7jVbBw2fcGuTBvQzARmskXd7jQPe/pgCcPvRAsk4nUNqoX1jjqLOSUr/AJje7/5j+pEAAAEAg/9mBMkF9gAdAAABFgAVFAIEIyIkJzceATMyNjU0JiMiBy8BASE1IRUC6dABEJz+9J6j/u1K5SeYXIW2toVmVm1UAbT+FwOJA6oj/s/Lkv8Ak6CHh0pZo3d4pTtsVgHN+sUAAAAAAgBG/3sE3QX2AAIADQAAAREBBTUBIREzFSMRIREDBv6J/rcCfwFcvLz+5QHjAnX9ifXXBDP77/n+jwFxAAAAAAEAg/9kBMsF9gAiAAABMhcWEhUUBwYEIyIkJzceATMyNjU0JiMiBgcvARMhFSEDNgKFn4aGm05O/vOdov7sTOcnmVuAvLeFQ3srBuJeA2v9gydZA8tMS/79mZWEg5ilioZMXKl+faw2LwSDAxP8/rYbAAAAAgBq/2QEzQX2AA0AIwAAJTI2NTQmIyIGBwYVFBYBNDc2NwEhATcyFx4BEAcGBCMiJy4BApx8qa53YJwdDqn+TBklMQG0ATT+ri2UhIKXTEz+/peWgYKYcZ91dp9sVTchbqIBDFpQdlkDAP2sAkhK+v7afX6TSEr2AAAAAAEAkf97BKgF9gAGAAABITUhFQEhA2/9IgQX/eH+5gT6/JL6FwAAAAADAFr/ZATfBgoACgAkAC8AACUyNjQmIyIGFRQWATQ2NyY1ND4BIB4BFRQHHgEVFAYEIyInLgEBFBYzMjY0JiMiBgKch7Kyh4Wztv5Ab2SLh+kBFOqIjGRvnP72nZ6DhpsBUo5iZI2NZGONUKTco6Nuc58BIXjSS4W0ftN6etN+s4ZL0niN9IxGSPMDb1h9fbB7fAAAAgBq/3kE1QYKAA0AJAAAARQWMzI2NzY1NCYjIgYAEDc2JDMyFxYSBwYHBgcBIQEGIyInJgF1qX5hmh0NrHl7rP71TEsBBJebh4aRCgYTGT3+TP7NAVQKI5eCggPscaRrVjIkc5+i/vsBJn19kU5P/veZTzJlavz+AlYCSkkAAAACAF4A3wFoBJEADwAfAAABMjY9ATQmKwEiBh0BFBYzAxQWOwEyNj0BNCYrASIGFQEjHSgoHX0eKisdSCsdfR0oKB19HioDhyoefR0oKB19HSv9nh0pKR1/HSgoHQAAAAACAF7/wQFoBJEAEgAiAAABMhYdARQGByc2NyMiJj0BNDYzAzU0NjsBMhYdARQGKwEiJgEjHShTUlZKIjMeKioeSCoefR0oKB19HSsB6SgdkEPDTVpHbSgdkB0oAeZ9HSgoHX0eKisAAAIA+AFOBIMEIwADAAcAAAEVITURNSEVBIP8dQOLBCP6+v0r/PwAAAACAIP+5QXNBo0ACgAwAAABFBYXASYjIgcOAQU0NzYkMzIXEx8BAxYXFhcHJicmJwEWMzI2NxcGBCMiJwcnNyYCAY09OgG0JECfZWNg/vZcXQFI0HVsjhbXkRY1OybmFxoEDv5KOi6TyTXoWP6z1HRxae1sfIYCk2e+QwNaCElI44bisLDDHwEUDG3+5BM1R06FMxwNDvykCoR1hbTLI8131WkBOwAAAAABAG//cwUOBgcAJAAAFzUzMjY1ESM1MzU0PgE3NhYXFhcHJicmBw4BHQEhFSERFAchFW8CP1pwcI7piXDVVTwu5xkgX3RumQF//oEeAvyN+lo/AQz8wZn+kggHTE45UYUwHFUJCKp1wfz+9FJH+gAAAQCm/3sFiwXjABYAAAEVIRUhESERITUhNSE1IQEhCQEhASEVA54Bvv5C/vX+QgG+/kIBRv6LATMBQAE9ATX+iQFIAmKF/P6aAWb8hfwChf3ZAif9e/wAAAEAXgR/AWgGqgASAAABMhYdARQGKwEiJj0BNDY3FwYHASMdKCgdfR0rWU9WRSkFmikdjR4qKx2NQMxKWj93AAABAF4EfwFoBqoAEgAAARQGByc2NyMiJj0BNDY7ATIWFQFoU1JWSSMzHSsrHX0dKAXVQshMWkNzKR2PHSkpHQAAAgBzBH8DIwaqABIAJQAAATIWHQEUBisBIiY9ATQ2NxcGBwU1NDY3FwYHMzIWHQEUBisBIiYBNR0rKx19HShXT1ZGKQEZVlJTQyk1HSkpHX8dKAWaKR2NHSsqHo0/zEtaQHbTjUDKTFpAdikdjR0rKgAAAAACAHEEfwMjBqoAEgAlAAABFAYHJzY3IyImPQE0NjsBMhYVBTU0NjsBMhYdAQ4BByc2NyMiJgMjWU9WRSk1HSgoHX8dKf1OKB1/HSkGUVFUSyI2HSgF1UDMSlo/dykdjx0pKR2Pjx0pKR2PSsBMWkVxKQAAAAEAWP9mBSUGCgAsAAAlMjcXDgEjIi4DJyM1MyY0NyM1Mz4DMyATByYjIgMhFSEGFBchFSEeAQMrx0nqQfu+YqR4XTwSqpECApGqF1SDwXoBcIrqScfYRQFa/o4CAgFy/qgjlHH+iLbLOGGOpGLNF4IXz3vEmVP+gYf8/t/PEowSzZiKAAEA1f8bA1IGRAAJAAAFJicmEDc2NyERA1KWS0pKSZb9heXA4eMCHuPjwfjXAAAAAAEA+v8ZA3cGQgAJAAATFhcWEAcGByER/JVKSkpNlAJ9BkK+5OP94uPiwQcpAAAAAAIAXP8dB6YGJwADACUAAAE1IRUBFyQ3NhM1IREUMyEyNzYTJwYHBisBIjURITUhFSEVAgcGATsFmPmJaQFZmJwMAUbRAT1rOTsVsgYdFS/hTAIn+RcCBAx1egVqvb36V6R72fABiCX9Ddc/RAFWOfk8L1ICyr29Jf7JxLQAAAAAAwCB/scE/gaqAAgAMQA7AAAlPgE1NC8BJicBNBI3NSEVHgEXByYvASYnERYXFhUUAgcVITUuASc3FhcWFxEmJyYnJiUUFxYXFhcRDgEDRE5gRAg+JP0988UBC5LdLOENJhUvQ9BIovTG/vWU3SzbLCgrQ5ZDSh53AQorByYpLU9fnhlkOUE+BiANAhugAQEnwcEfrHaBJCwYLxf+Sj5Fib+h/v8nxMQdrnl/SCUrFgG2MiwwHn2iNy4HFxkSAWQZYgAAAAIAg/7lBc0GjQAKADAAAAEUFhcBJiMiBw4BBTQ3NiQzMhcTHwEDFhcWFwcmJyYnARYzMjY3FwYEIyInByc3JgIBjT06AbQkQJ9lY2D+9lxdAUjQdWyOFteRFjU7JuYXGgQO/ko6LpPJNehY/rPUdHFp7Wx8hgKTZ75DA1oISUjjhuKwsMMfARQMbf7kEzVHToUzHA0O/KQKhHWFtMsjzXfVaQE7AAAAAAEApv97BYsF4wAWAAABFSEVIREhESE1ITUhNSEBIQkBIQEhFQOeAb7+Qv71/kIBvv5CAUb+iwEzAUABPQE1/okBSAJihfz+mgFm/IX8AoX92QIn/Xv8AAACAPgBTgSDBCMAAwAHAAABFSE1ETUhFQSD/HUDiwQj+vr9K/z8AAAAAAAbAUoAAQAAAAAAAAAyAGYAAQAAAAAAAQAKALcAAQAAAAAAAgAHANIAAQAAAAAAAwAYAQwAAQAAAAAABAAEATsAAQAAAAAABQAhAYQAAQAAAAAABgANAcIAAQAAAAAACQAAAdYAAQAAAAAAEAAFAesAAQAAAAAAEQAEAfsAAwABBAkAAABkAAAAAwABBAkAAQAcAJkAAwABBAkAAgAOAMIAAwABBAkAAwAwANoAAwABBAkABAAUASUAAwABBAkABQBCAUAAAwABBAkABgAaAaYAAwABBAkACQAEAdAAAwABBAkAEAASAdcAAwABBAkAEQAIAfEAAwABCAQAAABkAgAAAwABCAQAAQAcAmYAAwABCAQAAgAOAoQAAwABCAQABAAUApQAAwABCAQABwBOAqoAAwABCAQAEAASAvoAAwABCAQAEQAIAw4AQwBvAHAAeQByAGkAZwBoAHQAKABjACkAIAAgAEIARQBJAEoASQBOAEcAIABKAEkATgBHAEQATwBOAEcAIABUAEUAQwBIAE4ATwBMAE8ARwBZACAAQwBPAC4ALAAgAEwAVABEAABDb3B5cmlnaHQoYykgIEJFSUpJTkcgSklOR0RPTkcgVEVDSE5PTE9HWSBDTy4sIExURABOrE4ca2Oe0QAgAFYAMgAuADMAIABCAG8AbABkAAAgVjIuMyBCb2xkAABSAGUAZwB1AGwAYQByAABSZWd1bGFyAAAyAC4AMAAwADAAOwBVAEsAVwBOADsASgBEAFoASABWADIALgAzAF8AQgBvAGwAZAAAMi4wMDA7VUtXTjtKRFpIVjIuM19Cb2xkAE6sThxrY57RAFYAMgAuADN8l09TAABWMi4zAABWAGUAcgBzAGkAbwBuACAAMgAuADAAMAAwADsARwBsAHkAcABoAHMAIAAzAC4AMQAuADEAIAAoADMAMQAzADUAKQAAVmVyc2lvbiAyLjAwMDtHbHlwaHMgMy4xLjEgKDMxMzUpAABKAEQAWgBIAFYAMgAuADMAXwBCAG8AbABkAABKRFpIVjIuM19Cb2xkAJZ2dDwAAABOrE4ca2Oe0QAgAFYAMgAuADMAACBWMi4zAABCAG8AbABkAABCb2xkAABDAG8AcAB5AHIAaQBnAGgAdAAoAGMAKQAgACAAQgBFAEkASgBJAE4ARwAgAEoASQBOAEcARABPAE4ARwAgAFQARQBDAEgATgBPAEwATwBHAFkAIABDAE8ALgAsACAATABUAEQAAE6sThxrY57RACAAVgAyAC4AMwAgAEIAbwBsAGQAAABSAGUAZwB1AGwAYQByAABOrE4ca2Oe0QBWADIALgAzfJdPUwAAAEIAeQAgAEIARQBJAEoASQBOAEcAIABKAEkATgBHAEQATwBOAEcAIABUAEUAQwBIAE4ATwBMAE8ARwBZACAAQwBPAC4ALAAgAEwAVABEAABOrE4ca2Oe0QAgAFYAMgAuADMAAABCAG8AbABkAAAAAAACAAAAAAAA/wAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAABAAIAAwAEAAcACAALAAwADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeACAAhACFAJYAtgC3ALQAtQECAQMBBAEFAQYBBwEIAQkBCgRFdXJvB3VuaTMwMTAHdW5pMzAxMQd1bmk1MTQzB3VuaUZGMDQHdW5pRkZFMAd1bmlGRkU1CXNwYWNlLjAwMQllcXVhbC4wMDEAAAAAAAAB//8AAgABAAAADAAAABYAAAACAAEAAwAqAAEABAAAAAIAAAAAAAAAAQAAAADiGmaGAAAAAOTTNNYAAAAA5g/Bvw==')
format('truetype');
font-weight: 700;
font-style: normal;
diff --git a/src/styles/theme-dark.scss b/src/styles/theme-dark.scss
index 74c0b90efa..ad8ff1248f 100644
--- a/src/styles/theme-dark.scss
+++ b/src/styles/theme-dark.scss
@@ -260,8 +260,7 @@ page {
// 标准内容、名称类关键信息
--nutui-font-size-base: var(--nutui-font-size-14);
// 汉字:楼层标题、卡片标题 数字:重复型价格,如搜推商卡
- --nutui-font-size-l: var(--nutui-font-size-15);
- --nutui-font-size-icon: var(--nutui-font-size-16);
+ --nutui-font-size-l: var(--nutui-font-size-16);
// 汉字:页面标题、页面级最重要内容 数字:模块级主价格,如购物车、结算、底导
--nutui-font-size-xl: var(--nutui-font-size-18);
// 数字:页面级主价格,如商详、收银台
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index a695ee5f73..3bb38d962b 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1078,7 +1078,7 @@ $overlay-animation-duration: var(
//popup(✅)
$popup-border-radius: var(--nutui-popup-border-radius, $radius-xl) !default;
$popup-icon-size: var(--nutui-popup-icon-size, 20px) !default;
-$popup-title-padding: var(--nutui-popup-title-padding, 16px) !default;
+$popup-title-padding: var(--nutui-popup-title-padding, 11px) !default;
$popup-title-font-size: var(
--nutui-popup-title-font-size,
$font-size-xl
@@ -2622,3 +2622,7 @@ $quickenter-box-shadow: var(
0px 8px 16px rgba(141, 153, 167, 0.2),
0px -0.5px 0px rgba(0, 0, 0, 0.05) inset
) !default;
+// $quickenter-backdrop-filter: var(
+// --nutui-quickenter-backdrop-filter,
+// blur(8px)
+// ) !default;
diff --git a/src/types/index.ts b/src/types/index.ts
index b6d7989d6b..2a1c2a3908 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -351,7 +351,6 @@ export * from './spec/audio/taro'
export * from './spec/steps/base'
export * from './spec/steps/h5'
export * from './spec/steps/taro'
-
export * from './spec/quickenter/base'
export * from './spec/quickenter/h5'
export * from './spec/quickenter/taro'
diff --git a/src/types/spec/button/base.ts b/src/types/spec/button/base.ts
index e941e2c245..e19b0b9d4a 100644
--- a/src/types/spec/button/base.ts
+++ b/src/types/spec/button/base.ts
@@ -1,4 +1,5 @@
import { ReactNode } from 'react'
+import type { MouseEvent } from 'react'
import { BaseProps } from '../../base/props'
import { UIFill, UIRound, UISize, UIType } from '../../base/atoms'
@@ -15,5 +16,5 @@ export interface BaseButton extends BaseProps {
rightIcon: ReactNode
id: string
nativeType: 'submit' | 'reset' | 'button'
- onClick: (e: any) => void
+ onClick: (e: MouseEvent
) => void
}
diff --git a/src/types/spec/calendarcard/base.ts b/src/types/spec/calendarcard/base.ts
index a3f2e2a823..525fa15778 100644
--- a/src/types/spec/calendarcard/base.ts
+++ b/src/types/spec/calendarcard/base.ts
@@ -30,6 +30,7 @@ export interface BaseCalendarCard extends BaseProps {
firstDayOfWeek: number // 0-6
startDate: Date
endDate: Date
+ weekdays?: string[]
disableDay: (day: CalendarCardDay) => boolean
renderDay: (day: CalendarCardDay) => ReactNode
renderDayTop: (day: CalendarCardDay) => ReactNode
From 26a06b36ef57b904b0f95389e3e9bafb45c7d2e2 Mon Sep 17 00:00:00 2001
From: xiyehutao <1254524557@qq.com>
Date: Mon, 18 May 2026 21:27:43 +0800
Subject: [PATCH 4/4] =?UTF-8?q?feat:=20merge=E9=98=B6=E6=AE=B53-2:=20api?=
=?UTF-8?q?=E9=80=82=E9=85=8D=E9=97=AE=E9=A2=98=E9=AA=8C=E8=AF=81=E5=90=88?=
=?UTF-8?q?=E5=B9=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../animatingnumbers/countup.taro.tsx | 7 +-
src/packages/badge/badge.taro.tsx | 3 +-
src/packages/button/button.taro.tsx | 265 ++++++++----------
src/packages/button/index.taro.ts | 7 -
.../calendarcard/calendarcard.taro.tsx | 16 +-
src/packages/calendarcard/demo.taro.tsx | 6 +
src/packages/calendarcard/icon.taro.tsx | 9 +-
src/packages/divider/divider.taro.tsx | 2 +-
src/packages/ellipsis/ellipsis.taro.tsx | 2 +-
src/packages/empty/empty.taro.tsx | 14 +-
src/packages/inputnumber/inputnumber.taro.tsx | 2 +-
src/packages/lottie/lottiemp.taro.tsx | 25 +-
src/packages/overlay/overlay.taro.tsx | 8 +-
src/packages/progress/progress.taro.tsx | 4 +-
src/packages/quickenter/demos/taro/demo1.tsx | 5 +-
src/packages/range/range.taro.tsx | 18 +-
src/packages/safearea/safearea.scss | 6 -
src/packages/safearea/safearea.taro.tsx | 7 +-
src/packages/safearea/safearea.tsx | 7 +-
src/packages/searchbar/searchbar.taro.tsx | 1 -
src/packages/swipe/swipe.taro.tsx | 104 +++----
src/packages/tabs/tabs.taro.tsx | 13 +-
src/packages/textarea/textarea.tsx | 2 -
src/types/spec/button/taro.ts | 12 +-
src/utils/taro/get-rect.ts | 11 +-
25 files changed, 266 insertions(+), 290 deletions(-)
diff --git a/src/packages/animatingnumbers/countup.taro.tsx b/src/packages/animatingnumbers/countup.taro.tsx
index 10339842fa..5358e10e9c 100644
--- a/src/packages/animatingnumbers/countup.taro.tsx
+++ b/src/packages/animatingnumbers/countup.taro.tsx
@@ -56,7 +56,10 @@ export const CountUp: FunctionComponent> = (
const setNumberTransform = useCallback(() => {
if (countupRef.current && numberArr.length) {
- createSelectorQuery()
+ const query = createSelectorQuery()
+ const scope = (countupRef.current as any)?._scope
+ const scopedQuery = scope ? query.in(scope) : query
+ scopedQuery
.selectAll('.nut-countup-listitem')
.node((numberItems: any) => {
const transformArrCache: CSSProperties[] = []
@@ -83,7 +86,7 @@ export const CountUp: FunctionComponent> = (
})
.exec()
}
- }, [numberArr])
+ }, [duration, numberArr])
useEffect(() => {
if (numberArr.length) {
diff --git a/src/packages/badge/badge.taro.tsx b/src/packages/badge/badge.taro.tsx
index b0e99c8e7f..0efbdcbe01 100644
--- a/src/packages/badge/badge.taro.tsx
+++ b/src/packages/badge/badge.taro.tsx
@@ -38,6 +38,7 @@ export const Badge: FunctionComponent> = (props) => {
fill,
size,
disabled,
+ ...rest
} = { ...defaultProps, ...props }
const classPrefix = 'nut-badge'
@@ -95,7 +96,7 @@ export const Badge: FunctionComponent> = (props) => {
}
return (
-
+
{isIcon() && (
-
-export type ButtonType =
- | 'default'
- | 'primary'
- | 'info'
- | 'success'
- | 'warning'
- | 'danger'
-export type ButtonSize = 'xlarge' | 'large' | 'normal' | 'small' | 'mini'
-export type ButtonShape = 'square' | 'round'
-export type ButtonFill = 'solid' | 'outline' | 'dashed' | 'none'
-
-export interface ButtonProps
- extends BasicComponent,
- OmitMiniProgramButtonProps {
- color: string
- shape: ButtonShape
- type: ButtonType
- size: ButtonSize
- fill: ButtonFill
- block: boolean
- loading: boolean
- disabled: boolean
- icon: React.ReactNode
- rightIcon: React.ReactNode
- nativeType: 'submit' | 'reset' // | 'button'
- onClick: (e: MouseEvent) => void
-}
+import { TaroButtonProps } from '@/types'
const prefixCls = 'nut-button'
-const defaultProps: Partial = {
+const defaultProps: Partial = {
...ComponentDefaults,
color: '',
type: 'default',
@@ -60,124 +26,125 @@ const defaultProps: Partial = {
rightIcon: null,
onClick: (e: MouseEvent) => {},
}
-export const Button = React.forwardRef>(
- (props, ref) => {
- const {
- color,
- shape,
- fill,
- loading,
- disabled,
- type,
- size,
- block,
- icon,
- rightIcon,
- children,
- className,
- style,
- formType,
- nativeType,
- onClick,
- ...rest
- } = { ...defaultProps, ...props }
+export const Button = React.forwardRef<
+ HTMLButtonElement,
+ Partial
+>((props, ref) => {
+ const {
+ color,
+ shape,
+ fill,
+ loading,
+ disabled,
+ type,
+ size,
+ block,
+ icon,
+ rightIcon,
+ children,
+ className,
+ style,
+ // formType,
+ nativeType,
+ onClick,
+ ...rest
+ } = { ...defaultProps, ...props }
- const getStyle = useMemo(() => {
- const style: CSSProperties = {}
- if (color) {
- if (props.fill === 'outline' || props.fill === 'dashed') {
- style.color = color
- if (!color?.includes('gradient')) {
- style.borderColor = color
- }
- } else {
- style.color = '#fff'
- if (harmony()) {
- style.backgroundColor = color
- }
- style.background = color
- style.borderColor = 'transparent'
+ const getStyle = useMemo(() => {
+ const style: CSSProperties = {}
+ if (color) {
+ if (props.fill === 'outline' || props.fill === 'dashed') {
+ style.color = color
+ if (!color?.includes('gradient')) {
+ style.borderColor = color
+ }
+ } else {
+ style.color = '#fff'
+ if (harmony()) {
+ style.backgroundColor = color
}
+ style.background = color
+ style.borderColor = 'transparent'
}
- return style
- }, [color, props.fill])
+ }
+ return style
+ }, [color, props.fill])
- const getContStyle = useMemo(() => {
- const style: CSSProperties = {}
- if (props.color) {
- if (props.fill === 'outline' || props.fill === 'dashed') {
- style.color = color
- } else {
- style.color = '#fff'
- style.background = 'transparent'
- style.borderColor = 'transparent'
- }
+ const getContStyle = useMemo(() => {
+ const style: CSSProperties = {}
+ if (props.color) {
+ if (props.fill === 'outline' || props.fill === 'dashed') {
+ style.color = color
+ } else {
+ style.color = '#fff'
+ style.background = 'transparent'
+ style.borderColor = 'transparent'
}
- return style
- }, [color, props.fill, props.color])
+ }
+ return style
+ }, [color, props.fill, props.color])
- const handleClick = useCallback(
- (e: MouseEvent) => {
- if (!loading && !disabled && onClick) {
- onClick(e)
- }
- },
- [loading, disabled, onClick]
- )
+ const handleClick = useCallback(
+ (e: MouseEvent) => {
+ if (!loading && !disabled && onClick) {
+ onClick(e)
+ }
+ },
+ [loading, disabled, onClick]
+ )
- const buttonClassNames = classNames(
- prefixCls,
- `${prefixCls}-${type}`,
- {
- [`${prefixCls}-${type}-solid`]: type === 'primary' && !props.fill,
- [`${prefixCls}-${fill}`]: props.fill,
- [`${prefixCls}-${type}-${fill}`]: props.fill,
- [`${prefixCls}-${size}`]: size,
- [`${prefixCls}-${shape}`]: shape,
- [`${prefixCls}-${shape}-${size}`]: shape && size,
- [`${prefixCls}-block`]: block,
- [`${prefixCls}-disabled`]: disabled || loading,
- [`${prefixCls}-${type}${props.fill ? `-${fill}` : ''}-disabled`]:
- disabled || loading,
- [`${prefixCls}-loading`]: loading,
- [`${prefixCls}-icononly`]: !children,
- },
- className
- )
+ const buttonClassNames = classNames(
+ prefixCls,
+ `${prefixCls}-${type}`,
+ {
+ [`${prefixCls}-${type}-solid`]: type === 'primary' && !props.fill,
+ [`${prefixCls}-${fill}`]: props.fill,
+ [`${prefixCls}-${type}-${fill}`]: props.fill,
+ [`${prefixCls}-${size}`]: size,
+ [`${prefixCls}-${shape}`]: shape,
+ [`${prefixCls}-${shape}-${size}`]: shape && size,
+ [`${prefixCls}-block`]: block,
+ [`${prefixCls}-disabled`]: disabled || loading,
+ [`${prefixCls}-${type}${props.fill ? `-${fill}` : ''}-disabled`]:
+ disabled || loading,
+ [`${prefixCls}-loading`]: loading,
+ [`${prefixCls}-icononly`]: !children,
+ },
+ className
+ )
- if (getEnv() === 'WEB') {
- ;(rest as any).type = formType
- }
- return (
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- // eslint-disable-next-line react/button-has-type
- handleClick(e as any)}
- >
-
- {loading && }
- {!loading && icon}
- {children && (
-
- {children}
-
- )}
- {rightIcon}
-
-
- )
- }
-)
+ // if (getEnv() === 'WEB') {
+ // ;(rest as any).type = formType
+ // }
+ return (
+ // @ts-ignore
+ // handleClick(e as any)}
+ >
+
+ {loading && }
+ {!loading && icon}
+ {children && (
+
+ {children}
+
+ )}
+ {rightIcon}
+
+
+ //
+ )
+})
Button.displayName = 'NutButton'
diff --git a/src/packages/button/index.taro.ts b/src/packages/button/index.taro.ts
index 2aea8efdde..18ae5016a1 100644
--- a/src/packages/button/index.taro.ts
+++ b/src/packages/button/index.taro.ts
@@ -1,10 +1,3 @@
import { Button } from './button.taro'
-export type {
- ButtonType,
- ButtonProps,
- ButtonSize,
- ButtonShape,
- ButtonFill,
-} from './button.taro'
export default Button
diff --git a/src/packages/calendarcard/calendarcard.taro.tsx b/src/packages/calendarcard/calendarcard.taro.tsx
index e6d75abdf7..f73383dd94 100644
--- a/src/packages/calendarcard/calendarcard.taro.tsx
+++ b/src/packages/calendarcard/calendarcard.taro.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect, useState, useRef } from 'react'
+import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'
import classNames from 'classnames'
import { View } from '@tarojs/components'
import { ArrowLeft, ArrowRight, DoubleLeft, DoubleRight } from './icon.taro'
@@ -24,6 +24,7 @@ const defaultProps = {
...ComponentDefaults,
type: 'single',
firstDayOfWeek: 0,
+ weekdays: [],
}
const prefixCls = 'nut-calendarcard'
@@ -47,6 +48,7 @@ export const CalendarCard = React.forwardRef<
renderDay,
renderDayTop,
renderDayBottom,
+ weekdays,
onDayClick,
onPageChange,
onChange,
@@ -397,18 +399,20 @@ export const CalendarCard = React.forwardRef<
)
}
- const [weekHeader] = useState(() => {
- const weekdays = locale.calendaritem.weekdays.map((day, index) => {
+ const weekHeader = useMemo(() => {
+ const weekdaysList =
+ weekdays.length > 0 ? weekdays : locale.calendaritem.weekdays
+ const weekdaysData = weekdaysList.map((day, index) => {
return {
name: day,
key: index,
}
})
return [
- ...weekdays.slice(firstDayOfWeek, 7),
- ...weekdays.slice(0, firstDayOfWeek),
+ ...weekdaysData.slice(firstDayOfWeek, 7),
+ ...weekdaysData.slice(0, firstDayOfWeek),
]
- })
+ }, [weekdays, firstDayOfWeek, locale.calendaritem.weekdays])
const renderContent = () => {
return (
diff --git a/src/packages/calendarcard/demo.taro.tsx b/src/packages/calendarcard/demo.taro.tsx
index d66f433074..ace887f98a 100644
--- a/src/packages/calendarcard/demo.taro.tsx
+++ b/src/packages/calendarcard/demo.taro.tsx
@@ -16,6 +16,7 @@ import Demo9 from './demos/taro/demo9'
import Demo10 from './demos/taro/demo10'
import Demo11 from './demos/taro/demo11'
import Demo12 from './demos/taro/demo12'
+import Demo13 from './demos/taro/demo13'
const CalendarDemo = () => {
const [translated] = useTranslate({
@@ -34,6 +35,7 @@ const CalendarDemo = () => {
confirm: '确定',
ref: '使用 Ref 上的方法',
title: '搭配 Ref 使用自定义头',
+ customWeekdays: '自定义周几',
},
'zh-TW': {
single: '選擇單個日期',
@@ -50,6 +52,7 @@ const CalendarDemo = () => {
confirm: '確定',
ref: '使用 Ref 上的方法',
title: '搭配 Ref 使用自定義头',
+ customWeekdays: '自定義周几',
},
'en-US': {
single: 'Select a single date',
@@ -66,6 +69,7 @@ const CalendarDemo = () => {
confirm: 'Confirm',
ref: 'Use ref',
title: 'Custom title',
+ customWeekdays: 'Custom weekdays',
},
})
@@ -97,6 +101,8 @@ const CalendarDemo = () => {
{translated.title}
+ {translated.customWeekdays}
+
>
)
diff --git a/src/packages/calendarcard/icon.taro.tsx b/src/packages/calendarcard/icon.taro.tsx
index 1223f86495..9ac1e4e3e3 100644
--- a/src/packages/calendarcard/icon.taro.tsx
+++ b/src/packages/calendarcard/icon.taro.tsx
@@ -1,5 +1,5 @@
import React, { FC } from 'react'
-import { Image, View } from '@tarojs/components'
+import { Image } from '@tarojs/components'
let left =
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNNi42MDUgOS40OWEuNzcxLjc3MSAwIDAgMSAwLS45OGwzLjYtNC4zNzJhLjc3MS43NzEgMCAwIDEgMS4xOS45ODFMOC4yIDlsMy4xOTcgMy44ODFhLjc3MS43NzEgMCAxIDEtMS4xOTEuOThsLTMuNi00LjM3eiIvPjwvc3ZnPg=='
@@ -30,15 +30,10 @@ if (process.env.TARO_ENV === 'jdharmony_cpp') {
const Icon: FC = ({ url }) => {
const style = {
- background: `url('${url}') no-repeat center`,
- backgroundSize: '100% 100%',
width: 18,
height: 18,
}
- if (process.env.TARO_ENV === 'jdharmony_cpp') {
- return
- }
- return
+ return
}
export const ArrowLeft: FC = () =>
diff --git a/src/packages/divider/divider.taro.tsx b/src/packages/divider/divider.taro.tsx
index 8a2040b06d..09a59e71ac 100644
--- a/src/packages/divider/divider.taro.tsx
+++ b/src/packages/divider/divider.taro.tsx
@@ -3,7 +3,7 @@ import classNames from 'classnames'
import { View } from '@tarojs/components'
import { BasicComponent, ComponentDefaults } from '@/utils/typings'
-import { useRtl } from '../configprovider/configprovider.taro'
+import { useRtl } from '@/packages/configprovider/index.taro'
export type DividerContentPosition = 'left' | 'center' | 'right'
export type DividerDirection = 'horizontal' | 'vertical'
diff --git a/src/packages/ellipsis/ellipsis.taro.tsx b/src/packages/ellipsis/ellipsis.taro.tsx
index 85ecaa6b1a..19d960a427 100644
--- a/src/packages/ellipsis/ellipsis.taro.tsx
+++ b/src/packages/ellipsis/ellipsis.taro.tsx
@@ -7,7 +7,7 @@ import {
getRectInMultiPlatformWithoutCache,
} from '@/utils/taro/get-rect'
import { ComponentDefaults } from '@/utils/typings'
-import { useRtl } from '../configprovider/index.taro'
+import { useRtl } from '@/packages/configprovider/index.taro'
import { TaroEllipsisProps } from '@/types'
type EllipsisValue = {
diff --git a/src/packages/empty/empty.taro.tsx b/src/packages/empty/empty.taro.tsx
index 05be245d28..9d3795625d 100644
--- a/src/packages/empty/empty.taro.tsx
+++ b/src/packages/empty/empty.taro.tsx
@@ -2,18 +2,14 @@ import React, { FunctionComponent, useEffect, useState, ReactNode } from 'react'
import classNames from 'classnames'
import { View, Image } from '@tarojs/components'
import { BasicComponent, ComponentDefaults } from '@/utils/typings'
-import {
- Button,
- ButtonFill,
- ButtonSize,
- ButtonType,
-} from '@/packages/button/button.taro'
+import { UIFill, UISize, UIType } from '@/types/base/atoms'
+import { Button } from '@/packages/button/button.taro'
export interface EmptyAction {
text: React.ReactNode
- type?: ButtonType
- size?: ButtonSize
- fill?: ButtonFill
+ type?: UIType
+ size?: UISize
+ fill?: UIFill
disabled?: boolean
onClick?: () => () => void
}
diff --git a/src/packages/inputnumber/inputnumber.taro.tsx b/src/packages/inputnumber/inputnumber.taro.tsx
index af39db4ac8..1a8ada7528 100644
--- a/src/packages/inputnumber/inputnumber.taro.tsx
+++ b/src/packages/inputnumber/inputnumber.taro.tsx
@@ -198,7 +198,7 @@ export const InputNumber: FunctionComponent<
className={classNames(`${classPrefix}-input`, {
[`${classPrefix}-input-disabled`]: disabled,
})}
- type={type}
+ type={formatter ? 'text' : type}
ref={inputRef}
inputMode={type === 'digit' ? 'decimal' : 'numeric'}
disabled={disabled}
diff --git a/src/packages/lottie/lottiemp.taro.tsx b/src/packages/lottie/lottiemp.taro.tsx
index 82790d79e8..5dd321c581 100644
--- a/src/packages/lottie/lottiemp.taro.tsx
+++ b/src/packages/lottie/lottiemp.taro.tsx
@@ -1,5 +1,5 @@
-import React, { useImperativeHandle, useLayoutEffect, useRef } from 'react'
-import { createSelectorQuery, getEnv, useUnload } from '@tarojs/taro'
+import React, { useImperativeHandle, useRef } from 'react'
+import { createSelectorQuery, getEnv, useReady, useUnload } from '@tarojs/taro'
import lottie from '@nutui/lottie-miniprogram'
import { getWindowInfo } from '@/utils/taro/get-system-info'
import { useUuid } from '@/hooks/use-uuid'
@@ -20,10 +20,15 @@ export const Lottie = React.forwardRef((props: TaroLottieProps, ref: any) => {
speed = 1,
dpr = true,
} = props
-
+ const setSpeed = () => {
+ if (animation.current) {
+ animation.current.setSpeed(Math.abs(speed))
+ animation.current.setDirection(speed > 0 ? 1 : -1)
+ }
+ }
useImperativeHandle(ref, () => animation.current || {})
const pixelRatio = useRef(getWindowInfo().pixelRatio)
- useLayoutEffect(() => {
+ useReady(() => {
createSelectorQuery()
.select(`#${id}`)
.fields(
@@ -57,14 +62,9 @@ export const Lottie = React.forwardRef((props: TaroLottieProps, ref: any) => {
context,
},
})
- if (onComplete) {
+ onComplete &&
animation.current.addEventListener('complete', onComplete)
- }
-
- if (animation.current) {
- animation.current.setSpeed(Math.abs(speed))
- animation.current.setDirection(speed > 0 ? 1 : -1)
- }
+ setSpeed()
inited.current = true
} catch (error) {
console.error(error)
@@ -72,8 +72,7 @@ export const Lottie = React.forwardRef((props: TaroLottieProps, ref: any) => {
}
)
.exec()
- }, [autoPlay, dpr, id, loop, onComplete, source, speed, style])
-
+ })
useUnload(() => {
onComplete &&
animation.current &&
diff --git a/src/packages/overlay/overlay.taro.tsx b/src/packages/overlay/overlay.taro.tsx
index 328835b230..e5e729bb80 100644
--- a/src/packages/overlay/overlay.taro.tsx
+++ b/src/packages/overlay/overlay.taro.tsx
@@ -1,10 +1,10 @@
import React, { FunctionComponent, useEffect, useState } from 'react'
-import { CSSTransition } from 'react-transition-group'
import classNames from 'classnames'
import { ITouchEvent, View } from '@tarojs/components'
import { ComponentDefaults } from '@/utils/typings'
import { useLockScrollTaro } from '@/hooks/taro/use-lock-scoll'
import { TaroOverlayProps } from '@/types'
+import ConfigurableCSSTransition from '@/utils/taro/ConfigurableCSSTransition'
export const defaultOverlayProps: TaroOverlayProps = {
...ComponentDefaults,
@@ -70,17 +70,17 @@ export const Overlay: FunctionComponent<
)
return (
-
{renderOverlay()}
-
+
)
}
diff --git a/src/packages/progress/progress.taro.tsx b/src/packages/progress/progress.taro.tsx
index 2b48bd8492..f2cd6df679 100644
--- a/src/packages/progress/progress.taro.tsx
+++ b/src/packages/progress/progress.taro.tsx
@@ -4,7 +4,7 @@ import Taro, { PageInstance } from '@tarojs/taro'
import { View } from '@tarojs/components'
import { pxTransform } from '@/utils/taro/px-transform'
import { ComponentDefaults } from '@/utils/typings'
-import { useRtl } from '../configprovider/index.taro'
+import { useRtl } from '@/packages/configprovider/index.taro'
import { useUuid } from '@/hooks/use-uuid'
import { harmony, web } from '@/utils/taro/platform'
import { TaroProgressProps } from '@/types'
@@ -43,7 +43,6 @@ export const Progress: FunctionComponent<
active,
activeMode,
duration,
- ariaLabel,
onActiveEnd,
...rest
} = {
@@ -222,7 +221,6 @@ export const Progress: FunctionComponent<
id={selector}
className={classNames(classPrefix, className)}
style={style}
- aria-label={ariaLabel}
{...(rest as any)}
>
diff --git a/src/packages/quickenter/demos/taro/demo1.tsx b/src/packages/quickenter/demos/taro/demo1.tsx
index 114ce74935..7925f5d62b 100644
--- a/src/packages/quickenter/demos/taro/demo1.tsx
+++ b/src/packages/quickenter/demos/taro/demo1.tsx
@@ -14,7 +14,10 @@ const Demo1 = () => {
]
const onChange = (item: any) => {
- Toast.show('toast', { content: `Clicked: ${item.title}` })
+ Toast.show('toast', {
+ title: `Clicked: ${item.title}`,
+ icon: 'none',
+ })
}
return (
diff --git a/src/packages/range/range.taro.tsx b/src/packages/range/range.taro.tsx
index 54a36dcfbf..5e94d1cf3c 100644
--- a/src/packages/range/range.taro.tsx
+++ b/src/packages/range/range.taro.tsx
@@ -2,19 +2,19 @@ import React, {
FunctionComponent,
useCallback,
useEffect,
- useLayoutEffect,
useMemo,
useRef,
useState,
} from 'react'
import classNames from 'classnames'
import { Text, View } from '@tarojs/components'
+import { useReady, nextTick } from '@tarojs/taro'
import { pxTransform } from '@/utils/taro/px-transform'
import { useTouch } from '@/hooks/use-touch'
import { ComponentDefaults } from '@/utils/typings'
import { usePropsValue } from '@/hooks/use-props-value'
import { getRectInMultiPlatform } from '@/utils/taro/get-rect'
-import { useRtl } from '../configprovider/index.taro'
+import { useRtl } from '@/packages/configprovider/index.taro'
import { harmony } from '@/utils/taro/platform'
import { TaroRangeProps, RangeValue } from '@/types'
import { mergeProps } from '@/utils/merge-props'
@@ -286,13 +286,17 @@ export const Range: FunctionComponent<
[innerValue, disabled, isRange, min, scope, updateValue, vertical]
)
- useLayoutEffect(() => {
- if (root.current) {
- getRectInMultiPlatform(root.current).then((rect) => {
+ useReady(() => {
+ const getRootRect = async () => {
+ if (root.current) {
+ const rect = await getRectInMultiPlatform(root.current)
rootRect.current = rect
- })
+ }
}
- }, [])
+ nextTick(() => {
+ getRootRect()
+ })
+ })
const onTouchStart = useCallback(
(event: any) => {
diff --git a/src/packages/safearea/safearea.scss b/src/packages/safearea/safearea.scss
index b04bc6de3a..62b8722282 100644
--- a/src/packages/safearea/safearea.scss
+++ b/src/packages/safearea/safearea.scss
@@ -3,18 +3,12 @@
width: 100%;
&-position-top {
- padding-top: calc(
- constant(safe-area-inset-top) * var(--nutui-safe-area-multiple, 1)
- );
padding-top: calc(
env(safe-area-inset-top) * var(--nutui-safe-area-multiple, 1)
);
}
&-position-bottom {
- padding-bottom: calc(
- constant(safe-area-inset-bottom) * var(--nutui-safe-area-multiple, 1)
- );
padding-bottom: calc(
env(safe-area-inset-bottom) * var(--nutui-safe-area-multiple, 1)
);
diff --git a/src/packages/safearea/safearea.taro.tsx b/src/packages/safearea/safearea.taro.tsx
index 9cb42c1336..714cb7a889 100644
--- a/src/packages/safearea/safearea.taro.tsx
+++ b/src/packages/safearea/safearea.taro.tsx
@@ -5,17 +5,12 @@ import { TaroSafeAreaProps } from '@/types'
const classPrefix = 'nut-safe-area'
export const SafeArea: FC = (props) => {
- const { className, style, position, ...rest } = props
-
return (
)
}
diff --git a/src/packages/safearea/safearea.tsx b/src/packages/safearea/safearea.tsx
index 2201ab47a1..f50e0969eb 100644
--- a/src/packages/safearea/safearea.tsx
+++ b/src/packages/safearea/safearea.tsx
@@ -4,17 +4,12 @@ import { WebSafeAreaProps } from '@/types'
const classPrefix = 'nut-safe-area'
export const SafeArea: FC = (props) => {
- const { className, style, position, ...rest } = props
-
return (
)
}
diff --git a/src/packages/searchbar/searchbar.taro.tsx b/src/packages/searchbar/searchbar.taro.tsx
index d5f24c9a68..f75711f74f 100644
--- a/src/packages/searchbar/searchbar.taro.tsx
+++ b/src/packages/searchbar/searchbar.taro.tsx
@@ -289,7 +289,6 @@ export const SearchBar: FunctionComponent<
visibility: `${!innerTag && value && clearable ? 'visible' : 'hidden'}`,
}}
onClick={clearaVal}
- aria-label="清除"
>
diff --git a/src/packages/swipe/swipe.taro.tsx b/src/packages/swipe/swipe.taro.tsx
index 8d5dc887e7..8ff06cabc1 100644
--- a/src/packages/swipe/swipe.taro.tsx
+++ b/src/packages/swipe/swipe.taro.tsx
@@ -4,15 +4,14 @@ import React, {
useCallback,
useEffect,
useImperativeHandle,
- useLayoutEffect,
useRef,
useState,
} from 'react'
import classNames from 'classnames'
import { ITouchEvent, View } from '@tarojs/components'
import { BaseEventOrig } from '@tarojs/components/types/common'
+import { createSelectorQuery, nextTick, useReady } from '@tarojs/taro'
import { useTouch } from '@/hooks/use-touch'
-import { getRectInMultiPlatform } from '@/utils/taro/get-rect'
import { ComponentDefaults } from '@/utils/typings'
import { harmony } from '@/utils/taro/platform'
import { useRefState } from '@/hooks/use-ref-state'
@@ -20,10 +19,13 @@ import { useUuid } from '@/hooks/use-uuid'
import { PositionX, SwipeRef, TaroSwipeProps } from '@/types'
function preventDefault(event: any, isStopPropagation?: boolean): void {
- if (typeof event.cancelable !== 'boolean' || event.cancelable) {
+ if (
+ event.preventDefault &&
+ (typeof event.cancelable !== 'boolean' || event.cancelable)
+ ) {
event.preventDefault()
}
- if (isStopPropagation) {
+ if (isStopPropagation && event.stopPropagation) {
event.stopPropagation()
}
}
@@ -52,6 +54,8 @@ export const Swipe = forwardRef<
const opened = useRef(false)
const lockClick = useRef(false)
const startOffset = useRef(0)
+ const leftWrapper = useRef(null)
+ const rightWrapper = useRef(null)
const [state, setState] = useState({
offset: 0,
@@ -63,65 +67,65 @@ export const Swipe = forwardRef<
right: 0,
})
const setActionWidth = useCallback(
- (fn: any) => {
- const res = fn()
- if (res.left !== undefined) {
- updateState({
- ...actionWidth.current,
- left: res.left,
- })
- }
- if (res.right !== undefined) {
- updateState({
- ...actionWidth.current,
- right: res.right,
- })
- }
+ (side: PositionX, width: number) => {
+ if (actionWidth.current[side] === width) return
+ updateState({
+ ...actionWidth.current,
+ [side]: width,
+ })
},
[actionWidth, updateState]
)
- // 获取元素的时候要在页面 onReady 后,需要参考小程序的事件周期
- useLayoutEffect(() => {
- const getWidth = async () => {
- if (leftWrapper.current) {
- const leftRect = await getRectInMultiPlatform(
- leftWrapper.current,
- leftId
- )
- leftRect && setActionWidth((v: any) => ({ ...v, left: leftRect.width }))
- }
- if (rightWrapper.current) {
- const rightRect = await getRectInMultiPlatform(
- rightWrapper.current,
- rightId
- )
- rightRect &&
- setActionWidth((v: any) => ({ ...v, right: rightRect.width }))
+ const getActionRect = (element: any, id: string) => {
+ return new Promise((resolve) => {
+ if (!element) {
+ resolve(null)
+ return
}
+
+ const query = createSelectorQuery()
+ const scope = element?._scope
+ const scopedQuery = scope ? query.in(scope) : query
+ scopedQuery
+ .select(`#${id}`)
+ .boundingClientRect()
+ .exec((rect = []) => {
+ resolve(rect[0] || null)
+ })
+ })
+ }
+
+ const getWidth = useCallback(async () => {
+ if (props.leftAction) {
+ const leftRect = await getActionRect(leftWrapper.current, leftId)
+ leftRect && setActionWidth('left', leftRect.width)
+ }
+ if (props.rightAction) {
+ const rightRect = await getActionRect(rightWrapper.current, rightId)
+ rightRect && setActionWidth('right', rightRect.width)
}
+ }, [leftId, props.leftAction, props.rightAction, rightId, setActionWidth])
- getWidth()
- }, [leftId, rightId, setActionWidth])
+ const getWidthRef = useRef(getWidth)
+ useEffect(() => {
+ getWidthRef.current = getWidth
+ }, [getWidth])
+
+ // 页面 ready 后测量操作区域宽度,宽度未变化时不触发更新。
+ useReady(() => {
+ nextTick(() => {
+ getWidthRef.current()
+ })
+ })
const wrapperStyle = {
transform: `translate(${state.offset}${!harmony() ? 'px' : ''}, 0)`,
transitionDuration: state.dragging ? '0s' : '.6s',
}
const onTouchStart = async (event: BaseEventOrig) => {
- if (leftWrapper.current) {
- const leftRect = await getRectInMultiPlatform(leftWrapper.current, leftId)
- leftRect && setActionWidth((v: any) => ({ ...v, left: leftRect.width }))
- }
- if (rightWrapper.current) {
- const rightRect = await getRectInMultiPlatform(
- rightWrapper.current,
- rightId
- )
- rightRect &&
- setActionWidth((v: any) => ({ ...v, right: rightRect.width }))
- }
if (!props.disabled) {
+ getWidth()
startOffset.current = state.offset
touch.start(event)
props.onTouchStart?.(event)
@@ -203,8 +207,6 @@ export const Swipe = forwardRef<
return Math.min(Math.max(Number(num), Number(min)), Number(max))
}
- const leftWrapper = useRef(null)
- const rightWrapper = useRef(null)
const renderActionContent = (side: PositionX) => {
if (props[`${side}Action`]) {
return (
diff --git a/src/packages/tabs/tabs.taro.tsx b/src/packages/tabs/tabs.taro.tsx
index f259c6a6ac..7fcc4dbef1 100644
--- a/src/packages/tabs/tabs.taro.tsx
+++ b/src/packages/tabs/tabs.taro.tsx
@@ -48,6 +48,7 @@ export const Tabs: FunctionComponent> & {
} = { ...defaultProps, ...props }
const uuid = useUuid()
+ const tabsRef = useRef(null)
const [value, setValue] = usePropsValue({
value: outerValue,
@@ -103,7 +104,10 @@ export const Tabs: FunctionComponent> & {
const getRect = (selector: string) => {
return new Promise((resolve) => {
- createSelectorQuery()
+ const query = createSelectorQuery()
+ const scope = tabsRef.current?._scope
+ const scopedQuery = scope ? query.in(scope) : query
+ scopedQuery
.select(selector)
.boundingClientRect()
.exec((rect = []) => {
@@ -113,7 +117,10 @@ export const Tabs: FunctionComponent> & {
}
const getAllRect = (selector: string) => {
return new Promise((resolve) => {
- createSelectorQuery()
+ const query = createSelectorQuery()
+ const scope = tabsRef.current?._scope
+ const scopedQuery = scope ? query.in(scope) : query
+ scopedQuery
.selectAll(selector)
.boundingClientRect()
.exec((rect = []) => {
@@ -229,7 +236,7 @@ export const Tabs: FunctionComponent> & {
}
return (
-
+
+
+export interface TaroButtonProps
+ extends BaseButton,
+ OmitMiniProgramButtonProps {
+ nativeType: 'submit' | 'reset' // | 'button'
+}
diff --git a/src/utils/taro/get-rect.ts b/src/utils/taro/get-rect.ts
index 73f55868bf..429fb1fdc0 100644
--- a/src/utils/taro/get-rect.ts
+++ b/src/utils/taro/get-rect.ts
@@ -4,6 +4,11 @@ import { getRect, inBrowser } from '@/utils/get-rect'
const lru = new MiniLru(10)
+const createScopedSelectorQuery = (scope?: any) => {
+ const query = createSelectorQuery()
+ return scope ? query.in(scope) : query
+}
+
export interface Rect {
dataset: Record
id: string
@@ -40,7 +45,8 @@ export const getRectInMultiPlatform = async (
resolve(lru.get(element) as Rect)
return
}
- createSelectorQuery()
+ createScopedSelectorQuery(element?._scope)
+ // https://taro.jd.com/docs/reference/config/page/
.select(`#${harmonyId || element.uid}`)
.boundingClientRect()
.exec(([rects]) => {
@@ -64,7 +70,8 @@ export const getRectInMultiPlatformWithoutCache = async (
return Promise.resolve(getRect(element))
}
return new Promise((resolve, reject) => {
- createSelectorQuery()
+ createScopedSelectorQuery(element?._scope)
+ // https://taro.jd.com/docs/reference/config/page/
.select(`#${harmonyId || element.uid}`)
.boundingClientRect()
.exec(([rects]) => {