diff --git a/packages/ffe-message-box-react/README.md b/packages/ffe-message-box-react/README.md index ba9d0731c0..e858c85bba 100644 --- a/packages/ffe-message-box-react/README.md +++ b/packages/ffe-message-box-react/README.md @@ -10,11 +10,6 @@ npm install --save @sb1/ffe-message-box-react Full documentation on message box usage is available at https://design.sparebank1.no/komponenter/meldinger/#messagebox. -## TypeScript definition files - -This component supports TypeScript - please update `index.d.ts` if you change any -of the external methods or properties in this component. - ## Development To start a local development server, run the following from the designsystem root folder: diff --git a/packages/ffe-message-box-react/package.json b/packages/ffe-message-box-react/package.json index 11de7d7ae2..d396af8fec 100644 --- a/packages/ffe-message-box-react/package.json +++ b/packages/ffe-message-box-react/package.json @@ -17,10 +17,10 @@ "url": "ssh://git@github.com:SpareBank1/designsystem.git" }, "scripts": { - "build": "ffe-buildtool babel", + "build": "ffe-buildtool tsc", "watch": "ffe-buildtool babel-watch", - "lint": "eslint src", - "lint:fix": "eslint src --fix", + "lint": "eslint src --ext ts,tsx", + "lint:fix": "eslint src --fix --ext ts,tsx", "test": "ffe-buildtool jest", "test:watch": "ffe-buildtool jest --watch" }, diff --git a/packages/ffe-message-box-react/src/BaseMessage.spec.js b/packages/ffe-message-box-react/src/BaseMessage.spec.js deleted file mode 100644 index a82becac25..0000000000 --- a/packages/ffe-message-box-react/src/BaseMessage.spec.js +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import BaseMessage from './BaseMessage'; -import { Icon } from '@sb1/ffe-icons-react'; -const defaultProps = { - type: 'info', - icon: , -}; -const getWrapper = props => - shallow(); - -describe('', () => { - it('renders without exploding', () => { - const wrapper = getWrapper(); - expect(wrapper.exists()).toBe(true); - }); - it('renders the correct classes by default', () => { - const wrapper = getWrapper({ title: 'test title' }); - expect(wrapper.hasClass('ffe-message-box')).toBe(true); - - ['info', 'error', 'success', 'tips'].forEach(type => { - const typedWrapper = getWrapper({ type, title: 'test' }); - expect( - typedWrapper.find(`.ffe-message-box--${type}`).exists(), - ).toBe(true); - expect(typedWrapper.find('.ffe-message-box__icon').exists()).toBe( - true, - ); - }); - }); - it('renders with correct title class', () => { - const wrapper = getWrapper({ title: 'test title' }); - expect(wrapper.find(`.ffe-message-box__title`).exists()).toBe(true); - }); - it('renders an icon by default', () => { - const wrapper = getWrapper(); - expect(wrapper.find('.ffe-message-box__icon').exists()).toBe(true); - }); - it('renders the container with role="group" by default', () => { - const wrapper = getWrapper(); - expect(wrapper.prop('role')).toBe('group'); - }); - it('renders a title if specified', () => { - const wrapper = getWrapper({ title: 'test title' }); - expect(wrapper.find('.ffe-message-box__title').text()).toBe( - 'test title', - ); - }); - it('renders children if specified', () => { - const wrapper = getWrapper({ children:

children

}); - expect(wrapper.text()).toContain('children'); - }); - it('renders onColoredBg styling if specified', () => { - const wrapper = getWrapper({ onColoredBg: true }); - expect(wrapper.find('.ffe-message-box--coloredbg').exists()).toBe(true); - }); -}); diff --git a/packages/ffe-message-box-react/src/BaseMessage.spec.tsx b/packages/ffe-message-box-react/src/BaseMessage.spec.tsx new file mode 100644 index 0000000000..4da69f8d90 --- /dev/null +++ b/packages/ffe-message-box-react/src/BaseMessage.spec.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { BaseMessage, BaseMessageProps } from './BaseMessage'; +import { Icon } from '@sb1/ffe-icons-react'; +import { render, screen } from '@testing-library/react'; + +const defaultProps = { + type: 'info' as const, + icon: , +}; + +const TEST_ID = 'TEST_ID'; + +const renderBaseMessage = (props?: Partial) => + render(); + +describe('', () => { + it('renders the correct classes by default', () => { + const { rerender, container } = render( + , + ); + const baseMessage = screen.getByTestId(TEST_ID); + expect(baseMessage.classList.contains('ffe-message-box')).toBe(true); + + const types = ['info', 'error', 'success', 'tips'] as const; + + types.forEach(type => { + rerender( + , + ); + expect( + baseMessage.classList.contains(`ffe-message-box--${type}`), + ).toBe(true); + expect( + container.querySelector(`.ffe-message-box__icon`), + ).toBeTruthy(); + }); + }); + + it('renders with correct title class', () => { + const { container } = renderBaseMessage({ title: 'test title' }); + expect(container.querySelector(`.ffe-message-box__title`)).toBeTruthy(); + }); + it('renders an icon by default', () => { + const { container } = renderBaseMessage(); + expect(container.querySelector(`.ffe-message-box__icon`)).toBeTruthy(); + }); + it('renders the container with role="group" by default', () => { + renderBaseMessage(); + const baseMessage = screen.getByTestId(TEST_ID); + + expect(baseMessage.getAttribute('role')).toBe('group'); + }); + it('renders a title if specified', () => { + const { container } = renderBaseMessage({ title: 'test title' }); + + expect( + container.querySelector(`.ffe-message-box__title`)?.textContent, + ).toBe('test title'); + }); + it('renders children if specified', () => { + renderBaseMessage({ children:

children

}); + const baseMessage = screen.getByTestId(TEST_ID); + + expect(baseMessage.textContent).toContain('children'); + }); + it('renders onColoredBg styling if specified', () => { + const { container } = renderBaseMessage({ onColoredBg: true }); + expect( + container.querySelector('.ffe-message-box--coloredbg'), + ).toBeTruthy(); + }); +}); diff --git a/packages/ffe-message-box-react/src/BaseMessage.js b/packages/ffe-message-box-react/src/BaseMessage.tsx similarity index 54% rename from packages/ffe-message-box-react/src/BaseMessage.js rename to packages/ffe-message-box-react/src/BaseMessage.tsx index 1efbb8057a..1622069569 100644 --- a/packages/ffe-message-box-react/src/BaseMessage.js +++ b/packages/ffe-message-box-react/src/BaseMessage.tsx @@ -1,21 +1,35 @@ import React from 'react'; -import { bool, node, oneOf, string } from 'prop-types'; import classNames from 'classnames'; -const BaseMessage = props => { - const { - type, - title, - titleElement = 'h2', - icon, - children, - className = '', - onColoredBg = false, - ariaLabel, - role = 'group', - ...rest - } = props; +export interface BaseMessageProps + extends Omit, 'title'> { + icon?: React.ReactNode; + title?: React.ReactNode; + /** HTML element for the title */ + titleElement?: string; + /** + * Internal type enum for specifying the style of message box. Should not be used directly + * @ignore + */ + type: 'success' | 'error' | 'tips' | 'info'; + /** Adds alternative styling for better contrast on certain backgrounds */ + onColoredBg?: boolean; + ariaLabel?: string; + role?: 'alert' | 'group'; +} +export const BaseMessage: React.FC = ({ + type, + title, + titleElement = 'h2', + icon, + children, + className = '', + onColoredBg = false, + ariaLabel, + role = 'group', + ...rest +}) => { return (
{ {...rest} > - {React.cloneElement(icon, { - ...icon.props, - size: 'xl', - weight: 300, - })} + {React.isValidElement(icon) && + React.cloneElement(icon, { + ...icon.props, + size: 'xl', + weight: 300, + })}
{title && @@ -49,23 +64,3 @@ const BaseMessage = props => {
); }; - -BaseMessage.propTypes = { - children: node, - className: string, - icon: node.isRequired, - title: node, - /** HTML element for the title */ - titleElement: string, - /** - * Internal type enum for specifying the style of message box. Should not be used directly - * @ignore - */ - type: oneOf(['success', 'error', 'tips', 'info']).isRequired, - /* Adds alternative styling for better contrast on certain backgrounds */ - onColoredBg: bool, - ariaLabel: string, - role: oneOf(['alert', 'group']), -}; - -export default BaseMessage; diff --git a/packages/ffe-message-box-react/src/ErrorMessage.js b/packages/ffe-message-box-react/src/ErrorMessage.tsx similarity index 65% rename from packages/ffe-message-box-react/src/ErrorMessage.js rename to packages/ffe-message-box-react/src/ErrorMessage.tsx index b6919a7142..1eade48f19 100644 --- a/packages/ffe-message-box-react/src/ErrorMessage.js +++ b/packages/ffe-message-box-react/src/ErrorMessage.tsx @@ -1,12 +1,20 @@ import React from 'react'; -import { node, string, bool, oneOf } from 'prop-types'; import { Icon } from '@sb1/ffe-icons-react'; -import BaseMessage from './BaseMessage'; -import texts from './texts'; +import { BaseMessage, BaseMessageProps } from './BaseMessage'; +import { texts } from './texts'; -const ErrorMessage = props => { - const { alert = true, locale = 'nb', ...rest } = props; +export interface ErrorMessageProps + extends Omit { + /** When false, role is not set to alert, avoids message from being read up immediately after page load. Default value is true. */ + alert?: boolean; + locale?: 'nb' | 'nn' | 'en'; +} +export const ErrorMessage: React.FC = ({ + alert = true, + locale = 'nb', + ...rest +}) => { const priorityHighIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iNDgiPjxwYXRoIGQ9Ik00NzkuODgxLTE2My4wOHEtMjEuNzg0IDAtMzcuMTc4LTE1LjUxMy0xNS4zOTQtMTUuNTEzLTE1LjM5NC0zNy4yOTd0MTUuNTEzLTM3LjE3OHExNS41MTMtMTUuMzk0IDM3LjI5Ny0xNS4zOTR0MzcuMTc4IDE1LjUxM3ExNS4zOTQgMTUuNTEzIDE1LjM5NCAzNy4yOTd0LTE1LjUxMyAzNy4xNzhxLTE1LjUxMyAxNS4zOTQtMzcuMjk3IDE1LjM5NFptLS4wNjEtMTk2LjE1MXEtMTkuNTg5IDAtMzMuMzU3LTEzLjg5Ni0xMy43NjktMTMuODk2LTEzLjc2OS0zMy40MXYtMzYzLjA3OHEwLTE5LjUxNCAxMy45NDktMzMuNDEgMTMuOTQ5LTEzLjg5NiAzMy41MzctMTMuODk2IDE5LjU4OSAwIDMzLjM1NyAxMy44OTYgMTMuNzY5IDEzLjg5NiAxMy43NjkgMzMuNDF2MzYzLjA3OHEwIDE5LjUxNC0xMy45NDkgMzMuNDEtMTMuOTQ5IDEzLjg5Ni0zMy41MzcgMTMuODk2WiIvPjwvc3ZnPg=='; @@ -20,20 +28,3 @@ const ErrorMessage = props => { /> ); }; - -ErrorMessage.propTypes = { - /** The content of the message box */ - children: node, - /** Any extra class names to the wrapping DOM node */ - className: string, - /** The icon to show. Has a default value, but can be overridden */ - icon: node, - /** An optional title for the message */ - title: node, - /** When false, role is not set to alert, avoids message from being read up immediately after page load. Default value is true. */ - alert: bool, - /** 'nb', 'nn', or 'en' */ - locale: oneOf(['en', 'nb', 'nn']), -}; - -export default ErrorMessage; diff --git a/packages/ffe-message-box-react/src/InfoMessage.js b/packages/ffe-message-box-react/src/InfoMessage.tsx similarity index 64% rename from packages/ffe-message-box-react/src/InfoMessage.js rename to packages/ffe-message-box-react/src/InfoMessage.tsx index d17c92cf03..ef4746ca68 100644 --- a/packages/ffe-message-box-react/src/InfoMessage.js +++ b/packages/ffe-message-box-react/src/InfoMessage.tsx @@ -1,10 +1,17 @@ import React from 'react'; -import { node, oneOf, string } from 'prop-types'; import { Icon } from '@sb1/ffe-icons-react'; -import BaseMessage from './BaseMessage'; -import texts from './texts'; +import { BaseMessage, BaseMessageProps } from './BaseMessage'; +import { texts } from './texts'; -const InfoMessage = ({ locale = 'nb', ...rest }) => { +export interface InfoMessageProps + extends Omit { + locale?: 'nb' | 'nn' | 'en'; +} + +export const InfoMessage: React.FC = ({ + locale = 'nb', + ...rest +}) => { const infoIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iNDgiPjxwYXRoIGQ9Ik00NzkuODgxLTY5NC42MTVxLTI2LjE4OCAwLTQ0LjM4MS0xOC4zMTEtMTguMTkyLTE4LjMxMi0xOC4xOTItNDQuNXQxOC4zMTItNDQuMzhxMTguMzExLTE4LjE5MyA0NC40OTktMTguMTkzIDI2LjE4OCAwIDQ0LjM4MSAxOC4zMTIgMTguMTkyIDE4LjMxMSAxOC4xOTIgNDQuNDk5IDAgMjYuMTg5LTE4LjMxMiA0NC4zODEtMTguMzExIDE4LjE5Mi00NC40OTkgMTguMTkyWm0uMDI0IDU1NC42MTRxLTE3LjgyOCAwLTMwLjIxMi0xMi40NTItMTIuMzg1LTEyLjQ1Mi0xMi4zODUtMzAuMjR2LTM1OS4yMjlxMC0xNy43ODkgMTIuNDgtMzAuMjQgMTIuNDc5LTEyLjQ1MiAzMC4zMDctMTIuNDUydDMwLjIxMiAxMi40NTJxMTIuMzg1IDEyLjQ1MSAxMi4zODUgMzAuMjR2MzU5LjIyOXEwIDE3Ljc4OC0xMi40OCAzMC4yNC0xMi40NzkgMTIuNDUyLTMwLjMwNyAxMi40NTJaIi8+PC9zdmc+'; return ( @@ -16,18 +23,3 @@ const InfoMessage = ({ locale = 'nb', ...rest }) => { /> ); }; - -InfoMessage.propTypes = { - /** The content of the message box */ - children: node, - /** Any extra class names to the wrapping DOM node */ - className: string, - /** The icon to show. Has a default value, but can be overridden */ - icon: node, - /** An optional title for the message */ - title: node, - /** 'nb', 'nn', or 'en' */ - locale: oneOf(['en', 'nb', 'nn']), -}; - -export default InfoMessage; diff --git a/packages/ffe-message-box-react/src/InfoMessageList.js b/packages/ffe-message-box-react/src/InfoMessageList.js deleted file mode 100644 index c20253aacc..0000000000 --- a/packages/ffe-message-box-react/src/InfoMessageList.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { string, node } from 'prop-types'; - -export const InfoMessageListItem = props => ( -
  • - {props.href && ( - - {props.children} - - )} - {!props.href && props.children} -
  • -); -InfoMessageListItem.propTypes = { - href: string, - children: string.isRequired, -}; - -export const InfoMessageList = props => ( -
      {props.children}
    -); - -InfoMessageList.propTypes = { - children: node.isRequired, -}; diff --git a/packages/ffe-message-box-react/src/InfoMessageList.tsx b/packages/ffe-message-box-react/src/InfoMessageList.tsx new file mode 100644 index 0000000000..b8e21387ee --- /dev/null +++ b/packages/ffe-message-box-react/src/InfoMessageList.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +export interface InfoMessageListItemProps { + href: string; + children: NonNullable; +} + +export const InfoMessageListItem: React.FC = ({ + children, + href, +}) => ( +
  • + {href ? ( + + {children} + + ) : ( + children + )} +
  • +); + +export interface InfoMessageListProps { + children: NonNullable; +} + +export const InfoMessageList: React.FC = ({ + children, +}) =>
      {children}
    ; diff --git a/packages/ffe-message-box-react/src/SuccessMessage.js b/packages/ffe-message-box-react/src/SuccessMessage.tsx similarity index 60% rename from packages/ffe-message-box-react/src/SuccessMessage.js rename to packages/ffe-message-box-react/src/SuccessMessage.tsx index e0b9dceb80..017387caac 100644 --- a/packages/ffe-message-box-react/src/SuccessMessage.js +++ b/packages/ffe-message-box-react/src/SuccessMessage.tsx @@ -1,10 +1,17 @@ import React from 'react'; -import { node, oneOf, string } from 'prop-types'; import { Icon } from '@sb1/ffe-icons-react'; -import BaseMessage from './BaseMessage'; -import texts from './texts'; +import { BaseMessage, BaseMessageProps } from './BaseMessage'; +import { texts } from './texts'; -const SuccessMessage = ({ locale = 'nb', ...rest }) => { +export interface SuccessMessageProps + extends Omit { + locale?: 'nb' | 'nn' | 'en'; +} + +export const SuccessMessage: React.FC = ({ + locale = 'nb', + ...rest +}) => { const checkIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iNDgiPjxwYXRoIGQ9Im0zNzkuMTU0LTMyMy4xNTMgMzYzLTM2My4zODVxNi43NTktNi4zMDcgMTYuMTQ4LTYuNSA5LjM5LS4xOTIgMTYuNDY3IDYuNTUzIDYuNjkyIDcuMTI5IDYuNjkyIDE2LjQ5OSAwIDkuMzcxLTYuNjkyIDE2LjA2M0wzOTkuMzg1LTI3OC41MzlxLTguNjE2IDguNjE1LTIwLjIzMSA4LjYxNS0xMS42MTUgMC0yMC4yMzEtOC42MTVMMTg0LjYxNi00NTIuODQ2cS02LjY5Mi02Ljc1OS02LjU3Ny0xNi4xNDkuMTE2LTkuMzg5IDcuMjQ1LTE2LjQ2NiA3LjEyOS02LjY5MiAxNi4zMDctNi42OTIgOS4xNzggMCAxNi4yNTUgNi42OTJsMTYxLjMwOCAxNjIuMzA4WiIvPjwvc3ZnPg=='; @@ -17,18 +24,3 @@ const SuccessMessage = ({ locale = 'nb', ...rest }) => { /> ); }; - -SuccessMessage.propTypes = { - /** The content of the message box */ - children: node, - /** Any extra class names to the wrapping DOM node */ - className: string, - /** The icon to show. Has a default value, but can be overridden */ - icon: node, - /** An optional title for the message */ - title: node, - /** 'nb', 'nn', or 'en' */ - locale: oneOf(['en', 'nb', 'nn']), -}; - -export default SuccessMessage; diff --git a/packages/ffe-message-box-react/src/TipsMessage.js b/packages/ffe-message-box-react/src/TipsMessage.tsx similarity index 70% rename from packages/ffe-message-box-react/src/TipsMessage.js rename to packages/ffe-message-box-react/src/TipsMessage.tsx index 734fedcfd4..865700afc8 100644 --- a/packages/ffe-message-box-react/src/TipsMessage.js +++ b/packages/ffe-message-box-react/src/TipsMessage.tsx @@ -1,12 +1,17 @@ import React from 'react'; -import { node, oneOf, string } from 'prop-types'; import { Icon } from '@sb1/ffe-icons-react'; -import BaseMessage from './BaseMessage'; -import texts from './texts'; +import { BaseMessage, BaseMessageProps } from './BaseMessage'; +import { texts } from './texts'; -const TipsMessage = props => { - const { locale = 'nb', ...rest } = props; +export interface TipsMessageProps + extends Omit { + locale?: 'nb' | 'nn' | 'en'; +} +export const TipsMessage: React.FC = ({ + locale = 'nb', + ...rest +}) => { const lightbulbIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iNDgiPjxwYXRoIGQ9Ik00ODAtOTYuOTI0cS0zMC45MjMgMC01My4wNzctMjEtMjIuMTUzLTIxLTIzLjY5Mi01MS45MjNoMTUzLjUzOHEtMS41MzkgMzAuOTIzLTIzLjY5MiA1MS45MjMtMjIuMTU0IDIxLTUzLjA3NyAyMVpNMzUxLjA3Ny0yNDEuNDYzcS05LjY2MyAwLTE2LjE3Ny02LjU2Ny02LjUxNS02LjU2Ni02LjUxNS0xNi4zMDd0Ni41MTUtMTYuMTI1cTYuNTE0LTYuMzg0IDE2LjE3Ny02LjM4NGgyNTcuODQ2cTkuNjYzIDAgMTYuMTc3IDYuNTY2IDYuNTE1IDYuNTY3IDYuNTE1IDE2LjMwOCAwIDkuNzQtNi41MTUgMTYuMTI1LTYuNTE0IDYuMzg0LTE2LjE3NyA2LjM4NEgzNTEuMDc3Wm0tMTkuOTk5LTExNnEtNjAuNjE1LTQwLjY5Mi05NS44NDYtMTAwLjM4NHQtMzUuMjMxLTEzNC41MzdxMC0xMTQuNjkyIDgyLjY1NC0xOTcuMzQ1UTM2NS4zMDgtODcyLjM4MyA0ODAtODcyLjM4M3QxOTcuMzQ1IDgyLjY1NHE4Mi42NTQgODIuNjUzIDgyLjY1NCAxOTcuMzQ1IDAgNzQuODQ1LTM0LjkyMyAxMzQuNTM3LTM0LjkyMyA1OS42OTItOTYuMTU0IDEwMC4zODRIMzMxLjA3OFptMTYuMjMtNDUuMzgzaDI2NS43NzFxNDcuNDU5LTMyIDc0LjQ5OC04Mi4wMjkgMjcuMDM4LTUwLjAyOSAyNy4wMzgtMTA3LjUwOSAwLTk3LjA3Ny02OC43NjktMTY1Ljg0NlQ0ODAtODI2Ljk5OXEtOTcuMDc3IDAtMTY1Ljg0NiA2OC43NjlUMjQ1LjM4NS01OTIuNHEwIDU3LjYwNSAyNy4wMzggMTA3LjU3OSAyNy4wMzkgNDkuOTc1IDc0Ljg4NSA4MS45NzVabTEzMi42OTIgMFoiLz48L3N2Zz4='; return ( @@ -18,18 +23,3 @@ const TipsMessage = props => { /> ); }; - -TipsMessage.propTypes = { - /** The content of the message box */ - children: node, - /** Any extra class names to the wrapping DOM node */ - className: string, - /** The icon to show. Has a default value, but can be overridden */ - icon: node, - /** An optional title for the message */ - title: node, - /** 'nb', 'nn', or 'en' */ - locale: oneOf(['en', 'nb', 'nn']), -}; - -export default TipsMessage; diff --git a/packages/ffe-message-box-react/src/index.d.ts b/packages/ffe-message-box-react/src/index.d.ts deleted file mode 100644 index 039deea258..0000000000 --- a/packages/ffe-message-box-react/src/index.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as React from 'react'; - -export interface MessageBoxProps - extends Omit, 'title' | 'content'> { - children?: React.ReactNode; - className?: string; - icon?: React.ReactNode; - title?: React.ReactNode; - titleElement?: string; - onColoredBg?: boolean; - locale?: 'nb' | 'nn' | 'en'; -} - -export interface ErrorMessageBoxProps extends MessageBoxProps { - alert?: boolean; -} - -export interface InfoMessageListItemProps { - children: string; - href?: string; -} - -export interface InfoMessageListProps { - children: React.ReactNode; -} - -declare class SuccessMessage extends React.Component {} -declare class ErrorMessage extends React.Component {} -declare class InfoMessage extends React.Component {} -declare class TipsMessage extends React.Component {} -declare class InfoMessageList extends React.Component< - InfoMessageListProps, - any -> {} -declare class InfoMessageListItem extends React.Component< - InfoMessageListItemProps, - any -> {} diff --git a/packages/ffe-message-box-react/src/index.js b/packages/ffe-message-box-react/src/index.js deleted file mode 100644 index 1f8d26110d..0000000000 --- a/packages/ffe-message-box-react/src/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import SuccessMessage from './SuccessMessage'; -import ErrorMessage from './ErrorMessage'; -import InfoMessage from './InfoMessage'; -import TipsMessage from './TipsMessage'; -import { InfoMessageList, InfoMessageListItem } from './InfoMessageList'; - -export { - SuccessMessage, - ErrorMessage, - InfoMessage, - TipsMessage, - InfoMessageList, - InfoMessageListItem, -}; diff --git a/packages/ffe-message-box-react/src/index.ts b/packages/ffe-message-box-react/src/index.ts new file mode 100644 index 0000000000..1f135e22d6 --- /dev/null +++ b/packages/ffe-message-box-react/src/index.ts @@ -0,0 +1,10 @@ +export { SuccessMessage, SuccessMessageProps } from './SuccessMessage'; +export { ErrorMessage, ErrorMessageProps } from './ErrorMessage'; +export { InfoMessage, InfoMessageProps } from './InfoMessage'; +export { TipsMessage, TipsMessageProps } from './TipsMessage'; +export { + InfoMessageList, + InfoMessageListProps, + InfoMessageListItem, + InfoMessageListItemProps, +} from './InfoMessageList'; diff --git a/packages/ffe-message-box-react/src/texts.js b/packages/ffe-message-box-react/src/texts.ts similarity index 90% rename from packages/ffe-message-box-react/src/texts.js rename to packages/ffe-message-box-react/src/texts.ts index f61c96eb91..14321a2c1d 100644 --- a/packages/ffe-message-box-react/src/texts.js +++ b/packages/ffe-message-box-react/src/texts.ts @@ -11,7 +11,7 @@ const nb = { tip: { ariaLabel: 'Tipsmelding', }, -}; +} as const; const nn = { error: { ariaLabel: 'Feilmelding', @@ -25,7 +25,7 @@ const nn = { tip: { ariaLabel: 'Tipsmelding', }, -}; +} as const; const en = { error: { ariaLabel: 'Error message', @@ -39,6 +39,6 @@ const en = { tip: { ariaLabel: 'Tip message', }, -}; +} as const; -export default { nb, nn, en }; +export const texts = { nb, nn, en }; diff --git a/packages/ffe-message-box-react/tsconfig.cjs.json b/packages/ffe-message-box-react/tsconfig.cjs.json new file mode 100644 index 0000000000..6579fd2246 --- /dev/null +++ b/packages/ffe-message-box-react/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "module": "commonjs" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "src/**/*.spec.ts*"] +} diff --git a/packages/ffe-message-box-react/tsconfig.esm.json b/packages/ffe-message-box-react/tsconfig.esm.json new file mode 100644 index 0000000000..8e577796bf --- /dev/null +++ b/packages/ffe-message-box-react/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./es", + "module": "esnext" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "src/**/*.spec.ts*"] +} diff --git a/packages/ffe-message-box-react/tsconfig.types.json b/packages/ffe-message-box-react/tsconfig.types.json new file mode 100644 index 0000000000..3499c0be03 --- /dev/null +++ b/packages/ffe-message-box-react/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./types", + "declaration": true, + "emitDeclarationOnly": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "src/**/*.spec.ts*"] +}