@abstraks-dev/ui-library 1.1.26 → 1.1.28

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 (106) hide show
  1. package/dist/__tests__/AccountBox.test.js +61 -0
  2. package/dist/__tests__/AccountCircle.test.js +69 -0
  3. package/dist/__tests__/Alert.test.js +144 -0
  4. package/dist/__tests__/ArrowIcon.test.js +61 -0
  5. package/dist/__tests__/ArrowRight.test.js +12 -7
  6. package/dist/__tests__/BookOpen.test.js +61 -0
  7. package/dist/__tests__/Camera.test.js +69 -0
  8. package/dist/__tests__/CaretDown.test.js +69 -0
  9. package/dist/__tests__/ChevronDown.test.js +13 -8
  10. package/dist/__tests__/Comment.test.js +69 -0
  11. package/dist/__tests__/Ellipses.test.js +61 -0
  12. package/dist/__tests__/Explore.test.js +61 -0
  13. package/dist/__tests__/FileInput.test.js +148 -0
  14. package/dist/__tests__/Filter.test.js +69 -0
  15. package/dist/__tests__/Form.test.js +471 -0
  16. package/dist/__tests__/Group.test.js +61 -0
  17. package/dist/__tests__/GroupReview.test.js +61 -0
  18. package/dist/__tests__/Hamburger.test.js +69 -0
  19. package/dist/__tests__/Header.test.js +198 -0
  20. package/dist/__tests__/Heart.test.js +69 -0
  21. package/dist/__tests__/Home.test.js +69 -0
  22. package/dist/__tests__/LoadingSpinner.test.js +78 -0
  23. package/dist/__tests__/LogOut.test.js +69 -0
  24. package/dist/__tests__/Magnify.test.js +69 -0
  25. package/dist/__tests__/News.test.js +61 -0
  26. package/dist/__tests__/Review.test.js +61 -0
  27. package/dist/__tests__/SaveIcon.test.js +61 -0
  28. package/dist/__tests__/Search.test.js +101 -0
  29. package/dist/__tests__/utils/accessibility.test.js +361 -0
  30. package/dist/__tests__/utils/inputValidation-core.test.js +80 -0
  31. package/dist/__tests__/utils/validation-core.test.js +123 -0
  32. package/dist/__tests__/utils/validation.test.js +362 -0
  33. package/dist/components/Alert.js +104 -0
  34. package/dist/components/FileInput.js +96 -0
  35. package/dist/components/Form.js +27 -3
  36. package/dist/components/Search.js +236 -0
  37. package/dist/icons/AccountBox.js +33 -0
  38. package/dist/icons/AccountCircle.js +33 -0
  39. package/dist/icons/ArrowIcon.js +3 -2
  40. package/dist/icons/ArrowRight.js +23 -12
  41. package/dist/icons/BookOpen.js +33 -0
  42. package/dist/icons/Camera.js +33 -0
  43. package/dist/icons/CaretDown.js +33 -0
  44. package/dist/icons/ChevronDown.js +19 -9
  45. package/dist/icons/Comment.js +33 -0
  46. package/dist/icons/Explore.js +33 -0
  47. package/dist/icons/Filter.js +33 -0
  48. package/dist/icons/Group.js +33 -0
  49. package/dist/icons/GroupReview.js +33 -0
  50. package/dist/icons/Hamburger.js +14 -20
  51. package/dist/icons/Heart.js +33 -0
  52. package/dist/icons/Home.js +33 -0
  53. package/dist/icons/LoadingSpinner.js +3 -2
  54. package/dist/icons/LogOut.js +33 -0
  55. package/dist/icons/Magnify.js +33 -0
  56. package/dist/icons/News.js +33 -0
  57. package/dist/icons/Review.js +35 -0
  58. package/dist/icons/SaveIcon.js +3 -2
  59. package/dist/icons/index.js +112 -0
  60. package/dist/index.js +32 -0
  61. package/dist/styles/_variables.scss +2 -0
  62. package/dist/styles/alert.css +218 -0
  63. package/dist/styles/alert.css.map +1 -0
  64. package/dist/styles/alert.scss +128 -0
  65. package/dist/styles/anchor.css.map +1 -1
  66. package/dist/styles/avatar.css.map +1 -1
  67. package/dist/styles/button.css.map +1 -1
  68. package/dist/styles/card.css.map +1 -1
  69. package/dist/styles/checkbox.css.map +1 -1
  70. package/dist/styles/crud.css.map +1 -1
  71. package/dist/styles/dragAndDrop.css.map +1 -1
  72. package/dist/styles/error.css.map +1 -1
  73. package/dist/styles/file-input.css +165 -0
  74. package/dist/styles/file-input.css.map +1 -0
  75. package/dist/styles/file-input.scss +69 -0
  76. package/dist/styles/footer.css.map +1 -1
  77. package/dist/styles/form.css.map +1 -1
  78. package/dist/styles/header.css.map +1 -1
  79. package/dist/styles/heading.css.map +1 -1
  80. package/dist/styles/hero.css.map +1 -1
  81. package/dist/styles/htmlElements.css.map +1 -1
  82. package/dist/styles/label.css.map +1 -1
  83. package/dist/styles/loader.css.map +1 -1
  84. package/dist/styles/main.css +311 -0
  85. package/dist/styles/main.css.map +1 -1
  86. package/dist/styles/menu-hover.css.map +1 -1
  87. package/dist/styles/paragraph.css.map +1 -1
  88. package/dist/styles/prompt.css.map +1 -1
  89. package/dist/styles/radio.css.map +1 -1
  90. package/dist/styles/search.css +269 -0
  91. package/dist/styles/search.css.map +1 -0
  92. package/dist/styles/search.scss +215 -0
  93. package/dist/styles/select.css.map +1 -1
  94. package/dist/styles/side-menu.css.map +1 -1
  95. package/dist/styles/tabs.css.map +1 -1
  96. package/dist/styles/text-area.css.map +1 -1
  97. package/dist/styles/text-input.css.map +1 -1
  98. package/dist/utils/utils/validation.js +2 -2
  99. package/dist/utils/validation.js +2 -2
  100. package/package.json +1 -1
  101. package/dist/icons/__tests__/CheckCircle.test.js +0 -9
  102. package/dist/icons/__tests__/ChevronDown.test.js +0 -9
  103. package/dist/icons/__tests__/Close.test.js +0 -9
  104. package/dist/icons/__tests__/EditSquare.test.js +0 -9
  105. package/dist/icons/__tests__/PlusCircle.test.js +0 -9
  106. package/dist/icons/__tests__/TrashX.test.js +0 -9
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _react2 = require("@testing-library/react");
5
+ var _Comment = require("../icons/Comment.js");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ // Suppress console.error during tests
8
+ let consoleErrorSpy;
9
+ beforeAll(() => {
10
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
11
+ });
12
+ afterAll(() => {
13
+ consoleErrorSpy.mockRestore();
14
+ });
15
+ describe('Comment Icon', () => {
16
+ test('renders SVG element', () => {
17
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, null));
18
+ const svg = document.querySelector('svg');
19
+ expect(svg).toBeInTheDocument();
20
+ expect(svg.tagName).toBe('svg');
21
+ });
22
+ test('has correct default props', () => {
23
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, null));
24
+ const svg = document.querySelector('svg');
25
+ expect(svg).toHaveAttribute('width', '24');
26
+ expect(svg).toHaveAttribute('height', '24');
27
+ expect(svg).toHaveAttribute('viewBox', '0 96 960 960');
28
+ expect(svg).toHaveAttribute('fill', '#adb5bd');
29
+ expect(svg).toHaveClass('icon');
30
+ expect(svg).toHaveClass('comment');
31
+ });
32
+ test('applies custom dimensions', () => {
33
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, {
34
+ dimensions: 32
35
+ }));
36
+ const svg = document.querySelector('svg');
37
+ expect(svg).toHaveAttribute('width', '32');
38
+ expect(svg).toHaveAttribute('height', '32');
39
+ });
40
+ test('applies custom componentName and additionalClassName', () => {
41
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, {
42
+ componentName: "custom-comment",
43
+ additionalClassName: "extra-class"
44
+ }));
45
+ const svg = document.querySelector('svg');
46
+ expect(svg).toHaveClass('icon');
47
+ expect(svg).toHaveClass('custom-comment');
48
+ expect(svg).toHaveClass('extra-class');
49
+ });
50
+ test('applies custom fill color', () => {
51
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, {
52
+ fill: "#ff0000"
53
+ }));
54
+ const svg = document.querySelector('svg');
55
+ expect(svg).toHaveAttribute('fill', '#ff0000');
56
+ });
57
+ test('has correct path data', () => {
58
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, null));
59
+ const svg = document.querySelector('svg');
60
+ const path = svg.querySelector('path');
61
+ expect(path).toHaveAttribute('d', 'M240 656h480v-60H240v60Zm0-130h480v-60H240v60Zm0-130h480v-60H240v60Zm640 580L720 816H140q-23 0-41.5-18.5T80 756V236q0-23 18.5-41.5T140 176h680q24 0 42 18.5t18 41.5v740ZM140 236v520h605l75 75V236H140Zm0 0v595-595Z');
62
+ });
63
+ test('contains exactly one path element', () => {
64
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Comment.Comment, null));
65
+ const svg = document.querySelector('svg');
66
+ const paths = svg.querySelectorAll('path');
67
+ expect(paths).toHaveLength(1);
68
+ });
69
+ });
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _react2 = require("@testing-library/react");
5
+ var _Ellipses = require("../icons/Ellipses");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ describe('Ellipses Icon', () => {
8
+ test('renders with default props', () => {
9
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, null));
10
+ const svg = document.querySelector('svg');
11
+ expect(svg).toBeInTheDocument();
12
+ expect(svg.tagName).toBe('svg');
13
+ });
14
+ test('applies correct default dimensions', () => {
15
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, null));
16
+ const svg = document.querySelector('svg');
17
+ expect(svg).toHaveAttribute('width', '24');
18
+ expect(svg).toHaveAttribute('height', '24');
19
+ });
20
+ test('applies custom dimensions', () => {
21
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, {
22
+ dimensions: 32
23
+ }));
24
+ const svg = document.querySelector('svg');
25
+ expect(svg).toHaveAttribute('width', '32');
26
+ expect(svg).toHaveAttribute('height', '32');
27
+ });
28
+ test('applies correct CSS classes', () => {
29
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, null));
30
+ const svg = document.querySelector('svg');
31
+ expect(svg).toHaveClass('icon', 'ellipses');
32
+ });
33
+ test('applies additional className', () => {
34
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, {
35
+ additionalClassName: "custom-class"
36
+ }));
37
+ const svg = document.querySelector('svg');
38
+ expect(svg).toHaveClass('icon', 'ellipses', 'custom-class');
39
+ });
40
+ test('applies custom fill color', () => {
41
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, {
42
+ fill: "#ff0000"
43
+ }));
44
+ const svg = document.querySelector('svg');
45
+ expect(svg).toHaveAttribute('fill', '#ff0000');
46
+ });
47
+ test('contains correct path data', () => {
48
+ const {
49
+ container
50
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, null));
51
+ const path = container.querySelector('path');
52
+ expect(path).toHaveAttribute('d', 'M240-400q-33 0-56.5-23.5T160-480q0-33 23.5-56.5T240-560q33 0 56.5 23.5T320-480q0 33-23.5 56.5T240-400Zm240 0q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm240 0q-33 0-56.5-23.5T640-480q0-33 23.5-56.5T720-560q33 0 56.5 23.5T800-480q0 33-23.5 56.5T720-400Z');
53
+ });
54
+ test('contains single path element', () => {
55
+ const {
56
+ container
57
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Ellipses.Ellipses, null));
58
+ const paths = container.querySelectorAll('path');
59
+ expect(paths).toHaveLength(1);
60
+ });
61
+ });
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _react2 = require("@testing-library/react");
5
+ var _Explore = require("../icons/Explore");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ describe('Explore Icon', () => {
8
+ test('renders with default props', () => {
9
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, null));
10
+ const svg = document.querySelector('svg');
11
+ expect(svg).toBeInTheDocument();
12
+ expect(svg.tagName).toBe('svg');
13
+ });
14
+ test('applies correct default dimensions', () => {
15
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, null));
16
+ const svg = document.querySelector('svg');
17
+ expect(svg).toHaveAttribute('width', '24');
18
+ expect(svg).toHaveAttribute('height', '24');
19
+ });
20
+ test('applies custom dimensions', () => {
21
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, {
22
+ dimensions: 32
23
+ }));
24
+ const svg = document.querySelector('svg');
25
+ expect(svg).toHaveAttribute('width', '32');
26
+ expect(svg).toHaveAttribute('height', '32');
27
+ });
28
+ test('applies correct CSS classes', () => {
29
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, null));
30
+ const svg = document.querySelector('svg');
31
+ expect(svg).toHaveClass('icon', 'explore');
32
+ });
33
+ test('applies additional className', () => {
34
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, {
35
+ additionalClassName: "custom-class"
36
+ }));
37
+ const svg = document.querySelector('svg');
38
+ expect(svg).toHaveClass('icon', 'explore', 'custom-class');
39
+ });
40
+ test('applies custom fill color', () => {
41
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, {
42
+ fill: "#ff0000"
43
+ }));
44
+ const svg = document.querySelector('svg');
45
+ expect(svg).toHaveAttribute('fill', '#ff0000');
46
+ });
47
+ test('contains correct path data', () => {
48
+ const {
49
+ container
50
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, null));
51
+ const path = container.querySelector('path');
52
+ expect(path).toHaveAttribute('d', 'm300-300 280-80 80-280-280 80-80 280Zm180-120q-25 0-42.5-17.5T420-480q0-25 17.5-42.5T480-540q25 0 42.5 17.5T540-480q0 25-17.5 42.5T480-420Zm0 340q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Zm0-320Z');
53
+ });
54
+ test('contains single path element', () => {
55
+ const {
56
+ container
57
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Explore.Explore, null));
58
+ const paths = container.querySelectorAll('path');
59
+ expect(paths).toHaveLength(1);
60
+ });
61
+ });
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _react2 = require("@testing-library/react");
5
+ var _FileInput = require("../components/FileInput");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ // Suppress console.error during tests
8
+ let consoleErrorSpy;
9
+ beforeAll(() => {
10
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
11
+ });
12
+ afterAll(() => {
13
+ consoleErrorSpy.mockRestore();
14
+ });
15
+ describe('FileInput Component', () => {
16
+ test('renders with default label', () => {
17
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, null));
18
+ expect(_react2.screen.getByText('Choose File')).toBeInTheDocument();
19
+ });
20
+ test('renders with custom label', () => {
21
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
22
+ label: "Upload Image"
23
+ }));
24
+ expect(_react2.screen.getByText('Upload Image')).toBeInTheDocument();
25
+ });
26
+ test('renders file input element', () => {
27
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, null));
28
+ const fileInput = _react2.screen.getByLabelText('File input');
29
+ expect(fileInput).toBeInTheDocument();
30
+ expect(fileInput).toHaveAttribute('type', 'file');
31
+ });
32
+ test('applies default props correctly', () => {
33
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, null));
34
+ const fileInput = _react2.screen.getByLabelText('File input');
35
+ expect(fileInput).toHaveAttribute('accept', '*/*');
36
+ expect(fileInput).not.toHaveAttribute('multiple');
37
+ expect(fileInput).not.toBeDisabled();
38
+ });
39
+ test('applies custom accept attribute', () => {
40
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
41
+ accept: "image/*"
42
+ }));
43
+ const fileInput = _react2.screen.getByLabelText('File input');
44
+ expect(fileInput).toHaveAttribute('accept', 'image/*');
45
+ });
46
+ test('enables multiple file selection when multiple is true', () => {
47
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
48
+ multiple: true
49
+ }));
50
+ const fileInput = _react2.screen.getByLabelText('File input');
51
+ expect(fileInput).toHaveAttribute('multiple');
52
+ });
53
+ test('disables input when disabled is true', () => {
54
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
55
+ disabled: true
56
+ }));
57
+ const fileInput = _react2.screen.getByLabelText('File input');
58
+ expect(fileInput).toBeDisabled();
59
+ });
60
+ test('applies disabled class when disabled', () => {
61
+ const {
62
+ container
63
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
64
+ disabled: true
65
+ }));
66
+ const wrapper = container.querySelector('.ui-file-input');
67
+ expect(wrapper).toHaveClass('ui-file-input--disabled');
68
+ });
69
+ test('calls onChange when file is selected', () => {
70
+ const onChange = jest.fn();
71
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
72
+ onChange: onChange
73
+ }));
74
+ const fileInput = _react2.screen.getByLabelText('File input');
75
+ const file = new File(['test'], 'test.txt', {
76
+ type: 'text/plain'
77
+ });
78
+ _react2.fireEvent.change(fileInput, {
79
+ target: {
80
+ files: [file]
81
+ }
82
+ });
83
+ expect(onChange).toHaveBeenCalledTimes(1);
84
+ });
85
+ test('applies custom className', () => {
86
+ const {
87
+ container
88
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
89
+ className: "custom-class"
90
+ }));
91
+ const wrapper = container.querySelector('.ui-file-input');
92
+ expect(wrapper).toHaveClass('ui-file-input');
93
+ expect(wrapper).toHaveClass('custom-class');
94
+ });
95
+ test('applies custom aria-label', () => {
96
+ const {
97
+ container
98
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
99
+ ariaLabel: "Custom file input"
100
+ }));
101
+ const fileInput = container.querySelector('input[type="file"]');
102
+ expect(fileInput).toHaveAttribute('aria-label', 'Custom file input');
103
+ });
104
+ test('applies aria-describedby attribute', () => {
105
+ const {
106
+ container
107
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
108
+ ariaDescribedBy: "file-help"
109
+ }));
110
+ const fileInput = container.querySelector('input[type="file"]');
111
+ expect(fileInput).toHaveAttribute('aria-describedby', 'file-help');
112
+ });
113
+ test('triggers file input click when label is clicked', () => {
114
+ const {
115
+ container
116
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
117
+ label: "Click me"
118
+ }));
119
+ const label = _react2.screen.getByText('Click me');
120
+ const fileInput = container.querySelector('input[type="file"]');
121
+ const clickSpy = jest.spyOn(fileInput, 'click');
122
+ _react2.fireEvent.click(label);
123
+ expect(clickSpy).toHaveBeenCalled();
124
+ clickSpy.mockRestore();
125
+ });
126
+ test('does not trigger click when disabled', () => {
127
+ const {
128
+ container
129
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
130
+ label: "Click me",
131
+ disabled: true
132
+ }));
133
+ const label = _react2.screen.getByText('Click me');
134
+ const fileInput = container.querySelector('input[type="file"]');
135
+ const clickSpy = jest.spyOn(fileInput, 'click');
136
+ _react2.fireEvent.click(label);
137
+ expect(clickSpy).not.toHaveBeenCalled();
138
+ clickSpy.mockRestore();
139
+ });
140
+ test('forwards ref correctly', () => {
141
+ const ref = /*#__PURE__*/_react.default.createRef();
142
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_FileInput.FileInput, {
143
+ ref: ref
144
+ }));
145
+ expect(ref.current).toBeInstanceOf(HTMLInputElement);
146
+ expect(ref.current.type).toBe('file');
147
+ });
148
+ });
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _react2 = require("@testing-library/react");
5
+ var _Filter = require("../icons/Filter.js");
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ // Suppress console.error during tests
8
+ let consoleErrorSpy;
9
+ beforeAll(() => {
10
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
11
+ });
12
+ afterAll(() => {
13
+ consoleErrorSpy.mockRestore();
14
+ });
15
+ describe('Filter Icon', () => {
16
+ test('renders SVG element', () => {
17
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, null));
18
+ const svg = document.querySelector('svg');
19
+ expect(svg).toBeInTheDocument();
20
+ expect(svg.tagName).toBe('svg');
21
+ });
22
+ test('has correct default props', () => {
23
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, null));
24
+ const svg = document.querySelector('svg');
25
+ expect(svg).toHaveAttribute('width', '24');
26
+ expect(svg).toHaveAttribute('height', '24');
27
+ expect(svg).toHaveAttribute('viewBox', '0 -960 960 960');
28
+ expect(svg).toHaveAttribute('fill', '#adb5bd');
29
+ expect(svg).toHaveClass('icon');
30
+ expect(svg).toHaveClass('filter');
31
+ });
32
+ test('applies custom dimensions', () => {
33
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, {
34
+ dimensions: 32
35
+ }));
36
+ const svg = document.querySelector('svg');
37
+ expect(svg).toHaveAttribute('width', '32');
38
+ expect(svg).toHaveAttribute('height', '32');
39
+ });
40
+ test('applies custom componentName and additionalClassName', () => {
41
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, {
42
+ componentName: "custom-filter",
43
+ additionalClassName: "extra-class"
44
+ }));
45
+ const svg = document.querySelector('svg');
46
+ expect(svg).toHaveClass('icon');
47
+ expect(svg).toHaveClass('custom-filter');
48
+ expect(svg).toHaveClass('extra-class');
49
+ });
50
+ test('applies custom fill color', () => {
51
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, {
52
+ fill: "#ff0000"
53
+ }));
54
+ const svg = document.querySelector('svg');
55
+ expect(svg).toHaveAttribute('fill', '#ff0000');
56
+ });
57
+ test('has correct path data', () => {
58
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, null));
59
+ const svg = document.querySelector('svg');
60
+ const path = svg.querySelector('path');
61
+ expect(path).toHaveAttribute('d', 'M440-120v-240h80v80h320v80H520v80h-80Zm-320-80v-80h240v80H120Zm160-160v-80H120v-80h160v-80h80v240h-80Zm160-80v-80h400v80H440Zm160-160v-240h80v80h160v80H680v80h-80Zm-480-80v-80h400v80H120Z');
62
+ });
63
+ test('contains exactly one path element', () => {
64
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Filter.Filter, null));
65
+ const svg = document.querySelector('svg');
66
+ const paths = svg.querySelectorAll('path');
67
+ expect(paths).toHaveLength(1);
68
+ });
69
+ });