@arcblock/ux 2.10.65 → 2.10.67

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. package/lib/ActionButton/index.d.ts +1 -1
  2. package/lib/Alert/index.d.ts +1 -1
  3. package/lib/AnimationWaiter/index.d.ts +27 -15
  4. package/lib/AnimationWaiter/index.js +15 -14
  5. package/lib/Async/index.d.ts +50 -17
  6. package/lib/Badge/index.d.ts +1 -1
  7. package/lib/Badge/index.js +7 -1
  8. package/lib/BlockletContext/index.d.ts +12 -28
  9. package/lib/BlockletContext/index.js +3 -21
  10. package/lib/Button/wrap.d.ts +5 -3
  11. package/lib/Button/wrap.js +2 -1
  12. package/lib/ButtonGroup/index.d.ts +12 -2
  13. package/lib/ButtonGroup/index.js +13 -3
  14. package/lib/CardSelector/index.d.ts +11 -33
  15. package/lib/CardSelector/index.js +16 -32
  16. package/lib/Center/index.d.ts +6 -21
  17. package/lib/Center/index.js +2 -17
  18. package/lib/ClickToCopy/copy-button.d.ts +9 -26
  19. package/lib/ClickToCopy/copy-button.js +5 -17
  20. package/lib/ClickToCopy/hook.d.ts +11 -5
  21. package/lib/ClickToCopy/hook.js +3 -3
  22. package/lib/ClickToCopy/index.d.ts +18 -29
  23. package/lib/ClickToCopy/index.js +0 -13
  24. package/lib/CodeBlock/LightBox.d.ts +1 -1
  25. package/lib/CodeBlock/index.d.ts +7 -26
  26. package/lib/CodeBlock/index.js +4 -17
  27. package/lib/Colors/index.d.ts +2 -2
  28. package/lib/Colors/themes/default.d.ts +54 -61
  29. package/lib/Colors/themes/temp.d.ts +35 -35
  30. package/lib/ContactForm/index.d.ts +26 -30
  31. package/lib/ContactForm/index.js +7 -17
  32. package/lib/Dialog/confirm.d.ts +3 -3
  33. package/lib/Dialog/confirm.js +2 -2
  34. package/lib/Earth/index.d.ts +10 -1
  35. package/lib/Header/auto-hidden.d.ts +6 -11
  36. package/lib/Header/auto-hidden.js +0 -5
  37. package/lib/Header/header.d.ts +20 -51
  38. package/lib/Header/header.js +10 -42
  39. package/lib/Header/index.d.ts +2 -2
  40. package/lib/Header/responsive-header.d.ts +10 -22
  41. package/lib/Header/responsive-header.js +1 -13
  42. package/lib/Icon/image.d.ts +8 -36
  43. package/lib/Icon/image.js +6 -24
  44. package/lib/Icon/index.d.ts +9 -1
  45. package/lib/Icon/index.js +6 -25
  46. package/lib/NavMenu/index.d.ts +1 -1
  47. package/lib/NavMenu/nav-menu.d.ts +37 -51
  48. package/lib/NavMenu/nav-menu.js +47 -102
  49. package/lib/NavMenu/style.d.ts +8 -2
  50. package/lib/NavMenu/style.js +3 -1
  51. package/lib/PageScroller/index.d.ts +13 -1
  52. package/lib/Passport/passport.js +1 -1
  53. package/lib/PricingTable/index.d.ts +3 -1
  54. package/lib/RelativeTime/index.d.ts +1 -1
  55. package/lib/Screenshot/BaseScreenshot/index.js +1 -1
  56. package/lib/SplitButton/index.d.ts +0 -19
  57. package/lib/SplitButton/index.js +7 -27
  58. package/lib/TextCollapse/index.d.ts +10 -1
  59. package/lib/Theme/index.d.ts +5 -13
  60. package/lib/Theme/index.js +4 -11
  61. package/lib/Theme/theme-provider.d.ts +16 -18
  62. package/lib/Theme/theme.d.ts +37 -11
  63. package/lib/Theme/theme.js +13 -22
  64. package/lib/Util/constant.d.ts +31 -31
  65. package/lib/Util/deprecate.d.ts +7 -5
  66. package/lib/Util/federated.d.ts +21 -21
  67. package/lib/Util/federated.js +1 -1
  68. package/lib/Util/index.d.ts +59 -60
  69. package/lib/Util/index.js +16 -43
  70. package/lib/Util/passport.d.ts +6 -6
  71. package/lib/Util/wallet.d.ts +15 -3
  72. package/lib/WebWalletSWKeeper/index.js +1 -1
  73. package/lib/global.d.ts +13 -0
  74. package/lib/index.d.ts +4 -2
  75. package/lib/index.js +2 -2
  76. package/lib/type.d.ts +31 -1
  77. package/package.json +5 -5
  78. package/src/AnimationWaiter/index.jsx +15 -14
  79. package/src/Async/{index.jsx → index.tsx} +13 -4
  80. package/src/Badge/index.jsx +8 -1
  81. package/src/BlockletContext/{index.jsx → index.tsx} +17 -22
  82. package/src/Button/wrap.jsx +2 -1
  83. package/src/ButtonGroup/index.js +13 -3
  84. package/src/CardSelector/{index.jsx → index.tsx} +32 -33
  85. package/src/Center/index.tsx +33 -0
  86. package/src/ClickToCopy/{copy-button.jsx → copy-button.tsx} +15 -16
  87. package/src/ClickToCopy/{hook.js → hook.ts} +5 -5
  88. package/src/ClickToCopy/{index.jsx → index.tsx} +12 -17
  89. package/src/CodeBlock/{index.jsx → index.tsx} +15 -17
  90. package/src/ContactForm/{index.jsx → index.tsx} +47 -29
  91. package/src/Dialog/confirm.jsx +2 -2
  92. package/src/Header/{auto-hidden.jsx → auto-hidden.tsx} +6 -7
  93. package/src/Header/{header.jsx → header.tsx} +32 -46
  94. package/src/Header/{responsive-header.jsx → responsive-header.tsx} +9 -15
  95. package/src/Icon/{image.jsx → image.tsx} +19 -22
  96. package/src/Icon/{index.jsx → index.tsx} +22 -24
  97. package/src/NavMenu/{nav-menu.jsx → nav-menu.tsx} +161 -144
  98. package/src/NavMenu/{style.js → style.ts} +9 -1
  99. package/src/Passport/passport.jsx +1 -1
  100. package/src/Screenshot/BaseScreenshot/index.jsx +1 -1
  101. package/src/SplitButton/index.tsx +10 -23
  102. package/src/Theme/{index.js → index.ts} +6 -12
  103. package/src/Theme/{theme-provider.jsx → theme-provider.tsx} +10 -2
  104. package/src/Theme/{theme.js → theme.ts} +54 -23
  105. package/src/Util/{deprecate.jsx → deprecate.tsx} +8 -4
  106. package/src/Util/{federated.js → federated.ts} +3 -3
  107. package/src/Util/{index.js → index.ts} +85 -59
  108. package/src/Util/{passport.js → passport.ts} +2 -2
  109. package/src/Util/{wallet.js → wallet.ts} +1 -1
  110. package/src/WebWalletSWKeeper/index.jsx +1 -1
  111. package/src/global.d.ts +13 -0
  112. package/src/{index.js → index.ts} +2 -2
  113. package/src/type.d.ts +31 -1
  114. package/src/Center/index.jsx +0 -41
  115. /package/src/CodeBlock/{LightBox.jsx → LightBox.tsx} +0 -0
  116. /package/src/Colors/{index.js → index.ts} +0 -0
  117. /package/src/Colors/themes/{default.js → default.ts} +0 -0
  118. /package/src/Colors/themes/{temp.js → temp.ts} +0 -0
  119. /package/src/Header/{index.js → index.ts} +0 -0
  120. /package/src/NavMenu/{index.js → index.ts} +0 -0
  121. /package/src/Util/{constant.js → constant.ts} +0 -0
@@ -10,9 +10,9 @@ import Dialog from './dialog';
10
10
  * @typedef {{
11
11
  * title: React.ReactNode,
12
12
  * open: boolean,
13
- * children: React.ReactNode,
14
13
  * onConfirm: Function,
15
14
  * onCancel: Function,
15
+ * children?: React.ReactNode,
16
16
  * showCancelButton?: boolean,
17
17
  * showCloseButton?: boolean,
18
18
  * fullScreen?: boolean,
@@ -113,9 +113,9 @@ export default function Confirm({
113
113
  Confirm.propTypes = {
114
114
  title: PropTypes.node.isRequired,
115
115
  open: PropTypes.bool.isRequired,
116
- children: PropTypes.node.isRequired,
117
116
  onConfirm: PropTypes.func.isRequired,
118
117
  onCancel: PropTypes.func.isRequired,
118
+ children: PropTypes.node,
119
119
  showCancelButton: PropTypes.bool,
120
120
  showCloseButton: PropTypes.bool,
121
121
  fullScreen: PropTypes.bool,
@@ -1,19 +1,18 @@
1
- import PropTypes from 'prop-types';
2
- import Box from '@mui/material/Box';
1
+ import Box, { type BoxProps } from '@mui/material/Box';
3
2
 
4
3
  import { styled } from '../Theme';
5
4
 
5
+ export interface AutoHiddenProps extends BoxProps {
6
+ height: number | string;
7
+ }
8
+
6
9
  /**
7
10
  * 一个容器组件, 当子元素 width 超出该容器时自动隐藏子元素, 必须设置明确的 height 值
8
11
  */
9
- function AutoHidden({ height, ...rest }) {
12
+ function AutoHidden({ height, ...rest }: AutoHiddenProps) {
10
13
  return <Root height={height} {...rest} />;
11
14
  }
12
15
 
13
- AutoHidden.propTypes = {
14
- height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
15
- };
16
-
17
16
  const Root = styled(Box)`
18
17
  overflow: hidden;
19
18
  &:before {
@@ -1,34 +1,52 @@
1
- import PropTypes from 'prop-types';
2
- import { Box, Container } from '@mui/material';
1
+ import { Box, Container, type Breakpoint } from '@mui/material';
3
2
  import { useRef, useState, useEffect } from 'react';
4
3
  import AutoHidden from './auto-hidden';
5
4
  import { styled } from '../Theme';
6
5
 
6
+ export interface HeaderProps extends React.HTMLAttributes<HTMLDivElement> {
7
+ /** logo img/svg, 可以包裹一个 a 标签 */
8
+ logo?: React.ReactNode;
9
+ /** 相当于 Title, 可以包裹一个 a 标签 */
10
+ brand?: React.ReactNode;
11
+ /** brand 右侧的内容区域, 可显示一个 badge 或 tag */
12
+ brandAddon?: React.ReactNode;
13
+ /** brand 下方的描述 */
14
+ description?: React.ReactNode;
15
+ /** 右侧区域, 可以放置 icons/actions/login 等 */
16
+ addons?: React.ReactNode;
17
+ /** logo 左侧内容 */
18
+ prepend?: React.ReactNode;
19
+ align?: 'left' | 'right';
20
+ maxWidth?: Breakpoint | false;
21
+ // eslint-disable-next-line no-unused-vars
22
+ homeLink?: string | ((brandContent: React.ReactNode) => React.ReactNode);
23
+ }
24
+
7
25
  /**
8
26
  * Header 组件
9
27
  * TODO: Layout/dashboard 可以复用此处的 header
10
28
  */
11
29
  function Header({
12
- logo,
13
- brand,
14
- brandAddon,
15
- description,
16
- children,
17
- addons,
18
- prepend,
19
- align,
30
+ logo = null,
31
+ brand = null,
32
+ brandAddon = null,
33
+ description = null,
34
+ children = null,
35
+ addons = null,
36
+ prepend = null,
37
+ align = 'left',
20
38
  maxWidth,
21
- homeLink,
39
+ homeLink = '/',
22
40
  ...rest
23
- }) {
24
- const logoRef = useRef();
41
+ }: HeaderProps) {
42
+ const logoRef = useRef<HTMLDivElement>(null);
25
43
  const [brandWrapperMinWidth, setBrandWrapperMinWidth] = useState('0px');
26
44
  const style = { minWidth: brandWrapperMinWidth };
27
45
 
28
46
  useEffect(() => {
29
47
  const { searchParams } = new URL(window.location.href);
30
48
  if (searchParams.get('inviter')) {
31
- window.localStorage.setItem('inviter', searchParams.get('inviter'));
49
+ window.localStorage.setItem('inviter', searchParams.get('inviter')!);
32
50
  }
33
51
 
34
52
  if (logoRef.current) {
@@ -78,38 +96,6 @@ function Header({
78
96
  );
79
97
  }
80
98
 
81
- Header.propTypes = {
82
- // logo img/svg, 可以包裹一个 a 标签
83
- logo: PropTypes.node,
84
- // 相当于 Title, 可以包裹一个 a 标签
85
- brand: PropTypes.node,
86
- // brand 右侧的内容区域, 可显示一个 badge 或 tag
87
- brandAddon: PropTypes.node,
88
- // brand 下方的描述
89
- description: PropTypes.node,
90
- children: PropTypes.node,
91
- // 右侧区域, 可以放置 icons/actions/login 等
92
- addons: PropTypes.node,
93
- // logo 左侧内容
94
- prepend: PropTypes.node,
95
- align: PropTypes.oneOf(['left', 'right']),
96
- maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false])]),
97
- homeLink: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
98
- };
99
-
100
- Header.defaultProps = {
101
- logo: null,
102
- brand: null,
103
- brandAddon: null,
104
- description: null,
105
- children: null,
106
- addons: null,
107
- prepend: null,
108
- align: 'left',
109
- maxWidth: undefined,
110
- homeLink: '/',
111
- };
112
-
113
99
  const Root = styled(Box)`
114
100
  position: relative;
115
101
  z-index: ${(props) => props.theme.zIndex.appBar};
@@ -1,5 +1,4 @@
1
1
  import { useState } from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { useCreation, useReactive } from 'ahooks';
4
3
  import MenuIcon from '@mui/icons-material/Menu';
5
4
  import CloseIcon from '@mui/icons-material/Close';
@@ -9,6 +8,13 @@ import useMediaQuery from '@mui/material/useMediaQuery';
9
8
  import Drawer from '@mui/material/Drawer';
10
9
  import Header from './header';
11
10
  import { styled, useTheme } from '../Theme';
11
+ import { type HeaderProps } from './header';
12
+
13
+ export interface ResponsiveHeaderProps extends Omit<HeaderProps, 'children'> {
14
+ menu?: React.ReactNode;
15
+ // eslint-disable-next-line no-unused-vars
16
+ children?: React.ReactNode | ((props: { isMobile: boolean; closeMenu: () => void }) => React.ReactNode);
17
+ }
12
18
 
13
19
  /**
14
20
  * ResponsiveHeader
@@ -17,7 +23,7 @@ import { styled, useTheme } from '../Theme';
17
23
  *
18
24
  * 注意: 暂时不要通过 display: none 隐藏 logo, https://blog.patw.me/archives/1820/inline-svg-same-id-and-display-none-issue/
19
25
  */
20
- function ResponsiveHeader({ menu, prepend, children, ...rest }) {
26
+ function ResponsiveHeader({ menu, prepend, children, ...rest }: ResponsiveHeaderProps) {
21
27
  const theme = useTheme();
22
28
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
23
29
  const [drawerOpen, setDrawerOpen] = useState(false);
@@ -85,7 +91,7 @@ function ResponsiveHeader({ menu, prepend, children, ...rest }) {
85
91
  ModalProps={{
86
92
  disablePortal: false,
87
93
  keepMounted: true,
88
- BackdropComponent: null,
94
+ BackdropComponent: undefined,
89
95
  }}
90
96
  anchor="top"
91
97
  sx={{
@@ -106,18 +112,6 @@ function ResponsiveHeader({ menu, prepend, children, ...rest }) {
106
112
  );
107
113
  }
108
114
 
109
- ResponsiveHeader.propTypes = {
110
- ...Header.PropTypes,
111
- // 如果是 function, 则
112
- // - 会传入一个 isMobile 参数, isMobile 为 true 时, 表示 children 会显示在 menu 中, 可以根据 isMobile 参数调整要渲染的内容, 比如如果 isMobile 为 true 则使用 inline 模式的 NavMenu (适用于移动端)
113
- // - 会传入一个 closeMenu 参数, 可以关闭 menu
114
- children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
115
- };
116
-
117
- ResponsiveHeader.defaultProps = {
118
- ...Header.defaultProps,
119
- };
120
-
121
115
  const Root = styled(Header)`
122
116
  .header-menu {
123
117
  display: none;
@@ -1,9 +1,25 @@
1
- import PropTypes from 'prop-types';
2
-
3
1
  import Img from '../Img';
4
2
  import { styled } from '../Theme';
5
3
 
6
- export default function ImageIcon({ name, size, alt, color, style, prefix, showBadge, ...rest }) {
4
+ export interface ImageIconProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ name: string;
6
+ size?: number;
7
+ color?: string;
8
+ alt?: string;
9
+ prefix?: string;
10
+ showBadge?: boolean;
11
+ }
12
+
13
+ export default function ImageIcon({
14
+ name,
15
+ size = 36,
16
+ alt = '',
17
+ color = '#000000',
18
+ prefix = '/images',
19
+ showBadge = false,
20
+ style = {},
21
+ ...rest
22
+ }: ImageIconProps) {
7
23
  const src = `${prefix}/${name}-${color.replace(/^#/, '')}.png`;
8
24
  return (
9
25
  <Div style={{ width: size, height: size }}>
@@ -20,25 +36,6 @@ export default function ImageIcon({ name, size, alt, color, style, prefix, showB
20
36
  );
21
37
  }
22
38
 
23
- ImageIcon.propTypes = {
24
- name: PropTypes.string.isRequired,
25
- size: PropTypes.number,
26
- color: PropTypes.string,
27
- alt: PropTypes.string,
28
- style: PropTypes.object,
29
- prefix: PropTypes.string,
30
- showBadge: PropTypes.bool,
31
- };
32
-
33
- ImageIcon.defaultProps = {
34
- size: 36,
35
- color: '#000000',
36
- alt: '',
37
- style: {},
38
- prefix: '/images',
39
- showBadge: false,
40
- };
41
-
42
39
  const Div = styled('div')`
43
40
  position: relative;
44
41
  .badge-point {
@@ -1,6 +1,4 @@
1
1
  import { forwardRef } from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
2
  import colors from '../Colors';
5
3
  import { styled } from '../Theme';
6
4
  import { withDeprecated } from '../Util/deprecate';
@@ -11,8 +9,27 @@ const variants = {
11
9
  solid: 'fas',
12
10
  };
13
11
 
12
+ export interface IconProps extends React.HTMLAttributes<HTMLElement> {
13
+ name: string;
14
+ color?: string;
15
+ size?: number;
16
+ variant?: 'light' | 'regular' | 'solid';
17
+ rounded?: boolean;
18
+ forwardedRef?: React.ForwardedRef<HTMLElement>;
19
+ }
20
+
14
21
  // eslint-disable-next-line react/prop-types
15
- function Icon({ name, color, size, variant, rounded, style, className, forwardedRef, ...rest }) {
22
+ function Icon({
23
+ name,
24
+ color = colors.grey[900],
25
+ size = 24,
26
+ variant = 'light',
27
+ rounded = false,
28
+ style = {},
29
+ className = '',
30
+ forwardedRef,
31
+ ...rest
32
+ }: IconProps) {
16
33
  const content = (
17
34
  <i
18
35
  ref={forwardedRef}
@@ -32,26 +49,7 @@ function Icon({ name, color, size, variant, rounded, style, className, forwarded
32
49
  return content;
33
50
  }
34
51
 
35
- Icon.propTypes = {
36
- name: PropTypes.string.isRequired,
37
- className: PropTypes.string,
38
- color: PropTypes.string,
39
- rounded: PropTypes.bool,
40
- variant: PropTypes.string,
41
- size: PropTypes.number,
42
- style: PropTypes.object,
43
- };
44
-
45
- Icon.defaultProps = {
46
- rounded: false,
47
- variant: 'light',
48
- color: colors.grey[900],
49
- className: '',
50
- size: 24,
51
- style: {},
52
- };
53
-
54
- const Span = styled('span')`
52
+ const Span = styled('span')<{ size: number; color: string }>`
55
53
  width: ${(props) => props.size * 2}px;
56
54
  height: ${(props) => props.size * 2}px;
57
55
  border-radius: 50%;
@@ -69,6 +67,6 @@ const Span = styled('span')`
69
67
  `;
70
68
 
71
69
  export default withDeprecated(
72
- forwardRef((props, ref) => <Icon {...props} forwardedRef={ref} />),
70
+ forwardRef<HTMLElement, IconProps>((props, ref) => <Icon {...props} forwardedRef={ref} />),
73
71
  { name: 'Icon', alternative: 'SVG icons' }
74
72
  );