@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.
Files changed (67) hide show
  1. package/README.md +33 -13
  2. package/dist/Button/Button.d.ts +5 -0
  3. package/dist/Button/Button.js +71 -0
  4. package/dist/Button/Button.js.map +1 -0
  5. package/dist/Button/Button.stories.d.ts +3 -5
  6. package/dist/Button/Button.stories.js +58 -0
  7. package/dist/Button/Button.stories.js.map +1 -0
  8. package/dist/Button/Button.test.js +49 -0
  9. package/dist/Button/Button.test.js.map +1 -0
  10. package/dist/Button/Button.types.d.ts +19 -4
  11. package/dist/Button/Button.types.js +4 -0
  12. package/dist/Button/Button.types.js.map +1 -0
  13. package/dist/Button/index.js +2 -0
  14. package/dist/Button/index.js.map +1 -0
  15. package/dist/FontCustom.woff +0 -0
  16. package/dist/FontCustom.woff2 +0 -0
  17. package/dist/Icon/Icon.d.ts +10 -0
  18. package/dist/Icon/Icon.js +54 -0
  19. package/dist/Icon/Icon.js.map +1 -0
  20. package/dist/Icon/Icon.stories.d.ts +5 -0
  21. package/dist/Icon/Icon.stories.js +40 -0
  22. package/dist/Icon/Icon.stories.js.map +1 -0
  23. package/dist/Icon/Icon.test.d.ts +1 -0
  24. package/dist/Icon/Icon.test.js +55 -0
  25. package/dist/Icon/Icon.test.js.map +1 -0
  26. package/dist/Icon/Icon.types.d.ts +38 -0
  27. package/dist/Icon/Icon.types.js +16 -0
  28. package/dist/Icon/Icon.types.js.map +1 -0
  29. package/dist/Icon/index.d.ts +1 -0
  30. package/dist/Icon/index.js +2 -0
  31. package/dist/Icon/index.js.map +1 -0
  32. package/dist/TextField/TextField.d.ts +7 -0
  33. package/dist/TextField/TextField.js +47 -0
  34. package/dist/TextField/TextField.js.map +1 -0
  35. package/dist/TextField/TextField.stories.d.ts +5 -0
  36. package/dist/TextField/TextField.stories.js +33 -0
  37. package/dist/TextField/TextField.stories.js.map +1 -0
  38. package/dist/TextField/TextField.test.d.ts +1 -0
  39. package/dist/TextField/TextField.test.js +35 -0
  40. package/dist/TextField/TextField.test.js.map +1 -0
  41. package/dist/TextField/TextField.types.d.ts +16 -0
  42. package/dist/TextField/TextField.types.js +2 -0
  43. package/dist/TextField/TextField.types.js.map +1 -0
  44. package/dist/TextField/index.d.ts +1 -0
  45. package/dist/TextField/index.js +2 -0
  46. package/dist/TextField/index.js.map +1 -0
  47. package/dist/Tooltip/Tooltip.d.ts +7 -0
  48. package/dist/Tooltip/Tooltip.js +30 -0
  49. package/dist/Tooltip/Tooltip.js.map +1 -0
  50. package/dist/Tooltip/Tooltip.stories.d.ts +5 -0
  51. package/dist/Tooltip/Tooltip.stories.js +32 -0
  52. package/dist/Tooltip/Tooltip.stories.js.map +1 -0
  53. package/dist/Tooltip/Tooltip.types.d.ts +9 -0
  54. package/dist/Tooltip/Tooltip.types.js +3 -0
  55. package/dist/Tooltip/Tooltip.types.js.map +1 -0
  56. package/dist/Tooltip/index.d.ts +1 -0
  57. package/dist/Tooltip/index.js +2 -0
  58. package/dist/Tooltip/index.js.map +1 -0
  59. package/dist/index.d.ts +6 -0
  60. package/dist/index.esm.js +182 -15
  61. package/dist/index.esm.js.map +1 -1
  62. package/dist/index.js +183 -13
  63. package/dist/index.js.map +1 -1
  64. package/dist/styles.css +1732 -181
  65. package/dist/utils/browserId.js +29 -0
  66. package/dist/utils/browserId.js.map +1 -0
  67. package/package.json +3 -1
package/README.md CHANGED
@@ -1,28 +1,48 @@
1
- # Seeq Qomponents - UNDER CONSTRUCTION
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
- Don't forget to add the component to your `index.ts` exports if you want the library to export the component!
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
- To develop a qomponent and use the benefits of hot-reload for quick preview you can run:
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
- This will start Ladle and watch for changes in the qomponents directory.
17
+ Seeq qomponents are available on npm.
14
18
 
15
- ### Testing
19
+ **npm:**
16
20
 
21
+ ```sh
22
+ npm install @seeqdev/qomponents
17
23
  ```
18
- npm run test
24
+
25
+ **yarn:**
26
+
27
+ ```sh
28
+ yarn add @seeqdev/qomponents
19
29
  ```
20
30
 
21
- ... or IntelliJ
31
+ ## Getting started with Seeq qomponents
22
32
 
23
- ### Building
33
+ Here is an example of a basic app using the `Button` component:
24
34
 
25
- Builds happen via gradle.
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
+ ```
@@ -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 AllButtons: () => JSX.Element;
6
- export declare const WithShortText: () => JSX.Element;
7
- export declare const WithLongText: () => JSX.Element;
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
- export type ButtonType = 'button' | 'reset' | 'submit' | 'link';
2
- export type ButtonSize = 'sm' | 'lg';
3
- export type ButtonVariant = 'outline' | 'theme' | 'warning' | 'danger' | 'no-border' | 'theme-light';
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,4 @@
1
+ export const buttonTypes = ['button', 'reset', 'submit', 'link'];
2
+ export const buttonSizes = ['sm', 'lg'];
3
+ export const buttonVariants = ['outline', 'theme', 'theme-light', 'warning', 'danger', 'no-border'];
4
+ //# sourceMappingURL=Button.types.js.map
@@ -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,2 @@
1
+ export { default } from "./Button";
2
+ //# sourceMappingURL=index.js.map
@@ -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":"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"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ title: string;
3
+ };
4
+ export default _default;
5
+ export declare const AllIcons: () => JSX.Element;
@@ -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,16 @@
1
+ export const iconTypes = [
2
+ 'theme',
3
+ 'white',
4
+ 'dark-gray',
5
+ 'darkish-gray',
6
+ 'gray',
7
+ 'color',
8
+ 'info',
9
+ 'text',
10
+ 'warning',
11
+ 'inherit',
12
+ 'danger',
13
+ 'theme-light',
14
+ 'success',
15
+ ];
16
+ //# sourceMappingURL=Icon.types.js.map
@@ -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,2 @@
1
+ export { default } from './Icon';
2
+ //# sourceMappingURL=index.js.map
@@ -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"}