{
})
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,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FxYXByYnLgInARYzMj4BNxcGBCMiJwcnNyYCAS2YAetNUUaFgGA6y64BOcmJcY62lC4oNS6wHDIDCgoE/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,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')
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-jmapp.scss b/src/styles/variables-jmapp.scss
index fc4776d512..cc8e386609 100644
--- a/src/styles/variables-jmapp.scss
+++ b/src/styles/variables-jmapp.scss
@@ -2721,3 +2721,44 @@ $resultpage-actions-margin-top: var(
--nutui-resultpage-actions-margin-top,
21px
) !default;
+
+// quickenter
+$quickenter-bg-color: var(--nutui-quickenter-bg-color, #f5f5f5) !default;
+$quickenter-max-height: var(--nutui-quickenter-max-height, 256px) !default;
+$quickenter-title-font-size: var(
+ --nutui-quickenter-title-font-size,
+ $font-size-base
+) !default;
+$quickenter-title-color: var(
+ --nutui-quickenter-title-color,
+ $color-title
+) !default;
+$quickenter-item-title-font-size: var(
+ --nutui-quickenter-item-title-font-size,
+ $font-size-s
+) !default;
+$quickenter-item-title-color: var(
+ --nutui-quickenter-item-title-color,
+ $color-title
+) !default;
+$quickenter-item-icon-bg-color: var(
+ --nutui-quickenter-item-icon-bg-color,
+ $white
+) !default;
+$quickenter-item-icon-color: var(
+ --nutui-quickenter-item-icon-color,
+ $color-title
+) !default;
+$quickenter-close-icon-size: var(
+ --nutui-quickenter-close-icon-size,
+ 12px
+) !default;
+$quickenter-close-icon-color: var(
+ --nutui-quickenter-close-icon-color,
+ #808080
+) !default;
+$quickenter-box-shadow: var(
+ --nutui-quickenter-box-shadow,
+ 0px 8px 16px rgba(141, 153, 167, 0.2),
+ 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset
+) !default;
diff --git a/src/styles/variables-jrkf.scss b/src/styles/variables-jrkf.scss
index 1a7cf3fc79..8c51b238a3 100644
--- a/src/styles/variables-jrkf.scss
+++ b/src/styles/variables-jrkf.scss
@@ -2775,3 +2775,44 @@ $resultpage-actions-margin-top: var(
--nutui-resultpage-actions-margin-top,
21px
) !default;
+
+// quickenter
+$quickenter-bg-color: var(--nutui-quickenter-bg-color, #f5f5f5) !default;
+$quickenter-max-height: var(--nutui-quickenter-max-height, 256px) !default;
+$quickenter-title-font-size: var(
+ --nutui-quickenter-title-font-size,
+ $font-size-base
+) !default;
+$quickenter-title-color: var(
+ --nutui-quickenter-title-color,
+ $color-title
+) !default;
+$quickenter-item-title-font-size: var(
+ --nutui-quickenter-item-title-font-size,
+ $font-size-s
+) !default;
+$quickenter-item-title-color: var(
+ --nutui-quickenter-item-title-color,
+ $color-title
+) !default;
+$quickenter-item-icon-bg-color: var(
+ --nutui-quickenter-item-icon-bg-color,
+ $white
+) !default;
+$quickenter-item-icon-color: var(
+ --nutui-quickenter-item-icon-color,
+ $color-title
+) !default;
+$quickenter-close-icon-size: var(
+ --nutui-quickenter-close-icon-size,
+ 12px
+) !default;
+$quickenter-close-icon-color: var(
+ --nutui-quickenter-close-icon-color,
+ #808080
+) !default;
+$quickenter-box-shadow: var(
+ --nutui-quickenter-box-shadow,
+ 0px 8px 16px rgba(141, 153, 167, 0.2),
+ 0px -0.5px 0px rgba(0, 0, 0, 0.05) inset
+) !default;
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 81c738928e..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
@@ -2581,3 +2581,48 @@ $resultpage-actions-margin-top: var(
--nutui-resultpage-actions-margin-top,
16px
) !default;
+
+// quickenter
+$quickenter-bg-color: var(--nutui-quickenter-bg-color, #f5f5f5) !default;
+$quickenter-max-height: var(--nutui-quickenter-max-height, 256px) !default;
+$quickenter-title-font-size: var(
+ --nutui-quickenter-title-font-size,
+ $font-size-base
+) !default;
+$quickenter-title-color: var(
+ --nutui-quickenter-title-color,
+ $color-title
+) !default;
+$quickenter-item-title-font-size: var(
+ --nutui-quickenter-item-title-font-size,
+ $font-size-s
+) !default;
+$quickenter-item-title-color: var(
+ --nutui-quickenter-item-title-color,
+ $color-title
+) !default;
+$quickenter-item-icon-bg-color: var(
+ --nutui-quickenter-item-icon-bg-color,
+ $white
+) !default;
+$quickenter-item-icon-color: var(
+ --nutui-quickenter-item-icon-color,
+ $color-title
+) !default;
+$quickenter-close-icon-size: var(
+ --nutui-quickenter-close-icon-size,
+ 12px
+) !default;
+$quickenter-close-icon-color: var(
+ --nutui-quickenter-close-icon-color,
+ #808080
+) !default;
+$quickenter-box-shadow: var(
+ --nutui-quickenter-box-shadow,
+ 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 64f56f1fd5..2a1c2a3908 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -351,3 +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/button/taro.ts b/src/types/spec/button/taro.ts
index a21a8a7473..4cbbbb232a 100644
--- a/src/types/spec/button/taro.ts
+++ b/src/types/spec/button/taro.ts
@@ -1,3 +1,13 @@
+import { ButtonProps as MiniProgramButtonProps } from '@tarojs/components'
import { BaseButton } from './base'
-export interface TaroButtonProps extends BaseButton {}
+type OmitMiniProgramButtonProps = Omit<
+ MiniProgramButtonProps,
+ 'size' | 'type' | 'onClick' | 'style' | 'disabled' | 'loading' | 'id'
+>
+
+export interface TaroButtonProps
+ extends BaseButton,
+ OmitMiniProgramButtonProps {
+ nativeType: 'submit' | 'reset' // | 'button'
+}
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
diff --git a/src/types/spec/quickenter/base.ts b/src/types/spec/quickenter/base.ts
new file mode 100644
index 0000000000..da34359a5c
--- /dev/null
+++ b/src/types/spec/quickenter/base.ts
@@ -0,0 +1,30 @@
+import { ReactNode } from 'react'
+import { BaseProps } from '../../base/props'
+
+export type QuickEnterRef = QuickEnterActions
+export type QuickEnterActions = {
+ open: () => void
+ close: () => void
+}
+
+export interface QuickEnterOption extends Record {
+ title?: string
+ icon?: ReactNode
+ type?: string
+ url?: string
+ badge?: boolean | ReactNode
+ badgeProps?: any
+}
+
+export interface BaseQuickEnter extends BaseProps {
+ visible?: boolean
+ title?: ReactNode
+ options?: QuickEnterOption[]
+ popupProps?: POPUP_PROPS
+ closeOnOverlayClick?: boolean
+ closeIcon?: ReactNode
+ safeAreaInsetTop?: boolean
+ onClose?: () => void
+ onChange?: (item: QuickEnterOption, index: number) => void
+ children?: ReactNode
+}
diff --git a/src/types/spec/quickenter/h5.ts b/src/types/spec/quickenter/h5.ts
new file mode 100644
index 0000000000..26b281603c
--- /dev/null
+++ b/src/types/spec/quickenter/h5.ts
@@ -0,0 +1,5 @@
+import { BaseQuickEnter, QuickEnterOption } from './base'
+import { WebPopupProps } from '../popup/h5'
+
+export interface WebQuickEnterProps extends BaseQuickEnter {}
+export type { QuickEnterOption }
diff --git a/src/types/spec/quickenter/taro.ts b/src/types/spec/quickenter/taro.ts
new file mode 100644
index 0000000000..2088fa72cb
--- /dev/null
+++ b/src/types/spec/quickenter/taro.ts
@@ -0,0 +1,5 @@
+import { BaseQuickEnter, QuickEnterOption } from './base'
+import { TaroPopupProps } from '../popup/taro'
+
+export interface TaroQuickEnterProps extends BaseQuickEnter {}
+export type { QuickEnterOption }
diff --git a/src/utils/should-render-price-raw.ts b/src/utils/should-render-price-raw.ts
new file mode 100644
index 0000000000..7a8d43ea60
--- /dev/null
+++ b/src/utils/should-render-price-raw.ts
@@ -0,0 +1,26 @@
+const CJK = /[\u4E00-\u9FFF]/
+const RE_NUM = /\d+(?:\.\d+)?/g
+
+function hasNoExtractablePrice(s: string) {
+ const t = s.trim()
+ if (!t) return true
+ if (!/\d/.test(t)) return true
+ if (t.replace(/[^\d.]/g, '') === '') return true
+ return false
+}
+
+export function shouldRenderPriceAsRaw(s: string) {
+ if (hasNoExtractablePrice(s)) {
+ return true
+ }
+ const t = s.trim()
+ if (!CJK.test(t)) return false
+ const matches = Array.from(t.matchAll(RE_NUM))
+ if (matches.length < 2) return false
+ const a = matches[0]
+ const b = matches[1]
+ const i0 = a.index!
+ const i1 = b.index!
+ const between = t.slice(i0 + a[0].length, i1)
+ return CJK.test(between)
+}
diff --git a/src/utils/taro/ConfigurableCSSTransition.tsx b/src/utils/taro/ConfigurableCSSTransition.tsx
new file mode 100644
index 0000000000..114f835098
--- /dev/null
+++ b/src/utils/taro/ConfigurableCSSTransition.tsx
@@ -0,0 +1,115 @@
+import React, {
+ useState,
+ useEffect,
+ useRef,
+ cloneElement,
+ useCallback,
+} from 'react'
+
+export type TransitionStatus =
+ | 'entering'
+ | 'entered'
+ | 'exiting'
+ | 'exited'
+ | 'unmounted'
+
+interface CSSTransitionProps {
+ in?: boolean
+ timeout?: number
+ classNames?: string
+ nodeRef?: React.RefObject
+ mountOnEnter?: boolean
+ unmountOnExit?: boolean
+ onEntered?: () => void
+ onExited?: () => void
+ children: React.ReactElement
+}
+
+const ConfigurableCSSTransition: React.FC = (props) => {
+ const {
+ in: inPhase,
+ timeout = 300,
+ classNames: baseClassName = '',
+ nodeRef,
+ mountOnEnter,
+ unmountOnExit,
+ onEntered,
+ onExited,
+ children,
+ } = props
+
+ const [status, setStatus] = useState(() => {
+ if (inPhase) return 'entered'
+ return unmountOnExit || mountOnEnter ? 'unmounted' : 'exited'
+ })
+
+ const [classes, setClasses] = useState(() => {
+ if (inPhase) return `${baseClassName}-enter-done`
+ return `${baseClassName}-exit-done`
+ })
+
+ const timerRef = useRef(null)
+ const statusRef = useRef(status)
+ const prevInPhase = useRef(inPhase)
+
+ const updateStatus = useCallback((nextStatus: TransitionStatus) => {
+ statusRef.current = nextStatus
+ setStatus(nextStatus)
+ }, [])
+
+ const enter = useCallback(() => {
+ if (timerRef.current) clearTimeout(timerRef.current)
+
+ if (statusRef.current === 'unmounted') {
+ updateStatus('exited')
+ }
+
+ updateStatus('entering')
+ setClasses(`${baseClassName}-enter ${baseClassName}-enter-active`)
+
+ timerRef.current = setTimeout(() => {
+ updateStatus('entered')
+ setClasses(`${baseClassName}-enter-done`)
+ onEntered?.()
+ }, timeout)
+ }, [baseClassName, onEntered, timeout, updateStatus])
+
+ const exit = useCallback(() => {
+ if (timerRef.current) clearTimeout(timerRef.current)
+
+ updateStatus('exiting')
+ setClasses(`${baseClassName}-exit ${baseClassName}-exit-active`)
+
+ timerRef.current = setTimeout(() => {
+ updateStatus('exited')
+ setClasses(`${baseClassName}-exit-done`)
+ if (unmountOnExit) {
+ updateStatus('unmounted')
+ }
+ onExited?.()
+ }, timeout)
+ }, [baseClassName, onExited, timeout, unmountOnExit, updateStatus])
+
+ useEffect(() => {
+ if (prevInPhase.current !== inPhase) {
+ if (inPhase) {
+ enter()
+ } else {
+ exit()
+ }
+ prevInPhase.current = inPhase
+ }
+
+ return () => {
+ if (timerRef.current) clearTimeout(timerRef.current)
+ }
+ }, [inPhase, enter, exit])
+
+ if (status === 'unmounted') return null
+
+ return cloneElement(children, {
+ className: `${children.props.className || ''} ${classes}`,
+ })
+}
+
+export default ConfigurableCSSTransition
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]) => {