@pie-lib/mask-markup 3.0.13 → 3.1.0-beta.1
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.
- package/CHANGELOG.md +0 -55
- package/lib/__tests__/drag-in-the-blank.test.js +129 -0
- package/lib/__tests__/drag-in-the-blank.test.js.map +1 -0
- package/lib/__tests__/index.test.js +39 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/mask.test.js +344 -0
- package/lib/__tests__/mask.test.js.map +1 -0
- package/lib/__tests__/serialization.test.js +44 -0
- package/lib/__tests__/serialization.test.js.map +1 -0
- package/lib/__tests__/utils.js +14 -0
- package/lib/__tests__/utils.js.map +1 -0
- package/lib/__tests__/with-mask.test.js +110 -0
- package/lib/__tests__/with-mask.test.js.map +1 -0
- package/lib/choices/__tests__/index.test.js +139 -0
- package/lib/choices/__tests__/index.test.js.map +1 -0
- package/lib/components/__tests__/blank.test.js +293 -0
- package/lib/components/__tests__/blank.test.js.map +1 -0
- package/lib/components/__tests__/correct-input.test.js +132 -0
- package/lib/components/__tests__/correct-input.test.js.map +1 -0
- package/lib/components/__tests__/dropdown.test.js +202 -0
- package/lib/components/__tests__/dropdown.test.js.map +1 -0
- package/lib/components/__tests__/input.test.js +129 -0
- package/lib/components/__tests__/input.test.js.map +1 -0
- package/package.json +6 -6
- package/LICENSE.md +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,61 +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
|
-
## [3.0.13](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.12...@pie-lib/mask-markup@3.0.13) (2026-07-31)
|
|
7
|
-
|
|
8
|
-
### Bug Fixes
|
|
9
|
-
|
|
10
|
-
- made sure the numbers near the fraction have the same font size as the fraction [PIE-755] ([1c6d035](https://github.com/pie-framework/pie-lib/commit/1c6d03581470303e750cb14e5edcd08ba2eaf617))
|
|
11
|
-
- **mask-markup:** handle measurment of choices with text and images PIE-679 ([48d9d69](https://github.com/pie-framework/pie-lib/commit/48d9d693ca2fceed6a6213106dbc541e4f29d01d))
|
|
12
|
-
|
|
13
|
-
## [3.0.12](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.11...@pie-lib/mask-markup@3.0.12) (2026-07-08)
|
|
14
|
-
|
|
15
|
-
### Bug Fixes
|
|
16
|
-
|
|
17
|
-
- **mask-markup:** update width and height calculations to include padding and border adjustments PIE-679 ([7142a76](https://github.com/pie-framework/pie-lib/commit/7142a7629da6db7fea621809a38d2cb280bc063f))
|
|
18
|
-
|
|
19
|
-
## [3.0.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.10...@pie-lib/mask-markup@3.0.11) (2026-07-01)
|
|
20
|
-
|
|
21
|
-
**Note:** Version bump only for package @pie-lib/mask-markup
|
|
22
|
-
|
|
23
|
-
## [3.0.10](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.9...@pie-lib/mask-markup@3.0.10) (2026-06-25)
|
|
24
|
-
|
|
25
|
-
### Bug Fixes
|
|
26
|
-
|
|
27
|
-
- **blank:** prevent ResizeObserver feedback loops and re-measure dimensions on visibility ([009cf1d](https://github.com/pie-framework/pie-lib/commit/009cf1d56af3f5f436d2f09b33e4d6d0bfad8609))
|
|
28
|
-
|
|
29
|
-
## [3.0.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.8...@pie-lib/mask-markup@3.0.9) (2026-06-19)
|
|
30
|
-
|
|
31
|
-
### Bug Fixes
|
|
32
|
-
|
|
33
|
-
- **mask-markup/choice:** add fallback dimensions for dragging state in Choice component PIE-693 ([87b7782](https://github.com/pie-framework/pie-lib/commit/87b77824785bf7485b1b3e986749fc877224d154))
|
|
34
|
-
|
|
35
|
-
## [3.0.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.7...@pie-lib/mask-markup@3.0.8) (2026-06-17)
|
|
36
|
-
|
|
37
|
-
**Note:** Version bump only for package @pie-lib/mask-markup
|
|
38
|
-
|
|
39
|
-
## [3.0.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.6...@pie-lib/mask-markup@3.0.7) (2026-06-12)
|
|
40
|
-
|
|
41
|
-
### Bug Fixes
|
|
42
|
-
|
|
43
|
-
- correct @emotion/style typo to @emotion/styled in package deps PIE-678 ([d529ac7](https://github.com/pie-framework/pie-lib/commit/d529ac7bc3dfa94d8037688452d4c70c66f2590b))
|
|
44
|
-
|
|
45
|
-
## [3.0.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.5...@pie-lib/mask-markup@3.0.6) (2026-06-03)
|
|
46
|
-
|
|
47
|
-
### Bug Fixes
|
|
48
|
-
|
|
49
|
-
- render math when the correct value changes [PIE-600] ([38a0024](https://github.com/pie-framework/pie-lib/commit/38a002426ae495e98c2fd1355f7cb83069a7dcdc))
|
|
50
|
-
|
|
51
|
-
## [3.0.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.4...@pie-lib/mask-markup@3.0.5) (2026-06-01)
|
|
52
|
-
|
|
53
|
-
### Bug Fixes
|
|
54
|
-
|
|
55
|
-
- made sure selected item in dropdown is focused first when the menu is opened [PIE-438] ([a1cdc68](https://github.com/pie-framework/pie-lib/commit/a1cdc686deec2991e543393b17b98181b074d324))
|
|
56
|
-
|
|
57
|
-
## [3.0.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.3...@pie-lib/mask-markup@3.0.4) (2026-05-21)
|
|
58
|
-
|
|
59
|
-
**Note:** Version bump only for package @pie-lib/mask-markup
|
|
60
|
-
|
|
61
6
|
## [3.0.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/mask-markup@3.0.2...@pie-lib/mask-markup@3.0.3) (2026-05-15)
|
|
62
7
|
|
|
63
8
|
### Bug Fixes
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
+
var React = _interopRequireWildcard(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _dragInTheBlank = _interopRequireDefault(require("../drag-in-the-blank"));
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
10
|
+
var markup = "<div>\n <img src=\"https://image.shutterstock.com/image-vector/cow-jumped-over-moon-traditional-260nw-1152899330.jpg\"></img>\n <h5>Hey Diddle Diddle <i>by ?</i></h5>\n <p>1: Hey, diddle, diddle,</p>\n <p>2: The cat and the fiddle,</p>\n <p>3: The cow {{0}} over the moon;</p>\n <p>4: The little dog {{1}},</p>\n <p>5: To see such sport,</p>\n <p>6: And the dish ran away with the {{2}}.</p>\n</div>";
|
|
11
|
+
var choice = function choice(v, id) {
|
|
12
|
+
return {
|
|
13
|
+
value: v,
|
|
14
|
+
id: id
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// Mock DragProvider and DragDroppablePlaceholder to avoid DndContext requirement
|
|
19
|
+
jest.mock('@pie-lib/drag', function () {
|
|
20
|
+
return {
|
|
21
|
+
DragProvider: function DragProvider(_ref) {
|
|
22
|
+
var children = _ref.children,
|
|
23
|
+
onDragStart = _ref.onDragStart,
|
|
24
|
+
onDragEnd = _ref.onDragEnd;
|
|
25
|
+
// Simple wrapper that doesn't require DndContext
|
|
26
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
"data-testid": "drag-provider"
|
|
28
|
+
}, children);
|
|
29
|
+
},
|
|
30
|
+
DragDroppablePlaceholder: function DragDroppablePlaceholder(_ref2) {
|
|
31
|
+
var children = _ref2.children,
|
|
32
|
+
disabled = _ref2.disabled,
|
|
33
|
+
instanceId = _ref2.instanceId;
|
|
34
|
+
// Simple wrapper that doesn't require useDroppable
|
|
35
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
36
|
+
"data-testid": "drag-droppable-placeholder"
|
|
37
|
+
}, children);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Mock @dnd-kit/core components and hooks used by DragInTheBlank and child components
|
|
43
|
+
jest.mock('@dnd-kit/core', function () {
|
|
44
|
+
return {
|
|
45
|
+
DragOverlay: function DragOverlay(_ref3) {
|
|
46
|
+
var children = _ref3.children;
|
|
47
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
48
|
+
"data-testid": "drag-overlay"
|
|
49
|
+
}, children);
|
|
50
|
+
},
|
|
51
|
+
closestCenter: jest.fn(),
|
|
52
|
+
useDraggable: jest.fn(function () {
|
|
53
|
+
return {
|
|
54
|
+
attributes: {},
|
|
55
|
+
listeners: {},
|
|
56
|
+
setNodeRef: jest.fn(),
|
|
57
|
+
transform: null,
|
|
58
|
+
isDragging: false
|
|
59
|
+
};
|
|
60
|
+
}),
|
|
61
|
+
useDroppable: jest.fn(function () {
|
|
62
|
+
return {
|
|
63
|
+
setNodeRef: jest.fn(),
|
|
64
|
+
isOver: false,
|
|
65
|
+
active: null
|
|
66
|
+
};
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
jest.mock('@dnd-kit/utilities', function () {
|
|
71
|
+
return {
|
|
72
|
+
CSS: {
|
|
73
|
+
Translate: {
|
|
74
|
+
toString: jest.fn(function () {
|
|
75
|
+
return 'translate3d(0, 0, 0)';
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
describe('DragInTheBlank', function () {
|
|
82
|
+
var defaultProps = {
|
|
83
|
+
disabled: false,
|
|
84
|
+
feedback: {},
|
|
85
|
+
markup: markup,
|
|
86
|
+
choices: [choice('Jumped', '0'), choice('Laughed', '1'), choice('Spoon', '2'), choice('Fork', '3'), choice('Bumped', '4'), choice('Smiled', '5')],
|
|
87
|
+
value: {
|
|
88
|
+
0: undefined
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
describe('render', function () {
|
|
92
|
+
it('renders correctly with default props', function () {
|
|
93
|
+
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_dragInTheBlank["default"], defaultProps)),
|
|
94
|
+
container = _render.container;
|
|
95
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
96
|
+
// Check that markup content is rendered
|
|
97
|
+
expect(_react2.screen.getByText(/Hey Diddle Diddle/)).toBeInTheDocument();
|
|
98
|
+
expect(_react2.screen.getByText(/Hey, diddle, diddle,/)).toBeInTheDocument();
|
|
99
|
+
});
|
|
100
|
+
it('renders correctly with disabled prop as true', function () {
|
|
101
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_dragInTheBlank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
102
|
+
disabled: true
|
|
103
|
+
}))),
|
|
104
|
+
container = _render2.container;
|
|
105
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
106
|
+
});
|
|
107
|
+
it('renders correctly with feedback', function () {
|
|
108
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_dragInTheBlank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
109
|
+
feedback: {
|
|
110
|
+
0: {
|
|
111
|
+
value: 'Jumped',
|
|
112
|
+
correct: 'Jumped'
|
|
113
|
+
},
|
|
114
|
+
1: {
|
|
115
|
+
value: 'Laughed',
|
|
116
|
+
correct: 'Laughed'
|
|
117
|
+
},
|
|
118
|
+
2: {
|
|
119
|
+
value: 'Spoon',
|
|
120
|
+
correct: 'Spoon'
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}))),
|
|
124
|
+
container = _render3.container;
|
|
125
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=drag-in-the-blank.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-in-the-blank.test.js","names":["React","_interopRequireWildcard","require","_react2","_dragInTheBlank","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","markup","choice","v","id","value","jest","mock","DragProvider","_ref","children","onDragStart","onDragEnd","createElement","DragDroppablePlaceholder","_ref2","disabled","instanceId","DragOverlay","_ref3","closestCenter","fn","useDraggable","attributes","listeners","setNodeRef","transform","isDragging","useDroppable","isOver","active","CSS","Translate","toString","describe","defaultProps","feedback","choices","undefined","it","_render","render","container","expect","firstChild","toBeInTheDocument","screen","getByText","_render2","_extends2","_render3","correct"],"sources":["../../src/__tests__/drag-in-the-blank.test.js"],"sourcesContent":["import * as React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport DragInTheBlank from '../drag-in-the-blank';\n\nconst markup = `<div>\n <img src=\"https://image.shutterstock.com/image-vector/cow-jumped-over-moon-traditional-260nw-1152899330.jpg\"></img>\n <h5>Hey Diddle Diddle <i>by ?</i></h5>\n <p>1: Hey, diddle, diddle,</p>\n <p>2: The cat and the fiddle,</p>\n <p>3: The cow {{0}} over the moon;</p>\n <p>4: The little dog {{1}},</p>\n <p>5: To see such sport,</p>\n <p>6: And the dish ran away with the {{2}}.</p>\n</div>`;\nconst choice = (v, id) => ({ value: v, id });\n\n// Mock DragProvider and DragDroppablePlaceholder to avoid DndContext requirement\njest.mock('@pie-lib/drag', () => ({\n DragProvider: ({ children, onDragStart, onDragEnd }) => {\n // Simple wrapper that doesn't require DndContext\n return <div data-testid=\"drag-provider\">{children}</div>;\n },\n DragDroppablePlaceholder: ({ children, disabled, instanceId }) => {\n // Simple wrapper that doesn't require useDroppable\n return <div data-testid=\"drag-droppable-placeholder\">{children}</div>;\n },\n}));\n\n// Mock @dnd-kit/core components and hooks used by DragInTheBlank and child components\njest.mock('@dnd-kit/core', () => ({\n DragOverlay: ({ children }) => <div data-testid=\"drag-overlay\">{children}</div>,\n closestCenter: jest.fn(),\n useDraggable: jest.fn(() => ({\n attributes: {},\n listeners: {},\n setNodeRef: jest.fn(),\n transform: null,\n isDragging: false,\n })),\n useDroppable: jest.fn(() => ({\n setNodeRef: jest.fn(),\n isOver: false,\n active: null,\n })),\n}));\n\njest.mock('@dnd-kit/utilities', () => ({\n CSS: {\n Translate: {\n toString: jest.fn(() => 'translate3d(0, 0, 0)'),\n },\n },\n}));\n\ndescribe('DragInTheBlank', () => {\n const defaultProps = {\n disabled: false,\n feedback: {},\n markup,\n choices: [\n choice('Jumped', '0'),\n choice('Laughed', '1'),\n choice('Spoon', '2'),\n choice('Fork', '3'),\n choice('Bumped', '4'),\n choice('Smiled', '5'),\n ],\n\n value: {\n 0: undefined,\n },\n };\n\n describe('render', () => {\n it('renders correctly with default props', () => {\n const { container } = render(<DragInTheBlank {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n // Check that markup content is rendered\n expect(screen.getByText(/Hey Diddle Diddle/)).toBeInTheDocument();\n expect(screen.getByText(/Hey, diddle, diddle,/)).toBeInTheDocument();\n });\n\n it('renders correctly with disabled prop as true', () => {\n const { container } = render(<DragInTheBlank {...defaultProps} disabled={true} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders correctly with feedback', () => {\n const { container } = render(\n <DragInTheBlank\n {...defaultProps}\n feedback={{\n 0: {\n value: 'Jumped',\n correct: 'Jumped',\n },\n 1: {\n value: 'Laughed',\n correct: 'Laughed',\n },\n 2: {\n value: 'Spoon',\n correct: 'Spoon',\n },\n }}\n />,\n );\n expect(container.firstChild).toBeInTheDocument();\n });\n });\n});\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAkD,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,wBAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAElD,IAAMmB,MAAM,uZASL;AACP,IAAMC,MAAM,GAAG,SAATA,MAAMA,CAAIC,CAAC,EAAEC,EAAE;EAAA,OAAM;IAAEC,KAAK,EAAEF,CAAC;IAAEC,EAAE,EAAFA;EAAG,CAAC;AAAA,CAAC;;AAE5C;AACAE,IAAI,CAACC,IAAI,CAAC,eAAe,EAAE;EAAA,OAAO;IAChCC,YAAY,EAAE,SAAdA,YAAYA,CAAAC,IAAA,EAA4C;MAAA,IAAvCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;QAAEC,WAAW,GAAAF,IAAA,CAAXE,WAAW;QAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS;MAC/C;MACA,oBAAOrC,KAAA,CAAAsC,aAAA;QAAK,eAAY;MAAe,GAAEH,QAAc,CAAC;IAC1D,CAAC;IACDI,wBAAwB,EAAE,SAA1BA,wBAAwBA,CAAAC,KAAA,EAA0C;MAAA,IAArCL,QAAQ,GAAAK,KAAA,CAARL,QAAQ;QAAEM,QAAQ,GAAAD,KAAA,CAARC,QAAQ;QAAEC,UAAU,GAAAF,KAAA,CAAVE,UAAU;MACzD;MACA,oBAAO1C,KAAA,CAAAsC,aAAA;QAAK,eAAY;MAA4B,GAAEH,QAAc,CAAC;IACvE;EACF,CAAC;AAAA,CAAC,CAAC;;AAEH;AACAJ,IAAI,CAACC,IAAI,CAAC,eAAe,EAAE;EAAA,OAAO;IAChCW,WAAW,EAAE,SAAbA,WAAWA,CAAAC,KAAA;MAAA,IAAKT,QAAQ,GAAAS,KAAA,CAART,QAAQ;MAAA,oBAAOnC,KAAA,CAAAsC,aAAA;QAAK,eAAY;MAAc,GAAEH,QAAc,CAAC;IAAA;IAC/EU,aAAa,EAAEd,IAAI,CAACe,EAAE,CAAC,CAAC;IACxBC,YAAY,EAAEhB,IAAI,CAACe,EAAE,CAAC;MAAA,OAAO;QAC3BE,UAAU,EAAE,CAAC,CAAC;QACdC,SAAS,EAAE,CAAC,CAAC;QACbC,UAAU,EAAEnB,IAAI,CAACe,EAAE,CAAC,CAAC;QACrBK,SAAS,EAAE,IAAI;QACfC,UAAU,EAAE;MACd,CAAC;IAAA,CAAC,CAAC;IACHC,YAAY,EAAEtB,IAAI,CAACe,EAAE,CAAC;MAAA,OAAO;QAC3BI,UAAU,EAAEnB,IAAI,CAACe,EAAE,CAAC,CAAC;QACrBQ,MAAM,EAAE,KAAK;QACbC,MAAM,EAAE;MACV,CAAC;IAAA,CAAC;EACJ,CAAC;AAAA,CAAC,CAAC;AAEHxB,IAAI,CAACC,IAAI,CAAC,oBAAoB,EAAE;EAAA,OAAO;IACrCwB,GAAG,EAAE;MACHC,SAAS,EAAE;QACTC,QAAQ,EAAE3B,IAAI,CAACe,EAAE,CAAC;UAAA,OAAM,sBAAsB;QAAA;MAChD;IACF;EACF,CAAC;AAAA,CAAC,CAAC;AAEHa,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC/B,IAAMC,YAAY,GAAG;IACnBnB,QAAQ,EAAE,KAAK;IACfoB,QAAQ,EAAE,CAAC,CAAC;IACZnC,MAAM,EAANA,MAAM;IACNoC,OAAO,EAAE,CACPnC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACrBA,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EACtBA,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EACpBA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnBA,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACrBA,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CACtB;IAEDG,KAAK,EAAE;MACL,CAAC,EAAEiC;IACL;EACF,CAAC;EAEDJ,QAAQ,CAAC,QAAQ,EAAE,YAAM;IACvBK,EAAE,CAAC,sCAAsC,EAAE,YAAM;MAC/C,IAAAC,OAAA,GAAsB,IAAAC,cAAM,eAAClE,KAAA,CAAAsC,aAAA,CAAClC,eAAA,WAAc,EAAKwD,YAAe,CAAC,CAAC;QAA1DO,SAAS,GAAAF,OAAA,CAATE,SAAS;MACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAChD;MACAF,MAAM,CAACG,cAAM,CAACC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;MACjEF,MAAM,CAACG,cAAM,CAACC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAACF,iBAAiB,CAAC,CAAC;IACtE,CAAC,CAAC;IAEFN,EAAE,CAAC,8CAA8C,EAAE,YAAM;MACvD,IAAAS,QAAA,GAAsB,IAAAP,cAAM,eAAClE,KAAA,CAAAsC,aAAA,CAAClC,eAAA,WAAc,MAAAsE,SAAA,iBAAKd,YAAY;UAAEnB,QAAQ,EAAE;QAAK,EAAE,CAAC,CAAC;QAA1E0B,SAAS,GAAAM,QAAA,CAATN,SAAS;MACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC;IAEFN,EAAE,CAAC,iCAAiC,EAAE,YAAM;MAC1C,IAAAW,QAAA,GAAsB,IAAAT,cAAM,eAC1BlE,KAAA,CAAAsC,aAAA,CAAClC,eAAA,WAAc,MAAAsE,SAAA,iBACTd,YAAY;UAChBC,QAAQ,EAAE;YACR,CAAC,EAAE;cACD/B,KAAK,EAAE,QAAQ;cACf8C,OAAO,EAAE;YACX,CAAC;YACD,CAAC,EAAE;cACD9C,KAAK,EAAE,SAAS;cAChB8C,OAAO,EAAE;YACX,CAAC;YACD,CAAC,EAAE;cACD9C,KAAK,EAAE,OAAO;cACd8C,OAAO,EAAE;YACX;UACF;QAAE,EACH,CACH,CAAC;QAlBOT,SAAS,GAAAQ,QAAA,CAATR,SAAS;MAmBjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _componentize = _interopRequireDefault(require("../componentize"));
|
|
5
|
+
var _serialization = require("../serialization");
|
|
6
|
+
describe('index', function () {
|
|
7
|
+
describe('componentize', function () {
|
|
8
|
+
it('should return an array with the appropriate markup', function () {
|
|
9
|
+
var dropDownMarkup = (0, _componentize["default"])('{{0}} foo {{1}}', 'dropdown');
|
|
10
|
+
expect(dropDownMarkup).toEqual({
|
|
11
|
+
markup: '<span data-component="dropdown" data-id="0"></span> foo <span data-component="dropdown" data-id="1"></span>'
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('serialization', function () {
|
|
16
|
+
it('should have default node a span', function () {
|
|
17
|
+
expect((0, _serialization.deserialize)('something')).toEqual(expect.objectContaining({
|
|
18
|
+
object: 'value',
|
|
19
|
+
document: {
|
|
20
|
+
object: 'document',
|
|
21
|
+
data: {},
|
|
22
|
+
nodes: [{
|
|
23
|
+
object: 'block',
|
|
24
|
+
data: {},
|
|
25
|
+
isVoid: false,
|
|
26
|
+
type: 'span',
|
|
27
|
+
nodes: [{
|
|
28
|
+
object: 'text',
|
|
29
|
+
leaves: [{
|
|
30
|
+
text: 'something'
|
|
31
|
+
}]
|
|
32
|
+
}]
|
|
33
|
+
}]
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_componentize","_interopRequireDefault","require","_serialization","describe","it","dropDownMarkup","componentize","expect","toEqual","markup","deserialize","objectContaining","object","document","data","nodes","isVoid","type","leaves","text"],"sources":["../../src/__tests__/index.test.js"],"sourcesContent":["import componentize from '../componentize';\nimport { deserialize } from '../serialization';\n\ndescribe('index', () => {\n describe('componentize', () => {\n it('should return an array with the appropriate markup', () => {\n const dropDownMarkup = componentize('{{0}} foo {{1}}', 'dropdown');\n\n expect(dropDownMarkup).toEqual({\n markup:\n '<span data-component=\"dropdown\" data-id=\"0\"></span> foo <span data-component=\"dropdown\" data-id=\"1\"></span>',\n });\n });\n });\n\n describe('serialization', () => {\n it('should have default node a span', () => {\n expect(deserialize('something')).toEqual(\n expect.objectContaining({\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: [\n {\n object: 'block',\n data: {},\n isVoid: false,\n type: 'span',\n nodes: [{ object: 'text', leaves: [{ text: 'something' }] }],\n },\n ],\n },\n }),\n );\n });\n });\n});\n"],"mappings":";;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEAE,QAAQ,CAAC,OAAO,EAAE,YAAM;EACtBA,QAAQ,CAAC,cAAc,EAAE,YAAM;IAC7BC,EAAE,CAAC,oDAAoD,EAAE,YAAM;MAC7D,IAAMC,cAAc,GAAG,IAAAC,wBAAY,EAAC,iBAAiB,EAAE,UAAU,CAAC;MAElEC,MAAM,CAACF,cAAc,CAAC,CAACG,OAAO,CAAC;QAC7BC,MAAM,EACJ;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFN,QAAQ,CAAC,eAAe,EAAE,YAAM;IAC9BC,EAAE,CAAC,iCAAiC,EAAE,YAAM;MAC1CG,MAAM,CAAC,IAAAG,0BAAW,EAAC,WAAW,CAAC,CAAC,CAACF,OAAO,CACtCD,MAAM,CAACI,gBAAgB,CAAC;QACtBC,MAAM,EAAE,OAAO;QACfC,QAAQ,EAAE;UACRD,MAAM,EAAE,UAAU;UAClBE,IAAI,EAAE,CAAC,CAAC;UACRC,KAAK,EAAE,CACL;YACEH,MAAM,EAAE,OAAO;YACfE,IAAI,EAAE,CAAC,CAAC;YACRE,MAAM,EAAE,KAAK;YACbC,IAAI,EAAE,MAAM;YACZF,KAAK,EAAE,CAAC;cAAEH,MAAM,EAAE,MAAM;cAAEM,MAAM,EAAE,CAAC;gBAAEC,IAAI,EAAE;cAAY,CAAC;YAAE,CAAC;UAC7D,CAAC;QAEL;MACF,CAAC,CACH,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _react2 = require("@testing-library/react");
|
|
9
|
+
var _mask = _interopRequireDefault(require("../mask"));
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
describe('Mask', function () {
|
|
14
|
+
// Don't mock renderChildren - let the component render naturally
|
|
15
|
+
var onChange = jest.fn();
|
|
16
|
+
var defaultProps = {
|
|
17
|
+
onChange: onChange,
|
|
18
|
+
layout: {
|
|
19
|
+
nodes: [{
|
|
20
|
+
object: 'text',
|
|
21
|
+
leaves: [{
|
|
22
|
+
text: 'Foo'
|
|
23
|
+
}]
|
|
24
|
+
}]
|
|
25
|
+
},
|
|
26
|
+
value: {}
|
|
27
|
+
};
|
|
28
|
+
beforeEach(function () {
|
|
29
|
+
onChange.mockClear();
|
|
30
|
+
});
|
|
31
|
+
describe('rendering', function () {
|
|
32
|
+
it('renders with default props', function () {
|
|
33
|
+
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], defaultProps)),
|
|
34
|
+
container = _render.container;
|
|
35
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
36
|
+
});
|
|
37
|
+
it('renders text content', function () {
|
|
38
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], defaultProps));
|
|
39
|
+
expect(_react2.screen.getByText('Foo')).toBeInTheDocument();
|
|
40
|
+
});
|
|
41
|
+
it('renders a paragraph element', function () {
|
|
42
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
43
|
+
layout: {
|
|
44
|
+
nodes: [{
|
|
45
|
+
type: 'p',
|
|
46
|
+
nodes: [{
|
|
47
|
+
object: 'text',
|
|
48
|
+
leaves: [{
|
|
49
|
+
text: 'Foo'
|
|
50
|
+
}]
|
|
51
|
+
}]
|
|
52
|
+
}]
|
|
53
|
+
}
|
|
54
|
+
}))),
|
|
55
|
+
container = _render2.container;
|
|
56
|
+
|
|
57
|
+
// Paragraph is rendered as a styled div, not a <p> tag
|
|
58
|
+
expect(_react2.screen.getByText('Foo')).toBeInTheDocument();
|
|
59
|
+
});
|
|
60
|
+
it('renders nested div and paragraph', function () {
|
|
61
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
62
|
+
layout: {
|
|
63
|
+
nodes: [{
|
|
64
|
+
type: 'div',
|
|
65
|
+
data: {
|
|
66
|
+
attributes: {}
|
|
67
|
+
},
|
|
68
|
+
nodes: [{
|
|
69
|
+
type: 'p',
|
|
70
|
+
data: {
|
|
71
|
+
attributes: {}
|
|
72
|
+
},
|
|
73
|
+
nodes: [{
|
|
74
|
+
object: 'text',
|
|
75
|
+
leaves: [{
|
|
76
|
+
text: 'Foo'
|
|
77
|
+
}]
|
|
78
|
+
}]
|
|
79
|
+
}]
|
|
80
|
+
}]
|
|
81
|
+
}
|
|
82
|
+
}))),
|
|
83
|
+
container = _render3.container;
|
|
84
|
+
expect(container.querySelector('div')).toBeInTheDocument();
|
|
85
|
+
// Paragraph is rendered as a styled div, not a <p> tag
|
|
86
|
+
expect(_react2.screen.getByText('Foo')).toBeInTheDocument();
|
|
87
|
+
});
|
|
88
|
+
it('renders text with italic marks', function () {
|
|
89
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
90
|
+
layout: {
|
|
91
|
+
nodes: [{
|
|
92
|
+
leaves: [{
|
|
93
|
+
text: 'Foo '
|
|
94
|
+
}],
|
|
95
|
+
object: 'text'
|
|
96
|
+
}, {
|
|
97
|
+
leaves: [{
|
|
98
|
+
marks: [{
|
|
99
|
+
data: undefined,
|
|
100
|
+
type: 'italic'
|
|
101
|
+
}],
|
|
102
|
+
text: 'x'
|
|
103
|
+
}],
|
|
104
|
+
object: 'text'
|
|
105
|
+
}, {
|
|
106
|
+
leaves: [{
|
|
107
|
+
text: ' bar'
|
|
108
|
+
}],
|
|
109
|
+
object: 'text'
|
|
110
|
+
}],
|
|
111
|
+
object: 'block',
|
|
112
|
+
type: 'div'
|
|
113
|
+
}
|
|
114
|
+
}))),
|
|
115
|
+
container = _render4.container;
|
|
116
|
+
|
|
117
|
+
// Text "Foo " is split with spaces, use regex
|
|
118
|
+
expect(_react2.screen.getByText(/Foo/)).toBeInTheDocument();
|
|
119
|
+
expect(_react2.screen.getByText('x')).toBeInTheDocument();
|
|
120
|
+
expect(_react2.screen.getByText(/bar/)).toBeInTheDocument();
|
|
121
|
+
// Check for italic/em element
|
|
122
|
+
var em = container.querySelector('em, i');
|
|
123
|
+
expect(em).toBeInTheDocument();
|
|
124
|
+
expect(em.textContent).toBe('x');
|
|
125
|
+
});
|
|
126
|
+
it('renders tbody without extra space', function () {
|
|
127
|
+
var da = function da() {
|
|
128
|
+
return {
|
|
129
|
+
data: {
|
|
130
|
+
attributes: {}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
135
|
+
layout: {
|
|
136
|
+
nodes: [_objectSpread(_objectSpread({
|
|
137
|
+
type: 'table'
|
|
138
|
+
}, da()), {}, {
|
|
139
|
+
nodes: [_objectSpread(_objectSpread({
|
|
140
|
+
type: 'tbody'
|
|
141
|
+
}, da()), {}, {
|
|
142
|
+
nodes: [{
|
|
143
|
+
object: 'text',
|
|
144
|
+
leaves: [{
|
|
145
|
+
text: ' '
|
|
146
|
+
}]
|
|
147
|
+
}, _objectSpread(_objectSpread({
|
|
148
|
+
type: 'tr'
|
|
149
|
+
}, da()), {}, {
|
|
150
|
+
nodes: []
|
|
151
|
+
})]
|
|
152
|
+
})]
|
|
153
|
+
})]
|
|
154
|
+
}
|
|
155
|
+
}))),
|
|
156
|
+
container = _render5.container;
|
|
157
|
+
expect(container.querySelector('table')).toBeInTheDocument();
|
|
158
|
+
expect(container.querySelector('tbody')).toBeInTheDocument();
|
|
159
|
+
expect(container.querySelector('tr')).toBeInTheDocument();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('spacer rendering for DnD components', function () {
|
|
163
|
+
it('adds spacers before and after DnD blank components', function () {
|
|
164
|
+
var mockRenderChildren = jest.fn(function (n) {
|
|
165
|
+
var _n$data;
|
|
166
|
+
if (((_n$data = n.data) === null || _n$data === void 0 || (_n$data = _n$data.dataset) === null || _n$data === void 0 ? void 0 : _n$data.component) === 'blank') {
|
|
167
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
168
|
+
"data-testid": "blank-component"
|
|
169
|
+
}, "Blank");
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
});
|
|
173
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
174
|
+
renderChildren: mockRenderChildren,
|
|
175
|
+
layout: {
|
|
176
|
+
nodes: [{
|
|
177
|
+
type: 'div',
|
|
178
|
+
data: {
|
|
179
|
+
dataset: {
|
|
180
|
+
component: 'blank'
|
|
181
|
+
},
|
|
182
|
+
attributes: {}
|
|
183
|
+
},
|
|
184
|
+
nodes: []
|
|
185
|
+
}]
|
|
186
|
+
}
|
|
187
|
+
}))),
|
|
188
|
+
container = _render6.container;
|
|
189
|
+
|
|
190
|
+
// Check that renderChildren was called and spacers are present
|
|
191
|
+
// Count all children in the container - should be: spacer + blank + spacer = 3 elements
|
|
192
|
+
var maskContainer = container.firstChild;
|
|
193
|
+
expect(maskContainer.childNodes.length).toBe(3);
|
|
194
|
+
expect(_react2.screen.getByTestId('blank-component')).toBeInTheDocument();
|
|
195
|
+
});
|
|
196
|
+
it('does not add spacers for non-DnD components', function () {
|
|
197
|
+
var mockRenderChildren = jest.fn(function (n) {
|
|
198
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
199
|
+
"data-testid": "regular-component"
|
|
200
|
+
}, "Regular");
|
|
201
|
+
});
|
|
202
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
203
|
+
renderChildren: mockRenderChildren,
|
|
204
|
+
layout: {
|
|
205
|
+
nodes: [{
|
|
206
|
+
type: 'div',
|
|
207
|
+
data: {
|
|
208
|
+
attributes: {}
|
|
209
|
+
},
|
|
210
|
+
nodes: []
|
|
211
|
+
}]
|
|
212
|
+
}
|
|
213
|
+
}))),
|
|
214
|
+
container = _render7.container;
|
|
215
|
+
|
|
216
|
+
// Should not have spacers - only the regular component
|
|
217
|
+
var maskContainer = container.firstChild;
|
|
218
|
+
expect(maskContainer.childNodes.length).toBe(1);
|
|
219
|
+
expect(_react2.screen.getByTestId('regular-component')).toBeInTheDocument();
|
|
220
|
+
});
|
|
221
|
+
it('adds spacers regardless of parent node type', function () {
|
|
222
|
+
var mockRenderChildren = jest.fn(function (n) {
|
|
223
|
+
var _n$data2;
|
|
224
|
+
if (((_n$data2 = n.data) === null || _n$data2 === void 0 || (_n$data2 = _n$data2.dataset) === null || _n$data2 === void 0 ? void 0 : _n$data2.component) === 'blank') {
|
|
225
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
226
|
+
"data-testid": "blank-in-td"
|
|
227
|
+
}, "Blank in TD");
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
});
|
|
231
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
232
|
+
renderChildren: mockRenderChildren,
|
|
233
|
+
elementType: "drag-in-the-blank",
|
|
234
|
+
layout: {
|
|
235
|
+
nodes: [{
|
|
236
|
+
type: 'table',
|
|
237
|
+
data: {
|
|
238
|
+
attributes: {}
|
|
239
|
+
},
|
|
240
|
+
nodes: [{
|
|
241
|
+
type: 'tbody',
|
|
242
|
+
data: {
|
|
243
|
+
attributes: {}
|
|
244
|
+
},
|
|
245
|
+
nodes: [{
|
|
246
|
+
type: 'tr',
|
|
247
|
+
data: {
|
|
248
|
+
attributes: {}
|
|
249
|
+
},
|
|
250
|
+
nodes: [{
|
|
251
|
+
type: 'td',
|
|
252
|
+
data: {
|
|
253
|
+
attributes: {}
|
|
254
|
+
},
|
|
255
|
+
nodes: [{
|
|
256
|
+
type: 'div',
|
|
257
|
+
data: {
|
|
258
|
+
dataset: {
|
|
259
|
+
component: 'blank'
|
|
260
|
+
},
|
|
261
|
+
attributes: {}
|
|
262
|
+
},
|
|
263
|
+
nodes: []
|
|
264
|
+
}]
|
|
265
|
+
}]
|
|
266
|
+
}]
|
|
267
|
+
}]
|
|
268
|
+
}]
|
|
269
|
+
}
|
|
270
|
+
}))),
|
|
271
|
+
container = _render8.container;
|
|
272
|
+
|
|
273
|
+
// Should have spacers even inside td element
|
|
274
|
+
var td = container.querySelector('td');
|
|
275
|
+
expect(td.childNodes.length).toBe(3); // spacer + blank + spacer
|
|
276
|
+
expect(_react2.screen.getByTestId('blank-in-td')).toBeInTheDocument();
|
|
277
|
+
});
|
|
278
|
+
it('does not add spacers for text content', function () {
|
|
279
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
280
|
+
elementType: "drag-in-the-blank",
|
|
281
|
+
layout: {
|
|
282
|
+
nodes: [{
|
|
283
|
+
object: 'text',
|
|
284
|
+
leaves: [{
|
|
285
|
+
text: 'Some text'
|
|
286
|
+
}]
|
|
287
|
+
}]
|
|
288
|
+
}
|
|
289
|
+
}))),
|
|
290
|
+
container = _render9.container;
|
|
291
|
+
|
|
292
|
+
// Should not have spacers for plain text - just text node
|
|
293
|
+
var maskContainer = container.firstChild;
|
|
294
|
+
expect(maskContainer.childNodes.length).toBe(1);
|
|
295
|
+
expect(maskContainer.childNodes[0].nodeType).toBe(Node.TEXT_NODE);
|
|
296
|
+
expect(_react2.screen.getByText('Some text')).toBeInTheDocument();
|
|
297
|
+
});
|
|
298
|
+
it('handles multiple DnD components with correct spacer placement', function () {
|
|
299
|
+
var mockRenderChildren = jest.fn(function (n) {
|
|
300
|
+
var _n$data3;
|
|
301
|
+
if (((_n$data3 = n.data) === null || _n$data3 === void 0 || (_n$data3 = _n$data3.dataset) === null || _n$data3 === void 0 ? void 0 : _n$data3.component) === 'blank') {
|
|
302
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
303
|
+
"data-testid": "blank-".concat(n.data.testId)
|
|
304
|
+
}, "Blank");
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
});
|
|
308
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/React.createElement(_mask["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
309
|
+
renderChildren: mockRenderChildren,
|
|
310
|
+
layout: {
|
|
311
|
+
nodes: [{
|
|
312
|
+
type: 'div',
|
|
313
|
+
data: {
|
|
314
|
+
dataset: {
|
|
315
|
+
component: 'blank'
|
|
316
|
+
},
|
|
317
|
+
attributes: {},
|
|
318
|
+
testId: '1'
|
|
319
|
+
},
|
|
320
|
+
nodes: []
|
|
321
|
+
}, {
|
|
322
|
+
type: 'div',
|
|
323
|
+
data: {
|
|
324
|
+
dataset: {
|
|
325
|
+
component: 'blank'
|
|
326
|
+
},
|
|
327
|
+
attributes: {},
|
|
328
|
+
testId: '2'
|
|
329
|
+
},
|
|
330
|
+
nodes: []
|
|
331
|
+
}]
|
|
332
|
+
}
|
|
333
|
+
}))),
|
|
334
|
+
container = _render0.container;
|
|
335
|
+
|
|
336
|
+
// Should have 2 spacers per component = 4 spacers + 2 blanks = 6 total children
|
|
337
|
+
var maskContainer = container.firstChild;
|
|
338
|
+
expect(maskContainer.childNodes.length).toBe(6);
|
|
339
|
+
expect(_react2.screen.getByTestId('blank-1')).toBeInTheDocument();
|
|
340
|
+
expect(_react2.screen.getByTestId('blank-2')).toBeInTheDocument();
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
//# sourceMappingURL=mask.test.js.map
|