@seeqdev/qomponents 0.0.0 → 0.0.2
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/README.md +33 -13
- package/dist/Button/Button.d.ts +5 -0
- package/dist/Button/Button.js +71 -0
- package/dist/Button/Button.js.map +1 -0
- package/dist/Button/Button.stories.d.ts +3 -5
- package/dist/Button/Button.stories.js +58 -0
- package/dist/Button/Button.stories.js.map +1 -0
- package/dist/Button/Button.test.js +49 -0
- package/dist/Button/Button.test.js.map +1 -0
- package/dist/Button/Button.types.d.ts +19 -4
- package/dist/Button/Button.types.js +4 -0
- package/dist/Button/Button.types.js.map +1 -0
- package/dist/Button/index.js +2 -0
- package/dist/Button/index.js.map +1 -0
- package/dist/FontCustom.woff +0 -0
- package/dist/FontCustom.woff2 +0 -0
- package/dist/Icon/Icon.d.ts +10 -0
- package/dist/Icon/Icon.js +54 -0
- package/dist/Icon/Icon.js.map +1 -0
- package/dist/Icon/Icon.stories.d.ts +5 -0
- package/dist/Icon/Icon.stories.js +40 -0
- package/dist/Icon/Icon.stories.js.map +1 -0
- package/dist/Icon/Icon.test.d.ts +1 -0
- package/dist/Icon/Icon.test.js +55 -0
- package/dist/Icon/Icon.test.js.map +1 -0
- package/dist/Icon/Icon.types.d.ts +38 -0
- package/dist/Icon/Icon.types.js +16 -0
- package/dist/Icon/Icon.types.js.map +1 -0
- package/dist/Icon/index.d.ts +1 -0
- package/dist/Icon/index.js +2 -0
- package/dist/Icon/index.js.map +1 -0
- package/dist/TextField/TextField.d.ts +7 -0
- package/dist/TextField/TextField.js +47 -0
- package/dist/TextField/TextField.js.map +1 -0
- package/dist/TextField/TextField.stories.d.ts +5 -0
- package/dist/TextField/TextField.stories.js +33 -0
- package/dist/TextField/TextField.stories.js.map +1 -0
- package/dist/TextField/TextField.test.d.ts +1 -0
- package/dist/TextField/TextField.test.js +35 -0
- package/dist/TextField/TextField.test.js.map +1 -0
- package/dist/TextField/TextField.types.d.ts +16 -0
- package/dist/TextField/TextField.types.js +2 -0
- package/dist/TextField/TextField.types.js.map +1 -0
- package/dist/TextField/index.d.ts +1 -0
- package/dist/TextField/index.js +2 -0
- package/dist/TextField/index.js.map +1 -0
- package/dist/Tooltip/Tooltip.d.ts +7 -0
- package/dist/Tooltip/Tooltip.js +30 -0
- package/dist/Tooltip/Tooltip.js.map +1 -0
- package/dist/Tooltip/Tooltip.stories.d.ts +5 -0
- package/dist/Tooltip/Tooltip.stories.js +32 -0
- package/dist/Tooltip/Tooltip.stories.js.map +1 -0
- package/dist/Tooltip/Tooltip.types.d.ts +9 -0
- package/dist/Tooltip/Tooltip.types.js +3 -0
- package/dist/Tooltip/Tooltip.types.js.map +1 -0
- package/dist/Tooltip/index.d.ts +1 -0
- package/dist/Tooltip/index.js +2 -0
- package/dist/Tooltip/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.esm.js +182 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +183 -13
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1732 -181
- package/dist/utils/browserId.js +29 -0
- package/dist/utils/browserId.js.map +1 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -1,28 +1,48 @@
|
|
|
1
|
-
|
|
1
|
+
<!-- markdownlint-disable-next-line -->
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img width="150" src="https://seeq.com/sites/default/files/seeq-content/seeq-logo-blue-web-33h.svg" alt="Seeq logo">
|
|
4
|
+
</p>
|
|
5
|
+
<h1 align="center">qomponents</h1>
|
|
2
6
|
|
|
3
|
-
## Development
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
Seeq qomponents are a collection of UI components, including a Button, a TextField, an Icon, as well as a Tooltip
|
|
9
|
+
React component (more coming soon!)
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
These components are used by Seeq's application and are made publicly available for Developers who want to expand
|
|
12
|
+
the Seeq eco-system with their own plugins and add-ons without having to worry about creating a cohesive Seeq UX
|
|
13
|
+
experience. Every component comes fully styled (and with dark mode support).
|
|
8
14
|
|
|
9
|
-
|
|
10
|
-
npm run dev
|
|
11
|
-
```
|
|
15
|
+
## Installation
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
Seeq qomponents are available on npm.
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
**npm:**
|
|
16
20
|
|
|
21
|
+
```sh
|
|
22
|
+
npm install @seeqdev/qomponents
|
|
17
23
|
```
|
|
18
|
-
|
|
24
|
+
|
|
25
|
+
**yarn:**
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
yarn add @seeqdev/qomponents
|
|
19
29
|
```
|
|
20
30
|
|
|
21
|
-
|
|
31
|
+
## Getting started with Seeq qomponents
|
|
22
32
|
|
|
23
|
-
|
|
33
|
+
Here is an example of a basic app using the `Button` component:
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
```jsx
|
|
36
|
+
import * as React from 'react';
|
|
37
|
+
import {Button} from '@seeqdev/qomponents';
|
|
26
38
|
|
|
39
|
+
function App() {
|
|
40
|
+
return <Button variant="theme" label="Seeq Rocks" />;
|
|
41
|
+
}
|
|
42
|
+
```
|
|
27
43
|
|
|
44
|
+
To make sure all styles are properly applied be sure to inclue the qomponents css file in your main css file.
|
|
28
45
|
|
|
46
|
+
```css
|
|
47
|
+
@import '@seeqdev/qomponents/dist/styles.css';
|
|
48
|
+
```
|
package/dist/Button/Button.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ButtonProps } from './Button.types';
|
|
3
3
|
import '../styles.css';
|
|
4
|
+
/**
|
|
5
|
+
* All-in-one Button:
|
|
6
|
+
* - use "variant" to achieve the desired style
|
|
7
|
+
* - include tooltips and/or icons
|
|
8
|
+
*/
|
|
4
9
|
declare const Button: React.FunctionComponent<ButtonProps>;
|
|
5
10
|
export default Button;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import '../styles.css';
|
|
3
|
+
import { browserIsFirefox } from '../utils/browserId';
|
|
4
|
+
import Tooltip from '../Tooltip';
|
|
5
|
+
import Icon from '../Icon';
|
|
6
|
+
/**
|
|
7
|
+
* All-in-one Button:
|
|
8
|
+
* - use "variant" to achieve the desired style
|
|
9
|
+
* - include tooltips and/or icons
|
|
10
|
+
*/
|
|
11
|
+
const Button = ({ onClick, label, variant = 'outline', type = 'button', size = 'sm', disabled, extraClassNames, id, testId, stopPropagation = true, tooltip, tooltipOptions, iconStyle = 'text', icon, iconColor, }) => {
|
|
12
|
+
const baseClasses = 'tw-py-1 tw-px-2.5 tw-rounded-sm focus:tw-ring-0 disabled:tw-pointer-events-none';
|
|
13
|
+
const baseClassesByVariant = {
|
|
14
|
+
'outline': 'tw-border-solid tw-border',
|
|
15
|
+
'theme': 'disabled:tw-bg-opacity-50',
|
|
16
|
+
'danger': 'tw-bg-sq-danger-color hover:tw-bg-sq-danger-color-hover disabled:tw-bg-opacity-50',
|
|
17
|
+
'theme-light': 'disabled:tw-bg-opacity-50',
|
|
18
|
+
'no-border': '',
|
|
19
|
+
'warning': 'tw-bg-sq-warning-color',
|
|
20
|
+
};
|
|
21
|
+
const textClassesByVariantLightTheme = {
|
|
22
|
+
'outline': 'tw-text-sq-text-color',
|
|
23
|
+
'theme': 'tw-text-white',
|
|
24
|
+
'theme-light': 'tw-text-white',
|
|
25
|
+
'danger': 'tw-text-white',
|
|
26
|
+
'no-border': 'tw-text-sq-text-color',
|
|
27
|
+
'warning': 'tw-text-white',
|
|
28
|
+
};
|
|
29
|
+
const textClassesByVariantDarkTheme = {
|
|
30
|
+
'outline': 'dark:tw-text-sq-dark-text',
|
|
31
|
+
'theme': 'dark:tw-text-white',
|
|
32
|
+
'theme-light': 'dark:tw-text-white',
|
|
33
|
+
'danger': 'dark:tw-text-white',
|
|
34
|
+
'no-border': 'dark:tw-text-sq-dark-text',
|
|
35
|
+
'warning': 'dark:tw-text-white',
|
|
36
|
+
};
|
|
37
|
+
const classesByVariantLightTheme = {
|
|
38
|
+
'outline': 'tw-border-sq-disabled-gray hover:tw-bg-sq-light-gray' +
|
|
39
|
+
' focus:tw-bg-sq-dark-gray active:tw-bg-sq-dark-gray focus:tw-border-sq-color-dark active:tw-border-sq-color-dark',
|
|
40
|
+
'theme': 'tw-bg-sq-color-dark hover:tw-bg-sq-color-highlight',
|
|
41
|
+
'danger': '',
|
|
42
|
+
'theme-light': 'tw-bg-sq-icon hover:tw-bg-sq-link',
|
|
43
|
+
'no-border': '',
|
|
44
|
+
'warning': 'tw-bg-sq-warning-color',
|
|
45
|
+
};
|
|
46
|
+
const classesByVariantDarkTheme = {
|
|
47
|
+
'outline': 'dark:tw-border-sq-dark-disabled-gray dark:hover:tw-bg-sq-highlight-color-dark' +
|
|
48
|
+
' dark:focus:tw-bg-sq-dark-gray dark:active:tw-bg-sq-dark-gray dark:focus:tw-border-sq-color-dark' +
|
|
49
|
+
' dark:active:tw-border-sq-color-dark',
|
|
50
|
+
'theme': 'dark:tw-bg-sq-color-dark dark:hover:tw-bg-sq-color-highlight',
|
|
51
|
+
'danger': '',
|
|
52
|
+
'theme-light': 'dark:tw-bg-sq-icon-dark dark:hover:tw-bg-sq-link-dark',
|
|
53
|
+
'no-border': '',
|
|
54
|
+
'warning': '',
|
|
55
|
+
};
|
|
56
|
+
const sizeClasses = {
|
|
57
|
+
sm: 'tw-text-sm',
|
|
58
|
+
lg: 'tw-text-xl',
|
|
59
|
+
};
|
|
60
|
+
const appliedClasses = `${baseClasses} ${baseClassesByVariant[variant]} ${sizeClasses[size]} ${classesByVariantLightTheme[variant]} ${classesByVariantDarkTheme[variant]} ${textClassesByVariantLightTheme[variant]} ${textClassesByVariantDarkTheme[variant]} ${extraClassNames}`;
|
|
61
|
+
const button = (React.createElement("button", { id: id, disabled: disabled, "data-testid": testId, type: type === 'link' || (type === 'submit' && browserIsFirefox) ? 'button' : type, onClick: (e) => {
|
|
62
|
+
stopPropagation && e.stopPropagation();
|
|
63
|
+
onClick && onClick();
|
|
64
|
+
}, className: appliedClasses },
|
|
65
|
+
icon && (React.createElement(Icon, { icon: icon, type: iconStyle, color: iconColor, extraClassNames: label ?
|
|
66
|
+
`tw-mr-1 ${textClassesByVariantLightTheme[variant]} ${textClassesByVariantDarkTheme[variant]}` : '', testId: `${id}_spinner` })),
|
|
67
|
+
label));
|
|
68
|
+
return tooltip ? (React.createElement(Tooltip, { text: tooltip, ...tooltipOptions }, button)) : (button);
|
|
69
|
+
};
|
|
70
|
+
export default Button;
|
|
71
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/Button/Button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ declare const _default: {
|
|
|
2
2
|
title: string;
|
|
3
3
|
};
|
|
4
4
|
export default _default;
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const InTopic: () => JSX.Element;
|
|
9
|
-
export declare const InAnalysis: () => JSX.Element;
|
|
5
|
+
export declare const AllButtonVariants: () => JSX.Element;
|
|
6
|
+
export declare const ButtonWithTooltip: () => JSX.Element;
|
|
7
|
+
export declare const ButtonWithIcon: () => JSX.Element;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Button from './Button';
|
|
3
|
+
import { buttonVariants } from './Button.types';
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Button',
|
|
6
|
+
};
|
|
7
|
+
export const AllButtonVariants = () => {
|
|
8
|
+
const renderAllVariations = () => (React.createElement(React.Fragment, null, buttonVariants.map((variant) => (React.createElement("div", { key: `{variant_${variant}`, className: "tw-grid tw-grid-cols-2 tw-gap-4" },
|
|
9
|
+
React.createElement("div", { className: "tw-p-4" },
|
|
10
|
+
React.createElement(Button, { label: `Variant: ${variant}`, onClick: () => { }, variant: variant })),
|
|
11
|
+
React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background" },
|
|
12
|
+
React.createElement(Button, { label: `Variant: ${variant}`, onClick: () => { }, variant: variant })))))));
|
|
13
|
+
return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
|
|
14
|
+
React.createElement("div", { className: "color_topic" },
|
|
15
|
+
React.createElement("b", null, "Topic Colors"),
|
|
16
|
+
renderAllVariations()),
|
|
17
|
+
React.createElement("div", { className: "color_analysis" },
|
|
18
|
+
React.createElement("b", null, "Analysis Colors"),
|
|
19
|
+
renderAllVariations()),
|
|
20
|
+
React.createElement("div", { className: "color_datalab" },
|
|
21
|
+
React.createElement("b", null, "Datalab Colors"),
|
|
22
|
+
renderAllVariations())));
|
|
23
|
+
};
|
|
24
|
+
export const ButtonWithTooltip = () => {
|
|
25
|
+
const renderButtonWithTooltip = () => (React.createElement(React.Fragment, null,
|
|
26
|
+
React.createElement("div", { className: "tw-p-4" },
|
|
27
|
+
React.createElement(Button, { tooltip: "Helpful tooltip", variant: "theme", label: "Hover me" })),
|
|
28
|
+
React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background" },
|
|
29
|
+
React.createElement(Button, { tooltip: "Helpful tooltip", variant: "theme", label: "Hover me" }))));
|
|
30
|
+
return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
|
|
31
|
+
React.createElement("div", { className: "color_topic" },
|
|
32
|
+
React.createElement("b", null, "Topic Colors"),
|
|
33
|
+
renderButtonWithTooltip()),
|
|
34
|
+
React.createElement("div", { className: "color_analysis" },
|
|
35
|
+
React.createElement("b", null, "Analysis Colors"),
|
|
36
|
+
renderButtonWithTooltip()),
|
|
37
|
+
React.createElement("div", { className: "color_datalab" },
|
|
38
|
+
React.createElement("b", null, "Datalab Colors"),
|
|
39
|
+
renderButtonWithTooltip())));
|
|
40
|
+
};
|
|
41
|
+
export const ButtonWithIcon = () => {
|
|
42
|
+
const renderButtonWithIcon = () => (React.createElement(React.Fragment, null,
|
|
43
|
+
React.createElement("div", { className: "tw-p-4" },
|
|
44
|
+
React.createElement(Button, { icon: "fc-search-power", variant: "theme", label: "With Icon" })),
|
|
45
|
+
React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background" },
|
|
46
|
+
React.createElement(Button, { icon: "fc-search-power", variant: "theme", label: "With Icon" }))));
|
|
47
|
+
return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
|
|
48
|
+
React.createElement("div", { className: "color_topic" },
|
|
49
|
+
React.createElement("b", null, "Topic Colors"),
|
|
50
|
+
renderButtonWithIcon()),
|
|
51
|
+
React.createElement("div", { className: "color_analysis" },
|
|
52
|
+
React.createElement("b", null, "Analysis Colors"),
|
|
53
|
+
renderButtonWithIcon()),
|
|
54
|
+
React.createElement("div", { className: "color_datalab" },
|
|
55
|
+
React.createElement("b", null, "Datalab Colors"),
|
|
56
|
+
renderButtonWithIcon())));
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=Button.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.stories.js","sourceRoot":"","sources":["../../src/Button/Button.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import '@testing-library/jest-dom';
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import userEvent from '@testing-library/user-event';
|
|
5
|
+
import Button from './Button';
|
|
6
|
+
describe('Button', () => {
|
|
7
|
+
class Context {
|
|
8
|
+
testId = 'buttonTestId';
|
|
9
|
+
label = 'button label';
|
|
10
|
+
props = {
|
|
11
|
+
label: this.label,
|
|
12
|
+
onClick: jest.fn(),
|
|
13
|
+
testId: this.testId,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
let tc;
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
tc = new Context();
|
|
19
|
+
});
|
|
20
|
+
const renderButton = (props) => render(React.createElement(Button, { ...props }));
|
|
21
|
+
it('renders button label', () => {
|
|
22
|
+
renderButton(tc.props);
|
|
23
|
+
expect(screen.getByText(tc.label)).toBeInTheDocument();
|
|
24
|
+
});
|
|
25
|
+
it('calls on click', async () => {
|
|
26
|
+
renderButton(tc.props);
|
|
27
|
+
await userEvent.click(screen.getByTestId(tc.testId));
|
|
28
|
+
expect(tc.props.onClick).toHaveBeenCalled();
|
|
29
|
+
});
|
|
30
|
+
it('renders disabled button', () => {
|
|
31
|
+
renderButton({ ...tc.props, disabled: true });
|
|
32
|
+
expect(screen.getByText(tc.label)).toBeDisabled();
|
|
33
|
+
});
|
|
34
|
+
it('respects stopPropagation default', async () => {
|
|
35
|
+
const callOnPropagation = jest.fn();
|
|
36
|
+
render(React.createElement("div", { onClick: callOnPropagation },
|
|
37
|
+
React.createElement(Button, { ...tc.props })));
|
|
38
|
+
await userEvent.click(screen.getByTestId(tc.testId));
|
|
39
|
+
expect(callOnPropagation).not.toHaveBeenCalled();
|
|
40
|
+
});
|
|
41
|
+
it('propagates click event if not told not to', async () => {
|
|
42
|
+
const callOnPropagation = jest.fn();
|
|
43
|
+
render(React.createElement("div", { onClick: callOnPropagation },
|
|
44
|
+
React.createElement(Button, { ...{ ...tc.props, stopPropagation: false } })));
|
|
45
|
+
await userEvent.click(screen.getByTestId(tc.testId));
|
|
46
|
+
expect(callOnPropagation).toHaveBeenCalled();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=Button.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.test.js","sourceRoot":"","sources":["../../src/Button/Button.test.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,SAAS,MAAM,6BAA6B,CAAC;AAEpD,OAAO,MAAM,MAAM,UAAU,CAAC;AAG9B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,MAAM,OAAO;QACX,MAAM,GAAG,cAAc,CAAC;QACxB,KAAK,GAAG,cAAc,CAAC;QACvB,KAAK,GAAgB;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;IAED,IAAI,EAAW,CAAC;IAChB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAC,MAAM,OAAK,KAAK,GAAI,CAAC,CAAC;IAE3E,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CACJ,6BAAK,OAAO,EAAE,iBAAiB;YAC7B,oBAAC,MAAM,OAAK,EAAE,CAAC,KAAK,GAAI,CACpB,CACP,CAAC;QACF,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CACJ,6BAAK,OAAO,EAAE,iBAAiB;YAC7B,oBAAC,MAAM,OAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,GAAI,CACnD,CACP,CAAC;QACF,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
import { TooltipProps } from '../Tooltip/Tooltip.types';
|
|
2
|
+
import { IconType } from '../Icon/Icon.types';
|
|
3
|
+
export declare const buttonTypes: readonly ["button", "reset", "submit", "link"];
|
|
4
|
+
export declare const buttonSizes: readonly ["sm", "lg"];
|
|
5
|
+
export declare const buttonVariants: readonly ["outline", "theme", "theme-light", "warning", "danger", "no-border"];
|
|
6
|
+
export type ButtonType = typeof buttonTypes[number];
|
|
7
|
+
export type ButtonSize = typeof buttonSizes[number];
|
|
8
|
+
export type ButtonVariant = typeof buttonVariants[number];
|
|
4
9
|
export interface ButtonProps {
|
|
5
10
|
/** function to call when clicking the button (takes no parameters) */
|
|
6
11
|
onClick?: () => any;
|
|
7
12
|
/** label translation key on the button (i.e. SUBMIT) */
|
|
8
|
-
label?: string;
|
|
13
|
+
label?: string | JSX.Element | React.ReactNode;
|
|
9
14
|
variant?: ButtonVariant;
|
|
10
15
|
/** type of button (i.e button/submit/reset, default is button) */
|
|
11
16
|
type?: ButtonType;
|
|
@@ -15,10 +20,20 @@ export interface ButtonProps {
|
|
|
15
20
|
disabled?: boolean;
|
|
16
21
|
/** extra class names to be placed on the Icon component */
|
|
17
22
|
extraClassNames?: string;
|
|
23
|
+
/** icon class to be used if an icon should go before the text (i.e. fc-zoom) */
|
|
24
|
+
icon?: string;
|
|
25
|
+
/** icon color option (text, white, theme, color, default is "text") */
|
|
26
|
+
iconStyle?: IconType;
|
|
27
|
+
/** color of the icon if it is custom (required if iconStyle is "color") */
|
|
28
|
+
iconColor?: string;
|
|
18
29
|
/** id to place on the button element */
|
|
19
30
|
id?: string;
|
|
20
31
|
/** id that will be used in the data-testid attribute on the button element */
|
|
21
32
|
testId?: string;
|
|
22
33
|
/** if false, will not stopPropagation onClick **/
|
|
23
34
|
stopPropagation?: boolean;
|
|
35
|
+
/** a tooltip for the button */
|
|
36
|
+
tooltip?: string;
|
|
37
|
+
/** options for the tooltip */
|
|
38
|
+
tooltipOptions?: Omit<TooltipProps, 'text'>;
|
|
24
39
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.types.js","sourceRoot":"","sources":["../../src/Button/Button.types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAC1E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import '../styles.css';
|
|
3
|
+
import { IconProps } from './Icon.types';
|
|
4
|
+
/**
|
|
5
|
+
* Icon:
|
|
6
|
+
* - access to Seeq custom icons by providing the desired icon
|
|
7
|
+
* - leverage "type" to style your icon
|
|
8
|
+
*/
|
|
9
|
+
declare const Icon: React.FunctionComponent<IconProps>;
|
|
10
|
+
export default Icon;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import '../styles.css';
|
|
3
|
+
import Tooltip from '../Tooltip';
|
|
4
|
+
/**
|
|
5
|
+
* Icon:
|
|
6
|
+
* - access to Seeq custom icons by providing the desired icon
|
|
7
|
+
* - leverage "type" to style your icon
|
|
8
|
+
*/
|
|
9
|
+
const Icon = ({ onClick, icon, type = 'theme', extraClassNames, id, large, small, color, testId, customId, tooltip, tooltipDelay, tooltipPlacement, number, hasExternalTooltipHandler = false, }) => {
|
|
10
|
+
if ((type === 'color' && (color === undefined || color === '')) || (color && type !== 'color')) {
|
|
11
|
+
const errorMessage = color === undefined || color === ''
|
|
12
|
+
? 'Icon with type="color" must have prop color specified.'
|
|
13
|
+
: 'Icon with prop color must have type="color".';
|
|
14
|
+
return React.createElement("div", { className: "tw-text-sq-danger-color" }, errorMessage);
|
|
15
|
+
}
|
|
16
|
+
const colorClassesThemeLight = {
|
|
17
|
+
'theme': 'tw-text-sq-color-dark',
|
|
18
|
+
'white': 'tw-text-white',
|
|
19
|
+
'dark-gray': 'tw-text-sq-fairly-dark-gray',
|
|
20
|
+
'warning': 'tw-text-sq-warning-color',
|
|
21
|
+
'darkish-gray': 'tw-text-sq-darkish-gray',
|
|
22
|
+
'gray': 'tw-text-sq-disabled-gray',
|
|
23
|
+
'color': '',
|
|
24
|
+
'info': 'tw-text-sq-link',
|
|
25
|
+
'text': 'tw-text-sq-text-color',
|
|
26
|
+
'inherit': '',
|
|
27
|
+
'danger': 'tw-text-sq-danger-color',
|
|
28
|
+
'theme-light': 'tw-text-sq-color-light',
|
|
29
|
+
'success': 'tw-text-sq-success-color',
|
|
30
|
+
};
|
|
31
|
+
const colorClassesThemeDark = {
|
|
32
|
+
'theme': 'dark:tw-text-sq-color-dark-dark',
|
|
33
|
+
'white': '',
|
|
34
|
+
'dark-gray': 'tw-text-sq-fairly-dark-gray',
|
|
35
|
+
'warning': '',
|
|
36
|
+
'darkish-gray': 'tw-text-sq-darkish-gray',
|
|
37
|
+
'gray': 'dark:tw-text-sq-dark-disabled-gray',
|
|
38
|
+
'color': '',
|
|
39
|
+
'info': 'dark:tw-text-sq-link-dark',
|
|
40
|
+
'text': 'dark:tw-text-sq-dark-text',
|
|
41
|
+
'inherit': '',
|
|
42
|
+
'danger': 'tw-text-sq-danger-color',
|
|
43
|
+
'theme-light': 'tw-text-sq-color-light',
|
|
44
|
+
'success': 'tw-text-sq-success-color',
|
|
45
|
+
};
|
|
46
|
+
const iconPrefix = icon.startsWith('fc') ? 'fc' : 'fa';
|
|
47
|
+
const style = type === 'color' && color ? { color } : {};
|
|
48
|
+
const appliedClassNames = `${iconPrefix} ${icon} ${small ? 'fa-sm' : ''} ${large ? 'fa-lg' : ''}
|
|
49
|
+
${colorClassesThemeLight[type]} ${colorClassesThemeDark[type]} ${onClick ? 'cursor-pointer' : ''} ${extraClassNames}`;
|
|
50
|
+
const iconTag = (React.createElement("i", { className: appliedClassNames, style: style, onClick: onClick, "data-testid": testId, "data-customid": customId, id: id, "data-number": number }));
|
|
51
|
+
return !hasExternalTooltipHandler && tooltip && tooltip !== '' ? (React.createElement(Tooltip, { text: tooltip, delay: tooltipDelay, position: tooltipPlacement }, iconTag)) : (iconTag);
|
|
52
|
+
};
|
|
53
|
+
export default Icon;
|
|
54
|
+
//# sourceMappingURL=Icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/Icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,CAAC;AAEvB,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC;;;;GAIG;AACH,MAAM,IAAI,GAAuC,CAAC,EAChD,OAAO,EACP,IAAI,EACJ,IAAI,GAAG,OAAO,EACd,eAAe,EACf,EAAE,EACF,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,yBAAyB,GAAG,KAAK,GAClC,EAAE,EAAE;IACH,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC,EAAE;QAC9F,MAAM,YAAY,GAChB,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;YACjC,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,8CAA8C,CAAC;QACrD,OAAO,6BAAK,SAAS,EAAC,yBAAyB,IAAE,YAAY,CAAO,CAAC;KACtE;IAED,MAAM,sBAAsB,GAAG;QAC7B,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,6BAA6B;QAC1C,SAAS,EAAE,0BAA0B;QACrC,cAAc,EAAE,yBAAyB;QACzC,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,uBAAuB;QAC/B,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,yBAAyB;QACnC,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,0BAA0B;KACtC,CAAC;IAEF,MAAM,qBAAqB,GAAG;QAC5B,OAAO,EAAE,iCAAiC;QAC1C,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,6BAA6B;QAC1C,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,yBAAyB;QACzC,MAAM,EAAE,oCAAoC;QAC5C,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,2BAA2B;QACnC,MAAM,EAAE,2BAA2B;QACnC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,yBAAyB;QACnC,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,0BAA0B;KACtC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,iBAAiB,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;IAC7F,sBAAsB,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;IAEtH,MAAM,OAAO,GAAG,CACd,2BACE,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,iBACH,MAAM,mBACJ,QAAQ,EACvB,EAAE,EAAE,EAAE,iBACO,MAAM,GACnB,CACH,CAAC;IAEF,OAAO,CAAC,yBAAyB,IAAI,OAAO,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAC/D,oBAAC,OAAO,IAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,IACpE,OAAO,CACA,CACX,CAAC,CAAC,CAAC,CACF,OAAO,CACR,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Icon from './Icon';
|
|
3
|
+
import { iconTypes } from './Icon.types';
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Icons',
|
|
6
|
+
};
|
|
7
|
+
export const AllIcons = () => {
|
|
8
|
+
const renderAllVariations = () => {
|
|
9
|
+
return (React.createElement(React.Fragment, null,
|
|
10
|
+
React.createElement("br", null),
|
|
11
|
+
React.createElement("br", null),
|
|
12
|
+
iconTypes.map((iconType) => {
|
|
13
|
+
return (React.createElement("div", { key: `${iconType}` },
|
|
14
|
+
React.createElement("b", null,
|
|
15
|
+
"type=",
|
|
16
|
+
iconType),
|
|
17
|
+
React.createElement("br", null),
|
|
18
|
+
React.createElement("div", null,
|
|
19
|
+
React.createElement(Icon, { icon: 'fc-announcements', small: true, extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? 'purple' : undefined }),
|
|
20
|
+
React.createElement(Icon, { icon: 'fc-announcements', extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? '#928378' : undefined }),
|
|
21
|
+
React.createElement(Icon, { icon: 'fc-announcements', large: true, extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? 'pink' : undefined })),
|
|
22
|
+
React.createElement("div", { className: "tw-dark tw-bg-sq-dark-background" },
|
|
23
|
+
React.createElement(Icon, { icon: 'fc-announcements', small: true, extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? 'purple' : undefined }),
|
|
24
|
+
React.createElement(Icon, { icon: 'fc-announcements', extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? '#928378' : undefined }),
|
|
25
|
+
React.createElement(Icon, { icon: 'fc-announcements', large: true, extraClassNames: 'tw-p-2', type: iconType, color: iconType === 'color' ? 'pink' : undefined })),
|
|
26
|
+
React.createElement("br", null)));
|
|
27
|
+
})));
|
|
28
|
+
};
|
|
29
|
+
return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
|
|
30
|
+
React.createElement("div", { className: "color_topic" },
|
|
31
|
+
React.createElement("b", null, "Topic Colors"),
|
|
32
|
+
renderAllVariations()),
|
|
33
|
+
React.createElement("div", { className: "color_analysis" },
|
|
34
|
+
React.createElement("b", null, "Analysis Colors"),
|
|
35
|
+
renderAllVariations()),
|
|
36
|
+
React.createElement("div", { className: "color_datalab" },
|
|
37
|
+
React.createElement("b", null, "Datalab Colors"),
|
|
38
|
+
renderAllVariations())));
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=Icon.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.stories.js","sourceRoot":"","sources":["../../src/Icon/Icon.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAe;IACb,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,OAAO,CACL;YACE,+BAAM;YACN,+BAAM;YACL,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC1B,OAAO,CACL,6BAAK,GAAG,EAAE,GAAG,QAAQ,EAAE;oBACrB;;wBAAS,QAAQ,CAAK;oBACtB,+BAAM;oBACN;wBACE,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,IAAI,EACX,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAClD;wBACF,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GACnD;wBACF,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,IAAI,EACX,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAChD,CACE;oBACN,6BAAK,SAAS,EAAC,kCAAkC;wBAC/C,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,IAAI,EACX,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAClD;wBACF,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GACnD;wBACF,oBAAC,IAAI,IACH,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,IAAI,EACX,eAAe,EAAE,QAAQ,EACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAChD,CACE;oBACN,+BAAM,CACF,CACP,CAAC;YACJ,CAAC,CAAC,CACD,CACJ,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CACL,6BAAK,SAAS,EAAC,iCAAiC;QAC9C,6BAAK,SAAS,EAAC,aAAa;YAC1B,8CAAmB;YAClB,mBAAmB,EAAE,CAClB;QAEN,6BAAK,SAAS,EAAC,gBAAgB;YAC7B,iDAAsB;YACrB,mBAAmB,EAAE,CAClB;QAEN,6BAAK,SAAS,EAAC,eAAe;YAC5B,gDAAqB;YACpB,mBAAmB,EAAE,CAClB,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import '@testing-library/jest-dom';
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import Icon from './Icon';
|
|
5
|
+
describe('Icon', () => {
|
|
6
|
+
class Context {
|
|
7
|
+
testId = 'iconTestId';
|
|
8
|
+
icon = 'testIcon';
|
|
9
|
+
props = {
|
|
10
|
+
icon: this.icon,
|
|
11
|
+
onClick: jest.fn(),
|
|
12
|
+
testId: this.testId,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
let tc;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
tc = new Context();
|
|
18
|
+
});
|
|
19
|
+
const renderIcon = (props) => render(React.createElement(Icon, { ...props }));
|
|
20
|
+
it('renders icon', () => {
|
|
21
|
+
renderIcon(tc.props);
|
|
22
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass(tc.icon);
|
|
23
|
+
});
|
|
24
|
+
it('renders large icon', () => {
|
|
25
|
+
renderIcon({ ...tc.props, large: true });
|
|
26
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass('fa-lg');
|
|
27
|
+
});
|
|
28
|
+
it('renders small icon', () => {
|
|
29
|
+
renderIcon({ ...tc.props, small: true });
|
|
30
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass('fa-sm');
|
|
31
|
+
});
|
|
32
|
+
describe('icon types', () => {
|
|
33
|
+
it('renders the theme type by default', () => {
|
|
34
|
+
renderIcon(tc.props);
|
|
35
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass('tw-text-sq-color-dark');
|
|
36
|
+
});
|
|
37
|
+
it('renders the white icon', () => {
|
|
38
|
+
renderIcon({ ...tc.props, type: 'white' });
|
|
39
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass('tw-text-white');
|
|
40
|
+
});
|
|
41
|
+
it('renders the text-type icon', () => {
|
|
42
|
+
renderIcon({ ...tc.props, type: 'text' });
|
|
43
|
+
expect(screen.getByTestId(tc.testId)).toHaveClass('tw-text-sq-text-color');
|
|
44
|
+
});
|
|
45
|
+
it('renders the color-type icon', () => {
|
|
46
|
+
renderIcon({ ...tc.props, type: 'color', color: '#AABBFF' });
|
|
47
|
+
expect(screen.getByTestId(tc.testId)).toHaveStyle('color: #AABBFF');
|
|
48
|
+
});
|
|
49
|
+
it('renders a warning if type=color and no color is provided', () => {
|
|
50
|
+
renderIcon({ ...tc.props, type: 'color' });
|
|
51
|
+
expect(screen.getByText('Icon with type="color" must have prop color specified.')).toBeInTheDocument();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=Icon.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.test.js","sourceRoot":"","sources":["../../src/Icon/Icon.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TooltipPosition } from '../Tooltip/Tooltip.types';
|
|
2
|
+
export declare const iconTypes: readonly ["theme", "white", "dark-gray", "darkish-gray", "gray", "color", "info", "text", "warning", "inherit", "danger", "theme-light", "success"];
|
|
3
|
+
export type IconType = typeof iconTypes[number];
|
|
4
|
+
export interface IconProps {
|
|
5
|
+
/** icon class to be used (i.e. fc-zoom) */
|
|
6
|
+
icon: string;
|
|
7
|
+
/** icon color option (text, white, theme, color, inherit; default is "theme") */
|
|
8
|
+
type?: IconType;
|
|
9
|
+
/** used to add a custom color to the icon (required if type="color") */
|
|
10
|
+
color?: string;
|
|
11
|
+
/** function to call when clicking the icon (takes no parameters) */
|
|
12
|
+
onClick?: (e?: React.MouseEvent<HTMLElement, MouseEvent>) => any;
|
|
13
|
+
/** extra class names to be placed on the Icon component */
|
|
14
|
+
extraClassNames?: string;
|
|
15
|
+
/** id that can be placed on the Icon component */
|
|
16
|
+
id?: string;
|
|
17
|
+
/** true to add the 'fa-lg' class to the icon */
|
|
18
|
+
large?: boolean;
|
|
19
|
+
/** true to add the 'fa-sm' class to the icon */
|
|
20
|
+
small?: boolean;
|
|
21
|
+
/** id that will be used in the data-testid attribute on the icon */
|
|
22
|
+
testId?: string;
|
|
23
|
+
/** id that will be used in the data-customid attribute on the icon.
|
|
24
|
+
* Can be used to identify the icon as the click event target in an event handler */
|
|
25
|
+
customId?: string;
|
|
26
|
+
/** text to display on icon tooltip */
|
|
27
|
+
tooltip?: string;
|
|
28
|
+
/** formatted text to display on icon tooltip */
|
|
29
|
+
formattedTooltip?: any;
|
|
30
|
+
/** number of milliseconds to wait before showing a tooltip on-hover */
|
|
31
|
+
tooltipDelay?: number;
|
|
32
|
+
tooltipPlacement?: TooltipPosition;
|
|
33
|
+
number?: number;
|
|
34
|
+
/** set this to true if the icon is inside a <SingletonTooltip> element. In this case the tooltip and placement
|
|
35
|
+
* information will be passed on as data attributes and a singleton tooltip element will be reused for this icon.
|
|
36
|
+
* This is recommended for improved performance when there are many icons with tooltips. */
|
|
37
|
+
hasExternalTooltipHandler?: boolean;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icon.types.js","sourceRoot":"","sources":["../../src/Icon/Icon.types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO;IACP,OAAO;IACP,WAAW;IACX,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;IACR,aAAa;IACb,SAAS;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Icon';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC"}
|