@pie-lib/mask-markup 3.1.6-beta.6 → 3.1.6-beta.8

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.
@@ -0,0 +1,139 @@
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 _choice = _interopRequireDefault(require("../choice"));
9
+ var _utils = require("../../__tests__/utils");
10
+ var _index = _interopRequireDefault(require("../index"));
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
+ // Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
13
+ var collectEmotionRules = function collectEmotionRules() {
14
+ var rules = [];
15
+ for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
16
+ var sheet = _Array$from[_i];
17
+ try {
18
+ for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
19
+ var rule = _Array$from2[_i2];
20
+ rules.push(rule.cssText);
21
+ }
22
+ } catch (e) {
23
+ /* inaccessible stylesheet */
24
+ }
25
+ }
26
+ return rules;
27
+ };
28
+
29
+ // Mock @dnd-kit hooks to avoid DndContext requirement
30
+ jest.mock('@dnd-kit/core', function () {
31
+ return {
32
+ useDraggable: jest.fn(function () {
33
+ return {
34
+ attributes: {},
35
+ listeners: {},
36
+ setNodeRef: jest.fn(),
37
+ isDragging: false
38
+ };
39
+ }),
40
+ useDroppable: jest.fn(function () {
41
+ return {
42
+ setNodeRef: jest.fn(),
43
+ isOver: false,
44
+ active: null
45
+ };
46
+ })
47
+ };
48
+ });
49
+ describe('index', function () {
50
+ describe('Choices', function () {
51
+ var defaultProps = {
52
+ disabled: false,
53
+ choices: [(0, _utils.choice)('Jumped', '0'), (0, _utils.choice)('Laughed', '1'), (0, _utils.choice)('Spoon', '2')],
54
+ choicePosition: 'below',
55
+ instanceId: 'test-instance'
56
+ };
57
+ it('renders correctly with default props', function () {
58
+ var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], defaultProps)),
59
+ container = _render.container;
60
+ expect(container.firstChild).toBeInTheDocument();
61
+ expect(_react2.screen.getByText('Jumped')).toBeInTheDocument();
62
+ expect(_react2.screen.getByText('Laughed')).toBeInTheDocument();
63
+ expect(_react2.screen.getByText('Spoon')).toBeInTheDocument();
64
+ });
65
+ it('renders correctly with disabled prop as true', function () {
66
+ var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
67
+ disabled: true
68
+ }))),
69
+ container = _render2.container;
70
+ expect(container.firstChild).toBeInTheDocument();
71
+ });
72
+ it('renders without duplicates', function () {
73
+ var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
74
+ duplicates: undefined,
75
+ value: {
76
+ 0: '0',
77
+ 1: '1'
78
+ }
79
+ }))),
80
+ container = _render3.container;
81
+ expect(container.firstChild).toBeInTheDocument();
82
+ });
83
+ it('renders with duplicates', function () {
84
+ var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
85
+ duplicates: true,
86
+ value: {
87
+ 0: '0',
88
+ 1: '1'
89
+ }
90
+ }))),
91
+ container = _render4.container;
92
+ expect(container.firstChild).toBeInTheDocument();
93
+ });
94
+ });
95
+ describe('Choice', function () {
96
+ var defaultProps = {
97
+ disabled: false,
98
+ choice: (0, _utils.choice)('Label', '1'),
99
+ instanceId: 'test-instance'
100
+ };
101
+ describe('render', function () {
102
+ it('renders correctly with default props', function () {
103
+ var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps)),
104
+ container = _render5.container;
105
+ expect(container.firstChild).toBeInTheDocument();
106
+ expect(_react2.screen.getByText('Label')).toBeInTheDocument();
107
+ });
108
+ it('renders correctly with disabled prop as true', function () {
109
+ var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], (0, _extends2["default"])({}, defaultProps, {
110
+ disabled: true
111
+ }))),
112
+ container = _render6.container;
113
+ expect(container.firstChild).toBeInTheDocument();
114
+ });
115
+ });
116
+ describe('fraction math styling', function () {
117
+ it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
118
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps));
119
+ // The new rule targets mjx-mn digits that sit next to an mjx-mfrac.
120
+ var rule = collectEmotionRules().find(function (r) {
121
+ return r.includes('mjx-mn') && r.includes('mjx-mfrac');
122
+ });
123
+ expect(rule).toBeDefined();
124
+ expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
125
+ expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
126
+ expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
127
+ });
128
+ it('keeps the existing mjx-frac 120% rule', function () {
129
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps));
130
+ var rule = collectEmotionRules().find(function (r) {
131
+ return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
132
+ });
133
+ expect(rule).toBeDefined();
134
+ expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
135
+ });
136
+ });
137
+ });
138
+ });
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfY2hvaWNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9pbmRleCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY29sbGVjdEVtb3Rpb25SdWxlcyIsInJ1bGVzIiwiX2kiLCJfQXJyYXkkZnJvbSIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50Iiwic3R5bGVTaGVldHMiLCJsZW5ndGgiLCJzaGVldCIsIl9pMiIsIl9BcnJheSRmcm9tMiIsImNzc1J1bGVzIiwicnVsZSIsInB1c2giLCJjc3NUZXh0IiwiamVzdCIsIm1vY2siLCJ1c2VEcmFnZ2FibGUiLCJmbiIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwiaXNEcmFnZ2luZyIsInVzZURyb3BwYWJsZSIsImlzT3ZlciIsImFjdGl2ZSIsImRlc2NyaWJlIiwiZGVmYXVsdFByb3BzIiwiZGlzYWJsZWQiLCJjaG9pY2VzIiwiY2hvaWNlIiwiY2hvaWNlUG9zaXRpb24iLCJpbnN0YW5jZUlkIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsIl9yZW5kZXIyIiwiX2V4dGVuZHMyIiwiX3JlbmRlcjMiLCJkdXBsaWNhdGVzIiwidW5kZWZpbmVkIiwidmFsdWUiLCJfcmVuZGVyNCIsIl9yZW5kZXI1IiwiX3JlbmRlcjYiLCJmaW5kIiwiaW5jbHVkZXMiLCJ0b0JlRGVmaW5lZCIsInRvTWF0Y2giLCJ0ZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nob2ljZXMvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBDaG9pY2UgZnJvbSAnLi4vY2hvaWNlJztcbmltcG9ydCB7IGNob2ljZSB9IGZyb20gJy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5pbXBvcnQgQ2hvaWNlcyBmcm9tICcuLi9pbmRleCc7XG5cbi8vIENvbGxlY3QgdGhlIENTUyBydWxlcyBlbW90aW9uL01VSSBpbmplY3RlZCBpbnRvIHRoZSBkb2N1bWVudCAoanNkb20gdXNlcyBpbnNlcnRSdWxlKS5cbmNvbnN0IGNvbGxlY3RFbW90aW9uUnVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJ1bGVzID0gW107XG4gIGZvciAoY29uc3Qgc2hlZXQgb2YgQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBydWxlIG9mIEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMpKSB7XG4gICAgICAgIHJ1bGVzLnB1c2gocnVsZS5jc3NUZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpbmFjY2Vzc2libGUgc3R5bGVzaGVldCAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnVsZXM7XG59O1xuXG4vLyBNb2NrIEBkbmQta2l0IGhvb2tzIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIHVzZURyYWdnYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGxpc3RlbmVyczoge30sXG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICB9KSksXG4gIHVzZURyb3BwYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICBpc092ZXI6IGZhbHNlLFxuICAgIGFjdGl2ZTogbnVsbCxcbiAgfSkpLFxufSkpO1xuXG5kZXNjcmliZSgnaW5kZXgnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdDaG9pY2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtjaG9pY2UoJ0p1bXBlZCcsICcwJyksIGNob2ljZSgnTGF1Z2hlZCcsICcxJyksIGNob2ljZSgnU3Bvb24nLCAnMicpXSxcbiAgICAgIGNob2ljZVBvc2l0aW9uOiAnYmVsb3cnLFxuICAgICAgaW5zdGFuY2VJZDogJ3Rlc3QtaW5zdGFuY2UnLFxuICAgIH07XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q2hvaWNlcyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSnVtcGVkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnTGF1Z2hlZCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1Nwb29uJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkaXNhYmxlZCBwcm9wIGFzIHRydWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2VzIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGR1cGxpY2F0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2VzIHsuLi5kZWZhdWx0UHJvcHN9IGR1cGxpY2F0ZXM9e3VuZGVmaW5lZH0gdmFsdWU9e3sgMDogJzAnLCAxOiAnMScgfX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkdXBsaWNhdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q2hvaWNlcyB7Li4uZGVmYXVsdFByb3BzfSBkdXBsaWNhdGVzPXt0cnVlfSB2YWx1ZT17eyAwOiAnMCcsIDE6ICcxJyB9fSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDaG9pY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlOiBjaG9pY2UoJ0xhYmVsJywgJzEnKSxcbiAgICAgIGluc3RhbmNlSWQ6ICd0ZXN0LWluc3RhbmNlJyxcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICAgIGl0KCdyZW5kZXJzIGNvcnJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPENob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0xhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggZGlzYWJsZWQgcHJvcCBhcyB0cnVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2Ugey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZnJhY3Rpb24gbWF0aCBzdHlsaW5nJywgKCkgPT4ge1xuICAgICAgaXQoJ2VubGFyZ2VzIG51bWVyYXRvci9kZW5vbWluYXRvciBkaWdpdHMgYWRqYWNlbnQgdG8gYSBmcmFjdGlvbiB0byAxMjAlJywgKCkgPT4ge1xuICAgICAgICByZW5kZXIoPENob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAgIC8vIFRoZSBuZXcgcnVsZSB0YXJnZXRzIG1qeC1tbiBkaWdpdHMgdGhhdCBzaXQgbmV4dCB0byBhbiBtangtbWZyYWMuXG4gICAgICAgIGNvbnN0IHJ1bGUgPSBjb2xsZWN0RW1vdGlvblJ1bGVzKCkuZmluZCgocikgPT4gci5pbmNsdWRlcygnbWp4LW1uJykgJiYgci5pbmNsdWRlcygnbWp4LW1mcmFjJykpO1xuICAgICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL21qeC1tbjpoYXNcXCh+XFxzKm1qeC1tZnJhY1xcKS8pO1xuICAgICAgICBleHBlY3QocnVsZSkudG9NYXRjaCgvbWp4LW1mcmFjXFxzKn5cXHMqbWp4LW1uLyk7XG4gICAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgna2VlcHMgdGhlIGV4aXN0aW5nIG1qeC1mcmFjIDEyMCUgcnVsZScsICgpID0+IHtcbiAgICAgICAgcmVuZGVyKDxDaG9pY2Ugey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgICBjb25zdCBydWxlID0gY29sbGVjdEVtb3Rpb25SdWxlcygpLmZpbmQoKHIpID0+IC8oXnxbXi1dKW1qeC1mcmFjLy50ZXN0KHIpICYmICFyLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICAgIGV4cGVjdChydWxlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICBleHBlY3QocnVsZSkudG9NYXRjaCgvZm9udC1zaXplOlxccyoxMjAlXFxzKiFpbXBvcnRhbnQvaSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFBK0IsU0FBQUQsd0JBQUFPLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFULHVCQUFBLFlBQUFBLHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEs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
@@ -0,0 +1,293 @@
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 _blank = _interopRequireDefault(require("../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
+ // Mock @dnd-kit hooks to avoid DndContext requirement
11
+ jest.mock('@dnd-kit/core', function () {
12
+ return {
13
+ useDraggable: jest.fn(function () {
14
+ return {
15
+ attributes: {},
16
+ listeners: {},
17
+ setNodeRef: jest.fn(),
18
+ transform: null,
19
+ isDragging: false
20
+ };
21
+ }),
22
+ useDroppable: jest.fn(function () {
23
+ return {
24
+ setNodeRef: jest.fn(),
25
+ isOver: false,
26
+ active: null
27
+ };
28
+ })
29
+ };
30
+ });
31
+ jest.mock('@dnd-kit/utilities', function () {
32
+ return {
33
+ CSS: {
34
+ Translate: {
35
+ toString: jest.fn(function () {
36
+ return 'translate3d(0, 0, 0)';
37
+ })
38
+ }
39
+ }
40
+ };
41
+ });
42
+ jest.mock('@pie-lib/math-rendering', function () {
43
+ return {
44
+ renderMath: jest.fn()
45
+ };
46
+ });
47
+
48
+ // Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
49
+ var collectEmotionRules = function collectEmotionRules() {
50
+ var rules = [];
51
+ for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
52
+ var sheet = _Array$from[_i];
53
+ try {
54
+ for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
55
+ var rule = _Array$from2[_i2];
56
+ rules.push(rule.cssText);
57
+ }
58
+ } catch (e) {
59
+ /* inaccessible stylesheet */
60
+ }
61
+ }
62
+ return rules;
63
+ };
64
+ describe('Blank', function () {
65
+ var _require = require('@pie-lib/math-rendering'),
66
+ renderMath = _require.renderMath;
67
+ var onChange = jest.fn();
68
+ var defaultProps = {
69
+ disabled: false,
70
+ choice: {
71
+ value: 'Cow'
72
+ },
73
+ isOver: false,
74
+ dragItem: {},
75
+ correct: false,
76
+ onChange: onChange
77
+ };
78
+ beforeEach(function () {
79
+ onChange.mockClear();
80
+ renderMath.mockClear();
81
+ });
82
+ describe('rendering', function () {
83
+ it('renders with default props', function () {
84
+ var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
85
+ container = _render.container;
86
+ expect(container.firstChild).toBeInTheDocument();
87
+ });
88
+ it('displays the value when provided', function () {
89
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
90
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
91
+ });
92
+ it('renders as disabled when disabled prop is true', function () {
93
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
94
+ disabled: true
95
+ })));
96
+ // Check that delete button is not present when disabled
97
+ expect(_react2.screen.queryByRole('button', {
98
+ name: /delete/i
99
+ })).not.toBeInTheDocument();
100
+ });
101
+ it('renders with dragged item preview', function () {
102
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
103
+ dragItem: {
104
+ choice: {
105
+ value: 'Dog'
106
+ }
107
+ }
108
+ })));
109
+ // Blank component should render
110
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
111
+ });
112
+ it('shows hover state when isOver is true', function () {
113
+ var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
114
+ dragItem: {
115
+ choice: {
116
+ value: 'Dog'
117
+ }
118
+ },
119
+ isOver: true
120
+ }))),
121
+ container = _render2.container;
122
+ // Component should have hover styling
123
+ expect(container.firstChild).toBeInTheDocument();
124
+ });
125
+ it('shows correct state when correct is true', function () {
126
+ var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
127
+ correct: true
128
+ }))),
129
+ container = _render3.container;
130
+ // Component should indicate correctness
131
+ expect(container.firstChild).toBeInTheDocument();
132
+ });
133
+ });
134
+ describe('delete functionality', function () {
135
+ it('does not show delete button when disabled', function () {
136
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
137
+ disabled: true
138
+ })));
139
+ expect(_react2.screen.queryByRole('button', {
140
+ name: /delete/i
141
+ })).not.toBeInTheDocument();
142
+ });
143
+ it('does not show delete button when no value is set', function () {
144
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
145
+ choice: undefined
146
+ })));
147
+ expect(_react2.screen.queryByRole('button', {
148
+ name: /delete/i
149
+ })).not.toBeInTheDocument();
150
+ });
151
+ it('shows delete button when value is present and not disabled', function () {
152
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
153
+ // If delete button is present, it should be clickable
154
+ var deleteButton = _react2.screen.queryByRole('button');
155
+ if (deleteButton) {
156
+ expect(deleteButton).toBeInTheDocument();
157
+ }
158
+ });
159
+ });
160
+ describe('dimensions', function () {
161
+ it('renders with custom dimensions when provided', function () {
162
+ var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
163
+ emptyResponseAreaHeight: 100,
164
+ emptyResponseAreaWidth: 200
165
+ }))),
166
+ container = _render4.container;
167
+ var element = container.firstChild;
168
+ expect(element).toBeInTheDocument();
169
+ });
170
+ it('renders with min dimensions by default', function () {
171
+ var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
172
+ container = _render5.container;
173
+ var element = container.firstChild;
174
+ expect(element).toBeInTheDocument();
175
+ // Component should have minimum dimensions applied
176
+ });
177
+ it('handles non-numeric dimension props gracefully', function () {
178
+ var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
179
+ emptyResponseAreaHeight: "non-numeric",
180
+ emptyResponseAreaWidth: "non-numeric"
181
+ }))),
182
+ container = _render6.container;
183
+ expect(container.firstChild).toBeInTheDocument();
184
+ });
185
+ it('computes chip dimensions based on content when no emptyResponseArea size is provided', function () {
186
+ jest.useFakeTimers();
187
+ // Mock getBoundingClientRect to simulate measured content size
188
+ var rectSpy = jest.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockReturnValue({
189
+ width: 100,
190
+ height: 20,
191
+ top: 0,
192
+ left: 0,
193
+ right: 100,
194
+ bottom: 20
195
+ });
196
+ var _render7 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
197
+ // Force measurement path that uses getMeasureNode / updateDimensions
198
+ emptyResponseAreaHeight: 0,
199
+ emptyResponseAreaWidth: 0
200
+ }))),
201
+ container = _render7.container;
202
+
203
+ // Let the internal timeout in handleElements / updateDimensions run
204
+ (0, _react2.act)(function () {
205
+ jest.runAllTimers();
206
+ });
207
+ var wrapper = container.firstChild; // StyledContent
208
+ var chip = wrapper && wrapper.firstChild; // StyledChip (rootRef)
209
+
210
+ // Width and height should include padding (24px) around measured content
211
+ expect(chip.style.width).toBe('129px');
212
+ expect(chip.style.height).toBe('49px');
213
+ rectSpy.mockRestore();
214
+ jest.useRealTimers();
215
+ });
216
+ });
217
+ describe('math rendering', function () {
218
+ it('calls renderMath on mount when choice has content', function () {
219
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
220
+ expect(renderMath).toHaveBeenCalled();
221
+ });
222
+ it('calls renderMath again when correct changes', function () {
223
+ var _render8 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
224
+ correct: false
225
+ }))),
226
+ rerender = _render8.rerender;
227
+ var callsAfterMount = renderMath.mock.calls.length;
228
+ expect(callsAfterMount).toBeGreaterThan(0);
229
+ rerender(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
230
+ correct: true
231
+ })));
232
+ expect(renderMath.mock.calls.length).toBeGreaterThan(callsAfterMount);
233
+ });
234
+ it('does not call renderMath again when correct is unchanged', function () {
235
+ var _render9 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
236
+ correct: true
237
+ }))),
238
+ rerender = _render9.rerender;
239
+ var callsAfterMount = renderMath.mock.calls.length;
240
+ rerender(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
241
+ correct: true
242
+ })));
243
+ expect(renderMath.mock.calls.length).toBe(callsAfterMount);
244
+ });
245
+ });
246
+ describe('fraction math styling', function () {
247
+ it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
248
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
249
+ var rule = collectEmotionRules().find(function (r) {
250
+ return r.includes('mjx-mn') && r.includes('mjx-mfrac');
251
+ });
252
+ expect(rule).toBeDefined();
253
+ expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
254
+ expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
255
+ expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
256
+ });
257
+ it('keeps the existing mjx-frac 120% rule', function () {
258
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
259
+ var rule = collectEmotionRules().find(function (r) {
260
+ return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
261
+ });
262
+ expect(rule).toBeDefined();
263
+ expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
264
+ });
265
+ });
266
+ describe('drag and drop', function () {
267
+ it('accepts drag item when not disabled', function () {
268
+ (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
269
+ isOver: true,
270
+ dragItem: {
271
+ choice: {
272
+ value: 'Dog'
273
+ }
274
+ }
275
+ })));
276
+ expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
277
+ });
278
+ it('shows drag preview when dragging over', function () {
279
+ var _render0 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
280
+ isOver: true,
281
+ dragItem: {
282
+ choice: {
283
+ value: 'Dog'
284
+ }
285
+ }
286
+ }))),
287
+ container = _render0.container;
288
+ expect(container.firstChild).toBeInTheDocument();
289
+ // Should show visual feedback for drag over
290
+ });
291
+ });
292
+ });
293
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfYmxhbmsiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJqZXN0IiwibW9jayIsInVzZURyYWdnYWJsZSIsImZuIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsInNldE5vZGVSZWYiLCJ0cmFuc2Zvcm0iLCJpc0RyYWdnaW5nIiwidXNlRHJvcHBhYmxlIiwiaXNPdmVyIiwiYWN0aXZlIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJyZW5kZXJNYXRoIiwiY29sbGVjdEVtb3Rpb25SdWxlcyIsInJ1bGVzIiwiX2kiLCJfQXJyYXkkZnJvbSIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50Iiwic3R5bGVTaGVldHMiLCJsZW5ndGgiLCJzaGVldCIsIl9pMiIsIl9BcnJheSRmcm9tMiIsImNzc1J1bGVzIiwicnVsZSIsInB1c2giLCJjc3NUZXh0IiwiZGVzY3JpYmUiLCJfcmVxdWlyZSIsIm9uQ2hhbmdlIiwiZGVmYXVsdFByb3BzIiwiZGlzYWJsZWQiLCJjaG9pY2UiLCJ2YWx1ZSIsImRyYWdJdGVtIiwiY29ycmVjdCIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwiX2V4dGVuZHMyIiwicXVlcnlCeVJvbGUiLCJuYW1lIiwibm90IiwiX3JlbmRlcjIiLCJfcmVuZGVyMyIsInVuZGVmaW5lZCIsImRlbGV0ZUJ1dHRvbiIsIl9yZW5kZXI0IiwiZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQiLCJlbXB0eVJlc3BvbnNlQXJlYVdpZHRoIiwiZWxlbWVudCIsIl9yZW5kZXI1IiwiX3JlbmRlcjYiLCJ1c2VGYWtlVGltZXJzIiwicmVjdFNweSIsInNweU9uIiwiSFRNTEVsZW1lbnQiLCJwcm90b3R5cGUiLCJtb2NrUmV0dXJuVmFsdWUiLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsIl9yZW5kZXI3IiwiYWN0IiwicnVuQWxsVGltZXJzIiwid3JhcHBlciIsImNoaXAiLCJzdHlsZSIsInRvQmUiLCJtb2NrUmVzdG9yZSIsInVzZVJlYWxUaW1lcnMiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwiX3JlbmRlcjgiLCJyZXJlbmRlciIsImNhbGxzQWZ0ZXJNb3VudCIsImNhbGxzIiwidG9CZUdyZWF0ZXJUaGFuIiwiX3JlbmRlcjkiLCJmaW5kIiwiaW5jbHVkZXMiLCJ0b0JlRGVmaW5lZCIsInRvTWF0Y2giLCJ0ZXN0IiwiX3JlbmRlcjAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vYmxhbmsudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiwgYWN0IH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgQmxhbmsgZnJvbSAnLi4vYmxhbmsnO1xuXG4vLyBNb2NrIEBkbmQta2l0IGhvb2tzIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIHVzZURyYWdnYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGxpc3RlbmVyczoge30sXG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIHRyYW5zZm9ybTogbnVsbCxcbiAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgfSkpLFxuICB1c2VEcm9wcGFibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgaXNPdmVyOiBmYWxzZSxcbiAgICBhY3RpdmU6IG51bGwsXG4gIH0pKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAZG5kLWtpdC91dGlsaXRpZXMnLCAoKSA9PiAoe1xuICBDU1M6IHtcbiAgICBUcmFuc2xhdGU6IHtcbiAgICAgIHRvU3RyaW5nOiBqZXN0LmZuKCgpID0+ICd0cmFuc2xhdGUzZCgwLCAwLCAwKScpLFxuICAgIH0sXG4gIH0sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoe1xuICByZW5kZXJNYXRoOiBqZXN0LmZuKCksXG59KSk7XG5cbi8vIENvbGxlY3QgdGhlIENTUyBydWxlcyBlbW90aW9uL01VSSBpbmplY3RlZCBpbnRvIHRoZSBkb2N1bWVudCAoanNkb20gdXNlcyBpbnNlcnRSdWxlKS5cbmNvbnN0IGNvbGxlY3RFbW90aW9uUnVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJ1bGVzID0gW107XG4gIGZvciAoY29uc3Qgc2hlZXQgb2YgQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBydWxlIG9mIEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMpKSB7XG4gICAgICAgIHJ1bGVzLnB1c2gocnVsZS5jc3NUZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpbmFjY2Vzc2libGUgc3R5bGVzaGVldCAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnVsZXM7XG59O1xuXG5kZXNjcmliZSgnQmxhbmsnLCAoKSA9PiB7XG4gIGNvbnN0IHsgcmVuZGVyTWF0aCB9ID0gcmVxdWlyZSgnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnKTtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgY2hvaWNlOiB7IHZhbHVlOiAnQ293JyB9LFxuICAgIGlzT3ZlcjogZmFsc2UsXG4gICAgZHJhZ0l0ZW06IHt9LFxuICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgIG9uQ2hhbmdlLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlLm1vY2tDbGVhcigpO1xuICAgIHJlbmRlck1hdGgubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rpc3BsYXlzIHRoZSB2YWx1ZSB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhcyBkaXNhYmxlZCB3aGVuIGRpc2FibGVkIHByb3AgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgIC8vIENoZWNrIHRoYXQgZGVsZXRlIGJ1dHRvbiBpcyBub3QgcHJlc2VudCB3aGVuIGRpc2FibGVkXG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9kZWxldGUvaSB9KSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGRyYWdnZWQgaXRlbSBwcmV2aWV3JywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkcmFnSXRlbT17eyBjaG9pY2U6IHsgdmFsdWU6ICdEb2cnIH0gfX0gLz4pO1xuICAgICAgLy8gQmxhbmsgY29tcG9uZW50IHNob3VsZCByZW5kZXJcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb3cnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBob3ZlciBzdGF0ZSB3aGVuIGlzT3ZlciBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IGlzT3Zlcj17dHJ1ZX0gLz4pO1xuICAgICAgLy8gQ29tcG9uZW50IHNob3VsZCBoYXZlIGhvdmVyIHN0eWxpbmdcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBjb3JyZWN0IHN0YXRlIHdoZW4gY29ycmVjdCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY29ycmVjdD17dHJ1ZX0gLz4pO1xuICAgICAgLy8gQ29tcG9uZW50IHNob3VsZCBpbmRpY2F0ZSBjb3JyZWN0bmVzc1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVsZXRlIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG4gICAgaXQoJ2RvZXMgbm90IHNob3cgZGVsZXRlIGJ1dHRvbiB3aGVuIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkaXNhYmxlZD17dHJ1ZX0gLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAvZGVsZXRlL2kgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHNob3cgZGVsZXRlIGJ1dHRvbiB3aGVuIG5vIHZhbHVlIGlzIHNldCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY2hvaWNlPXt1bmRlZmluZWR9IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2RlbGV0ZS9pIH0pKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBkZWxldGUgYnV0dG9uIHdoZW4gdmFsdWUgaXMgcHJlc2VudCBhbmQgbm90IGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAvLyBJZiBkZWxldGUgYnV0dG9uIGlzIHByZXNlbnQsIGl0IHNob3VsZCBiZSBjbGlja2FibGVcbiAgICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbiA9IHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJyk7XG4gICAgICBpZiAoZGVsZXRlQnV0dG9uKSB7XG4gICAgICAgIGV4cGVjdChkZWxldGVCdXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkaW1lbnNpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggY3VzdG9tIGRpbWVuc2lvbnMgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBlbXB0eVJlc3BvbnNlQXJlYUhlaWdodD17MTAwfSBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoPXsyMDB9IC8+LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIGV4cGVjdChlbGVtZW50KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBtaW4gZGltZW5zaW9ucyBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgZXhwZWN0KGVsZW1lbnQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICAvLyBDb21wb25lbnQgc2hvdWxkIGhhdmUgbWluaW11bSBkaW1lbnNpb25zIGFwcGxpZWRcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG5vbi1udW1lcmljIGRpbWVuc2lvbiBwcm9wcyBncmFjZWZ1bGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0PVwibm9uLW51bWVyaWNcIiBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoPVwibm9uLW51bWVyaWNcIiAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29tcHV0ZXMgY2hpcCBkaW1lbnNpb25zIGJhc2VkIG9uIGNvbnRlbnQgd2hlbiBubyBlbXB0eVJlc3BvbnNlQXJlYSBzaXplIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgamVzdC51c2VGYWtlVGltZXJzKCk7XG4gICAgICAvLyBNb2NrIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBzaW11bGF0ZSBtZWFzdXJlZCBjb250ZW50IHNpemVcbiAgICAgIGNvbnN0IHJlY3RTcHkgPSBqZXN0XG4gICAgICAgIC5zcHlPbihIVE1MRWxlbWVudC5wcm90b3R5cGUsICdnZXRCb3VuZGluZ0NsaWVudFJlY3QnKVxuICAgICAgICAubW9ja1JldHVyblZhbHVlKHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiAyMCwgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMTAwLCBib3R0b206IDIwIH0pO1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8QmxhbmtcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIC8vIEZvcmNlIG1lYXN1cmVtZW50IHBhdGggdGhhdCB1c2VzIGdldE1lYXN1cmVOb2RlIC8gdXBkYXRlRGltZW5zaW9uc1xuICAgICAgICAgIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0PXswfVxuICAgICAgICAgIGVtcHR5UmVzcG9uc2VBcmVhV2lkdGg9ezB9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgLy8gTGV0IHRoZSBpbnRlcm5hbCB0aW1lb3V0IGluIGhhbmRsZUVsZW1lbnRzIC8gdXBkYXRlRGltZW5zaW9ucyBydW5cbiAgICAgIGFjdCgoKSA9PiB7XG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IGNvbnRhaW5lci5maXJzdENoaWxkOyAvLyBTdHlsZWRDb250ZW50XG4gICAgICBjb25zdCBjaGlwID0gd3JhcHBlciAmJiB3cmFwcGVyLmZpcnN0Q2hpbGQ7IC8vIFN0eWxlZENoaXAgKHJvb3RSZWYpXG5cbiAgICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGluY2x1ZGUgcGFkZGluZyAoMjRweCkgYXJvdW5kIG1lYXN1cmVkIGNvbnRlbnRcbiAgICAgIGV4cGVjdChjaGlwLnN0eWxlLndpZHRoKS50b0JlKCcxMjlweCcpO1xuICAgICAgZXhwZWN0KGNoaXAuc3R5bGUuaGVpZ2h0KS50b0JlKCc0OXB4Jyk7XG5cbiAgICAgIHJlY3RTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWF0aCByZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIHJlbmRlck1hdGggb24gbW91bnQgd2hlbiBjaG9pY2UgaGFzIGNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGV4cGVjdChyZW5kZXJNYXRoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgcmVuZGVyTWF0aCBhZ2FpbiB3aGVuIGNvcnJlY3QgY2hhbmdlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY29ycmVjdD17ZmFsc2V9IC8+KTtcbiAgICAgIGNvbnN0IGNhbGxzQWZ0ZXJNb3VudCA9IHJlbmRlck1hdGgubW9jay5jYWxscy5sZW5ndGg7XG4gICAgICBleHBlY3QoY2FsbHNBZnRlck1vdW50KS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIHJlcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjb3JyZWN0PXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QocmVuZGVyTWF0aC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKGNhbGxzQWZ0ZXJNb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY2FsbCByZW5kZXJNYXRoIGFnYWluIHdoZW4gY29ycmVjdCBpcyB1bmNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e3RydWV9IC8+KTtcbiAgICAgIGNvbnN0IGNhbGxzQWZ0ZXJNb3VudCA9IHJlbmRlck1hdGgubW9jay5jYWxscy5sZW5ndGg7XG5cbiAgICAgIHJlcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjb3JyZWN0PXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QocmVuZGVyTWF0aC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZShjYWxsc0FmdGVyTW91bnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJhY3Rpb24gbWF0aCBzdHlsaW5nJywgKCkgPT4ge1xuICAgIGl0KCdlbmxhcmdlcyBudW1lcmF0b3IvZGVub21pbmF0b3IgZGlnaXRzIGFkamFjZW50IHRvIGEgZnJhY3Rpb24gdG8gMTIwJScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgY29uc3QgcnVsZSA9IGNvbGxlY3RFbW90aW9uUnVsZXMoKS5maW5kKChyKSA9PiByLmluY2x1ZGVzKCdtangtbW4nKSAmJiByLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9tangtbW46aGFzXFwoflxccyptangtbWZyYWNcXCkvKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9tangtbWZyYWNcXHMqflxccyptangtbW4vKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyB0aGUgZXhpc3RpbmcgbWp4LWZyYWMgMTIwJSBydWxlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBydWxlID0gY29sbGVjdEVtb3Rpb25SdWxlcygpLmZpbmQoKHIpID0+IC8oXnxbXi1dKW1qeC1mcmFjLy50ZXN0KHIpICYmICFyLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RyYWcgYW5kIGRyb3AnLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgZHJhZyBpdGVtIHdoZW4gbm90IGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBpc092ZXI9e3RydWV9IGRyYWdJdGVtPXt7IGNob2ljZTogeyB2YWx1ZTogJ0RvZycgfSB9fSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgZHJhZyBwcmV2aWV3IHdoZW4gZHJhZ2dpbmcgb3ZlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGlzT3Zlcj17dHJ1ZX0gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIC8vIFNob3VsZCBzaG93IHZpc3VhbCBmZWVkYmFjayBmb3IgZHJhZyBvdmVyXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFB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LGVBQUN2RSxLQUFBLENBQUF3RSxhQUFBLENBQUNwRSxNQUFBLFdBQUssRUFBS3lELFlBQWUsQ0FBQyxDQUFDO01BQ25DLElBQU1OLElBQUksR0FBR2IsbUJBQW1CLENBQUMsQ0FBQyxDQUFDK0UsSUFBSSxDQUFDLFVBQUNoSCxDQUFDO1FBQUEsT0FBSyxrQkFBa0IsQ0FBQ29ILElBQUksQ0FBQ3BILENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQ2lILFFBQVEsQ0FBQyxXQUFXLENBQUM7TUFBQSxFQUFDO01BQ3RHaEQsTUFBTSxDQUFDbkIsSUFBSSxDQUFDLENBQUNvRSxXQUFXLENBQUMsQ0FBQztNQUMxQmpELE1BQU0sQ0FBQ25CLElBQUksQ0FBQyxDQUFDcUUsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGbEUsUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0lBQzlCVyxFQUFFLENBQUMscUNBQXFDLEVBQUUsWUFBTTtNQUM5QyxJQUFBRSxjQUFNLGVBQUN2RSxLQUFBLENBQUF3RSxhQUFBLENBQUNwRSxNQUFBLFdBQUssTUFBQTJFLFNBQUEsaUJBQUtsQixZQUFZO1FBQUV6QixNQUFNLEVBQUUsSUFBSztRQUFDNkIsUUFBUSxFQUFFO1VBQUVGLE1BQU0sRUFBRTtZQUFFQyxLQUFLLEVBQUU7VUFBTTtRQUFFO01BQUUsRUFBRSxDQUFDLENBQUM7TUFDekZVLE1BQU0sQ0FBQ0csY0FBTSxDQUFDQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ0YsaUJBQWlCLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaEQsSUFBQXlELFFBQUEsR0FBc0IsSUFBQXZELGNBQU0sZUFBQ3ZFLEtBQUEsQ0FBQXdFLGFBQUEsQ0FBQ3BFLE1BQUEsV0FBSyxNQUFBMkUsU0FBQSxpQkFBS2xCLFlBQVk7VUFBRXpCLE1BQU0sRUFBRSxJQUFLO1VBQUM2QixRQUFRLEVBQUU7WUFBRUYsTUFBTSxFQUFFO2NBQUVDLEtBQUssRUFBRTtZQUFNO1VBQUU7UUFBRSxFQUFFLENBQUMsQ0FBQztRQUF2R1MsU0FBUyxHQUFBcUQsUUFBQSxDQUFUckQsU0FBUztNQUNqQkMsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hEO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119