@jetbrains/ring-ui 5.0.0-beta.3 → 5.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,7 +2,15 @@
2
2
 
3
3
  ### BREAKING CHANGES
4
4
  - The codebase has migrated to TypeScript
5
-
5
+ - `react-markdown` has been updated to v7, which affects the props of `Markdown` component. The most notable change is replacing `source` with `children`:
6
+ ```js
7
+ // before
8
+ <Markdown source="some markdown" />
9
+
10
+ // after
11
+ <Markdown>some markdown</Markdown>
12
+ ```
13
+ See `react-markdown`'s [changelog](https://github.com/remarkjs/react-markdown/blob/main/changelog.md#600---2021-04-15) for other changes
6
14
 
7
15
  ## [4.1.0]
8
16
 
@@ -1,16 +1,9 @@
1
1
  /// <reference types="react" />
2
- import PropTypes from 'prop-types';
3
- interface MarkdownCodeProps {
4
- language?: string | null | undefined;
5
- value?: string | null | undefined;
6
- inline?: boolean | undefined;
2
+ import { CodeProps } from 'react-markdown/lib/ast-to-react';
3
+ declare module 'react-markdown/lib/complex-types' {
4
+ interface ReactMarkdownProps {
5
+ language?: string;
6
+ }
7
7
  }
8
- declare const MarkdownCode: {
9
- ({ value, language, inline }: MarkdownCodeProps): JSX.Element;
10
- propTypes: {
11
- language: PropTypes.Requireable<string>;
12
- value: PropTypes.Requireable<string>;
13
- inline: PropTypes.Requireable<boolean>;
14
- };
15
- };
8
+ declare const MarkdownCode: ({ children, language, inline }: CodeProps) => JSX.Element;
16
9
  export default MarkdownCode;
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import Code from '../code/code';
4
- const MarkdownCode = ({ value, language, inline }) => (<Code language={language} code={value || ''} inline={inline}/>);
4
+ const MarkdownCode = ({ children, language, inline }) => (<Code language={language} code={children?.join('') || ''} inline={inline}/>);
5
5
  MarkdownCode.propTypes = {
6
6
  language: PropTypes.string,
7
- value: PropTypes.string,
7
+ children: PropTypes.array.isRequired,
8
8
  inline: PropTypes.bool
9
9
  };
10
10
  export default MarkdownCode;
@@ -1,15 +1,11 @@
1
- import { ReactNode } from 'react';
1
+ /// <reference types="react" />
2
2
  import PropTypes from 'prop-types';
3
- import { Levels } from '../heading/heading';
4
- export interface MarkdownHeadingProps {
5
- level?: Levels | undefined;
6
- children?: ReactNode;
7
- }
3
+ import { HeadingProps } from 'react-markdown/lib/ast-to-react';
8
4
  declare const MarkdownHeading: {
9
- ({ level, children }: MarkdownHeadingProps): JSX.Element;
5
+ ({ level, children }: HeadingProps): JSX.Element;
10
6
  propTypes: {
11
- level: PropTypes.Requireable<number>;
12
- children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
7
+ level: PropTypes.Validator<number>;
8
+ children: PropTypes.Validator<any[]>;
13
9
  };
14
10
  };
15
11
  export default MarkdownHeading;
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import Heading from '../heading/heading';
4
4
  const MarkdownHeading = ({ level, children }) => <Heading level={level}>{children}</Heading>;
5
5
  MarkdownHeading.propTypes = {
6
- level: PropTypes.number,
7
- children: PropTypes.node
6
+ level: PropTypes.number.isRequired,
7
+ children: PropTypes.array.isRequired
8
8
  };
9
9
  export default MarkdownHeading;
@@ -1,16 +1,12 @@
1
- import { ReactNode } from 'react';
1
+ /// <reference types="react" />
2
2
  import PropTypes from 'prop-types';
3
- export interface MarkdownLinkProps {
4
- href?: string | undefined;
5
- title?: string | undefined;
6
- children?: ReactNode;
7
- }
3
+ import { ReactMarkdownProps } from 'react-markdown/lib/complex-types';
8
4
  declare const MarkdownLink: {
9
- ({ href, title, children }: MarkdownLinkProps): JSX.Element;
5
+ ({ href, title, children }: JSX.IntrinsicElements['a'] & ReactMarkdownProps): JSX.Element;
10
6
  propTypes: {
11
7
  href: PropTypes.Requireable<string>;
12
8
  title: PropTypes.Requireable<string>;
13
- children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
9
+ children: PropTypes.Validator<any[]>;
14
10
  };
15
11
  };
16
12
  export default MarkdownLink;
@@ -5,6 +5,6 @@ const MarkdownLink = ({ href, title, children }) => <Link href={href} title={tit
5
5
  MarkdownLink.propTypes = {
6
6
  href: PropTypes.string,
7
7
  title: PropTypes.string,
8
- children: PropTypes.node
8
+ children: PropTypes.array.isRequired
9
9
  };
10
10
  export default MarkdownLink;
@@ -1,10 +1,9 @@
1
1
  import { PureComponent } from 'react';
2
- import { ReactMarkdownProps } from 'react-markdown';
2
+ import { Options } from 'react-markdown';
3
3
  export interface BaseMarkdownProps {
4
- source: string;
5
4
  inline?: boolean | null | undefined;
6
5
  }
7
- export declare type MarkdownProps = ReactMarkdownProps & BaseMarkdownProps;
6
+ export declare type MarkdownProps = Options & BaseMarkdownProps;
8
7
  /**
9
8
  * @name Markdown
10
9
  */
@@ -15,27 +15,30 @@ import styles from './markdown.css';
15
15
  */
16
16
  export default class Markdown extends PureComponent {
17
17
  render() {
18
- const { className, renderers, inline, source, plugins = [], ...restProps } = this.props;
18
+ const { className, components, inline, children, plugins = [], ...restProps } = this.props;
19
19
  const classes = classNames(className, {
20
20
  [styles.markdown]: !inline,
21
21
  [styles.inline]: inline
22
22
  });
23
- return (<ReactMarkdown className={classes} source={normalizeIndent(source)} plugins={[RemarkBreaks, RemarkGFM, ...plugins]} renderers={{
24
- link: Link,
25
- linkReference: Link,
23
+ return (<ReactMarkdown className={classes} plugins={[RemarkBreaks, RemarkGFM, ...plugins]} components={{
24
+ a: Link,
26
25
  code: Code,
27
- inlineCode: Code,
28
- heading: Heading,
29
- ...renderers
30
- }} {...restProps}/>);
26
+ h1: Heading,
27
+ h2: Heading,
28
+ h3: Heading,
29
+ h4: Heading,
30
+ h5: Heading,
31
+ h6: Heading,
32
+ ...components
33
+ }} {...restProps}>{normalizeIndent(children)}</ReactMarkdown>);
31
34
  }
32
35
  }
33
36
  Markdown.propTypes = {
34
37
  inline: PropTypes.bool,
35
- source: PropTypes.string,
38
+ children: PropTypes.string,
36
39
  className: PropTypes.string,
37
- renderers: PropTypes.object,
40
+ components: PropTypes.object,
38
41
  plugins: PropTypes.array
39
42
  };
40
- const md = trivialTemplateTag(source => <Markdown {...{ source }}/>);
43
+ const md = trivialTemplateTag(source => <Markdown>{source}</Markdown>);
41
44
  export { md };
@@ -9,7 +9,7 @@ const TabTitle = React.memo(function TabTitle({ selected, child, handleSelect =
9
9
  if (child == null || typeof child !== 'object' || child.type === CustomItem) {
10
10
  return child;
11
11
  }
12
- const { title, disabled, href, className, activeClassName, collapsedClassName, collapsedActiveClassName } = child.props;
12
+ const { title, titleProps, disabled, href, className, activeClassName, collapsedClassName, collapsedActiveClassName } = child.props;
13
13
  const titleClasses = classNames(styles.title, className, {
14
14
  [styles.selected]: selected,
15
15
  [styles.collapsed]: collapsed,
@@ -17,7 +17,7 @@ const TabTitle = React.memo(function TabTitle({ selected, child, handleSelect =
17
17
  [collapsedClassName ?? '']: collapsed,
18
18
  [collapsedActiveClassName ?? '']: collapsed && selected
19
19
  });
20
- return (<TabLink title={title} isSelected={selected} active href={href} innerClassName={titleClasses} className={titleClasses} disabled={disabled} onPlainLeftClick={handleSelect} tabIndex={tabIndex} collapsed={collapsed}/>);
20
+ return (<TabLink title={title} isSelected={selected} active href={href} innerClassName={titleClasses} className={titleClasses} disabled={disabled} onPlainLeftClick={handleSelect} tabIndex={tabIndex} collapsed={collapsed} {...titleProps}/>);
21
21
  });
22
22
  TabTitle.propTypes = {
23
23
  child: PropTypes.element,
@@ -30,13 +30,13 @@ class Tabs extends PureComponent {
30
30
  return child;
31
31
  }
32
32
  const { selected } = this.props;
33
- const { title, id, disabled, href, className, activeClassName } = child.props;
33
+ const { title, titleProps, id, disabled, href, className, activeClassName } = child.props;
34
34
  const key = id || String(i);
35
35
  const isSelected = key === selected;
36
36
  const titleClasses = classNames(styles.title, className, isSelected && activeClassName, {
37
37
  [styles.selected]: isSelected
38
38
  });
39
- return (<TabLink title={title} isSelected={isSelected} active key={key} href={href} innerClassName={titleClasses} className={titleClasses} disabled={disabled} onPlainLeftClick={this.handleSelect(key)}/>);
39
+ return (<TabLink title={title} isSelected={isSelected} active key={key} href={href} innerClassName={titleClasses} className={titleClasses} disabled={disabled} onPlainLeftClick={this.handleSelect(key)} {...titleProps}/>);
40
40
  };
41
41
  render() {
42
42
  const { className, children, selected, theme, autoCollapse, 'data-test': dataTest, ...restProps } = this.props;
@@ -1,7 +1,9 @@
1
1
  import { PureComponent, ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import { TabLinkProps } from './tab-link';
3
4
  export interface TabProps {
4
5
  title?: ReactNode | ((isSelected: boolean, collapsed: boolean | undefined) => ReactNode);
6
+ titleProps?: Partial<TabLinkProps>;
5
7
  id?: string | null | undefined;
6
8
  className?: string | null | undefined;
7
9
  children?: ReactNode;
@@ -57,7 +57,7 @@ export default class UserAgreement extends PureComponent {
57
57
  return (<Dialog label={translations.userAgreement} show={show} className={classNames(style.agreementDialog, className)} contentClassName={style.dialogContent} trapFocus autoFocusFirst={false} data-test="user-agreement">
58
58
  <Header>{translations.userAgreement}</Header>
59
59
  <Content fade onScrollToBottom={this.onScrollToBottom}>
60
- <Markdown source={text}/>
60
+ <Markdown>{text}</Markdown>
61
61
  </Content>
62
62
  {!preview && (<Panel>
63
63
  {onRemindLater && !scrolledDown && (<div className={style.suggestion}>{translations.scrollToAccept}</div>)}
@@ -1,16 +1,9 @@
1
1
  /// <reference types="react" />
2
- import PropTypes from 'prop-types';
3
- interface MarkdownCodeProps {
4
- language?: string | null | undefined;
5
- value?: string | null | undefined;
6
- inline?: boolean | undefined;
2
+ import { CodeProps } from 'react-markdown/lib/ast-to-react';
3
+ declare module 'react-markdown/lib/complex-types' {
4
+ interface ReactMarkdownProps {
5
+ language?: string;
6
+ }
7
7
  }
8
- declare const MarkdownCode: {
9
- ({ value, language, inline }: MarkdownCodeProps): JSX.Element;
10
- propTypes: {
11
- language: PropTypes.Requireable<string>;
12
- value: PropTypes.Requireable<string>;
13
- inline: PropTypes.Requireable<boolean>;
14
- };
15
- };
8
+ declare const MarkdownCode: ({ children, language, inline }: CodeProps) => JSX.Element;
16
9
  export default MarkdownCode;
@@ -10,20 +10,20 @@ import '../global/memoize.js';
10
10
 
11
11
  const MarkdownCode = _ref => {
12
12
  let {
13
- value,
13
+ children,
14
14
  language,
15
15
  inline
16
16
  } = _ref;
17
17
  return /*#__PURE__*/React.createElement(Code, {
18
18
  language: language,
19
- code: value || '',
19
+ code: (children === null || children === void 0 ? void 0 : children.join('')) || '',
20
20
  inline: inline
21
21
  });
22
22
  };
23
23
 
24
24
  MarkdownCode.propTypes = {
25
25
  language: PropTypes.string,
26
- value: PropTypes.string,
26
+ children: PropTypes.array.isRequired,
27
27
  inline: PropTypes.bool
28
28
  };
29
29
 
@@ -1,15 +1,11 @@
1
- import { ReactNode } from 'react';
1
+ /// <reference types="react" />
2
2
  import PropTypes from 'prop-types';
3
- import { Levels } from '../heading/heading';
4
- export interface MarkdownHeadingProps {
5
- level?: Levels | undefined;
6
- children?: ReactNode;
7
- }
3
+ import { HeadingProps } from 'react-markdown/lib/ast-to-react';
8
4
  declare const MarkdownHeading: {
9
- ({ level, children }: MarkdownHeadingProps): JSX.Element;
5
+ ({ level, children }: HeadingProps): JSX.Element;
10
6
  propTypes: {
11
- level: PropTypes.Requireable<number>;
12
- children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
7
+ level: PropTypes.Validator<number>;
8
+ children: PropTypes.Validator<any[]>;
13
9
  };
14
10
  };
15
11
  export default MarkdownHeading;
@@ -16,8 +16,8 @@ const MarkdownHeading = _ref => {
16
16
  };
17
17
 
18
18
  MarkdownHeading.propTypes = {
19
- level: PropTypes.number,
20
- children: PropTypes.node
19
+ level: PropTypes.number.isRequired,
20
+ children: PropTypes.array.isRequired
21
21
  };
22
22
 
23
23
  export { MarkdownHeading as default };
@@ -1,16 +1,12 @@
1
- import { ReactNode } from 'react';
1
+ /// <reference types="react" />
2
2
  import PropTypes from 'prop-types';
3
- export interface MarkdownLinkProps {
4
- href?: string | undefined;
5
- title?: string | undefined;
6
- children?: ReactNode;
7
- }
3
+ import { ReactMarkdownProps } from 'react-markdown/lib/complex-types';
8
4
  declare const MarkdownLink: {
9
- ({ href, title, children }: MarkdownLinkProps): JSX.Element;
5
+ ({ href, title, children }: JSX.IntrinsicElements['a'] & ReactMarkdownProps): JSX.Element;
10
6
  propTypes: {
11
7
  href: PropTypes.Requireable<string>;
12
8
  title: PropTypes.Requireable<string>;
13
- children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
9
+ children: PropTypes.Validator<any[]>;
14
10
  };
15
11
  };
16
12
  export default MarkdownLink;
@@ -24,7 +24,7 @@ const MarkdownLink = _ref => {
24
24
  MarkdownLink.propTypes = {
25
25
  href: PropTypes.string,
26
26
  title: PropTypes.string,
27
- children: PropTypes.node
27
+ children: PropTypes.array.isRequired
28
28
  };
29
29
 
30
30
  export { MarkdownLink as default };
@@ -1,10 +1,9 @@
1
1
  import { PureComponent } from 'react';
2
- import { ReactMarkdownProps } from 'react-markdown';
2
+ import { Options } from 'react-markdown';
3
3
  export interface BaseMarkdownProps {
4
- source: string;
5
4
  inline?: boolean | null | undefined;
6
5
  }
7
- export declare type MarkdownProps = ReactMarkdownProps & BaseMarkdownProps;
6
+ export declare type MarkdownProps = Options & BaseMarkdownProps;
8
7
  /**
9
8
  * @name Markdown
10
9
  */
@@ -31,9 +31,9 @@ class Markdown extends PureComponent {
31
31
  render() {
32
32
  const {
33
33
  className,
34
- renderers,
34
+ components,
35
35
  inline,
36
- source,
36
+ children,
37
37
  plugins = [],
38
38
  ...restProps
39
39
  } = this.props;
@@ -43,29 +43,29 @@ class Markdown extends PureComponent {
43
43
  });
44
44
  return /*#__PURE__*/React.createElement(ReactMarkdown, _extends({
45
45
  className: classes,
46
- source: normalizeIndent(source),
47
46
  plugins: [RemarkBreaks, RemarkGFM, ...plugins],
48
- renderers: {
49
- link: MarkdownLink,
50
- linkReference: MarkdownLink,
47
+ components: {
48
+ a: MarkdownLink,
51
49
  code: MarkdownCode,
52
- inlineCode: MarkdownCode,
53
- heading: MarkdownHeading,
54
- ...renderers
50
+ h1: MarkdownHeading,
51
+ h2: MarkdownHeading,
52
+ h3: MarkdownHeading,
53
+ h4: MarkdownHeading,
54
+ h5: MarkdownHeading,
55
+ h6: MarkdownHeading,
56
+ ...components
55
57
  }
56
- }, restProps));
58
+ }, restProps), normalizeIndent(children));
57
59
  }
58
60
 
59
61
  }
60
62
  Markdown.propTypes = {
61
63
  inline: PropTypes.bool,
62
- source: PropTypes.string,
64
+ children: PropTypes.string,
63
65
  className: PropTypes.string,
64
- renderers: PropTypes.object,
66
+ components: PropTypes.object,
65
67
  plugins: PropTypes.array
66
68
  };
67
- const md = trivialTemplateTag(source => /*#__PURE__*/React.createElement(Markdown, {
68
- source
69
- }));
69
+ const md = trivialTemplateTag(source => /*#__PURE__*/React.createElement(Markdown, null, source));
70
70
 
71
71
  export { Markdown as default, md };
@@ -29,6 +29,7 @@ const TabTitle = /*#__PURE__*/React.memo(function TabTitle(_ref) {
29
29
 
30
30
  const {
31
31
  title,
32
+ titleProps,
32
33
  disabled,
33
34
  href,
34
35
  className,
@@ -43,7 +44,7 @@ const TabTitle = /*#__PURE__*/React.memo(function TabTitle(_ref) {
43
44
  [collapsedClassName !== null && collapsedClassName !== void 0 ? collapsedClassName : '']: collapsed,
44
45
  [collapsedActiveClassName !== null && collapsedActiveClassName !== void 0 ? collapsedActiveClassName : '']: collapsed && selected
45
46
  });
46
- return /*#__PURE__*/React.createElement(TabLink, {
47
+ return /*#__PURE__*/React.createElement(TabLink, _extends({
47
48
  title: title,
48
49
  isSelected: selected,
49
50
  active: true,
@@ -54,7 +55,7 @@ const TabTitle = /*#__PURE__*/React.memo(function TabTitle(_ref) {
54
55
  onPlainLeftClick: handleSelect,
55
56
  tabIndex: tabIndex,
56
57
  collapsed: collapsed
57
- });
58
+ }, titleProps));
58
59
  });
59
60
  TabTitle.propTypes = {
60
61
  child: PropTypes.element,
@@ -83,6 +83,7 @@ class Tabs extends PureComponent {
83
83
  } = this.props;
84
84
  const {
85
85
  title,
86
+ titleProps,
86
87
  id,
87
88
  disabled,
88
89
  href,
@@ -94,7 +95,7 @@ class Tabs extends PureComponent {
94
95
  const titleClasses = classNames(modules_02138f4a.title, className, isSelected && activeClassName, {
95
96
  [modules_02138f4a.selected]: isSelected
96
97
  });
97
- return /*#__PURE__*/React.createElement(TabLink, {
98
+ return /*#__PURE__*/React.createElement(TabLink, _extends({
98
99
  title: title,
99
100
  isSelected: isSelected,
100
101
  active: true,
@@ -104,7 +105,7 @@ class Tabs extends PureComponent {
104
105
  className: titleClasses,
105
106
  disabled: disabled,
106
107
  onPlainLeftClick: this.handleSelect(key)
107
- });
108
+ }, titleProps));
108
109
  });
109
110
  }
110
111
 
@@ -1,7 +1,9 @@
1
1
  import { PureComponent, ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import { TabLinkProps } from './tab-link';
3
4
  export interface TabProps {
4
5
  title?: ReactNode | ((isSelected: boolean, collapsed: boolean | undefined) => ReactNode);
6
+ titleProps?: Partial<TabLinkProps>;
5
7
  id?: string | null | undefined;
6
8
  className?: string | null | undefined;
7
9
  children?: ReactNode;
@@ -101,9 +101,7 @@ class UserAgreement extends PureComponent {
101
101
  }, /*#__PURE__*/React.createElement(HeaderWrapper, null, translations.userAgreement), /*#__PURE__*/React.createElement(ContentWrapper, {
102
102
  fade: true,
103
103
  onScrollToBottom: this.onScrollToBottom
104
- }, /*#__PURE__*/React.createElement(Markdown, {
105
- source: text
106
- })), !preview && /*#__PURE__*/React.createElement(Panel, null, onRemindLater && !scrolledDown && /*#__PURE__*/React.createElement("div", {
104
+ }, /*#__PURE__*/React.createElement(Markdown, null, text)), !preview && /*#__PURE__*/React.createElement(Panel, null, onRemindLater && !scrolledDown && /*#__PURE__*/React.createElement("div", {
107
105
  className: modules_f5ed85cf.suggestion
108
106
  }, translations.scrollToAccept), /*#__PURE__*/React.createElement(ThemedButton, {
109
107
  primary: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetbrains/ring-ui",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.4",
4
4
  "description": "JetBrains UI library",
5
5
  "author": "JetBrains",
6
6
  "license": "Apache-2.0",
@@ -228,12 +228,12 @@
228
228
  "postcss-modules-values-replace": "^3.4.0",
229
229
  "postcss-preset-env": "^7.0.1",
230
230
  "prop-types": "^15.7.2",
231
- "react-markdown": "^5.0.3",
231
+ "react-markdown": "^7.1.1",
232
232
  "react-movable": "^3.0.2",
233
233
  "react-virtualized": "^9.22.3",
234
234
  "react-waypoint": "^10.1.0",
235
235
  "remark-breaks": "^3.0.2",
236
- "remark-gfm": "^1.0.0",
236
+ "remark-gfm": "^3.0.1",
237
237
  "scrollbar-width": "^3.1.1",
238
238
  "simply-uuid": "^1.0.1",
239
239
  "sniffr": "^1.2.0",
@@ -246,5 +246,5 @@
246
246
  "node": ">=7.4",
247
247
  "npm": ">=6.0.0"
248
248
  },
249
- "gitHead": "90ec989a2f0afb2778aa16172d5600790b56dd47"
249
+ "gitHead": "798abfb95b17849b74afc3899d7cfd2227f78478"
250
250
  }