mirror of
https://github.com/portainer/portainer.git
synced 2025-07-24 15:59:41 +02:00
refactor(app): move react components to react codebase [EE-3179] (#6971)
This commit is contained in:
parent
212400c283
commit
18252ab854
346 changed files with 642 additions and 644 deletions
20
app/react/components/Tip/TextTip/TextTip.stories.tsx
Normal file
20
app/react/components/Tip/TextTip/TextTip.stories.tsx
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { Meta, Story } from '@storybook/react';
|
||||
import { PropsWithChildren } from 'react';
|
||||
|
||||
import { TextTip } from './TextTip';
|
||||
|
||||
export default {
|
||||
component: TextTip,
|
||||
title: 'Components/Tip/TextTip',
|
||||
} as Meta;
|
||||
|
||||
function Template({
|
||||
children,
|
||||
}: JSX.IntrinsicAttributes & PropsWithChildren<unknown>) {
|
||||
return <TextTip>{children}</TextTip>;
|
||||
}
|
||||
|
||||
export const Primary: Story<PropsWithChildren<unknown>> = Template.bind({});
|
||||
Primary.args = {
|
||||
children: 'This is a text tip with children',
|
||||
};
|
11
app/react/components/Tip/TextTip/TextTip.test.tsx
Normal file
11
app/react/components/Tip/TextTip/TextTip.test.tsx
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { render } from '@testing-library/react';
|
||||
|
||||
import { TextTip } from './TextTip';
|
||||
|
||||
test('should display a TextTip with children', async () => {
|
||||
const children = 'test text tip';
|
||||
const { findByText } = render(<TextTip>{children}</TextTip>);
|
||||
|
||||
const heading = await findByText(children);
|
||||
expect(heading).toBeTruthy();
|
||||
});
|
27
app/react/components/Tip/TextTip/TextTip.tsx
Normal file
27
app/react/components/Tip/TextTip/TextTip.tsx
Normal file
|
@ -0,0 +1,27 @@
|
|||
import { PropsWithChildren } from 'react';
|
||||
import clsx from 'clsx';
|
||||
|
||||
type Color = 'orange' | 'blue';
|
||||
|
||||
export interface Props {
|
||||
color?: Color;
|
||||
}
|
||||
|
||||
export function TextTip({
|
||||
color = 'orange',
|
||||
children,
|
||||
}: PropsWithChildren<Props>) {
|
||||
return (
|
||||
<p className="text-muted small">
|
||||
<i
|
||||
aria-hidden="true"
|
||||
className={clsx(
|
||||
'fa fa-exclamation-circle',
|
||||
`${color}-icon`,
|
||||
'space-right'
|
||||
)}
|
||||
/>
|
||||
{children}
|
||||
</p>
|
||||
);
|
||||
}
|
1
app/react/components/Tip/TextTip/index.ts
Normal file
1
app/react/components/Tip/TextTip/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export { TextTip } from './TextTip';
|
23
app/react/components/Tip/Tooltip/Tooltip.module.css
Normal file
23
app/react/components/Tip/Tooltip/Tooltip.module.css
Normal file
|
@ -0,0 +1,23 @@
|
|||
.tooltip-wrapper {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
font-family: Montserrat !important;
|
||||
background-color: var(--bg-tooltip-color) !important;
|
||||
padding: 0.833em 1em !important;
|
||||
color: var(--text-tooltip-color) !important;
|
||||
border: 1px solid var(--border-tooltip-color) !important;
|
||||
border-radius: 0.14285714rem !important;
|
||||
box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15) !important;
|
||||
max-width: 200px;
|
||||
text-align: center;
|
||||
font-size: 12px !important;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.icon {
|
||||
margin-left: 5px;
|
||||
font-size: 1.3em;
|
||||
}
|
23
app/react/components/Tip/Tooltip/Tooltip.stories.tsx
Normal file
23
app/react/components/Tip/Tooltip/Tooltip.stories.tsx
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { Meta, Story } from '@storybook/react';
|
||||
|
||||
import { Tooltip, Props } from './Tooltip';
|
||||
|
||||
export default {
|
||||
component: Tooltip,
|
||||
title: 'Components/Tip/Tooltip',
|
||||
} as Meta;
|
||||
|
||||
function Template({ message, position }: JSX.IntrinsicAttributes & Props) {
|
||||
return (
|
||||
<div className="col-sm-3 col-lg-2">
|
||||
Example tooltip
|
||||
<Tooltip message={message} position={position} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export const Primary: Story<Props> = Template.bind({});
|
||||
Primary.args = {
|
||||
message: 'Tooltip example',
|
||||
position: 'bottom',
|
||||
};
|
31
app/react/components/Tip/Tooltip/Tooltip.tsx
Normal file
31
app/react/components/Tip/Tooltip/Tooltip.tsx
Normal file
|
@ -0,0 +1,31 @@
|
|||
import ReactTooltip from 'react-tooltip';
|
||||
import clsx from 'clsx';
|
||||
|
||||
import styles from './Tooltip.module.css';
|
||||
|
||||
type Place = 'top' | 'right' | 'bottom' | 'left';
|
||||
|
||||
export interface Props {
|
||||
position?: Place;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export function Tooltip({ message, position = 'bottom' }: Props) {
|
||||
return (
|
||||
<span className="interactive">
|
||||
<i
|
||||
className={clsx('fa fa-question-circle blue-icon', styles.icon)}
|
||||
aria-hidden="true"
|
||||
data-tip={message}
|
||||
/>
|
||||
<ReactTooltip
|
||||
multiline
|
||||
type="info"
|
||||
place={position}
|
||||
effect="solid"
|
||||
className={styles.tooltip}
|
||||
arrowColor="transparent"
|
||||
/>
|
||||
</span>
|
||||
);
|
||||
}
|
1
app/react/components/Tip/Tooltip/index.ts
Normal file
1
app/react/components/Tip/Tooltip/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export { Tooltip } from './Tooltip';
|
Loading…
Add table
Add a link
Reference in a new issue