@pie-lib/editable-html-tip-tap 1.1.1-next.1 → 1.1.1-next.3

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 (155) hide show
  1. package/LICENSE.md +5 -0
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/components/CharacterPicker.js +10 -24
  4. package/lib/components/CharacterPicker.js.map +1 -1
  5. package/lib/components/EditableHtml.js +0 -17
  6. package/lib/components/EditableHtml.js.map +1 -1
  7. package/lib/components/MenuBar.js +0 -17
  8. package/lib/components/MenuBar.js.map +1 -1
  9. package/lib/components/TiptapContainer.js +4 -17
  10. package/lib/components/TiptapContainer.js.map +1 -1
  11. package/lib/components/characters/characterUtils.js +0 -2
  12. package/lib/components/characters/characterUtils.js.map +1 -1
  13. package/lib/components/characters/custom-popper.js +0 -1
  14. package/lib/components/characters/custom-popper.js.map +1 -1
  15. package/lib/components/common/done-button.js +0 -1
  16. package/lib/components/common/done-button.js.map +1 -1
  17. package/lib/components/common/toolbar-buttons.js +0 -12
  18. package/lib/components/common/toolbar-buttons.js.map +1 -1
  19. package/lib/components/icons/CssIcon.js +0 -1
  20. package/lib/components/icons/CssIcon.js.map +1 -1
  21. package/lib/components/icons/RespArea.js +0 -10
  22. package/lib/components/icons/RespArea.js.map +1 -1
  23. package/lib/components/icons/TableIcons.js +0 -1
  24. package/lib/components/icons/TableIcons.js.map +1 -1
  25. package/lib/components/icons/TextAlign.js +0 -7
  26. package/lib/components/icons/TextAlign.js.map +1 -1
  27. package/lib/components/image/AltDialog.js +0 -5
  28. package/lib/components/image/AltDialog.js.map +1 -1
  29. package/lib/components/image/ImageToolbar.js +0 -13
  30. package/lib/components/image/ImageToolbar.js.map +1 -1
  31. package/lib/components/image/InsertImageHandler.js +0 -10
  32. package/lib/components/image/InsertImageHandler.js.map +1 -1
  33. package/lib/components/media/MediaDialog.js +0 -19
  34. package/lib/components/media/MediaDialog.js.map +1 -1
  35. package/lib/components/media/MediaToolbar.js +0 -2
  36. package/lib/components/media/MediaToolbar.js.map +1 -1
  37. package/lib/components/media/MediaWrapper.js +0 -11
  38. package/lib/components/media/MediaWrapper.js.map +1 -1
  39. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +2 -12
  40. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -1
  41. package/lib/components/respArea/DragInTheBlank/choice.js +0 -8
  42. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
  43. package/lib/components/respArea/ExplicitConstructedResponse.js +0 -8
  44. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -1
  45. package/lib/components/respArea/InlineDropdown.js +0 -8
  46. package/lib/components/respArea/InlineDropdown.js.map +1 -1
  47. package/lib/components/respArea/ToolbarIcon.js +0 -10
  48. package/lib/components/respArea/ToolbarIcon.js.map +1 -1
  49. package/lib/constants.js +0 -1
  50. package/lib/constants.js.map +1 -1
  51. package/lib/extensions/css.js +0 -11
  52. package/lib/extensions/css.js.map +1 -1
  53. package/lib/extensions/custom-toolbar-wrapper.js +1 -19
  54. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -1
  55. package/lib/extensions/extended-table.js +1 -5
  56. package/lib/extensions/extended-table.js.map +1 -1
  57. package/lib/extensions/image-component.js +4 -21
  58. package/lib/extensions/image-component.js.map +1 -1
  59. package/lib/extensions/image.js +0 -11
  60. package/lib/extensions/image.js.map +1 -1
  61. package/lib/extensions/index.js +3 -12
  62. package/lib/extensions/index.js.map +1 -1
  63. package/lib/extensions/math.js +0 -16
  64. package/lib/extensions/math.js.map +1 -1
  65. package/lib/extensions/media.js +0 -15
  66. package/lib/extensions/media.js.map +1 -1
  67. package/lib/extensions/responseArea.js +0 -23
  68. package/lib/extensions/responseArea.js.map +1 -1
  69. package/lib/index.js +0 -7
  70. package/lib/index.js.map +1 -1
  71. package/lib/styles/editorContainerStyles.js +0 -2
  72. package/lib/styles/editorContainerStyles.js.map +1 -1
  73. package/lib/theme.js +0 -1
  74. package/lib/theme.js.map +1 -1
  75. package/lib/utils/size.js +0 -6
  76. package/lib/utils/size.js.map +1 -1
  77. package/package.json +9 -9
  78. package/src/__tests__/constants.test.js +1 -2
  79. package/src/__tests__/extensions.test.js +1 -1
  80. package/src/__tests__/index.test.jsx +1 -1
  81. package/src/components/CharacterPicker.jsx +11 -8
  82. package/src/components/EditableHtml.jsx +2 -2
  83. package/src/components/MenuBar.jsx +32 -186
  84. package/src/components/TiptapContainer.jsx +4 -1
  85. package/src/components/__tests__/AltDialog.test.jsx +1 -1
  86. package/src/components/__tests__/CharacterPicker.test.jsx +5 -3
  87. package/src/components/__tests__/DragInTheBlank.test.jsx +1 -1
  88. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +1 -1
  89. package/src/components/__tests__/ImageToolbar.test.jsx +1 -1
  90. package/src/components/__tests__/InlineDropdown.test.jsx +1 -1
  91. package/src/components/__tests__/MediaDialog.test.jsx +1 -1
  92. package/src/components/__tests__/MediaToolbar.test.jsx +1 -1
  93. package/src/components/__tests__/MenuBar.test.jsx +1 -1
  94. package/src/components/__tests__/TableIcons.test.jsx +1 -1
  95. package/src/components/__tests__/TextAlign.test.jsx +2 -2
  96. package/src/components/__tests__/choice.test.jsx +1 -1
  97. package/src/components/__tests__/done-button.test.jsx +2 -2
  98. package/src/components/__tests__/toolbar-buttons.test.jsx +2 -2
  99. package/src/components/image/AltDialog.jsx +1 -1
  100. package/src/components/image/InsertImageHandler.js +1 -1
  101. package/src/components/media/MediaDialog.js +4 -15
  102. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +1 -1
  103. package/src/components/respArea/DragInTheBlank/choice.jsx +34 -27
  104. package/src/components/respArea/ExplicitConstructedResponse.jsx +1 -1
  105. package/src/components/respArea/InlineDropdown.jsx +2 -3
  106. package/src/extensions/__tests__/custom-toolbar-wrapper.test.jsx +1 -1
  107. package/src/extensions/__tests__/extended-table.test.js +0 -21
  108. package/src/extensions/__tests__/image-component.test.jsx +1 -1
  109. package/src/extensions/__tests__/media.test.js +1 -1
  110. package/src/extensions/__tests__/responseArea.test.js +2 -2
  111. package/src/extensions/css.js +25 -23
  112. package/src/extensions/custom-toolbar-wrapper.jsx +1 -2
  113. package/src/extensions/extended-table.js +0 -3
  114. package/src/extensions/image-component.jsx +2 -2
  115. package/src/extensions/image.js +8 -6
  116. package/src/extensions/index.js +1 -3
  117. package/src/extensions/math.js +29 -27
  118. package/src/extensions/media.js +12 -14
  119. package/src/extensions/responseArea.js +91 -86
  120. package/src/styles/editorContainerStyles.js +0 -1
  121. package/lib/__tests__/EditableHtml.test.js +0 -374
  122. package/lib/__tests__/constants.test.js +0 -28
  123. package/lib/__tests__/extensions.test.js +0 -214
  124. package/lib/__tests__/index.test.js +0 -246
  125. package/lib/__tests__/size-utils.test.js +0 -57
  126. package/lib/__tests__/theme.test.js +0 -17
  127. package/lib/components/__tests__/AltDialog.test.js +0 -201
  128. package/lib/components/__tests__/CharacterPicker.test.js +0 -313
  129. package/lib/components/__tests__/CssIcon.test.js +0 -58
  130. package/lib/components/__tests__/DragInTheBlank.test.js +0 -309
  131. package/lib/components/__tests__/ExplicitConstructedResponse.test.js +0 -263
  132. package/lib/components/__tests__/ImageToolbar.test.js +0 -195
  133. package/lib/components/__tests__/InlineDropdown.test.js +0 -297
  134. package/lib/components/__tests__/InsertImageHandler.test.js +0 -162
  135. package/lib/components/__tests__/MediaDialog.test.js +0 -435
  136. package/lib/components/__tests__/MediaToolbar.test.js +0 -126
  137. package/lib/components/__tests__/MediaWrapper.test.js +0 -96
  138. package/lib/components/__tests__/MenuBar.test.js +0 -459
  139. package/lib/components/__tests__/RespArea.test.js +0 -171
  140. package/lib/components/__tests__/TableIcons.test.js +0 -153
  141. package/lib/components/__tests__/TextAlign.test.js +0 -216
  142. package/lib/components/__tests__/TiptapContainer.test.js +0 -196
  143. package/lib/components/__tests__/characterUtils.test.js +0 -189
  144. package/lib/components/__tests__/choice.test.js +0 -213
  145. package/lib/components/__tests__/custom-popper.test.js +0 -108
  146. package/lib/components/__tests__/done-button.test.js +0 -72
  147. package/lib/components/__tests__/toolbar-buttons.test.js +0 -277
  148. package/lib/extensions/__tests__/component.test.js +0 -314
  149. package/lib/extensions/__tests__/css.test.js +0 -218
  150. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +0 -185
  151. package/lib/extensions/__tests__/extended-table.test.js +0 -114
  152. package/lib/extensions/__tests__/image.test.js +0 -178
  153. package/lib/extensions/__tests__/media.test.js +0 -296
  154. package/lib/extensions/__tests__/responseArea.test.js +0 -332
  155. package/lib/extensions/component.js +0 -308
@@ -1,196 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
5
- var _react = _interopRequireDefault(require("react"));
6
- var _react2 = require("@testing-library/react");
7
- var _TiptapContainer = _interopRequireDefault(require("../TiptapContainer"));
8
- jest.mock('../MenuBar', function () {
9
- return {
10
- __esModule: true,
11
- "default": function _default(_ref) {
12
- var editor = _ref.editor,
13
- toolbarOpts = _ref.toolbarOpts;
14
- return /*#__PURE__*/_react["default"].createElement("div", {
15
- "data-testid": "styled-menu-bar"
16
- }, "MenuBar for editor");
17
- }
18
- };
19
- });
20
- describe('TiptapContainer', function () {
21
- var mockEditor = {
22
- commands: {
23
- focus: jest.fn()
24
- }
25
- };
26
- var defaultProps = {
27
- editor: mockEditor,
28
- disabled: false,
29
- children: /*#__PURE__*/_react["default"].createElement("div", {
30
- "data-testid": "editor-content"
31
- }, "Editor content"),
32
- activePlugins: ['bold', 'italic'],
33
- toolbarOpts: {},
34
- responseAreaProps: {}
35
- };
36
- beforeEach(function () {
37
- jest.clearAllMocks();
38
- });
39
- it('renders without crashing', function () {
40
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], defaultProps)),
41
- container = _render.container;
42
- expect(container).toBeInTheDocument();
43
- });
44
- it('renders children', function () {
45
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], defaultProps)),
46
- getByTestId = _render2.getByTestId;
47
- expect(getByTestId('editor-content')).toBeInTheDocument();
48
- });
49
- it('renders MenuBar when editor is provided', function () {
50
- var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], defaultProps)),
51
- getByTestId = _render3.getByTestId;
52
- expect(getByTestId('styled-menu-bar')).toBeInTheDocument();
53
- });
54
- it('does not render MenuBar when editor is not provided', function () {
55
- var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
56
- editor: null
57
- }))),
58
- queryByTestId = _render4.queryByTestId;
59
- expect(queryByTestId('styled-menu-bar')).not.toBeInTheDocument();
60
- });
61
- it('applies noBorder style when toolbarOpts.noBorder is true', function () {
62
- var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
63
- toolbarOpts: {
64
- noBorder: true
65
- }
66
- }))),
67
- container = _render5.container;
68
- var root = container.firstChild;
69
- expect(root).toHaveStyle({
70
- border: 'none'
71
- });
72
- });
73
- it('applies error style when toolbarOpts.error is true', function () {
74
- var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
75
- toolbarOpts: {
76
- error: true
77
- }
78
- }))),
79
- container = _render6.container;
80
- expect(container.firstChild).toBeInTheDocument();
81
- });
82
- it('applies noPadding style when toolbarOpts.noPadding is true', function () {
83
- var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
84
- toolbarOpts: {
85
- noPadding: true
86
- }
87
- }))),
88
- container = _render7.container;
89
- var children = container.querySelector('div > div > div');
90
- expect(children).toHaveStyle({
91
- padding: '0'
92
- });
93
- });
94
- it('disables scrollbar when disableScrollbar is true', function () {
95
- var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
96
- disableScrollbar: true
97
- }))),
98
- container = _render8.container;
99
- expect(container).toBeInTheDocument();
100
- });
101
- it('applies width from props', function () {
102
- var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
103
- width: 500
104
- }))),
105
- container = _render9.container;
106
- var root = container.firstChild;
107
- expect(root).toHaveStyle({
108
- width: '500px'
109
- });
110
- });
111
- it('applies minWidth from props', function () {
112
- var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
113
- minWidth: 300
114
- }))),
115
- container = _render0.container;
116
- var root = container.firstChild;
117
- expect(root).toHaveStyle({
118
- minWidth: '300px'
119
- });
120
- });
121
- it('applies maxWidth from props', function () {
122
- var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
123
- maxWidth: 800
124
- }))),
125
- container = _render1.container;
126
- var root = container.firstChild;
127
- expect(root).toHaveStyle({
128
- maxWidth: '800px'
129
- });
130
- });
131
- it('applies height from props', function () {
132
- var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
133
- height: 400
134
- }))),
135
- container = _render10.container;
136
- var root = container.firstChild;
137
- expect(root).toBeInTheDocument();
138
- });
139
- it('applies minHeight from props', function () {
140
- var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
141
- minHeight: 200
142
- }))),
143
- container = _render11.container;
144
- var root = container.firstChild;
145
- expect(root).toBeInTheDocument();
146
- });
147
- it('applies maxHeight from props', function () {
148
- var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
149
- maxHeight: 600
150
- }))),
151
- container = _render12.container;
152
- var root = container.firstChild;
153
- expect(root).toBeInTheDocument();
154
- });
155
- it('focuses editor on mount when autoFocus is true', function () {
156
- jest.useFakeTimers();
157
- var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
158
- autoFocus: true
159
- }))),
160
- container = _render13.container;
161
- jest.runAllTimers();
162
- // Just verify the component rendered with autoFocus
163
- expect(container).toBeInTheDocument();
164
- jest.useRealTimers();
165
- });
166
- it('does not focus editor when autoFocus is false', function () {
167
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
168
- autoFocus: false
169
- })));
170
- expect(mockEditor.commands.focus).not.toHaveBeenCalled();
171
- });
172
- it('passes className to root element', function () {
173
- var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
174
- className: "custom-class"
175
- }))),
176
- container = _render14.container;
177
- expect(container.firstChild).toHaveClass('custom-class');
178
- });
179
- it('handles width as string with units', function () {
180
- var _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
181
- width: "50%"
182
- }))),
183
- container = _render15.container;
184
- // Width is applied via styled component, just verify it rendered
185
- expect(container).toBeInTheDocument();
186
- });
187
- it('passes onChange to MenuBar', function () {
188
- var onChange = jest.fn();
189
- var _render16 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_TiptapContainer["default"], (0, _extends2["default"])({}, defaultProps, {
190
- onChange: onChange
191
- }))),
192
- getByTestId = _render16.getByTestId;
193
- expect(getByTestId('styled-menu-bar')).toBeInTheDocument();
194
- });
195
- });
196
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfVGlwdGFwQ29udGFpbmVyIiwiamVzdCIsIm1vY2siLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9yZWYiLCJlZGl0b3IiLCJ0b29sYmFyT3B0cyIsImNyZWF0ZUVsZW1lbnQiLCJkZXNjcmliZSIsIm1vY2tFZGl0b3IiLCJjb21tYW5kcyIsImZvY3VzIiwiZm4iLCJkZWZhdWx0UHJvcHMiLCJkaXNhYmxlZCIsImNoaWxkcmVuIiwiYWN0aXZlUGx1Z2lucyIsInJlc3BvbnNlQXJlYVByb3BzIiwiYmVmb3JlRWFjaCIsImNsZWFyQWxsTW9ja3MiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjb250YWluZXIiLCJleHBlY3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXIyIiwiZ2V0QnlUZXN0SWQiLCJfcmVuZGVyMyIsIl9yZW5kZXI0IiwiX2V4dGVuZHMyIiwicXVlcnlCeVRlc3RJZCIsIm5vdCIsIl9yZW5kZXI1Iiwibm9Cb3JkZXIiLCJyb290IiwiZmlyc3RDaGlsZCIsInRvSGF2ZVN0eWxlIiwiYm9yZGVyIiwiX3JlbmRlcjYiLCJlcnJvciIsIl9yZW5kZXI3Iiwibm9QYWRkaW5nIiwicXVlcnlTZWxlY3RvciIsInBhZGRpbmciLCJfcmVuZGVyOCIsImRpc2FibGVTY3JvbGxiYXIiLCJfcmVuZGVyOSIsIndpZHRoIiwiX3JlbmRlcjAiLCJtaW5XaWR0aCIsIl9yZW5kZXIxIiwibWF4V2lkdGgiLCJfcmVuZGVyMTAiLCJoZWlnaHQiLCJfcmVuZGVyMTEiLCJtaW5IZWlnaHQiLCJfcmVuZGVyMTIiLCJtYXhIZWlnaHQiLCJ1c2VGYWtlVGltZXJzIiwiX3JlbmRlcjEzIiwiYXV0b0ZvY3VzIiwicnVuQWxsVGltZXJzIiwidXNlUmVhbFRpbWVycyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJfcmVuZGVyMTQiLCJjbGFzc05hbWUiLCJ0b0hhdmVDbGFzcyIsIl9yZW5kZXIxNSIsIm9uQ2hhbmdlIiwiX3JlbmRlcjE2Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvX190ZXN0c19fL1RpcHRhcENvbnRhaW5lci50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgVGlwdGFwQ29udGFpbmVyIGZyb20gJy4uL1RpcHRhcENvbnRhaW5lcic7XG5cbmplc3QubW9jaygnLi4vTWVudUJhcicsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6ICh7IGVkaXRvciwgdG9vbGJhck9wdHMgfSkgPT4gPGRpdiBkYXRhLXRlc3RpZD1cInN0eWxlZC1tZW51LWJhclwiPk1lbnVCYXIgZm9yIGVkaXRvcjwvZGl2Pixcbn0pKTtcblxuZGVzY3JpYmUoJ1RpcHRhcENvbnRhaW5lcicsICgpID0+IHtcbiAgY29uc3QgbW9ja0VkaXRvciA9IHtcbiAgICBjb21tYW5kczoge1xuICAgICAgZm9jdXM6IGplc3QuZm4oKSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBlZGl0b3I6IG1vY2tFZGl0b3IsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiA8ZGl2IGRhdGEtdGVzdGlkPVwiZWRpdG9yLWNvbnRlbnRcIj5FZGl0b3IgY29udGVudDwvZGl2PixcbiAgICBhY3RpdmVQbHVnaW5zOiBbJ2JvbGQnLCAnaXRhbGljJ10sXG4gICAgdG9vbGJhck9wdHM6IHt9LFxuICAgIHJlc3BvbnNlQXJlYVByb3BzOiB7fSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxUaXB0YXBDb250YWluZXIgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ2VkaXRvci1jb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIE1lbnVCYXIgd2hlbiBlZGl0b3IgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBnZXRCeVRlc3RJZCB9ID0gcmVuZGVyKDxUaXB0YXBDb250YWluZXIgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGV4cGVjdChnZXRCeVRlc3RJZCgnc3R5bGVkLW1lbnUtYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCByZW5kZXIgTWVudUJhciB3aGVuIGVkaXRvciBpcyBub3QgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeUJ5VGVzdElkIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSBlZGl0b3I9e251bGx9IC8+KTtcbiAgICBleHBlY3QocXVlcnlCeVRlc3RJZCgnc3R5bGVkLW1lbnUtYmFyJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnYXBwbGllcyBub0JvcmRlciBzdHlsZSB3aGVuIHRvb2xiYXJPcHRzLm5vQm9yZGVyIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IHRvb2xiYXJPcHRzPXt7IG5vQm9yZGVyOiB0cnVlIH19IC8+KTtcbiAgICBjb25zdCByb290ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgZXhwZWN0KHJvb3QpLnRvSGF2ZVN0eWxlKHsgYm9yZGVyOiAnbm9uZScgfSk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGVycm9yIHN0eWxlIHdoZW4gdG9vbGJhck9wdHMuZXJyb3IgaXMgdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxUaXB0YXBDb250YWluZXIgey4uLmRlZmF1bHRQcm9wc30gdG9vbGJhck9wdHM9e3sgZXJyb3I6IHRydWUgfX0gLz4pO1xuICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgbm9QYWRkaW5nIHN0eWxlIHdoZW4gdG9vbGJhck9wdHMubm9QYWRkaW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IHRvb2xiYXJPcHRzPXt7IG5vUGFkZGluZzogdHJ1ZSB9fSAvPik7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2ID4gZGl2ID4gZGl2Jyk7XG4gICAgZXhwZWN0KGNoaWxkcmVuKS50b0hhdmVTdHlsZSh7IHBhZGRpbmc6ICcwJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2FibGVzIHNjcm9sbGJhciB3aGVuIGRpc2FibGVTY3JvbGxiYXIgaXMgdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxUaXB0YXBDb250YWluZXIgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZVNjcm9sbGJhcj17dHJ1ZX0gLz4pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIHdpZHRoIGZyb20gcHJvcHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IHdpZHRoPXs1MDB9IC8+KTtcbiAgICBjb25zdCByb290ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgZXhwZWN0KHJvb3QpLnRvSGF2ZVN0eWxlKHsgd2lkdGg6ICc1MDBweCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIG1pbldpZHRoIGZyb20gcHJvcHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IG1pbldpZHRoPXszMDB9IC8+KTtcbiAgICBjb25zdCByb290ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgZXhwZWN0KHJvb3QpLnRvSGF2ZVN0eWxlKHsgbWluV2lkdGg6ICczMDBweCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIG1heFdpZHRoIGZyb20gcHJvcHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IG1heFdpZHRoPXs4MDB9IC8+KTtcbiAgICBjb25zdCByb290ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgZXhwZWN0KHJvb3QpLnRvSGF2ZVN0eWxlKHsgbWF4V2lkdGg6ICc4MDBweCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdhcHBsaWVzIGhlaWdodCBmcm9tIHByb3BzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSBoZWlnaHQ9ezQwMH0gLz4pO1xuICAgIGNvbnN0IHJvb3QgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICBleHBlY3Qocm9vdCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgbWluSGVpZ2h0IGZyb20gcHJvcHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IG1pbkhlaWdodD17MjAwfSAvPik7XG4gICAgY29uc3Qgcm9vdCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgIGV4cGVjdChyb290KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnYXBwbGllcyBtYXhIZWlnaHQgZnJvbSBwcm9wcycsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxUaXB0YXBDb250YWluZXIgey4uLmRlZmF1bHRQcm9wc30gbWF4SGVpZ2h0PXs2MDB9IC8+KTtcbiAgICBjb25zdCByb290ID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgZXhwZWN0KHJvb3QpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdmb2N1c2VzIGVkaXRvciBvbiBtb3VudCB3aGVuIGF1dG9Gb2N1cyBpcyB0cnVlJywgKCkgPT4ge1xuICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSBhdXRvRm9jdXM9e3RydWV9IC8+KTtcbiAgICBqZXN0LnJ1bkFsbFRpbWVycygpO1xuICAgIC8vIEp1c3QgdmVyaWZ5IHRoZSBjb21wb25lbnQgcmVuZGVyZWQgd2l0aCBhdXRvRm9jdXNcbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgZm9jdXMgZWRpdG9yIHdoZW4gYXV0b0ZvY3VzIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgIHJlbmRlcig8VGlwdGFwQ29udGFpbmVyIHsuLi5kZWZhdWx0UHJvcHN9IGF1dG9Gb2N1cz17ZmFsc2V9IC8+KTtcbiAgICBleHBlY3QobW9ja0VkaXRvci5jb21tYW5kcy5mb2N1cykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBjbGFzc05hbWUgdG8gcm9vdCBlbGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSBjbGFzc05hbWU9XCJjdXN0b20tY2xhc3NcIiAvPik7XG4gICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0hhdmVDbGFzcygnY3VzdG9tLWNsYXNzJyk7XG4gIH0pO1xuXG4gIGl0KCdoYW5kbGVzIHdpZHRoIGFzIHN0cmluZyB3aXRoIHVuaXRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSB3aWR0aD1cIjUwJVwiIC8+KTtcbiAgICAvLyBXaWR0aCBpcyBhcHBsaWVkIHZpYSBzdHlsZWQgY29tcG9uZW50LCBqdXN0IHZlcmlmeSBpdCByZW5kZXJlZFxuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdwYXNzZXMgb25DaGFuZ2UgdG8gTWVudUJhcicsICgpID0+IHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICBjb25zdCB7IGdldEJ5VGVzdElkIH0gPSByZW5kZXIoPFRpcHRhcENvbnRhaW5lciB7Li4uZGVmYXVsdFByb3BzfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ3N0eWxlZC1tZW51LWJhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxP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
@@ -1,189 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- require("core-js/modules/es.symbol.js");
5
- require("core-js/modules/es.symbol.description.js");
6
- require("core-js/modules/es.array.filter.js");
7
- require("core-js/modules/es.array.find.js");
8
- require("core-js/modules/es.array.flat.js");
9
- require("core-js/modules/es.array.for-each.js");
10
- require("core-js/modules/es.array.is-array.js");
11
- require("core-js/modules/es.array.map.js");
12
- require("core-js/modules/es.array.unscopables.flat.js");
13
- require("core-js/modules/es.object.to-string.js");
14
- require("core-js/modules/web.dom-collections.for-each.js");
15
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
16
- var _characterUtils = require("../characters/characterUtils");
17
- describe('characterUtils', function () {
18
- describe('spanishConfig', function () {
19
- it('exports spanishConfig object', function () {
20
- expect(_characterUtils.spanishConfig).toBeDefined();
21
- expect((0, _typeof2["default"])(_characterUtils.spanishConfig)).toBe('object');
22
- });
23
- it('has characters array', function () {
24
- expect(_characterUtils.spanishConfig).toHaveProperty('characters');
25
- expect(Array.isArray(_characterUtils.spanishConfig.characters)).toBe(true);
26
- });
27
- it('has correct character structure', function () {
28
- expect(_characterUtils.spanishConfig.characters.length).toBeGreaterThan(0);
29
- _characterUtils.spanishConfig.characters.forEach(function (row) {
30
- expect(Array.isArray(row)).toBe(true);
31
- });
32
- });
33
- it('includes Spanish characters', function () {
34
- var allChars = _characterUtils.spanishConfig.characters.flat();
35
- expect(allChars).toContain('á');
36
- expect(allChars).toContain('é');
37
- expect(allChars).toContain('í');
38
- expect(allChars).toContain('ó');
39
- expect(allChars).toContain('ú');
40
- expect(allChars).toContain('ñ');
41
- expect(allChars).toContain('Ñ');
42
- });
43
- it('includes accented uppercase letters', function () {
44
- var allChars = _characterUtils.spanishConfig.characters.flat();
45
- expect(allChars).toContain('Á');
46
- expect(allChars).toContain('É');
47
- expect(allChars).toContain('Í');
48
- expect(allChars).toContain('Ó');
49
- expect(allChars).toContain('Ú');
50
- });
51
- it('includes special punctuation', function () {
52
- var allChars = _characterUtils.spanishConfig.characters.flat();
53
- expect(allChars).toContain('¿');
54
- expect(allChars).toContain('¡');
55
- expect(allChars).toContain('«');
56
- expect(allChars).toContain('»');
57
- });
58
- });
59
- describe('specialConfig', function () {
60
- it('exports specialConfig object', function () {
61
- expect(_characterUtils.specialConfig).toBeDefined();
62
- expect((0, _typeof2["default"])(_characterUtils.specialConfig)).toBe('object');
63
- });
64
- it('has hasPreview property set to true', function () {
65
- expect(_characterUtils.specialConfig).toHaveProperty('hasPreview', true);
66
- });
67
- it('has characters array', function () {
68
- expect(_characterUtils.specialConfig).toHaveProperty('characters');
69
- expect(Array.isArray(_characterUtils.specialConfig.characters)).toBe(true);
70
- });
71
- it('has correct character structure with metadata', function () {
72
- expect(_characterUtils.specialConfig.characters.length).toBeGreaterThan(0);
73
- _characterUtils.specialConfig.characters.forEach(function (row) {
74
- expect(Array.isArray(row)).toBe(true);
75
- row.forEach(function (_char) {
76
- expect(_char).toHaveProperty('unicode');
77
- expect(_char).toHaveProperty('description');
78
- expect(_char).toHaveProperty('write');
79
- expect(_char).toHaveProperty('label');
80
- });
81
- });
82
- });
83
- it('includes currency symbols', function () {
84
- var allChars = _characterUtils.specialConfig.characters.flat();
85
- var euroChar = allChars.find(function (c) {
86
- return c.write === '€';
87
- });
88
- expect(euroChar).toBeDefined();
89
- expect(euroChar.unicode).toBe('U+20AC');
90
- expect(euroChar.description).toBe('EURO SIGN');
91
- var centChar = allChars.find(function (c) {
92
- return c.write === '¢';
93
- });
94
- expect(centChar).toBeDefined();
95
- var poundChar = allChars.find(function (c) {
96
- return c.write === '£';
97
- });
98
- expect(poundChar).toBeDefined();
99
- var yenChar = allChars.find(function (c) {
100
- return c.write === '¥';
101
- });
102
- expect(yenChar).toBeDefined();
103
- });
104
- it('includes accented characters', function () {
105
- var allChars = _characterUtils.specialConfig.characters.flat();
106
- var chars = ['á', 'é', 'í', 'ó', 'ú', 'ñ'];
107
- chars.forEach(function (_char2) {
108
- var found = allChars.find(function (c) {
109
- return c.write === _char2;
110
- });
111
- expect(found).toBeDefined();
112
- });
113
- });
114
- it('includes space characters', function () {
115
- var allChars = _characterUtils.specialConfig.characters.flat();
116
- var descriptions = allChars.map(function (c) {
117
- return c.description;
118
- });
119
- expect(descriptions).toContain('NO-BREAK SPACE');
120
- expect(descriptions).toContain('HAIR SPACE');
121
- expect(descriptions).toContain('THIN SPACE');
122
- expect(descriptions).toContain('EM SPACE');
123
- });
124
- it('includes diacritics', function () {
125
- var allChars = _characterUtils.specialConfig.characters.flat();
126
- var acuteAccent = allChars.find(function (c) {
127
- return c.description === 'ACUTE ACCENT';
128
- });
129
- expect(acuteAccent).toBeDefined();
130
- var circumflex = allChars.find(function (c) {
131
- return c.description === 'CIRCUMFLEX ACCENT';
132
- });
133
- expect(circumflex).toBeDefined();
134
- var grave = allChars.find(function (c) {
135
- return c.description === 'GRAVE ACCENT';
136
- });
137
- expect(grave).toBeDefined();
138
- var diaeresis = allChars.find(function (c) {
139
- return c.description === 'DIAERESIS';
140
- });
141
- expect(diaeresis).toBeDefined();
142
- });
143
- it('includes punctuation marks', function () {
144
- var allChars = _characterUtils.specialConfig.characters.flat();
145
- var descriptions = allChars.map(function (c) {
146
- return c.description;
147
- });
148
- expect(descriptions).toContain('INVERTED QUESTION MARK');
149
- expect(descriptions).toContain('INVERTED EXCLAMATION MARK');
150
- expect(descriptions).toContain('SECTION SIGN');
151
- expect(descriptions).toContain('BULLET');
152
- expect(descriptions).toContain('HORIZONTAL ELLIPSIS');
153
- });
154
- it('includes quotation marks', function () {
155
- var allChars = _characterUtils.specialConfig.characters.flat();
156
- var leftQuote = allChars.find(function (c) {
157
- return c.description === 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK';
158
- });
159
- expect(leftQuote).toBeDefined();
160
- var rightQuote = allChars.find(function (c) {
161
- return c.description === 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK';
162
- });
163
- expect(rightQuote).toBeDefined();
164
- });
165
- it('includes dashes', function () {
166
- var allChars = _characterUtils.specialConfig.characters.flat();
167
- var enDash = allChars.find(function (c) {
168
- return c.description === 'EN DASH';
169
- });
170
- expect(enDash).toBeDefined();
171
- var emDash = allChars.find(function (c) {
172
- return c.description === 'EM DASH';
173
- });
174
- expect(emDash).toBeDefined();
175
- var minus = allChars.find(function (c) {
176
- return c.description === 'MINUS SIGN';
177
- });
178
- expect(minus).toBeDefined();
179
- });
180
- it('some characters have extraProps', function () {
181
- var allChars = _characterUtils.specialConfig.characters.flat();
182
- var charsWithExtraProps = allChars.filter(function (c) {
183
- return c.extraProps;
184
- });
185
- expect(charsWithExtraProps.length).toBeGreaterThan(0);
186
- });
187
- });
188
- });
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hhcmFjdGVyVXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInNwYW5pc2hDb25maWciLCJ0b0JlRGVmaW5lZCIsIl90eXBlb2YyIiwidG9CZSIsInRvSGF2ZVByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5IiwiY2hhcmFjdGVycyIsImxlbmd0aCIsInRvQmVHcmVhdGVyVGhhbiIsImZvckVhY2giLCJyb3ciLCJhbGxDaGFycyIsImZsYXQiLCJ0b0NvbnRhaW4iLCJzcGVjaWFsQ29uZmlnIiwiY2hhciIsImV1cm9DaGFyIiwiZmluZCIsImMiLCJ3cml0ZSIsInVuaWNvZGUiLCJkZXNjcmlwdGlvbiIsImNlbnRDaGFyIiwicG91bmRDaGFyIiwieWVuQ2hhciIsImNoYXJzIiwiZm91bmQiLCJkZXNjcmlwdGlvbnMiLCJtYXAiLCJhY3V0ZUFjY2VudCIsImNpcmN1bWZsZXgiLCJncmF2ZSIsImRpYWVyZXNpcyIsImxlZnRRdW90ZSIsInJpZ2h0UXVvdGUiLCJlbkRhc2giLCJlbURhc2giLCJtaW51cyIsImNoYXJzV2l0aEV4dHJhUHJvcHMiLCJmaWx0ZXIiLCJleHRyYVByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvX190ZXN0c19fL2NoYXJhY3RlclV0aWxzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3BhbmlzaENvbmZpZywgc3BlY2lhbENvbmZpZyB9IGZyb20gJy4uL2NoYXJhY3RlcnMvY2hhcmFjdGVyVXRpbHMnO1xuXG5kZXNjcmliZSgnY2hhcmFjdGVyVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzcGFuaXNoQ29uZmlnJywgKCkgPT4ge1xuICAgIGl0KCdleHBvcnRzIHNwYW5pc2hDb25maWcgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNwYW5pc2hDb25maWcpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QodHlwZW9mIHNwYW5pc2hDb25maWcpLnRvQmUoJ29iamVjdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBjaGFyYWN0ZXJzIGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNwYW5pc2hDb25maWcpLnRvSGF2ZVByb3BlcnR5KCdjaGFyYWN0ZXJzJyk7XG4gICAgICBleHBlY3QoQXJyYXkuaXNBcnJheShzcGFuaXNoQ29uZmlnLmNoYXJhY3RlcnMpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBjb3JyZWN0IGNoYXJhY3RlciBzdHJ1Y3R1cmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3BhbmlzaENvbmZpZy5jaGFyYWN0ZXJzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgc3BhbmlzaENvbmZpZy5jaGFyYWN0ZXJzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBleHBlY3QoQXJyYXkuaXNBcnJheShyb3cpKS50b0JlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgU3BhbmlzaCBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsQ2hhcnMgPSBzcGFuaXNoQ29uZmlnLmNoYXJhY3RlcnMuZmxhdCgpO1xuICAgICAgZXhwZWN0KGFsbENoYXJzKS50b0NvbnRhaW4oJ8OhJyk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignw6knKTtcbiAgICAgIGV4cGVjdChhbGxDaGFycykudG9Db250YWluKCfDrScpO1xuICAgICAgZXhwZWN0KGFsbENoYXJzKS50b0NvbnRhaW4oJ8OzJyk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignw7onKTtcbiAgICAgIGV4cGVjdChhbGxDaGFycykudG9Db250YWluKCfDsScpO1xuICAgICAgZXhwZWN0KGFsbENoYXJzKS50b0NvbnRhaW4oJ8ORJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgYWNjZW50ZWQgdXBwZXJjYXNlIGxldHRlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhbGxDaGFycyA9IHNwYW5pc2hDb25maWcuY2hhcmFjdGVycy5mbGF0KCk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignw4EnKTtcbiAgICAgIGV4cGVjdChhbGxDaGFycykudG9Db250YWluKCfDiScpO1xuICAgICAgZXhwZWN0KGFsbENoYXJzKS50b0NvbnRhaW4oJ8ONJyk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignw5MnKTtcbiAgICAgIGV4cGVjdChhbGxDaGFycykudG9Db250YWluKCfDmicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luY2x1ZGVzIHNwZWNpYWwgcHVuY3R1YXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBhbGxDaGFycyA9IHNwYW5pc2hDb25maWcuY2hhcmFjdGVycy5mbGF0KCk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignwr8nKTtcbiAgICAgIGV4cGVjdChhbGxDaGFycykudG9Db250YWluKCfCoScpO1xuICAgICAgZXhwZWN0KGFsbENoYXJzKS50b0NvbnRhaW4oJ8KrJyk7XG4gICAgICBleHBlY3QoYWxsQ2hhcnMpLnRvQ29udGFpbignwrsnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NwZWNpYWxDb25maWcnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9ydHMgc3BlY2lhbENvbmZpZyBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3BlY2lhbENvbmZpZykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2Ygc3BlY2lhbENvbmZpZykudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGhhc1ByZXZpZXcgcHJvcGVydHkgc2V0IHRvIHRydWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3BlY2lhbENvbmZpZykudG9IYXZlUHJvcGVydHkoJ2hhc1ByZXZpZXcnLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgY2hhcmFjdGVycyBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChzcGVjaWFsQ29uZmlnKS50b0hhdmVQcm9wZXJ0eSgnY2hhcmFjdGVycycpO1xuICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkoc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgY29ycmVjdCBjaGFyYWN0ZXIgc3RydWN0dXJlIHdpdGggbWV0YWRhdGEnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgICAgc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBleHBlY3QoQXJyYXkuaXNBcnJheShyb3cpKS50b0JlKHRydWUpO1xuICAgICAgICByb3cuZm9yRWFjaCgoY2hhcikgPT4ge1xuICAgICAgICAgIGV4cGVjdChjaGFyKS50b0hhdmVQcm9wZXJ0eSgndW5pY29kZScpO1xuICAgICAgICAgIGV4cGVjdChjaGFyKS50b0hhdmVQcm9wZXJ0eSgnZGVzY3JpcHRpb24nKTtcbiAgICAgICAgICBleHBlY3QoY2hhcikudG9IYXZlUHJvcGVydHkoJ3dyaXRlJyk7XG4gICAgICAgICAgZXhwZWN0KGNoYXIpLnRvSGF2ZVByb3BlcnR5KCdsYWJlbCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luY2x1ZGVzIGN1cnJlbmN5IHN5bWJvbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhbGxDaGFycyA9IHNwZWNpYWxDb25maWcuY2hhcmFjdGVycy5mbGF0KCk7XG4gICAgICBjb25zdCBldXJvQ2hhciA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMud3JpdGUgPT09ICfigqwnKTtcbiAgICAgIGV4cGVjdChldXJvQ2hhcikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChldXJvQ2hhci51bmljb2RlKS50b0JlKCdVKzIwQUMnKTtcbiAgICAgIGV4cGVjdChldXJvQ2hhci5kZXNjcmlwdGlvbikudG9CZSgnRVVSTyBTSUdOJyk7XG5cbiAgICAgIGNvbnN0IGNlbnRDaGFyID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy53cml0ZSA9PT0gJ8KiJyk7XG4gICAgICBleHBlY3QoY2VudENoYXIpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IHBvdW5kQ2hhciA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMud3JpdGUgPT09ICfCoycpO1xuICAgICAgZXhwZWN0KHBvdW5kQ2hhcikudG9CZURlZmluZWQoKTtcblxuICAgICAgY29uc3QgeWVuQ2hhciA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMud3JpdGUgPT09ICfCpScpO1xuICAgICAgZXhwZWN0KHllbkNoYXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgYWNjZW50ZWQgY2hhcmFjdGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbENoYXJzID0gc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzLmZsYXQoKTtcbiAgICAgIGNvbnN0IGNoYXJzID0gWyfDoScsICfDqScsICfDrScsICfDsycsICfDuicsICfDsSddO1xuICAgICAgY2hhcnMuZm9yRWFjaCgoY2hhcikgPT4ge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMud3JpdGUgPT09IGNoYXIpO1xuICAgICAgICBleHBlY3QoZm91bmQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdpbmNsdWRlcyBzcGFjZSBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsQ2hhcnMgPSBzcGVjaWFsQ29uZmlnLmNoYXJhY3RlcnMuZmxhdCgpO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gYWxsQ2hhcnMubWFwKChjKSA9PiBjLmRlc2NyaXB0aW9uKTtcbiAgICAgIGV4cGVjdChkZXNjcmlwdGlvbnMpLnRvQ29udGFpbignTk8tQlJFQUsgU1BBQ0UnKTtcbiAgICAgIGV4cGVjdChkZXNjcmlwdGlvbnMpLnRvQ29udGFpbignSEFJUiBTUEFDRScpO1xuICAgICAgZXhwZWN0KGRlc2NyaXB0aW9ucykudG9Db250YWluKCdUSElOIFNQQUNFJyk7XG4gICAgICBleHBlY3QoZGVzY3JpcHRpb25zKS50b0NvbnRhaW4oJ0VNIFNQQUNFJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgZGlhY3JpdGljcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbENoYXJzID0gc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzLmZsYXQoKTtcbiAgICAgIGNvbnN0IGFjdXRlQWNjZW50ID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy5kZXNjcmlwdGlvbiA9PT0gJ0FDVVRFIEFDQ0VOVCcpO1xuICAgICAgZXhwZWN0KGFjdXRlQWNjZW50KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICBjb25zdCBjaXJjdW1mbGV4ID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy5kZXNjcmlwdGlvbiA9PT0gJ0NJUkNVTUZMRVggQUNDRU5UJyk7XG4gICAgICBleHBlY3QoY2lyY3VtZmxleCkudG9CZURlZmluZWQoKTtcblxuICAgICAgY29uc3QgZ3JhdmUgPSBhbGxDaGFycy5maW5kKChjKSA9PiBjLmRlc2NyaXB0aW9uID09PSAnR1JBVkUgQUNDRU5UJyk7XG4gICAgICBleHBlY3QoZ3JhdmUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IGRpYWVyZXNpcyA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMuZGVzY3JpcHRpb24gPT09ICdESUFFUkVTSVMnKTtcbiAgICAgIGV4cGVjdChkaWFlcmVzaXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgcHVuY3R1YXRpb24gbWFya3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhbGxDaGFycyA9IHNwZWNpYWxDb25maWcuY2hhcmFjdGVycy5mbGF0KCk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhbGxDaGFycy5tYXAoKGMpID0+IGMuZGVzY3JpcHRpb24pO1xuICAgICAgZXhwZWN0KGRlc2NyaXB0aW9ucykudG9Db250YWluKCdJTlZFUlRFRCBRVUVTVElPTiBNQVJLJyk7XG4gICAgICBleHBlY3QoZGVzY3JpcHRpb25zKS50b0NvbnRhaW4oJ0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksnKTtcbiAgICAgIGV4cGVjdChkZXNjcmlwdGlvbnMpLnRvQ29udGFpbignU0VDVElPTiBTSUdOJyk7XG4gICAgICBleHBlY3QoZGVzY3JpcHRpb25zKS50b0NvbnRhaW4oJ0JVTExFVCcpO1xuICAgICAgZXhwZWN0KGRlc2NyaXB0aW9ucykudG9Db250YWluKCdIT1JJWk9OVEFMIEVMTElQU0lTJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgcXVvdGF0aW9uIG1hcmtzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsQ2hhcnMgPSBzcGVjaWFsQ29uZmlnLmNoYXJhY3RlcnMuZmxhdCgpO1xuICAgICAgY29uc3QgbGVmdFF1b3RlID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy5kZXNjcmlwdGlvbiA9PT0gJ0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLJyk7XG4gICAgICBleHBlY3QobGVmdFF1b3RlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICBjb25zdCByaWdodFF1b3RlID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy5kZXNjcmlwdGlvbiA9PT0gJ1JJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSycpO1xuICAgICAgZXhwZWN0KHJpZ2h0UXVvdGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5jbHVkZXMgZGFzaGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWxsQ2hhcnMgPSBzcGVjaWFsQ29uZmlnLmNoYXJhY3RlcnMuZmxhdCgpO1xuICAgICAgY29uc3QgZW5EYXNoID0gYWxsQ2hhcnMuZmluZCgoYykgPT4gYy5kZXNjcmlwdGlvbiA9PT0gJ0VOIERBU0gnKTtcbiAgICAgIGV4cGVjdChlbkRhc2gpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IGVtRGFzaCA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMuZGVzY3JpcHRpb24gPT09ICdFTSBEQVNIJyk7XG4gICAgICBleHBlY3QoZW1EYXNoKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICBjb25zdCBtaW51cyA9IGFsbENoYXJzLmZpbmQoKGMpID0+IGMuZGVzY3JpcHRpb24gPT09ICdNSU5VUyBTSUdOJyk7XG4gICAgICBleHBlY3QobWludXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc29tZSBjaGFyYWN0ZXJzIGhhdmUgZXh0cmFQcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFsbENoYXJzID0gc3BlY2lhbENvbmZpZy5jaGFyYWN0ZXJzLmZsYXQoKTtcbiAgICAgIGNvbnN0IGNoYXJzV2l0aEV4dHJhUHJvcHMgPSBhbGxDaGFycy5maWx0ZXIoKGMpID0+IGMuZXh0cmFQcm9wcyk7XG4gICAgICBleHBlY3QoY2hhcnNXaXRoRXh0cmFQcm9wcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFNO0VBQy9CQSxRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07SUFDOUJDLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxZQUFNO01BQ3ZDQyxNQUFNLENBQUNDLDZCQUFhLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7TUFDbkNGLE1BQU0sS0FBQUcsUUFBQSxhQUFRRiw2QkFBYSxFQUFDLENBQUNHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBRUZM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