@seeqdev/qomponents 0.0.41 → 0.0.43

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 (83) hide show
  1. package/README.md +135 -135
  2. package/dist/Button/Button.js +86 -86
  3. package/dist/Button/Button.stories.js +76 -76
  4. package/dist/Button/Button.test.js +48 -48
  5. package/dist/Button/Button.types.js +3 -3
  6. package/dist/Button/index.js +1 -1
  7. package/dist/Checkbox/Checkbox.js +23 -23
  8. package/dist/Checkbox/Checkbox.stories.js +31 -31
  9. package/dist/Checkbox/Checkbox.test.js +93 -93
  10. package/dist/Checkbox/Checkbox.types.js +1 -1
  11. package/dist/Checkbox/index.js +1 -1
  12. package/dist/FontCustom.woff +0 -0
  13. package/dist/FontCustom.woff2 +0 -0
  14. package/dist/Icon/Icon.js +62 -62
  15. package/dist/Icon/Icon.stories.js +39 -39
  16. package/dist/Icon/Icon.test.js +54 -54
  17. package/dist/Icon/Icon.types.js +15 -15
  18. package/dist/Icon/index.js +1 -1
  19. package/dist/Select/Select.js +167 -167
  20. package/dist/Select/Select.stories.js +71 -71
  21. package/dist/Select/Select.test.js +160 -160
  22. package/dist/Select/Select.types.js +1 -1
  23. package/dist/Select/index.js +1 -1
  24. package/dist/Tabs/Tabs.d.ts +4 -0
  25. package/dist/Tabs/Tabs.js +23 -0
  26. package/dist/Tabs/Tabs.js.map +1 -0
  27. package/dist/Tabs/Tabs.stories.d.ts +5 -0
  28. package/dist/Tabs/Tabs.stories.js +63 -0
  29. package/dist/Tabs/Tabs.stories.js.map +1 -0
  30. package/dist/Tabs/Tabs.test.d.ts +1 -0
  31. package/dist/Tabs/Tabs.test.js +91 -0
  32. package/dist/Tabs/Tabs.test.js.map +1 -0
  33. package/dist/Tabs/Tabs.types.d.ts +18 -0
  34. package/dist/Tabs/Tabs.types.js +2 -0
  35. package/dist/Tabs/Tabs.types.js.map +1 -0
  36. package/dist/Tabs/index.d.ts +1 -0
  37. package/dist/Tabs/index.js +2 -0
  38. package/dist/Tabs/index.js.map +1 -0
  39. package/dist/TextArea/TextArea.js +22 -22
  40. package/dist/TextArea/TextArea.stories.js +38 -38
  41. package/dist/TextArea/TextArea.test.js +67 -67
  42. package/dist/TextArea/TextArea.types.js +1 -1
  43. package/dist/TextArea/index.js +1 -1
  44. package/dist/TextField/TextField.js +63 -63
  45. package/dist/TextField/TextField.stories.js +40 -40
  46. package/dist/TextField/TextField.test.js +34 -34
  47. package/dist/TextField/TextField.types.js +1 -1
  48. package/dist/TextField/index.js +1 -1
  49. package/dist/ToolbarButton/ToolbarButton.js +73 -73
  50. package/dist/ToolbarButton/ToolbarButton.stories.js +78 -78
  51. package/dist/ToolbarButton/ToolbarButton.test.js +92 -92
  52. package/dist/ToolbarButton/ToolbarButton.types.js +1 -1
  53. package/dist/ToolbarButton/index.js +1 -1
  54. package/dist/Tooltip/QTip.stories.js +39 -39
  55. package/dist/Tooltip/QTip.types.js +1 -1
  56. package/dist/Tooltip/QTipPerformance.stories.js +29 -29
  57. package/dist/Tooltip/Qtip.js +147 -147
  58. package/dist/Tooltip/Tooltip.js +35 -35
  59. package/dist/Tooltip/Tooltip.stories.js +31 -31
  60. package/dist/Tooltip/Tooltip.types.js +2 -2
  61. package/dist/Tooltip/TooltipPerformance.stories.js +29 -29
  62. package/dist/Tooltip/index.js +2 -2
  63. package/dist/example/.eslintrc.cjs +14 -14
  64. package/dist/example/README.md +33 -33
  65. package/dist/example/index.html +13 -13
  66. package/dist/example/package.json +30 -30
  67. package/dist/example/src/ComplexSelectExample.tsx +81 -81
  68. package/dist/example/src/Example.tsx +167 -167
  69. package/dist/example/src/index.css +102 -102
  70. package/dist/example/src/main.tsx +10 -10
  71. package/dist/example/src/vite-env.d.ts +1 -1
  72. package/dist/example/tsconfig.json +33 -33
  73. package/dist/example/tsconfig.node.json +12 -12
  74. package/dist/example/vite.config.ts +12 -12
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.esm.js +486 -7
  77. package/dist/index.esm.js.map +1 -1
  78. package/dist/index.js +486 -6
  79. package/dist/index.js.map +1 -1
  80. package/dist/styles.css +2730 -2644
  81. package/dist/types.js +1 -1
  82. package/dist/utils/browserId.js +28 -28
  83. package/package.json +80 -79
@@ -1,35 +1,35 @@
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 { TextField } from './TextField';
6
- describe('TextField', () => {
7
- class Context {
8
- testId = 'textFieldTestId';
9
- props = {
10
- onChange: jest.fn(),
11
- testId: this.testId,
12
- };
13
- }
14
- let tc;
15
- beforeEach(() => {
16
- tc = new Context();
17
- });
18
- const renderTextField = (props) => render(React.createElement(TextField, { ...props }));
19
- it('renders the provided value', () => {
20
- const value = 'hello';
21
- renderTextField({ ...tc.props, value });
22
- expect(screen.getByDisplayValue(value)).toBeInTheDocument();
23
- });
24
- it('renders the provided placeholder', () => {
25
- const placeholder = 'Prompt to enter';
26
- renderTextField({ ...tc.props, placeholder });
27
- expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument();
28
- });
29
- it('calls onChange handler', async () => {
30
- renderTextField({ ...tc.props });
31
- await userEvent.type(screen.getByTestId(tc.testId), 'trigger');
32
- expect(tc.props.onChange).toHaveBeenCalled();
33
- });
34
- });
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 { TextField } from './TextField';
6
+ describe('TextField', () => {
7
+ class Context {
8
+ testId = 'textFieldTestId';
9
+ props = {
10
+ onChange: jest.fn(),
11
+ testId: this.testId,
12
+ };
13
+ }
14
+ let tc;
15
+ beforeEach(() => {
16
+ tc = new Context();
17
+ });
18
+ const renderTextField = (props) => render(React.createElement(TextField, { ...props }));
19
+ it('renders the provided value', () => {
20
+ const value = 'hello';
21
+ renderTextField({ ...tc.props, value });
22
+ expect(screen.getByDisplayValue(value)).toBeInTheDocument();
23
+ });
24
+ it('renders the provided placeholder', () => {
25
+ const placeholder = 'Prompt to enter';
26
+ renderTextField({ ...tc.props, placeholder });
27
+ expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument();
28
+ });
29
+ it('calls onChange handler', async () => {
30
+ renderTextField({ ...tc.props });
31
+ await userEvent.type(screen.getByTestId(tc.testId), 'trigger');
32
+ expect(tc.props.onChange).toHaveBeenCalled();
33
+ });
34
+ });
35
35
  //# sourceMappingURL=TextField.test.js.map
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=TextField.types.js.map
@@ -1,2 +1,2 @@
1
- export { TextField as default } from './TextField';
1
+ export { TextField as default } from './TextField';
2
2
  //# sourceMappingURL=index.js.map
@@ -1,74 +1,74 @@
1
- import * as React from 'react';
2
- import * as PopoverPrimitive from '@radix-ui/react-popover';
3
- import Icon from '../Icon';
4
- import { DEFAULT_TOOL_TIP_DELAY } from '../Tooltip/Tooltip.types';
5
- const borderStyles = [
6
- 'tw-border-solid',
7
- 'tw-border',
8
- 'tw-rounded-sm',
9
- 'hover:tw-border-sq-light-gray',
10
- 'focus:tw-border-sq-light-gray',
11
- 'active:tw-border-sq-sq-light-gray',
12
- 'dark:hover:tw-border-sq-color-dark-dark',
13
- 'dark:focus:tw-border-sq-color-dark-dark',
14
- 'dark:active:tw-border-sq-color-dark-dark',
15
- ].join(' ');
16
- const triggerBorderStyles = [
17
- 'tw-border-solid',
18
- 'tw-border',
19
- 'tw-rounded-sm',
20
- 'tw-border-transparent',
21
- 'hover:tw-border-solid',
22
- 'hover:tw-border',
23
- 'hover:tw-rounded-sm',
24
- 'hover:tw-border-sq-darkish-gray',
25
- 'active:tw-border-sq-color-dark',
26
- 'dark:hover:tw-border-sq-color-dark-dark',
27
- 'dark:focus:tw-border-sq-color-dark-dark',
28
- 'dark:active:tw-border-sq-color-dark-dark',
29
- ].join(' ');
30
- const activeBorderStyles = [
31
- 'active',
32
- 'tw-border-solid',
33
- 'tw-border',
34
- 'tw-rounded-sm',
35
- 'tw-border-sq-color-dark',
36
- 'active:tw-border-sq-color-dark',
37
- 'dark:hover:tw-border-sq-color-dark-dark',
38
- ].join(' ');
39
- const bgStyles = ['tw-bg-sq-white', 'dark:tw-bg-sq-dark-background'].join(' ');
40
- const disabledClasses = ['tw-opacity-50', 'tw-cursor-not-allowed'].join(' ');
41
- const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (React.createElement(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, ...props, asChild: true })));
42
- export const ToolbarButton = ({ isSmall = false, label, icon, secondIcon, forceSmallIcon = false, tooltipText, id, popoverContent, extraClassNames, testId, tooltipTestId, tooltipOptions, isActive = false, isHtmlTooltip = true, disabled = false, onClick, onHide, }) => {
43
- let tooltipData = undefined;
44
- if (tooltipText) {
45
- tooltipData = {
46
- 'data-qtip-text': tooltipText,
47
- 'data-qtip-placement': tooltipOptions?.position,
48
- 'data-qtip-is-html': isHtmlTooltip,
49
- 'data-qtip-testid': tooltipTestId,
50
- 'data-qtip-delay': tooltipOptions?.delay ?? DEFAULT_TOOL_TIP_DELAY,
51
- };
52
- }
53
- const onOpenChange = (open) => {
54
- if (!open) {
55
- onHide && onHide();
56
- }
57
- };
58
- return (React.createElement(PopoverPrimitive.Root, { defaultOpen: false, onOpenChange: onOpenChange },
59
- React.createElement(PopoverPrimitive.Trigger, { id: id, className: `tw-border-none ${isActive ? 'active' : ''}`, disabled: disabled, "data-testid": testId, ...tooltipData, onClick: (e) => {
60
- onClick && onClick(e);
61
- } },
62
- React.createElement("div", { className: `tw-bg-transparent tw-p-0 tw-flex tw-flex-col tw-items-center ${isSmall ? 'tw-py-[1px] tw-px-[5px]' : 'tw-px-2 tw-py-[3px]'} ${disabled ? disabledClasses : isActive ? activeBorderStyles : triggerBorderStyles} ${extraClassNames || ''}` },
63
- React.createElement("span", { className: "tw-nowrap" },
64
- React.createElement(Icon, { icon: icon, testId: "firstIcon", type: "text", large: !isSmall && !label && !secondIcon && !forceSmallIcon, extraClassNames: `tw-text-sq-text-color dark:tw-text-sq-dark-text` }),
65
- secondIcon && React.createElement(Icon, { icon: secondIcon, type: "text", testId: "secondIcon" }),
66
- popoverContent ? (React.createElement(Icon, { icon: "fc-arrow-dropdown", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-dark-text tw-ml-[3px] tw-text-[8px]", type: "text" })) : undefined),
67
- !isSmall && (React.createElement("small", { className: "tw-text-sq-text-color dark:tw-text-sq-dark-text tw-text-[10px]" }, label)))),
68
- !!popoverContent ? (React.createElement(PopoverContent, { sideOffset: 4, align: "start" },
69
- React.createElement("div", { className: bgStyles +
70
- ' tw-relative tw-z-[1000] tw-min-w-6 tw-p-[0.5rem] outline-none data-[state=open]:animate-in data-[state=closed]:animate-out' +
71
- ' data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2' +
72
- borderStyles }, popoverContent))) : undefined));
73
- };
1
+ import * as React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ import Icon from '../Icon';
4
+ import { DEFAULT_TOOL_TIP_DELAY } from '../Tooltip/Tooltip.types';
5
+ const borderStyles = [
6
+ 'tw-border-solid',
7
+ 'tw-border',
8
+ 'tw-rounded-sm',
9
+ 'hover:tw-border-sq-light-gray',
10
+ 'focus:tw-border-sq-light-gray',
11
+ 'active:tw-border-sq-sq-light-gray',
12
+ 'dark:hover:tw-border-sq-color-dark-dark',
13
+ 'dark:focus:tw-border-sq-color-dark-dark',
14
+ 'dark:active:tw-border-sq-color-dark-dark',
15
+ ].join(' ');
16
+ const triggerBorderStyles = [
17
+ 'tw-border-solid',
18
+ 'tw-border',
19
+ 'tw-rounded-sm',
20
+ 'tw-border-transparent',
21
+ 'hover:tw-border-solid',
22
+ 'hover:tw-border',
23
+ 'hover:tw-rounded-sm',
24
+ 'hover:tw-border-sq-darkish-gray',
25
+ 'active:tw-border-sq-color-dark',
26
+ 'dark:hover:tw-border-sq-color-dark-dark',
27
+ 'dark:focus:tw-border-sq-color-dark-dark',
28
+ 'dark:active:tw-border-sq-color-dark-dark',
29
+ ].join(' ');
30
+ const activeBorderStyles = [
31
+ 'active',
32
+ 'tw-border-solid',
33
+ 'tw-border',
34
+ 'tw-rounded-sm',
35
+ 'tw-border-sq-color-dark',
36
+ 'active:tw-border-sq-color-dark',
37
+ 'dark:hover:tw-border-sq-color-dark-dark',
38
+ ].join(' ');
39
+ const bgStyles = ['tw-bg-sq-white', 'dark:tw-bg-sq-dark-background'].join(' ');
40
+ const disabledClasses = ['tw-opacity-50', 'tw-cursor-not-allowed'].join(' ');
41
+ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (React.createElement(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, ...props, asChild: true })));
42
+ export const ToolbarButton = ({ isSmall = false, label, icon, secondIcon, forceSmallIcon = false, tooltipText, id, popoverContent, extraClassNames, testId, tooltipTestId, tooltipOptions, isActive = false, isHtmlTooltip = true, disabled = false, onClick, onHide, }) => {
43
+ let tooltipData = undefined;
44
+ if (tooltipText) {
45
+ tooltipData = {
46
+ 'data-qtip-text': tooltipText,
47
+ 'data-qtip-placement': tooltipOptions?.position,
48
+ 'data-qtip-is-html': isHtmlTooltip,
49
+ 'data-qtip-testid': tooltipTestId,
50
+ 'data-qtip-delay': tooltipOptions?.delay ?? DEFAULT_TOOL_TIP_DELAY,
51
+ };
52
+ }
53
+ const onOpenChange = (open) => {
54
+ if (!open) {
55
+ onHide && onHide();
56
+ }
57
+ };
58
+ return (React.createElement(PopoverPrimitive.Root, { defaultOpen: false, onOpenChange: onOpenChange },
59
+ React.createElement(PopoverPrimitive.Trigger, { id: id, className: `tw-border-none ${isActive ? 'active' : ''}`, disabled: disabled, "data-testid": testId, ...tooltipData, onClick: (e) => {
60
+ onClick && onClick(e);
61
+ } },
62
+ React.createElement("div", { className: `tw-bg-transparent tw-p-0 tw-flex tw-flex-col tw-items-center ${isSmall ? 'tw-py-[1px] tw-px-[5px]' : 'tw-px-2 tw-py-[3px]'} ${disabled ? disabledClasses : isActive ? activeBorderStyles : triggerBorderStyles} ${extraClassNames || ''}` },
63
+ React.createElement("span", { className: "tw-nowrap" },
64
+ React.createElement(Icon, { icon: icon, testId: "firstIcon", type: "text", large: !isSmall && !label && !secondIcon && !forceSmallIcon, extraClassNames: `tw-text-sq-text-color dark:tw-text-sq-dark-text` }),
65
+ secondIcon && React.createElement(Icon, { icon: secondIcon, type: "text", testId: "secondIcon" }),
66
+ popoverContent ? (React.createElement(Icon, { icon: "fc-arrow-dropdown", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-dark-text tw-ml-[3px] tw-text-[8px]", type: "text" })) : undefined),
67
+ !isSmall && (React.createElement("small", { className: "tw-text-sq-text-color dark:tw-text-sq-dark-text tw-text-[10px]" }, label)))),
68
+ !!popoverContent ? (React.createElement(PopoverContent, { sideOffset: 4, align: "start" },
69
+ React.createElement("div", { className: bgStyles +
70
+ ' tw-relative tw-z-[1000] tw-min-w-6 tw-p-[0.5rem] outline-none data-[state=open]:animate-in data-[state=closed]:animate-out' +
71
+ ' data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2' +
72
+ borderStyles }, popoverContent))) : undefined));
73
+ };
74
74
  //# sourceMappingURL=ToolbarButton.js.map
@@ -1,79 +1,79 @@
1
- import React from 'react';
2
- import { ToolbarButton } from './ToolbarButton';
3
- import Icon from '../Icon';
4
- import { QTip } from '../Tooltip/Qtip';
5
- export default {
6
- title: 'Toolbar Button',
7
- };
8
- export const AllToolbarButtonVariants = () => {
9
- const options = [
10
- { value: 'a', label: 'Chocolate' },
11
- { value: 'b', label: 'Strawberry' },
12
- { value: 'c', label: 'Vanilla' },
13
- { value: 'd', label: 'Rocky Road' },
14
- { value: 'e', label: 'Crazy Cow' },
15
- { value: 'f', label: 'Almond Joy' },
16
- { value: 'g', label: 'All of the above' },
17
- ];
18
- const colorOptions = [
19
- { value: 'h', label: 'pink' },
20
- { value: 'i', label: 'purple' },
21
- { value: 'j', label: 'green' },
22
- { value: 'k', label: 'red' },
23
- ];
24
- const allToolbarButtons = (isDark) => (React.createElement("div", { className: isDark ? 'tw-dark tw-bg-sq-dark-background' : '' },
25
- React.createElement("div", { className: "tw-p-5 " },
26
- React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Popover", testId: "basic-popover1", tooltipText: "This is a small popover.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, isSmall: true, popoverContent: React.createElement("div", { className: "tw-text-sm dark:tw-text-white" },
27
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
28
- options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
29
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
30
- React.createElement("span", null, option.label)))),
31
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
32
- colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
33
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
34
- React.createElement("span", null, option.label))))) })),
35
- React.createElement("div", { className: "tw-p-5 " },
36
- React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Normal", testId: "basic-popover1", tooltipText: "This is a normal popover.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, popoverContent: React.createElement("div", { className: "tw-text-sm dark:tw-text-white" },
37
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
38
- options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
39
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
40
- React.createElement("span", null, option.label)))),
41
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
42
- colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
43
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
44
- React.createElement("span", null, option.label))))) })),
45
- React.createElement("div", { className: "tw-p-5 " },
46
- React.createElement("p", { className: "tw-text-sq-color-dark tw-text-[10px]" }, "Without popup"),
47
- React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Button", testId: "basic-popover3", isHtmlTooltip: false })),
48
- React.createElement("div", { className: "tw-p-5 " },
49
- React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Disabled", testId: "basic-popover2", tooltipText: "This is a popover.", tooltipOptions: { position: 'top' }, isHtmlTooltip: false, disabled: true, popoverContent: React.createElement("div", { className: "tw-border tw-border-gray-100 tw-p-2 tw-rounded-sm tw-text-sm dark:tw-bg-sq-dark-background" },
50
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
51
- options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
52
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
53
- React.createElement("span", null, option.label)))),
54
- React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
55
- colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
56
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
57
- React.createElement("span", null, option.label))))) })),
58
- React.createElement("div", { className: "tw-p-5 " },
59
- React.createElement(ToolbarButton, { id: "scatterPlotFlipXY", isActive: false, disabled: true, testId: "scatterPlotFlipXY", label: "", icon: "fc-grab-window", tooltipText: "This is a large disabled popover.", tooltipOptions: { position: 'top' }, extraClassNames: "no-border ml5" })),
60
- React.createElement("div", { className: "tw-p-5 " },
61
- React.createElement(ToolbarButton, { icon: "fc-y-axis", tooltipText: "This is a large popover icon", tooltipOptions: { position: 'top', delay: 0 }, testId: "basic-popover4", isHtmlTooltip: false })),
62
- React.createElement("div", { className: "tw-p-5 " },
63
- React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Active", testId: "basic-popover5", tooltipText: "This is a button.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, isActive: true }))));
64
- const renderAllVariations = () => (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4 tw-p-4" },
65
- allToolbarButtons(),
66
- allToolbarButtons(true)));
67
- return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
68
- React.createElement(QTip, null),
69
- React.createElement("div", { className: "color_topic" },
70
- React.createElement("b", null, "Topic Colors"),
71
- renderAllVariations()),
72
- React.createElement("div", { className: "color_analysis" },
73
- React.createElement("b", null, "Analysis Colors"),
74
- renderAllVariations()),
75
- React.createElement("div", { className: "color_datalab" },
76
- React.createElement("b", null, "Datalab Colors"),
77
- renderAllVariations())));
78
- };
1
+ import React from 'react';
2
+ import { ToolbarButton } from './ToolbarButton';
3
+ import Icon from '../Icon';
4
+ import { QTip } from '../Tooltip/Qtip';
5
+ export default {
6
+ title: 'Toolbar Button',
7
+ };
8
+ export const AllToolbarButtonVariants = () => {
9
+ const options = [
10
+ { value: 'a', label: 'Chocolate' },
11
+ { value: 'b', label: 'Strawberry' },
12
+ { value: 'c', label: 'Vanilla' },
13
+ { value: 'd', label: 'Rocky Road' },
14
+ { value: 'e', label: 'Crazy Cow' },
15
+ { value: 'f', label: 'Almond Joy' },
16
+ { value: 'g', label: 'All of the above' },
17
+ ];
18
+ const colorOptions = [
19
+ { value: 'h', label: 'pink' },
20
+ { value: 'i', label: 'purple' },
21
+ { value: 'j', label: 'green' },
22
+ { value: 'k', label: 'red' },
23
+ ];
24
+ const allToolbarButtons = (isDark) => (React.createElement("div", { className: isDark ? 'tw-dark tw-bg-sq-dark-background' : '' },
25
+ React.createElement("div", { className: "tw-p-5 " },
26
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Popover", testId: "basic-popover1", tooltipText: "This is a small popover.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, isSmall: true, popoverContent: React.createElement("div", { className: "tw-text-sm dark:tw-text-white" },
27
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
28
+ options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
29
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
30
+ React.createElement("span", null, option.label)))),
31
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
32
+ colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
33
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
34
+ React.createElement("span", null, option.label))))) })),
35
+ React.createElement("div", { className: "tw-p-5 " },
36
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Normal", testId: "basic-popover1", tooltipText: "This is a normal popover.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, popoverContent: React.createElement("div", { className: "tw-text-sm dark:tw-text-white" },
37
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
38
+ options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
39
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
40
+ React.createElement("span", null, option.label)))),
41
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
42
+ colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
43
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
44
+ React.createElement("span", null, option.label))))) })),
45
+ React.createElement("div", { className: "tw-p-5 " },
46
+ React.createElement("p", { className: "tw-text-sq-color-dark tw-text-[10px]" }, "Without popup"),
47
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Button", testId: "basic-popover3", isHtmlTooltip: false })),
48
+ React.createElement("div", { className: "tw-p-5 " },
49
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Disabled", testId: "basic-popover2", tooltipText: "This is a popover.", tooltipOptions: { position: 'top' }, isHtmlTooltip: false, disabled: true, popoverContent: React.createElement("div", { className: "tw-border tw-border-gray-100 tw-p-2 tw-rounded-sm tw-text-sm dark:tw-bg-sq-dark-background" },
50
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Flavors"),
51
+ options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
52
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
53
+ React.createElement("span", null, option.label)))),
54
+ React.createElement("p", { className: "tw-bg-gray-200 dark:tw-bg-gray-700 tw-p-2" }, "Colors"),
55
+ colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
56
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
57
+ React.createElement("span", null, option.label))))) })),
58
+ React.createElement("div", { className: "tw-p-5 " },
59
+ React.createElement(ToolbarButton, { id: "scatterPlotFlipXY", isActive: false, disabled: true, testId: "scatterPlotFlipXY", label: "", icon: "fc-grab-window", tooltipText: "This is a large disabled popover.", tooltipOptions: { position: 'top' }, extraClassNames: "no-border ml5" })),
60
+ React.createElement("div", { className: "tw-p-5 " },
61
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", tooltipText: "This is a large popover icon", tooltipOptions: { position: 'top', delay: 0 }, testId: "basic-popover4", isHtmlTooltip: false })),
62
+ React.createElement("div", { className: "tw-p-5 " },
63
+ React.createElement(ToolbarButton, { icon: "fc-y-axis", label: "Active", testId: "basic-popover5", tooltipText: "This is a button.", tooltipOptions: { position: 'top', delay: 0 }, isHtmlTooltip: false, isActive: true }))));
64
+ const renderAllVariations = () => (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4 tw-p-4" },
65
+ allToolbarButtons(),
66
+ allToolbarButtons(true)));
67
+ return (React.createElement("div", { className: "tw-grid tw-grid-cols-3 tw-gap-4" },
68
+ React.createElement(QTip, null),
69
+ React.createElement("div", { className: "color_topic" },
70
+ React.createElement("b", null, "Topic Colors"),
71
+ renderAllVariations()),
72
+ React.createElement("div", { className: "color_analysis" },
73
+ React.createElement("b", null, "Analysis Colors"),
74
+ renderAllVariations()),
75
+ React.createElement("div", { className: "color_datalab" },
76
+ React.createElement("b", null, "Datalab Colors"),
77
+ renderAllVariations())));
78
+ };
79
79
  //# sourceMappingURL=ToolbarButton.stories.js.map
@@ -1,93 +1,93 @@
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 { ToolbarButton } from './ToolbarButton';
6
- import Icon from '../Icon';
7
- describe('ToolbarButton', () => {
8
- const options = [
9
- { value: 'a', label: 'Chocolate' },
10
- { value: 'b', label: 'Strawberry' },
11
- { value: 'c', label: 'Vanilla' },
12
- { value: 'd', label: 'Rocky Road' },
13
- { value: 'e', label: 'Crazy Cow' },
14
- { value: 'f', label: 'Almond Joy' },
15
- { value: 'g', label: 'All of the above' },
16
- ];
17
- const colorOptions = [
18
- { value: 'h', label: 'pink' },
19
- { value: 'i', label: 'purple' },
20
- { value: 'j', label: 'green' },
21
- { value: 'k', label: 'red' },
22
- ];
23
- const popoverContent = (React.createElement("div", { className: "tw-text-sm" },
24
- React.createElement("p", { className: "tw-bg-gray-200 tw-p-2" }, "Flavors"),
25
- options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
26
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
27
- React.createElement("span", null, option.label)))),
28
- React.createElement("p", null, "Colors"),
29
- colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
30
- React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
31
- React.createElement("span", null, option.label))))));
32
- const mockOnClick = jest.fn();
33
- class Context {
34
- testId = 'popoverTestId';
35
- label = 'popover label';
36
- props = {
37
- label: this.label,
38
- onClick: mockOnClick,
39
- testId: this.testId,
40
- icon: 'fc-y-axis',
41
- tooltipText: 'This is a popover.',
42
- tooltipOptions: { position: 'top', delay: 0 },
43
- isHtmlTooltip: false,
44
- isSmall: false,
45
- popoverContent,
46
- };
47
- }
48
- let tc;
49
- beforeEach(() => {
50
- tc = new Context();
51
- jest.clearAllMocks();
52
- });
53
- const renderToolbarButton = (props) => render(React.createElement(ToolbarButton, { ...props }));
54
- const openPopover = async () => {
55
- const popover = screen.getByTestId(tc.testId);
56
- await userEvent.click(popover);
57
- };
58
- it('renders popover icon without label when small', () => {
59
- tc.props.isSmall = true;
60
- renderToolbarButton(tc.props);
61
- const popoverLabel = screen.queryByText(tc.label);
62
- expect(popoverLabel).not.toBeInTheDocument();
63
- });
64
- it('renders popover trigger button', () => {
65
- renderToolbarButton(tc.props);
66
- expect(screen.getByText(tc.label)).toBeInTheDocument();
67
- });
68
- it('opens popover on click', async () => {
69
- renderToolbarButton(tc.props);
70
- await openPopover();
71
- expect(screen.getByText(options[2].label)).toBeVisible();
72
- });
73
- it('renders disabled popover trigger', async () => {
74
- renderToolbarButton({ ...tc.props, disabled: true });
75
- await openPopover();
76
- expect(mockOnClick).not.toHaveBeenCalled();
77
- });
78
- it('handles click events', async () => {
79
- const handleClick = jest.fn();
80
- tc.props.onClick = handleClick;
81
- const { getByTestId } = renderToolbarButton(tc.props);
82
- await userEvent.click(getByTestId(tc.testId));
83
- expect(handleClick).toHaveBeenCalled();
84
- });
85
- it('handles click events within popover and does not close the popover', async () => {
86
- renderToolbarButton(tc.props);
87
- expect(screen.queryByText(options[4].label)).not.toBeInTheDocument();
88
- await openPopover();
89
- await userEvent.click(screen.getByText(options[3].label));
90
- expect(screen.getByText(options[4].label)).toBeInTheDocument();
91
- });
92
- });
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 { ToolbarButton } from './ToolbarButton';
6
+ import Icon from '../Icon';
7
+ describe('ToolbarButton', () => {
8
+ const options = [
9
+ { value: 'a', label: 'Chocolate' },
10
+ { value: 'b', label: 'Strawberry' },
11
+ { value: 'c', label: 'Vanilla' },
12
+ { value: 'd', label: 'Rocky Road' },
13
+ { value: 'e', label: 'Crazy Cow' },
14
+ { value: 'f', label: 'Almond Joy' },
15
+ { value: 'g', label: 'All of the above' },
16
+ ];
17
+ const colorOptions = [
18
+ { value: 'h', label: 'pink' },
19
+ { value: 'i', label: 'purple' },
20
+ { value: 'j', label: 'green' },
21
+ { value: 'k', label: 'red' },
22
+ ];
23
+ const popoverContent = (React.createElement("div", { className: "tw-text-sm" },
24
+ React.createElement("p", { className: "tw-bg-gray-200 tw-p-2" }, "Flavors"),
25
+ options.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2 hover:tw-bg-green-500" },
26
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
27
+ React.createElement("span", null, option.label)))),
28
+ React.createElement("p", null, "Colors"),
29
+ colorOptions.map((option) => (React.createElement("div", { key: option.value, className: "tw-flex tw-items-center tw-p-2" },
30
+ React.createElement(Icon, { type: "color", color: "green", icon: "fc-check", extraClassNames: "tw-mr-2" }),
31
+ React.createElement("span", null, option.label))))));
32
+ const mockOnClick = jest.fn();
33
+ class Context {
34
+ testId = 'popoverTestId';
35
+ label = 'popover label';
36
+ props = {
37
+ label: this.label,
38
+ onClick: mockOnClick,
39
+ testId: this.testId,
40
+ icon: 'fc-y-axis',
41
+ tooltipText: 'This is a popover.',
42
+ tooltipOptions: { position: 'top', delay: 0 },
43
+ isHtmlTooltip: false,
44
+ isSmall: false,
45
+ popoverContent,
46
+ };
47
+ }
48
+ let tc;
49
+ beforeEach(() => {
50
+ tc = new Context();
51
+ jest.clearAllMocks();
52
+ });
53
+ const renderToolbarButton = (props) => render(React.createElement(ToolbarButton, { ...props }));
54
+ const openPopover = async () => {
55
+ const popover = screen.getByTestId(tc.testId);
56
+ await userEvent.click(popover);
57
+ };
58
+ it('renders popover icon without label when small', () => {
59
+ tc.props.isSmall = true;
60
+ renderToolbarButton(tc.props);
61
+ const popoverLabel = screen.queryByText(tc.label);
62
+ expect(popoverLabel).not.toBeInTheDocument();
63
+ });
64
+ it('renders popover trigger button', () => {
65
+ renderToolbarButton(tc.props);
66
+ expect(screen.getByText(tc.label)).toBeInTheDocument();
67
+ });
68
+ it('opens popover on click', async () => {
69
+ renderToolbarButton(tc.props);
70
+ await openPopover();
71
+ expect(screen.getByText(options[2].label)).toBeVisible();
72
+ });
73
+ it('renders disabled popover trigger', async () => {
74
+ renderToolbarButton({ ...tc.props, disabled: true });
75
+ await openPopover();
76
+ expect(mockOnClick).not.toHaveBeenCalled();
77
+ });
78
+ it('handles click events', async () => {
79
+ const handleClick = jest.fn();
80
+ tc.props.onClick = handleClick;
81
+ const { getByTestId } = renderToolbarButton(tc.props);
82
+ await userEvent.click(getByTestId(tc.testId));
83
+ expect(handleClick).toHaveBeenCalled();
84
+ });
85
+ it('handles click events within popover and does not close the popover', async () => {
86
+ renderToolbarButton(tc.props);
87
+ expect(screen.queryByText(options[4].label)).not.toBeInTheDocument();
88
+ await openPopover();
89
+ await userEvent.click(screen.getByText(options[3].label));
90
+ expect(screen.getByText(options[4].label)).toBeInTheDocument();
91
+ });
92
+ });
93
93
  //# sourceMappingURL=ToolbarButton.test.js.map
@@ -1,2 +1,2 @@
1
- export const toolbarButtonVariants = ['outline', 'theme', 'theme-light', 'warning', 'danger', 'no-border'];
1
+ export const toolbarButtonVariants = ['outline', 'theme', 'theme-light', 'warning', 'danger', 'no-border'];
2
2
  //# sourceMappingURL=ToolbarButton.types.js.map
@@ -1,2 +1,2 @@
1
- export { ToolbarButton as default } from './ToolbarButton';
1
+ export { ToolbarButton as default } from './ToolbarButton';
2
2
  //# sourceMappingURL=index.js.map