@seeqdev/qomponents 0.0.132 → 0.0.133

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 (140) hide show
  1. package/README.md +135 -135
  2. package/dist/Accordion/Accordion.js +8 -8
  3. package/dist/Accordion/Accordion.stories.js +114 -114
  4. package/dist/Accordion/Accordion.test.js +54 -54
  5. package/dist/Accordion/Accordion.types.js +1 -1
  6. package/dist/Accordion/index.js +1 -1
  7. package/dist/Alert/Alert.js +33 -33
  8. package/dist/Alert/Alert.stories.js +51 -51
  9. package/dist/Alert/Alert.test.js +50 -50
  10. package/dist/Alert/Alert.types.js +1 -1
  11. package/dist/Alert/index.js +1 -1
  12. package/dist/Button/Button.js +91 -91
  13. package/dist/Button/Button.stories.js +99 -99
  14. package/dist/Button/Button.test.js +48 -48
  15. package/dist/Button/Button.types.js +4 -4
  16. package/dist/Button/index.js +1 -1
  17. package/dist/ButtonGroup/ButtonGroup.js +32 -32
  18. package/dist/ButtonGroup/ButtonGroup.stories.js +384 -384
  19. package/dist/ButtonGroup/ButtonGroup.test.js +66 -66
  20. package/dist/ButtonGroup/ButtonGroup.types.js +1 -1
  21. package/dist/ButtonGroup/index.js +1 -1
  22. package/dist/ButtonWithDropdown/ButtonWithDropdown.js +59 -59
  23. package/dist/ButtonWithDropdown/ButtonWithDropdown.stories.js +142 -142
  24. package/dist/ButtonWithDropdown/ButtonWithDropdown.test.js +92 -92
  25. package/dist/ButtonWithDropdown/ButtonWithDropdown.types.js +1 -1
  26. package/dist/ButtonWithDropdown/index.js +1 -1
  27. package/dist/ButtonWithPopover/ButtonWithPopover.js +61 -61
  28. package/dist/ButtonWithPopover/ButtonWithPopover.stories.js +74 -74
  29. package/dist/ButtonWithPopover/ButtonWithPopover.test.js +81 -81
  30. package/dist/ButtonWithPopover/ButtonWithPopover.types.js +1 -1
  31. package/dist/ButtonWithPopover/index.js +1 -1
  32. package/dist/Carousel/Carousel.js +66 -66
  33. package/dist/Carousel/Carousel.stories.js +114 -114
  34. package/dist/Carousel/Carousel.test.js +47 -47
  35. package/dist/Carousel/Carousel.types.js +1 -1
  36. package/dist/Carousel/index.js +1 -1
  37. package/dist/Checkbox/Checkbox.js +25 -25
  38. package/dist/Checkbox/Checkbox.stories.js +33 -33
  39. package/dist/Checkbox/Checkbox.test.js +93 -93
  40. package/dist/Checkbox/Checkbox.types.js +1 -1
  41. package/dist/Checkbox/index.js +1 -1
  42. package/dist/Collapse/Collapse.js +17 -17
  43. package/dist/Collapse/Collapse.stories.js +36 -36
  44. package/dist/Collapse/Collapse.test.js +18 -18
  45. package/dist/Collapse/Collapse.types.js +1 -1
  46. package/dist/Collapse/index.js +1 -1
  47. package/dist/Icon/Icon.js +54 -54
  48. package/dist/Icon/Icon.stories.js +46 -46
  49. package/dist/Icon/Icon.test.js +54 -54
  50. package/dist/Icon/Icon.types.js +15 -15
  51. package/dist/Icon/index.js +1 -1
  52. package/dist/InputGroup/InputGroup.js +31 -31
  53. package/dist/InputGroup/InputGroup.stories.js +167 -167
  54. package/dist/InputGroup/InputGroup.test.js +42 -42
  55. package/dist/InputGroup/InputGroup.types.js +1 -1
  56. package/dist/InputGroup/index.js +1 -1
  57. package/dist/Modal/Modal.js +99 -99
  58. package/dist/Modal/Modal.js.map +1 -1
  59. package/dist/Modal/Modal.stories.js +126 -126
  60. package/dist/Modal/Modal.test.js +107 -107
  61. package/dist/Modal/Modal.types.js +1 -1
  62. package/dist/Modal/index.js +1 -1
  63. package/dist/ProgressBar/ProgressBar.js +49 -29
  64. package/dist/ProgressBar/ProgressBar.js.map +1 -1
  65. package/dist/ProgressBar/ProgressBar.stories.js +80 -72
  66. package/dist/ProgressBar/ProgressBar.stories.js.map +1 -1
  67. package/dist/ProgressBar/ProgressBar.test.js +43 -37
  68. package/dist/ProgressBar/ProgressBar.test.js.map +1 -1
  69. package/dist/ProgressBar/ProgressBar.types.d.ts +2 -0
  70. package/dist/ProgressBar/ProgressBar.types.js +1 -1
  71. package/dist/ProgressBar/index.js +1 -1
  72. package/dist/SeeqActionDropdown/SeeqActionDropdown.js +47 -47
  73. package/dist/SeeqActionDropdown/SeeqActionDropdown.stories.js +79 -79
  74. package/dist/SeeqActionDropdown/SeeqActionDropdown.test.js +72 -72
  75. package/dist/SeeqActionDropdown/SeeqActionDropdown.types.js +1 -1
  76. package/dist/SeeqActionDropdown/index.js +1 -1
  77. package/dist/SeeqActionDropdown/variants.js +22 -22
  78. package/dist/Select/Select.js +173 -173
  79. package/dist/Select/Select.stories.js +79 -79
  80. package/dist/Select/Select.test.js +181 -181
  81. package/dist/Select/Select.types.js +1 -1
  82. package/dist/Select/index.js +2 -2
  83. package/dist/Slider/Slider.js +12 -12
  84. package/dist/Slider/Slider.stories.js +57 -57
  85. package/dist/Slider/Slider.test.js +32 -32
  86. package/dist/Slider/Slider.types.js +1 -1
  87. package/dist/Slider/index.js +1 -1
  88. package/dist/Tabs/Tabs.js +21 -21
  89. package/dist/Tabs/Tabs.stories.js +90 -90
  90. package/dist/Tabs/Tabs.test.js +90 -90
  91. package/dist/Tabs/Tabs.types.js +1 -1
  92. package/dist/Tabs/index.js +1 -1
  93. package/dist/TextArea/TextArea.js +24 -24
  94. package/dist/TextArea/TextArea.stories.js +45 -45
  95. package/dist/TextArea/TextArea.test.js +67 -67
  96. package/dist/TextArea/TextArea.types.js +1 -1
  97. package/dist/TextArea/index.js +1 -1
  98. package/dist/TextField/TextField.js +78 -78
  99. package/dist/TextField/TextField.stories.js +69 -69
  100. package/dist/TextField/TextField.test.js +38 -38
  101. package/dist/TextField/TextField.types.js +1 -1
  102. package/dist/TextField/index.js +1 -1
  103. package/dist/ToolbarButton/ToolbarButton.js +74 -74
  104. package/dist/ToolbarButton/ToolbarButton.stories.js +93 -93
  105. package/dist/ToolbarButton/ToolbarButton.test.js +92 -92
  106. package/dist/ToolbarButton/ToolbarButton.types.js +1 -1
  107. package/dist/ToolbarButton/index.js +1 -1
  108. package/dist/Tooltip/QTip.stories.js +44 -44
  109. package/dist/Tooltip/QTip.types.js +1 -1
  110. package/dist/Tooltip/QTipPerformance.stories.js +29 -29
  111. package/dist/Tooltip/Qtip.js +167 -167
  112. package/dist/Tooltip/Tooltip.js +35 -35
  113. package/dist/Tooltip/Tooltip.stories.js +31 -31
  114. package/dist/Tooltip/Tooltip.types.js +2 -2
  115. package/dist/Tooltip/TooltipPerformance.stories.js +29 -29
  116. package/dist/Tooltip/index.js +2 -2
  117. package/dist/Tooltip/qTip.utilities.js +10 -10
  118. package/dist/example/.eslintrc.cjs +14 -14
  119. package/dist/example/README.md +33 -33
  120. package/dist/example/index.html +13 -13
  121. package/dist/example/package.json +30 -30
  122. package/dist/example/src/ComplexSelectExample.tsx +81 -81
  123. package/dist/example/src/Example.tsx +408 -408
  124. package/dist/example/src/index.css +102 -102
  125. package/dist/example/src/main.tsx +10 -10
  126. package/dist/example/src/vite-env.d.ts +1 -1
  127. package/dist/example/tsconfig.json +33 -33
  128. package/dist/example/tsconfig.node.json +12 -12
  129. package/dist/example/vite.config.ts +12 -12
  130. package/dist/index.esm.js +1229 -31
  131. package/dist/index.esm.js.map +1 -1
  132. package/dist/index.js +1229 -31
  133. package/dist/index.js.map +1 -1
  134. package/dist/styles.css +3714 -3709
  135. package/dist/types.js +1 -1
  136. package/dist/utils/browserId.js +28 -28
  137. package/dist/utils/svg.js +19 -19
  138. package/dist/utils/validateStyleDimension.js +13 -13
  139. package/dist/utils/validateStyleDimension.test.js +19 -19
  140. package/package.json +88 -86
@@ -1,67 +1,67 @@
1
- import React from 'react';
2
- import { render, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom/extend-expect';
4
- import { ButtonGroup } from './ButtonGroup';
5
- describe('ButtonGroup', () => {
6
- const mockOnChange = jest.fn();
7
- const defaultProps = {
8
- id: 'test-id',
9
- extraClassNames: 'extra-class',
10
- testId: 'button-group',
11
- onChange: mockOnChange,
12
- buttons: [
13
- {
14
- variant: 'button',
15
- buttonProps: {
16
- testId: 'button1',
17
- value: 'button1',
18
- variant: 'outline',
19
- extraClassNames: 'button-class',
20
- isActive: true,
21
- },
22
- },
23
- {
24
- variant: 'button',
25
- buttonProps: {
26
- testId: 'button2',
27
- value: 'button2',
28
- variant: 'theme',
29
- extraClassNames: 'button-class',
30
- },
31
- },
32
- {
33
- variant: 'element',
34
- element: React.createElement("span", null, "Custom Element"),
35
- },
36
- ],
37
- };
38
- it('renders ButtonGroup with buttons and custom elements', () => {
39
- const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
40
- const buttonGroup = getByTestId('button-group');
41
- expect(buttonGroup).toBeInTheDocument();
42
- expect(buttonGroup).toHaveClass('tw-flex tw-outline-none tw-rounded-sm tw-w-full tw-relative tw-flex-wrap extra-class');
43
- const button1 = getByTestId('button1');
44
- expect(button1).toBeInTheDocument();
45
- expect(button1).toHaveClass('button-class');
46
- const button2 = getByTestId('button2');
47
- expect(button2).toBeInTheDocument();
48
- expect(button2).toHaveClass('button-class');
49
- });
50
- it('calls onChange when a button is clicked', () => {
51
- const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
52
- const button1 = getByTestId('button1');
53
- fireEvent.click(button1);
54
- expect(mockOnChange).toHaveBeenCalledWith('button1');
55
- const button2 = getByTestId('button2');
56
- fireEvent.click(button2);
57
- expect(mockOnChange).toHaveBeenCalledWith('button2');
58
- });
59
- it('applies active classes based on value and variant', () => {
60
- const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
61
- const button1 = getByTestId('button1');
62
- expect(button1).toHaveClass('!tw-bg-sq-disabled-gray tw-border-sq-color-dark');
63
- const button2 = getByTestId('button2');
64
- expect(button2).not.toHaveClass('tw-bg-sq-color-highlight');
65
- });
66
- });
1
+ import React from 'react';
2
+ import { render, fireEvent } from '@testing-library/react';
3
+ import '@testing-library/jest-dom/extend-expect';
4
+ import { ButtonGroup } from './ButtonGroup';
5
+ describe('ButtonGroup', () => {
6
+ const mockOnChange = jest.fn();
7
+ const defaultProps = {
8
+ id: 'test-id',
9
+ extraClassNames: 'extra-class',
10
+ testId: 'button-group',
11
+ onChange: mockOnChange,
12
+ buttons: [
13
+ {
14
+ variant: 'button',
15
+ buttonProps: {
16
+ testId: 'button1',
17
+ value: 'button1',
18
+ variant: 'outline',
19
+ extraClassNames: 'button-class',
20
+ isActive: true,
21
+ },
22
+ },
23
+ {
24
+ variant: 'button',
25
+ buttonProps: {
26
+ testId: 'button2',
27
+ value: 'button2',
28
+ variant: 'theme',
29
+ extraClassNames: 'button-class',
30
+ },
31
+ },
32
+ {
33
+ variant: 'element',
34
+ element: React.createElement("span", null, "Custom Element"),
35
+ },
36
+ ],
37
+ };
38
+ it('renders ButtonGroup with buttons and custom elements', () => {
39
+ const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
40
+ const buttonGroup = getByTestId('button-group');
41
+ expect(buttonGroup).toBeInTheDocument();
42
+ expect(buttonGroup).toHaveClass('tw-flex tw-outline-none tw-rounded-sm tw-w-full tw-relative tw-flex-wrap extra-class');
43
+ const button1 = getByTestId('button1');
44
+ expect(button1).toBeInTheDocument();
45
+ expect(button1).toHaveClass('button-class');
46
+ const button2 = getByTestId('button2');
47
+ expect(button2).toBeInTheDocument();
48
+ expect(button2).toHaveClass('button-class');
49
+ });
50
+ it('calls onChange when a button is clicked', () => {
51
+ const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
52
+ const button1 = getByTestId('button1');
53
+ fireEvent.click(button1);
54
+ expect(mockOnChange).toHaveBeenCalledWith('button1');
55
+ const button2 = getByTestId('button2');
56
+ fireEvent.click(button2);
57
+ expect(mockOnChange).toHaveBeenCalledWith('button2');
58
+ });
59
+ it('applies active classes based on value and variant', () => {
60
+ const { getByTestId } = render(React.createElement(ButtonGroup, { ...defaultProps }));
61
+ const button1 = getByTestId('button1');
62
+ expect(button1).toHaveClass('!tw-bg-sq-disabled-gray tw-border-sq-color-dark');
63
+ const button2 = getByTestId('button2');
64
+ expect(button2).not.toHaveClass('tw-bg-sq-color-highlight');
65
+ });
66
+ });
67
67
  //# sourceMappingURL=ButtonGroup.test.js.map
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=ButtonGroup.types.js.map
@@ -1,2 +1,2 @@
1
- export { ButtonGroup as default } from './ButtonGroup';
1
+ export { ButtonGroup as default } from './ButtonGroup';
2
2
  //# sourceMappingURL=index.js.map
@@ -1,60 +1,60 @@
1
- import * as React from 'react';
2
- import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
3
- import Icon from '../Icon';
4
- import { getQTipData } from '../Tooltip/qTip.utilities';
5
- const borderStyles = [
6
- 'tw-border-solid',
7
- 'tw-border',
8
- 'tw-rounded-sm',
9
- 'tw-border-sq-disabled-gray',
10
- 'dark:tw-border-gray-500',
11
- ].join(' ');
12
- const bgStyles = ['tw-bg-sq-white', 'dark:tw-bg-sq-dark-background'].join(' ');
13
- const disabledClasses = ['tw-opacity-50', 'tw-cursor-not-allowed'].join(' ');
14
- const ButtonWithDropdown = ({ dropdownItems, triggerIcon, id, extraClassNames = '', contentExtraClassNames = '', containerTestId, disabled = false, align = 'end', placement = 'bottom', placementOffset = 5, alignOffset = -35, hasArrow = false, onOpenChange, isOpen, setFocusOnTriggerOnClose = true, keepFocusInsideDropdown = true, onContainerClick, ...tooltipProps }) => {
15
- const tooltipData = getQTipData(tooltipProps);
16
- return (React.createElement(DropdownMenu.Root, { defaultOpen: false, open: isOpen, onOpenChange: onOpenChange, modal: keepFocusInsideDropdown },
17
- React.createElement(DropdownMenu.Trigger, { id: id, className: `tw-border-none focus-visible:tw-outline-none focus:tw-outline-none focus-within:tw-outline-none`, disabled: disabled },
18
- React.createElement("div", { ...tooltipData, className: `tw-bg-transparent tw-flex tw-flex-col tw-items-center focus-visible:tw-outline-none focus:tw-outline-none focus-within:tw-outline-none ${disabled ? disabledClasses : ''} ${extraClassNames}` }, triggerIcon)),
19
- React.createElement(DropdownMenu.Portal, null,
20
- React.createElement(DropdownMenu.Content, { onClick: onContainerClick, sideOffset: placementOffset, side: placement, align: align, alignOffset: alignOffset, asChild: true, onCloseAutoFocus: (e) => !setFocusOnTriggerOnClose && e.preventDefault(), className: "focus-visible:tw-outline-none tw-outline-none" },
21
- React.createElement("div", { "data-testid": containerTestId, className: `${bgStyles} tw-relative tw-z-[1200] tw-min-w-6 tw-py-2 focus-visible:tw-outline-none tw-outline-none data-[state=open]:tw-animate-in data-[state=closed]:tw-animate-out forceFont data-[side=top]:tw-animate-slideDownAndFade data-[side=right]:tw-animate-slideLeftAndFade data-[side=bottom]:tw-animate-slideUpAndFade data-[side=left]:tw-animate-slideRightAndFade ${borderStyles} ${contentExtraClassNames}` },
22
- hasArrow && (React.createElement(DropdownMenu.Arrow, { asChild: true },
23
- React.createElement("div", { className: " tw-fill-transparent tw-bg-white tw-w-[15px] tw-h-[15px] tw-rotate-45 dark:tw-bg-sq-dark-background tw-border-b tw-border-r tw-border-sq-disabled-gray dark:tw-border-gray-500 tw-mt-[-7px]" }))),
24
- dropdownItems.map((item, index) => {
25
- const tooltipData = getQTipData(item);
26
- if (item.isLabel) {
27
- return (React.createElement(DropdownMenu.Label, { key: (item.id || '') + index, className: item.itemExtraClassNames, ...tooltipData },
28
- item.icon && (React.createElement(Icon, { icon: item.icon, testId: item.iconTestId, type: "text", color: item.iconColor, extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" })),
29
- React.createElement("div", { "data-testid": item.labelTestId, className: `tw-text-[13px] tw-ml-1 ${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses}` }, item.label)));
30
- }
31
- if (Array.isArray(item.subMenuItems) && item.subMenuItems.length > 0) {
32
- return (React.createElement(DropdownMenu.Sub, { key: (item.id || item.icon || '') + index },
33
- React.createElement(DropdownMenu.SubTrigger, { id: id, className: `tw-cursor-pointer tw-flex tw-justify-between dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-h-[27px] tw-pl-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none ${item.itemExtraClassNames || ''}`, "data-testid": item.testId, disabled: item.disabled, ...tooltipData },
34
- React.createElement("div", { className: "tw-flex" },
35
- item.icon && (React.createElement(Icon, { icon: item.icon, extraClassNames: `tw-w-[18px] ${item.disabled
36
- ? '!tw-text-sq-disabled-gray'
37
- : 'tw-text-sq-text-color dark:tw-text-sq-white'} ${item.iconExtraClassNames || ''}` })),
38
- React.createElement("div", { "data-testid": item.labelTestId, "data-customid": item.labelCustomId, className: `tw-text-[13px] tw-ml-1 ${item.disabled && '!tw-opacity-30'} tw-not-italic tw-font-semibold ${item.labelClasses}` }, item.label)),
39
- React.createElement(Icon, { small: true, icon: "fc-arrow-dropdown -tw-rotate-90", extraClassNames: `${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-w-[18px] tw-ml-4 tw-text-[8px] tw-justify-center tw-flex` })),
40
- React.createElement(DropdownMenu.Portal, null,
41
- React.createElement(DropdownMenu.SubContent, { className: "focus-visible:tw-outline-none tw-outline-none" },
42
- React.createElement("div", { "data-testid": containerTestId, className: `${bgStyles} tw-relative tw-z-[1000] tw-min-w-6 tw-py-2 focus-visible:tw-outline-none tw-outline-none data-[state=open]:tw-animate-in data-[state=closed]:tw-animate-out forceFont data-[side=top]:tw-animate-slideDownAndFade data-[side=right]:tw-animate-slideLeftAndFade data-[side=bottom]:tw-animate-slideUpAndFade data-[side=left]:tw-animate-slideRightAndFade ${borderStyles}` }, item.subMenuItems.map((subItem, subIndex) => {
43
- return (React.createElement(DropdownMenu.Item, { key: subItem.label + subIndex, onSelect: subItem.onClick, "data-qtip-text": subItem.tooltip, className: "tw-cursor-pointer tw-flex dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-h-[27px] tw-px-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none", disabled: subItem.disabled },
44
- subItem.iconClass && (React.createElement(Icon, { icon: subItem.iconClass, type: "text", extraClassNames: `tw-w-[18px] ${item.disabled && '!tw-opacity-30'}` })),
45
- React.createElement("div", { className: `tw-text-[13px] tw-ml-1 ${subItem.disabled
46
- ? 'tw-text-sq-disabled-gray'
47
- : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses}` }, subItem.label)));
48
- }))))));
49
- }
50
- return (React.createElement("div", { key: (item.id || '') + index, ...tooltipData },
51
- React.createElement(DropdownMenu.Item, { key: (item.id || item.icon || '') + index, "data-customid": item.itemCustomId, onSelect: (e) => {
52
- item.onClick(e);
53
- }, className: `tw-cursor-pointer tw-flex dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-min-h-[27px] tw-px-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none ${item.itemExtraClassNames || ''}`, "data-testid": item.testId, disabled: item.disabled },
54
- item.icon && (React.createElement(Icon, { icon: item.icon, testId: item.iconTestId, type: (item.iconType || 'text'), color: item.iconColor, customId: item.iconCustomId, extraClassNames: `tw-w-[18px] ${item.disabled && '!tw-opacity-30'} ${item.iconExtraClassNames || ''}` })),
55
- React.createElement("div", { "data-testid": item.labelTestId, "data-customid": item.labelCustomId, className: `tw-text-[13px] tw-ml-1 ${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses || ''}` }, item.label)),
56
- item.hasDivider && (React.createElement(DropdownMenu.Separator, { "data-testid": `dropdown-divider-${index}`, className: "tw-h-[1px] tw-bg-sq-disabled-gray dark:tw-bg-gray-500 tw-my-[8px]" }))));
57
- }))))));
58
- };
59
- export default ButtonWithDropdown;
1
+ import * as React from 'react';
2
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
3
+ import Icon from '../Icon';
4
+ import { getQTipData } from '../Tooltip/qTip.utilities';
5
+ const borderStyles = [
6
+ 'tw-border-solid',
7
+ 'tw-border',
8
+ 'tw-rounded-sm',
9
+ 'tw-border-sq-disabled-gray',
10
+ 'dark:tw-border-gray-500',
11
+ ].join(' ');
12
+ const bgStyles = ['tw-bg-sq-white', 'dark:tw-bg-sq-dark-background'].join(' ');
13
+ const disabledClasses = ['tw-opacity-50', 'tw-cursor-not-allowed'].join(' ');
14
+ const ButtonWithDropdown = ({ dropdownItems, triggerIcon, id, extraClassNames = '', contentExtraClassNames = '', containerTestId, disabled = false, align = 'end', placement = 'bottom', placementOffset = 5, alignOffset = -35, hasArrow = false, onOpenChange, isOpen, setFocusOnTriggerOnClose = true, keepFocusInsideDropdown = true, onContainerClick, ...tooltipProps }) => {
15
+ const tooltipData = getQTipData(tooltipProps);
16
+ return (React.createElement(DropdownMenu.Root, { defaultOpen: false, open: isOpen, onOpenChange: onOpenChange, modal: keepFocusInsideDropdown },
17
+ React.createElement(DropdownMenu.Trigger, { id: id, className: `tw-border-none focus-visible:tw-outline-none focus:tw-outline-none focus-within:tw-outline-none`, disabled: disabled },
18
+ React.createElement("div", { ...tooltipData, className: `tw-bg-transparent tw-flex tw-flex-col tw-items-center focus-visible:tw-outline-none focus:tw-outline-none focus-within:tw-outline-none ${disabled ? disabledClasses : ''} ${extraClassNames}` }, triggerIcon)),
19
+ React.createElement(DropdownMenu.Portal, null,
20
+ React.createElement(DropdownMenu.Content, { onClick: onContainerClick, sideOffset: placementOffset, side: placement, align: align, alignOffset: alignOffset, asChild: true, onCloseAutoFocus: (e) => !setFocusOnTriggerOnClose && e.preventDefault(), className: "focus-visible:tw-outline-none tw-outline-none" },
21
+ React.createElement("div", { "data-testid": containerTestId, className: `${bgStyles} tw-relative tw-z-[1200] tw-min-w-6 tw-py-2 focus-visible:tw-outline-none tw-outline-none data-[state=open]:tw-animate-in data-[state=closed]:tw-animate-out forceFont data-[side=top]:tw-animate-slideDownAndFade data-[side=right]:tw-animate-slideLeftAndFade data-[side=bottom]:tw-animate-slideUpAndFade data-[side=left]:tw-animate-slideRightAndFade ${borderStyles} ${contentExtraClassNames}` },
22
+ hasArrow && (React.createElement(DropdownMenu.Arrow, { asChild: true },
23
+ React.createElement("div", { className: " tw-fill-transparent tw-bg-white tw-w-[15px] tw-h-[15px] tw-rotate-45 dark:tw-bg-sq-dark-background tw-border-b tw-border-r tw-border-sq-disabled-gray dark:tw-border-gray-500 tw-mt-[-7px]" }))),
24
+ dropdownItems.map((item, index) => {
25
+ const tooltipData = getQTipData(item);
26
+ if (item.isLabel) {
27
+ return (React.createElement(DropdownMenu.Label, { key: (item.id || '') + index, className: item.itemExtraClassNames, ...tooltipData },
28
+ item.icon && (React.createElement(Icon, { icon: item.icon, testId: item.iconTestId, type: "text", color: item.iconColor, extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" })),
29
+ React.createElement("div", { "data-testid": item.labelTestId, className: `tw-text-[13px] tw-ml-1 ${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses}` }, item.label)));
30
+ }
31
+ if (Array.isArray(item.subMenuItems) && item.subMenuItems.length > 0) {
32
+ return (React.createElement(DropdownMenu.Sub, { key: (item.id || item.icon || '') + index },
33
+ React.createElement(DropdownMenu.SubTrigger, { id: id, className: `tw-cursor-pointer tw-flex tw-justify-between dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-h-[27px] tw-pl-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none ${item.itemExtraClassNames || ''}`, "data-testid": item.testId, disabled: item.disabled, ...tooltipData },
34
+ React.createElement("div", { className: "tw-flex" },
35
+ item.icon && (React.createElement(Icon, { icon: item.icon, extraClassNames: `tw-w-[18px] ${item.disabled
36
+ ? '!tw-text-sq-disabled-gray'
37
+ : 'tw-text-sq-text-color dark:tw-text-sq-white'} ${item.iconExtraClassNames || ''}` })),
38
+ React.createElement("div", { "data-testid": item.labelTestId, "data-customid": item.labelCustomId, className: `tw-text-[13px] tw-ml-1 ${item.disabled && '!tw-opacity-30'} tw-not-italic tw-font-semibold ${item.labelClasses}` }, item.label)),
39
+ React.createElement(Icon, { small: true, icon: "fc-arrow-dropdown -tw-rotate-90", extraClassNames: `${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-w-[18px] tw-ml-4 tw-text-[8px] tw-justify-center tw-flex` })),
40
+ React.createElement(DropdownMenu.Portal, null,
41
+ React.createElement(DropdownMenu.SubContent, { className: "focus-visible:tw-outline-none tw-outline-none" },
42
+ React.createElement("div", { "data-testid": containerTestId, className: `${bgStyles} tw-relative tw-z-[1000] tw-min-w-6 tw-py-2 focus-visible:tw-outline-none tw-outline-none data-[state=open]:tw-animate-in data-[state=closed]:tw-animate-out forceFont data-[side=top]:tw-animate-slideDownAndFade data-[side=right]:tw-animate-slideLeftAndFade data-[side=bottom]:tw-animate-slideUpAndFade data-[side=left]:tw-animate-slideRightAndFade ${borderStyles}` }, item.subMenuItems.map((subItem, subIndex) => {
43
+ return (React.createElement(DropdownMenu.Item, { key: subItem.label + subIndex, onSelect: subItem.onClick, "data-qtip-text": subItem.tooltip, className: "tw-cursor-pointer tw-flex dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-h-[27px] tw-px-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none", disabled: subItem.disabled },
44
+ subItem.iconClass && (React.createElement(Icon, { icon: subItem.iconClass, type: "text", extraClassNames: `tw-w-[18px] ${item.disabled && '!tw-opacity-30'}` })),
45
+ React.createElement("div", { className: `tw-text-[13px] tw-ml-1 ${subItem.disabled
46
+ ? 'tw-text-sq-disabled-gray'
47
+ : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses}` }, subItem.label)));
48
+ }))))));
49
+ }
50
+ return (React.createElement("div", { key: (item.id || '') + index, ...tooltipData },
51
+ React.createElement(DropdownMenu.Item, { key: (item.id || item.icon || '') + index, "data-customid": item.itemCustomId, onSelect: (e) => {
52
+ item.onClick(e);
53
+ }, className: `tw-cursor-pointer tw-flex dark:tw-text-sq-white hover:tw-bg-sq-gray-highlight dark:hover:tw-bg-sq-gray-highlight-dark tw-leading-none tw-items-center tw-min-h-[27px] tw-px-[19px] tw-relative tw-select-none tw-outline-none data-[disabled]:tw-pointer-events-none ${item.itemExtraClassNames || ''}`, "data-testid": item.testId, disabled: item.disabled },
54
+ item.icon && (React.createElement(Icon, { icon: item.icon, testId: item.iconTestId, type: (item.iconType || 'text'), color: item.iconColor, customId: item.iconCustomId, extraClassNames: `tw-w-[18px] ${item.disabled && '!tw-opacity-30'} ${item.iconExtraClassNames || ''}` })),
55
+ React.createElement("div", { "data-testid": item.labelTestId, "data-customid": item.labelCustomId, className: `tw-text-[13px] tw-ml-1 ${item.disabled ? 'tw-text-sq-disabled-gray' : 'tw-text-sq-text-color dark:tw-text-sq-white'} tw-not-italic tw-font-normal ${item.labelClasses || ''}` }, item.label)),
56
+ item.hasDivider && (React.createElement(DropdownMenu.Separator, { "data-testid": `dropdown-divider-${index}`, className: "tw-h-[1px] tw-bg-sq-disabled-gray dark:tw-bg-gray-500 tw-my-[8px]" }))));
57
+ }))))));
58
+ };
59
+ export default ButtonWithDropdown;
60
60
  //# sourceMappingURL=ButtonWithDropdown.js.map
@@ -1,143 +1,143 @@
1
- import React from 'react';
2
- import ButtonWithDropdown from './ButtonWithDropdown';
3
- import Icon from '../Icon';
4
- import { QTip } from '../Tooltip/Qtip';
5
- export default {
6
- title: 'Button with Dropdown',
7
- };
8
- export const AllButtonWithDropdownVariants = () => {
9
- const [openDropdown, setOpenDropdown] = React.useState('');
10
- const allButtonWithDropdowns = (color, isDark) => (React.createElement("div", { className: isDark ? 'tw-dark tw-bg-sq-dark-background' : '' },
11
- React.createElement("div", { className: "tw-p-5 " },
12
- React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-1-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-1-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown1", tooltip: "This is a small dropdown.", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
13
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown('') },
14
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
15
- { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
16
- {
17
- label: 'Banana',
18
- icon: 'fc-user-community',
19
- onClick: () => setOpenDropdown(''),
20
- tooltipDelay: 0,
21
- tooltip: 'This is a banana',
22
- },
23
- ] })),
24
- React.createElement("div", { className: "tw-p-5 " },
25
- React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-2-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-2-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
26
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
27
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
28
- { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
29
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
30
- ], containerTestId: "basic-dropdown1", tooltip: "This is a normal dropdown.", tooltipDelay: 0, tooltipPlacement: "top" })),
31
- React.createElement("div", { className: "tw-p-5 " },
32
- React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown with arrow"),
33
- React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-3-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-3-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
34
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
35
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
36
- { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
37
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
38
- ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the end", tooltipDelay: 0, tooltipPlacement: "top" })),
39
- React.createElement("div", { className: "tw-p-5 " },
40
- React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown aligned at center"),
41
- React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-4-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-4-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
42
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
43
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
44
- { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
45
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
46
- ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the center", align: "center", tooltipDelay: 0, tooltipPlacement: "top" })),
47
- React.createElement("div", { className: "tw-p-5 " },
48
- React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown aligned at start"),
49
- React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-5-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-5-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
50
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
51
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
52
- { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
53
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
54
- ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the center", align: "start", tooltipDelay: 0, tooltipPlacement: "top" })),
55
- React.createElement("div", { className: "tw-p-5 " },
56
- React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-gears-2", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), dropdownItems: [], onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-6-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-6-${color}-${isDark ? 'dark' : 'light'}`, containerTestId: "basic-dropdown2", tooltip: "This is a disabled dropdown.", tooltipDelay: 0, tooltipPlacement: "top", disabled: true })),
57
- React.createElement("div", { className: "tw-p-5 " },
58
- React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-7-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-7-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown7", tooltip: "This is a dropdown with submenu", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
59
- { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown('') },
60
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
61
- {
62
- label: 'Guava',
63
- icon: 'fc-user-community',
64
- onClick: () => setOpenDropdown(''),
65
- tooltipDelay: 0,
66
- tooltip: 'This is a guava',
67
- subMenuItems: [
68
- { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
69
- { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
70
- { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
71
- ],
72
- },
73
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
74
- {
75
- label: 'Cashew',
76
- icon: 'fc-user-community',
77
- disabled: true,
78
- onClick: () => setOpenDropdown(''),
79
- subMenuItems: [
80
- { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
81
- { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
82
- { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
83
- ],
84
- },
85
- ] })),
86
- React.createElement("div", { className: "tw-p-5 " },
87
- React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-8-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-8-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown8", tooltip: "This is a dropdown with submenu", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
88
- {
89
- label: (React.createElement("div", null,
90
- React.createElement("h5", null, "Label heading"),
91
- React.createElement("p", null, "Label description"),
92
- React.createElement("p", null, "Dropdown is my work"),
93
- React.createElement("p", null, "I do it happily"),
94
- React.createElement("p", null, "Final remards"),
95
- React.createElement("p", null, "Thank you"))),
96
- icon: 'fc-data-file',
97
- onClick: () => setOpenDropdown(''),
98
- },
99
- { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
100
- {
101
- label: 'Guava',
102
- icon: 'fc-user-community',
103
- onClick: () => setOpenDropdown(''),
104
- tooltipDelay: 0,
105
- tooltip: 'This is a guava',
106
- subMenuItems: [
107
- { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
108
- { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
109
- { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
110
- ],
111
- },
112
- { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
113
- {
114
- label: 'Cashew',
115
- icon: 'fc-user-community',
116
- disabled: true,
117
- onClick: () => setOpenDropdown(''),
118
- subMenuItems: [
119
- { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
120
- { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
121
- { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
122
- ],
123
- },
124
- ] }))));
125
- const renderAllVariations = (color) => (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4 tw-p-4" },
126
- allButtonWithDropdowns(color),
127
- allButtonWithDropdowns(color, true)));
128
- return (React.createElement("div", { className: "tw-grid tw-grid-cols-4 tw-gap-4" },
129
- React.createElement(QTip, null),
130
- React.createElement("div", { className: "color_topic" },
131
- React.createElement("b", null, "Topic Colors"),
132
- renderAllVariations('topic')),
133
- React.createElement("div", { className: "color_analysis" },
134
- React.createElement("b", null, "Analysis Colors"),
135
- renderAllVariations('analysis')),
136
- React.createElement("div", { className: "color_datalab" },
137
- React.createElement("b", null, "Datalab Colors"),
138
- renderAllVariations('datalab')),
139
- React.createElement("div", { className: "color_vantage" },
140
- React.createElement("b", null, "Vantage Colors"),
141
- renderAllVariations('vantage'))));
142
- };
1
+ import React from 'react';
2
+ import ButtonWithDropdown from './ButtonWithDropdown';
3
+ import Icon from '../Icon';
4
+ import { QTip } from '../Tooltip/Qtip';
5
+ export default {
6
+ title: 'Button with Dropdown',
7
+ };
8
+ export const AllButtonWithDropdownVariants = () => {
9
+ const [openDropdown, setOpenDropdown] = React.useState('');
10
+ const allButtonWithDropdowns = (color, isDark) => (React.createElement("div", { className: isDark ? 'tw-dark tw-bg-sq-dark-background' : '' },
11
+ React.createElement("div", { className: "tw-p-5 " },
12
+ React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-1-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-1-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown1", tooltip: "This is a small dropdown.", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
13
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown('') },
14
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
15
+ { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
16
+ {
17
+ label: 'Banana',
18
+ icon: 'fc-user-community',
19
+ onClick: () => setOpenDropdown(''),
20
+ tooltipDelay: 0,
21
+ tooltip: 'This is a banana',
22
+ },
23
+ ] })),
24
+ React.createElement("div", { className: "tw-p-5 " },
25
+ React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-2-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-2-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
26
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
27
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
28
+ { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
29
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
30
+ ], containerTestId: "basic-dropdown1", tooltip: "This is a normal dropdown.", tooltipDelay: 0, tooltipPlacement: "top" })),
31
+ React.createElement("div", { className: "tw-p-5 " },
32
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown with arrow"),
33
+ React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-3-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-3-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
34
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
35
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
36
+ { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
37
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
38
+ ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the end", tooltipDelay: 0, tooltipPlacement: "top" })),
39
+ React.createElement("div", { className: "tw-p-5 " },
40
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown aligned at center"),
41
+ React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-4-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-4-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
42
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
43
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
44
+ { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
45
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
46
+ ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the center", align: "center", tooltipDelay: 0, tooltipPlacement: "top" })),
47
+ React.createElement("div", { className: "tw-p-5 " },
48
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Dropdown aligned at start"),
49
+ React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-5-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-5-${color}-${isDark ? 'dark' : 'light'}`, dropdownItems: [
50
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown(''), hasDivider: true },
51
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
52
+ { label: 'Guava', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), hasDivider: true },
53
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
54
+ ], containerTestId: "basic-dropdown1", hasArrow: true, tooltip: "This is a normal dropdown aligned to the center", align: "start", tooltipDelay: 0, tooltipPlacement: "top" })),
55
+ React.createElement("div", { className: "tw-p-5 " },
56
+ React.createElement(ButtonWithDropdown, { triggerIcon: React.createElement(Icon, { icon: "fc-gears-2", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), dropdownItems: [], onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-6-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-6-${color}-${isDark ? 'dark' : 'light'}`, containerTestId: "basic-dropdown2", tooltip: "This is a disabled dropdown.", tooltipDelay: 0, tooltipPlacement: "top", disabled: true })),
57
+ React.createElement("div", { className: "tw-p-5 " },
58
+ React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-7-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-7-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown7", tooltip: "This is a dropdown with submenu", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
59
+ { label: 'Orange', icon: 'fc-data-file', onClick: () => setOpenDropdown('') },
60
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
61
+ {
62
+ label: 'Guava',
63
+ icon: 'fc-user-community',
64
+ onClick: () => setOpenDropdown(''),
65
+ tooltipDelay: 0,
66
+ tooltip: 'This is a guava',
67
+ subMenuItems: [
68
+ { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
69
+ { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
70
+ { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
71
+ ],
72
+ },
73
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
74
+ {
75
+ label: 'Cashew',
76
+ icon: 'fc-user-community',
77
+ disabled: true,
78
+ onClick: () => setOpenDropdown(''),
79
+ subMenuItems: [
80
+ { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
81
+ { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
82
+ { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
83
+ ],
84
+ },
85
+ ] })),
86
+ React.createElement("div", { className: "tw-p-5 " },
87
+ React.createElement(ButtonWithDropdown, { onOpenChange: (isOpen) => setOpenDropdown(isOpen ? `dropdown-8-${color}-${isDark ? 'dark' : 'light'}` : ''), isOpen: openDropdown === `dropdown-8-${color}-${isDark ? 'dark' : 'light'}`, triggerIcon: React.createElement(Icon, { icon: "fc-more", type: "text", extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" }), containerTestId: "basic-dropdown8", tooltip: "This is a dropdown with submenu", tooltipDelay: 0, tooltipPlacement: "top", dropdownItems: [
88
+ {
89
+ label: (React.createElement("div", null,
90
+ React.createElement("h5", null, "Label heading"),
91
+ React.createElement("p", null, "Label description"),
92
+ React.createElement("p", null, "Dropdown is my work"),
93
+ React.createElement("p", null, "I do it happily"),
94
+ React.createElement("p", null, "Final remards"),
95
+ React.createElement("p", null, "Thank you"))),
96
+ icon: 'fc-data-file',
97
+ onClick: () => setOpenDropdown(''),
98
+ },
99
+ { label: 'Mango', icon: 'fc-user-community', onClick: () => setOpenDropdown('') },
100
+ {
101
+ label: 'Guava',
102
+ icon: 'fc-user-community',
103
+ onClick: () => setOpenDropdown(''),
104
+ tooltipDelay: 0,
105
+ tooltip: 'This is a guava',
106
+ subMenuItems: [
107
+ { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
108
+ { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
109
+ { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
110
+ ],
111
+ },
112
+ { label: 'Banana', icon: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
113
+ {
114
+ label: 'Cashew',
115
+ icon: 'fc-user-community',
116
+ disabled: true,
117
+ onClick: () => setOpenDropdown(''),
118
+ subMenuItems: [
119
+ { label: 'Orange', iconClass: 'fc-data-file', onClick: () => setOpenDropdown('') },
120
+ { label: 'Mango', iconClass: 'fc-user-community', onClick: () => setOpenDropdown('') },
121
+ { label: 'Apple', iconClass: 'fc-user-community', onClick: () => setOpenDropdown(''), disabled: true },
122
+ ],
123
+ },
124
+ ] }))));
125
+ const renderAllVariations = (color) => (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4 tw-p-4" },
126
+ allButtonWithDropdowns(color),
127
+ allButtonWithDropdowns(color, true)));
128
+ return (React.createElement("div", { className: "tw-grid tw-grid-cols-4 tw-gap-4" },
129
+ React.createElement(QTip, null),
130
+ React.createElement("div", { className: "color_topic" },
131
+ React.createElement("b", null, "Topic Colors"),
132
+ renderAllVariations('topic')),
133
+ React.createElement("div", { className: "color_analysis" },
134
+ React.createElement("b", null, "Analysis Colors"),
135
+ renderAllVariations('analysis')),
136
+ React.createElement("div", { className: "color_datalab" },
137
+ React.createElement("b", null, "Datalab Colors"),
138
+ renderAllVariations('datalab')),
139
+ React.createElement("div", { className: "color_vantage" },
140
+ React.createElement("b", null, "Vantage Colors"),
141
+ renderAllVariations('vantage'))));
142
+ };
143
143
  //# sourceMappingURL=ButtonWithDropdown.stories.js.map