@pie-lib/mask-markup 3.1.0-beta.5 → 3.1.0

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 (51) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE.md +5 -0
  3. package/lib/choices/choice.js +24 -6
  4. package/lib/choices/choice.js.map +1 -1
  5. package/lib/choices/index.js +32 -9
  6. package/lib/choices/index.js.map +1 -1
  7. package/lib/components/blank.js +106 -29
  8. package/lib/components/blank.js.map +1 -1
  9. package/lib/components/dropdown.js +2 -9
  10. package/lib/components/dropdown.js.map +1 -1
  11. package/lib/drag-in-the-blank.js +139 -30
  12. package/lib/drag-in-the-blank.js.map +1 -1
  13. package/lib/keyboard-coordinates.js +156 -0
  14. package/lib/keyboard-coordinates.js.map +1 -0
  15. package/lib/mask.js +20 -15
  16. package/lib/mask.js.map +1 -1
  17. package/package.json +6 -6
  18. package/src/__tests__/drag-in-the-blank.test.js +147 -2
  19. package/src/__tests__/keyboard-coordinates.test.js +202 -0
  20. package/src/__tests__/mask.test.js +98 -0
  21. package/src/choices/__tests__/index.test.js +104 -1
  22. package/src/choices/choice.jsx +16 -3
  23. package/src/choices/index.jsx +27 -3
  24. package/src/components/__tests__/blank.test.js +186 -5
  25. package/src/components/blank.jsx +108 -35
  26. package/src/components/dropdown.jsx +2 -9
  27. package/src/drag-in-the-blank.jsx +132 -22
  28. package/src/keyboard-coordinates.js +147 -0
  29. package/src/mask.jsx +13 -11
  30. package/lib/__tests__/drag-in-the-blank.test.js +0 -129
  31. package/lib/__tests__/drag-in-the-blank.test.js.map +0 -1
  32. package/lib/__tests__/index.test.js +0 -39
  33. package/lib/__tests__/index.test.js.map +0 -1
  34. package/lib/__tests__/mask.test.js +0 -344
  35. package/lib/__tests__/mask.test.js.map +0 -1
  36. package/lib/__tests__/serialization.test.js +0 -44
  37. package/lib/__tests__/serialization.test.js.map +0 -1
  38. package/lib/__tests__/utils.js +0 -14
  39. package/lib/__tests__/utils.js.map +0 -1
  40. package/lib/__tests__/with-mask.test.js +0 -110
  41. package/lib/__tests__/with-mask.test.js.map +0 -1
  42. package/lib/choices/__tests__/index.test.js +0 -139
  43. package/lib/choices/__tests__/index.test.js.map +0 -1
  44. package/lib/components/__tests__/blank.test.js +0 -293
  45. package/lib/components/__tests__/blank.test.js.map +0 -1
  46. package/lib/components/__tests__/correct-input.test.js +0 -132
  47. package/lib/components/__tests__/correct-input.test.js.map +0 -1
  48. package/lib/components/__tests__/dropdown.test.js +0 -202
  49. package/lib/components/__tests__/dropdown.test.js.map +0 -1
  50. package/lib/components/__tests__/input.test.js +0 -129
  51. package/lib/components/__tests__/input.test.js.map +0 -1
@@ -1,344 +0,0 @@
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
@@ -1 +0,0 @@
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":[]}
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- var _serialization = require("../serialization");
4
- describe('serialization', function () {
5
- it('ignores comments', function () {
6
- var out = (0, _serialization.deserialize)("<!-- hi -->");
7
- expect(out.document.nodes[0]).toEqual(expect.objectContaining({
8
- type: 'span'
9
- }));
10
- });
11
- it('ignores comments', function () {
12
- var out = (0, _serialization.deserialize)("<!-- hi --><div>foo</div>");
13
- expect(out.document.nodes[0]).toEqual(expect.objectContaining({
14
- type: 'div',
15
- nodes: [expect.objectContaining({
16
- object: 'text',
17
- leaves: [{
18
- text: 'foo'
19
- }]
20
- })]
21
- }));
22
- });
23
- it('deserializes an em', function () {
24
- var out = (0, _serialization.deserialize)("<!-- hi --><div> <em>x</em> </div>");
25
- expect(out.document.nodes[0]).toEqual(expect.objectContaining({
26
- type: 'div',
27
- nodes: [expect.objectContaining({
28
- object: 'text'
29
- }), expect.objectContaining({
30
- leaves: [{
31
- marks: [{
32
- data: undefined,
33
- type: 'italic'
34
- }],
35
- text: 'x'
36
- }],
37
- object: 'text'
38
- }), expect.objectContaining({
39
- object: 'text'
40
- })]
41
- }));
42
- });
43
- });
44
- //# sourceMappingURL=serialization.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialization.test.js","names":["_serialization","require","describe","it","out","deserialize","expect","document","nodes","toEqual","objectContaining","type","object","leaves","text","marks","data","undefined"],"sources":["../../src/__tests__/serialization.test.js"],"sourcesContent":["import { deserialize } from '../serialization';\n\ndescribe('serialization', () => {\n it('ignores comments', () => {\n const out = deserialize(`<!-- hi -->`);\n expect(out.document.nodes[0]).toEqual(expect.objectContaining({ type: 'span' }));\n });\n\n it('ignores comments', () => {\n const out = deserialize(`<!-- hi --><div>foo</div>`);\n expect(out.document.nodes[0]).toEqual(\n expect.objectContaining({\n type: 'div',\n nodes: [\n expect.objectContaining({\n object: 'text',\n leaves: [{ text: 'foo' }],\n }),\n ],\n }),\n );\n });\n\n it('deserializes an em', () => {\n const out = deserialize(`<!-- hi --><div> <em>x</em> </div>`);\n expect(out.document.nodes[0]).toEqual(\n expect.objectContaining({\n type: 'div',\n nodes: [\n expect.objectContaining({\n object: 'text',\n }),\n expect.objectContaining({\n leaves: [\n {\n marks: [\n {\n data: undefined,\n type: 'italic',\n },\n ],\n text: 'x',\n },\n ],\n object: 'text',\n }),\n expect.objectContaining({\n object: 'text',\n }),\n ],\n }),\n );\n });\n});\n"],"mappings":";;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEAC,QAAQ,CAAC,eAAe,EAAE,YAAM;EAC9BC,EAAE,CAAC,kBAAkB,EAAE,YAAM;IAC3B,IAAMC,GAAG,GAAG,IAAAC,0BAAW,eAAc,CAAC;IACtCC,MAAM,CAACF,GAAG,CAACG,QAAQ,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CAACH,MAAM,CAACI,gBAAgB,CAAC;MAAEC,IAAI,EAAE;IAAO,CAAC,CAAC,CAAC;EAClF,CAAC,CAAC;EAEFR,EAAE,CAAC,kBAAkB,EAAE,YAAM;IAC3B,IAAMC,GAAG,GAAG,IAAAC,0BAAW,6BAA4B,CAAC;IACpDC,MAAM,CAACF,GAAG,CAACG,QAAQ,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CACnCH,MAAM,CAACI,gBAAgB,CAAC;MACtBC,IAAI,EAAE,KAAK;MACXH,KAAK,EAAE,CACLF,MAAM,CAACI,gBAAgB,CAAC;QACtBE,MAAM,EAAE,MAAM;QACdC,MAAM,EAAE,CAAC;UAAEC,IAAI,EAAE;QAAM,CAAC;MAC1B,CAAC,CAAC;IAEN,CAAC,CACH,CAAC;EACH,CAAC,CAAC;EAEFX,EAAE,CAAC,oBAAoB,EAAE,YAAM;IAC7B,IAAMC,GAAG,GAAG,IAAAC,0BAAW,sCAAqC,CAAC;IAC7DC,MAAM,CAACF,GAAG,CAACG,QAAQ,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CACnCH,MAAM,CAACI,gBAAgB,CAAC;MACtBC,IAAI,EAAE,KAAK;MACXH,KAAK,EAAE,CACLF,MAAM,CAACI,gBAAgB,CAAC;QACtBE,MAAM,EAAE;MACV,CAAC,CAAC,EACFN,MAAM,CAACI,gBAAgB,CAAC;QACtBG,MAAM,EAAE,CACN;UACEE,KAAK,EAAE,CACL;YACEC,IAAI,EAAEC,SAAS;YACfN,IAAI,EAAE;UACR,CAAC,CACF;UACDG,IAAI,EAAE;QACR,CAAC,CACF;QACDF,MAAM,EAAE;MACV,CAAC,CAAC,EACFN,MAAM,CAACI,gBAAgB,CAAC;QACtBE,MAAM,EAAE;MACV,CAAC,CAAC;IAEN,CAAC,CACH,CAAC;EACH,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.choice = void 0;
7
- var choice = exports.choice = function choice(v, id) {
8
- return {
9
- label: v,
10
- value: v,
11
- id: id
12
- };
13
- };
14
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":["choice","exports","v","id","label","value"],"sources":["../../src/__tests__/utils.js"],"sourcesContent":["export const choice = (v, id) => ({ label: v, value: v, id });\n"],"mappings":";;;;;;AAAO,IAAMA,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAG,SAATA,MAAMA,CAAIE,CAAC,EAAEC,EAAE;EAAA,OAAM;IAAEC,KAAK,EAAEF,CAAC;IAAEG,KAAK,EAAEH,CAAC;IAAEC,EAAE,EAAFA;EAAG,CAAC;AAAA,CAAC","ignoreList":[]}
@@ -1,110 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
- var React = _interopRequireWildcard(require("react"));
8
- var _react2 = require("@testing-library/react");
9
- var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
- var _withMask = require("../with-mask");
11
- 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); }
12
- describe('WithMask', function () {
13
- var onChange = jest.fn();
14
- var defaultProps = {
15
- markup: '<p>Foo bar {{0}} over the moon;</p>',
16
- value: {
17
- 0: 'blank'
18
- },
19
- onChange: onChange
20
- };
21
- var Masked = (0, _withMask.withMask)('foo', function (props) {
22
- return function (node) {
23
- var dataset = node.data ? node.data.dataset || {} : {};
24
- if (dataset.component === 'foo') {
25
- return /*#__PURE__*/React.createElement("input", {
26
- type: "text",
27
- "data-testid": "masked-input",
28
- defaultValue: "Foo",
29
- onChange: props.onChange
30
- });
31
- }
32
- };
33
- });
34
- beforeEach(function () {
35
- onChange.mockClear();
36
- });
37
- describe('rendering', function () {
38
- it('renders with default props', function () {
39
- var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(Masked, defaultProps)),
40
- container = _render.container;
41
- expect(container.firstChild).toBeInTheDocument();
42
- });
43
- it('renders markup content', function () {
44
- (0, _react2.render)(/*#__PURE__*/React.createElement(Masked, defaultProps));
45
- expect(_react2.screen.getByText(/Foo bar/)).toBeInTheDocument();
46
- });
47
- it('renders paragraph content', function () {
48
- var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(Masked, defaultProps)),
49
- container = _render2.container;
50
- // Paragraph is rendered as a styled div, not a <p> tag
51
- expect(container.firstChild).toBeInTheDocument();
52
- expect(_react2.screen.getByText(/Foo bar/)).toBeInTheDocument();
53
- });
54
- });
55
- describe('onChange handler', function () {
56
- it('calls onChange when value changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
57
- var user, input;
58
- return _regenerator["default"].wrap(function (_context) {
59
- while (1) switch (_context.prev = _context.next) {
60
- case 0:
61
- user = _userEvent["default"].setup();
62
- (0, _react2.render)(/*#__PURE__*/React.createElement(Masked, defaultProps));
63
- input = _react2.screen.queryByTestId('masked-input');
64
- if (!input) {
65
- _context.next = 3;
66
- break;
67
- }
68
- _context.next = 1;
69
- return user.clear(input);
70
- case 1:
71
- _context.next = 2;
72
- return user.type(input, 'ceva');
73
- case 2:
74
- expect(onChange).toHaveBeenCalled();
75
- case 3:
76
- case "end":
77
- return _context.stop();
78
- }
79
- }, _callee);
80
- })));
81
- it('passes event to onChange', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
82
- var user, input, lastCall;
83
- return _regenerator["default"].wrap(function (_context2) {
84
- while (1) switch (_context2.prev = _context2.next) {
85
- case 0:
86
- user = _userEvent["default"].setup();
87
- (0, _react2.render)(/*#__PURE__*/React.createElement(Masked, defaultProps));
88
- input = _react2.screen.queryByTestId('masked-input');
89
- if (!input) {
90
- _context2.next = 3;
91
- break;
92
- }
93
- _context2.next = 1;
94
- return user.clear(input);
95
- case 1:
96
- _context2.next = 2;
97
- return user.type(input, 'test');
98
- case 2:
99
- expect(onChange).toHaveBeenCalled();
100
- lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];
101
- expect(lastCall).toHaveProperty('target');
102
- case 3:
103
- case "end":
104
- return _context2.stop();
105
- }
106
- }, _callee2);
107
- })));
108
- });
109
- });
110
- //# sourceMappingURL=with-mask.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-mask.test.js","names":["React","_interopRequireWildcard","require","_react2","_userEvent","_interopRequireDefault","_withMask","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","onChange","jest","fn","defaultProps","markup","value","Masked","withMask","props","node","dataset","data","component","createElement","type","defaultValue","beforeEach","mockClear","it","_render","render","container","expect","firstChild","toBeInTheDocument","screen","getByText","_render2","_asyncToGenerator2","_regenerator","mark","_callee","user","input","wrap","_context","prev","next","userEvent","setup","queryByTestId","clear","toHaveBeenCalled","stop","_callee2","lastCall","_context2","mock","calls","length","toHaveProperty"],"sources":["../../src/__tests__/with-mask.test.js"],"sourcesContent":["import * as React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { withMask } from '../with-mask';\n\ndescribe('WithMask', () => {\n const onChange = jest.fn();\n const defaultProps = {\n markup: '<p>Foo bar {{0}} over the moon;</p>',\n value: {\n 0: 'blank',\n },\n onChange,\n };\n\n const Masked = withMask('foo', (props) => (node) => {\n const dataset = node.data ? node.data.dataset || {} : {};\n\n if (dataset.component === 'foo') {\n return <input type=\"text\" data-testid=\"masked-input\" defaultValue=\"Foo\" onChange={props.onChange} />;\n }\n });\n\n beforeEach(() => {\n onChange.mockClear();\n });\n\n describe('rendering', () => {\n it('renders with default props', () => {\n const { container } = render(<Masked {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders markup content', () => {\n render(<Masked {...defaultProps} />);\n expect(screen.getByText(/Foo bar/)).toBeInTheDocument();\n });\n\n it('renders paragraph content', () => {\n const { container } = render(<Masked {...defaultProps} />);\n // Paragraph is rendered as a styled div, not a <p> tag\n expect(container.firstChild).toBeInTheDocument();\n expect(screen.getByText(/Foo bar/)).toBeInTheDocument();\n });\n });\n\n describe('onChange handler', () => {\n it('calls onChange when value changes', async () => {\n const user = userEvent.setup();\n render(<Masked {...defaultProps} />);\n\n const input = screen.queryByTestId('masked-input');\n if (input) {\n await user.clear(input);\n await user.type(input, 'ceva');\n\n expect(onChange).toHaveBeenCalled();\n }\n });\n\n it('passes event to onChange', async () => {\n const user = userEvent.setup();\n render(<Masked {...defaultProps} />);\n\n const input = screen.queryByTestId('masked-input');\n if (input) {\n await user.clear(input);\n await user.type(input, 'test');\n\n expect(onChange).toHaveBeenCalled();\n const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0];\n expect(lastCall).toHaveProperty('target');\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}