@seeqdev/qomponents 0.0.108 → 0.0.109

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 (96) hide show
  1. package/dist/Accordion/Accordion.js +8 -8
  2. package/dist/Accordion/Accordion.stories.js +114 -114
  3. package/dist/Accordion/Accordion.test.js +54 -54
  4. package/dist/Accordion/Accordion.types.js +1 -1
  5. package/dist/Accordion/index.js +1 -1
  6. package/dist/Alert/Alert.js +31 -31
  7. package/dist/Alert/Alert.stories.js +44 -44
  8. package/dist/Alert/Alert.test.js +50 -50
  9. package/dist/Alert/Alert.types.js +1 -1
  10. package/dist/Alert/index.js +1 -1
  11. package/dist/Button/Button.js +91 -91
  12. package/dist/Button/Button.stories.js +97 -97
  13. package/dist/Button/Button.test.js +48 -48
  14. package/dist/Button/Button.types.js +4 -4
  15. package/dist/Button/index.js +1 -1
  16. package/dist/ButtonWithDropdown/ButtonWithDropdown.js +66 -66
  17. package/dist/ButtonWithDropdown/ButtonWithDropdown.stories.js +97 -97
  18. package/dist/ButtonWithDropdown/ButtonWithDropdown.test.js +84 -84
  19. package/dist/ButtonWithDropdown/ButtonWithDropdown.types.js +1 -1
  20. package/dist/ButtonWithDropdown/index.js +1 -1
  21. package/dist/ButtonWithPopover/ButtonWithPopover.js +50 -50
  22. package/dist/ButtonWithPopover/ButtonWithPopover.stories.js +74 -74
  23. package/dist/ButtonWithPopover/ButtonWithPopover.test.js +81 -81
  24. package/dist/ButtonWithPopover/ButtonWithPopover.types.js +1 -1
  25. package/dist/ButtonWithPopover/index.js +1 -1
  26. package/dist/Checkbox/Checkbox.js +25 -25
  27. package/dist/Checkbox/Checkbox.stories.js +33 -33
  28. package/dist/Checkbox/Checkbox.test.js +93 -93
  29. package/dist/Checkbox/Checkbox.types.js +1 -1
  30. package/dist/Checkbox/index.js +1 -1
  31. package/dist/Icon/Icon.js +53 -53
  32. package/dist/Icon/Icon.stories.js +44 -44
  33. package/dist/Icon/Icon.test.js +54 -54
  34. package/dist/Icon/Icon.types.js +15 -15
  35. package/dist/Icon/index.js +1 -1
  36. package/dist/InputGroup/InputGroup.js +25 -25
  37. package/dist/InputGroup/InputGroup.stories.js +141 -141
  38. package/dist/InputGroup/InputGroup.test.js +42 -42
  39. package/dist/InputGroup/InputGroup.types.js +1 -1
  40. package/dist/InputGroup/index.js +1 -1
  41. package/dist/Modal/Modal.js +97 -97
  42. package/dist/Modal/Modal.stories.js +126 -126
  43. package/dist/Modal/Modal.test.js +107 -107
  44. package/dist/Modal/Modal.types.js +1 -1
  45. package/dist/Modal/index.js +1 -1
  46. package/dist/SeeqActionDropdown/SeeqActionDropdown.js +47 -47
  47. package/dist/SeeqActionDropdown/SeeqActionDropdown.stories.js +79 -79
  48. package/dist/SeeqActionDropdown/SeeqActionDropdown.test.js +72 -72
  49. package/dist/SeeqActionDropdown/SeeqActionDropdown.types.js +1 -1
  50. package/dist/SeeqActionDropdown/index.js +1 -1
  51. package/dist/SeeqActionDropdown/variants.js +22 -22
  52. package/dist/Select/Select.js +173 -173
  53. package/dist/Select/Select.stories.js +79 -79
  54. package/dist/Select/Select.test.js +181 -181
  55. package/dist/Select/Select.types.js +1 -1
  56. package/dist/Select/index.js +2 -2
  57. package/dist/Tabs/Tabs.js +21 -21
  58. package/dist/Tabs/Tabs.stories.js +90 -90
  59. package/dist/Tabs/Tabs.test.js +90 -90
  60. package/dist/Tabs/Tabs.types.js +1 -1
  61. package/dist/Tabs/index.js +1 -1
  62. package/dist/TextArea/TextArea.js +24 -24
  63. package/dist/TextArea/TextArea.stories.js +45 -45
  64. package/dist/TextArea/TextArea.test.js +67 -67
  65. package/dist/TextArea/TextArea.types.js +1 -1
  66. package/dist/TextArea/index.js +1 -1
  67. package/dist/TextField/TextField.js +78 -78
  68. package/dist/TextField/TextField.stories.js +69 -69
  69. package/dist/TextField/TextField.test.js +38 -38
  70. package/dist/TextField/TextField.types.js +1 -1
  71. package/dist/TextField/index.js +1 -1
  72. package/dist/ToolbarButton/ToolbarButton.js +74 -74
  73. package/dist/ToolbarButton/ToolbarButton.stories.js +93 -93
  74. package/dist/ToolbarButton/ToolbarButton.test.js +92 -92
  75. package/dist/ToolbarButton/ToolbarButton.types.js +1 -1
  76. package/dist/ToolbarButton/index.js +1 -1
  77. package/dist/Tooltip/QTip.stories.js +44 -44
  78. package/dist/Tooltip/QTip.types.js +1 -1
  79. package/dist/Tooltip/QTipPerformance.stories.js +29 -29
  80. package/dist/Tooltip/Qtip.js +154 -154
  81. package/dist/Tooltip/Tooltip.js +30 -30
  82. package/dist/Tooltip/Tooltip.stories.js +31 -31
  83. package/dist/Tooltip/Tooltip.types.js +2 -2
  84. package/dist/Tooltip/TooltipPerformance.stories.js +29 -29
  85. package/dist/Tooltip/index.js +2 -2
  86. package/dist/Tooltip/qTip.utilities.js +10 -10
  87. package/dist/index.esm.js +30 -17
  88. package/dist/index.esm.js.map +1 -1
  89. package/dist/index.js +30 -17
  90. package/dist/index.js.map +1 -1
  91. package/dist/types.js +1 -1
  92. package/dist/utils/browserId.js +28 -28
  93. package/dist/utils/svg.js +19 -19
  94. package/dist/utils/validateStyleDimension.js +13 -13
  95. package/dist/utils/validateStyleDimension.test.js +19 -19
  96. package/package.json +1 -1
@@ -1,182 +1,182 @@
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 Select from './Select';
6
- describe('Select', () => {
7
- class Context {
8
- testId = 'selectTestId';
9
- label = 'button label';
10
- options = [
11
- { label: 'vanilla', value: 'a' },
12
- { label: 'chocolate', value: 'b' },
13
- { label: 'strawberry', value: 'c' },
14
- ];
15
- otherOptions = [
16
- { label: 'red', value: 'd' },
17
- { label: 'green', value: 'e' },
18
- ];
19
- groupedOptions = [
20
- {
21
- label: 'Ice Cream Flavors',
22
- options: this.options,
23
- },
24
- {
25
- label: 'Colors',
26
- options: this.otherOptions,
27
- },
28
- ];
29
- props = {
30
- onChange: jest.fn(),
31
- options: this.options,
32
- };
33
- }
34
- let tc;
35
- beforeEach(() => {
36
- tc = new Context();
37
- });
38
- const openSelect = async () => {
39
- const select = document.querySelector(`.specOpenSelect`);
40
- await userEvent.click(select);
41
- };
42
- const renderSelect = (props) => render(React.createElement("div", { id: "wrapper" },
43
- React.createElement(Select, { ...props })));
44
- it('renders the select', () => {
45
- renderSelect(tc.props);
46
- expect(document.querySelector('.specSelectControl')).toBeInTheDocument();
47
- });
48
- it('displays options', async () => {
49
- renderSelect(tc.props);
50
- await openSelect();
51
- expect(document.querySelectorAll('.specSelectOption')).toHaveLength(3);
52
- });
53
- it('displays grouped options', async () => {
54
- renderSelect({ ...tc.props, options: tc.groupedOptions });
55
- await openSelect();
56
- expect(document.querySelectorAll('.specSelectOption')).toHaveLength(5);
57
- expect(document.querySelectorAll('.specSelectGroupHeading')).toHaveLength(2);
58
- expect(document.querySelectorAll('.specSelectGroup')).toHaveLength(2);
59
- });
60
- it('reflects error state', () => {
61
- renderSelect({ ...tc.props, showError: true });
62
- expect(document.querySelector('.specSelectControl')).toHaveClass('tw-border-sq-danger-color');
63
- });
64
- it('reflects custom render function for option', async () => {
65
- const getOptionLabel = (option) => (React.createElement("div", null,
66
- option.label,
67
- React.createElement("br", null),
68
- "custom formatting applied"));
69
- renderSelect({ ...tc.props, getOptionLabel });
70
- await openSelect();
71
- expect(document.querySelectorAll('.specSelectOption')[0]).toHaveTextContent('custom formatting applied');
72
- });
73
- it('reflects custom render for selected option', async () => {
74
- const getSelectedValueLabel = (option) => (React.createElement("div", null,
75
- option.label,
76
- React.createElement("br", null),
77
- "the chosen one"));
78
- renderSelect({ ...tc.props, getSelectedValueLabel });
79
- await openSelect();
80
- await userEvent.click(screen.getByText(tc.options[0].label));
81
- expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent('the chosen one');
82
- });
83
- it('renders the provided value as selected', () => {
84
- const value = tc.options[1];
85
- renderSelect({ ...tc.props, value });
86
- expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(value.label);
87
- });
88
- it('renders the provided placeholder', () => {
89
- const placeholder = 'choose your favorite flavor';
90
- renderSelect({ ...tc.props, placeholder });
91
- expect(screen.getByText(placeholder)).toBeInTheDocument();
92
- });
93
- it('renders the provided noOptionsMessage', async () => {
94
- const noOptionsMessage = 'Nothing to see here.';
95
- renderSelect({ ...tc.props, noOptionsMessage, options: [] });
96
- await openSelect();
97
- expect(screen.getByText(noOptionsMessage)).toBeInTheDocument();
98
- });
99
- it('supports multi selection', async () => {
100
- const isMulti = true;
101
- renderSelect({ ...tc.props, isMulti });
102
- await openSelect();
103
- await userEvent.click(screen.getByText(tc.options[0].label));
104
- await openSelect();
105
- await userEvent.click(screen.getByText(tc.options[1].label));
106
- expect(document.querySelectorAll('.specOpenSelect')).toHaveLength(2);
107
- });
108
- it('renders isClearable', async () => {
109
- const isClearable = true;
110
- const placeholder = 'no worries - you can clear this.';
111
- renderSelect({ ...tc.props, isClearable, placeholder });
112
- await openSelect();
113
- await userEvent.click(screen.getByText(tc.options[0].label));
114
- expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(tc.options[0].label);
115
- expect(document.querySelector('.specClearSelect')).toBeInTheDocument();
116
- await userEvent.click(document.querySelector('.specClearSelect'));
117
- expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(placeholder);
118
- });
119
- it('supports menuIsOpen', async () => {
120
- const menuIsOpen = true;
121
- renderSelect({ ...tc.props, menuIsOpen, menuPortalTarget: document.querySelector('#wrapper') });
122
- expect(document.querySelectorAll('.specSelectOption')).toHaveLength(tc.options.length);
123
- });
124
- it('supports closeMenuOnSelect', async () => {
125
- const closeMenuOnSelect = false;
126
- renderSelect({ ...tc.props, closeMenuOnSelect });
127
- await openSelect();
128
- await userEvent.click(screen.getByText(tc.options[1].label));
129
- await userEvent.click(screen.getByText(tc.options[2].label));
130
- expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(tc.options[2].label);
131
- });
132
- it('removes selected option from multi-select options list', async () => {
133
- const closeMenuOnSelect = false;
134
- renderSelect({ ...tc.props, isMulti: true, closeMenuOnSelect });
135
- await openSelect();
136
- await userEvent.click(screen.getByText(tc.options[1].label));
137
- await userEvent.click(screen.getByText(tc.options[2].label));
138
- expect(document.querySelectorAll('.specSelectOption')).toHaveLength(tc.options.length - 2);
139
- });
140
- it('calls onChange handler', async () => {
141
- const onChange = jest.fn();
142
- renderSelect({ ...tc.props, onChange });
143
- await openSelect();
144
- await userEvent.click(screen.getByText(tc.options[1].label));
145
- expect(onChange).toHaveBeenCalledWith(tc.options[1]);
146
- });
147
- it('includes inputId', async () => {
148
- const inputId = 'idMe';
149
- renderSelect({ ...tc.props, inputId });
150
- expect(document.querySelector(`#${inputId}`)).toBeInTheDocument();
151
- });
152
- it('supports creating options', async () => {
153
- const inputId = 'idMe';
154
- const favorite = 'Almond Joy';
155
- renderSelect({ ...tc.props, creatable: true, inputId });
156
- await openSelect();
157
- await userEvent.type(document.querySelector(`#${inputId}`), favorite);
158
- expect(screen.getByText(`Create "${favorite}"`)).toBeInTheDocument();
159
- });
160
- it('supports onMenuOpen', async () => {
161
- const onMenuOpen = jest.fn();
162
- renderSelect({ ...tc.props, onMenuOpen });
163
- await openSelect();
164
- expect(onMenuOpen).toHaveBeenCalled();
165
- });
166
- it('supports onMenuClose', async () => {
167
- const onMenuClose = jest.fn();
168
- renderSelect({ ...tc.props, onMenuClose });
169
- await openSelect();
170
- await userEvent.click(screen.getByText(tc.options[0].label));
171
- expect(onMenuClose).toHaveBeenCalled();
172
- });
173
- it('supports custom components', async () => {
174
- const components = {
175
- DropdownIndicator: () => React.createElement("div", { className: "custom" }, "Custom Dropdown"),
176
- };
177
- renderSelect({ ...tc.props, components });
178
- await openSelect();
179
- expect(document.querySelector('.custom')).toBeInTheDocument();
180
- });
181
- });
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 Select from './Select';
6
+ describe('Select', () => {
7
+ class Context {
8
+ testId = 'selectTestId';
9
+ label = 'button label';
10
+ options = [
11
+ { label: 'vanilla', value: 'a' },
12
+ { label: 'chocolate', value: 'b' },
13
+ { label: 'strawberry', value: 'c' },
14
+ ];
15
+ otherOptions = [
16
+ { label: 'red', value: 'd' },
17
+ { label: 'green', value: 'e' },
18
+ ];
19
+ groupedOptions = [
20
+ {
21
+ label: 'Ice Cream Flavors',
22
+ options: this.options,
23
+ },
24
+ {
25
+ label: 'Colors',
26
+ options: this.otherOptions,
27
+ },
28
+ ];
29
+ props = {
30
+ onChange: jest.fn(),
31
+ options: this.options,
32
+ };
33
+ }
34
+ let tc;
35
+ beforeEach(() => {
36
+ tc = new Context();
37
+ });
38
+ const openSelect = async () => {
39
+ const select = document.querySelector(`.specOpenSelect`);
40
+ await userEvent.click(select);
41
+ };
42
+ const renderSelect = (props) => render(React.createElement("div", { id: "wrapper" },
43
+ React.createElement(Select, { ...props })));
44
+ it('renders the select', () => {
45
+ renderSelect(tc.props);
46
+ expect(document.querySelector('.specSelectControl')).toBeInTheDocument();
47
+ });
48
+ it('displays options', async () => {
49
+ renderSelect(tc.props);
50
+ await openSelect();
51
+ expect(document.querySelectorAll('.specSelectOption')).toHaveLength(3);
52
+ });
53
+ it('displays grouped options', async () => {
54
+ renderSelect({ ...tc.props, options: tc.groupedOptions });
55
+ await openSelect();
56
+ expect(document.querySelectorAll('.specSelectOption')).toHaveLength(5);
57
+ expect(document.querySelectorAll('.specSelectGroupHeading')).toHaveLength(2);
58
+ expect(document.querySelectorAll('.specSelectGroup')).toHaveLength(2);
59
+ });
60
+ it('reflects error state', () => {
61
+ renderSelect({ ...tc.props, showError: true });
62
+ expect(document.querySelector('.specSelectControl')).toHaveClass('tw-border-sq-danger-color');
63
+ });
64
+ it('reflects custom render function for option', async () => {
65
+ const getOptionLabel = (option) => (React.createElement("div", null,
66
+ option.label,
67
+ React.createElement("br", null),
68
+ "custom formatting applied"));
69
+ renderSelect({ ...tc.props, getOptionLabel });
70
+ await openSelect();
71
+ expect(document.querySelectorAll('.specSelectOption')[0]).toHaveTextContent('custom formatting applied');
72
+ });
73
+ it('reflects custom render for selected option', async () => {
74
+ const getSelectedValueLabel = (option) => (React.createElement("div", null,
75
+ option.label,
76
+ React.createElement("br", null),
77
+ "the chosen one"));
78
+ renderSelect({ ...tc.props, getSelectedValueLabel });
79
+ await openSelect();
80
+ await userEvent.click(screen.getByText(tc.options[0].label));
81
+ expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent('the chosen one');
82
+ });
83
+ it('renders the provided value as selected', () => {
84
+ const value = tc.options[1];
85
+ renderSelect({ ...tc.props, value });
86
+ expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(value.label);
87
+ });
88
+ it('renders the provided placeholder', () => {
89
+ const placeholder = 'choose your favorite flavor';
90
+ renderSelect({ ...tc.props, placeholder });
91
+ expect(screen.getByText(placeholder)).toBeInTheDocument();
92
+ });
93
+ it('renders the provided noOptionsMessage', async () => {
94
+ const noOptionsMessage = 'Nothing to see here.';
95
+ renderSelect({ ...tc.props, noOptionsMessage, options: [] });
96
+ await openSelect();
97
+ expect(screen.getByText(noOptionsMessage)).toBeInTheDocument();
98
+ });
99
+ it('supports multi selection', async () => {
100
+ const isMulti = true;
101
+ renderSelect({ ...tc.props, isMulti });
102
+ await openSelect();
103
+ await userEvent.click(screen.getByText(tc.options[0].label));
104
+ await openSelect();
105
+ await userEvent.click(screen.getByText(tc.options[1].label));
106
+ expect(document.querySelectorAll('.specOpenSelect')).toHaveLength(2);
107
+ });
108
+ it('renders isClearable', async () => {
109
+ const isClearable = true;
110
+ const placeholder = 'no worries - you can clear this.';
111
+ renderSelect({ ...tc.props, isClearable, placeholder });
112
+ await openSelect();
113
+ await userEvent.click(screen.getByText(tc.options[0].label));
114
+ expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(tc.options[0].label);
115
+ expect(document.querySelector('.specClearSelect')).toBeInTheDocument();
116
+ await userEvent.click(document.querySelector('.specClearSelect'));
117
+ expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(placeholder);
118
+ });
119
+ it('supports menuIsOpen', async () => {
120
+ const menuIsOpen = true;
121
+ renderSelect({ ...tc.props, menuIsOpen, menuPortalTarget: document.querySelector('#wrapper') });
122
+ expect(document.querySelectorAll('.specSelectOption')).toHaveLength(tc.options.length);
123
+ });
124
+ it('supports closeMenuOnSelect', async () => {
125
+ const closeMenuOnSelect = false;
126
+ renderSelect({ ...tc.props, closeMenuOnSelect });
127
+ await openSelect();
128
+ await userEvent.click(screen.getByText(tc.options[1].label));
129
+ await userEvent.click(screen.getByText(tc.options[2].label));
130
+ expect(document.querySelectorAll('.specOpenSelect')[0]).toHaveTextContent(tc.options[2].label);
131
+ });
132
+ it('removes selected option from multi-select options list', async () => {
133
+ const closeMenuOnSelect = false;
134
+ renderSelect({ ...tc.props, isMulti: true, closeMenuOnSelect });
135
+ await openSelect();
136
+ await userEvent.click(screen.getByText(tc.options[1].label));
137
+ await userEvent.click(screen.getByText(tc.options[2].label));
138
+ expect(document.querySelectorAll('.specSelectOption')).toHaveLength(tc.options.length - 2);
139
+ });
140
+ it('calls onChange handler', async () => {
141
+ const onChange = jest.fn();
142
+ renderSelect({ ...tc.props, onChange });
143
+ await openSelect();
144
+ await userEvent.click(screen.getByText(tc.options[1].label));
145
+ expect(onChange).toHaveBeenCalledWith(tc.options[1]);
146
+ });
147
+ it('includes inputId', async () => {
148
+ const inputId = 'idMe';
149
+ renderSelect({ ...tc.props, inputId });
150
+ expect(document.querySelector(`#${inputId}`)).toBeInTheDocument();
151
+ });
152
+ it('supports creating options', async () => {
153
+ const inputId = 'idMe';
154
+ const favorite = 'Almond Joy';
155
+ renderSelect({ ...tc.props, creatable: true, inputId });
156
+ await openSelect();
157
+ await userEvent.type(document.querySelector(`#${inputId}`), favorite);
158
+ expect(screen.getByText(`Create "${favorite}"`)).toBeInTheDocument();
159
+ });
160
+ it('supports onMenuOpen', async () => {
161
+ const onMenuOpen = jest.fn();
162
+ renderSelect({ ...tc.props, onMenuOpen });
163
+ await openSelect();
164
+ expect(onMenuOpen).toHaveBeenCalled();
165
+ });
166
+ it('supports onMenuClose', async () => {
167
+ const onMenuClose = jest.fn();
168
+ renderSelect({ ...tc.props, onMenuClose });
169
+ await openSelect();
170
+ await userEvent.click(screen.getByText(tc.options[0].label));
171
+ expect(onMenuClose).toHaveBeenCalled();
172
+ });
173
+ it('supports custom components', async () => {
174
+ const components = {
175
+ DropdownIndicator: () => React.createElement("div", { className: "custom" }, "Custom Dropdown"),
176
+ };
177
+ renderSelect({ ...tc.props, components });
178
+ await openSelect();
179
+ expect(document.querySelector('.custom')).toBeInTheDocument();
180
+ });
181
+ });
182
182
  //# sourceMappingURL=Select.test.js.map
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=Select.types.js.map
@@ -1,3 +1,3 @@
1
- export { default } from './Select';
2
- export { components as SelectCompoents } from 'react-select';
1
+ export { default } from './Select';
2
+ export { components as SelectCompoents } from 'react-select';
3
3
  //# sourceMappingURL=index.js.map
package/dist/Tabs/Tabs.js CHANGED
@@ -1,22 +1,22 @@
1
- import React from 'react';
2
- import { Content, List, Root, Trigger } from '@radix-ui/react-tabs';
3
- import Icon from '../Icon';
4
- const Tabs = ({ tabs, defaultActiveTab, activeTab, onTabSelect, extraClassNames, testId, id, stretchTabs = false, }) => {
5
- const handleTabSelect = (tabId) => {
6
- if (activeTab === tabId)
7
- return;
8
- onTabSelect && onTabSelect(tabId);
9
- };
10
- return (React.createElement(Root, { className: `tw-flex tw-flex-col tw-min-w-[300px] tw-max-w-full tw-flex-grow focus-visible:tw-outline-none ${extraClassNames || ''}`, defaultValue: defaultActiveTab, "data-testid": testId, id: id, value: activeTab, onValueChange: handleTabSelect },
11
- React.createElement(List, { className: `tw-flex tw-flex-row tw-flex-wrap tw-z-[1001]` }, tabs.map(({ id, icon, label, tabExtraClassNames, testId: tabsTestId, disabled }, index) => (React.createElement(Trigger, { className: `tw-bg-sq-white dark:tw-bg-sq-dark-background tw-h-[45px] focus-visible:tw-outline-none tw-min-w-[100px] tw-px-4 tw-border-solid dark:tw-border-gray-700 tw-flex tw-flex-1 tw-justify-center tw-items-center tw-border-r-[2px] last:tw-border-r-0 ${stretchTabs ? '' : 'tw-max-w-max tw-min-w-fit'} ${tabExtraClassNames || ''} ${activeTab === id
12
- ? 'tw-border-b-sq-color-dark dark:tw-border-b-sq-color-dark tw-border-b-[3px]'
13
- : 'hover:tw-bg-sq-light-gray tw-border-b-[1px] hover:dark:tw-bg-gray-700'}`, "data-testid": tabsTestId, disabled: disabled, key: `${label}-${id}-${index}`, value: id },
14
- React.createElement("span", null,
15
- icon && React.createElement(Icon, { icon: icon, testId: `${id}_tab-icon`, extraClassNames: "tw-text-[15px] tw-mr-[7px]" }),
16
- React.createElement("span", { className: `tw-text-[14px] tw-font-medium ${activeTab === id
17
- ? 'dark:tw-text-sq-dark-text tw-text-gray-500'
18
- : 'dark:tw-text-sq-color-dark-dark tw-text-sq-color-dark'}` }, label)))))),
19
- tabs.map((tab, index) => (React.createElement(Content, { className: `tw-bg-sq-white dark:tw-bg-sq-dark-background tw-overflow-y-auto -tw-mt-[1px] tw-border-t-[1px] tw-z-[500] tw-flex tw-flex-col tw-flex-grow focus-visible:tw-outline-none ${tab.tabContentExtraClassNames || ''}`, key: `${tab.label}_${index}_content`, value: tab.id }, tab.content)))));
20
- };
21
- export default Tabs;
1
+ import React from 'react';
2
+ import { Content, List, Root, Trigger } from '@radix-ui/react-tabs';
3
+ import Icon from '../Icon';
4
+ const Tabs = ({ tabs, defaultActiveTab, activeTab, onTabSelect, extraClassNames, testId, id, stretchTabs = false, }) => {
5
+ const handleTabSelect = (tabId) => {
6
+ if (activeTab === tabId)
7
+ return;
8
+ onTabSelect && onTabSelect(tabId);
9
+ };
10
+ return (React.createElement(Root, { className: `tw-flex tw-flex-col tw-min-w-[300px] tw-max-w-full tw-flex-grow focus-visible:tw-outline-none ${extraClassNames || ''}`, defaultValue: defaultActiveTab, "data-testid": testId, id: id, value: activeTab, onValueChange: handleTabSelect },
11
+ React.createElement(List, { className: `tw-flex tw-flex-row tw-flex-wrap tw-z-[1001]` }, tabs.map(({ id, icon, label, tabExtraClassNames, testId: tabsTestId, disabled }, index) => (React.createElement(Trigger, { className: `tw-bg-sq-white dark:tw-bg-sq-dark-background tw-h-[45px] focus-visible:tw-outline-none tw-min-w-[100px] tw-px-4 tw-border-solid dark:tw-border-gray-700 tw-flex tw-flex-1 tw-justify-center tw-items-center tw-border-r-[2px] last:tw-border-r-0 ${stretchTabs ? '' : 'tw-max-w-max tw-min-w-fit'} ${tabExtraClassNames || ''} ${activeTab === id
12
+ ? 'tw-border-b-sq-color-dark dark:tw-border-b-sq-color-dark tw-border-b-[3px]'
13
+ : 'hover:tw-bg-sq-light-gray tw-border-b-[1px] hover:dark:tw-bg-gray-700'}`, "data-testid": tabsTestId, disabled: disabled, key: `${label}-${id}-${index}`, value: id },
14
+ React.createElement("span", null,
15
+ icon && React.createElement(Icon, { icon: icon, testId: `${id}_tab-icon`, extraClassNames: "tw-text-[15px] tw-mr-[7px]" }),
16
+ React.createElement("span", { className: `tw-text-[14px] tw-font-medium ${activeTab === id
17
+ ? 'dark:tw-text-sq-dark-text tw-text-gray-500'
18
+ : 'dark:tw-text-sq-color-dark-dark tw-text-sq-color-dark'}` }, label)))))),
19
+ tabs.map((tab, index) => (React.createElement(Content, { className: `tw-bg-sq-white dark:tw-bg-sq-dark-background tw-overflow-y-auto -tw-mt-[1px] tw-border-t-[1px] tw-z-[500] tw-flex tw-flex-col tw-flex-grow focus-visible:tw-outline-none ${tab.tabContentExtraClassNames || ''}`, key: `${tab.label}_${index}_content`, value: tab.id }, tab.content)))));
20
+ };
21
+ export default Tabs;
22
22
  //# sourceMappingURL=Tabs.js.map
@@ -1,91 +1,91 @@
1
- import React from 'react';
2
- import Tabs from './Tabs';
3
- import Button from '../Button';
4
- export default {
5
- title: 'Tabs',
6
- };
7
- const renderData = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
8
- React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "This is a data tab to show details about your data. You can make changes to your account"),
9
- React.createElement(Button, { variant: "outline", label: "Save data" })));
10
- const renderTools = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
11
- React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "Make changes to your account here. Click save when you're done."),
12
- React.createElement(Button, { variant: "outline", label: "Save tools" })));
13
- const renderJournal = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
14
- React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "Make changes to your account here. Click save when you're done."),
15
- React.createElement(Button, { variant: "outline", label: "Save journal" })));
16
- const tabsList = [
17
- {
18
- id: 'data',
19
- label: 'Data',
20
- icon: 'fc-data',
21
- content: renderData(),
22
- },
23
- {
24
- id: 'tools',
25
- label: 'Tools',
26
- icon: 'fc-gears-2',
27
- content: renderTools(),
28
- },
29
- {
30
- id: 'journal',
31
- label: 'Journal',
32
- icon: 'fc-workbook-lock',
33
- content: renderJournal(),
34
- },
35
- ];
36
- const extraTabsList = [
37
- {
38
- id: 'data',
39
- label: 'Data',
40
- icon: 'fc-data',
41
- content: renderData(),
42
- },
43
- {
44
- id: 'tools',
45
- label: 'Tools',
46
- icon: 'fc-gears-2',
47
- content: renderTools(),
48
- },
49
- {
50
- id: 'journal',
51
- label: 'Journal',
52
- icon: 'fc-workbook-lock',
53
- content: renderJournal(),
54
- },
55
- {
56
- id: 'journal2',
57
- label: 'Journal',
58
- icon: 'fc-workbook-lock',
59
- disabled: true,
60
- content: renderJournal(),
61
- },
62
- {
63
- id: 'data3',
64
- label: 'Data 2',
65
- icon: 'fc-data',
66
- disabled: true,
67
- content: renderData(),
68
- },
69
- ];
70
- const colors = ['topic', 'analysis', 'datalab', 'vantage'];
71
- export const AllTabsVariants = () => {
72
- const [activeTab, setActiveTab] = React.useState('data');
73
- const renderAllVariations = (color) => (React.createElement("div", { key: color + '_wrapper' },
74
- React.createElement("div", { className: "tw-p-4" },
75
- React.createElement(Tabs, { stretchTabs: true, activeTab: activeTab, onTabSelect: setActiveTab, defaultActiveTab: "data", tabs: tabsList })),
76
- React.createElement("div", { className: "tw-p-4" },
77
- React.createElement(Tabs, { activeTab: activeTab, onTabSelect: (tabId) => setActiveTab(tabId), defaultActiveTab: "tool", tabs: extraTabsList.map((tab) => ({ ...tab, icon: undefined, tabExtraClassNames: 'tw-max-w-max' })) })),
78
- React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background " },
79
- React.createElement("p", { className: "tw-text-sq-color-dark dark:tw-text-sq-color-dark-dark tw-mb-8" },
80
- color[0].toUpperCase() + color.slice(1),
81
- " Dark mode"),
82
- React.createElement(Tabs, { activeTab: activeTab, onTabSelect: (tabId) => setActiveTab(tabId), defaultActiveTab: "tools", tabs: tabsList.map((tab) => ({ ...tab, icon: undefined })) }))));
83
- return (React.createElement("div", { className: "tw-grid tw-grid-cols-4 tw-gap-4" }, colors.map((color) => {
84
- return (React.createElement("div", { key: color, className: `color_${color}` },
85
- React.createElement("b", null,
86
- color[0].toUpperCase() + color.slice(1),
87
- " Colors"),
88
- renderAllVariations(color)));
89
- })));
90
- };
1
+ import React from 'react';
2
+ import Tabs from './Tabs';
3
+ import Button from '../Button';
4
+ export default {
5
+ title: 'Tabs',
6
+ };
7
+ const renderData = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
8
+ React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "This is a data tab to show details about your data. You can make changes to your account"),
9
+ React.createElement(Button, { variant: "outline", label: "Save data" })));
10
+ const renderTools = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
11
+ React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "Make changes to your account here. Click save when you're done."),
12
+ React.createElement(Button, { variant: "outline", label: "Save tools" })));
13
+ const renderJournal = () => (React.createElement("div", { className: "tw-text-sq-color-gray dark:tw-text-sq-white" },
14
+ React.createElement("p", { className: "tw-mb-5 tw-text-[15px] tw-leading-normal" }, "Make changes to your account here. Click save when you're done."),
15
+ React.createElement(Button, { variant: "outline", label: "Save journal" })));
16
+ const tabsList = [
17
+ {
18
+ id: 'data',
19
+ label: 'Data',
20
+ icon: 'fc-data',
21
+ content: renderData(),
22
+ },
23
+ {
24
+ id: 'tools',
25
+ label: 'Tools',
26
+ icon: 'fc-gears-2',
27
+ content: renderTools(),
28
+ },
29
+ {
30
+ id: 'journal',
31
+ label: 'Journal',
32
+ icon: 'fc-workbook-lock',
33
+ content: renderJournal(),
34
+ },
35
+ ];
36
+ const extraTabsList = [
37
+ {
38
+ id: 'data',
39
+ label: 'Data',
40
+ icon: 'fc-data',
41
+ content: renderData(),
42
+ },
43
+ {
44
+ id: 'tools',
45
+ label: 'Tools',
46
+ icon: 'fc-gears-2',
47
+ content: renderTools(),
48
+ },
49
+ {
50
+ id: 'journal',
51
+ label: 'Journal',
52
+ icon: 'fc-workbook-lock',
53
+ content: renderJournal(),
54
+ },
55
+ {
56
+ id: 'journal2',
57
+ label: 'Journal',
58
+ icon: 'fc-workbook-lock',
59
+ disabled: true,
60
+ content: renderJournal(),
61
+ },
62
+ {
63
+ id: 'data3',
64
+ label: 'Data 2',
65
+ icon: 'fc-data',
66
+ disabled: true,
67
+ content: renderData(),
68
+ },
69
+ ];
70
+ const colors = ['topic', 'analysis', 'datalab', 'vantage'];
71
+ export const AllTabsVariants = () => {
72
+ const [activeTab, setActiveTab] = React.useState('data');
73
+ const renderAllVariations = (color) => (React.createElement("div", { key: color + '_wrapper' },
74
+ React.createElement("div", { className: "tw-p-4" },
75
+ React.createElement(Tabs, { stretchTabs: true, activeTab: activeTab, onTabSelect: setActiveTab, defaultActiveTab: "data", tabs: tabsList })),
76
+ React.createElement("div", { className: "tw-p-4" },
77
+ React.createElement(Tabs, { activeTab: activeTab, onTabSelect: (tabId) => setActiveTab(tabId), defaultActiveTab: "tool", tabs: extraTabsList.map((tab) => ({ ...tab, icon: undefined, tabExtraClassNames: 'tw-max-w-max' })) })),
78
+ React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background " },
79
+ React.createElement("p", { className: "tw-text-sq-color-dark dark:tw-text-sq-color-dark-dark tw-mb-8" },
80
+ color[0].toUpperCase() + color.slice(1),
81
+ " Dark mode"),
82
+ React.createElement(Tabs, { activeTab: activeTab, onTabSelect: (tabId) => setActiveTab(tabId), defaultActiveTab: "tools", tabs: tabsList.map((tab) => ({ ...tab, icon: undefined })) }))));
83
+ return (React.createElement("div", { className: "tw-grid tw-grid-cols-4 tw-gap-4" }, colors.map((color) => {
84
+ return (React.createElement("div", { key: color, className: `color_${color}` },
85
+ React.createElement("b", null,
86
+ color[0].toUpperCase() + color.slice(1),
87
+ " Colors"),
88
+ renderAllVariations(color)));
89
+ })));
90
+ };
91
91
  //# sourceMappingURL=Tabs.stories.js.map