@seeqdev/qomponents 0.0.115 → 0.0.117

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 (238) hide show
  1. package/README.md +135 -135
  2. package/dist/Accordion/Accordion.js +9 -0
  3. package/dist/Accordion/Accordion.js.map +1 -0
  4. package/dist/Accordion/Accordion.stories.js +115 -0
  5. package/dist/Accordion/Accordion.stories.js.map +1 -0
  6. package/dist/Accordion/Accordion.test.js +55 -0
  7. package/dist/Accordion/Accordion.test.js.map +1 -0
  8. package/dist/Accordion/Accordion.types.js +2 -0
  9. package/dist/Accordion/Accordion.types.js.map +1 -0
  10. package/dist/Accordion/index.js +2 -0
  11. package/dist/Accordion/index.js.map +1 -0
  12. package/dist/Alert/Alert.js +34 -0
  13. package/dist/Alert/Alert.js.map +1 -0
  14. package/dist/Alert/Alert.stories.js +52 -0
  15. package/dist/Alert/Alert.stories.js.map +1 -0
  16. package/dist/Alert/Alert.test.js +51 -0
  17. package/dist/Alert/Alert.test.js.map +1 -0
  18. package/dist/Alert/Alert.types.js +2 -0
  19. package/dist/Alert/Alert.types.js.map +1 -0
  20. package/dist/Alert/index.js +2 -0
  21. package/dist/Alert/index.js.map +1 -0
  22. package/dist/Button/Button.js +92 -0
  23. package/dist/Button/Button.js.map +1 -0
  24. package/dist/Button/Button.stories.js +100 -0
  25. package/dist/Button/Button.stories.js.map +1 -0
  26. package/dist/Button/Button.test.js +49 -0
  27. package/dist/Button/Button.test.js.map +1 -0
  28. package/dist/Button/Button.types.js +5 -0
  29. package/dist/Button/Button.types.js.map +1 -0
  30. package/dist/Button/index.js +2 -0
  31. package/dist/Button/index.js.map +1 -0
  32. package/dist/ButtonWithDropdown/ButtonWithDropdown.js +67 -0
  33. package/dist/ButtonWithDropdown/ButtonWithDropdown.js.map +1 -0
  34. package/dist/ButtonWithDropdown/ButtonWithDropdown.stories.js +98 -0
  35. package/dist/ButtonWithDropdown/ButtonWithDropdown.stories.js.map +1 -0
  36. package/dist/ButtonWithDropdown/ButtonWithDropdown.test.js +85 -0
  37. package/dist/ButtonWithDropdown/ButtonWithDropdown.test.js.map +1 -0
  38. package/dist/ButtonWithDropdown/ButtonWithDropdown.types.js +2 -0
  39. package/dist/ButtonWithDropdown/ButtonWithDropdown.types.js.map +1 -0
  40. package/dist/ButtonWithDropdown/index.js +2 -0
  41. package/dist/ButtonWithDropdown/index.js.map +1 -0
  42. package/dist/ButtonWithPopover/ButtonWithPopover.js +53 -0
  43. package/dist/ButtonWithPopover/ButtonWithPopover.js.map +1 -0
  44. package/dist/ButtonWithPopover/ButtonWithPopover.stories.js +75 -0
  45. package/dist/ButtonWithPopover/ButtonWithPopover.stories.js.map +1 -0
  46. package/dist/ButtonWithPopover/ButtonWithPopover.test.js +82 -0
  47. package/dist/ButtonWithPopover/ButtonWithPopover.test.js.map +1 -0
  48. package/dist/ButtonWithPopover/ButtonWithPopover.types.js +2 -0
  49. package/dist/ButtonWithPopover/ButtonWithPopover.types.js.map +1 -0
  50. package/dist/ButtonWithPopover/index.js +2 -0
  51. package/dist/ButtonWithPopover/index.js.map +1 -0
  52. package/dist/Checkbox/Checkbox.js +26 -0
  53. package/dist/Checkbox/Checkbox.js.map +1 -0
  54. package/dist/Checkbox/Checkbox.stories.js +34 -0
  55. package/dist/Checkbox/Checkbox.stories.js.map +1 -0
  56. package/dist/Checkbox/Checkbox.test.js +94 -0
  57. package/dist/Checkbox/Checkbox.test.js.map +1 -0
  58. package/dist/Checkbox/Checkbox.types.js +2 -0
  59. package/dist/Checkbox/Checkbox.types.js.map +1 -0
  60. package/dist/Checkbox/index.js +2 -0
  61. package/dist/Checkbox/index.js.map +1 -0
  62. package/dist/Collapse/Collapse.d.ts +4 -0
  63. package/dist/Collapse/Collapse.js +18 -0
  64. package/dist/Collapse/Collapse.js.map +1 -0
  65. package/dist/Collapse/Collapse.stories.d.ts +5 -0
  66. package/dist/Collapse/Collapse.stories.js +37 -0
  67. package/dist/Collapse/Collapse.stories.js.map +1 -0
  68. package/dist/Collapse/Collapse.test.d.ts +1 -0
  69. package/dist/Collapse/Collapse.test.js +19 -0
  70. package/dist/Collapse/Collapse.test.js.map +1 -0
  71. package/dist/Collapse/Collapse.types.d.ts +4 -0
  72. package/dist/Collapse/Collapse.types.js +2 -0
  73. package/dist/Collapse/Collapse.types.js.map +1 -0
  74. package/dist/Collapse/index.d.ts +1 -0
  75. package/dist/Collapse/index.js +2 -0
  76. package/dist/Collapse/index.js.map +1 -0
  77. package/dist/Icon/Icon.js +55 -0
  78. package/dist/Icon/Icon.js.map +1 -0
  79. package/dist/Icon/Icon.stories.js +50 -0
  80. package/dist/Icon/Icon.stories.js.map +1 -0
  81. package/dist/Icon/Icon.test.js +55 -0
  82. package/dist/Icon/Icon.test.js.map +1 -0
  83. package/dist/Icon/Icon.types.js +16 -0
  84. package/dist/Icon/Icon.types.js.map +1 -0
  85. package/dist/Icon/index.js +2 -0
  86. package/dist/Icon/index.js.map +1 -0
  87. package/dist/InputGroup/InputGroup.js +32 -0
  88. package/dist/InputGroup/InputGroup.js.map +1 -0
  89. package/dist/InputGroup/InputGroup.stories.js +168 -0
  90. package/dist/InputGroup/InputGroup.stories.js.map +1 -0
  91. package/dist/InputGroup/InputGroup.test.js +43 -0
  92. package/dist/InputGroup/InputGroup.test.js.map +1 -0
  93. package/dist/InputGroup/InputGroup.types.js +2 -0
  94. package/dist/InputGroup/InputGroup.types.js.map +1 -0
  95. package/dist/InputGroup/index.js +2 -0
  96. package/dist/InputGroup/index.js.map +1 -0
  97. package/dist/Modal/Modal.js +100 -0
  98. package/dist/Modal/Modal.js.map +1 -0
  99. package/dist/Modal/Modal.stories.js +127 -0
  100. package/dist/Modal/Modal.stories.js.map +1 -0
  101. package/dist/Modal/Modal.test.js +108 -0
  102. package/dist/Modal/Modal.test.js.map +1 -0
  103. package/dist/Modal/Modal.types.js +2 -0
  104. package/dist/Modal/Modal.types.js.map +1 -0
  105. package/dist/Modal/index.js +2 -0
  106. package/dist/Modal/index.js.map +1 -0
  107. package/dist/ProgressBar/ProgressBar.js +30 -0
  108. package/dist/ProgressBar/ProgressBar.js.map +1 -0
  109. package/dist/ProgressBar/ProgressBar.stories.js +73 -0
  110. package/dist/ProgressBar/ProgressBar.stories.js.map +1 -0
  111. package/dist/ProgressBar/ProgressBar.test.js +38 -0
  112. package/dist/ProgressBar/ProgressBar.test.js.map +1 -0
  113. package/dist/ProgressBar/ProgressBar.types.d.ts +22 -6
  114. package/dist/ProgressBar/ProgressBar.types.js +2 -0
  115. package/dist/ProgressBar/ProgressBar.types.js.map +1 -0
  116. package/dist/ProgressBar/index.js +2 -0
  117. package/dist/ProgressBar/index.js.map +1 -0
  118. package/dist/SeeqActionDropdown/SeeqActionDropdown.js +48 -0
  119. package/dist/SeeqActionDropdown/SeeqActionDropdown.js.map +1 -0
  120. package/dist/SeeqActionDropdown/SeeqActionDropdown.stories.js +80 -0
  121. package/dist/SeeqActionDropdown/SeeqActionDropdown.stories.js.map +1 -0
  122. package/dist/SeeqActionDropdown/SeeqActionDropdown.test.js +73 -0
  123. package/dist/SeeqActionDropdown/SeeqActionDropdown.test.js.map +1 -0
  124. package/dist/SeeqActionDropdown/SeeqActionDropdown.types.js +2 -0
  125. package/dist/SeeqActionDropdown/SeeqActionDropdown.types.js.map +1 -0
  126. package/dist/SeeqActionDropdown/index.js +2 -0
  127. package/dist/SeeqActionDropdown/index.js.map +1 -0
  128. package/dist/SeeqActionDropdown/variants.js +23 -0
  129. package/dist/SeeqActionDropdown/variants.js.map +1 -0
  130. package/dist/Select/Select.js +174 -0
  131. package/dist/Select/Select.js.map +1 -0
  132. package/dist/Select/Select.stories.js +80 -0
  133. package/dist/Select/Select.stories.js.map +1 -0
  134. package/dist/Select/Select.test.js +182 -0
  135. package/dist/Select/Select.test.js.map +1 -0
  136. package/dist/Select/Select.types.js +2 -0
  137. package/dist/Select/Select.types.js.map +1 -0
  138. package/dist/Select/index.js +3 -0
  139. package/dist/Select/index.js.map +1 -0
  140. package/dist/Slider/Slider.js +13 -0
  141. package/dist/Slider/Slider.js.map +1 -0
  142. package/dist/Slider/Slider.stories.js +58 -0
  143. package/dist/Slider/Slider.stories.js.map +1 -0
  144. package/dist/Slider/Slider.test.js +33 -0
  145. package/dist/Slider/Slider.test.js.map +1 -0
  146. package/dist/Slider/Slider.types.js +2 -0
  147. package/dist/Slider/Slider.types.js.map +1 -0
  148. package/dist/Slider/index.js +2 -0
  149. package/dist/Slider/index.js.map +1 -0
  150. package/dist/Tabs/Tabs.js +22 -0
  151. package/dist/Tabs/Tabs.js.map +1 -0
  152. package/dist/Tabs/Tabs.stories.js +91 -0
  153. package/dist/Tabs/Tabs.stories.js.map +1 -0
  154. package/dist/Tabs/Tabs.test.js +91 -0
  155. package/dist/Tabs/Tabs.test.js.map +1 -0
  156. package/dist/Tabs/Tabs.types.js +2 -0
  157. package/dist/Tabs/Tabs.types.js.map +1 -0
  158. package/dist/Tabs/index.js +2 -0
  159. package/dist/Tabs/index.js.map +1 -0
  160. package/dist/TextArea/TextArea.js +25 -0
  161. package/dist/TextArea/TextArea.js.map +1 -0
  162. package/dist/TextArea/TextArea.stories.js +46 -0
  163. package/dist/TextArea/TextArea.stories.js.map +1 -0
  164. package/dist/TextArea/TextArea.test.js +68 -0
  165. package/dist/TextArea/TextArea.test.js.map +1 -0
  166. package/dist/TextArea/TextArea.types.js +2 -0
  167. package/dist/TextArea/TextArea.types.js.map +1 -0
  168. package/dist/TextArea/index.js +2 -0
  169. package/dist/TextArea/index.js.map +1 -0
  170. package/dist/TextField/TextField.js +79 -0
  171. package/dist/TextField/TextField.js.map +1 -0
  172. package/dist/TextField/TextField.stories.js +70 -0
  173. package/dist/TextField/TextField.stories.js.map +1 -0
  174. package/dist/TextField/TextField.test.js +39 -0
  175. package/dist/TextField/TextField.test.js.map +1 -0
  176. package/dist/TextField/TextField.types.js +2 -0
  177. package/dist/TextField/TextField.types.js.map +1 -0
  178. package/dist/TextField/index.js +2 -0
  179. package/dist/TextField/index.js.map +1 -0
  180. package/dist/ToolbarButton/ToolbarButton.js +75 -0
  181. package/dist/ToolbarButton/ToolbarButton.js.map +1 -0
  182. package/dist/ToolbarButton/ToolbarButton.stories.js +94 -0
  183. package/dist/ToolbarButton/ToolbarButton.stories.js.map +1 -0
  184. package/dist/ToolbarButton/ToolbarButton.test.js +93 -0
  185. package/dist/ToolbarButton/ToolbarButton.test.js.map +1 -0
  186. package/dist/ToolbarButton/ToolbarButton.types.js +2 -0
  187. package/dist/ToolbarButton/ToolbarButton.types.js.map +1 -0
  188. package/dist/ToolbarButton/index.js +2 -0
  189. package/dist/ToolbarButton/index.js.map +1 -0
  190. package/dist/Tooltip/QTip.stories.js +45 -0
  191. package/dist/Tooltip/QTip.stories.js.map +1 -0
  192. package/dist/Tooltip/QTip.types.js +2 -0
  193. package/dist/Tooltip/QTip.types.js.map +1 -0
  194. package/dist/Tooltip/QTipPerformance.stories.js +30 -0
  195. package/dist/Tooltip/QTipPerformance.stories.js.map +1 -0
  196. package/dist/Tooltip/Qtip.js +168 -0
  197. package/dist/Tooltip/Qtip.js.map +1 -0
  198. package/dist/Tooltip/Tooltip.js +36 -0
  199. package/dist/Tooltip/Tooltip.js.map +1 -0
  200. package/dist/Tooltip/Tooltip.stories.js +32 -0
  201. package/dist/Tooltip/Tooltip.stories.js.map +1 -0
  202. package/dist/Tooltip/Tooltip.types.js +3 -0
  203. package/dist/Tooltip/Tooltip.types.js.map +1 -0
  204. package/dist/Tooltip/TooltipPerformance.stories.js +30 -0
  205. package/dist/Tooltip/TooltipPerformance.stories.js.map +1 -0
  206. package/dist/Tooltip/index.js +3 -0
  207. package/dist/Tooltip/index.js.map +1 -0
  208. package/dist/Tooltip/qTip.utilities.js +11 -0
  209. package/dist/Tooltip/qTip.utilities.js.map +1 -0
  210. package/dist/example/.eslintrc.cjs +14 -14
  211. package/dist/example/README.md +33 -33
  212. package/dist/example/index.html +13 -13
  213. package/dist/example/package.json +30 -30
  214. package/dist/example/src/ComplexSelectExample.tsx +81 -81
  215. package/dist/example/src/Example.tsx +408 -408
  216. package/dist/example/src/index.css +102 -102
  217. package/dist/example/src/main.tsx +10 -10
  218. package/dist/example/src/vite-env.d.ts +1 -1
  219. package/dist/example/tsconfig.json +33 -33
  220. package/dist/example/tsconfig.node.json +12 -12
  221. package/dist/example/vite.config.ts +12 -12
  222. package/dist/index.d.ts +2 -0
  223. package/dist/index.esm.js +3566 -52
  224. package/dist/index.esm.js.map +1 -1
  225. package/dist/index.js +3563 -48
  226. package/dist/index.js.map +1 -1
  227. package/dist/styles.css +3629 -3631
  228. package/dist/types.js +2 -0
  229. package/dist/types.js.map +1 -0
  230. package/dist/utils/browserId.js +29 -0
  231. package/dist/utils/browserId.js.map +1 -0
  232. package/dist/utils/svg.js +20 -0
  233. package/dist/utils/svg.js.map +1 -0
  234. package/dist/utils/validateStyleDimension.js +14 -0
  235. package/dist/utils/validateStyleDimension.js.map +1 -0
  236. package/dist/utils/validateStyleDimension.test.js +20 -0
  237. package/dist/utils/validateStyleDimension.test.js.map +1 -0
  238. package/package.json +86 -85
@@ -0,0 +1,85 @@
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 ButtonWithDropdown from './ButtonWithDropdown';
6
+ import Icon from '../Icon';
7
+ describe('ButtonWithDropdown', () => {
8
+ const mockOnClick = jest.fn();
9
+ const testId = 'trigger-icon';
10
+ const tooltip = 'This is a small dropdown.';
11
+ const itemTooltip = 'This is an item from the dropdown.';
12
+ class Context {
13
+ props = {
14
+ triggerIcon: (React.createElement(Icon, { icon: "fc-more", type: "text", testId: testId, extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" })),
15
+ containerTestId: 'basic-dropdown1',
16
+ tooltip,
17
+ tooltipDelay: 0,
18
+ tooltipPlacement: 'top',
19
+ isHtmlTooltip: false,
20
+ dropdownItems: [
21
+ { label: 'Orange', icon: 'fc-data-file', onClick: mockOnClick },
22
+ { label: 'Mango', icon: 'fc-user-community', onClick: mockOnClick },
23
+ { label: 'Guava', icon: 'fc-user-community', onClick: mockOnClick },
24
+ { label: 'Banana', icon: 'fc-user-community', onClick: mockOnClick, tooltip: itemTooltip, tooltipPlacement: 'top', tooltipDelay: 0, isHtmlTooltip: false },
25
+ ],
26
+ };
27
+ }
28
+ let tc;
29
+ beforeEach(() => {
30
+ tc = new Context();
31
+ jest.clearAllMocks();
32
+ });
33
+ const renderButtonWithDropdown = (props) => render(React.createElement(ButtonWithDropdown, { ...props }));
34
+ const openDropdown = async () => {
35
+ const popover = screen.getByTestId(testId);
36
+ await userEvent.click(popover);
37
+ };
38
+ test('renders trigger and opens dropdown content on trigger click', async () => {
39
+ renderButtonWithDropdown(tc.props);
40
+ expect(screen.getByTestId('trigger-icon')).toBeInTheDocument();
41
+ await openDropdown();
42
+ expect(screen.getByText('Orange')).toBeInTheDocument();
43
+ });
44
+ test('renders dividers correctly', async () => {
45
+ tc.props.dropdownItems[1].hasDivider = true;
46
+ renderButtonWithDropdown(tc.props);
47
+ expect(screen.getByTestId('trigger-icon')).toBeInTheDocument();
48
+ await openDropdown();
49
+ expect(screen.getByText('Orange')).toBeInTheDocument();
50
+ expect(screen.getByTestId('dropdown-divider-1')).toBeInTheDocument();
51
+ });
52
+ test('calls onClick handler when dropdown item is selected', async () => {
53
+ renderButtonWithDropdown(tc.props);
54
+ await openDropdown();
55
+ const item1 = screen.getByText('Orange');
56
+ await userEvent.click(item1);
57
+ expect(mockOnClick).toHaveBeenCalledTimes(1);
58
+ });
59
+ test('closes dropdown when item is clicked', async () => {
60
+ renderButtonWithDropdown(tc.props);
61
+ await openDropdown();
62
+ const item1 = screen.getByText('Orange');
63
+ await userEvent.click(item1);
64
+ expect(mockOnClick).toHaveBeenCalledTimes(1);
65
+ expect(screen.queryByText('Orange')).not.toBeInTheDocument();
66
+ });
67
+ test('does not open when disabled', async () => {
68
+ tc.props.disabled = true;
69
+ renderButtonWithDropdown(tc.props);
70
+ await openDropdown();
71
+ expect(screen.queryByText('Orange')).not.toBeInTheDocument();
72
+ });
73
+ test('renders button tooltip correctly', async () => {
74
+ renderButtonWithDropdown(tc.props);
75
+ const tooltipText = document.querySelector(`[data-qtip-text="${tooltip}"]`);
76
+ expect(tooltipText).toBeInTheDocument();
77
+ });
78
+ test('renders dropdown item tooltip correctly', async () => {
79
+ renderButtonWithDropdown(tc.props);
80
+ await openDropdown();
81
+ const tooltipText = document.querySelector(`[data-qtip-text="${itemTooltip}"]`);
82
+ expect(tooltipText).toBeInTheDocument();
83
+ });
84
+ });
85
+ //# sourceMappingURL=ButtonWithDropdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithDropdown.test.js","sourceRoot":"","sources":["../../src/ButtonWithDropdown/ButtonWithDropdown.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ButtonWithDropdown.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithDropdown.types.js","sourceRoot":"","sources":["../../src/ButtonWithDropdown/ButtonWithDropdown.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { default } from './ButtonWithDropdown';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ButtonWithDropdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ import { getQTipData } from '../Tooltip/qTip.utilities';
4
+ const bgStyles = ['tw-bg-sq-white', 'dark:tw-bg-sq-dark-background'].join(' ');
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 disabledClasses = ['tw-opacity-50', 'tw-cursor-not-allowed'].join(' ');
13
+ const ButtonWithPopover = ({ children, trigger, id, hasArrow, extraTriggerClassNames, extraPopoverClassNames, containerTestId, onInteractOutside, onPointerDownOutside, isTriggerAsChild = false, shouldTriggerFullWidth = false, disabled = false, align = 'end', alignOffset = -35, placement = 'bottom', placementOffset = 2, isHoverEnabled = false, hoverOpenDelay = 300, onOpenChange, isOpen, isCloseOnContentClick = false, isPortal = false, ...tooltipProps }) => {
14
+ const tooltipData = getQTipData(tooltipProps);
15
+ let timeout;
16
+ const [isHoveredOpen, setIsHoveredOpen] = React.useState(false);
17
+ const onHoverStart = () => {
18
+ if (isHoverEnabled) {
19
+ timeout = setTimeout(() => {
20
+ setIsHoveredOpen(true);
21
+ onOpenChange && onOpenChange(true);
22
+ }, hoverOpenDelay);
23
+ }
24
+ };
25
+ const onHoverEnd = () => {
26
+ if (isHoverEnabled) {
27
+ timeout = setTimeout(() => {
28
+ setIsHoveredOpen(false);
29
+ onOpenChange && onOpenChange(false);
30
+ }, 200);
31
+ }
32
+ };
33
+ React.useEffect(() => () => timeout && clearTimeout(timeout), []);
34
+ const renderContent = () => {
35
+ return (React.createElement(PopoverPrimitive.Content, { sideOffset: placementOffset, align: align, side: placement, onInteractOutside: onInteractOutside, onPointerDownOutside: onPointerDownOutside, alignOffset: isHoverEnabled ? -10 : alignOffset, asChild: true, onClick: () => isCloseOnContentClick && onOpenChange && onOpenChange(false), className: "focus-visible:tw-outline-none tw-outline-none tw-w-full tw-h-full" },
36
+ React.createElement("div", { "data-testid": containerTestId, className: `${bgStyles} ${borderStyles} tw-relative tw-z-[1200] tw-min-w-6 focus-visible:tw-outline-none tw-outline-none data-[state=open]:tw-animate-in data-[state=closed]:tw-animate-out
37
+ data-[side=top]:tw-animate-slideDownAndFade data-[side=right]:tw-animate-slideLeftAndFade data-[side=bottom]:tw-animate-slideUpAndFade data-[side=left]:tw-animate-slideRightAndFade tw-text-sq-text-color
38
+ ${extraPopoverClassNames || ''}` },
39
+ hasArrow && (React.createElement(PopoverPrimitive.Arrow, { asChild: true },
40
+ React.createElement("div", { className: "tw-fill-transparent tw-bg-white tw-w-[15px] tw-h-[15px] tw-mt-[-7px] 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" }))),
41
+ children)));
42
+ };
43
+ const renderPopover = (popoverOpenState) => {
44
+ return (React.createElement(PopoverPrimitive.Root, { open: popoverOpenState, defaultOpen: false, onOpenChange: onOpenChange },
45
+ trigger ? (React.createElement(PopoverPrimitive.Trigger, { id: id, asChild: isTriggerAsChild, className: `focus-visible:tw-outline-none tw-outline-none ${shouldTriggerFullWidth ? 'tw-w-full tw-h-full' : ''}`, disabled: disabled },
46
+ React.createElement("div", { ...tooltipData, onMouseOver: onHoverStart, onMouseOut: onHoverEnd, className: `tw-bg-transparent focus-visible:tw-outline-none tw-outline-none ${disabled ? disabledClasses : ''} ${shouldTriggerFullWidth ? 'tw-flex tw-flex-col tw-items-center tw-justify-center' : 'tw-inline'} ${extraTriggerClassNames || ''}` }, trigger))) : (React.createElement(PopoverPrimitive.Trigger, { asChild: true },
47
+ React.createElement("div", null))),
48
+ isPortal ? React.createElement(PopoverPrimitive.Portal, null, renderContent()) : renderContent()));
49
+ };
50
+ return isHoverEnabled ? renderPopover(isHoveredOpen) : renderPopover(isOpen);
51
+ };
52
+ export default ButtonWithPopover;
53
+ //# sourceMappingURL=ButtonWithPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithPopover.js","sourceRoot":"","sources":["../../src/ButtonWithPopover/ButtonWithPopover.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import React from 'react';
2
+ import ButtonWithPopover from './ButtonWithPopover';
3
+ import Icon from '../Icon';
4
+ import { QTip } from '../Tooltip/Qtip';
5
+ export default {
6
+ title: 'Button with Popover',
7
+ };
8
+ export const AllButtonWithPopoverVariants = () => {
9
+ const options = ['Chocolate', 'Strawberry', 'Vanilla', 'Rocky Road', 'Crazy Cow', 'Almond Joy'];
10
+ const renderFlavours = () => (React.createElement("div", { className: "tw-text-sm dark:tw-text-white tw-w-72 tw-p-4" },
11
+ React.createElement("p", { className: "tw-font-bold" }, "Flavors"),
12
+ React.createElement("div", { className: "tw-w-full tw-flex tw-flex-wrap tw-gap-1" }, options.map((option) => (React.createElement("div", { key: option, className: "tw-flex tw-items-center tw-px-2 tw-py-1 tw-mt-2 tw tw-rounded-full tw-border-sq-color-dark-dark tw-border" },
13
+ React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-check", extraClassNames: "tw-mr-2" }),
14
+ React.createElement("span", null, option)))))));
15
+ const renderInputFields = () => {
16
+ const [name, setName] = React.useState('');
17
+ const [email, setEmail] = React.useState('');
18
+ return (React.createElement("div", { className: "tw-w-72 tw-p-4" },
19
+ React.createElement("div", { className: "tw-flex tw-flex-col tw-gap-2" },
20
+ React.createElement("input", { type: "text", value: name, onChange: (e) => setName(e.target.value), placeholder: "Enter your name", className: "tw-p-2 tw-rounded tw-border tw-border-sq-color-dark-dark dark:tw-border-sq-dark-background tw-bg-transparent" }),
21
+ React.createElement("input", { type: "text", value: email, onChange: (e) => setEmail(e.target.value), placeholder: "Enter your email", className: "tw-p-2 tw-rounded tw-border tw-border-sq-color-dark-dark dark:tw-border-sq-dark-background tw-bg-transparent" }),
22
+ React.createElement("button", { className: "tw-p-2 tw-rounded tw-border tw-border-sq-color-dark-dark dark:tw-border-sq-dark-background tw-bg-transparent tw-text-sq-color" }, "Submit"))));
23
+ };
24
+ const [openPopver, setOpenPopover] = React.useState('');
25
+ const iconRef = React.useRef(null);
26
+ const allButtonWithPopovers = (isDark = false, topic) => (React.createElement("div", { className: isDark ? 'tw-dark tw-bg-sq-dark-background ' : '' },
27
+ React.createElement("div", { className: "tw-p-5 " },
28
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-1`, tooltip: "This is a small popover.", tooltipDelay: 0, tooltipPlacement: "top", isHtmlTooltip: false }, renderFlavours())),
29
+ React.createElement("div", { className: "tw-p-5 " },
30
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-2`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-2`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-2` : ''), tooltip: "This is a normal popover.", tooltipDelay: 0, tooltipPlacement: "top", isHtmlTooltip: false }, renderFlavours())),
31
+ React.createElement("div", { className: "tw-p-5 " },
32
+ React.createElement("p", { className: "dark:tw-text-sq-white tw-text-sm tw-mb-4" }, "Close popover on content click"),
33
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-3`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-3`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-3` : ''), tooltip: "This is a normal popover.", tooltipDelay: 0, tooltipPlacement: "top", isCloseOnContentClick: true, isHtmlTooltip: false }, renderFlavours())),
34
+ React.createElement("div", { className: "tw-p-5 " },
35
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-4`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-4`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-4` : ''), tooltip: "This is a disabled popover.", tooltipDelay: 0, tooltipPlacement: "top", isHtmlTooltip: false, disabled: true }, renderFlavours())),
36
+ React.createElement("div", { className: "tw-p-5 " },
37
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover with arrow"),
38
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-5`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-5`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-5` : ''), tooltip: "This is a normal popover with arrow.", tooltipDelay: 0, tooltipPlacement: "top", hasArrow: true, isHtmlTooltip: false }, renderFlavours())),
39
+ React.createElement("div", { className: "tw-p-5 " },
40
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover aligned at center"),
41
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-6`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-6`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-6` : ''), tooltip: "This is a normal popover with arrow.", tooltipDelay: 0, tooltipPlacement: "top", align: "center", hasArrow: true, isHtmlTooltip: false }, renderFlavours())),
42
+ React.createElement("div", { className: "tw-p-5 " },
43
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover aligned at start"),
44
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-7`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-7`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-7` : ''), tooltip: "This is a normal popover with arrow.", tooltipDelay: 0, align: "start", tooltipPlacement: "top", hasArrow: true, isHtmlTooltip: false }, renderFlavours())),
45
+ React.createElement("div", { className: "tw-p-5 " },
46
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover triggered by hover"),
47
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-8`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-8`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-8` : ''), isHoverEnabled: true, align: "start", tooltipPlacement: "top", hasArrow: true, isHtmlTooltip: false }, renderFlavours())),
48
+ React.createElement("div", { className: "tw-p-5 " },
49
+ React.createElement(ButtonWithPopover, { trigger: React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover triggered by another element"), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-9`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-9`, onInteractOutside: () => setOpenPopover(''), align: "start", tooltipPlacement: "top", hasArrow: true, isHtmlTooltip: false }, renderFlavours()),
50
+ openPopver != `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-9` && (React.createElement("div", { ref: iconRef, onClick: () => {
51
+ setOpenPopover(`basic-popover-${isDark ? 'dark' : 'light'}-${topic}-9`);
52
+ } },
53
+ React.createElement(Icon, { type: "text", icon: "fc-all-items" })))),
54
+ React.createElement("div", { className: "tw-p-5 " },
55
+ React.createElement("div", { className: "dark:tw-text-white tw-text-xs" }, "Popover with input fields"),
56
+ React.createElement(ButtonWithPopover, { trigger: React.createElement(Icon, { type: "color", color: "rgb(var(--sq-color-dark-dark))", icon: "fc-more" }), containerTestId: `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-10`, isOpen: openPopver === `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-10`, onOpenChange: (isOpen) => setOpenPopover(isOpen ? `basic-popover-${isDark ? 'dark' : 'light'}-${topic}-10` : ''), tooltip: "This is a normal popover with arrow.", tooltipDelay: 0, tooltipPlacement: "top", align: "center", hasArrow: true, isHtmlTooltip: false }, renderInputFields()))));
57
+ const renderAllVariations = (color) => (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4 tw-p-4" },
58
+ allButtonWithPopovers(false, color),
59
+ allButtonWithPopovers(true, color)));
60
+ return (React.createElement("div", { className: "tw-grid tw-grid-cols-4 tw-gap-4" },
61
+ React.createElement(QTip, null),
62
+ React.createElement("div", { className: "color_topic" },
63
+ React.createElement("b", null, "Topic Colors"),
64
+ renderAllVariations('topic')),
65
+ React.createElement("div", { className: "color_analysis" },
66
+ React.createElement("b", null, "Analysis Colors"),
67
+ renderAllVariations('analysis')),
68
+ React.createElement("div", { className: "color_datalab" },
69
+ React.createElement("b", null, "Datalab Colors"),
70
+ renderAllVariations('datalab')),
71
+ React.createElement("div", { className: "color_vantage" },
72
+ React.createElement("b", null, "Vantage Colors"),
73
+ renderAllVariations('vantage'))));
74
+ };
75
+ //# sourceMappingURL=ButtonWithPopover.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithPopover.stories.js","sourceRoot":"","sources":["../../src/ButtonWithPopover/ButtonWithPopover.stories.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import React from 'react';
2
+ import '@testing-library/jest-dom';
3
+ import { render, screen, waitFor } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
5
+ import ButtonWithPopover from './ButtonWithPopover';
6
+ import Icon from '../Icon';
7
+ describe('ButtonWithPopover', () => {
8
+ const mockOnClick = jest.fn();
9
+ const testId = 'trigger-icon';
10
+ class Context {
11
+ props = {
12
+ trigger: (React.createElement(Icon, { icon: "fc-more", type: "text", testId: testId, extraClassNames: "tw-text-sq-text-color dark:tw-text-sq-white tw-w-[18px]" })),
13
+ onOpenChange: mockOnClick,
14
+ containerTestId: 'basic-Popover1',
15
+ tooltip: 'This is a small Popover.',
16
+ tooltipDelay: 0,
17
+ tooltipPlacement: 'top',
18
+ isHtmlTooltip: false,
19
+ hoverOpenDelay: 0,
20
+ children: React.createElement("div", null, "Popover content"),
21
+ };
22
+ }
23
+ let tc;
24
+ beforeEach(() => {
25
+ tc = new Context();
26
+ jest.clearAllMocks();
27
+ });
28
+ afterEach(() => {
29
+ global.ResizeObserver = undefined;
30
+ });
31
+ const renderButtonWithPopover = (props) => render(React.createElement("div", { "data-testid": "container", className: "tw-w-10 tw-h-10" },
32
+ React.createElement(ButtonWithPopover, { ...props })));
33
+ const openPopover = async () => {
34
+ const popover = screen.getByTestId(testId);
35
+ await userEvent.click(popover);
36
+ };
37
+ const closePopover = async () => {
38
+ const container = screen.getByTestId('container');
39
+ await userEvent.click(container);
40
+ };
41
+ test('renders trigger and opens Popover content on trigger click', async () => {
42
+ renderButtonWithPopover(tc.props);
43
+ expect(screen.getByTestId('trigger-icon')).toBeInTheDocument();
44
+ await openPopover();
45
+ expect(screen.getByText('Popover content')).toBeInTheDocument();
46
+ await closePopover();
47
+ expect(screen.queryByText('Popover content')).not.toBeInTheDocument();
48
+ });
49
+ test('renders trigger and opens Popover content on trigger hover', async () => {
50
+ tc.props.isHoverEnabled = true;
51
+ renderButtonWithPopover(tc.props);
52
+ expect(screen.getByTestId('trigger-icon')).toBeInTheDocument();
53
+ const popover = screen.getByTestId(testId);
54
+ await userEvent.hover(popover);
55
+ await waitFor(() => {
56
+ expect(screen.getByText('Popover content')).toBeInTheDocument();
57
+ });
58
+ });
59
+ test('closes popover when content is clicked and is set in props', async () => {
60
+ tc.props.isCloseOnContentClick = true;
61
+ renderButtonWithPopover(tc.props);
62
+ await openPopover();
63
+ const item1 = screen.getByText('Popover content');
64
+ await userEvent.click(item1);
65
+ expect(mockOnClick).toHaveBeenCalledTimes(2);
66
+ });
67
+ test('leaves popover open when content is clicked and is set in props', async () => {
68
+ tc.props.isCloseOnContentClick = false;
69
+ renderButtonWithPopover(tc.props);
70
+ await openPopover();
71
+ const item1 = screen.getByText('Popover content');
72
+ await userEvent.click(item1);
73
+ expect(mockOnClick).toHaveBeenCalledTimes(1);
74
+ });
75
+ test('does not open when disabled', async () => {
76
+ tc.props.disabled = true;
77
+ renderButtonWithPopover(tc.props);
78
+ await openPopover();
79
+ expect(screen.queryByText('Popover content')).not.toBeInTheDocument();
80
+ });
81
+ });
82
+ //# sourceMappingURL=ButtonWithPopover.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithPopover.test.js","sourceRoot":"","sources":["../../src/ButtonWithPopover/ButtonWithPopover.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ButtonWithPopover.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonWithPopover.types.js","sourceRoot":"","sources":["../../src/ButtonWithPopover/ButtonWithPopover.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { default } from './ButtonWithPopover';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ButtonWithPopover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import '../styles.css';
3
+ import { getQTipData } from '../Tooltip/qTip.utilities';
4
+ const alignment = 'tw-flex';
5
+ const labelClasses = 'tw-ml-1.5 tw-text-sm tw--mt-0.5';
6
+ const baseClasses = 'tw-border-1 tw-h-3.5 tw-w-3.5 focus:tw-ring-0 focus:tw-ring-offset-0 tw-outline-none focus:tw-outline-none' +
7
+ ' dark:tw-bg-sq-dark-background dark:tw-border-sq-dark-text dark:hover:tw-bg-sq-dark-background' +
8
+ ' checked:tw-text-white checked:tw-border-sq-text-color checked:hover:tw-border-sq-color-dark' +
9
+ ' checked:active:tw-border-sq-color-dark checked:focus:tw-border-sq-color-dark disabled:tw-border-sq-disabled-gray' +
10
+ ' dark:disabled:tw-border-sq-fairly-dark-gray dark:checked:focus:tw-bg-sq-dark-background';
11
+ const checkboxClasses = `tw-form-checkbox tw-rounded ${baseClasses}`;
12
+ const radioClasses = `tw-form-radio ${baseClasses}`;
13
+ /**
14
+ * Checkbox and Radio Box Component.
15
+ */
16
+ export const Checkbox = (props) => {
17
+ const { type = 'checkbox', value, disabled = false, label, onChange, onClick, onKeyDown, checked, defaultChecked, id, name, extraClassNames, extraLabelClassNames, testId, ...tooltipProps } = props;
18
+ const assignedId = id ?? 'checkbox_' + Math.random();
19
+ const tooltipData = getQTipData(tooltipProps);
20
+ return (React.createElement("span", { className: `${alignment} ${extraClassNames}` },
21
+ React.createElement("input", { value: value, type: type, "data-testid": testId, name: name, id: assignedId, readOnly: !onChange, checked: checked, defaultChecked: defaultChecked, className: `${type === 'checkbox' ? checkboxClasses : radioClasses} ${disabled ? 'tw-cursor-not-allowed' : 'tw-cursor-pointer'}`, disabled: disabled, onClick: onClick, onChange: onChange, onKeyDown: onKeyDown, ...tooltipData }),
22
+ React.createElement("label", { htmlFor: assignedId, className: `${labelClasses} ${extraLabelClassNames} ${disabled
23
+ ? 'tw-cursor-not-allowed dark:tw-text-sq-fairly-dark-gray tw-text-sq-fairly-dark-gray'
24
+ : 'tw-cursor-pointer tw-text-sq-text-color dark:tw-text-sq-dark-text'}` }, label)));
25
+ };
26
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../src/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,SAAS,GAAG,SAAS,CAAC;AAC5B,MAAM,YAAY,GAAG,iCAAiC,CAAC;AAEvD,MAAM,WAAW,GACf,4GAA4G;IAC5G,iGAAiG;IACjG,8FAA8F;IAC9F,mHAAmH;IACnH,0FAA0F,CAAC;AAE7F,MAAM,eAAe,GAAG,+BAA+B,WAAW,EAAE,CAAC;AAErE,MAAM,YAAY,GAAG,iBAAiB,WAAW,EAAE,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA2C,CAAC,KAAK,EAAE,EAAE;IACxE,MAAM,EACJ,IAAI,GAAG,UAAU,EACjB,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,cAAc,EACd,EAAE,EACF,IAAI,EACJ,eAAe,EACf,oBAAoB,EACpB,MAAM,EACN,GAAG,YAAY,EAChB,GAAG,KAAK,CAAC;IAEV,MAAM,UAAU,GAAG,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE9C,OAAO,CACL,8BAAM,SAAS,EAAE,GAAG,SAAS,IAAI,eAAe,EAAE;QAChD,+BACE,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,iBACG,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,CAAC,QAAQ,EACnB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,IAChE,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBACvC,EAAE,EACF,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,KAChB,WAAW,GACf;QACF,+BACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,GAAG,YAAY,IAAI,oBAAoB,IAChD,QAAQ;gBACN,CAAC,CAAC,oFAAoF;gBACtF,CAAC,CAAC,mEACN,EAAE,IACD,KAAK,CACA,CACH,CACR,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { Checkbox } from './Checkbox';
3
+ import { QTip } from '../Tooltip';
4
+ export default {
5
+ title: 'Checkbox',
6
+ };
7
+ export const AllCheckboxes = () => {
8
+ const getDisplay = (type) => (React.createElement(React.Fragment, null,
9
+ React.createElement(QTip, null),
10
+ React.createElement("div", { className: "tw-p-4" },
11
+ React.createElement(Checkbox, { value: "a", type: type, checked: true, label: 'with Label', tooltip: "Checkbox Tooltip" })),
12
+ React.createElement("div", { className: "tw-p-4" },
13
+ React.createElement(Checkbox, { value: "d", type: type, checked: false, disabled: true, label: React.createElement("div", null,
14
+ "Disabled",
15
+ React.createElement("br", null),
16
+ "multi-Line"), tooltip: "Checkbox Tooltip" })),
17
+ React.createElement("div", { className: "tw-p-4" },
18
+ React.createElement(Checkbox, { value: "d", type: type, checked: true, disabled: true, label: "Disabled", tooltip: "Checkbox Tooltip" })),
19
+ React.createElement("div", { className: "tw-p-4" },
20
+ React.createElement(Checkbox, { value: "b", type: type, checked: true, tooltip: "Checkbox Tooltip" })),
21
+ React.createElement("div", { className: "tw-p-4" },
22
+ React.createElement(Checkbox, { value: "c", type: type, checked: false, tooltip: "Checkbox Tooltip" }))));
23
+ const renderAllVariations = (type) => (React.createElement(React.Fragment, null,
24
+ React.createElement("div", { className: "tw-p-4 light" }, getDisplay(type)),
25
+ React.createElement("div", { className: "tw-p-4 tw-dark tw-bg-sq-dark-background" }, getDisplay(type))));
26
+ return (React.createElement("div", { className: "tw-grid tw-grid-cols-2 tw-gap-4" },
27
+ React.createElement("div", null,
28
+ React.createElement("b", null, "Checkbox"),
29
+ renderAllVariations('checkbox')),
30
+ React.createElement("div", null,
31
+ React.createElement("b", null, "Radios"),
32
+ renderAllVariations('radio'))));
33
+ };
34
+ //# sourceMappingURL=Checkbox.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.stories.js","sourceRoot":"","sources":["../../src/Checkbox/Checkbox.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,eAAe;IACb,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,UAAU,GAAG,CAAC,IAA0B,EAAE,EAAE,CAAC,CACjD;QACE,oBAAC,IAAI,OAAG;QACR,6BAAK,SAAS,EAAC,QAAQ;YACrB,oBAAC,QAAQ,IAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAC,kBAAkB,GAAG,CAC7F;QACN,6BAAK,SAAS,EAAC,QAAQ;YACrB,oBAAC,QAAQ,IACP,KAAK,EAAC,GAAG,EACT,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,IAAI,EACd,KAAK,EACH;;oBAEE,+BAAM;iCAEF,EAER,OAAO,EAAC,kBAAkB,GAC1B,CACE;QACN,6BAAK,SAAS,EAAC,QAAQ;YACrB,oBAAC,QAAQ,IAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAC,UAAU,EAAC,OAAO,EAAC,kBAAkB,GAAG,CACzG;QACN,6BAAK,SAAS,EAAC,QAAQ;YACrB,oBAAC,QAAQ,IAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC,kBAAkB,GAAG,CACxE;QACN,6BAAK,SAAS,EAAC,QAAQ;YACrB,oBAAC,QAAQ,IAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC,kBAAkB,GAAG,CACzE,CACL,CACJ,CAAC;IACF,MAAM,mBAAmB,GAAG,CAAC,IAA0B,EAAE,EAAE,CAAC,CAC1D;QACE,6BAAK,SAAS,EAAC,cAAc,IAAE,UAAU,CAAC,IAAI,CAAC,CAAO;QACtD,6BAAK,SAAS,EAAC,yCAAyC,IAAE,UAAU,CAAC,IAAI,CAAC,CAAO,CAChF,CACJ,CAAC;IAEF,OAAO,CACL,6BAAK,SAAS,EAAC,iCAAiC;QAC9C;YACE,0CAAe;YACd,mBAAmB,CAAC,UAAU,CAAC,CAC5B;QAEN;YACE,wCAAa;YACZ,mBAAmB,CAAC,OAAO,CAAC,CACzB,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import '@testing-library/jest-dom';
3
+ import { render, screen } from '@testing-library/react';
4
+ import { Checkbox } from './Checkbox';
5
+ import userEvent from '@testing-library/user-event';
6
+ describe('Checkbox', () => {
7
+ class Context {
8
+ testId = 'checkboxTestId';
9
+ props = {
10
+ onChange: jest.fn(),
11
+ checked: false,
12
+ testId: this.testId,
13
+ };
14
+ }
15
+ let tc;
16
+ beforeEach(() => {
17
+ tc = new Context();
18
+ });
19
+ const renderCheckbox = (props) => render(React.createElement(Checkbox, { ...props }));
20
+ it('renders checkbox', () => {
21
+ renderCheckbox(tc.props);
22
+ expect(screen.getByTestId(tc.testId)).toBeInTheDocument();
23
+ });
24
+ it('renders radio', () => {
25
+ renderCheckbox({ ...tc.props, type: 'radio' });
26
+ expect(screen.getByTestId(tc.testId)).toHaveProperty('type', 'radio');
27
+ });
28
+ it('renders label', () => {
29
+ const label = 'look at this checkbox!';
30
+ renderCheckbox({ ...tc.props, label });
31
+ expect(screen.getByText(label)).toBeInTheDocument();
32
+ });
33
+ it('respects checked', () => {
34
+ renderCheckbox({ ...tc.props, checked: true });
35
+ expect(screen.getByTestId(tc.testId)).toBeChecked();
36
+ });
37
+ it('calls onChange handler', async () => {
38
+ const onChange = jest.fn();
39
+ renderCheckbox({ ...tc.props, onChange });
40
+ await userEvent.click(screen.getByTestId(tc.testId));
41
+ expect(onChange).toHaveBeenCalled();
42
+ });
43
+ it('calls onKeyDown handler', async () => {
44
+ const onKeyDown = jest.fn();
45
+ renderCheckbox({ ...tc.props, onKeyDown });
46
+ await userEvent.type(screen.getByTestId(tc.testId), 'a');
47
+ expect(onKeyDown).toHaveBeenCalled();
48
+ });
49
+ it('calls onClickHandler handler', async () => {
50
+ const onClick = jest.fn();
51
+ renderCheckbox({ ...tc.props, onClick });
52
+ await userEvent.click(screen.getByTestId(tc.testId));
53
+ expect(onClick).toHaveBeenCalled();
54
+ });
55
+ it('respects disabled', () => {
56
+ renderCheckbox({ ...tc.props, disabled: true });
57
+ expect(screen.getByTestId(tc.testId)).not.toBeEnabled();
58
+ });
59
+ it('renders label clickable', async () => {
60
+ const label = 'amazing checkbox';
61
+ const onClick = jest.fn();
62
+ renderCheckbox({ ...tc.props, label, onClick });
63
+ expect(screen.getByTestId(tc.testId)).not.toBeChecked();
64
+ await userEvent.click(screen.getByText(label));
65
+ expect(onClick).toHaveBeenCalled();
66
+ });
67
+ it('respects id', () => {
68
+ const id = 'checkboxId';
69
+ renderCheckbox({ ...tc.props, id });
70
+ expect(screen.getByTestId(tc.testId)).toHaveProperty('id', id);
71
+ });
72
+ it('respects name', () => {
73
+ const name = 'checkboxName';
74
+ renderCheckbox({ ...tc.props, name });
75
+ expect(screen.getByTestId(tc.testId)).toHaveProperty('name', name);
76
+ });
77
+ it('respects name', () => {
78
+ const value = 'priceless';
79
+ renderCheckbox({ ...tc.props, value });
80
+ expect(screen.getByTestId(tc.testId)).toHaveProperty('value', value);
81
+ });
82
+ it('applies extraClassNames', () => {
83
+ const extraClassNames = 'extra styling so fancy';
84
+ renderCheckbox({ ...tc.props, extraClassNames });
85
+ expect(screen.getByTestId(tc.testId).parentNode).toHaveClass(extraClassNames);
86
+ });
87
+ it('applies extraLabelClassNames', () => {
88
+ const extraLabelClassNames = 'special label';
89
+ const label = 'amazing checkbox';
90
+ renderCheckbox({ ...tc.props, extraLabelClassNames, label });
91
+ expect(screen.getByText(label)).toHaveClass(extraLabelClassNames);
92
+ });
93
+ });
94
+ //# sourceMappingURL=Checkbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.test.js","sourceRoot":"","sources":["../../src/Checkbox/Checkbox.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Checkbox.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.types.js","sourceRoot":"","sources":["../../src/Checkbox/Checkbox.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { Checkbox as default } from './Checkbox';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { CollapseProps } from './Collapse.types';
3
+ declare const Collapse: React.FunctionComponent<CollapseProps>;
4
+ export default Collapse;
@@ -0,0 +1,18 @@
1
+ import React, { useRef, useEffect, useState } from 'react';
2
+ import { animated, useSpring } from '@react-spring/web';
3
+ const Collapse = ({ isVisible, children }) => {
4
+ const contentRef = useRef(null);
5
+ const [contentHeight, setContentHeight] = useState(contentRef.current?.scrollHeight);
6
+ useEffect(() => {
7
+ if (contentRef.current) {
8
+ setContentHeight(contentRef.current?.scrollHeight ?? 0);
9
+ }
10
+ }, [children]);
11
+ const styles = useSpring({
12
+ opacity: isVisible ? 1 : 0,
13
+ height: isVisible ? contentHeight : 0,
14
+ });
15
+ return React.createElement(animated.div, { style: styles }, isVisible ? React.createElement("div", { ref: contentRef }, children) : undefined);
16
+ };
17
+ export default Collapse;
18
+ //# sourceMappingURL=Collapse.js.map