@pie-lib/mask-markup 3.0.12 → 3.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 (33) hide show
  1. package/CHANGELOG.md +0 -48
  2. package/lib/__tests__/drag-in-the-blank.test.js +129 -0
  3. package/lib/__tests__/drag-in-the-blank.test.js.map +1 -0
  4. package/lib/__tests__/index.test.js +39 -0
  5. package/lib/__tests__/index.test.js.map +1 -0
  6. package/lib/__tests__/mask.test.js +344 -0
  7. package/lib/__tests__/mask.test.js.map +1 -0
  8. package/lib/__tests__/serialization.test.js +44 -0
  9. package/lib/__tests__/serialization.test.js.map +1 -0
  10. package/lib/__tests__/utils.js +14 -0
  11. package/lib/__tests__/utils.js.map +1 -0
  12. package/lib/__tests__/with-mask.test.js +110 -0
  13. package/lib/__tests__/with-mask.test.js.map +1 -0
  14. package/lib/choices/__tests__/index.test.js +139 -0
  15. package/lib/choices/__tests__/index.test.js.map +1 -0
  16. package/lib/choices/choice.js +3 -0
  17. package/lib/choices/choice.js.map +1 -1
  18. package/lib/components/__tests__/blank.test.js +293 -0
  19. package/lib/components/__tests__/blank.test.js.map +1 -0
  20. package/lib/components/__tests__/correct-input.test.js +132 -0
  21. package/lib/components/__tests__/correct-input.test.js.map +1 -0
  22. package/lib/components/__tests__/dropdown.test.js +202 -0
  23. package/lib/components/__tests__/dropdown.test.js.map +1 -0
  24. package/lib/components/__tests__/input.test.js +129 -0
  25. package/lib/components/__tests__/input.test.js.map +1 -0
  26. package/lib/components/blank.js +14 -3
  27. package/lib/components/blank.js.map +1 -1
  28. package/package.json +6 -6
  29. package/src/choices/__tests__/index.test.js +34 -0
  30. package/src/choices/choice.jsx +5 -2
  31. package/src/components/__tests__/blank.test.js +33 -0
  32. package/src/components/blank.jsx +20 -4
  33. package/LICENSE.md +0 -5
package/CHANGELOG.md CHANGED
@@ -3,54 +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.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)
7
-
8
- ### Bug Fixes
9
-
10
- - **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))
11
-
12
- ## [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)
13
-
14
- **Note:** Version bump only for package @pie-lib/mask-markup
15
-
16
- ## [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)
17
-
18
- ### Bug Fixes
19
-
20
- - **blank:** prevent ResizeObserver feedback loops and re-measure dimensions on visibility ([009cf1d](https://github.com/pie-framework/pie-lib/commit/009cf1d56af3f5f436d2f09b33e4d6d0bfad8609))
21
-
22
- ## [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)
23
-
24
- ### Bug Fixes
25
-
26
- - **mask-markup/choice:** add fallback dimensions for dragging state in Choice component PIE-693 ([87b7782](https://github.com/pie-framework/pie-lib/commit/87b77824785bf7485b1b3e986749fc877224d154))
27
-
28
- ## [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)
29
-
30
- **Note:** Version bump only for package @pie-lib/mask-markup
31
-
32
- ## [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)
33
-
34
- ### Bug Fixes
35
-
36
- - correct @emotion/style typo to @emotion/styled in package deps PIE-678 ([d529ac7](https://github.com/pie-framework/pie-lib/commit/d529ac7bc3dfa94d8037688452d4c70c66f2590b))
37
-
38
- ## [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)
39
-
40
- ### Bug Fixes
41
-
42
- - render math when the correct value changes [PIE-600] ([38a0024](https://github.com/pie-framework/pie-lib/commit/38a002426ae495e98c2fd1355f7cb83069a7dcdc))
43
-
44
- ## [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)
45
-
46
- ### Bug Fixes
47
-
48
- - 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))
49
-
50
- ## [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)
51
-
52
- **Note:** Version bump only for package @pie-lib/mask-markup
53
-
54
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)
55
7
 
56
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":"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","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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask.test.js","names":["React","_interopRequireWildcard","require","_react2","_mask","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","describe","onChange","jest","fn","defaultProps","layout","nodes","object","leaves","text","value","beforeEach","mockClear","it","_render","render","createElement","container","expect","firstChild","toBeInTheDocument","screen","getByText","_render2","_extends2","type","_render3","data","attributes","querySelector","_render4","marks","undefined","em","textContent","toBe","da","_render5","mockRenderChildren","_n$data","dataset","component","_render6","renderChildren","maskContainer","childNodes","getByTestId","_render7","_n$data2","_render8","elementType","td","_render9","nodeType","Node","TEXT_NODE","_n$data3","concat","testId","_render0"],"sources":["../../src/__tests__/mask.test.js"],"sourcesContent":["import * as React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport Mask from '../mask';\n\ndescribe('Mask', () => {\n // Don't mock renderChildren - let the component render naturally\n const onChange = jest.fn();\n const defaultProps = {\n onChange,\n layout: {\n nodes: [\n {\n object: 'text',\n leaves: [\n {\n text: 'Foo',\n },\n ],\n },\n ],\n },\n value: {},\n };\n\n beforeEach(() => {\n onChange.mockClear();\n });\n\n describe('rendering', () => {\n it('renders with default props', () => {\n const { container } = render(<Mask {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders text content', () => {\n render(<Mask {...defaultProps} />);\n expect(screen.getByText('Foo')).toBeInTheDocument();\n });\n\n it('renders a paragraph element', () => {\n const { container } = render(\n <Mask\n {...defaultProps}\n layout={{\n nodes: [\n {\n type: 'p',\n nodes: [\n {\n object: 'text',\n leaves: [\n {\n text: 'Foo',\n },\n ],\n },\n ],\n },\n ],\n }}\n />,\n );\n\n // Paragraph is rendered as a styled div, not a <p> tag\n expect(screen.getByText('Foo')).toBeInTheDocument();\n });\n\n it('renders nested div and paragraph', () => {\n const { container } = render(\n <Mask\n {...defaultProps}\n layout={{\n nodes: [\n {\n type: 'div',\n data: {\n attributes: {},\n },\n nodes: [\n {\n type: 'p',\n data: {\n attributes: {},\n },\n nodes: [\n {\n object: 'text',\n leaves: [\n {\n text: 'Foo',\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n }}\n />,\n );\n\n expect(container.querySelector('div')).toBeInTheDocument();\n // Paragraph is rendered as a styled div, not a <p> tag\n expect(screen.getByText('Foo')).toBeInTheDocument();\n });\n\n it('renders text with italic marks', () => {\n const { container } = render(\n <Mask\n {...defaultProps}\n layout={{\n nodes: [\n {\n leaves: [{ text: 'Foo ' }],\n object: 'text',\n },\n {\n leaves: [\n {\n marks: [\n {\n data: undefined,\n type: 'italic',\n },\n ],\n text: 'x',\n },\n ],\n object: 'text',\n },\n {\n leaves: [{ text: ' bar' }],\n object: 'text',\n },\n ],\n object: 'block',\n type: 'div',\n }}\n />,\n );\n\n // Text \"Foo \" is split with spaces, use regex\n expect(screen.getByText(/Foo/)).toBeInTheDocument();\n expect(screen.getByText('x')).toBeInTheDocument();\n expect(screen.getByText(/bar/)).toBeInTheDocument();\n // Check for italic/em element\n const em = container.querySelector('em, i');\n expect(em).toBeInTheDocument();\n expect(em.textContent).toBe('x');\n });\n\n it('renders tbody without extra space', () => {\n const da = () => ({ data: { attributes: {} } });\n const { container } = render(\n <Mask\n {...defaultProps}\n layout={{\n nodes: [\n {\n type: 'table',\n ...da(),\n nodes: [\n {\n type: 'tbody',\n ...da(),\n nodes: [\n {\n object: 'text',\n leaves: [{ text: ' ' }],\n },\n { type: 'tr', ...da(), nodes: [] },\n ],\n },\n ],\n },\n ],\n }}\n />,\n );\n\n expect(container.querySelector('table')).toBeInTheDocument();\n expect(container.querySelector('tbody')).toBeInTheDocument();\n expect(container.querySelector('tr')).toBeInTheDocument();\n });\n });\n\n describe('spacer rendering for DnD components', () => {\n it('adds spacers before and after DnD blank components', () => {\n const mockRenderChildren = jest.fn((n) => {\n if (n.data?.dataset?.component === 'blank') {\n return <span data-testid=\"blank-component\">Blank</span>;\n }\n return null;\n });\n\n const { container } = render(\n <Mask\n {...defaultProps}\n renderChildren={mockRenderChildren}\n layout={{\n nodes: [\n {\n type: 'div',\n data: {\n dataset: { component: 'blank' },\n attributes: {},\n },\n nodes: [],\n },\n ],\n }}\n />,\n );\n\n // Check that renderChildren was called and spacers are present\n // Count all children in the container - should be: spacer + blank + spacer = 3 elements\n const maskContainer = container.firstChild;\n expect(maskContainer.childNodes.length).toBe(3);\n expect(screen.getByTestId('blank-component')).toBeInTheDocument();\n });\n\n it('does not add spacers for non-DnD components', () => {\n const mockRenderChildren = jest.fn((n) => {\n return <span data-testid=\"regular-component\">Regular</span>;\n });\n\n const { container } = render(\n <Mask\n {...defaultProps}\n renderChildren={mockRenderChildren}\n layout={{\n nodes: [\n {\n type: 'div',\n data: {\n attributes: {},\n },\n nodes: [],\n },\n ],\n }}\n />,\n );\n\n // Should not have spacers - only the regular component\n const maskContainer = container.firstChild;\n expect(maskContainer.childNodes.length).toBe(1);\n expect(screen.getByTestId('regular-component')).toBeInTheDocument();\n });\n\n it('adds spacers regardless of parent node type', () => {\n const mockRenderChildren = jest.fn((n) => {\n if (n.data?.dataset?.component === 'blank') {\n return <span data-testid=\"blank-in-td\">Blank in TD</span>;\n }\n return null;\n });\n\n const { container } = render(\n <Mask\n {...defaultProps}\n renderChildren={mockRenderChildren}\n elementType=\"drag-in-the-blank\"\n layout={{\n nodes: [\n {\n type: 'table',\n data: { attributes: {} },\n nodes: [\n {\n type: 'tbody',\n data: { attributes: {} },\n nodes: [\n {\n type: 'tr',\n data: { attributes: {} },\n nodes: [\n {\n type: 'td',\n data: { attributes: {} },\n nodes: [\n {\n type: 'div',\n data: {\n dataset: { component: 'blank' },\n attributes: {},\n },\n nodes: [],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n }}\n />,\n );\n\n // Should have spacers even inside td element\n const td = container.querySelector('td');\n expect(td.childNodes.length).toBe(3); // spacer + blank + spacer\n expect(screen.getByTestId('blank-in-td')).toBeInTheDocument();\n });\n\n it('does not add spacers for text content', () => {\n const { container } = render(\n <Mask\n {...defaultProps}\n elementType=\"drag-in-the-blank\"\n layout={{\n nodes: [\n {\n object: 'text',\n leaves: [\n {\n text: 'Some text',\n },\n ],\n },\n ],\n }}\n />,\n );\n\n // Should not have spacers for plain text - just text node\n const maskContainer = container.firstChild;\n expect(maskContainer.childNodes.length).toBe(1);\n expect(maskContainer.childNodes[0].nodeType).toBe(Node.TEXT_NODE);\n expect(screen.getByText('Some text')).toBeInTheDocument();\n });\n\n it('handles multiple DnD components with correct spacer placement', () => {\n const mockRenderChildren = jest.fn((n) => {\n if (n.data?.dataset?.component === 'blank') {\n return <span data-testid={`blank-${n.data.testId}`}>Blank</span>;\n }\n return null;\n });\n\n const { container } = render(\n <Mask\n {...defaultProps}\n renderChildren={mockRenderChildren}\n layout={{\n nodes: [\n {\n type: 'div',\n data: {\n dataset: { component: 'blank' },\n attributes: {},\n testId: '1',\n },\n nodes: [],\n },\n {\n type: 'div',\n data: {\n dataset: { component: 'blank' },\n attributes: {},\n testId: '2',\n },\n nodes: [],\n },\n ],\n }}\n />,\n );\n\n // Should have 2 spacers per component = 4 spacers + 2 blanks = 6 total children\n const maskContainer = container.firstChild;\n expect(maskContainer.childNodes.length).toBe(6);\n expect(screen.getByTestId('blank-1')).toBeInTheDocument();\n expect(screen.getByTestId('blank-2')).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}