@pie-lib/charting 7.0.12 → 7.1.0-beta

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 (63) hide show
  1. package/CHANGELOG.md +0 -40
  2. package/lib/__tests__/actions-button.test.js +332 -0
  3. package/lib/__tests__/actions-button.test.js.map +1 -0
  4. package/lib/__tests__/axes.test.js +746 -0
  5. package/lib/__tests__/axes.test.js.map +1 -0
  6. package/lib/__tests__/chart-setup.test.js +796 -0
  7. package/lib/__tests__/chart-setup.test.js.map +1 -0
  8. package/lib/__tests__/chart-type.test.js +25 -0
  9. package/lib/__tests__/chart-type.test.js.map +1 -0
  10. package/lib/__tests__/chart.test.js +103 -0
  11. package/lib/__tests__/chart.test.js.map +1 -0
  12. package/lib/__tests__/grid.test.js +39 -0
  13. package/lib/__tests__/grid.test.js.map +1 -0
  14. package/lib/__tests__/key-legend.test.js +235 -0
  15. package/lib/__tests__/key-legend.test.js.map +1 -0
  16. package/lib/__tests__/mark-label.test.js +46 -0
  17. package/lib/__tests__/mark-label.test.js.map +1 -0
  18. package/lib/__tests__/tool-menu.test.js +627 -0
  19. package/lib/__tests__/tool-menu.test.js.map +1 -0
  20. package/lib/__tests__/utils.js +56 -0
  21. package/lib/__tests__/utils.js.map +1 -0
  22. package/lib/__tests__/utils.test.js +186 -0
  23. package/lib/__tests__/utils.test.js.map +1 -0
  24. package/lib/bars/__tests__/bar.test.js +53 -0
  25. package/lib/bars/__tests__/bar.test.js.map +1 -0
  26. package/lib/bars/__tests__/histogram.test.js +53 -0
  27. package/lib/bars/__tests__/histogram.test.js.map +1 -0
  28. package/lib/bars/__tests__/utils.js +50 -0
  29. package/lib/bars/__tests__/utils.js.map +1 -0
  30. package/lib/bars/common/__tests__/bars.test.js +76 -0
  31. package/lib/bars/common/__tests__/bars.test.js.map +1 -0
  32. package/lib/bars/common/__tests__/utils.js +50 -0
  33. package/lib/bars/common/__tests__/utils.js.map +1 -0
  34. package/lib/common/__tests__/correctness-indicators.test.js +887 -0
  35. package/lib/common/__tests__/correctness-indicators.test.js.map +1 -0
  36. package/lib/common/__tests__/drag-handle.test.js +73 -0
  37. package/lib/common/__tests__/drag-handle.test.js.map +1 -0
  38. package/lib/common/__tests__/utils.js +50 -0
  39. package/lib/common/__tests__/utils.js.map +1 -0
  40. package/lib/line/__tests__/line-cross.test.js +617 -0
  41. package/lib/line/__tests__/line-cross.test.js.map +1 -0
  42. package/lib/line/__tests__/line-dot.test.js +47 -0
  43. package/lib/line/__tests__/line-dot.test.js.map +1 -0
  44. package/lib/line/__tests__/utils.js +56 -0
  45. package/lib/line/__tests__/utils.js.map +1 -0
  46. package/lib/line/common/__tests__/drag-handle.test.js +73 -0
  47. package/lib/line/common/__tests__/drag-handle.test.js.map +1 -0
  48. package/lib/line/common/__tests__/line.test.js +92 -0
  49. package/lib/line/common/__tests__/line.test.js.map +1 -0
  50. package/lib/line/common/__tests__/utils.js +50 -0
  51. package/lib/line/common/__tests__/utils.js.map +1 -0
  52. package/lib/plot/__tests__/dot.test.js +513 -0
  53. package/lib/plot/__tests__/dot.test.js.map +1 -0
  54. package/lib/plot/__tests__/line.test.js +566 -0
  55. package/lib/plot/__tests__/line.test.js.map +1 -0
  56. package/lib/plot/__tests__/utils.js +50 -0
  57. package/lib/plot/__tests__/utils.js.map +1 -0
  58. package/lib/plot/common/__tests__/plot.test.js +79 -0
  59. package/lib/plot/common/__tests__/plot.test.js.map +1 -0
  60. package/lib/plot/common/__tests__/utils.js +50 -0
  61. package/lib/plot/common/__tests__/utils.js.map +1 -0
  62. package/package.json +5 -5
  63. package/LICENSE.md +0 -5
package/CHANGELOG.md CHANGED
@@ -3,46 +3,6 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [7.0.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.11...@pie-lib/charting@7.0.12) (2026-07-08)
7
-
8
- **Note:** Version bump only for package @pie-lib/charting
9
-
10
- ## [7.0.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.10...@pie-lib/charting@7.0.11) (2026-07-01)
11
-
12
- **Note:** Version bump only for package @pie-lib/charting
13
-
14
- ## [7.0.10](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.9...@pie-lib/charting@7.0.10) (2026-06-25)
15
-
16
- **Note:** Version bump only for package @pie-lib/charting
17
-
18
- ## [7.0.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.8...@pie-lib/charting@7.0.9) (2026-06-19)
19
-
20
- **Note:** Version bump only for package @pie-lib/charting
21
-
22
- ## [7.0.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.7...@pie-lib/charting@7.0.8) (2026-06-17)
23
-
24
- ### Bug Fixes
25
-
26
- - **charting, plot:** rename 'disabled' class to 'disabledMarkLabel' and 'disabledTitle' PIE-661 PIE-664 ([29fc92c](https://github.com/pie-framework/pie-lib/commit/29fc92cf738990cd83f0e0d48fa4dd9047ad065d))
27
-
28
- ## [7.0.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.6...@pie-lib/charting@7.0.7) (2026-06-12)
29
-
30
- ### Bug Fixes
31
-
32
- - correct @emotion/style typo to @emotion/styled in package deps PIE-678 ([d529ac7](https://github.com/pie-framework/pie-lib/commit/d529ac7bc3dfa94d8037688452d4c70c66f2590b))
33
-
34
- ## [7.0.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.5...@pie-lib/charting@7.0.6) (2026-06-03)
35
-
36
- **Note:** Version bump only for package @pie-lib/charting
37
-
38
- ## [7.0.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.4...@pie-lib/charting@7.0.5) (2026-06-01)
39
-
40
- **Note:** Version bump only for package @pie-lib/charting
41
-
42
- ## [7.0.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.3...@pie-lib/charting@7.0.4) (2026-05-21)
43
-
44
- **Note:** Version bump only for package @pie-lib/charting
45
-
46
6
  ## [7.0.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/charting@7.0.2...@pie-lib/charting@7.0.3) (2026-05-15)
47
7
 
48
8
  ### Bug Fixes
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _react2 = require("@testing-library/react");
7
+ var _styles = require("@mui/material/styles");
8
+ var _actionsButton = require("../actions-button");
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ jest.mock('@pie-lib/translator', function () {
12
+ return {
13
+ __esModule: true,
14
+ "default": {
15
+ translator: {
16
+ t: jest.fn(function (key) {
17
+ var translations = {
18
+ 'charting.add': 'Add Category',
19
+ 'charting.delete': 'Delete',
20
+ 'charting.newLabel': 'New Category'
21
+ };
22
+ return translations[key] || key;
23
+ })
24
+ }
25
+ }
26
+ };
27
+ });
28
+ var theme;
29
+ beforeAll(function () {
30
+ theme = (0, _styles.createTheme)();
31
+ });
32
+ describe('ActionsButton', function () {
33
+ var addCategory = jest.fn();
34
+ var deleteCategory = jest.fn();
35
+ beforeEach(function () {
36
+ jest.clearAllMocks();
37
+ });
38
+ var renderComponent = function renderComponent() {
39
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
40
+ var defaults = {
41
+ addCategory: addCategory,
42
+ deleteCategory: deleteCategory,
43
+ categories: [],
44
+ language: 'en'
45
+ };
46
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
47
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_styles.ThemeProvider, {
48
+ theme: theme
49
+ }, /*#__PURE__*/_react["default"].createElement(_actionsButton.ActionsButton, props)));
50
+ };
51
+ describe('rendering', function () {
52
+ it('renders without crashing', function () {
53
+ var _renderComponent = renderComponent(),
54
+ container = _renderComponent.container;
55
+ expect(container).toBeInTheDocument();
56
+ });
57
+ it('renders Actions button', function () {
58
+ var _renderComponent2 = renderComponent(),
59
+ getByText = _renderComponent2.getByText;
60
+ expect(getByText('Actions')).toBeInTheDocument();
61
+ });
62
+ it('renders with custom language', function () {
63
+ var _renderComponent3 = renderComponent({
64
+ language: 'es'
65
+ }),
66
+ container = _renderComponent3.container;
67
+ expect(container).toBeInTheDocument();
68
+ });
69
+ it('renders with empty categories', function () {
70
+ var _renderComponent4 = renderComponent({
71
+ categories: []
72
+ }),
73
+ container = _renderComponent4.container;
74
+ expect(container).toBeInTheDocument();
75
+ });
76
+ it('renders with multiple categories', function () {
77
+ var categories = [{
78
+ label: 'A',
79
+ deletable: true
80
+ }, {
81
+ label: 'B',
82
+ deletable: true
83
+ }, {
84
+ label: 'C',
85
+ deletable: false
86
+ }];
87
+ var _renderComponent5 = renderComponent({
88
+ categories: categories
89
+ }),
90
+ container = _renderComponent5.container;
91
+ expect(container).toBeInTheDocument();
92
+ });
93
+ });
94
+ describe('popover interactions', function () {
95
+ it('opens popover when Actions button is clicked', function () {
96
+ var _renderComponent6 = renderComponent(),
97
+ getByText = _renderComponent6.getByText;
98
+ var actionsButton = getByText('Actions');
99
+ _react2.fireEvent.click(actionsButton);
100
+ expect(getByText(/Add Category/i)).toBeInTheDocument();
101
+ });
102
+ it('closes popover when clicking outside', function () {
103
+ var _renderComponent7 = renderComponent(),
104
+ getByText = _renderComponent7.getByText;
105
+ var actionsButton = getByText('Actions');
106
+ _react2.fireEvent.click(actionsButton);
107
+ expect(getByText(/Add Category/i)).toBeInTheDocument();
108
+ var backdrop = document.querySelector('.MuiPopover-root');
109
+ if (backdrop) {
110
+ _react2.fireEvent.click(backdrop);
111
+ }
112
+ });
113
+ it('has correct accessibility attributes', function () {
114
+ var _renderComponent8 = renderComponent(),
115
+ getByText = _renderComponent8.getByText;
116
+ var actionsButton = getByText('Actions');
117
+ expect(actionsButton).toHaveAttribute('role', 'button');
118
+ expect(actionsButton).toHaveAttribute('tabIndex', '0');
119
+ });
120
+ });
121
+ describe('add category functionality', function () {
122
+ it('calls addCategory when add button is clicked', function () {
123
+ var _renderComponent9 = renderComponent(),
124
+ getByText = _renderComponent9.getByText;
125
+ _react2.fireEvent.click(getByText('Actions'));
126
+ _react2.fireEvent.click(getByText(/Add Category/i));
127
+ expect(addCategory).toHaveBeenCalledTimes(1);
128
+ });
129
+ it('closes popover after adding category', function () {
130
+ var _renderComponent0 = renderComponent(),
131
+ getByText = _renderComponent0.getByText;
132
+ _react2.fireEvent.click(getByText('Actions'));
133
+ _react2.fireEvent.click(getByText(/Add Category/i));
134
+ expect(addCategory).toHaveBeenCalled();
135
+ });
136
+ });
137
+ describe('delete category functionality', function () {
138
+ it('shows delete buttons for deletable categories', function () {
139
+ var categories = [{
140
+ label: 'Category A',
141
+ deletable: true
142
+ }, {
143
+ label: 'Category B',
144
+ deletable: true
145
+ }];
146
+ var _renderComponent1 = renderComponent({
147
+ categories: categories
148
+ }),
149
+ getByText = _renderComponent1.getByText;
150
+ _react2.fireEvent.click(getByText('Actions'));
151
+ expect(getByText(/Delete <Category A>/i)).toBeInTheDocument();
152
+ expect(getByText(/Delete <Category B>/i)).toBeInTheDocument();
153
+ });
154
+ it('does not show delete button for non-deletable categories', function () {
155
+ var categories = [{
156
+ label: 'Category A',
157
+ deletable: false
158
+ }];
159
+ var _renderComponent10 = renderComponent({
160
+ categories: categories
161
+ }),
162
+ getByText = _renderComponent10.getByText,
163
+ queryByText = _renderComponent10.queryByText;
164
+ _react2.fireEvent.click(getByText('Actions'));
165
+ expect(queryByText(/Delete <Category A>/i)).not.toBeInTheDocument();
166
+ });
167
+ it('does not show delete button for categories with correctness', function () {
168
+ var categories = [{
169
+ label: 'Category A',
170
+ deletable: true,
171
+ correctness: {
172
+ value: 'correct'
173
+ }
174
+ }];
175
+ var _renderComponent11 = renderComponent({
176
+ categories: categories
177
+ }),
178
+ getByText = _renderComponent11.getByText,
179
+ queryByText = _renderComponent11.queryByText;
180
+ _react2.fireEvent.click(getByText('Actions'));
181
+ expect(queryByText(/Delete <Category A>/i)).not.toBeInTheDocument();
182
+ });
183
+ it('calls deleteCategory with correct index', function () {
184
+ var categories = [{
185
+ label: 'Category A',
186
+ deletable: true
187
+ }, {
188
+ label: 'Category B',
189
+ deletable: true
190
+ }];
191
+ var _renderComponent12 = renderComponent({
192
+ categories: categories
193
+ }),
194
+ getByText = _renderComponent12.getByText;
195
+ _react2.fireEvent.click(getByText('Actions'));
196
+ _react2.fireEvent.click(getByText(/Delete <Category B>/i));
197
+ expect(deleteCategory).toHaveBeenCalledWith(1);
198
+ });
199
+ it('closes popover after deleting category', function () {
200
+ var categories = [{
201
+ label: 'Category A',
202
+ deletable: true
203
+ }];
204
+ var _renderComponent13 = renderComponent({
205
+ categories: categories
206
+ }),
207
+ getByText = _renderComponent13.getByText;
208
+ _react2.fireEvent.click(getByText('Actions'));
209
+ _react2.fireEvent.click(getByText(/Delete <Category A>/i));
210
+ expect(deleteCategory).toHaveBeenCalled();
211
+ });
212
+ it('shows "New Category" for categories without label', function () {
213
+ var categories = [{
214
+ label: '',
215
+ deletable: true
216
+ }];
217
+ var _renderComponent14 = renderComponent({
218
+ categories: categories
219
+ }),
220
+ getByText = _renderComponent14.getByText;
221
+ _react2.fireEvent.click(getByText('Actions'));
222
+ expect(getByText(/Delete <New Category>/i)).toBeInTheDocument();
223
+ });
224
+ it('handles deletion of multiple categories', function () {
225
+ var categories = [{
226
+ label: 'A',
227
+ deletable: true
228
+ }, {
229
+ label: 'B',
230
+ deletable: true
231
+ }, {
232
+ label: 'C',
233
+ deletable: true
234
+ }];
235
+ var _renderComponent15 = renderComponent({
236
+ categories: categories
237
+ }),
238
+ getByText = _renderComponent15.getByText;
239
+ _react2.fireEvent.click(getByText('Actions'));
240
+ expect(getByText(/Delete <A>/i)).toBeInTheDocument();
241
+ expect(getByText(/Delete <B>/i)).toBeInTheDocument();
242
+ expect(getByText(/Delete <C>/i)).toBeInTheDocument();
243
+ });
244
+ });
245
+ describe('componentWillUnmount', function () {
246
+ it('cleans up state on unmount', function () {
247
+ var _renderComponent16 = renderComponent(),
248
+ unmount = _renderComponent16.unmount,
249
+ getByText = _renderComponent16.getByText;
250
+ _react2.fireEvent.click(getByText('Actions'));
251
+ unmount();
252
+
253
+ // Should not throw error
254
+ expect(true).toBe(true);
255
+ });
256
+ });
257
+ describe('edge cases', function () {
258
+ it('handles empty categories array', function () {
259
+ var _renderComponent17 = renderComponent({
260
+ categories: []
261
+ }),
262
+ container = _renderComponent17.container;
263
+ expect(container).toBeInTheDocument();
264
+ });
265
+ it('handles undefined language', function () {
266
+ var _renderComponent18 = renderComponent({
267
+ language: undefined
268
+ }),
269
+ container = _renderComponent18.container;
270
+ expect(container).toBeInTheDocument();
271
+ });
272
+ it('handles mixed deletable and correctness states', function () {
273
+ var categories = [{
274
+ label: 'A',
275
+ deletable: true
276
+ }, {
277
+ label: 'B',
278
+ deletable: false
279
+ }, {
280
+ label: 'C',
281
+ deletable: true,
282
+ correctness: {
283
+ value: 'correct'
284
+ }
285
+ }, {
286
+ label: 'D',
287
+ deletable: true
288
+ }];
289
+ var _renderComponent19 = renderComponent({
290
+ categories: categories
291
+ }),
292
+ getByText = _renderComponent19.getByText;
293
+ _react2.fireEvent.click(getByText('Actions'));
294
+ expect(getByText(/Delete <A>/i)).toBeInTheDocument();
295
+ expect(getByText(/Delete <D>/i)).toBeInTheDocument();
296
+ });
297
+ it('handles categories with special characters in labels', function () {
298
+ var categories = [{
299
+ label: '<>&"\'',
300
+ deletable: true
301
+ }];
302
+ var _renderComponent20 = renderComponent({
303
+ categories: categories
304
+ }),
305
+ getByText = _renderComponent20.getByText;
306
+ _react2.fireEvent.click(getByText('Actions'));
307
+ expect(getByText(/Delete </i)).toBeInTheDocument();
308
+ });
309
+ it('handles very long category labels', function () {
310
+ var categories = [{
311
+ label: 'A'.repeat(100),
312
+ deletable: true
313
+ }];
314
+ var _renderComponent21 = renderComponent({
315
+ categories: categories
316
+ }),
317
+ container = _renderComponent21.container;
318
+ expect(container).toBeInTheDocument();
319
+ });
320
+ });
321
+ describe('popover positioning', function () {
322
+ it('has correct anchor origin', function () {
323
+ var _renderComponent22 = renderComponent(),
324
+ getByText = _renderComponent22.getByText,
325
+ queryByText = _renderComponent22.queryByText;
326
+ expect(queryByText(/\+ Add Category/i)).not.toBeInTheDocument();
327
+ _react2.fireEvent.click(getByText('Actions'));
328
+ expect(getByText(/\+ Add Category/i)).toBeInTheDocument();
329
+ });
330
+ });
331
+ });
332
+ //# sourceMappingURL=actions-button.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-button.test.js","names":["_react","_interopRequireDefault","require","_react2","_styles","_actionsButton","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","__esModule","translator","fn","key","translations","theme","beforeAll","createTheme","describe","addCategory","deleteCategory","beforeEach","clearAllMocks","renderComponent","extras","undefined","defaults","categories","language","props","render","createElement","ThemeProvider","ActionsButton","it","_renderComponent","container","expect","toBeInTheDocument","_renderComponent2","getByText","_renderComponent3","_renderComponent4","label","deletable","_renderComponent5","_renderComponent6","actionsButton","fireEvent","click","_renderComponent7","backdrop","document","querySelector","_renderComponent8","toHaveAttribute","_renderComponent9","toHaveBeenCalledTimes","_renderComponent0","toHaveBeenCalled","_renderComponent1","_renderComponent10","queryByText","not","correctness","value","_renderComponent11","_renderComponent12","toHaveBeenCalledWith","_renderComponent13","_renderComponent14","_renderComponent15","_renderComponent16","unmount","toBe","_renderComponent17","_renderComponent18","_renderComponent19","_renderComponent20","repeat","_renderComponent21","_renderComponent22"],"sources":["../../src/__tests__/actions-button.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render } from '@testing-library/react';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport { ActionsButton } from '../actions-button';\n\njest.mock('@pie-lib/translator', () => ({\n __esModule: true,\n default: {\n translator: {\n t: jest.fn((key) => {\n const translations = {\n 'charting.add': 'Add Category',\n 'charting.delete': 'Delete',\n 'charting.newLabel': 'New Category',\n };\n return translations[key] || key;\n }),\n },\n },\n}));\n\nlet theme;\n\nbeforeAll(() => {\n theme = createTheme();\n});\n\ndescribe('ActionsButton', () => {\n const addCategory = jest.fn();\n const deleteCategory = jest.fn();\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n const renderComponent = (extras = {}) => {\n const defaults = {\n addCategory,\n deleteCategory,\n categories: [],\n language: 'en',\n };\n const props = { ...defaults, ...extras };\n return render(\n <ThemeProvider theme={theme}>\n <ActionsButton {...props} />\n </ThemeProvider>,\n );\n };\n\n describe('rendering', () => {\n it('renders without crashing', () => {\n const { container } = renderComponent();\n expect(container).toBeInTheDocument();\n });\n\n it('renders Actions button', () => {\n const { getByText } = renderComponent();\n expect(getByText('Actions')).toBeInTheDocument();\n });\n\n it('renders with custom language', () => {\n const { container } = renderComponent({ language: 'es' });\n expect(container).toBeInTheDocument();\n });\n\n it('renders with empty categories', () => {\n const { container } = renderComponent({ categories: [] });\n expect(container).toBeInTheDocument();\n });\n\n it('renders with multiple categories', () => {\n const categories = [\n { label: 'A', deletable: true },\n { label: 'B', deletable: true },\n { label: 'C', deletable: false },\n ];\n const { container } = renderComponent({ categories });\n expect(container).toBeInTheDocument();\n });\n });\n\n describe('popover interactions', () => {\n it('opens popover when Actions button is clicked', () => {\n const { getByText } = renderComponent();\n const actionsButton = getByText('Actions');\n\n fireEvent.click(actionsButton);\n\n expect(getByText(/Add Category/i)).toBeInTheDocument();\n });\n\n it('closes popover when clicking outside', () => {\n const { getByText } = renderComponent();\n const actionsButton = getByText('Actions');\n\n fireEvent.click(actionsButton);\n expect(getByText(/Add Category/i)).toBeInTheDocument();\n\n const backdrop = document.querySelector('.MuiPopover-root');\n if (backdrop) {\n fireEvent.click(backdrop);\n }\n });\n\n it('has correct accessibility attributes', () => {\n const { getByText } = renderComponent();\n const actionsButton = getByText('Actions');\n\n expect(actionsButton).toHaveAttribute('role', 'button');\n expect(actionsButton).toHaveAttribute('tabIndex', '0');\n });\n });\n\n describe('add category functionality', () => {\n it('calls addCategory when add button is clicked', () => {\n const { getByText } = renderComponent();\n\n fireEvent.click(getByText('Actions'));\n fireEvent.click(getByText(/Add Category/i));\n\n expect(addCategory).toHaveBeenCalledTimes(1);\n });\n\n it('closes popover after adding category', () => {\n const { getByText } = renderComponent();\n\n fireEvent.click(getByText('Actions'));\n fireEvent.click(getByText(/Add Category/i));\n\n expect(addCategory).toHaveBeenCalled();\n });\n });\n\n describe('delete category functionality', () => {\n it('shows delete buttons for deletable categories', () => {\n const categories = [\n { label: 'Category A', deletable: true },\n { label: 'Category B', deletable: true },\n ];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/Delete <Category A>/i)).toBeInTheDocument();\n expect(getByText(/Delete <Category B>/i)).toBeInTheDocument();\n });\n\n it('does not show delete button for non-deletable categories', () => {\n const categories = [{ label: 'Category A', deletable: false }];\n const { getByText, queryByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(queryByText(/Delete <Category A>/i)).not.toBeInTheDocument();\n });\n\n it('does not show delete button for categories with correctness', () => {\n const categories = [{ label: 'Category A', deletable: true, correctness: { value: 'correct' } }];\n const { getByText, queryByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(queryByText(/Delete <Category A>/i)).not.toBeInTheDocument();\n });\n\n it('calls deleteCategory with correct index', () => {\n const categories = [\n { label: 'Category A', deletable: true },\n { label: 'Category B', deletable: true },\n ];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n fireEvent.click(getByText(/Delete <Category B>/i));\n\n expect(deleteCategory).toHaveBeenCalledWith(1);\n });\n\n it('closes popover after deleting category', () => {\n const categories = [{ label: 'Category A', deletable: true }];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n fireEvent.click(getByText(/Delete <Category A>/i));\n\n expect(deleteCategory).toHaveBeenCalled();\n });\n\n it('shows \"New Category\" for categories without label', () => {\n const categories = [{ label: '', deletable: true }];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/Delete <New Category>/i)).toBeInTheDocument();\n });\n\n it('handles deletion of multiple categories', () => {\n const categories = [\n { label: 'A', deletable: true },\n { label: 'B', deletable: true },\n { label: 'C', deletable: true },\n ];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/Delete <A>/i)).toBeInTheDocument();\n expect(getByText(/Delete <B>/i)).toBeInTheDocument();\n expect(getByText(/Delete <C>/i)).toBeInTheDocument();\n });\n });\n\n describe('componentWillUnmount', () => {\n it('cleans up state on unmount', () => {\n const { unmount, getByText } = renderComponent();\n\n fireEvent.click(getByText('Actions'));\n unmount();\n\n // Should not throw error\n expect(true).toBe(true);\n });\n });\n\n describe('edge cases', () => {\n it('handles empty categories array', () => {\n const { container } = renderComponent({ categories: [] });\n expect(container).toBeInTheDocument();\n });\n\n it('handles undefined language', () => {\n const { container } = renderComponent({ language: undefined });\n expect(container).toBeInTheDocument();\n });\n\n it('handles mixed deletable and correctness states', () => {\n const categories = [\n { label: 'A', deletable: true },\n { label: 'B', deletable: false },\n { label: 'C', deletable: true, correctness: { value: 'correct' } },\n { label: 'D', deletable: true },\n ];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/Delete <A>/i)).toBeInTheDocument();\n expect(getByText(/Delete <D>/i)).toBeInTheDocument();\n });\n\n it('handles categories with special characters in labels', () => {\n const categories = [{ label: '<>&\"\\'', deletable: true }];\n const { getByText } = renderComponent({ categories });\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/Delete </i)).toBeInTheDocument();\n });\n\n it('handles very long category labels', () => {\n const categories = [{ label: 'A'.repeat(100), deletable: true }];\n const { container } = renderComponent({ categories });\n expect(container).toBeInTheDocument();\n });\n });\n\n describe('popover positioning', () => {\n it('has correct anchor origin', () => {\n const { getByText, queryByText } = renderComponent();\n\n expect(queryByText(/\\+ Add Category/i)).not.toBeInTheDocument();\n\n fireEvent.click(getByText('Actions'));\n\n expect(getByText(/\\+ Add Category/i)).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}