@arcblock/ux 2.10.39 → 2.10.40

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- export interface IBlockletStore extends Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, 'title' | 'className'> {
2
+ import { CardProps } from '@mui/material';
3
+ export interface IBlockletStore extends CardProps {
3
4
  did?: string;
4
5
  title: string;
5
6
  description?: string;
@@ -61,15 +61,16 @@ export default function BlockletStore(props) {
61
61
  };
62
62
  return /*#__PURE__*/_jsxs(Card, {
63
63
  variant: "outlined",
64
+ onClick: handleMainClick,
65
+ ...rest,
64
66
  sx: {
65
67
  p: {
66
68
  xs: 2,
67
69
  md: 3
68
70
  },
69
- borderRadius: 2
71
+ borderRadius: 2,
72
+ ...rest.sx
70
73
  },
71
- onClick: handleMainClick,
72
- ...rest,
73
74
  children: [/*#__PURE__*/_jsxs(Stack, {
74
75
  flex: 1,
75
76
  direction: "row",
@@ -79,13 +80,13 @@ export default function BlockletStore(props) {
79
80
  children: [/*#__PURE__*/_jsx(Avatar, {
80
81
  src: cover,
81
82
  did: did,
82
- size: 40,
83
+ size: 48,
83
84
  variant: "rounded"
84
85
  }), /*#__PURE__*/_jsx(Typography, {
85
86
  flex: 1,
87
+ fontWeight: "typography.fontWeightMedium",
86
88
  sx: {
87
89
  fontSize: 16,
88
- fontWeight: 500,
89
90
  textOverflow: 'ellipsis',
90
91
  whiteSpace: 'nowrap',
91
92
  overflow: 'hidden'
@@ -100,7 +101,7 @@ export default function BlockletStore(props) {
100
101
  borderColor: theme.palette.grey[300],
101
102
  borderRadius: 8,
102
103
  fontSize: 13,
103
- fontWeight: 'typography.fontWeightMedium'
104
+ fontWeight: theme.typography.fontWeightMedium
104
105
  },
105
106
  onClick: handleButtonClick,
106
107
  children: [buttonLoading && /*#__PURE__*/_jsx(CircularProgress, {
@@ -1,39 +1,23 @@
1
- export function LocaleProvider({ children, locale, fallbackLocale, translations, onLoadingTranslation, languages, ...rest }: {
2
- [x: string]: any;
3
- children: any;
4
- locale: any;
5
- fallbackLocale: any;
6
- translations: any;
7
- onLoadingTranslation: any;
8
- languages: any;
9
- }): import("react/jsx-runtime").JSX.Element;
10
- export namespace LocaleProvider {
11
- namespace propTypes {
12
- let children: PropTypes.Validator<any>;
13
- let translations: PropTypes.Validator<object>;
14
- let onLoadingTranslation: PropTypes.Requireable<(...args: any[]) => any>;
15
- let locale: PropTypes.Requireable<string>;
16
- let fallbackLocale: PropTypes.Requireable<string>;
17
- let languages: PropTypes.Requireable<(PropTypes.InferProps<{
18
- code: PropTypes.Requireable<string>;
19
- name: PropTypes.Requireable<string>;
20
- }> | null | undefined)[]>;
21
- }
22
- namespace defaultProps {
23
- let locale_1: string;
24
- export { locale_1 as locale };
25
- let fallbackLocale_1: string;
26
- export { fallbackLocale_1 as fallbackLocale };
27
- let languages_1: never[];
28
- export { languages_1 as languages };
29
- export function onLoadingTranslation_1(): void;
30
- export { onLoadingTranslation_1 as onLoadingTranslation };
31
- }
1
+ import React, { ReactNode } from 'react';
2
+ declare const getLocale: (languages?: {
3
+ code: string;
4
+ }[]) => string;
5
+ declare const setLocale: (locale: string) => void;
6
+ interface LocaleProviderProps {
7
+ children: ReactNode;
8
+ locale?: string;
9
+ fallbackLocale?: string;
10
+ translations: Record<string, any>;
11
+ onLoadingTranslation?: (locale: string, languages: {
12
+ code: string;
13
+ }[]) => void;
14
+ languages?: {
15
+ code: string;
16
+ name: string;
17
+ }[];
32
18
  }
33
- declare const Consumer: import("react").Consumer<any>;
34
- export const LocaleContext: import("react").Context<any>;
35
- export function useLocaleContext(): any;
36
- export function setLocale(locale: any): void;
37
- export function getLocale(languages?: any[]): any;
38
- import PropTypes from 'prop-types';
39
- export { Consumer as LocaleConsumer };
19
+ declare const LocaleContext: React.Context<any>;
20
+ declare const Consumer: React.Consumer<any>;
21
+ declare function LocaleProvider({ children, locale, fallbackLocale, translations, onLoadingTranslation, languages, ...rest }: LocaleProviderProps): import("react/jsx-runtime").JSX.Element;
22
+ declare function useLocaleContext(): any;
23
+ export { LocaleProvider, Consumer as LocaleConsumer, LocaleContext, useLocaleContext, setLocale, getLocale };
@@ -1,8 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /* eslint-disable no-prototype-builtins */
3
- import { createContext, useState, useEffect, useContext, useRef, useCallback } from 'react';
3
+ import React, { createContext, useState, useEffect, useContext, useRef, useCallback } from 'react';
4
4
  import get from 'lodash/get';
5
- import PropTypes from 'prop-types';
6
5
  import Cookie from 'js-cookie';
7
6
  import browserLang from './browser-lang';
8
7
  import { translate } from './util';
@@ -53,7 +52,7 @@ const getLanguages = arg => {
53
52
  name: '简体中文'
54
53
  }];
55
54
  };
56
- const LocaleContext = /*#__PURE__*/createContext();
55
+ const LocaleContext = /*#__PURE__*/createContext(null);
57
56
  const {
58
57
  Provider,
59
58
  Consumer
@@ -64,13 +63,13 @@ function LocaleProvider({
64
63
  fallbackLocale,
65
64
  translations,
66
65
  onLoadingTranslation,
67
- languages,
66
+ languages = [],
68
67
  ...rest
69
68
  }) {
70
69
  const langs = getLanguages(languages);
71
70
  // eslint-disable-next-line prefer-const
72
71
  let [currentLocale, setCurrentLocale] = useState(locale || getLocale(langs));
73
- const lastCurrentLocale = useRef(fallbackLocale);
72
+ const lastCurrentLocale = useRef(fallbackLocale || '');
74
73
  const [, setForceUpdate] = useState(0);
75
74
  const changeLocale = newLocale => {
76
75
  setCurrentLocale(newLocale);
@@ -97,7 +96,7 @@ function LocaleProvider({
97
96
  } catch (err) {
98
97
  console.error(err);
99
98
  }
100
- onLoadingTranslation(tmpLocale, langs);
99
+ onLoadingTranslation?.(tmpLocale, langs);
101
100
  currentLocale = lastCurrentLocale.current;
102
101
  } else {
103
102
  lastCurrentLocale.current = currentLocale;
@@ -118,22 +117,4 @@ function useLocaleContext() {
118
117
  const context = useContext(LocaleContext);
119
118
  return context;
120
119
  }
121
- LocaleProvider.propTypes = {
122
- children: PropTypes.any.isRequired,
123
- translations: PropTypes.object.isRequired,
124
- onLoadingTranslation: PropTypes.func,
125
- locale: PropTypes.string,
126
- // 会影响 translate(key) 的结果 - 当 key 无效时查找 fallbackLocale 对应的翻译结果
127
- fallbackLocale: PropTypes.string,
128
- languages: PropTypes.arrayOf(PropTypes.shape({
129
- code: PropTypes.string,
130
- name: PropTypes.string
131
- }))
132
- };
133
- LocaleProvider.defaultProps = {
134
- locale: '',
135
- fallbackLocale: '',
136
- languages: [],
137
- onLoadingTranslation: () => {}
138
- };
139
120
  export { LocaleProvider, Consumer as LocaleConsumer, LocaleContext, useLocaleContext, setLocale, getLocale };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.10.39",
3
+ "version": "2.10.40",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -64,12 +64,12 @@
64
64
  "react": ">=18.2.0",
65
65
  "react-router-dom": ">=6.22.3"
66
66
  },
67
- "gitHead": "e9b7ea36bde7edec3bad5db838b9bfc3c03012a4",
67
+ "gitHead": "cad80dfa31fd28039f02bc14379a19a254a36000",
68
68
  "dependencies": {
69
69
  "@arcblock/did-motif": "^1.1.13",
70
- "@arcblock/icons": "^2.10.39",
71
- "@arcblock/nft-display": "^2.10.39",
72
- "@arcblock/react-hooks": "^2.10.39",
70
+ "@arcblock/icons": "^2.10.40",
71
+ "@arcblock/nft-display": "^2.10.40",
72
+ "@arcblock/react-hooks": "^2.10.40",
73
73
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
74
74
  "@fontsource/inter": "^5.0.16",
75
75
  "@fontsource/ubuntu-mono": "^5.0.18",
@@ -2,15 +2,14 @@ import React, { isValidElement } from 'react';
2
2
 
3
3
  import Download from '@iconify-icons/tabler/cloud-download';
4
4
  import { Icon } from '@iconify/react';
5
- import { Card, CircularProgress, Stack, Typography } from '@mui/material';
5
+ import { Card, CardProps, CircularProgress, Stack, Typography } from '@mui/material';
6
6
  import Avatar from '../Avatar';
7
7
  import Button from '../Button';
8
8
  import { useTheme } from '../Theme';
9
9
  import IconText from './components/icon-text';
10
10
  import { formatDownloadCount, strippedString } from './utils';
11
11
 
12
- export interface IBlockletStore
13
- extends Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, 'title' | 'className'> {
12
+ export interface IBlockletStore extends CardProps {
14
13
  did?: string;
15
14
  title: string;
16
15
  description?: string;
@@ -79,20 +78,15 @@ export default function BlockletStore(props: IBlockletStore) {
79
78
  return (
80
79
  <Card
81
80
  variant="outlined"
82
- sx={{
83
- p: {
84
- xs: 2,
85
- md: 3,
86
- },
87
- borderRadius: 2,
88
- }}
89
81
  onClick={handleMainClick}
90
- {...rest}>
82
+ {...rest}
83
+ sx={{ p: { xs: 2, md: 3 }, borderRadius: 2, ...rest.sx }}>
91
84
  <Stack flex={1} direction="row" gap={2} alignItems="center" overflow="hidden">
92
- <Avatar src={cover} did={did} size={40} variant="rounded" />
85
+ <Avatar src={cover} did={did} size={48} variant="rounded" />
93
86
  <Typography
94
87
  flex={1}
95
- sx={{ fontSize: 16, fontWeight: 500, textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' }}
88
+ fontWeight="typography.fontWeightMedium"
89
+ sx={{ fontSize: 16, textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' }}
96
90
  {...titleProps}
97
91
  />
98
92
  {button ||
@@ -106,7 +100,7 @@ export default function BlockletStore(props: IBlockletStore) {
106
100
  borderColor: theme.palette.grey[300],
107
101
  borderRadius: 8,
108
102
  fontSize: 13,
109
- fontWeight: 'typography.fontWeightMedium',
103
+ fontWeight: theme.typography.fontWeightMedium,
110
104
  }}
111
105
  onClick={handleButtonClick}>
112
106
  {buttonLoading && <CircularProgress size={15} style={{ marginRight: 3, color: 'inherit' }} />}
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable no-prototype-builtins */
2
- import { createContext, useState, useEffect, useContext, useRef, useCallback } from 'react';
2
+ import React, { createContext, useState, useEffect, useContext, useRef, useCallback, ReactNode } from 'react';
3
3
  import get from 'lodash/get';
4
- import PropTypes from 'prop-types';
5
4
  import Cookie from 'js-cookie';
6
5
 
7
6
  import browserLang from './browser-lang';
@@ -12,7 +11,10 @@ import { getCookieOptions } from '../Util';
12
11
  const cookieName = 'nf_lang';
13
12
 
14
13
  // 跨应用传递多语言选择的方式是在 query string 中添加 locale 参数,LocaleSelector 要高优先级遵守这个参数
15
- const getLocaleFromSearchParams = (languages, url = window.location.href) => {
14
+ const getLocaleFromSearchParams = (
15
+ languages: { code: string }[],
16
+ url: string = window.location.href
17
+ ): string | null => {
16
18
  const locale = new URL(url).searchParams.get('locale');
17
19
  if (languages.find((x) => x.code === locale)) {
18
20
  return locale;
@@ -20,7 +22,7 @@ const getLocaleFromSearchParams = (languages, url = window.location.href) => {
20
22
  return null;
21
23
  };
22
24
 
23
- const setLocaleParam = (locale, url = window.location.href) => {
25
+ const setLocaleParam = (locale: string, url: string = window.location.href) => {
24
26
  const urlObj = new URL(url);
25
27
  const hasLocaleParam = urlObj.searchParams.has('locale');
26
28
  if (hasLocaleParam) {
@@ -29,7 +31,7 @@ const setLocaleParam = (locale, url = window.location.href) => {
29
31
  }
30
32
  };
31
33
 
32
- const getLocale = (languages = []) => {
34
+ const getLocale = (languages: { code: string }[] = []): string => {
33
35
  const langParams = {
34
36
  languages: languages.map((item) => item.code),
35
37
  // 取 languages 首个元素的 code 值, 如果不存在则取 'en'
@@ -38,12 +40,12 @@ const getLocale = (languages = []) => {
38
40
  return getLocaleFromSearchParams(languages) || Cookie.get(cookieName) || browserLang(langParams);
39
41
  };
40
42
 
41
- const setLocale = (locale) => {
43
+ const setLocale = (locale: string) => {
42
44
  Cookie.set(cookieName, locale, getCookieOptions());
43
45
  setLocaleParam(locale);
44
46
  };
45
47
 
46
- const getLanguages = (arg) => {
48
+ const getLanguages = (arg?: { code: string; name: string }[]): { code: string; name: string }[] => {
47
49
  const env = get(window, 'blocklet.languages');
48
50
  if (Array.isArray(env) && env.length) {
49
51
  return env;
@@ -59,16 +61,35 @@ const getLanguages = (arg) => {
59
61
  ];
60
62
  };
61
63
 
62
- const LocaleContext = createContext();
64
+ interface LocaleProviderProps {
65
+ children: ReactNode;
66
+ locale?: string;
67
+ fallbackLocale?: string;
68
+ translations: Record<string, any>;
69
+ // eslint-disable-next-line no-unused-vars
70
+ onLoadingTranslation?: (locale: string, languages: { code: string }[]) => void;
71
+ languages?: { code: string; name: string }[];
72
+ }
73
+
74
+ const LocaleContext = createContext<any>(null);
63
75
  const { Provider, Consumer } = LocaleContext;
64
- function LocaleProvider({ children, locale, fallbackLocale, translations, onLoadingTranslation, languages, ...rest }) {
76
+
77
+ function LocaleProvider({
78
+ children,
79
+ locale,
80
+ fallbackLocale,
81
+ translations,
82
+ onLoadingTranslation,
83
+ languages = [],
84
+ ...rest
85
+ }: LocaleProviderProps) {
65
86
  const langs = getLanguages(languages);
66
87
  // eslint-disable-next-line prefer-const
67
- let [currentLocale, setCurrentLocale] = useState(locale || getLocale(langs));
68
- const lastCurrentLocale = useRef(fallbackLocale);
88
+ let [currentLocale, setCurrentLocale] = useState<string>(locale || getLocale(langs));
89
+ const lastCurrentLocale = useRef<string>(fallbackLocale || '');
69
90
  const [, setForceUpdate] = useState(0);
70
91
 
71
- const changeLocale = (newLocale) => {
92
+ const changeLocale = (newLocale: string) => {
72
93
  setCurrentLocale(newLocale);
73
94
  setLocale(newLocale);
74
95
  };
@@ -95,14 +116,14 @@ function LocaleProvider({ children, locale, fallbackLocale, translations, onLoad
95
116
  console.error(err);
96
117
  }
97
118
 
98
- onLoadingTranslation(tmpLocale, langs);
119
+ onLoadingTranslation?.(tmpLocale, langs);
99
120
  currentLocale = lastCurrentLocale.current;
100
121
  } else {
101
122
  lastCurrentLocale.current = currentLocale;
102
123
  }
103
124
 
104
125
  const t = useCallback(
105
- (key, data) => translate(translations, key, currentLocale, fallbackLocale, data),
126
+ (key: string, data?: any) => translate(translations, key, currentLocale, fallbackLocale, data),
106
127
  [translations, currentLocale, fallbackLocale]
107
128
  );
108
129
 
@@ -114,21 +135,4 @@ function useLocaleContext() {
114
135
  return context;
115
136
  }
116
137
 
117
- LocaleProvider.propTypes = {
118
- children: PropTypes.any.isRequired,
119
- translations: PropTypes.object.isRequired,
120
- onLoadingTranslation: PropTypes.func,
121
- locale: PropTypes.string,
122
- // 会影响 translate(key) 的结果 - 当 key 无效时查找 fallbackLocale 对应的翻译结果
123
- fallbackLocale: PropTypes.string,
124
- languages: PropTypes.arrayOf(PropTypes.shape({ code: PropTypes.string, name: PropTypes.string })),
125
- };
126
-
127
- LocaleProvider.defaultProps = {
128
- locale: '',
129
- fallbackLocale: '',
130
- languages: [],
131
- onLoadingTranslation: () => {},
132
- };
133
-
134
138
  export { LocaleProvider, Consumer as LocaleConsumer, LocaleContext, useLocaleContext, setLocale, getLocale };